radius-ts 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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