radius-ts 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,34 @@
1
+ %w(rubygems rake rake/clean fileutils newgem rubigen hoe).each { |f| require f }
2
+
3
+ require 'lib/radius/version'
4
+
5
+ # Generate all the Rake tasks
6
+ # Run 'rake -T' to see list of generated tasks (from gem root directory)
7
+ Hoe.spec 'radius-ts' do |p|
8
+ p.version = Radius::Version.to_s
9
+ p.url = "http://github.com/xtoddx/radius-ts"
10
+ p.developer('Todd Willey', 'todd@rubidine.com')
11
+ p.author = [
12
+ "John W. Long (me@johnwlong.com)",
13
+ "David Chelimsky (dchelimsky@gmail.com)",
14
+ "Bryce Kerley (bkerley@brycekerley.net)",
15
+ "Todd Willey (todd@rubidine.com)"
16
+ ]
17
+ p.changes = p.paragraphs_of("CHANGELOG", 1..2).join("\n\n")
18
+ p.rubyforge_name = p.name
19
+ p.extra_dev_deps = [
20
+ ['newgem', ">= #{::Newgem::VERSION}"]
21
+ ]
22
+ p.readme_file = 'README.rdoc'
23
+ p.extra_rdoc_files |= %w(README.rdoc QUICKSTART.rdoc)
24
+ p.clean_globs |= %w(**/.DS_Store tmp *.log) # Remove these files on "rake clean"
25
+ path = (p.rubyforge_name == p.name) ? p.rubyforge_name : "\#{p.rubyforge_name}/\#{p.name}"
26
+ p.remote_rdoc_dir = File.join(path.gsub(/^#{p.rubyforge_name}\/?/,''), 'rdoc')
27
+ p.rsync_args = '-av --delete --ignore-errors'
28
+ p.test_globs = "test/**/*_test.rb"
29
+ p.summary = "Radius templating language with thread safety patches."
30
+ p.description = "A templating lanuage based on MovableType and TextPattern. Originally implemented by John Long."
31
+ end
32
+
33
+ require 'newgem/tasks' # load /tasks/*.rake
34
+ Dir['tasks/**/*.rake'].each { |t| load t }
@@ -0,0 +1,10 @@
1
+ require 'radius/version'
2
+ require 'radius/error'
3
+ require 'radius/tag_definitions'
4
+ require 'radius/delegating_open_struct'
5
+ require 'radius/tag_binding'
6
+ require 'radius/context'
7
+ require 'radius/parse_tag'
8
+ require 'radius/parser/scan'
9
+ require 'radius/parser'
10
+ require 'radius/utility'
@@ -0,0 +1,147 @@
1
+ module Radius
2
+ #
3
+ # A context contains the tag definitions which are available for use in a template.
4
+ # See the QUICKSTART for a detailed explaination its
5
+ # usage.
6
+ #
7
+ class Context
8
+ # A hash of tag definition blocks that define tags accessible on a Context.
9
+ attr_accessor :definitions # :nodoc:
10
+ attr_accessor :globals # :nodoc:
11
+
12
+ # Creates a new Context object.
13
+ def initialize(&block)
14
+ @definitions = {}
15
+ @tag_binding_stack = []
16
+ @globals = DelegatingOpenStruct.new
17
+ with(&block) if block_given?
18
+ end
19
+
20
+ # Yield an instance of self for tag definitions:
21
+ #
22
+ # context.with do |c|
23
+ # c.define_tag 'test' do
24
+ # 'test'
25
+ # end
26
+ # end
27
+ #
28
+ def with
29
+ yield self
30
+ self
31
+ end
32
+
33
+ # Creates a tag definition on a context. Several options are available to you
34
+ # when creating a tag:
35
+ #
36
+ # +for+:: Specifies an object that the tag is in reference to. This is
37
+ # applicable when a block is not passed to the tag, or when the
38
+ # +expose+ option is also used.
39
+ #
40
+ # +expose+:: Specifies that child tags should be set for each of the methods
41
+ # contained in this option. May be either a single symbol/string or
42
+ # an array of symbols/strings.
43
+ #
44
+ # +attributes+:: Specifies whether or not attributes should be exposed
45
+ # automatically. Useful for ActiveRecord objects. Boolean. Defaults
46
+ # to +true+.
47
+ #
48
+ def define_tag(name, options = {}, &block)
49
+ type = Utility.impartial_hash_delete(options, :type).to_s
50
+ klass = Utility.constantize('Radius::TagDefinitions::' + Utility.camelize(type) + 'TagFactory') rescue raise(ArgumentError.new("Undefined type `#{type}' in options hash"))
51
+ klass.new(self).define_tag(name, options, &block)
52
+ end
53
+
54
+ # Returns the value of a rendered tag. Used internally by Parser#parse.
55
+ def render_tag(name, attributes = {}, &block)
56
+ if name =~ /^(.+?):(.+)$/
57
+ render_tag($1) { render_tag($2, attributes, &block) }
58
+ else
59
+ tag_definition_block = @definitions[qualified_tag_name(name.to_s)]
60
+ if tag_definition_block
61
+ stack(name, attributes, block) do |tag|
62
+ tag_definition_block.call(tag).to_s
63
+ end
64
+ else
65
+ tag_missing(name, attributes, &block)
66
+ end
67
+ end
68
+ end
69
+
70
+ # Like method_missing for objects, but fired when a tag is undefined.
71
+ # Override in your own Context to change what happens when a tag is
72
+ # undefined. By default this method raises an UndefinedTagError.
73
+ def tag_missing(name, attributes, &block)
74
+ raise UndefinedTagError.new(name)
75
+ end
76
+
77
+ # Returns the state of the current render stack. Useful from inside
78
+ # a tag definition. Normally just use TagBinding#nesting.
79
+ def current_nesting
80
+ @tag_binding_stack.collect { |tag| tag.name }.join(':')
81
+ end
82
+
83
+ # make a usable copy of this context
84
+ def dup # :nodoc:
85
+ rv = self.class.new
86
+ rv.globals = globals.dup
87
+ rv.definitions = definitions.dup
88
+ rv
89
+ end
90
+
91
+ private
92
+
93
+ # A convienence method for managing the various parts of the
94
+ # tag binding stack.
95
+ def stack(name, attributes, block)
96
+ previous = @tag_binding_stack.last
97
+ previous_locals = previous.nil? ? globals : previous.locals
98
+ locals = DelegatingOpenStruct.new(previous_locals)
99
+ binding = TagBinding.new(self, locals, name, attributes, block)
100
+ @tag_binding_stack.push(binding)
101
+ result = yield(binding)
102
+ @tag_binding_stack.pop
103
+ result
104
+ end
105
+
106
+ # Returns a fully qualified tag name based on state of the
107
+ # tag binding stack.
108
+ def qualified_tag_name(name)
109
+ nesting_parts = @tag_binding_stack.collect { |tag| tag.name }
110
+ nesting_parts << name unless nesting_parts.last == name
111
+ specific_name = nesting_parts.join(':') # specific_name always has the highest specificity
112
+ unless @definitions.has_key? specific_name
113
+ possible_matches = @definitions.keys.grep(/(^|:)#{name}$/)
114
+ specificity = possible_matches.inject({}) { |hash, tag| hash[numeric_specificity(tag, nesting_parts)] = tag; hash }
115
+ max = specificity.keys.max
116
+ if max != 0
117
+ specificity[max]
118
+ else
119
+ name
120
+ end
121
+ else
122
+ specific_name
123
+ end
124
+ end
125
+
126
+ # Returns the specificity for +tag_name+ at nesting defined
127
+ # by +nesting_parts+ as a number.
128
+ def numeric_specificity(tag_name, nesting_parts)
129
+ nesting_parts = nesting_parts.dup
130
+ name_parts = tag_name.split(':')
131
+ specificity = 0
132
+ value = 1
133
+ if nesting_parts.last == name_parts.last
134
+ while nesting_parts.size > 0
135
+ if nesting_parts.last == name_parts.last
136
+ specificity += value
137
+ name_parts.pop
138
+ end
139
+ nesting_parts.pop
140
+ value *= 0.1
141
+ end
142
+ specificity = 0 if (name_parts.size > 0)
143
+ end
144
+ specificity
145
+ end
146
+ end
147
+ end
@@ -0,0 +1,37 @@
1
+ module Radius
2
+ class DelegatingOpenStruct # :nodoc:
3
+ attr_accessor :object
4
+
5
+ def initialize(object = nil)
6
+ @object = object
7
+ @hash = {}
8
+ end
9
+
10
+ def dup
11
+ rv = self.class.new
12
+ rv.instance_variable_set(:@hash, @hash.dup)
13
+ rv
14
+ end
15
+
16
+ def method_missing(method, *args, &block)
17
+ symbol = (method.to_s =~ /^(.*?)=$/) ? $1.intern : method
18
+ if (0..1).include?(args.size)
19
+ if args.size == 1
20
+ @hash[symbol] = args.first
21
+ else
22
+ if @hash.has_key?(symbol)
23
+ @hash[symbol]
24
+ else
25
+ unless object.nil?
26
+ @object.send(method, *args, &block)
27
+ else
28
+ nil
29
+ end
30
+ end
31
+ end
32
+ else
33
+ super
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,43 @@
1
+ module Radius
2
+ # Abstract base class for all parsing errors.
3
+ class ParseError < StandardError
4
+ end
5
+
6
+ # Occurs when the Parser expects an end tag for one tag and finds the end tag for another.
7
+ class WrongEndTagError < ParseError
8
+ def initialize(expected_tag, got_tag, stack)
9
+ stack_message = " with stack #{stack.inspect}" if stack
10
+ super("wrong end tag `#{got_tag}' found for start tag `#{expected_tag}'#{stack_message}")
11
+ end
12
+ end
13
+
14
+ # Occurs when Parser cannot find an end tag for a given tag in a template or when
15
+ # tags are miss-matched in a template.
16
+ class MissingEndTagError < ParseError
17
+ # Create a new MissingEndTagError object for +tag_name+.
18
+ def initialize(tag_name, stack)
19
+ stack_message = " with stack #{stack.inspect}" if stack
20
+ super("end tag not found for start tag `#{tag_name}'#{stack_message}")
21
+ end
22
+ end
23
+
24
+ # Occurs when Context#render_tag cannot find the specified tag on a Context.
25
+ class UndefinedTagError < ParseError
26
+ # Create a new UndefinedTagError object for +tag_name+.
27
+ def initialize(tag_name)
28
+ super("undefined tag `#{tag_name}'")
29
+ end
30
+ end
31
+
32
+ class TastelessTagError < ParseError #:nodoc:
33
+ def initialize(tag, stack)
34
+ super("internal error with tasteless tag #{tag.inspect} and stack #{stack.inspect}")
35
+ end
36
+ end
37
+
38
+ class UndefinedFlavorError < ParseError #:nodoc:
39
+ def initialize(tag, stack)
40
+ super("internal error with unknown flavored tag #{tag.inspect} and stack #{stack.inspect}")
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,24 @@
1
+ module Radius
2
+ class ParseTag # :nodoc:
3
+ def initialize(&b)
4
+ @block = b
5
+ end
6
+
7
+ def on_parse(&b)
8
+ @block = b
9
+ end
10
+
11
+ def to_s
12
+ @block.call(self)
13
+ end
14
+ end
15
+
16
+ class ParseContainerTag < ParseTag # :nodoc:
17
+ attr_accessor :name, :attributes, :contents
18
+
19
+ def initialize(name = "", attributes = {}, contents = [], &b)
20
+ @name, @attributes, @contents = name, attributes, contents
21
+ super(&b)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,64 @@
1
+ module Radius
2
+ #
3
+ # The Radius parser. Initialize a parser with a Context object that
4
+ # defines how tags should be expanded. See the QUICKSTART[link:files/QUICKSTART.html]
5
+ # for a detailed explaination of its usage.
6
+ #
7
+ class Parser
8
+ # The Context object used to expand template tags.
9
+ attr_accessor :context
10
+
11
+ # The string that prefixes all tags that are expanded by a parser
12
+ # (the part in the tag name before the first colon).
13
+ attr_accessor :tag_prefix
14
+
15
+ # Creates a new parser object initialized with a Context.
16
+ def initialize(context = Context.new, options = {})
17
+ if context.kind_of?(Hash) and options.empty?
18
+ options, context = context, (context[:context] || context['context'])
19
+ end
20
+ options = Utility.symbolize_keys(options)
21
+ self.context = context ? context.dup : Context.new
22
+ self.tag_prefix = options[:tag_prefix] || 'radius'
23
+ end
24
+
25
+ # Parses string for tags, expands them, and returns the result.
26
+ def parse(string)
27
+ @stack = [ParseContainerTag.new { |t| t.contents.to_s }]
28
+ tokenize(string)
29
+ stack_up
30
+ @stack.last.to_s
31
+ end
32
+
33
+ protected
34
+ # Convert the string into a list of text blocks and scanners (tokens)
35
+ def tokenize(string)
36
+ @tokens = Scanner.new.operate(tag_prefix, string)
37
+ end
38
+
39
+ def stack_up
40
+ @tokens.each do |t|
41
+ if t.is_a? String
42
+ @stack.last.contents << t
43
+ next
44
+ end
45
+ case t[:flavor]
46
+ when :open
47
+ @stack.push(ParseContainerTag.new(t[:name], t[:attrs]))
48
+ when :self
49
+ @stack.last.contents << ParseTag.new {@context.render_tag(t[:name], t[:attrs])}
50
+ when :close
51
+ popped = @stack.pop
52
+ raise WrongEndTagError.new(popped.name, t[:name], @stack) if popped.name != t[:name]
53
+ popped.on_parse { |b| @context.render_tag(popped.name, popped.attributes) { b.contents.to_s } }
54
+ @stack.last.contents << popped
55
+ when :tasteless
56
+ raise TastelessTagError.new(t, @stack)
57
+ else
58
+ raise UndefinedFlavorError.new(t, @stack)
59
+ end
60
+ end
61
+ raise MissingEndTagError.new(@stack.last.name, @stack) if @stack.length != 1
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,1194 @@
1
+
2
+ # line 1 "scan.rl"
3
+
4
+ # line 83 "scan.rl"
5
+
6
+
7
+ module Radius
8
+ class Scanner
9
+ def operate(prefix, data)
10
+ buf = ""
11
+ csel = ""
12
+ @prematch = ''
13
+ @starttag = nil
14
+ @attrs = {}
15
+ @flavor = :tasteless
16
+ @cursor = 0
17
+ @tagstart = 0
18
+ @nodes = ['']
19
+ remainder = data.dup
20
+
21
+ until remainder.length == 0
22
+ p = perform_parse(prefix, remainder)
23
+ remainder = remainder[p..-1]
24
+ end
25
+
26
+ return @nodes
27
+ end
28
+
29
+ private
30
+ def perform_parse(prefix, data)
31
+ stack = []
32
+ p = 0
33
+ ts = 0
34
+ te = 0
35
+ act = 0
36
+ eof = data.length
37
+
38
+ @prefix = prefix
39
+
40
+ # line 41 "scan.rb"
41
+ class << self
42
+ attr_accessor :_parser_trans_keys
43
+ private :_parser_trans_keys, :_parser_trans_keys=
44
+ end
45
+ self._parser_trans_keys = [
46
+ 0, 0, 45, 122, 45, 122,
47
+ 9, 122, 9, 122, 9,
48
+ 122, 9, 61, 9, 39,
49
+ 34, 92, 34, 92, 9, 122,
50
+ 9, 122, 62, 62, 34,
51
+ 92, 9, 122, 9, 122,
52
+ 9, 122, 9, 92, 9, 92,
53
+ 9, 122, 34, 92, 34,
54
+ 92, 34, 92, 9, 122,
55
+ 39, 92, 39, 92, 9, 122,
56
+ 9, 122, 9, 92, 9,
57
+ 92, 34, 92, 34, 92,
58
+ 9, 122, 9, 122, 9, 122,
59
+ 9, 92, 9, 92, 9,
60
+ 122, 34, 92, 9, 122,
61
+ 9, 122, 39, 92, 39, 92,
62
+ 45, 122, 45, 122, 45,
63
+ 122, 9, 122, 9, 62,
64
+ 0, 0, 60, 60, 45, 122,
65
+ 0, 0, 0, 0, 34,
66
+ 92, 34, 92, 34, 92,
67
+ 34, 92, 39, 92, 39, 92,
68
+ 0, 0, 0
69
+ ]
70
+
71
+ class << self
72
+ attr_accessor :_parser_key_spans
73
+ private :_parser_key_spans, :_parser_key_spans=
74
+ end
75
+ self._parser_key_spans = [
76
+ 0, 78, 78, 114, 114, 114, 53, 31,
77
+ 59, 59, 114, 114, 1, 59, 114, 114,
78
+ 114, 84, 84, 114, 59, 59, 59, 114,
79
+ 54, 54, 114, 114, 84, 84, 59, 59,
80
+ 114, 114, 114, 84, 84, 114, 59, 114,
81
+ 114, 54, 54, 78, 78, 78, 114, 54,
82
+ 0, 1, 78, 0, 0, 59, 59, 59,
83
+ 59, 54, 54, 0
84
+ ]
85
+
86
+ class << self
87
+ attr_accessor :_parser_index_offsets
88
+ private :_parser_index_offsets, :_parser_index_offsets=
89
+ end
90
+ self._parser_index_offsets = [
91
+ 0, 0, 79, 158, 273, 388, 503, 557,
92
+ 589, 649, 709, 824, 939, 941, 1001, 1116,
93
+ 1231, 1346, 1431, 1516, 1631, 1691, 1751, 1811,
94
+ 1926, 1981, 2036, 2151, 2266, 2351, 2436, 2496,
95
+ 2556, 2671, 2786, 2901, 2986, 3071, 3186, 3246,
96
+ 3361, 3476, 3531, 3586, 3665, 3744, 3823, 3938,
97
+ 3993, 3994, 3996, 4075, 4076, 4077, 4137, 4197,
98
+ 4257, 4317, 4372, 4427
99
+ ]
100
+
101
+ class << self
102
+ attr_accessor :_parser_indicies
103
+ private :_parser_indicies, :_parser_indicies=
104
+ end
105
+ self._parser_indicies = [
106
+ 1, 1, 0, 1, 1, 1, 1, 1,
107
+ 1, 1, 1, 1, 1, 2, 0, 0,
108
+ 0, 0, 1, 0, 1, 1, 1, 1,
109
+ 1, 1, 1, 1, 1, 1, 1, 1,
110
+ 1, 1, 1, 1, 1, 1, 1, 1,
111
+ 1, 1, 1, 1, 1, 1, 0, 0,
112
+ 0, 0, 1, 0, 1, 1, 1, 1,
113
+ 1, 1, 1, 1, 1, 1, 1, 1,
114
+ 1, 1, 1, 1, 1, 1, 1, 1,
115
+ 1, 1, 1, 1, 1, 1, 0, 3,
116
+ 3, 0, 3, 3, 3, 3, 3, 3,
117
+ 3, 3, 3, 3, 3, 0, 0, 0,
118
+ 0, 3, 0, 3, 3, 3, 3, 3,
119
+ 3, 3, 3, 3, 3, 3, 3, 3,
120
+ 3, 3, 3, 3, 3, 3, 3, 3,
121
+ 3, 3, 3, 3, 3, 0, 0, 0,
122
+ 0, 3, 0, 3, 3, 3, 3, 3,
123
+ 3, 3, 3, 3, 3, 3, 3, 3,
124
+ 3, 3, 3, 3, 3, 3, 3, 3,
125
+ 3, 3, 3, 3, 3, 0, 4, 4,
126
+ 4, 4, 4, 0, 0, 0, 0, 0,
127
+ 0, 0, 0, 0, 0, 0, 0, 0,
128
+ 0, 0, 0, 0, 0, 4, 0, 0,
129
+ 0, 0, 0, 0, 0, 0, 0, 0,
130
+ 0, 0, 5, 5, 6, 5, 5, 5,
131
+ 5, 5, 5, 5, 5, 5, 5, 5,
132
+ 0, 0, 0, 7, 5, 0, 5, 5,
133
+ 5, 5, 5, 5, 5, 5, 5, 5,
134
+ 5, 5, 5, 5, 5, 5, 5, 5,
135
+ 5, 5, 5, 5, 5, 5, 5, 5,
136
+ 0, 0, 0, 0, 5, 0, 5, 5,
137
+ 5, 5, 5, 5, 5, 5, 5, 5,
138
+ 5, 5, 5, 5, 5, 5, 5, 5,
139
+ 5, 5, 5, 5, 5, 5, 5, 5,
140
+ 0, 8, 8, 8, 8, 8, 0, 0,
141
+ 0, 0, 0, 0, 0, 0, 0, 0,
142
+ 0, 0, 0, 0, 0, 0, 0, 0,
143
+ 8, 0, 0, 0, 0, 0, 0, 0,
144
+ 0, 0, 0, 0, 0, 9, 9, 10,
145
+ 9, 9, 9, 9, 9, 9, 9, 9,
146
+ 9, 9, 9, 0, 0, 0, 11, 9,
147
+ 0, 9, 9, 9, 9, 9, 9, 9,
148
+ 9, 9, 9, 9, 9, 9, 9, 9,
149
+ 9, 9, 9, 9, 9, 9, 9, 9,
150
+ 9, 9, 9, 0, 0, 0, 0, 9,
151
+ 0, 9, 9, 9, 9, 9, 9, 9,
152
+ 9, 9, 9, 9, 9, 9, 9, 9,
153
+ 9, 9, 9, 9, 9, 9, 9, 9,
154
+ 9, 9, 9, 0, 13, 13, 13, 13,
155
+ 13, 12, 12, 12, 12, 12, 12, 12,
156
+ 12, 12, 12, 12, 12, 12, 12, 12,
157
+ 12, 12, 12, 13, 12, 12, 12, 12,
158
+ 12, 12, 12, 12, 12, 12, 12, 12,
159
+ 14, 14, 12, 14, 14, 14, 14, 14,
160
+ 14, 14, 14, 14, 14, 14, 12, 12,
161
+ 15, 12, 14, 12, 14, 14, 14, 14,
162
+ 14, 14, 14, 14, 14, 14, 14, 14,
163
+ 14, 14, 14, 14, 14, 14, 14, 14,
164
+ 14, 14, 14, 14, 14, 14, 12, 12,
165
+ 12, 12, 14, 12, 14, 14, 14, 14,
166
+ 14, 14, 14, 14, 14, 14, 14, 14,
167
+ 14, 14, 14, 14, 14, 14, 14, 14,
168
+ 14, 14, 14, 14, 14, 14, 12, 16,
169
+ 16, 16, 16, 16, 12, 12, 12, 12,
170
+ 12, 12, 12, 12, 12, 12, 12, 12,
171
+ 12, 12, 12, 12, 12, 12, 16, 12,
172
+ 12, 12, 12, 12, 12, 12, 12, 12,
173
+ 12, 12, 12, 12, 12, 12, 12, 12,
174
+ 12, 12, 12, 12, 12, 12, 12, 12,
175
+ 12, 12, 12, 17, 12, 17, 17, 17,
176
+ 17, 17, 12, 12, 12, 12, 12, 12,
177
+ 12, 12, 12, 12, 12, 12, 12, 12,
178
+ 12, 12, 12, 12, 17, 12, 18, 12,
179
+ 12, 12, 12, 19, 12, 21, 20, 20,
180
+ 20, 20, 20, 20, 20, 20, 20, 20,
181
+ 20, 20, 20, 20, 20, 20, 20, 20,
182
+ 20, 20, 20, 20, 20, 20, 20, 20,
183
+ 20, 20, 20, 20, 20, 20, 20, 20,
184
+ 20, 20, 20, 20, 20, 20, 20, 20,
185
+ 20, 20, 20, 20, 20, 20, 20, 20,
186
+ 20, 20, 20, 20, 20, 20, 20, 22,
187
+ 20, 24, 23, 23, 23, 23, 23, 23,
188
+ 23, 23, 23, 23, 23, 23, 23, 23,
189
+ 23, 23, 23, 23, 23, 23, 23, 23,
190
+ 23, 23, 23, 23, 23, 23, 23, 23,
191
+ 23, 23, 23, 23, 23, 23, 23, 23,
192
+ 23, 23, 23, 23, 23, 23, 23, 23,
193
+ 23, 23, 23, 23, 23, 23, 23, 23,
194
+ 23, 23, 23, 25, 23, 26, 26, 26,
195
+ 26, 26, 12, 12, 12, 12, 12, 12,
196
+ 12, 12, 12, 12, 12, 12, 12, 12,
197
+ 12, 12, 12, 12, 26, 12, 12, 12,
198
+ 12, 12, 12, 12, 12, 12, 12, 12,
199
+ 12, 27, 27, 28, 27, 27, 27, 27,
200
+ 27, 27, 27, 27, 27, 27, 27, 12,
201
+ 12, 12, 29, 27, 12, 27, 27, 27,
202
+ 27, 27, 27, 27, 27, 27, 27, 27,
203
+ 27, 27, 27, 27, 27, 27, 27, 27,
204
+ 27, 27, 27, 27, 27, 27, 27, 12,
205
+ 12, 12, 12, 27, 12, 27, 27, 27,
206
+ 27, 27, 27, 27, 27, 27, 27, 27,
207
+ 27, 27, 27, 27, 27, 27, 27, 27,
208
+ 27, 27, 27, 27, 27, 27, 27, 12,
209
+ 30, 30, 30, 30, 30, 12, 12, 12,
210
+ 12, 12, 12, 12, 12, 12, 12, 12,
211
+ 12, 12, 12, 12, 12, 12, 12, 30,
212
+ 12, 12, 12, 12, 12, 12, 12, 12,
213
+ 12, 12, 12, 12, 31, 31, 32, 31,
214
+ 31, 31, 31, 31, 31, 31, 31, 31,
215
+ 31, 31, 12, 12, 12, 33, 31, 12,
216
+ 31, 31, 31, 31, 31, 31, 31, 31,
217
+ 31, 31, 31, 31, 31, 31, 31, 31,
218
+ 31, 31, 31, 31, 31, 31, 31, 31,
219
+ 31, 31, 12, 12, 12, 12, 31, 12,
220
+ 31, 31, 31, 31, 31, 31, 31, 31,
221
+ 31, 31, 31, 31, 31, 31, 31, 31,
222
+ 31, 31, 31, 31, 31, 31, 31, 31,
223
+ 31, 31, 12, 34, 12, 35, 23, 23,
224
+ 23, 23, 23, 23, 23, 23, 23, 23,
225
+ 23, 23, 23, 23, 23, 23, 23, 23,
226
+ 23, 23, 23, 23, 23, 23, 23, 23,
227
+ 23, 23, 23, 23, 23, 23, 23, 23,
228
+ 23, 23, 23, 23, 23, 23, 23, 23,
229
+ 23, 23, 23, 23, 23, 23, 23, 23,
230
+ 23, 23, 23, 23, 23, 23, 23, 25,
231
+ 23, 36, 36, 36, 36, 36, 23, 23,
232
+ 23, 23, 23, 23, 23, 23, 23, 23,
233
+ 23, 23, 23, 23, 23, 23, 23, 23,
234
+ 36, 23, 24, 23, 23, 23, 23, 23,
235
+ 23, 23, 23, 23, 23, 37, 37, 38,
236
+ 37, 37, 37, 37, 37, 37, 37, 37,
237
+ 37, 37, 37, 23, 23, 23, 39, 37,
238
+ 23, 37, 37, 37, 37, 37, 37, 37,
239
+ 37, 37, 37, 37, 37, 37, 37, 37,
240
+ 37, 37, 37, 37, 37, 37, 37, 37,
241
+ 37, 37, 37, 23, 25, 23, 23, 37,
242
+ 23, 37, 37, 37, 37, 37, 37, 37,
243
+ 37, 37, 37, 37, 37, 37, 37, 37,
244
+ 37, 37, 37, 37, 37, 37, 37, 37,
245
+ 37, 37, 37, 23, 40, 40, 40, 40,
246
+ 40, 23, 23, 23, 23, 23, 23, 23,
247
+ 23, 23, 23, 23, 23, 23, 23, 23,
248
+ 23, 23, 23, 40, 23, 24, 23, 23,
249
+ 23, 23, 23, 23, 23, 23, 23, 23,
250
+ 41, 41, 42, 41, 41, 41, 41, 41,
251
+ 41, 41, 41, 41, 41, 41, 23, 23,
252
+ 23, 43, 41, 23, 41, 41, 41, 41,
253
+ 41, 41, 41, 41, 41, 41, 41, 41,
254
+ 41, 41, 41, 41, 41, 41, 41, 41,
255
+ 41, 41, 41, 41, 41, 41, 23, 25,
256
+ 23, 23, 41, 23, 41, 41, 41, 41,
257
+ 41, 41, 41, 41, 41, 41, 41, 41,
258
+ 41, 41, 41, 41, 41, 41, 41, 41,
259
+ 41, 41, 41, 41, 41, 41, 23, 44,
260
+ 44, 44, 44, 44, 23, 23, 23, 23,
261
+ 23, 23, 23, 23, 23, 23, 23, 23,
262
+ 23, 23, 23, 23, 23, 23, 44, 23,
263
+ 24, 23, 23, 23, 23, 23, 23, 23,
264
+ 23, 23, 23, 45, 45, 23, 45, 45,
265
+ 45, 45, 45, 45, 45, 45, 45, 45,
266
+ 45, 23, 23, 46, 23, 45, 23, 45,
267
+ 45, 45, 45, 45, 45, 45, 45, 45,
268
+ 45, 45, 45, 45, 45, 45, 45, 45,
269
+ 45, 45, 45, 45, 45, 45, 45, 45,
270
+ 45, 23, 25, 23, 23, 45, 23, 45,
271
+ 45, 45, 45, 45, 45, 45, 45, 45,
272
+ 45, 45, 45, 45, 45, 45, 45, 45,
273
+ 45, 45, 45, 45, 45, 45, 45, 45,
274
+ 45, 23, 47, 47, 47, 47, 47, 23,
275
+ 23, 23, 23, 23, 23, 23, 23, 23,
276
+ 23, 23, 23, 23, 23, 23, 23, 23,
277
+ 23, 47, 23, 24, 23, 23, 23, 23,
278
+ 23, 23, 23, 23, 23, 23, 23, 23,
279
+ 23, 23, 23, 23, 23, 23, 23, 23,
280
+ 23, 23, 23, 23, 23, 23, 48, 23,
281
+ 23, 23, 23, 23, 23, 23, 23, 23,
282
+ 23, 23, 23, 23, 23, 23, 23, 23,
283
+ 23, 23, 23, 23, 23, 23, 23, 23,
284
+ 23, 23, 23, 23, 23, 25, 23, 48,
285
+ 48, 48, 48, 48, 23, 23, 23, 23,
286
+ 23, 23, 23, 23, 23, 23, 23, 23,
287
+ 23, 23, 23, 23, 23, 23, 48, 23,
288
+ 49, 23, 23, 23, 23, 50, 23, 23,
289
+ 23, 23, 23, 23, 23, 23, 23, 23,
290
+ 23, 23, 23, 23, 23, 23, 23, 23,
291
+ 23, 23, 23, 23, 23, 23, 23, 23,
292
+ 23, 23, 23, 23, 23, 23, 23, 23,
293
+ 23, 23, 23, 23, 23, 23, 23, 23,
294
+ 23, 23, 23, 23, 23, 23, 23, 23,
295
+ 23, 23, 25, 23, 51, 51, 51, 51,
296
+ 51, 20, 20, 20, 20, 20, 20, 20,
297
+ 20, 20, 20, 20, 20, 20, 20, 20,
298
+ 20, 20, 20, 51, 20, 21, 20, 20,
299
+ 20, 20, 20, 20, 20, 20, 20, 20,
300
+ 52, 52, 53, 52, 52, 52, 52, 52,
301
+ 52, 52, 52, 52, 52, 52, 20, 20,
302
+ 20, 54, 52, 20, 52, 52, 52, 52,
303
+ 52, 52, 52, 52, 52, 52, 52, 52,
304
+ 52, 52, 52, 52, 52, 52, 52, 52,
305
+ 52, 52, 52, 52, 52, 52, 20, 22,
306
+ 20, 20, 52, 20, 52, 52, 52, 52,
307
+ 52, 52, 52, 52, 52, 52, 52, 52,
308
+ 52, 52, 52, 52, 52, 52, 52, 52,
309
+ 52, 52, 52, 52, 52, 52, 20, 24,
310
+ 23, 23, 23, 23, 23, 23, 23, 23,
311
+ 23, 23, 23, 23, 23, 23, 23, 23,
312
+ 23, 23, 23, 23, 23, 23, 23, 23,
313
+ 23, 23, 23, 55, 23, 23, 23, 23,
314
+ 23, 23, 23, 23, 23, 23, 23, 23,
315
+ 23, 23, 23, 23, 23, 23, 23, 23,
316
+ 23, 23, 23, 23, 23, 23, 23, 23,
317
+ 23, 25, 23, 57, 56, 56, 56, 56,
318
+ 58, 56, 56, 56, 56, 56, 56, 56,
319
+ 56, 56, 56, 56, 56, 56, 56, 56,
320
+ 56, 56, 56, 56, 56, 56, 56, 56,
321
+ 56, 56, 56, 56, 56, 56, 56, 56,
322
+ 56, 56, 56, 56, 56, 56, 56, 56,
323
+ 56, 56, 56, 56, 56, 56, 56, 56,
324
+ 56, 56, 56, 56, 56, 59, 56, 61,
325
+ 60, 60, 60, 60, 35, 60, 60, 60,
326
+ 60, 60, 60, 60, 60, 60, 60, 60,
327
+ 60, 60, 60, 60, 60, 60, 60, 60,
328
+ 60, 60, 60, 60, 60, 60, 60, 60,
329
+ 60, 60, 60, 60, 60, 60, 60, 60,
330
+ 60, 60, 60, 60, 60, 60, 60, 60,
331
+ 60, 60, 60, 60, 60, 60, 60, 60,
332
+ 60, 62, 60, 64, 64, 64, 64, 64,
333
+ 63, 63, 63, 63, 63, 63, 63, 63,
334
+ 63, 63, 63, 63, 63, 63, 63, 63,
335
+ 63, 63, 64, 63, 63, 63, 63, 63,
336
+ 63, 24, 63, 63, 63, 63, 63, 65,
337
+ 65, 66, 65, 65, 65, 65, 65, 65,
338
+ 65, 65, 65, 65, 65, 63, 63, 63,
339
+ 67, 65, 63, 65, 65, 65, 65, 65,
340
+ 65, 65, 65, 65, 65, 65, 65, 65,
341
+ 65, 65, 65, 65, 65, 65, 65, 65,
342
+ 65, 65, 65, 65, 65, 63, 68, 63,
343
+ 63, 65, 63, 65, 65, 65, 65, 65,
344
+ 65, 65, 65, 65, 65, 65, 65, 65,
345
+ 65, 65, 65, 65, 65, 65, 65, 65,
346
+ 65, 65, 65, 65, 65, 63, 24, 63,
347
+ 63, 63, 63, 63, 63, 63, 63, 63,
348
+ 63, 63, 63, 63, 63, 63, 63, 63,
349
+ 63, 63, 63, 63, 63, 63, 63, 63,
350
+ 63, 63, 63, 63, 63, 63, 63, 63,
351
+ 63, 63, 63, 63, 63, 63, 63, 63,
352
+ 63, 63, 63, 63, 63, 63, 63, 63,
353
+ 63, 63, 63, 68, 63, 61, 63, 63,
354
+ 63, 63, 63, 63, 63, 63, 63, 63,
355
+ 63, 63, 63, 63, 63, 63, 63, 63,
356
+ 63, 63, 63, 63, 63, 63, 63, 63,
357
+ 63, 63, 63, 63, 63, 63, 63, 63,
358
+ 63, 63, 63, 63, 63, 63, 63, 63,
359
+ 63, 63, 63, 63, 63, 63, 63, 63,
360
+ 63, 63, 68, 63, 69, 69, 69, 69,
361
+ 69, 63, 63, 63, 63, 63, 63, 63,
362
+ 63, 63, 63, 63, 63, 63, 63, 63,
363
+ 63, 63, 63, 69, 63, 63, 63, 63,
364
+ 63, 63, 24, 63, 63, 63, 63, 63,
365
+ 70, 70, 71, 70, 70, 70, 70, 70,
366
+ 70, 70, 70, 70, 70, 70, 63, 63,
367
+ 63, 72, 70, 63, 70, 70, 70, 70,
368
+ 70, 70, 70, 70, 70, 70, 70, 70,
369
+ 70, 70, 70, 70, 70, 70, 70, 70,
370
+ 70, 70, 70, 70, 70, 70, 63, 68,
371
+ 63, 63, 70, 63, 70, 70, 70, 70,
372
+ 70, 70, 70, 70, 70, 70, 70, 70,
373
+ 70, 70, 70, 70, 70, 70, 70, 70,
374
+ 70, 70, 70, 70, 70, 70, 63, 73,
375
+ 73, 73, 73, 73, 63, 63, 63, 63,
376
+ 63, 63, 63, 63, 63, 63, 63, 63,
377
+ 63, 63, 63, 63, 63, 63, 73, 63,
378
+ 63, 63, 63, 63, 63, 24, 63, 63,
379
+ 63, 63, 63, 74, 74, 63, 74, 74,
380
+ 74, 74, 74, 74, 74, 74, 74, 74,
381
+ 74, 63, 63, 75, 63, 74, 63, 74,
382
+ 74, 74, 74, 74, 74, 74, 74, 74,
383
+ 74, 74, 74, 74, 74, 74, 74, 74,
384
+ 74, 74, 74, 74, 74, 74, 74, 74,
385
+ 74, 63, 68, 63, 63, 74, 63, 74,
386
+ 74, 74, 74, 74, 74, 74, 74, 74,
387
+ 74, 74, 74, 74, 74, 74, 74, 74,
388
+ 74, 74, 74, 74, 74, 74, 74, 74,
389
+ 74, 63, 76, 76, 76, 76, 76, 63,
390
+ 63, 63, 63, 63, 63, 63, 63, 63,
391
+ 63, 63, 63, 63, 63, 63, 63, 63,
392
+ 63, 76, 63, 63, 63, 63, 63, 63,
393
+ 24, 63, 63, 63, 63, 63, 63, 63,
394
+ 63, 63, 63, 63, 63, 63, 63, 63,
395
+ 63, 63, 63, 63, 63, 63, 77, 63,
396
+ 63, 63, 63, 63, 63, 63, 63, 63,
397
+ 63, 63, 63, 63, 63, 63, 63, 63,
398
+ 63, 63, 63, 63, 63, 63, 63, 63,
399
+ 63, 63, 63, 63, 63, 68, 63, 77,
400
+ 77, 77, 77, 77, 63, 63, 63, 63,
401
+ 63, 63, 63, 63, 63, 63, 63, 63,
402
+ 63, 63, 63, 63, 63, 63, 77, 63,
403
+ 78, 63, 63, 63, 63, 79, 63, 63,
404
+ 63, 63, 63, 63, 63, 63, 63, 63,
405
+ 63, 63, 63, 63, 63, 63, 63, 63,
406
+ 63, 63, 63, 63, 63, 63, 63, 63,
407
+ 63, 63, 63, 63, 63, 63, 63, 63,
408
+ 63, 63, 63, 63, 63, 63, 63, 63,
409
+ 63, 63, 63, 63, 63, 63, 63, 63,
410
+ 63, 63, 68, 63, 80, 56, 56, 56,
411
+ 56, 58, 56, 56, 56, 56, 56, 56,
412
+ 56, 56, 56, 56, 56, 56, 56, 56,
413
+ 56, 56, 56, 56, 56, 56, 56, 56,
414
+ 56, 56, 56, 56, 56, 56, 56, 56,
415
+ 56, 56, 56, 56, 56, 56, 56, 56,
416
+ 56, 56, 56, 56, 56, 56, 56, 56,
417
+ 56, 56, 56, 56, 56, 56, 59, 56,
418
+ 81, 60, 60, 60, 60, 81, 60, 60,
419
+ 60, 60, 60, 60, 60, 60, 60, 60,
420
+ 60, 60, 60, 60, 60, 60, 60, 60,
421
+ 60, 60, 60, 60, 60, 60, 60, 60,
422
+ 60, 60, 60, 60, 60, 60, 60, 60,
423
+ 60, 60, 60, 60, 60, 60, 60, 60,
424
+ 60, 60, 60, 60, 60, 60, 60, 60,
425
+ 60, 60, 62, 60, 82, 82, 82, 82,
426
+ 82, 60, 60, 60, 60, 60, 60, 60,
427
+ 60, 60, 60, 60, 60, 60, 60, 60,
428
+ 60, 60, 60, 82, 60, 61, 60, 60,
429
+ 60, 60, 35, 60, 60, 60, 60, 60,
430
+ 83, 83, 84, 83, 83, 83, 83, 83,
431
+ 83, 83, 83, 83, 83, 83, 60, 60,
432
+ 60, 85, 83, 60, 83, 83, 83, 83,
433
+ 83, 83, 83, 83, 83, 83, 83, 83,
434
+ 83, 83, 83, 83, 83, 83, 83, 83,
435
+ 83, 83, 83, 83, 83, 83, 60, 62,
436
+ 60, 60, 83, 60, 83, 83, 83, 83,
437
+ 83, 83, 83, 83, 83, 83, 83, 83,
438
+ 83, 83, 83, 83, 83, 83, 83, 83,
439
+ 83, 83, 83, 83, 83, 83, 60, 86,
440
+ 86, 86, 86, 86, 60, 60, 60, 60,
441
+ 60, 60, 60, 60, 60, 60, 60, 60,
442
+ 60, 60, 60, 60, 60, 60, 86, 60,
443
+ 61, 60, 60, 60, 60, 35, 60, 60,
444
+ 60, 60, 60, 87, 87, 88, 87, 87,
445
+ 87, 87, 87, 87, 87, 87, 87, 87,
446
+ 87, 60, 60, 60, 89, 87, 60, 87,
447
+ 87, 87, 87, 87, 87, 87, 87, 87,
448
+ 87, 87, 87, 87, 87, 87, 87, 87,
449
+ 87, 87, 87, 87, 87, 87, 87, 87,
450
+ 87, 60, 62, 60, 60, 87, 60, 87,
451
+ 87, 87, 87, 87, 87, 87, 87, 87,
452
+ 87, 87, 87, 87, 87, 87, 87, 87,
453
+ 87, 87, 87, 87, 87, 87, 87, 87,
454
+ 87, 60, 90, 90, 90, 90, 90, 60,
455
+ 60, 60, 60, 60, 60, 60, 60, 60,
456
+ 60, 60, 60, 60, 60, 60, 60, 60,
457
+ 60, 90, 60, 61, 60, 60, 60, 60,
458
+ 35, 60, 60, 60, 60, 60, 91, 91,
459
+ 60, 91, 91, 91, 91, 91, 91, 91,
460
+ 91, 91, 91, 91, 60, 60, 92, 60,
461
+ 91, 60, 91, 91, 91, 91, 91, 91,
462
+ 91, 91, 91, 91, 91, 91, 91, 91,
463
+ 91, 91, 91, 91, 91, 91, 91, 91,
464
+ 91, 91, 91, 91, 60, 62, 60, 60,
465
+ 91, 60, 91, 91, 91, 91, 91, 91,
466
+ 91, 91, 91, 91, 91, 91, 91, 91,
467
+ 91, 91, 91, 91, 91, 91, 91, 91,
468
+ 91, 91, 91, 91, 60, 93, 93, 93,
469
+ 93, 93, 60, 60, 60, 60, 60, 60,
470
+ 60, 60, 60, 60, 60, 60, 60, 60,
471
+ 60, 60, 60, 60, 93, 60, 61, 60,
472
+ 60, 60, 60, 35, 60, 60, 60, 60,
473
+ 60, 60, 60, 60, 60, 60, 60, 60,
474
+ 60, 60, 60, 60, 60, 60, 60, 60,
475
+ 60, 94, 60, 60, 60, 60, 60, 60,
476
+ 60, 60, 60, 60, 60, 60, 60, 60,
477
+ 60, 60, 60, 60, 60, 60, 60, 60,
478
+ 60, 60, 60, 60, 60, 60, 60, 60,
479
+ 62, 60, 94, 94, 94, 94, 94, 60,
480
+ 60, 60, 60, 60, 60, 60, 60, 60,
481
+ 60, 60, 60, 60, 60, 60, 60, 60,
482
+ 60, 94, 60, 95, 60, 60, 60, 60,
483
+ 96, 60, 60, 60, 60, 60, 60, 60,
484
+ 60, 60, 60, 60, 60, 60, 60, 60,
485
+ 60, 60, 60, 60, 60, 60, 60, 60,
486
+ 60, 60, 60, 60, 60, 60, 60, 60,
487
+ 60, 60, 60, 60, 60, 60, 60, 60,
488
+ 60, 60, 60, 60, 60, 60, 60, 60,
489
+ 60, 60, 60, 60, 60, 62, 60, 97,
490
+ 97, 97, 97, 97, 56, 56, 56, 56,
491
+ 56, 56, 56, 56, 56, 56, 56, 56,
492
+ 56, 56, 56, 56, 56, 56, 97, 56,
493
+ 80, 56, 56, 56, 56, 58, 56, 56,
494
+ 56, 56, 56, 98, 98, 99, 98, 98,
495
+ 98, 98, 98, 98, 98, 98, 98, 98,
496
+ 98, 56, 56, 56, 100, 98, 56, 98,
497
+ 98, 98, 98, 98, 98, 98, 98, 98,
498
+ 98, 98, 98, 98, 98, 98, 98, 98,
499
+ 98, 98, 98, 98, 98, 98, 98, 98,
500
+ 98, 56, 59, 56, 56, 98, 56, 98,
501
+ 98, 98, 98, 98, 98, 98, 98, 98,
502
+ 98, 98, 98, 98, 98, 98, 98, 98,
503
+ 98, 98, 98, 98, 98, 98, 98, 98,
504
+ 98, 56, 61, 60, 60, 60, 60, 35,
505
+ 60, 60, 60, 60, 60, 60, 60, 60,
506
+ 60, 60, 60, 60, 60, 60, 60, 60,
507
+ 60, 60, 60, 60, 60, 60, 101, 60,
508
+ 60, 60, 60, 60, 60, 60, 60, 60,
509
+ 60, 60, 60, 60, 60, 60, 60, 60,
510
+ 60, 60, 60, 60, 60, 60, 60, 60,
511
+ 60, 60, 60, 60, 62, 60, 97, 97,
512
+ 97, 97, 97, 56, 56, 56, 56, 56,
513
+ 56, 56, 56, 56, 56, 56, 56, 56,
514
+ 56, 56, 56, 56, 56, 97, 56, 57,
515
+ 56, 56, 56, 56, 58, 56, 56, 56,
516
+ 56, 56, 98, 98, 99, 98, 98, 98,
517
+ 98, 98, 98, 98, 98, 98, 98, 98,
518
+ 56, 56, 56, 100, 98, 56, 98, 98,
519
+ 98, 98, 98, 98, 98, 98, 98, 98,
520
+ 98, 98, 98, 98, 98, 98, 98, 98,
521
+ 98, 98, 98, 98, 98, 98, 98, 98,
522
+ 56, 59, 56, 56, 98, 56, 98, 98,
523
+ 98, 98, 98, 98, 98, 98, 98, 98,
524
+ 98, 98, 98, 98, 98, 98, 98, 98,
525
+ 98, 98, 98, 98, 98, 98, 98, 98,
526
+ 56, 103, 103, 103, 103, 103, 102, 102,
527
+ 102, 102, 102, 102, 102, 102, 102, 102,
528
+ 102, 102, 102, 102, 102, 102, 102, 102,
529
+ 103, 102, 102, 102, 102, 102, 102, 21,
530
+ 102, 102, 102, 102, 102, 104, 104, 105,
531
+ 104, 104, 104, 104, 104, 104, 104, 104,
532
+ 104, 104, 104, 102, 102, 102, 106, 104,
533
+ 102, 104, 104, 104, 104, 104, 104, 104,
534
+ 104, 104, 104, 104, 104, 104, 104, 104,
535
+ 104, 104, 104, 104, 104, 104, 104, 104,
536
+ 104, 104, 104, 102, 107, 102, 102, 104,
537
+ 102, 104, 104, 104, 104, 104, 104, 104,
538
+ 104, 104, 104, 104, 104, 104, 104, 104,
539
+ 104, 104, 104, 104, 104, 104, 104, 104,
540
+ 104, 104, 104, 102, 24, 63, 63, 63,
541
+ 63, 63, 63, 63, 63, 63, 63, 63,
542
+ 63, 63, 63, 63, 63, 63, 63, 63,
543
+ 63, 63, 63, 108, 63, 63, 63, 63,
544
+ 63, 63, 63, 63, 63, 63, 63, 63,
545
+ 63, 63, 63, 63, 63, 63, 63, 63,
546
+ 63, 63, 63, 63, 63, 63, 63, 63,
547
+ 63, 68, 63, 21, 102, 102, 102, 102,
548
+ 102, 102, 102, 102, 102, 102, 102, 102,
549
+ 102, 102, 102, 102, 102, 102, 102, 102,
550
+ 102, 102, 102, 102, 102, 102, 102, 102,
551
+ 102, 102, 102, 102, 102, 102, 102, 102,
552
+ 102, 102, 102, 102, 102, 102, 102, 102,
553
+ 102, 102, 102, 102, 102, 102, 102, 102,
554
+ 107, 102, 109, 109, 0, 109, 109, 109,
555
+ 109, 109, 109, 109, 109, 109, 109, 0,
556
+ 0, 0, 0, 0, 109, 0, 109, 109,
557
+ 109, 109, 109, 109, 109, 109, 109, 109,
558
+ 109, 109, 109, 109, 109, 109, 109, 109,
559
+ 109, 109, 109, 109, 109, 109, 109, 109,
560
+ 0, 0, 0, 0, 109, 0, 109, 109,
561
+ 109, 109, 109, 109, 109, 109, 109, 109,
562
+ 109, 109, 109, 109, 109, 109, 109, 109,
563
+ 109, 109, 109, 109, 109, 109, 109, 109,
564
+ 0, 110, 110, 0, 110, 110, 110, 110,
565
+ 110, 110, 110, 110, 110, 110, 111, 0,
566
+ 0, 0, 0, 110, 0, 110, 110, 110,
567
+ 110, 110, 110, 110, 110, 110, 110, 110,
568
+ 110, 110, 110, 110, 110, 110, 110, 110,
569
+ 110, 110, 110, 110, 110, 110, 110, 0,
570
+ 0, 0, 0, 110, 0, 110, 110, 110,
571
+ 110, 110, 110, 110, 110, 110, 110, 110,
572
+ 110, 110, 110, 110, 110, 110, 110, 110,
573
+ 110, 110, 110, 110, 110, 110, 110, 0,
574
+ 112, 112, 0, 112, 112, 112, 112, 112,
575
+ 112, 112, 112, 112, 112, 112, 0, 0,
576
+ 0, 0, 112, 0, 112, 112, 112, 112,
577
+ 112, 112, 112, 112, 112, 112, 112, 112,
578
+ 112, 112, 112, 112, 112, 112, 112, 112,
579
+ 112, 112, 112, 112, 112, 112, 0, 0,
580
+ 0, 0, 112, 0, 112, 112, 112, 112,
581
+ 112, 112, 112, 112, 112, 112, 112, 112,
582
+ 112, 112, 112, 112, 112, 112, 112, 112,
583
+ 112, 112, 112, 112, 112, 112, 0, 113,
584
+ 113, 113, 113, 113, 0, 0, 0, 0,
585
+ 0, 0, 0, 0, 0, 0, 0, 0,
586
+ 0, 0, 0, 0, 0, 0, 113, 0,
587
+ 0, 0, 0, 0, 0, 0, 0, 0,
588
+ 0, 0, 0, 114, 114, 0, 114, 114,
589
+ 114, 114, 114, 114, 114, 114, 114, 114,
590
+ 114, 0, 0, 0, 115, 114, 0, 114,
591
+ 114, 114, 114, 114, 114, 114, 114, 114,
592
+ 114, 114, 114, 114, 114, 114, 114, 114,
593
+ 114, 114, 114, 114, 114, 114, 114, 114,
594
+ 114, 0, 0, 0, 0, 114, 0, 114,
595
+ 114, 114, 114, 114, 114, 114, 114, 114,
596
+ 114, 114, 114, 114, 114, 114, 114, 114,
597
+ 114, 114, 114, 114, 114, 114, 114, 114,
598
+ 114, 0, 116, 116, 116, 116, 116, 0,
599
+ 0, 0, 0, 0, 0, 0, 0, 0,
600
+ 0, 0, 0, 0, 0, 0, 0, 0,
601
+ 0, 116, 0, 0, 0, 0, 0, 0,
602
+ 0, 0, 0, 0, 0, 0, 0, 0,
603
+ 0, 0, 0, 0, 0, 0, 0, 0,
604
+ 0, 0, 0, 0, 0, 0, 0, 117,
605
+ 0, 118, 120, 119, 122, 122, 123, 122,
606
+ 122, 122, 122, 122, 122, 122, 122, 122,
607
+ 122, 121, 121, 121, 121, 121, 122, 121,
608
+ 122, 122, 122, 122, 122, 122, 122, 122,
609
+ 122, 122, 122, 122, 122, 122, 122, 122,
610
+ 122, 122, 122, 122, 122, 122, 122, 122,
611
+ 122, 122, 121, 121, 121, 121, 122, 121,
612
+ 122, 122, 122, 122, 122, 122, 122, 122,
613
+ 122, 122, 122, 122, 122, 122, 122, 122,
614
+ 122, 122, 122, 122, 122, 122, 122, 122,
615
+ 122, 122, 121, 124, 125, 24, 23, 23,
616
+ 23, 23, 23, 23, 23, 23, 23, 23,
617
+ 23, 23, 23, 23, 23, 23, 23, 23,
618
+ 23, 23, 23, 23, 23, 23, 23, 23,
619
+ 23, 23, 23, 23, 23, 23, 23, 23,
620
+ 23, 23, 23, 23, 23, 23, 23, 23,
621
+ 23, 23, 23, 23, 23, 23, 23, 23,
622
+ 23, 23, 23, 23, 23, 23, 23, 25,
623
+ 23, 24, 23, 23, 23, 23, 23, 23,
624
+ 23, 23, 23, 23, 23, 23, 23, 23,
625
+ 23, 23, 23, 23, 23, 23, 23, 23,
626
+ 23, 23, 23, 23, 23, 23, 23, 23,
627
+ 23, 23, 23, 23, 23, 23, 23, 23,
628
+ 23, 23, 23, 23, 23, 23, 23, 23,
629
+ 23, 23, 23, 23, 23, 23, 23, 23,
630
+ 23, 23, 23, 25, 23, 61, 60, 60,
631
+ 60, 60, 35, 60, 60, 60, 60, 60,
632
+ 60, 60, 60, 60, 60, 60, 60, 60,
633
+ 60, 60, 60, 60, 60, 60, 60, 60,
634
+ 60, 60, 60, 60, 60, 60, 60, 60,
635
+ 60, 60, 60, 60, 60, 60, 60, 60,
636
+ 60, 60, 60, 60, 60, 60, 60, 60,
637
+ 60, 60, 60, 60, 60, 60, 60, 62,
638
+ 60, 61, 60, 60, 60, 60, 35, 60,
639
+ 60, 60, 60, 60, 60, 60, 60, 60,
640
+ 60, 60, 60, 60, 60, 60, 60, 60,
641
+ 60, 60, 60, 60, 60, 60, 60, 60,
642
+ 60, 60, 60, 60, 60, 60, 60, 60,
643
+ 60, 60, 60, 60, 60, 60, 60, 60,
644
+ 60, 60, 60, 60, 60, 60, 60, 60,
645
+ 60, 60, 60, 62, 60, 24, 63, 63,
646
+ 63, 63, 63, 63, 63, 63, 63, 63,
647
+ 63, 63, 63, 63, 63, 63, 63, 63,
648
+ 63, 63, 63, 63, 63, 63, 63, 63,
649
+ 63, 63, 63, 63, 63, 63, 63, 63,
650
+ 63, 63, 63, 63, 63, 63, 63, 63,
651
+ 63, 63, 63, 63, 63, 63, 63, 63,
652
+ 63, 63, 68, 63, 24, 63, 63, 63,
653
+ 63, 63, 63, 63, 63, 63, 63, 63,
654
+ 63, 63, 63, 63, 63, 63, 63, 63,
655
+ 63, 63, 63, 63, 63, 63, 63, 63,
656
+ 63, 63, 63, 63, 63, 63, 63, 63,
657
+ 63, 63, 63, 63, 63, 63, 63, 63,
658
+ 63, 63, 63, 63, 63, 63, 63, 63,
659
+ 63, 68, 63, 126, 0
660
+ ]
661
+
662
+ class << self
663
+ attr_accessor :_parser_trans_targs
664
+ private :_parser_trans_targs, :_parser_trans_targs=
665
+ end
666
+ self._parser_trans_targs = [
667
+ 49, 1, 2, 3, 4, 3, 12, 52,
668
+ 4, 5, 12, 52, 49, 6, 5, 7,
669
+ 6, 7, 8, 42, 9, 10, 13, 9,
670
+ 10, 13, 11, 5, 12, 52, 11, 5,
671
+ 12, 52, 51, 14, 15, 16, 20, 54,
672
+ 15, 16, 20, 54, 17, 16, 18, 17,
673
+ 18, 19, 21, 15, 16, 20, 54, 53,
674
+ 22, 23, 14, 31, 22, 23, 31, 24,
675
+ 26, 27, 41, 58, 25, 26, 27, 41,
676
+ 58, 28, 27, 29, 28, 29, 30, 40,
677
+ 23, 32, 33, 34, 38, 56, 33, 34,
678
+ 38, 56, 35, 34, 36, 35, 36, 37,
679
+ 39, 33, 34, 38, 56, 55, 24, 26,
680
+ 27, 41, 58, 25, 57, 44, 44, 45,
681
+ 46, 47, 46, 59, 47, 59, 0, 49,
682
+ 50, 49, 1, 43, 49, 49, 49
683
+ ]
684
+
685
+ class << self
686
+ attr_accessor :_parser_trans_actions
687
+ private :_parser_trans_actions, :_parser_trans_actions=
688
+ end
689
+ self._parser_trans_actions = [
690
+ 1, 0, 2, 3, 4, 0, 4, 4,
691
+ 0, 5, 0, 0, 6, 7, 0, 7,
692
+ 0, 0, 0, 0, 8, 9, 8, 0,
693
+ 10, 0, 11, 12, 13, 13, 0, 14,
694
+ 15, 15, 0, 10, 11, 12, 13, 16,
695
+ 0, 14, 15, 17, 7, 0, 7, 0,
696
+ 0, 10, 0, 18, 19, 20, 21, 22,
697
+ 8, 23, 9, 8, 0, 10, 0, 0,
698
+ 11, 12, 13, 16, 0, 0, 14, 15,
699
+ 17, 7, 0, 7, 0, 0, 0, 10,
700
+ 9, 10, 11, 12, 13, 16, 0, 14,
701
+ 15, 17, 7, 0, 7, 0, 0, 10,
702
+ 10, 18, 19, 20, 21, 22, 8, 18,
703
+ 19, 20, 21, 8, 22, 24, 0, 2,
704
+ 3, 4, 0, 4, 0, 0, 0, 27,
705
+ 28, 29, 24, 0, 30, 31, 32
706
+ ]
707
+
708
+ class << self
709
+ attr_accessor :_parser_to_state_actions
710
+ private :_parser_to_state_actions, :_parser_to_state_actions=
711
+ end
712
+ self._parser_to_state_actions = [
713
+ 0, 0, 0, 0, 0, 0, 0, 0,
714
+ 0, 0, 0, 0, 0, 0, 0, 0,
715
+ 0, 0, 0, 0, 0, 0, 0, 0,
716
+ 0, 0, 0, 0, 0, 0, 0, 0,
717
+ 0, 0, 0, 0, 0, 0, 0, 0,
718
+ 0, 0, 0, 0, 0, 0, 0, 0,
719
+ 25, 25, 0, 0, 0, 0, 0, 0,
720
+ 0, 0, 0, 0
721
+ ]
722
+
723
+ class << self
724
+ attr_accessor :_parser_from_state_actions
725
+ private :_parser_from_state_actions, :_parser_from_state_actions=
726
+ end
727
+ self._parser_from_state_actions = [
728
+ 0, 0, 0, 0, 0, 0, 0, 0,
729
+ 0, 0, 0, 0, 0, 0, 0, 0,
730
+ 0, 0, 0, 0, 0, 0, 0, 0,
731
+ 0, 0, 0, 0, 0, 0, 0, 0,
732
+ 0, 0, 0, 0, 0, 0, 0, 0,
733
+ 0, 0, 0, 0, 0, 0, 0, 0,
734
+ 0, 26, 0, 0, 0, 0, 0, 0,
735
+ 0, 0, 0, 0
736
+ ]
737
+
738
+ class << self
739
+ attr_accessor :_parser_eof_trans
740
+ private :_parser_eof_trans, :_parser_eof_trans=
741
+ end
742
+ self._parser_eof_trans = [
743
+ 0, 1, 1, 1, 1, 13, 13, 13,
744
+ 13, 13, 13, 13, 13, 13, 13, 13,
745
+ 13, 13, 13, 13, 13, 13, 13, 13,
746
+ 13, 13, 13, 13, 13, 13, 13, 13,
747
+ 13, 13, 13, 13, 13, 13, 13, 13,
748
+ 13, 13, 13, 1, 1, 1, 1, 1,
749
+ 0, 0, 122, 125, 126, 125, 126, 125,
750
+ 126, 125, 126, 127
751
+ ]
752
+
753
+ class << self
754
+ attr_accessor :parser_start
755
+ end
756
+ self.parser_start = 49;
757
+ class << self
758
+ attr_accessor :parser_first_final
759
+ end
760
+ self.parser_first_final = 49;
761
+ class << self
762
+ attr_accessor :parser_error
763
+ end
764
+ self.parser_error = 0;
765
+
766
+ class << self
767
+ attr_accessor :parser_en_Closeout
768
+ end
769
+ self.parser_en_Closeout = 48;
770
+ class << self
771
+ attr_accessor :parser_en_main
772
+ end
773
+ self.parser_en_main = 49;
774
+
775
+
776
+ # line 118 "scan.rl"
777
+
778
+ # line 779 "scan.rb"
779
+ begin
780
+ p ||= 0
781
+ pe ||= data.length
782
+ cs = parser_start
783
+ ts = nil
784
+ te = nil
785
+ act = 0
786
+ end
787
+
788
+ # line 119 "scan.rl"
789
+
790
+ # line 791 "scan.rb"
791
+ begin
792
+ testEof = false
793
+ _slen, _trans, _keys, _inds, _acts, _nacts = nil
794
+ _goto_level = 0
795
+ _resume = 10
796
+ _eof_trans = 15
797
+ _again = 20
798
+ _test_eof = 30
799
+ _out = 40
800
+ while true
801
+ if _goto_level <= 0
802
+ if p == pe
803
+ _goto_level = _test_eof
804
+ next
805
+ end
806
+ if cs == 0
807
+ _goto_level = _out
808
+ next
809
+ end
810
+ end
811
+ if _goto_level <= _resume
812
+ case _parser_from_state_actions[cs]
813
+ when 26 then
814
+ # line 1 "NONE"
815
+ begin
816
+ ts = p
817
+ end
818
+ # line 819 "scan.rb"
819
+ end
820
+ _keys = cs << 1
821
+ _inds = _parser_index_offsets[cs]
822
+ _slen = _parser_key_spans[cs]
823
+ _trans = if ( _slen > 0 &&
824
+ _parser_trans_keys[_keys] <= data[p] &&
825
+ data[p] <= _parser_trans_keys[_keys + 1]
826
+ ) then
827
+ _parser_indicies[ _inds + data[p] - _parser_trans_keys[_keys] ]
828
+ else
829
+ _parser_indicies[ _inds + _slen ]
830
+ end
831
+ end
832
+ if _goto_level <= _eof_trans
833
+ cs = _parser_trans_targs[_trans]
834
+ if _parser_trans_actions[_trans] != 0
835
+ case _parser_trans_actions[_trans]
836
+ when 24 then
837
+ # line 5 "scan.rl"
838
+ begin
839
+ mark_pfx = p end
840
+ when 2 then
841
+ # line 6 "scan.rl"
842
+ begin
843
+
844
+ if data[mark_pfx..p-1] != @prefix
845
+ @nodes.last << data[mark_pfx-1..p]
846
+ begin
847
+ p += 1
848
+ _goto_level = _out
849
+ next
850
+ end
851
+
852
+ end
853
+ end
854
+ when 3 then
855
+ # line 12 "scan.rl"
856
+ begin
857
+ mark_stg = p end
858
+ when 4 then
859
+ # line 13 "scan.rl"
860
+ begin
861
+ @starttag = data[mark_stg..p-1] end
862
+ when 11 then
863
+ # line 14 "scan.rl"
864
+ begin
865
+ mark_attr = p end
866
+ when 15 then
867
+ # line 15 "scan.rl"
868
+ begin
869
+
870
+ @attrs[@nat] = @vat
871
+ end
872
+ when 5 then
873
+ # line 24 "scan.rl"
874
+ begin
875
+ mark_nat = p end
876
+ when 7 then
877
+ # line 25 "scan.rl"
878
+ begin
879
+ @nat = data[mark_nat..p-1] end
880
+ when 8 then
881
+ # line 26 "scan.rl"
882
+ begin
883
+ mark_vat = p end
884
+ when 10 then
885
+ # line 27 "scan.rl"
886
+ begin
887
+ @vat = data[mark_vat..p-1] end
888
+ when 27 then
889
+ # line 78 "scan.rl"
890
+ begin
891
+ te = p+1
892
+ begin
893
+ @nodes.last << data[p]
894
+ @tagstart = p
895
+ end
896
+ end
897
+ when 29 then
898
+ # line 78 "scan.rl"
899
+ begin
900
+ te = p
901
+ p = p - 1; begin
902
+ @nodes.last << data[p]
903
+ @tagstart = p
904
+ end
905
+ end
906
+ when 1 then
907
+ # line 78 "scan.rl"
908
+ begin
909
+ begin p = ((te))-1; end
910
+ begin
911
+ @nodes.last << data[p]
912
+ @tagstart = p
913
+ end
914
+ end
915
+ when 6 then
916
+ # line 1 "NONE"
917
+ begin
918
+ case act
919
+ when 1 then
920
+ begin begin p = ((te))-1; end
921
+
922
+ tag = {:prefix=>@prefix, :name=>@starttag, :flavor => @flavor, :attrs => @attrs}
923
+ @prefix = nil
924
+ @name = nil
925
+ @flavor = :tasteless
926
+ @attrs = {}
927
+ @nodes << tag << ''
928
+ begin
929
+ p += 1
930
+ _goto_level = _out
931
+ next
932
+ end
933
+
934
+ end
935
+ when 2 then
936
+ begin begin p = ((te))-1; end
937
+
938
+ @nodes.last << data[p]
939
+ @tagstart = p
940
+ end
941
+ end
942
+ end
943
+ when 13 then
944
+ # line 14 "scan.rl"
945
+ begin
946
+ mark_attr = p end
947
+ # line 15 "scan.rl"
948
+ begin
949
+
950
+ @attrs[@nat] = @vat
951
+ end
952
+ when 14 then
953
+ # line 15 "scan.rl"
954
+ begin
955
+
956
+ @attrs[@nat] = @vat
957
+ end
958
+ # line 24 "scan.rl"
959
+ begin
960
+ mark_nat = p end
961
+ when 18 then
962
+ # line 26 "scan.rl"
963
+ begin
964
+ mark_vat = p end
965
+ # line 14 "scan.rl"
966
+ begin
967
+ mark_attr = p end
968
+ when 9 then
969
+ # line 26 "scan.rl"
970
+ begin
971
+ mark_vat = p end
972
+ # line 27 "scan.rl"
973
+ begin
974
+ @vat = data[mark_vat..p-1] end
975
+ when 23 then
976
+ # line 27 "scan.rl"
977
+ begin
978
+ @vat = data[mark_vat..p-1] end
979
+ # line 26 "scan.rl"
980
+ begin
981
+ mark_vat = p end
982
+ when 31 then
983
+ # line 29 "scan.rl"
984
+ begin
985
+ @flavor = :open end
986
+ # line 69 "scan.rl"
987
+ begin
988
+ te = p
989
+ p = p - 1; begin
990
+ tag = {:prefix=>@prefix, :name=>@starttag, :flavor => @flavor, :attrs => @attrs}
991
+ @prefix = nil
992
+ @name = nil
993
+ @flavor = :tasteless
994
+ @attrs = {}
995
+ @nodes << tag << ''
996
+ begin
997
+ p += 1
998
+ _goto_level = _out
999
+ next
1000
+ end
1001
+
1002
+ end
1003
+ end
1004
+ when 30 then
1005
+ # line 30 "scan.rl"
1006
+ begin
1007
+ @flavor = :self end
1008
+ # line 69 "scan.rl"
1009
+ begin
1010
+ te = p
1011
+ p = p - 1; begin
1012
+ tag = {:prefix=>@prefix, :name=>@starttag, :flavor => @flavor, :attrs => @attrs}
1013
+ @prefix = nil
1014
+ @name = nil
1015
+ @flavor = :tasteless
1016
+ @attrs = {}
1017
+ @nodes << tag << ''
1018
+ begin
1019
+ p += 1
1020
+ _goto_level = _out
1021
+ next
1022
+ end
1023
+
1024
+ end
1025
+ end
1026
+ when 32 then
1027
+ # line 31 "scan.rl"
1028
+ begin
1029
+ @flavor = :close end
1030
+ # line 69 "scan.rl"
1031
+ begin
1032
+ te = p
1033
+ p = p - 1; begin
1034
+ tag = {:prefix=>@prefix, :name=>@starttag, :flavor => @flavor, :attrs => @attrs}
1035
+ @prefix = nil
1036
+ @name = nil
1037
+ @flavor = :tasteless
1038
+ @attrs = {}
1039
+ @nodes << tag << ''
1040
+ begin
1041
+ p += 1
1042
+ _goto_level = _out
1043
+ next
1044
+ end
1045
+
1046
+ end
1047
+ end
1048
+ when 22 then
1049
+ # line 1 "NONE"
1050
+ begin
1051
+ te = p+1
1052
+ end
1053
+ # line 69 "scan.rl"
1054
+ begin
1055
+ act = 1; end
1056
+ when 28 then
1057
+ # line 1 "NONE"
1058
+ begin
1059
+ te = p+1
1060
+ end
1061
+ # line 78 "scan.rl"
1062
+ begin
1063
+ act = 2; end
1064
+ when 12 then
1065
+ # line 14 "scan.rl"
1066
+ begin
1067
+ mark_attr = p end
1068
+ # line 15 "scan.rl"
1069
+ begin
1070
+
1071
+ @attrs[@nat] = @vat
1072
+ end
1073
+ # line 24 "scan.rl"
1074
+ begin
1075
+ mark_nat = p end
1076
+ when 20 then
1077
+ # line 26 "scan.rl"
1078
+ begin
1079
+ mark_vat = p end
1080
+ # line 14 "scan.rl"
1081
+ begin
1082
+ mark_attr = p end
1083
+ # line 15 "scan.rl"
1084
+ begin
1085
+
1086
+ @attrs[@nat] = @vat
1087
+ end
1088
+ when 17 then
1089
+ # line 1 "NONE"
1090
+ begin
1091
+ te = p+1
1092
+ end
1093
+ # line 15 "scan.rl"
1094
+ begin
1095
+
1096
+ @attrs[@nat] = @vat
1097
+ end
1098
+ # line 69 "scan.rl"
1099
+ begin
1100
+ act = 1; end
1101
+ when 19 then
1102
+ # line 26 "scan.rl"
1103
+ begin
1104
+ mark_vat = p end
1105
+ # line 14 "scan.rl"
1106
+ begin
1107
+ mark_attr = p end
1108
+ # line 15 "scan.rl"
1109
+ begin
1110
+
1111
+ @attrs[@nat] = @vat
1112
+ end
1113
+ # line 24 "scan.rl"
1114
+ begin
1115
+ mark_nat = p end
1116
+ when 16 then
1117
+ # line 1 "NONE"
1118
+ begin
1119
+ te = p+1
1120
+ end
1121
+ # line 14 "scan.rl"
1122
+ begin
1123
+ mark_attr = p end
1124
+ # line 15 "scan.rl"
1125
+ begin
1126
+
1127
+ @attrs[@nat] = @vat
1128
+ end
1129
+ # line 69 "scan.rl"
1130
+ begin
1131
+ act = 1; end
1132
+ when 21 then
1133
+ # line 1 "NONE"
1134
+ begin
1135
+ te = p+1
1136
+ end
1137
+ # line 26 "scan.rl"
1138
+ begin
1139
+ mark_vat = p end
1140
+ # line 14 "scan.rl"
1141
+ begin
1142
+ mark_attr = p end
1143
+ # line 15 "scan.rl"
1144
+ begin
1145
+
1146
+ @attrs[@nat] = @vat
1147
+ end
1148
+ # line 69 "scan.rl"
1149
+ begin
1150
+ act = 1; end
1151
+ # line 1152 "scan.rb"
1152
+ end
1153
+ end
1154
+ end
1155
+ if _goto_level <= _again
1156
+ case _parser_to_state_actions[cs]
1157
+ when 25 then
1158
+ # line 1 "NONE"
1159
+ begin
1160
+ ts = nil; end
1161
+ # line 1162 "scan.rb"
1162
+ end
1163
+
1164
+ if cs == 0
1165
+ _goto_level = _out
1166
+ next
1167
+ end
1168
+ p += 1
1169
+ if p != pe
1170
+ _goto_level = _resume
1171
+ next
1172
+ end
1173
+ end
1174
+ if _goto_level <= _test_eof
1175
+ if p == eof
1176
+ if _parser_eof_trans[cs] > 0
1177
+ _trans = _parser_eof_trans[cs] - 1;
1178
+ _goto_level = _eof_trans
1179
+ next;
1180
+ end
1181
+ end
1182
+
1183
+ end
1184
+ if _goto_level <= _out
1185
+ break
1186
+ end
1187
+ end
1188
+ end
1189
+
1190
+ # line 120 "scan.rl"
1191
+ return p
1192
+ end
1193
+ end
1194
+ end