Sha256: d42ed19dc3f2d4b58a5509483e26fdeebe55183af4eedc6c60c86e3fbc5c3bb2

Contents?: true

Size: 1.2 KB

Versions: 6

Compression:

Stored size: 1.2 KB

Contents

require 'parslet'

module Junoser
  class Transformer < Parslet::Transform
    rule(config: simple(:config)) do
      config.to_s
    end

    rule(config: sequence(:configs)) do
      configs.join("\n")
    end

    rule(arg: simple(:arg)) do
      "arg(#{arg})"
    end

    rule(label: simple(:label)) do
      label.to_s
    end

    rule(label: simple(:label), child: simple(:child)) do
      "#{label}\n#{child}"
    end

    rule(label: simple(:label), child: sequence(:children)) do
      Junoser::Transformer.remove_slash_asterisk children
      %[#{label}\n#{children.join("\n")}]
    end

    rule(statement: simple(:statement), argument: simple(:argument)) do
      "#{statement} #{argument}"
    end

    rule(statement: simple(:statement), argument: sequence(:arguments)) do
      Junoser::Transformer.remove_slash_asterisk arguments
      %[#{statement}\n#{arguments.join("\n")}]
    end

    rule(oneline: simple(:str)) do
      str.to_s.gsub("\n", ' ')
    end


    def self.remove_slash_asterisk(array)
      open = array.index("arg(/*)\n")
      close = array.index("arg(*/)")

      if open && close
        (open..close).reverse_each do |i|
          array.delete_at i
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
junoser-0.2.1 lib/junoser/transformer.rb
junoser-0.2.0 lib/junoser/transformer.rb
junoser-0.1.6 lib/junoser/transformer.rb
junoser-0.1.5 lib/junoser/transformer.rb
junoser-0.1.4 lib/junoser/transformer.rb
junoser-0.1.3 lib/junoser/transformer.rb