xamplr-pp 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.
data/README.rdoc ADDED
@@ -0,0 +1,94 @@
1
+ = xamplr-pp-gem
2
+
3
+ == INTRODUCTION
4
+
5
+ This is the Ruby version of the xampl pull parser, xamplr-pp. The
6
+ class name is xampl_PP.
7
+
8
+ Both pull parsers and SAX parsers are stream based -- they parse
9
+ the XML file bit by bit informing its client of interesting events
10
+ as they are encountered. The whole XML document is not required to
11
+ be in memory. The significant difference between pull parsers and
12
+ SAX parsers is in where the 'main loop' is located: in the client
13
+ for pull parsers, in the parser for SAX parsers. Clients call a
14
+ method of the pull parser to get the next event. SAX parsers call
15
+ methods of the client to notify it of events (so these are 'push
16
+ parsers'). You can pass the pull parser around as an argument.
17
+
18
+ As a way of illustrating the use of xamplr-pp a reasonably usable
19
+ SAX-like parser (SAXish) is implemented as well. There is a saxdemo.rb
20
+ file provided that provides statistics on the parsed XML file. It
21
+ can be run using 'make sax' (look in the Makefile to see how it is
22
+ used)
23
+
24
+ == STATUS
25
+
26
+ xamplr-pp has been in daily use in a SaaS content management system since about 2004. It is an integral component of xamplr. Unfortunately documentation is sparse.
27
+
28
+ xamplr-pp has passed all unit tests using Ruby 1.6.7, 1.8.6, 1.8.7 on Linux and OS X. It has not even been tried on Ruby 1.9.1 at this point.
29
+
30
+ The unit tests require Lapidary (remember that?). Run these by typing 'make ut' on
31
+ the command line in the installation directory.
32
+
33
+ xamplr-pp is not a validating parser, in fact, it
34
+ doesn't enforce some wellformedness rules. DOCTYPE definitions are passed
35
+ intact to the client program. No attempt is made
36
+ to extract any kind of entity definitions from the DOCTYPE. Clever
37
+ use of the DOCTYPE event and the resolver method can relieve this
38
+ problem.
39
+
40
+ I have some serious reservations about the way that xamplr-pp handles
41
+ multi-byte characters, but it definitely works well with UTF8.
42
+
43
+ Some attention has been paid to performance. It is reasonably quick, certainly on the fast side for pure ruby parsers.
44
+
45
+ == DOCUMENTATION
46
+
47
+ There isn't much. Fortunately, the API to xamplr-pp is very small
48
+ and quite easy to understand.
49
+
50
+ It turns out to be quite easy to build a SAX-like parser from a
51
+ push parser. It also turns out that doing this pretty much uses
52
+ the entire xamplr-pp api. So I've implemented a SAX-like parser
53
+ (SAXish) and annotated it. This is pretty much all the documentation
54
+ in this release.
55
+
56
+ SAXish is, in itself, a pretty usable SAX-like parser (of course
57
+ the limits to validation and wellformedness checking mentioned above
58
+ apply).
59
+
60
+ == CONFORMANCE
61
+
62
+ Well, this is an interesting question. Right now, it doesn't do too
63
+ well, but it does this in a 'good' way, or at least a manageable
64
+ way.
65
+
66
+ On the Oasis conformance tests xamplr-pp 435 tests pass that should
67
+ pass, 188 fail that should fail, 3 failed that should pass, and
68
+ 1188 passed that should fail. Generally speaking, xamplr-pp is 'permissive'.
69
+
70
+ However to do this I had to *cheat*. I defined a resolver that
71
+ returns a string rather than nil, this allows xamplr-pp to pretend
72
+ that it is dealing with entities defined in the DOCTYPE. In other words, for you to achieve this level of conformance you'll need to supply an entity resolver.
73
+
74
+ The three that failed that should have passed all involve apparently
75
+ legal DOCTYPE declarations that xamplr-pp does not recognise as
76
+ legal. It is unlikely that I do anything about these.
77
+
78
+ The 1188 that passed that should not appear to be due to the
79
+ non-enforcement of well-formedness rules. I have not looked at them
80
+ all, I assure you of that, but it seems that this most involve
81
+ entity definitions. Well, every one that I looked at did, can't say for what I didn't look at.
82
+
83
+ == LICENCE
84
+
85
+ xamplr-pp is licensed under the LGPL (see LICENSE)
86
+
87
+ == CONTACT INFORMATION
88
+
89
+ My email is hutch@recursive.ca, feel free to contact me there, or
90
+ you can use the facilities provided by Sourceforge.
91
+
92
+ == Copyright
93
+
94
+ Copyright (c) 2009 Bob Hutchison. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,56 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "xamplr-pp"
8
+ gem.summary = %Q{A pure ruby XML pull parser}
9
+ gem.email = "hutch@recursive.ca"
10
+ gem.homepage = "http://github.com/hutch/xamplr-pp"
11
+ gem.authors = ["Bob Hutchison"]
12
+
13
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
14
+ end
15
+ rescue LoadError
16
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
17
+ end
18
+
19
+ require 'rake/testtask'
20
+ Rake::TestTask.new(:test) do |test|
21
+ test.libs << 'lib' << 'test'
22
+ test.pattern = 'test/**/*_test.rb'
23
+ test.verbose = true
24
+ end
25
+
26
+ begin
27
+ require 'rcov/rcovtask'
28
+ Rcov::RcovTask.new do |test|
29
+ test.libs << 'test'
30
+ test.pattern = 'test/**/*_test.rb'
31
+ test.verbose = true
32
+ end
33
+ rescue LoadError
34
+ task :rcov do
35
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
36
+ end
37
+ end
38
+
39
+
40
+ task :default => :test
41
+
42
+ require 'rake/rdoctask'
43
+ Rake::RDocTask.new do |rdoc|
44
+ if File.exist?('VERSION.yml')
45
+ config = YAML.load(File.read('VERSION.yml'))
46
+ version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
47
+ else
48
+ version = ""
49
+ end
50
+
51
+ rdoc.rdoc_dir = 'rdoc'
52
+ rdoc.title = "xamplr-pp #{version}"
53
+ rdoc.rdoc_files.include('README*')
54
+ rdoc.rdoc_files.include('lib/**/*.rb')
55
+ end
56
+
data/VERSION.yml ADDED
@@ -0,0 +1,4 @@
1
+ ---
2
+ :minor: 0
3
+ :patch: 0
4
+ :major: 1
@@ -0,0 +1,126 @@
1
+ # xampl-pp : XML pull parser
2
+ # Copyright (C) 2002-2009 Bob Hutchison
3
+ #
4
+ # This library is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU Lesser General Public
6
+ # License as published by the Free Software Foundation; either
7
+ # version 2.1 of the License, or (at your option) any later version.
8
+ #
9
+ # This library is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # #Lesser General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Lesser General Public
15
+ # License along with this library; if not, write to the Free Software
16
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
+ #
18
+
19
+ require "xampl-pp"
20
+
21
+ class Xampl_PP
22
+
23
+ def parseXMLDecl
24
+ @standalone = false
25
+ return nil != @text.index(/^xml[\n\r\t ]/mu)
26
+ end
27
+
28
+ def parseDefinition(defn, internal)
29
+ return if defn.length <= 0
30
+
31
+ p = defn.index(/<!ELEMENT/u)
32
+ if 0 == p then
33
+ return parseElementDefinition(defn, internal)
34
+ end
35
+
36
+ p = defn.index(/<!ATTLIST/u)
37
+ if 0 == p then
38
+ return parseAttlistDefinition(defn, internal)
39
+ end
40
+
41
+ p = defn.index(/<!NOTATION/u)
42
+ if 0 == p then
43
+ return parseNotationDefinition(defn, internal)
44
+ end
45
+
46
+ p = defn.index(/<!ENTITY.*%/mu)
47
+ if 0 == p then
48
+ return parseParameterEntityDefinition(defn, internal)
49
+ end
50
+
51
+ p = defn.index(/<!ENTITY.*SYSTEM/mu)
52
+ if 0 == p then
53
+ return parseSystemEntityDefinition(defn, internal)
54
+ end
55
+
56
+ p = defn.index(/<!ENTITY.*PUBLIC/mu)
57
+ if 0 == p then
58
+ return parsePublicEntityDefinition(defn, internal)
59
+ end
60
+
61
+ p = defn.index(/<!ENTITY/u)
62
+ if 0 == p then
63
+ return parseEntityDefinition(defn, internal)
64
+ end
65
+
66
+ p = defn.index(/<\?.*\?>/mu)
67
+ if 0 == p then
68
+ return parsePIDefinition(defn, internal)
69
+ end
70
+
71
+ raise sprintf("NOT recognised in the %s subset", (internal ? "internal" : "external"))
72
+ end
73
+
74
+ def parseElementDefinition(defn, internal)
75
+ #printf("element '%s' internal? %s\n", defn, internal)
76
+ end
77
+
78
+ def parseEntityDefinition(defn, internal)
79
+ if !internal then
80
+ raise "unexpected GEDecl"
81
+ end
82
+ #printf("entity '%s' internal? %s\n", defn, internal)
83
+ regex = /<!ENTITY[\n\r\t ]+([^\n\r\t ]+)[\n\r\t ]+"([^"]*)"[\n\r\t ]*>/mu
84
+ match = defn.match(regex).to_a
85
+ if 3 != match.length then
86
+ regex = /<!ENTITY[\n\r\t ]+([^\n\r\t ]+)[\n\r\t ]+'([^']*)'[\n\r\t ]*>/mu
87
+ match = defn.match(regex).to_a
88
+ if 3 != match.length then
89
+ raise sprintf("invalid GEDecl")
90
+ end
91
+ #raise sprintf("invalid GEDecl '%s'", defn)
92
+ end
93
+ name = match[1]
94
+ value = match[2]
95
+ #printf("name [%s] value [%s]\n", name, value)
96
+ entityMap[name] = value
97
+ end
98
+
99
+ def parseParameterEntityDefinition(defn, internal)
100
+ #printf("pentity '%s' internal? %s\n", defn, internal)
101
+ end
102
+
103
+ def parsePublicEntityDefinition(defn, internal)
104
+ #printf("public entity '%s' internal? %s\n", defn, internal)
105
+ end
106
+
107
+ def parseSystemEntityDefinition(defn, internal)
108
+ #printf("system entity '%s' internal? %s\n", defn, internal)
109
+ end
110
+
111
+ def parseAttlistDefinition(defn, internal)
112
+ printf("attlist '%s' internal? %s\n", defn, internal)
113
+ end
114
+
115
+ def parseNotationDefinition(defn, internal)
116
+ #printf("notation '%s' internal? %s\n", defn, internal)
117
+ end
118
+
119
+ def parsePIDefinition(defn, internal)
120
+ if !internal then
121
+ raise "unexpected processing instruction"
122
+ end
123
+ #printf("PI '%s' internal? %s\n", defn, internal)
124
+ end
125
+
126
+ end
@@ -0,0 +1,1037 @@
1
+ # xampl-pp : XML pull parser
2
+ # Copyright (C) 2002-2009 Bob Hutchison
3
+ #
4
+ # This library is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU Lesser General Public
6
+ # License as published by the Free Software Foundation; either
7
+ # version 2.1 of the License, or (at your option) any later version.
8
+ #
9
+ # This library is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # #Lesser General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Lesser General Public
15
+ # License along with this library; if not, write to the Free Software
16
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
+ #
18
+
19
+ require "xampl-pp-dtd"
20
+
21
+ class Xampl_PP
22
+ alias :nextEventBase :nextEvent
23
+ alias :setInputBase :setInput
24
+ alias :encodeBase :encode
25
+ alias :readBase :read
26
+
27
+ def nextEvent
28
+ begin
29
+ begin
30
+ return nextEventBase
31
+ ensure
32
+ #IGNORABLE_WHITESPACE
33
+ #DOCTYPE
34
+ if nil == @errorMessage then
35
+ if @unresolvedEntity then
36
+ raise "unresolvedEntity"
37
+ end
38
+ case @type
39
+ when START_ELEMENT
40
+ if (0 == @elementName.length) then
41
+ if @haveRoot then
42
+ raise "unexpected element"
43
+ end
44
+ end
45
+ legalName
46
+ @haveRoot = true
47
+ when END_ELEMENT
48
+ legalName
49
+ when COMMENT
50
+ if nil != @text.index(/--/u) then
51
+ raise "illegal '--' in comment"
52
+ end
53
+ legalText
54
+ when TEXT
55
+ if 0 == @elementName.length then
56
+ raise "text at document level"
57
+ end
58
+ legalText
59
+ when CDATA_SECTION
60
+ if 0 == @elementName.length then
61
+ raise "CDATA section at document level"
62
+ end
63
+ legalText
64
+ when ENTITY_REF
65
+ if 0 == @elementName.length then
66
+ raise "entity ref at document level"
67
+ end
68
+ legalText
69
+ when END_DOCUMENT
70
+ if 0 != @elementName.length then
71
+ raise sprintf("unexpected end of document (%d open elements)",
72
+ @elementName.length)
73
+ end
74
+ if !@haveRoot then
75
+ raise "unexpected end of document (no element)"
76
+ end
77
+ when PROCESSING_INSTRUCTION
78
+ if @pastXMLDecl and parseXMLDecl then
79
+ raise "unexpected XMLDecl"
80
+ end
81
+ legalText
82
+ end
83
+ @pastXMLDecl = true
84
+ end
85
+ end
86
+ rescue Exception => message
87
+ #print message.backtrace.join("\n")
88
+ if nil == @errorMessage then
89
+ if nil != @inputBuffer then
90
+ @errorMessage = sprintf("parse error: '%s' -- String input, line %d, column %d", message, @line, @column)
91
+ elsif nil != @input then
92
+ if @input.kind_of? File then
93
+ @errorMessage = sprintf("parse error: '%s' -- file '%s', line %d, column %d", message, @input.path, @line, @column)
94
+ else
95
+ @errorMessage = sprintf("parse error: '%s' -- unnamed IO stream, line %d, column %d", message, @line, @column)
96
+ end
97
+ else
98
+ @errorMessage = sprintf("parse error: '%s' -- unknown source, line %d, column %d", message, @line, @column)
99
+ end
100
+ end
101
+ raise @errorMessage
102
+ end
103
+ end
104
+
105
+ private
106
+
107
+ def setInput(v)
108
+ @haveRoot = false
109
+ @pastXMLDecl = false
110
+ @quickNamePattern = Regexp.new(/^[\x41-\x5A\x61-\x7a_:][\x30-\x39\x41-\x5A\x61-\x7a_:\.\-]*$/, 0, "UTF-8")
111
+ @quickTextPattern = /^[\x09\x0A\x0D\x20-\x7f]*$/mu
112
+ setInputBase(v)
113
+ end
114
+
115
+ def legalChar(c)
116
+ if c < 0x20 then
117
+ if (c != 0x9) and (c != 0x0A) and (c != 0x0D) then
118
+ raise "illegal character"
119
+ end
120
+ elsif (0xD7FF < c) and (c < 0xE000) then
121
+ raise "illegal character"
122
+ elsif (0xFFFD < c) and (c < 0x10000) then
123
+ raise "illegal character"
124
+ elsif (0x10FFFF < c) then
125
+ raise "illegal character"
126
+ end
127
+ return c
128
+ end
129
+
130
+ def encode(c)
131
+ return encodeBase(legalChar(c))
132
+ end
133
+
134
+ def read
135
+ return legalChar(readBase)
136
+ end
137
+
138
+ def legalText
139
+ if nil == @text then
140
+ raise "undefined text"
141
+ end
142
+
143
+ return if 0 == @text.index(@quickTextPattern)
144
+
145
+ a = @text.unpack('U*')
146
+ start = true
147
+ for c in a
148
+ legalChar(c)
149
+ end
150
+ end
151
+
152
+ def legalName
153
+ if nil == @name then
154
+ raise "undefined element name"
155
+ end
156
+
157
+ return if 0 == @name.index(@quickNamePattern)
158
+
159
+ a = @name.unpack('U*')
160
+ start = true
161
+ for c in a
162
+ # NameStart
163
+ while start do
164
+ break if (0x0041 <= c) and (c <= 0x005A)
165
+ break if (0x0061 <= c) and (c <= 0x007A)
166
+ break if c == ?_
167
+ break if c == ?:
168
+ break if (0x00C0 <= c) and (c <= 0x00D6)
169
+ break if (0x00D8 <= c) and (c <= 0x00F6)
170
+ break if (0x00F8 <= c) and (c <= 0x00FF)
171
+ break if (0x0100 <= c) and (c <= 0x0131)
172
+ break if (0x0134 <= c) and (c <= 0x013E)
173
+ break if (0x0141 <= c) and (c <= 0x0148)
174
+ break if (0x014A <= c) and (c <= 0x017E)
175
+ break if (0x0180 <= c) and (c <= 0x01C3)
176
+ break if (0x01CD <= c) and (c <= 0x01F0)
177
+ break if (0x01F4 <= c) and (c <= 0x01F5)
178
+ break if (0x01FA <= c) and (c <= 0x0217)
179
+ break if (0x0250 <= c) and (c <= 0x02A8)
180
+ break if (0x02BB <= c) and (c <= 0x02C1)
181
+ break if c == 0x0386
182
+ break if (0x0388 <= c) and (c <= 0x038A)
183
+ break if c == 0x038C
184
+ break if (0x038E <= c) and (c <= 0x03A1)
185
+ break if (0x03A3 <= c) and (c <= 0x03CE)
186
+ break if (0x03D0 <= c) and (c <= 0x03D6)
187
+ break if c == 0x03DA
188
+ break if c == 0x03DC
189
+ break if c == 0x03DE
190
+ break if c == 0x03E0
191
+ break if (0x03E2 <= c) and (c <= 0x03F3)
192
+ break if (0x0401 <= c) and (c <= 0x040C)
193
+ break if (0x040E <= c) and (c <= 0x044F)
194
+ break if (0x0451 <= c) and (c <= 0x045C)
195
+ break if (0x045E <= c) and (c <= 0x0481)
196
+ break if (0x0490 <= c) and (c <= 0x04C4)
197
+ break if (0x04C7 <= c) and (c <= 0x04C8)
198
+ break if (0x04CB <= c) and (c <= 0x04CC)
199
+ break if (0x04D0 <= c) and (c <= 0x04EB)
200
+ break if (0x04EE <= c) and (c <= 0x04F5)
201
+ break if (0x04F8 <= c) and (c <= 0x04F9)
202
+ break if (0x0531 <= c) and (c <= 0x0556)
203
+ break if c == 0x0559
204
+ break if (0x0561 <= c) and (c <= 0x0586)
205
+ break if (0x05D0 <= c) and (c <= 0x05EA)
206
+ break if (0x05F0 <= c) and (c <= 0x05F2)
207
+ break if (0x0621 <= c) and (c <= 0x063A)
208
+ break if (0x0641 <= c) and (c <= 0x064A)
209
+ break if (0x0671 <= c) and (c <= 0x06B7)
210
+ break if (0x06BA <= c) and (c <= 0x06BE)
211
+ break if (0x06C0 <= c) and (c <= 0x06CE)
212
+ break if (0x06D0 <= c) and (c <= 0x06D3)
213
+ break if c == 0x06D5
214
+ break if (0x06E5 <= c) and (c <= 0x06E6)
215
+ break if (0x0905 <= c) and (c <= 0x0939)
216
+ break if c == 0x093D
217
+ break if (0x0958 <= c) and (c <= 0x0961)
218
+ break if (0x0985 <= c) and (c <= 0x098C)
219
+ break if (0x098F <= c) and (c <= 0x0990)
220
+ break if (0x0993 <= c) and (c <= 0x09A8)
221
+ break if (0x09AA <= c) and (c <= 0x09B0)
222
+ break if c == 0x09B2
223
+ break if (0x09B6 <= c) and (c <= 0x09B9)
224
+ break if (0x09DC <= c) and (c <= 0x09DD)
225
+ break if (0x09DF <= c) and (c <= 0x09E1)
226
+ break if (0x09F0 <= c) and (c <= 0x09F1)
227
+ break if (0x0A05 <= c) and (c <= 0x0A0A)
228
+ break if (0x0A0F <= c) and (c <= 0x0A10)
229
+ break if (0x0A13 <= c) and (c <= 0x0A28)
230
+ break if (0x0A2A <= c) and (c <= 0x0A30)
231
+ break if (0x0A32 <= c) and (c <= 0x0A33)
232
+ break if (0x0A35 <= c) and (c <= 0x0A36)
233
+ break if (0x0A38 <= c) and (c <= 0x0A39)
234
+ break if (0x0A59 <= c) and (c <= 0x0A5C)
235
+ break if c == 0x0A5E
236
+ break if (0x0A72 <= c) and (c <= 0x0A74)
237
+ break if (0x0A85 <= c) and (c <= 0x0A8B)
238
+ break if c == 0x0A8D
239
+ break if (0x0A8F <= c) and (c <= 0x0A91)
240
+ break if (0x0A93 <= c) and (c <= 0x0AA8)
241
+ break if (0x0AAA <= c) and (c <= 0x0AB0)
242
+ break if (0x0AB2 <= c) and (c <= 0x0AB3)
243
+ break if (0x0AB5 <= c) and (c <= 0x0AB9)
244
+ break if c == 0x0ABD
245
+ break if c == 0x0AE0
246
+ break if (0x0B05 <= c) and (c <= 0x0B0C)
247
+ break if (0x0B0F <= c) and (c <= 0x0B10)
248
+ break if (0x0B13 <= c) and (c <= 0x0B28)
249
+ break if (0x0B2A <= c) and (c <= 0x0B30)
250
+ break if (0x0B32 <= c) and (c <= 0x0B33)
251
+ break if (0x0B36 <= c) and (c <= 0x0B39)
252
+ break if c == 0x0B3D
253
+ break if (0x0B5C <= c) and (c <= 0x0B5D)
254
+ break if (0x0B5F <= c) and (c <= 0x0B61)
255
+ break if (0x0B85 <= c) and (c <= 0x0B8A)
256
+ break if (0x0B8E <= c) and (c <= 0x0B90)
257
+ break if (0x0B92 <= c) and (c <= 0x0B95)
258
+ break if (0x0B99 <= c) and (c <= 0x0B9A)
259
+ break if c == 0x0B9C
260
+ break if (0x0B9E <= c) and (c <= 0x0B9F)
261
+ break if (0x0BA3 <= c) and (c <= 0x0BA4)
262
+ break if (0x0BA8 <= c) and (c <= 0x0BAA)
263
+ break if (0x0BAE <= c) and (c <= 0x0BB5)
264
+ break if (0x0BB7 <= c) and (c <= 0x0BB9)
265
+ break if (0x0C05 <= c) and (c <= 0x0C0C)
266
+ break if (0x0C0E <= c) and (c <= 0x0C10)
267
+ break if (0x0C12 <= c) and (c <= 0x0C28)
268
+ break if (0x0C2A <= c) and (c <= 0x0C33)
269
+ break if (0x0C35 <= c) and (c <= 0x0C39)
270
+ break if (0x0C60 <= c) and (c <= 0x0C61)
271
+ break if (0x0C85 <= c) and (c <= 0x0C8C)
272
+ break if (0x0C8E <= c) and (c <= 0x0C90)
273
+ break if (0x0C92 <= c) and (c <= 0x0CA8)
274
+ break if (0x0CAA <= c) and (c <= 0x0CB3)
275
+ break if (0x0CB5 <= c) and (c <= 0x0CB9)
276
+ break if c == 0x0CDE
277
+ break if (0x0CE0 <= c) and (c <= 0x0CE1)
278
+ break if (0x0D05 <= c) and (c <= 0x0D0C)
279
+ break if (0x0D0E <= c) and (c <= 0x0D10)
280
+ break if (0x0D12 <= c) and (c <= 0x0D28)
281
+ break if (0x0D2A <= c) and (c <= 0x0D39)
282
+ break if (0x0D60 <= c) and (c <= 0x0D61)
283
+ break if (0x0E01 <= c) and (c <= 0x0E2E)
284
+ break if c == 0x0E30
285
+ break if (0x0E32 <= c) and (c <= 0x0E33)
286
+ break if (0x0E40 <= c) and (c <= 0x0E45)
287
+ break if (0x0E81 <= c) and (c <= 0x0E82)
288
+ break if c == 0x0E84
289
+ break if (0x0E87 <= c) and (c <= 0x0E88)
290
+ break if c == 0x0E8A
291
+ break if c == 0x0E8D
292
+ break if (0x0E94 <= c) and (c <= 0x0E97)
293
+ break if (0x0E99 <= c) and (c <= 0x0E9F)
294
+ break if (0x0EA1 <= c) and (c <= 0x0EA3)
295
+ break if c == 0x0EA5
296
+ break if c == 0x0EA7
297
+ break if (0x0EAA <= c) and (c <= 0x0EAB)
298
+ break if (0x0EAD <= c) and (c <= 0x0EAE)
299
+ break if c == 0x0EB0
300
+ break if (0x0EB2 <= c) and (c <= 0x0EB3)
301
+ break if c == 0x0EBD
302
+ break if (0x0EC0 <= c) and (c <= 0x0EC4)
303
+ break if (0x0F40 <= c) and (c <= 0x0F47)
304
+ break if (0x0F49 <= c) and (c <= 0x0F69)
305
+ break if (0x10A0 <= c) and (c <= 0x10C5)
306
+ break if (0x10D0 <= c) and (c <= 0x10F6)
307
+ break if c == 0x1100
308
+ break if (0x1102 <= c) and (c <= 0x1103)
309
+ break if (0x1105 <= c) and (c <= 0x1107)
310
+ break if c == 0x1109
311
+ break if (0x110B <= c) and (c <= 0x110C)
312
+ break if (0x110E <= c) and (c <= 0x1112)
313
+ break if c == 0x113C
314
+ break if c == 0x113E
315
+ break if c == 0x1140
316
+ break if c == 0x114C
317
+ break if c == 0x114E
318
+ break if c == 0x1150
319
+ break if (0x1154 <= c) and (c <= 0x1155)
320
+ break if c == 0x1159
321
+ break if (0x115F <= c) and (c <= 0x1161)
322
+ break if c == 0x1163
323
+ break if c == 0x1165
324
+ break if c == 0x1167
325
+ break if c == 0x1169
326
+ break if (0x116D <= c) and (c <= 0x116E)
327
+ break if (0x1172 <= c) and (c <= 0x1173)
328
+ break if c == 0x1175
329
+ break if c == 0x119E
330
+ break if c == 0x11A8
331
+ break if c == 0x11AB
332
+ break if (0x11AE <= c) and (c <= 0x11AF)
333
+ break if (0x11B7 <= c) and (c <= 0x11B8)
334
+ break if c == 0x11BA
335
+ break if (0x11BC <= c) and (c <= 0x11C2)
336
+ break if c == 0x11EB
337
+ break if c == 0x11F0
338
+ break if c == 0x11F9
339
+ break if (0x1E00 <= c) and (c <= 0x1E9B)
340
+ break if (0x1EA0 <= c) and (c <= 0x1EF9)
341
+ break if (0x1F00 <= c) and (c <= 0x1F15)
342
+ break if (0x1F18 <= c) and (c <= 0x1F1D)
343
+ break if (0x1F20 <= c) and (c <= 0x1F45)
344
+ break if (0x1F48 <= c) and (c <= 0x1F4D)
345
+ break if (0x1F50 <= c) and (c <= 0x1F57)
346
+ break if c == 0x1F59
347
+ break if c == 0x1F5B
348
+ break if c == 0x1F5D
349
+ break if (0x1F5F <= c) and (c <= 0x1F7D)
350
+ break if (0x1F80 <= c) and (c <= 0x1FB4)
351
+ break if (0x1FB6 <= c) and (c <= 0x1FBC)
352
+ break if c == 0x1FBE
353
+ break if (0x1FC2 <= c) and (c <= 0x1FC4)
354
+ break if (0x1FC6 <= c) and (c <= 0x1FCC)
355
+ break if (0x1FD0 <= c) and (c <= 0x1FD3)
356
+ break if (0x1FD6 <= c) and (c <= 0x1FDB)
357
+ break if (0x1FE0 <= c) and (c <= 0x1FEC)
358
+ break if (0x1FF2 <= c) and (c <= 0x1FF4)
359
+ break if (0x1FF6 <= c) and (c <= 0x1FFC)
360
+ break if c == 0x2126
361
+ break if (0x212A <= c) and (c <= 0x212B)
362
+ break if c == 0x212E
363
+ break if (0x2180 <= c) and (c <= 0x2182)
364
+ break if c == 0x3007
365
+ break if (0x3021 <= c) and (c <= 0x3029)
366
+ break if (0x3041 <= c) and (c <= 0x3094)
367
+ break if (0x30A1 <= c) and (c <= 0x30FA)
368
+ break if (0x3105 <= c) and (c <= 0x312C)
369
+ break if (0x4E00 <= c) and (c <= 0x9FA5)
370
+ break if (0xAC00 <= c) and (c <= 0xD7A3)
371
+ break if (0x0030 <= c) and (c <= 0x0039)
372
+ break if (0x0041 <= c) and (c <= 0x005A)
373
+ break if (0x0061 <= c) and (c <= 0x007A)
374
+ break if c == 0x00B7
375
+ break if (0x00C0 <= c) and (c <= 0x00D6)
376
+ break if (0x00D8 <= c) and (c <= 0x00F6)
377
+ break if (0x00F8 <= c) and (c <= 0x00FF)
378
+ break if (0x0100 <= c) and (c <= 0x0131)
379
+ break if (0x0134 <= c) and (c <= 0x013E)
380
+ break if (0x0141 <= c) and (c <= 0x0148)
381
+ break if (0x014A <= c) and (c <= 0x017E)
382
+ break if (0x0180 <= c) and (c <= 0x01C3)
383
+ break if (0x01CD <= c) and (c <= 0x01F0)
384
+ break if (0x01F4 <= c) and (c <= 0x01F5)
385
+ break if (0x01FA <= c) and (c <= 0x0217)
386
+ break if (0x0250 <= c) and (c <= 0x02A8)
387
+ break if (0x02BB <= c) and (c <= 0x02C1)
388
+ break if c == 0x02D0
389
+ break if c == 0x02D1
390
+ break if (0x0300 <= c) and (c <= 0x0345)
391
+ break if (0x0360 <= c) and (c <= 0x0361)
392
+ break if c == 0x0386
393
+ break if c == 0x0387
394
+ break if (0x0388 <= c) and (c <= 0x038A)
395
+ break if c == 0x038C
396
+ break if (0x038E <= c) and (c <= 0x03A1)
397
+ break if (0x03A3 <= c) and (c <= 0x03CE)
398
+ break if (0x03D0 <= c) and (c <= 0x03D6)
399
+ break if c == 0x03DA
400
+ break if c == 0x03DC
401
+ break if c == 0x03DE
402
+ break if c == 0x03E0
403
+ break if (0x03E2 <= c) and (c <= 0x03F3)
404
+ break if (0x0401 <= c) and (c <= 0x040C)
405
+ break if (0x040E <= c) and (c <= 0x044F)
406
+ break if (0x0451 <= c) and (c <= 0x045C)
407
+ break if (0x045E <= c) and (c <= 0x0481)
408
+ break if (0x0483 <= c) and (c <= 0x0486)
409
+ break if (0x0490 <= c) and (c <= 0x04C4)
410
+ break if (0x04C7 <= c) and (c <= 0x04C8)
411
+ break if (0x04CB <= c) and (c <= 0x04CC)
412
+ break if (0x04D0 <= c) and (c <= 0x04EB)
413
+ break if (0x04EE <= c) and (c <= 0x04F5)
414
+ break if (0x04F8 <= c) and (c <= 0x04F9)
415
+ break if (0x0531 <= c) and (c <= 0x0556)
416
+ break if c == 0x0559
417
+ break if (0x0561 <= c) and (c <= 0x0586)
418
+ break if (0x0591 <= c) and (c <= 0x05A1)
419
+ break if (0x05A3 <= c) and (c <= 0x05B9)
420
+ break if (0x05BB <= c) and (c <= 0x05BD)
421
+ break if c == 0x05BF
422
+ break if (0x05C1 <= c) and (c <= 0x05C2)
423
+ break if c == 0x05C4
424
+ break if (0x05D0 <= c) and (c <= 0x05EA)
425
+ break if (0x05F0 <= c) and (c <= 0x05F2)
426
+ break if (0x0621 <= c) and (c <= 0x063A)
427
+ break if c == 0x0640
428
+ break if (0x0641 <= c) and (c <= 0x064A)
429
+ break if (0x064B <= c) and (c <= 0x0652)
430
+ break if (0x0660 <= c) and (c <= 0x0669)
431
+ break if c == 0x0670
432
+ break if (0x0671 <= c) and (c <= 0x06B7)
433
+ break if (0x06BA <= c) and (c <= 0x06BE)
434
+ break if (0x06C0 <= c) and (c <= 0x06CE)
435
+ break if (0x06D0 <= c) and (c <= 0x06D3)
436
+ break if c == 0x06D5
437
+ break if (0x06D6 <= c) and (c <= 0x06DC)
438
+ break if (0x06DD <= c) and (c <= 0x06DF)
439
+ break if (0x06E0 <= c) and (c <= 0x06E4)
440
+ break if (0x06E5 <= c) and (c <= 0x06E6)
441
+ break if (0x06E7 <= c) and (c <= 0x06E8)
442
+ break if (0x06EA <= c) and (c <= 0x06ED)
443
+ break if (0x06F0 <= c) and (c <= 0x06F9)
444
+ break if (0x0901 <= c) and (c <= 0x0903)
445
+ break if (0x0905 <= c) and (c <= 0x0939)
446
+ break if c == 0x093C
447
+ break if c == 0x093D
448
+ break if (0x093E <= c) and (c <= 0x094C)
449
+ break if c == 0x094D
450
+ break if (0x0951 <= c) and (c <= 0x0954)
451
+ break if (0x0958 <= c) and (c <= 0x0961)
452
+ break if (0x0962 <= c) and (c <= 0x0963)
453
+ break if (0x0966 <= c) and (c <= 0x096F)
454
+ break if (0x0981 <= c) and (c <= 0x0983)
455
+ break if (0x0985 <= c) and (c <= 0x098C)
456
+ break if (0x098F <= c) and (c <= 0x0990)
457
+ break if (0x0993 <= c) and (c <= 0x09A8)
458
+ break if (0x09AA <= c) and (c <= 0x09B0)
459
+ break if c == 0x09B2
460
+ break if (0x09B6 <= c) and (c <= 0x09B9)
461
+ break if c == 0x09BC
462
+ break if c == 0x09BE
463
+ break if c == 0x09BF
464
+ break if (0x09C0 <= c) and (c <= 0x09C4)
465
+ break if (0x09C7 <= c) and (c <= 0x09C8)
466
+ break if (0x09CB <= c) and (c <= 0x09CD)
467
+ break if c == 0x09D7
468
+ break if (0x09DC <= c) and (c <= 0x09DD)
469
+ break if (0x09DF <= c) and (c <= 0x09E1)
470
+ break if (0x09E2 <= c) and (c <= 0x09E3)
471
+ break if (0x09E6 <= c) and (c <= 0x09EF)
472
+ break if (0x09F0 <= c) and (c <= 0x09F1)
473
+ break if c == 0x0A02
474
+ break if (0x0A05 <= c) and (c <= 0x0A0A)
475
+ break if (0x0A0F <= c) and (c <= 0x0A10)
476
+ break if (0x0A13 <= c) and (c <= 0x0A28)
477
+ break if (0x0A2A <= c) and (c <= 0x0A30)
478
+ break if (0x0A32 <= c) and (c <= 0x0A33)
479
+ break if (0x0A35 <= c) and (c <= 0x0A36)
480
+ break if (0x0A38 <= c) and (c <= 0x0A39)
481
+ break if c == 0x0A3C
482
+ break if c == 0x0A3E
483
+ break if c == 0x0A3F
484
+ break if (0x0A40 <= c) and (c <= 0x0A42)
485
+ break if (0x0A47 <= c) and (c <= 0x0A48)
486
+ break if (0x0A4B <= c) and (c <= 0x0A4D)
487
+ break if (0x0A59 <= c) and (c <= 0x0A5C)
488
+ break if c == 0x0A5E
489
+ break if (0x0A66 <= c) and (c <= 0x0A6F)
490
+ break if (0x0A70 <= c) and (c <= 0x0A71)
491
+ break if (0x0A72 <= c) and (c <= 0x0A74)
492
+ break if (0x0A81 <= c) and (c <= 0x0A83)
493
+ break if (0x0A85 <= c) and (c <= 0x0A8B)
494
+ break if c == 0x0A8D
495
+ break if (0x0A8F <= c) and (c <= 0x0A91)
496
+ break if (0x0A93 <= c) and (c <= 0x0AA8)
497
+ break if (0x0AAA <= c) and (c <= 0x0AB0)
498
+ break if (0x0AB2 <= c) and (c <= 0x0AB3)
499
+ break if (0x0AB5 <= c) and (c <= 0x0AB9)
500
+ break if c == 0x0ABC
501
+ break if c == 0x0ABD
502
+ break if (0x0ABE <= c) and (c <= 0x0AC5)
503
+ break if (0x0AC7 <= c) and (c <= 0x0AC9)
504
+ break if (0x0ACB <= c) and (c <= 0x0ACD)
505
+ break if c == 0x0AE0
506
+ break if (0x0AE6 <= c) and (c <= 0x0AEF)
507
+ break if (0x0B01 <= c) and (c <= 0x0B03)
508
+ break if (0x0B05 <= c) and (c <= 0x0B0C)
509
+ break if (0x0B0F <= c) and (c <= 0x0B10)
510
+ break if (0x0B13 <= c) and (c <= 0x0B28)
511
+ break if (0x0B2A <= c) and (c <= 0x0B30)
512
+ break if (0x0B32 <= c) and (c <= 0x0B33)
513
+ break if (0x0B36 <= c) and (c <= 0x0B39)
514
+ break if c == 0x0B3C
515
+ break if c == 0x0B3D
516
+ break if (0x0B3E <= c) and (c <= 0x0B43)
517
+ break if (0x0B47 <= c) and (c <= 0x0B48)
518
+ break if (0x0B4B <= c) and (c <= 0x0B4D)
519
+ break if (0x0B56 <= c) and (c <= 0x0B57)
520
+ break if (0x0B5C <= c) and (c <= 0x0B5D)
521
+ break if (0x0B5F <= c) and (c <= 0x0B61)
522
+ break if (0x0B66 <= c) and (c <= 0x0B6F)
523
+ break if (0x0B82 <= c) and (c <= 0x0B83)
524
+ break if (0x0B85 <= c) and (c <= 0x0B8A)
525
+ break if (0x0B8E <= c) and (c <= 0x0B90)
526
+ break if (0x0B92 <= c) and (c <= 0x0B95)
527
+ break if (0x0B99 <= c) and (c <= 0x0B9A)
528
+ break if c == 0x0B9C
529
+ break if (0x0B9E <= c) and (c <= 0x0B9F)
530
+ break if (0x0BA3 <= c) and (c <= 0x0BA4)
531
+ break if (0x0BA8 <= c) and (c <= 0x0BAA)
532
+ break if (0x0BAE <= c) and (c <= 0x0BB5)
533
+ break if (0x0BB7 <= c) and (c <= 0x0BB9)
534
+ break if (0x0BBE <= c) and (c <= 0x0BC2)
535
+ break if (0x0BC6 <= c) and (c <= 0x0BC8)
536
+ break if (0x0BCA <= c) and (c <= 0x0BCD)
537
+ break if c == 0x0BD7
538
+ break if (0x0BE7 <= c) and (c <= 0x0BEF)
539
+ break if (0x0C01 <= c) and (c <= 0x0C03)
540
+ break if (0x0C05 <= c) and (c <= 0x0C0C)
541
+ break if (0x0C0E <= c) and (c <= 0x0C10)
542
+ break if (0x0C12 <= c) and (c <= 0x0C28)
543
+ break if (0x0C2A <= c) and (c <= 0x0C33)
544
+ break if (0x0C35 <= c) and (c <= 0x0C39)
545
+ break if (0x0C3E <= c) and (c <= 0x0C44)
546
+ break if (0x0C46 <= c) and (c <= 0x0C48)
547
+ break if (0x0C4A <= c) and (c <= 0x0C4D)
548
+ break if (0x0C55 <= c) and (c <= 0x0C56)
549
+ break if (0x0C60 <= c) and (c <= 0x0C61)
550
+ break if (0x0C66 <= c) and (c <= 0x0C6F)
551
+ break if (0x0C82 <= c) and (c <= 0x0C83)
552
+ break if (0x0C85 <= c) and (c <= 0x0C8C)
553
+ break if (0x0C8E <= c) and (c <= 0x0C90)
554
+ break if (0x0C92 <= c) and (c <= 0x0CA8)
555
+ break if (0x0CAA <= c) and (c <= 0x0CB3)
556
+ break if (0x0CB5 <= c) and (c <= 0x0CB9)
557
+ break if (0x0CBE <= c) and (c <= 0x0CC4)
558
+ break if (0x0CC6 <= c) and (c <= 0x0CC8)
559
+ break if (0x0CCA <= c) and (c <= 0x0CCD)
560
+ break if (0x0CD5 <= c) and (c <= 0x0CD6)
561
+ break if c == 0x0CDE
562
+ break if (0x0CE0 <= c) and (c <= 0x0CE1)
563
+ break if (0x0CE6 <= c) and (c <= 0x0CEF)
564
+ break if (0x0D02 <= c) and (c <= 0x0D03)
565
+ break if (0x0D05 <= c) and (c <= 0x0D0C)
566
+ break if (0x0D0E <= c) and (c <= 0x0D10)
567
+ break if (0x0D12 <= c) and (c <= 0x0D28)
568
+ break if (0x0D2A <= c) and (c <= 0x0D39)
569
+ break if (0x0D3E <= c) and (c <= 0x0D43)
570
+ break if (0x0D46 <= c) and (c <= 0x0D48)
571
+ break if (0x0D4A <= c) and (c <= 0x0D4D)
572
+ break if c == 0x0D57
573
+ break if (0x0D60 <= c) and (c <= 0x0D61)
574
+ break if (0x0D66 <= c) and (c <= 0x0D6F)
575
+ break if (0x0E01 <= c) and (c <= 0x0E2E)
576
+ break if c == 0x0E30
577
+ break if c == 0x0E31
578
+ break if (0x0E32 <= c) and (c <= 0x0E33)
579
+ break if (0x0E34 <= c) and (c <= 0x0E3A)
580
+ break if (0x0E40 <= c) and (c <= 0x0E45)
581
+ break if c == 0x0E46
582
+ break if (0x0E47 <= c) and (c <= 0x0E4E)
583
+ break if (0x0E50 <= c) and (c <= 0x0E59)
584
+ break if (0x0E81 <= c) and (c <= 0x0E82)
585
+ break if c == 0x0E84
586
+ break if (0x0E87 <= c) and (c <= 0x0E88)
587
+ break if c == 0x0E8A
588
+ break if c == 0x0E8D
589
+ break if (0x0E94 <= c) and (c <= 0x0E97)
590
+ break if (0x0E99 <= c) and (c <= 0x0E9F)
591
+ break if (0x0EA1 <= c) and (c <= 0x0EA3)
592
+ break if c == 0x0EA5
593
+ break if c == 0x0EA7
594
+ break if (0x0EAA <= c) and (c <= 0x0EAB)
595
+ break if (0x0EAD <= c) and (c <= 0x0EAE)
596
+ break if c == 0x0EB0
597
+ break if c == 0x0EB1
598
+ break if (0x0EB2 <= c) and (c <= 0x0EB3)
599
+ break if (0x0EB4 <= c) and (c <= 0x0EB9)
600
+ break if (0x0EBB <= c) and (c <= 0x0EBC)
601
+ break if c == 0x0EBD
602
+ break if (0x0EC0 <= c) and (c <= 0x0EC4)
603
+ break if c == 0x0EC6
604
+ break if (0x0EC8 <= c) and (c <= 0x0ECD)
605
+ break if (0x0ED0 <= c) and (c <= 0x0ED9)
606
+ break if (0x0F18 <= c) and (c <= 0x0F19)
607
+ break if (0x0F20 <= c) and (c <= 0x0F29)
608
+ break if c == 0x0F35
609
+ break if c == 0x0F37
610
+ break if c == 0x0F39
611
+ break if c == 0x0F3E
612
+ break if c == 0x0F3F
613
+ break if (0x0F40 <= c) and (c <= 0x0F47)
614
+ break if (0x0F49 <= c) and (c <= 0x0F69)
615
+ break if (0x0F71 <= c) and (c <= 0x0F84)
616
+ break if (0x0F86 <= c) and (c <= 0x0F8B)
617
+ break if (0x0F90 <= c) and (c <= 0x0F95)
618
+ break if c == 0x0F97
619
+ break if (0x0F99 <= c) and (c <= 0x0FAD)
620
+ break if (0x0FB1 <= c) and (c <= 0x0FB7)
621
+ break if c == 0x0FB9
622
+ break if (0x10A0 <= c) and (c <= 0x10C5)
623
+ break if (0x10D0 <= c) and (c <= 0x10F6)
624
+ break if c == 0x1100
625
+ break if (0x1102 <= c) and (c <= 0x1103)
626
+ break if (0x1105 <= c) and (c <= 0x1107)
627
+ break if c == 0x1109
628
+ break if (0x110B <= c) and (c <= 0x110C)
629
+ break if (0x110E <= c) and (c <= 0x1112)
630
+ break if c == 0x113C
631
+ break if c == 0x113E
632
+ break if c == 0x1140
633
+ break if c == 0x114C
634
+ break if c == 0x114E
635
+ break if c == 0x1150
636
+ break if (0x1154 <= c) and (c <= 0x1155)
637
+ break if c == 0x1159
638
+ break if (0x115F <= c) and (c <= 0x1161)
639
+ break if c == 0x1163
640
+ break if c == 0x1165
641
+ break if c == 0x1167
642
+ break if c == 0x1169
643
+ break if (0x116D <= c) and (c <= 0x116E)
644
+ break if (0x1172 <= c) and (c <= 0x1173)
645
+ break if c == 0x1175
646
+ break if c == 0x119E
647
+ break if c == 0x11A8
648
+ break if c == 0x11AB
649
+ break if (0x11AE <= c) and (c <= 0x11AF)
650
+ break if (0x11B7 <= c) and (c <= 0x11B8)
651
+ break if c == 0x11BA
652
+ break if (0x11BC <= c) and (c <= 0x11C2)
653
+ break if c == 0x11EB
654
+ break if c == 0x11F0
655
+ break if c == 0x11F9
656
+ break if (0x1E00 <= c) and (c <= 0x1E9B)
657
+ break if (0x1EA0 <= c) and (c <= 0x1EF9)
658
+ break if (0x1F00 <= c) and (c <= 0x1F15)
659
+ break if (0x1F18 <= c) and (c <= 0x1F1D)
660
+ break if (0x1F20 <= c) and (c <= 0x1F45)
661
+ break if (0x1F48 <= c) and (c <= 0x1F4D)
662
+ break if (0x1F50 <= c) and (c <= 0x1F57)
663
+ break if c == 0x1F59
664
+ break if c == 0x1F5B
665
+ break if c == 0x1F5D
666
+ break if (0x1F5F <= c) and (c <= 0x1F7D)
667
+ break if (0x1F80 <= c) and (c <= 0x1FB4)
668
+ break if (0x1FB6 <= c) and (c <= 0x1FBC)
669
+ break if c == 0x1FBE
670
+ break if (0x1FC2 <= c) and (c <= 0x1FC4)
671
+ break if (0x1FC6 <= c) and (c <= 0x1FCC)
672
+ break if (0x1FD0 <= c) and (c <= 0x1FD3)
673
+ break if (0x1FD6 <= c) and (c <= 0x1FDB)
674
+ break if (0x1FE0 <= c) and (c <= 0x1FEC)
675
+ break if (0x1FF2 <= c) and (c <= 0x1FF4)
676
+ break if (0x1FF6 <= c) and (c <= 0x1FFC)
677
+ break if (0x20D0 <= c) and (c <= 0x20DC)
678
+ break if c == 0x20E1
679
+ break if c == 0x2126
680
+ break if (0x212A <= c) and (c <= 0x212B)
681
+ break if c == 0x212E
682
+ break if (0x2180 <= c) and (c <= 0x2182)
683
+ break if c == 0x3005
684
+ break if c == 0x3007
685
+ break if (0x3021 <= c) and (c <= 0x3029)
686
+ break if (0x302A <= c) and (c <= 0x302F)
687
+ break if (0x3031 <= c) and (c <= 0x3035)
688
+ break if (0x3041 <= c) and (c <= 0x3094)
689
+ break if c == 0x3099
690
+ break if c == 0x309A
691
+ break if (0x309D <= c) and (c <= 0x309E)
692
+ break if (0x30A1 <= c) and (c <= 0x30FA)
693
+ break if (0x30FC <= c) and (c <= 0x30FE)
694
+ break if (0x3105 <= c) and (c <= 0x312C)
695
+ break if (0x4E00 <= c) and (c <= 0x9FA5)
696
+ break if (0xAC00 <= c) and (c <= 0xD7A3)
697
+ raise "illegal name start character"
698
+ end
699
+ start = false
700
+
701
+ #while true do
702
+ next if (0x0030 <= c) and (c <= 0x0039)
703
+ next if (0x0041 <= c) and (c <= 0x005A)
704
+ next if (0x0061 <= c) and (c <= 0x007A)
705
+ next if c == ?.
706
+ next if c == ?-
707
+ next if c == ?_
708
+ next if c == ?:
709
+ next if c == 0x00B7
710
+ next if (0x00C0 <= c) and (c <= 0x00D6)
711
+ next if (0x00D8 <= c) and (c <= 0x00F6)
712
+ next if (0x00F8 <= c) and (c <= 0x00FF)
713
+ next if (0x0100 <= c) and (c <= 0x0131)
714
+ next if (0x0134 <= c) and (c <= 0x013E)
715
+ next if (0x0141 <= c) and (c <= 0x0148)
716
+ next if (0x014A <= c) and (c <= 0x017E)
717
+ next if (0x0180 <= c) and (c <= 0x01C3)
718
+ next if (0x01CD <= c) and (c <= 0x01F0)
719
+ next if (0x01F4 <= c) and (c <= 0x01F5)
720
+ next if (0x01FA <= c) and (c <= 0x0217)
721
+ next if (0x0250 <= c) and (c <= 0x02A8)
722
+ next if (0x02BB <= c) and (c <= 0x02C1)
723
+ next if c == 0x02D0
724
+ next if c == 0x02D1
725
+ next if (0x0300 <= c) and (c <= 0x0345)
726
+ next if (0x0360 <= c) and (c <= 0x0361)
727
+ next if c == 0x0386
728
+ next if c == 0x0387
729
+ next if (0x0388 <= c) and (c <= 0x038A)
730
+ next if c == 0x038C
731
+ next if (0x038E <= c) and (c <= 0x03A1)
732
+ next if (0x03A3 <= c) and (c <= 0x03CE)
733
+ next if (0x03D0 <= c) and (c <= 0x03D6)
734
+ next if c == 0x03DA
735
+ next if c == 0x03DC
736
+ next if c == 0x03DE
737
+ next if c == 0x03E0
738
+ next if (0x03E2 <= c) and (c <= 0x03F3)
739
+ next if (0x0401 <= c) and (c <= 0x040C)
740
+ next if (0x040E <= c) and (c <= 0x044F)
741
+ next if (0x0451 <= c) and (c <= 0x045C)
742
+ next if (0x045E <= c) and (c <= 0x0481)
743
+ next if (0x0483 <= c) and (c <= 0x0486)
744
+ next if (0x0490 <= c) and (c <= 0x04C4)
745
+ next if (0x04C7 <= c) and (c <= 0x04C8)
746
+ next if (0x04CB <= c) and (c <= 0x04CC)
747
+ next if (0x04D0 <= c) and (c <= 0x04EB)
748
+ next if (0x04EE <= c) and (c <= 0x04F5)
749
+ next if (0x04F8 <= c) and (c <= 0x04F9)
750
+ next if (0x0531 <= c) and (c <= 0x0556)
751
+ next if c == 0x0559
752
+ next if (0x0561 <= c) and (c <= 0x0586)
753
+ next if (0x0591 <= c) and (c <= 0x05A1)
754
+ next if (0x05A3 <= c) and (c <= 0x05B9)
755
+ next if (0x05BB <= c) and (c <= 0x05BD)
756
+ next if c == 0x05BF
757
+ next if (0x05C1 <= c) and (c <= 0x05C2)
758
+ next if c == 0x05C4
759
+ next if (0x05D0 <= c) and (c <= 0x05EA)
760
+ next if (0x05F0 <= c) and (c <= 0x05F2)
761
+ next if (0x0621 <= c) and (c <= 0x063A)
762
+ next if c == 0x0640
763
+ next if (0x0641 <= c) and (c <= 0x064A)
764
+ next if (0x064B <= c) and (c <= 0x0652)
765
+ next if (0x0660 <= c) and (c <= 0x0669)
766
+ next if c == 0x0670
767
+ next if (0x0671 <= c) and (c <= 0x06B7)
768
+ next if (0x06BA <= c) and (c <= 0x06BE)
769
+ next if (0x06C0 <= c) and (c <= 0x06CE)
770
+ next if (0x06D0 <= c) and (c <= 0x06D3)
771
+ next if c == 0x06D5
772
+ next if (0x06D6 <= c) and (c <= 0x06DC)
773
+ next if (0x06DD <= c) and (c <= 0x06DF)
774
+ next if (0x06E0 <= c) and (c <= 0x06E4)
775
+ next if (0x06E5 <= c) and (c <= 0x06E6)
776
+ next if (0x06E7 <= c) and (c <= 0x06E8)
777
+ next if (0x06EA <= c) and (c <= 0x06ED)
778
+ next if (0x06F0 <= c) and (c <= 0x06F9)
779
+ next if (0x0901 <= c) and (c <= 0x0903)
780
+ next if (0x0905 <= c) and (c <= 0x0939)
781
+ next if c == 0x093C
782
+ next if c == 0x093D
783
+ next if (0x093E <= c) and (c <= 0x094C)
784
+ next if c == 0x094D
785
+ next if (0x0951 <= c) and (c <= 0x0954)
786
+ next if (0x0958 <= c) and (c <= 0x0961)
787
+ next if (0x0962 <= c) and (c <= 0x0963)
788
+ next if (0x0966 <= c) and (c <= 0x096F)
789
+ next if (0x0981 <= c) and (c <= 0x0983)
790
+ next if (0x0985 <= c) and (c <= 0x098C)
791
+ next if (0x098F <= c) and (c <= 0x0990)
792
+ next if (0x0993 <= c) and (c <= 0x09A8)
793
+ next if (0x09AA <= c) and (c <= 0x09B0)
794
+ next if c == 0x09B2
795
+ next if (0x09B6 <= c) and (c <= 0x09B9)
796
+ next if c == 0x09BC
797
+ next if c == 0x09BE
798
+ next if c == 0x09BF
799
+ next if (0x09C0 <= c) and (c <= 0x09C4)
800
+ next if (0x09C7 <= c) and (c <= 0x09C8)
801
+ next if (0x09CB <= c) and (c <= 0x09CD)
802
+ next if c == 0x09D7
803
+ next if (0x09DC <= c) and (c <= 0x09DD)
804
+ next if (0x09DF <= c) and (c <= 0x09E1)
805
+ next if (0x09E2 <= c) and (c <= 0x09E3)
806
+ next if (0x09E6 <= c) and (c <= 0x09EF)
807
+ next if (0x09F0 <= c) and (c <= 0x09F1)
808
+ next if c == 0x0A02
809
+ next if (0x0A05 <= c) and (c <= 0x0A0A)
810
+ next if (0x0A0F <= c) and (c <= 0x0A10)
811
+ next if (0x0A13 <= c) and (c <= 0x0A28)
812
+ next if (0x0A2A <= c) and (c <= 0x0A30)
813
+ next if (0x0A32 <= c) and (c <= 0x0A33)
814
+ next if (0x0A35 <= c) and (c <= 0x0A36)
815
+ next if (0x0A38 <= c) and (c <= 0x0A39)
816
+ next if c == 0x0A3C
817
+ next if c == 0x0A3E
818
+ next if c == 0x0A3F
819
+ next if (0x0A40 <= c) and (c <= 0x0A42)
820
+ next if (0x0A47 <= c) and (c <= 0x0A48)
821
+ next if (0x0A4B <= c) and (c <= 0x0A4D)
822
+ next if (0x0A59 <= c) and (c <= 0x0A5C)
823
+ next if c == 0x0A5E
824
+ next if (0x0A66 <= c) and (c <= 0x0A6F)
825
+ next if (0x0A70 <= c) and (c <= 0x0A71)
826
+ next if (0x0A72 <= c) and (c <= 0x0A74)
827
+ next if (0x0A81 <= c) and (c <= 0x0A83)
828
+ next if (0x0A85 <= c) and (c <= 0x0A8B)
829
+ next if c == 0x0A8D
830
+ next if (0x0A8F <= c) and (c <= 0x0A91)
831
+ next if (0x0A93 <= c) and (c <= 0x0AA8)
832
+ next if (0x0AAA <= c) and (c <= 0x0AB0)
833
+ next if (0x0AB2 <= c) and (c <= 0x0AB3)
834
+ next if (0x0AB5 <= c) and (c <= 0x0AB9)
835
+ next if c == 0x0ABC
836
+ next if c == 0x0ABD
837
+ next if (0x0ABE <= c) and (c <= 0x0AC5)
838
+ next if (0x0AC7 <= c) and (c <= 0x0AC9)
839
+ next if (0x0ACB <= c) and (c <= 0x0ACD)
840
+ next if c == 0x0AE0
841
+ next if (0x0AE6 <= c) and (c <= 0x0AEF)
842
+ next if (0x0B01 <= c) and (c <= 0x0B03)
843
+ next if (0x0B05 <= c) and (c <= 0x0B0C)
844
+ next if (0x0B0F <= c) and (c <= 0x0B10)
845
+ next if (0x0B13 <= c) and (c <= 0x0B28)
846
+ next if (0x0B2A <= c) and (c <= 0x0B30)
847
+ next if (0x0B32 <= c) and (c <= 0x0B33)
848
+ next if (0x0B36 <= c) and (c <= 0x0B39)
849
+ next if c == 0x0B3C
850
+ next if c == 0x0B3D
851
+ next if (0x0B3E <= c) and (c <= 0x0B43)
852
+ next if (0x0B47 <= c) and (c <= 0x0B48)
853
+ next if (0x0B4B <= c) and (c <= 0x0B4D)
854
+ next if (0x0B56 <= c) and (c <= 0x0B57)
855
+ next if (0x0B5C <= c) and (c <= 0x0B5D)
856
+ next if (0x0B5F <= c) and (c <= 0x0B61)
857
+ next if (0x0B66 <= c) and (c <= 0x0B6F)
858
+ next if (0x0B82 <= c) and (c <= 0x0B83)
859
+ next if (0x0B85 <= c) and (c <= 0x0B8A)
860
+ next if (0x0B8E <= c) and (c <= 0x0B90)
861
+ next if (0x0B92 <= c) and (c <= 0x0B95)
862
+ next if (0x0B99 <= c) and (c <= 0x0B9A)
863
+ next if c == 0x0B9C
864
+ next if (0x0B9E <= c) and (c <= 0x0B9F)
865
+ next if (0x0BA3 <= c) and (c <= 0x0BA4)
866
+ next if (0x0BA8 <= c) and (c <= 0x0BAA)
867
+ next if (0x0BAE <= c) and (c <= 0x0BB5)
868
+ next if (0x0BB7 <= c) and (c <= 0x0BB9)
869
+ next if (0x0BBE <= c) and (c <= 0x0BC2)
870
+ next if (0x0BC6 <= c) and (c <= 0x0BC8)
871
+ next if (0x0BCA <= c) and (c <= 0x0BCD)
872
+ next if c == 0x0BD7
873
+ next if (0x0BE7 <= c) and (c <= 0x0BEF)
874
+ next if (0x0C01 <= c) and (c <= 0x0C03)
875
+ next if (0x0C05 <= c) and (c <= 0x0C0C)
876
+ next if (0x0C0E <= c) and (c <= 0x0C10)
877
+ next if (0x0C12 <= c) and (c <= 0x0C28)
878
+ next if (0x0C2A <= c) and (c <= 0x0C33)
879
+ next if (0x0C35 <= c) and (c <= 0x0C39)
880
+ next if (0x0C3E <= c) and (c <= 0x0C44)
881
+ next if (0x0C46 <= c) and (c <= 0x0C48)
882
+ next if (0x0C4A <= c) and (c <= 0x0C4D)
883
+ next if (0x0C55 <= c) and (c <= 0x0C56)
884
+ next if (0x0C60 <= c) and (c <= 0x0C61)
885
+ next if (0x0C66 <= c) and (c <= 0x0C6F)
886
+ next if (0x0C82 <= c) and (c <= 0x0C83)
887
+ next if (0x0C85 <= c) and (c <= 0x0C8C)
888
+ next if (0x0C8E <= c) and (c <= 0x0C90)
889
+ next if (0x0C92 <= c) and (c <= 0x0CA8)
890
+ next if (0x0CAA <= c) and (c <= 0x0CB3)
891
+ next if (0x0CB5 <= c) and (c <= 0x0CB9)
892
+ next if (0x0CBE <= c) and (c <= 0x0CC4)
893
+ next if (0x0CC6 <= c) and (c <= 0x0CC8)
894
+ next if (0x0CCA <= c) and (c <= 0x0CCD)
895
+ next if (0x0CD5 <= c) and (c <= 0x0CD6)
896
+ next if c == 0x0CDE
897
+ next if (0x0CE0 <= c) and (c <= 0x0CE1)
898
+ next if (0x0CE6 <= c) and (c <= 0x0CEF)
899
+ next if (0x0D02 <= c) and (c <= 0x0D03)
900
+ next if (0x0D05 <= c) and (c <= 0x0D0C)
901
+ next if (0x0D0E <= c) and (c <= 0x0D10)
902
+ next if (0x0D12 <= c) and (c <= 0x0D28)
903
+ next if (0x0D2A <= c) and (c <= 0x0D39)
904
+ next if (0x0D3E <= c) and (c <= 0x0D43)
905
+ next if (0x0D46 <= c) and (c <= 0x0D48)
906
+ next if (0x0D4A <= c) and (c <= 0x0D4D)
907
+ next if c == 0x0D57
908
+ next if (0x0D60 <= c) and (c <= 0x0D61)
909
+ next if (0x0D66 <= c) and (c <= 0x0D6F)
910
+ next if (0x0E01 <= c) and (c <= 0x0E2E)
911
+ next if c == 0x0E30
912
+ next if c == 0x0E31
913
+ next if (0x0E32 <= c) and (c <= 0x0E33)
914
+ next if (0x0E34 <= c) and (c <= 0x0E3A)
915
+ next if (0x0E40 <= c) and (c <= 0x0E45)
916
+ next if c == 0x0E46
917
+ next if (0x0E47 <= c) and (c <= 0x0E4E)
918
+ next if (0x0E50 <= c) and (c <= 0x0E59)
919
+ next if (0x0E81 <= c) and (c <= 0x0E82)
920
+ next if c == 0x0E84
921
+ next if (0x0E87 <= c) and (c <= 0x0E88)
922
+ next if c == 0x0E8A
923
+ next if c == 0x0E8D
924
+ next if (0x0E94 <= c) and (c <= 0x0E97)
925
+ next if (0x0E99 <= c) and (c <= 0x0E9F)
926
+ next if (0x0EA1 <= c) and (c <= 0x0EA3)
927
+ next if c == 0x0EA5
928
+ next if c == 0x0EA7
929
+ next if (0x0EAA <= c) and (c <= 0x0EAB)
930
+ next if (0x0EAD <= c) and (c <= 0x0EAE)
931
+ next if c == 0x0EB0
932
+ next if c == 0x0EB1
933
+ next if (0x0EB2 <= c) and (c <= 0x0EB3)
934
+ next if (0x0EB4 <= c) and (c <= 0x0EB9)
935
+ next if (0x0EBB <= c) and (c <= 0x0EBC)
936
+ next if c == 0x0EBD
937
+ next if (0x0EC0 <= c) and (c <= 0x0EC4)
938
+ next if c == 0x0EC6
939
+ next if (0x0EC8 <= c) and (c <= 0x0ECD)
940
+ next if (0x0ED0 <= c) and (c <= 0x0ED9)
941
+ next if (0x0F18 <= c) and (c <= 0x0F19)
942
+ next if (0x0F20 <= c) and (c <= 0x0F29)
943
+ next if c == 0x0F35
944
+ next if c == 0x0F37
945
+ next if c == 0x0F39
946
+ next if c == 0x0F3E
947
+ next if c == 0x0F3F
948
+ next if (0x0F40 <= c) and (c <= 0x0F47)
949
+ next if (0x0F49 <= c) and (c <= 0x0F69)
950
+ next if (0x0F71 <= c) and (c <= 0x0F84)
951
+ next if (0x0F86 <= c) and (c <= 0x0F8B)
952
+ next if (0x0F90 <= c) and (c <= 0x0F95)
953
+ next if c == 0x0F97
954
+ next if (0x0F99 <= c) and (c <= 0x0FAD)
955
+ next if (0x0FB1 <= c) and (c <= 0x0FB7)
956
+ next if c == 0x0FB9
957
+ next if (0x10A0 <= c) and (c <= 0x10C5)
958
+ next if (0x10D0 <= c) and (c <= 0x10F6)
959
+ next if c == 0x1100
960
+ next if (0x1102 <= c) and (c <= 0x1103)
961
+ next if (0x1105 <= c) and (c <= 0x1107)
962
+ next if c == 0x1109
963
+ next if (0x110B <= c) and (c <= 0x110C)
964
+ next if (0x110E <= c) and (c <= 0x1112)
965
+ next if c == 0x113C
966
+ next if c == 0x113E
967
+ next if c == 0x1140
968
+ next if c == 0x114C
969
+ next if c == 0x114E
970
+ next if c == 0x1150
971
+ next if (0x1154 <= c) and (c <= 0x1155)
972
+ next if c == 0x1159
973
+ next if (0x115F <= c) and (c <= 0x1161)
974
+ next if c == 0x1163
975
+ next if c == 0x1165
976
+ next if c == 0x1167
977
+ next if c == 0x1169
978
+ next if (0x116D <= c) and (c <= 0x116E)
979
+ next if (0x1172 <= c) and (c <= 0x1173)
980
+ next if c == 0x1175
981
+ next if c == 0x119E
982
+ next if c == 0x11A8
983
+ next if c == 0x11AB
984
+ next if (0x11AE <= c) and (c <= 0x11AF)
985
+ next if (0x11B7 <= c) and (c <= 0x11B8)
986
+ next if c == 0x11BA
987
+ next if (0x11BC <= c) and (c <= 0x11C2)
988
+ next if c == 0x11EB
989
+ next if c == 0x11F0
990
+ next if c == 0x11F9
991
+ next if (0x1E00 <= c) and (c <= 0x1E9B)
992
+ next if (0x1EA0 <= c) and (c <= 0x1EF9)
993
+ next if (0x1F00 <= c) and (c <= 0x1F15)
994
+ next if (0x1F18 <= c) and (c <= 0x1F1D)
995
+ next if (0x1F20 <= c) and (c <= 0x1F45)
996
+ next if (0x1F48 <= c) and (c <= 0x1F4D)
997
+ next if (0x1F50 <= c) and (c <= 0x1F57)
998
+ next if c == 0x1F59
999
+ next if c == 0x1F5B
1000
+ next if c == 0x1F5D
1001
+ next if (0x1F5F <= c) and (c <= 0x1F7D)
1002
+ next if (0x1F80 <= c) and (c <= 0x1FB4)
1003
+ next if (0x1FB6 <= c) and (c <= 0x1FBC)
1004
+ next if c == 0x1FBE
1005
+ next if (0x1FC2 <= c) and (c <= 0x1FC4)
1006
+ next if (0x1FC6 <= c) and (c <= 0x1FCC)
1007
+ next if (0x1FD0 <= c) and (c <= 0x1FD3)
1008
+ next if (0x1FD6 <= c) and (c <= 0x1FDB)
1009
+ next if (0x1FE0 <= c) and (c <= 0x1FEC)
1010
+ next if (0x1FF2 <= c) and (c <= 0x1FF4)
1011
+ next if (0x1FF6 <= c) and (c <= 0x1FFC)
1012
+ next if (0x20D0 <= c) and (c <= 0x20DC)
1013
+ next if c == 0x20E1
1014
+ next if c == 0x2126
1015
+ next if (0x212A <= c) and (c <= 0x212B)
1016
+ next if c == 0x212E
1017
+ next if (0x2180 <= c) and (c <= 0x2182)
1018
+ next if c == 0x3005
1019
+ next if c == 0x3007
1020
+ next if (0x3021 <= c) and (c <= 0x3029)
1021
+ next if (0x302A <= c) and (c <= 0x302F)
1022
+ next if (0x3031 <= c) and (c <= 0x3035)
1023
+ next if (0x3041 <= c) and (c <= 0x3094)
1024
+ next if c == 0x3099
1025
+ next if c == 0x309A
1026
+ next if (0x309D <= c) and (c <= 0x309E)
1027
+ next if (0x30A1 <= c) and (c <= 0x30FA)
1028
+ next if (0x30FC <= c) and (c <= 0x30FE)
1029
+ next if (0x3105 <= c) and (c <= 0x312C)
1030
+ next if (0x4E00 <= c) and (c <= 0x9FA5)
1031
+ next if (0xAC00 <= c) and (c <= 0xD7A3)
1032
+
1033
+ raise "illegal name character"
1034
+ #end
1035
+ end
1036
+ end
1037
+ end