PHP 8.2.31
Preview: tree_builder.rb Size: 2.05 KB
//proc/thread-self/root/opt/alt/ruby19/lib64/ruby/1.9.1/psych/tree_builder.rb

require 'psych/handler'

module Psych
  ###
  # This class works in conjunction with Psych::Parser to build an in-memory
  # parse tree that represents a YAML document.
  #
  # == Example
  #
  #   parser = Psych::Parser.new Psych::TreeBuilder.new
  #   parser.parse('--- foo')
  #   tree = parser.handler.root
  #
  # See Psych::Handler for documentation on the event methods used in this
  # class.
  class TreeBuilder < Psych::Handler
    # Returns the root node for the built tree
    attr_reader :root

    # Create a new TreeBuilder instance
    def initialize
      @stack = []
      @last  = nil
      @root  = nil
    end

    %w{
      Sequence
      Mapping
    }.each do |node|
      class_eval %{
        def start_#{node.downcase}(anchor, tag, implicit, style)
          n = Nodes::#{node}.new(anchor, tag, implicit, style)
          @last.children << n
          push n
        end

        def end_#{node.downcase}
          pop
        end
      }
    end

    ###
    # Handles start_document events with +version+, +tag_directives+,
    # and +implicit+ styling.
    #
    # See Psych::Handler#start_document
    def start_document version, tag_directives, implicit
      n = Nodes::Document.new version, tag_directives, implicit
      @last.children << n
      push n
    end

    ###
    # Handles end_document events with +version+, +tag_directives+,
    # and +implicit+ styling.
    #
    # See Psych::Handler#start_document
    def end_document implicit_end = !streaming?
      @last.implicit_end = implicit_end
      pop
    end

    def start_stream encoding
      @root = Nodes::Stream.new(encoding)
      push @root
    end

    def end_stream
      pop
    end

    def scalar value, anchor, tag, plain, quoted, style
      s = Nodes::Scalar.new(value,anchor,tag,plain,quoted,style)
      @last.children << s
      s
    end

    def alias anchor
      @last.children << Nodes::Alias.new(anchor)
    end

    private
    def push value
      @stack.push value
      @last = value
    end

    def pop
      x = @stack.pop
      @last = @stack.last
      x
    end
  end
end

Directory Contents

Dirs: 4 × Files: 14

Name Size Perms Modified Actions
handlers DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
json DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
nodes DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
visitors DIR
- drwxr-xr-x 2024-03-03 22:48:05
Edit Download
2.02 KB lrw-r--r-- 2011-01-19 23:05:53
Edit Download
876 B lrw-r--r-- 2012-03-29 01:25:11
Edit Download
2.40 KB lrw-r--r-- 2011-06-13 03:54:53
Edit Download
6.67 KB lrw-r--r-- 2012-08-07 20:50:05
Edit Download
2.33 KB lrw-r--r-- 2011-05-15 11:55:52
Edit Download
45 B lrw-r--r-- 2010-03-30 10:46:06
Edit Download
1.64 KB lrw-r--r-- 2012-03-29 01:25:11
Edit Download
3.29 KB lrw-r--r-- 2012-03-29 01:25:11
Edit Download
44 B lrw-r--r-- 2010-03-30 10:46:06
Edit Download
851 B lrw-r--r-- 2011-05-15 11:55:52
Edit Download
483 B lrw-r--r-- 2011-02-26 13:59:48
Edit Download
525 B lrw-r--r-- 2012-03-29 01:46:14
Edit Download
2.05 KB lrw-r--r-- 2012-03-29 01:25:11
Edit Download
206 B lrw-r--r-- 2011-01-21 19:11:53
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).