Sha256: ae9e0bd409bb068740e18ec2ae95ca007275b8a1f86043aefd816bb8b7eced35
Contents?: true
Size: 1.29 KB
Versions: 2
Compression:
Stored size: 1.29 KB
Contents
# frozen_string_literal: true require 'sexpistol/parser' require 'sexpistol/version' require 'sexpistol/s_expression_array' class Sexpistol def self.parse(string, parse_ruby_keyword_literals: false) tree = Sexpistol::Parser.new(string).parse return convert_ruby_keyword_literals(tree) if parse_ruby_keyword_literals tree end def self.to_sexp(data, scheme_compatability: false) data = convert_scheme_literals(data) if scheme_compatability return "\"#{data}\"" if data.is_a?(String) return data.to_s unless data.is_a?(Array) if data.is_a?(SExpressionArray) data.map { |x| to_sexp(x, scheme_compatability: scheme_compatability) }.join(' ') else "(#{data.map { |x| to_sexp(x, scheme_compatability: scheme_compatability) }.join(' ')})" end end def self.convert_ruby_keyword_literals(expression) recursive_map(expression) do |x| case x when :nil then nil when :true then true when :false then false else x end end end def self.convert_scheme_literals(data) case data when nil then [] when true then :'#t' when false then :'#f' else data end end def self.recursive_map(data, &block) return data.map { |x| recursive_map(x, &block) } if data.is_a?(Array) block.call(data) end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
sexpistol-0.1.1 | lib/sexpistol.rb |
sexpistol-0.1.0 | lib/sexpistol.rb |