Sha256: c84d55f3ae3ae62ef04d907c7dc8ac710ff2752bbff90fb5b5308a047d83f068

Contents?: true

Size: 1.79 KB

Versions: 2

Compression:

Stored size: 1.79 KB

Contents

module Pione
  module Transformer
    # DocumentTransformer is a transformer for syntax tree of document.
    class DocumentTransformer < Parslet::Transform
      include LiteralTransformer
      include FeatureExprTransformer
      include ExprTransformer
      include FlowElementTransformer
      include BlockTransformer
      include RuleDefinitionTransformer

      # @param package_name [String]
      #   package name of the document
      def initialize(package_name="Main")
        super()
        @current_package_name = package_name
        Thread.current[:current_package_name] = @current_package_name
      end

      def check_model_type(data, type)
        data.pione_model_type == type
      end

      rule(:toplevel_assignment_line => simple(:assignment)) {
        Naming.AssignmentLine(assignment.set_toplevel(true))
      }

      rule(:toplevel_param_line => simple(:naming_param_line)) {
        assignment = naming_param_line.value
        assignment.set_toplevel(true)
        assignment.set_user_param(true)
        Naming.ParamLine(assignment)
      }

      # Transform +:param_block+ as Naming::ParamBlock.
      rule(:param_block => subtree(:tree)) {
        param_type = tree[:param_type]
        assignments = tree[:in_block_assignments]
        _assignments = assignments.map do |assignment|
          assignment.set_toplevel(true)
          assignment.set_user_param(true)
          case param_type
          when "Advanced"
            assignment.set_param_type(:advanced)
          else
            assignment.set_param_type(:basic)
          end
        end
        Naming.ParamBlock(_assignments)
      }

      # Transform +:package+ as Naming::Package.
      rule(:package => subtree(:tree)) {
        @current_package = Naming.Package(tree[:package_name].to_s)
      }
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
pione-0.2.2 lib/pione/transformer/document-transformer.rb
pione-0.2.1 lib/pione/transformer/document-transformer.rb