xamplr-pp 1.0.0

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