aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/nxml
diff options
context:
space:
mode:
authorMark A. Hershberger2007-11-23 06:58:00 +0000
committerMark A. Hershberger2007-11-23 06:58:00 +0000
commit8cd39fb3c4cf47d2464f00eaa69c587e17dd11cc (patch)
tree7bcd47a7dcbbad100dd3e8f8a7e08b48353c58a8 /lisp/nxml
parentf7cf8b2009b0bc2526d50c3455f737a543122dd4 (diff)
downloademacs-8cd39fb3c4cf47d2464f00eaa69c587e17dd11cc.tar.gz
emacs-8cd39fb3c4cf47d2464f00eaa69c587e17dd11cc.zip
Initial merge of nxml
Diffstat (limited to 'lisp/nxml')
-rw-r--r--lisp/nxml/Makefile80
-rw-r--r--lisp/nxml/NEWS199
-rw-r--r--lisp/nxml/README106
-rw-r--r--lisp/nxml/TODO468
-rw-r--r--lisp/nxml/char-name/subdirs.el8
-rw-r--r--lisp/nxml/char-name/unicode/00000-0007F.el97
-rw-r--r--lisp/nxml/char-name/unicode/00080-000FF.el98
-rw-r--r--lisp/nxml/char-name/unicode/00100-0017F.el130
-rw-r--r--lisp/nxml/char-name/unicode/00180-0024F.el181
-rw-r--r--lisp/nxml/char-name/unicode/00250-002AF.el96
-rw-r--r--lisp/nxml/char-name/unicode/002B0-002FF.el65
-rw-r--r--lisp/nxml/char-name/unicode/00300-0036F.el98
-rw-r--r--lisp/nxml/char-name/unicode/00370-003FF.el117
-rw-r--r--lisp/nxml/char-name/unicode/00400-004FF.el248
-rw-r--r--lisp/nxml/char-name/unicode/00500-0052F.el18
-rw-r--r--lisp/nxml/char-name/unicode/00530-0058F.el88
-rw-r--r--lisp/nxml/char-name/unicode/00590-005FF.el84
-rw-r--r--lisp/nxml/char-name/unicode/00600-006FF.el210
-rw-r--r--lisp/nxml/char-name/unicode/00700-0074F.el73
-rw-r--r--lisp/nxml/char-name/unicode/00780-007BF.el52
-rw-r--r--lisp/nxml/char-name/unicode/00900-0097F.el106
-rw-r--r--lisp/nxml/char-name/unicode/00980-009FF.el91
-rw-r--r--lisp/nxml/char-name/unicode/00A00-00A7F.el77
-rw-r--r--lisp/nxml/char-name/unicode/00A80-00AFF.el80
-rw-r--r--lisp/nxml/char-name/unicode/00B00-00B7F.el81
-rw-r--r--lisp/nxml/char-name/unicode/00B80-00BFF.el63
-rw-r--r--lisp/nxml/char-name/unicode/00C00-00C7F.el82
-rw-r--r--lisp/nxml/char-name/unicode/00C80-00CFF.el82
-rw-r--r--lisp/nxml/char-name/unicode/00D00-00D7F.el80
-rw-r--r--lisp/nxml/char-name/unicode/00D80-00DFF.el82
-rw-r--r--lisp/nxml/char-name/unicode/00E00-00E7F.el89
-rw-r--r--lisp/nxml/char-name/unicode/00E80-00EFF.el67
-rw-r--r--lisp/nxml/char-name/unicode/00F00-00FFF.el195
-rw-r--r--lisp/nxml/char-name/unicode/01000-0109F.el80
-rw-r--r--lisp/nxml/char-name/unicode/010A0-010FF.el82
-rw-r--r--lisp/nxml/char-name/unicode/01100-011FF.el242
-rw-r--r--lisp/nxml/char-name/unicode/01200-0137F.el347
-rw-r--r--lisp/nxml/char-name/unicode/013A0-013FF.el87
-rw-r--r--lisp/nxml/char-name/unicode/01400-0167F.el632
-rw-r--r--lisp/nxml/char-name/unicode/01680-0169F.el31
-rw-r--r--lisp/nxml/char-name/unicode/016A0-016FF.el83
-rw-r--r--lisp/nxml/char-name/unicode/01700-0171F.el22
-rw-r--r--lisp/nxml/char-name/unicode/01720-0173F.el25
-rw-r--r--lisp/nxml/char-name/unicode/01740-0175F.el22
-rw-r--r--lisp/nxml/char-name/unicode/01760-0177F.el20
-rw-r--r--lisp/nxml/char-name/unicode/01780-017FF.el105
-rw-r--r--lisp/nxml/char-name/unicode/01800-018AF.el157
-rw-r--r--lisp/nxml/char-name/unicode/01E00-01EFF.el248
-rw-r--r--lisp/nxml/char-name/unicode/01F00-01FFF.el235
-rw-r--r--lisp/nxml/char-name/unicode/02000-0206F.el97
-rw-r--r--lisp/nxml/char-name/unicode/02070-0209F.el31
-rw-r--r--lisp/nxml/char-name/unicode/020A0-020CF.el20
-rw-r--r--lisp/nxml/char-name/unicode/020D0-020FF.el29
-rw-r--r--lisp/nxml/char-name/unicode/02100-0214F.el76
-rw-r--r--lisp/nxml/char-name/unicode/02150-0218F.el51
-rw-r--r--lisp/nxml/char-name/unicode/02190-021FF.el114
-rw-r--r--lisp/nxml/char-name/unicode/02200-022FF.el258
-rw-r--r--lisp/nxml/char-name/unicode/02300-023FF.el209
-rw-r--r--lisp/nxml/char-name/unicode/02400-0243F.el41
-rw-r--r--lisp/nxml/char-name/unicode/02440-0245F.el13
-rw-r--r--lisp/nxml/char-name/unicode/02460-024FF.el161
-rw-r--r--lisp/nxml/char-name/unicode/02500-0257F.el130
-rw-r--r--lisp/nxml/char-name/unicode/02580-0259F.el34
-rw-r--r--lisp/nxml/char-name/unicode/025A0-025FF.el98
-rw-r--r--lisp/nxml/char-name/unicode/02600-026FF.el135
-rw-r--r--lisp/nxml/char-name/unicode/02700-027BF.el176
-rw-r--r--lisp/nxml/char-name/unicode/027C0-027EF.el30
-rw-r--r--lisp/nxml/char-name/unicode/027F0-027FF.el18
-rw-r--r--lisp/nxml/char-name/unicode/02800-028FF.el258
-rw-r--r--lisp/nxml/char-name/unicode/02900-0297F.el130
-rw-r--r--lisp/nxml/char-name/unicode/02980-029FF.el130
-rw-r--r--lisp/nxml/char-name/unicode/02A00-02AFF.el258
-rw-r--r--lisp/nxml/char-name/unicode/02E80-02EFF.el117
-rw-r--r--lisp/nxml/char-name/unicode/02F00-02FDF.el216
-rw-r--r--lisp/nxml/char-name/unicode/02FF0-02FFF.el14
-rw-r--r--lisp/nxml/char-name/unicode/03000-0303F.el66
-rw-r--r--lisp/nxml/char-name/unicode/03040-0309F.el95
-rw-r--r--lisp/nxml/char-name/unicode/030A0-030FF.el98
-rw-r--r--lisp/nxml/char-name/unicode/03100-0312F.el42
-rw-r--r--lisp/nxml/char-name/unicode/03130-0318F.el96
-rw-r--r--lisp/nxml/char-name/unicode/03190-0319F.el18
-rw-r--r--lisp/nxml/char-name/unicode/031A0-031BF.el26
-rw-r--r--lisp/nxml/char-name/unicode/031F0-031FF.el18
-rw-r--r--lisp/nxml/char-name/unicode/03200-032FF.el234
-rw-r--r--lisp/nxml/char-name/unicode/03300-033FF.el251
-rw-r--r--lisp/nxml/char-name/unicode/03400-04DBF.el2
-rw-r--r--lisp/nxml/char-name/unicode/0A000-0A48F.el1167
-rw-r--r--lisp/nxml/char-name/unicode/0A490-0A4CF.el57
-rw-r--r--lisp/nxml/char-name/unicode/0FB00-0FB4F.el60
-rw-r--r--lisp/nxml/char-name/unicode/0FB50-0FDFF.el596
-rw-r--r--lisp/nxml/char-name/unicode/0FE00-0FE0F.el18
-rw-r--r--lisp/nxml/char-name/unicode/0FE20-0FE2F.el6
-rw-r--r--lisp/nxml/char-name/unicode/0FE30-0FE4F.el32
-rw-r--r--lisp/nxml/char-name/unicode/0FE50-0FE6F.el28
-rw-r--r--lisp/nxml/char-name/unicode/0FE70-0FEFF.el143
-rw-r--r--lisp/nxml/char-name/unicode/0FF00-0FFEF.el227
-rw-r--r--lisp/nxml/char-name/unicode/0FFF0-0FFFF.el7
-rw-r--r--lisp/nxml/char-name/unicode/10300-1032F.el37
-rw-r--r--lisp/nxml/char-name/unicode/10330-1034F.el29
-rw-r--r--lisp/nxml/char-name/unicode/10400-1044F.el78
-rw-r--r--lisp/nxml/char-name/unicode/1D000-1D0FF.el248
-rw-r--r--lisp/nxml/char-name/unicode/1D100-1D1FF.el221
-rw-r--r--lisp/nxml/char-name/unicode/1D400-1D7FF.el993
-rw-r--r--lisp/nxml/char-name/unicode/E0000-E007F.el99
-rw-r--r--lisp/nxml/nxml-enc.el167
-rw-r--r--lisp/nxml/nxml-glyph.el418
-rw-r--r--lisp/nxml/nxml-maint.el106
-rw-r--r--lisp/nxml/nxml-mode.el2665
-rw-r--r--lisp/nxml/nxml-ns.el148
-rw-r--r--lisp/nxml/nxml-outln.el1040
-rw-r--r--lisp/nxml/nxml-parse.el320
-rw-r--r--lisp/nxml/nxml-rap.el467
-rw-r--r--lisp/nxml/nxml-uchnm.el257
-rw-r--r--lisp/nxml/nxml-util.el100
-rw-r--r--lisp/nxml/rng-auto.el244
-rw-r--r--lisp/nxml/rng-cmpct.el937
-rw-r--r--lisp/nxml/rng-dt.el64
-rw-r--r--lisp/nxml/rng-loc.el548
-rw-r--r--lisp/nxml/rng-maint.el343
-rw-r--r--lisp/nxml/rng-match.el1739
-rw-r--r--lisp/nxml/rng-nxml.el591
-rw-r--r--lisp/nxml/rng-parse.el104
-rw-r--r--lisp/nxml/rng-pttrn.el189
-rw-r--r--lisp/nxml/rng-uri.el355
-rw-r--r--lisp/nxml/rng-util.el172
-rw-r--r--lisp/nxml/rng-valid.el1467
-rw-r--r--lisp/nxml/rng-xsd.el858
-rw-r--r--lisp/nxml/subdirs.el8
-rw-r--r--lisp/nxml/test.invalid.xml8
-rw-r--r--lisp/nxml/test.valid.xml8
-rw-r--r--lisp/nxml/xmltok.el1925
-rw-r--r--lisp/nxml/xsd-regexp.el2121
132 files changed, 31314 insertions, 0 deletions
diff --git a/lisp/nxml/Makefile b/lisp/nxml/Makefile
new file mode 100644
index 00000000000..13eee93a0e8
--- /dev/null
+++ b/lisp/nxml/Makefile
@@ -0,0 +1,80 @@
1EXTRA=README NEWS VERSION TODO COPYING Makefile rng-auto.el \
2 nxml-mode.xml nxml-mode.rnc nxml-mode.texi nxml-mode.info dir \
3 test.valid.xml test.invalid.xml
4
5SRC=nxml-rap.el nxml-outln.el nxml-mode.el nxml-parse.el nxml-enc.el \
6 nxml-uchnm.el nxml-glyph.el nxml-maint.el nxml-util.el nxml-ns.el \
7 rng-dt.el rng-valid.el rng-pttrn.el rng-xsd.el rng-cmpct.el \
8 rng-match.el rng-nxml.el rng-util.el rng-loc.el rng-uri.el \
9 rng-parse.el rng-maint.el xsd-regexp.el xmltok.el
10
11ELC=nxml-rap.elc nxml-outln.elc nxml-mode.elc nxml-parse.elc nxml-enc.elc \
12 nxml-uchnm.elc nxml-glyph.elc nxml-maint.elc nxml-util.elc nxml-ns.elc \
13 rng-dt.elc rng-valid.elc rng-pttrn.elc rng-xsd.elc rng-cmpct.elc \
14 rng-match.elc rng-nxml.elc rng-util.elc rng-loc.elc rng-uri.elc \
15 rng-parse.elc rng-maint.elc xsd-regexp.elc xmltok.elc
16
17FILESTOCLEAN=stamp-byte-compile $(ELC) VERSION TAGS \
18 nxml-mode.texi nxml-mode.info dir
19
20EMACS=emacs
21ETAGS=etags
22MAKEINFO=makeinfo
23INSTALL-INFO=install-info
24PACKAGE=nxml-mode
25
26stamp-byte-compile: $(SRC)
27 -rm -f $(ELC)
28 $(EMACS) -batch -l rng-auto.el -f rng-byte-compile-load
29 touch $(@)
30
31all: stamp-byte-compile nxml-mode.info
32
33dir: nxml-mode.info
34 rm -f $@
35 $(INSTALL-INFO) $< $@
36
37info: nxml-mode.info
38
39nxml-mode.info: nxml-mode.texi
40 $(MAKEINFO) $<
41
42nxml-mode.texi: nxml-mode.xml
43 $(EMACS) -batch -l rng-auto.el -f rng-format-manual
44
45VERSION: stamp-byte-compile rng-auto.el
46 $(EMACS) -batch -l rng-auto.el -f rng-write-version
47
48TAGS: $(SRC)
49 $(ETAGS) $(SRC)
50
51dist: stamp-byte-compile $(EXTRA)
52 @version=`cat VERSION`; \
53 set -e; \
54 echo Making $(PACKAGE)-$$version.tar.gz; \
55 rm -fr $(PACKAGE)-$$version; \
56 mkdir $(PACKAGE)-$$version; \
57 cd $(PACKAGE)-$$version; \
58 for f in $(EXTRA) $(SRC) $(ELC); do \
59 ln -s ../$$f .; \
60 done; \
61 mkdir schema; \
62 cd schema; \
63 for f in ../../schema/*.rnc ../../schema/*.xml; do \
64 ln -s $$f .; \
65 done; \
66 cd ..; \
67 mkdir char-name; \
68 mkdir char-name/unicode; \
69 cd char-name/unicode; \
70 for f in ../../../char-name/unicode/*-*.el; do \
71 ln -s $$f .; \
72 done; \
73 cd ../../..; \
74 tar cfhz $(PACKAGE)-$$version.tar.gz $(PACKAGE)-$$version; \
75 rm -fr $(PACKAGE)-$$version
76
77clean:
78 -rm -f $(FILESTOCLEAN)
79
80.PHONY: all clean info
diff --git a/lisp/nxml/NEWS b/lisp/nxml/NEWS
new file mode 100644
index 00000000000..cebbab82fda
--- /dev/null
+++ b/lisp/nxml/NEWS
@@ -0,0 +1,199 @@
120041004
2--------
3
4Support for outlining has been added. See the manual for more details.
5
6C-u C-c C-n goes to the first error.
7
820040910
9--------
10
11C-c RET splits the current element as in PSGML.
12
1320040908
14--------
15
16Indentation has been rewritten. Indentation of attribute names and
17values should work better. The default value of
18`nxml-attribute-indent' has been changed to 4.
19
20Syntax highlighting with a dark background should now work.
21
2220040726
23--------
24
25The attribute pathSuffix on the uri element in schema locating files
26has been replaced by a more general pattern attribute. The
27transformURI element now has required fromPattern and toPattern
28attributes.
29
30The schema related bindings have been changed to use C-c C-s as a prefix
31as follows:
32
33 C-c C-s => C-c C-s C-f (f for file)
34 C-c C-a => C-c C-s C-a
35 C-c C-t => C-c C-s C-t
36 C-c C-l => C-c C-s C-l
37 C-c C-w => C-c C-s C-w
38
39There's now an XML menu on the menu-bar.
40
4120031031
42--------
43
44C-c C-d "dynamically" chooses a tag to put around the word before
45point, rather like M-/.
46
47The mechanism for locating the schema has changed completely. The new
48mechanism is described in the manual. Any existing customizations of
49`rng-auto-element-alist' or `rng-auto-file-name-alist' will no longer
50be effective.
51
52C-c C-a is now bound to rng-auto-set-schema.
53
5420031018
55--------
56
57Unicode names can be used to insert characters with the new command
58C-c C-u. Normally, this inserts a character reference. With a prefix
59arg (i.e. C-u C-c C-u), it inserts the character directly. You can
60customize `nxml-enabled-unicode-blocks' to control what Unicode blocks
61are used for completing names.
62
63Extra information is displayed for character references. The Unicode
64name is displayed in a tooltip. A glyph for the referenced character
65is displayed in a distinguished face following the character
66reference; this can be disabled by customizing
67`nxml-char-ref-display-glyph-flag'. The command
68`nxml-toggle-char-ref-extra-display' dynamically toggles the display
69of extra information for character references for a particular buffer.
70This can be used if the display of extra information is causing
71performance problems. nXML mode tries to figure out which glyphs can
72be displayed. Unfortunately Emacs doesn't provide the primitives
73necessary to do this properly, so nXML mode has to guess and will
74sometimes guess wrong. The hook `nxml-glyph-set-hook' can be used to
75change nXML mode's guess.
76
77New command C-c C-w says what schema is being used.
78
79C-c C-s now turns on validation if it is not already on.
80
8120030928
82--------
83
84M-q has been implemented so that it works reasonably with XML. Other
85paragraph-related commands (M-{, M-}, M-h) have also been implemented.
86
87New command M-x rng-auto-set-schema to set the schema based on the
88buffer's current contents and file-name. This is called automatically
89when rng-validate-mode is first enabled.
90
91There's now a C-M-d to go with C-M-u. C-M-d moves forward down into
92the content of an element. C-M-n and C-M-p move to the next or
93previous element.
94
95By default, the sexp commands (C-M-f, C-M-b, C-M-k, C-M-SPC) operate
96on tags rather than elements. To restore the old behaviour,
97customize nxml-sexp-element-flag.
98
99The file TUTORIAL has been replaced by nxml-mode.info; this is in info
100format and can be read using Emacs. The source is maintained in a
101simple, ad-hoc XML format.
102
10320030915
104--------
105
106XML encodings should now work properly. When saving a buffer,
107nxml-mode arranges to use the encoding declared in the XML
108declaration. If there is no encoding declared, then nxml-mode will
109use utf-8 or utf-16 according to the user options
110`nxml-prefer-utf-16-to-utf-8-flag' and
111`nxml-prefer-utf-16-little-to-big-endian-flag'. If the chosen encoding
112cannot encode all the characters in the buffer, nxml-mode will
113complain and give the user an opportunity to use an encoding that can.
114
115A new command C-c C-x inserts an XML declaration.
116
117The option `nxml-auto-insert-xml-declaration-flag' automatically
118inserts an XML declaration in new files.
119
120The `nxml-default-buffer-file-coding-system' option allows a different
121default buffer-file-coding-system for nXML mode buffers. This affects
122what XML declaration is inserted.
123
124Encoding names in XML declarations are now validated by
125rng-validate-mode.
126
127RDF/XML schema was updated to version in 05 September 2003 WD.
128
12920030912
130--------
131
132The tutorial has a new section on inserting end-tags.
133
134By default </ no longer automatically inserts the rest of the end-tag.
135You can do
136
137 M-x customize-variable RET nxml-slash-auto-complete-flag RET
138
139and then follow the instructions displayed in the buffer to get the
140old behaviour.
141
142Completion after </ will complete the rest of the end-tag. Completion
143after < will include the end-tag in the possibilities if allowed by
144the schema.
145
146You can use C-c C-i instead of > to close the start-tag of an
147inline-level element. After inserting the >, it will insert the
148end-tag and leave point before the end-tag. The `i' is supposed to be
149mnemonic for `inline'. C-c C-b is similar, but for block elements: the
150start-tag, point and the end-tag will all be on separate lines.
151
152The binding for inserting an end-tag has changed from C-c / to C-c C-f
153to comply with Emacs guidelines about what keys major modes should
154bind. The `f' is supposed to be mnemonic for `finish'.
155
156Completion always puts point after all the characters it inserts. It
157doesn't insert a `>' after completing a start-tag name.
158
159Completion no longer completes CDATA section and comment delimiters.
160
161The nxml-start-auto-coding command enables auto-detection of a file's
162encoding as specified in the XML Recommendation for files that use
163nxml-mode; rng-auto.el calls this.
164
16520030906
166--------
167
168Validation messages applicable to point are displayed automatically.
169
170Completion can deal with prefixes that haven't yet been declared.
171
172rng-preferred-prefix-alist variable added.
173
174Namespace URIs can be completed.
175
176xmlns and xmlns:* attributes can be completed.
177
178CDATA section and comment delimiters can be completed.
179
180Each kind of completion has its own history.
181
182Completion function moved to nxml-mode; uses a hook to allow
183schema-sensitive completion. Completion function bound to C-return.
184Also bound to M-TAB as before, unless
185nxml-bind-meta-tab-to-complete-flag is nil. When there is a window
186system, nxml-bind-meta-tab-to-complete-flag is nil by default, This
187avoid problems with M-TAB, which is not passed through by several
188window systems/managers.
189
190TUTORIAL file added.
191
192NEWS file added.
193
194Bug fixes.
195
19620030901
197--------
198
199Initial release.
diff --git a/lisp/nxml/README b/lisp/nxml/README
new file mode 100644
index 00000000000..4f3fc96c0f4
--- /dev/null
+++ b/lisp/nxml/README
@@ -0,0 +1,106 @@
1This is a new major mode for GNU Emacs for editing XML documents. It
2supports editing well-formed XML documents and also provides
3schema-sensitive editing of XML documents using RELAX NG Compact
4Syntax.
5
6To use this, you need GNU Emacs version 21.x, preferably 21.3. GNU
7Emacs version 20 will not work properly, nor will XEmacs.
8
9To get started, do
10
11 M-x load-file <RET> rng-auto.el <RET>
12
13This defines the necessary autoloads. Now, visit a file containing
14an XML document, and do
15
16 M-x nxml-mode
17
18Now do
19
20 C-h m
21
22for information on how to use nxml-mode.
23
24The beginnings of a manual are in nxml-mode.info. You can read this
25using
26
27 C-u M-x info RET nxml-mode.info RET
28
29It's also installed as an entry at the end of the top-level info
30directory. So you can read it with C-h i as usual.
31
32You can use test.valid.xml and test.invalid.xml as examples of valid
33and invalid XML documents.
34
35To get things automatically loaded each time you start Emacs, add
36
37 (load "~/nxml-mode-200YMMDD/rng-auto.el")
38
39to your .emacs, where ~/nxml-mode-200YMMDD is the directory containing
40the .elc files. Note that rng-auto.el does not load all of the
41nxml-mode code; it merely sets things up so that all the features of
42nxml-mode will be autoloaded properly. You should not try to autoload
43rng-auto.el itself.
44
45To use nxml-mode automatically for files with an extension of xml,
46xsl, rng or xhtml, add
47
48 (setq auto-mode-alist
49 (cons '("\\.\\(xml\\|xsl\\|rng\\|xhtml\\)\\'" . nxml-mode)
50 auto-mode-alist))
51
52to your .emacs.
53
54If you edit XML using iso-8859-N encodings other than iso-8859-1 and
55you are running Emacs 21.3 or later, then I recommend enabling
56unify-8859-on-decoding-mode, by adding
57
58 (unify-8859-on-decoding-mode)
59
60to you .emacs.
61
62To get validation and schema-sensitive editing, you need a RELAX NG
63Compact Syntax (RNC) schema for you document. The schema directory
64includes some schemas for popular document types.
65
66For more on RELAX NG, see
67
68 http://relaxng.org
69
70For a tutorial on RELAX NG Compact Syntax, see
71
72 http://relaxng.org/compact-tutorial.html
73
74For automatically creating RNC schemas, I recommend my Trang program:
75
76 http://www.thaiopensource.com/relaxng/trang.html
77
78You can use this to
79
80- infer an RNC schema from an instance document;
81
82- convert a DTD to an RNC schema;
83
84- convert a RELAX NG XML syntax schema to an RNC schema.
85
86To convert a RELAX NG XML syntax (.rng) schema to a RNC schema, you
87can also use the XSLT stylesheet from
88
89 http://www.pantor.com/download.html
90
91To convert a W3C XML Schema to an RNC schema, you need first to
92convert it to RELAX NG XML syntax using Sun's RELAX NG converter tool
93rngconv (built on top of MSV). See
94
95 https://msv.dev.java.net/
96
97The file NEWS describes recent changes.
98
99Please use the list
100
101 http://groups.yahoo.com/group/emacs-nxml-mode/
102
103for bug reports, discussion. I will announce all new versions there.
104
105James Clark
106http://www.jclark.com/contact.html
diff --git a/lisp/nxml/TODO b/lisp/nxml/TODO
new file mode 100644
index 00000000000..3e7d5012b66
--- /dev/null
+++ b/lisp/nxml/TODO
@@ -0,0 +1,468 @@
1* High priority
2
3** Command to insert an element template, including all required
4attributes and child elements. When there's a choice of elements
5possible, we could insert a comment, and put an overlay on that
6comment that makes it behave like a button with a pop-up menu to
7select the appropriate choice.
8
9** Command to tag a region. With a schema should complete using legal
10tags, but should work without a schema as well.
11
12** Provide a way to conveniently rename an element. With a schema should
13complete using legal tags, but should work without a schema as well.
14
15* Outlining
16
17** Implement C-c C-o C-q.
18
19** Install pre/post command hook for moving out of invisible section.
20
21** Put a modify hook on invisible sections that expands them.
22
23** Integrate dumb folding somehow.
24
25** An element should be able to be its own heading.
26
27** Optimize to avoid complete buffer scan on each command.
28
29** Make it work with HTML-style headings (i.e. level indicated by
30name of heading element rather than depth of section nesting).
31
32** Recognize root element as a section provided it has a title, even
33if it doesn't match section-element-name-regex.
34
35** Support for incremental search automatically making hidden text
36visible.
37
38** Allow title to be an attribute.
39
40** Command that says to recognize the tag at point as a section/heading.
41
42** Explore better ways to determine when an element is a section
43or a heading.
44
45** rng-next-error needs to either ignore invisible portion or reveal it
46(maybe use isearch oriented text properties).
47
48** Errors within hidden section should be highlighted by underlining the
49ellipsis.
50
51** Make indirect buffers work.
52
53** How should nxml-refresh outline recover from non well-formed tags?
54
55** Hide tags in title elements?
56
57** Use overlays instead of text properties for holding outline state?
58Necessary for indirect buffers to work?
59
60** Allow an outline to go in the speedbar.
61
62** Split up outlining manual section into subsections.
63
64** More detail in the manual about each outlining command.
65
66** More menu entries for hiding/showing?
67
68** Indication of many lines have been hidden?
69
70* Locating schemas
71
72** Should rng-validate-mode give the user an opportunity to specify a
73schema if there is currently none? Or should it at least give a hint
74to the user how to specify a non-vacuous schema?
75
76** Support for adding new schemas to schema-locating files. Add
77documentElement and namespace elements.
78
79** C-c C-w should be able to report current type id.
80
81** Implement doctypePublicId.
82
83** Implement typeIdBase.
84
85** Implement typeIdProcessingInstruction.
86
87** Support xml:base.
88
89** Implement group.
90
91** Find preferred prefix from schema-locating files. Get rid of
92rng-preferred-prefix-alist.
93
94** Inserting document element with vacuous schema should complete using
95document elements declared in schema locating files, and set schema
96appropriately.
97
98** Add a ruleType attribute to the <include> element?
99
100** Allow processing instruction in prolog to contain the compact syntax
101schema directly.
102
103** Use RDDL to locate a schema based on the namespace URI.
104
105** Should not prompt to add redundant association to schema locating
106file.
107
108** Command to reload current schema.
109
110* Schema-sensitive features
111
112** Should filter dynamic markup possibilities using schema validity, by
113adding hook to nxml-mode.
114
115** Dynamic markup word should (at least optionally) be able to look in
116other buffers that are using nxml-mode.
117
118** Should clicking on Invalid move to next error if already on an error?
119
120** Take advantage of a:documentation. Needs change to schema format.
121
122** Provide feasible validation (as in Jing) toggle.
123
124** Save the validation state as a property on the error overlay to enable
125more detailed diagnosis.
126
127** Provide an Error Summary buffer showing all the validation errors.
128
129** Pop-up menu. What is useful? Tag a region (should be greyed out if
130the region is not balanced). Suggestions based on error messages.
131
132** Have configurable list of namespace URIs so that we can provide
133namespace URI completion on extension elements or with schema-less
134documents.
135
136** Allow validation to handle XInclude.
137
138** ID/IDREF support.
139
140* Completion
141
142** Make it work with icomplete. Only use a function to complete when
143some of the possible names have undeclared namespaces.
144
145** How should C-return in mixed text work?
146
147** When there's a vacuous schema, C-return after < will insert the
148end-tag. Is this a bug or a feature?
149
150** After completing start-tag, ensure we don't get unhelpful message
151from validation
152
153** Syntax table for completion.
154
155** Should complete start-tag name with a space if namespace attributes
156are required.
157
158** When completing start-tag name with no prefix and it doesn't match
159should try to infer namespace from local name.
160
161** Should completion pay attention to characters after point? If so,
162how?
163
164** When completing start-tag name, add required atts if only one required
165attribute.
166
167** When completing attribute name, add attribute value if only one value
168is possible.
169
170** After attribute-value completion, insert space after close delimiter
171if more attributes are required.
172
173** Complete on enumerated data values in elements.
174
175** When in context that allows only elements, should get tag
176completion without having to type < first.
177
178** When immediately after start-tag name, and name is valid and not
179prefix of any other name, should C-return complete on attribute names?
180
181** When completing attributes, more consistent to ignore all attributes
182after point.
183
184** Inserting attribute value completions needs to be sensitive to what
185delimiter is used so that it quotes the correct character.
186
187** Complete on encoding-names in XML decl.
188
189** Complete namespace declarations by searching for all namespaces
190mentioned in the schema.
191
192* Well-formed XML support
193
194** Deal better with Mule-UCS
195
196** Deal with UTF-8 BOM when reading.
197
198** Complete entity names.
199
200** Provide some support for entity names for MathML.
201
202** Command to repeat the last tag.
203
204** Support for changing between character references and characters.
205Need to check that context is one in which character references are
206allowed. xmltok prolog parsing will need to distinguish parameter
207literals from other kinds of literal.
208
209** Provide a comment command to bind to M-; that works better than the
210normal one.
211
212** Make indenting in a multi-line comment work.
213
214** Structure view. Separate buffer displaying element tree. Be able to
215navigate from structure view to document and vice-versa.
216
217** Flash matching >.
218
219** Smart selection command that selects increasingly large syntactically
220coherent chunks of XML. If point is in an attribute value, first
221select complete value; then if command is repeated, select value plus
222delimiters, then select attribute name as well, then complete
223start-tag, then complete element, then enclosing element, etc.
224
225** ispell integration.
226
227** Block-level items in mixed content should be indented, e.g:
228 <para>This is list:
229 <ul>
230 <li>item</li>
231
232** Provide option to indent like this:
233
234** <para>This is a paragraph
235 occupying multiple lines.</para>
236
237** Option to add make a / that closes a start-tag electrically insert a
238space for the XHTML guys.
239
240** C-M-q should work.
241
242* Datatypes
243
244** Figure out workaround for CJK characters with regexps.
245
246** Does category C contain Cn?
247
248** Do ENTITY datatype properly.
249
250* XML Parsing Library
251
252** Parameter entity parsing option, nil (never), t (always),
253unless-standalone (unless standalone="yes" in XML declaration).
254
255** When a file is currently being edited, there should be an option to
256use its buffer instead of the on-disk copy.
257
258* Handling all XML features
259
260** Provide better support for editing external general parsed entities.
261Perhaps provide a way to force ignoring undefined entities; maybe turn
262this on automatically with <?xml encoding=""?> (with no version
263pseudo-att).
264
265** Handle internal general entity declarations containing elements.
266
267** Handle external general entity declarations.
268
269** Handle default attribute declarations in internal subset.
270
271** Handle parameter entities (including DTD).
272
273* RELAX NG
274
275** Do complete schema checking, at least optionally.
276
277** Detect include/external loops during schema parse.
278
279** Coding system detection for schemas. Should use utf-8/utf-16 per the
280spec. But also need to allow encodings other than UTF-8/16 to support
281CJK charsets that Emacs cannot represent in Unicode.
282
283* Catching XML errors
284
285** Check public identifiers.
286
287** Check default attribute values.
288
289* Performance
290
291** Explore whether overlay-recenter can cure overlays performance
292problems.
293
294** Cache schemas. Need to have list of files and mtimes.
295
296** Make it possible to reduce rng-validate-chunk-size significantly,
297perhaps to 500 bytes, without bad performance impact: don't do
298redisplay on every chunk; pass continue functions on other uses of
299rng-do-some-validation.
300
301** Cache after first tag.
302
303** Introduce a new name class that is a choice between names (so that
304we can use member)
305
306** intern-choice should simplify after patterns with same 1st/2nd args
307
308** Large numbers of overlays slow things down dramatically. Represent
309errors using text properties. This implies we cannot incrementally
310keep track of the number of errors, in order to determine validity.
311Instead, when validation completes, scan for any characters with an
312error text property; this seems to be fast enough even with large
313buffers. Problem with error at end of buffer, where there's no
314character; need special variable for this. Need to merge face from
315font-lock with the error face: use :inherit attribute with list of two
316faces. How do we avoid making rng-valid depend on nxml-mode?
317
318* Error recovery
319
320** Don't stop at newline in looking for close of start-tag.
321
322** Use indentation to guide recovery from mismatched end-tags
323
324** Don't keep parsing when currently not well-formed but previously
325well-formed
326
327** Try to recover from a bad start-tag by popping an open element if
328there was a mismatched end-tag unaccounted for.
329
330** Try to recover from a bad start-tag open on the hypothesis that there
331was an error in the namespace URI.
332
333** Better recovery from ill-formed XML declarations.
334
335* Useability improvements
336
337** Should print a "Parsing..." message during long movements.
338
339** Provide better position for reference to undefined pattern error.
340
341** Put Well-formed in the mode-line when validating against any-content.
342
343** Trim marking of illegal data for leading and trailing whitespace.
344
345** Show Invalid status as soon as we are sure it's invalid, rather than
346waiting for everything to be completely up to date.
347
348** When narrowed, Valid or Invalid status should probably consider only
349validity of narrowed region.
350
351* Bug fixes
352
353** Need to give an error for a document like: <foo/><![CDATA[ ]]>
354
355** Make nxml-forward-balanced-item work better for the prolog.
356
357** Make filling and indenting comments work in the prolog.
358
359** Should delete RNC Input buffers.
360
361** Figure out what regex use for NCName and use it consistently,
362
363** Should have not-well-formed tokens in ref.
364
365** Require version in XML declaration? Probably not because prevents
366use for external parsed entities. At least forbid standalone
367without version.
368
369** Reject schema that compiles to rng-not-allowed-ipattern.
370
371** Move point backwards on schema parse error so that it's on the right token.
372
373* Internal
374
375** Use rng-quote-string consistently.
376
377** Use parsing library for XML to texinfo conversion.
378
379** Rename xmltok.el to nxml-token.el. Use nxml-t- prefix instead of
380xmltok-. Change nxml-t-type to nxml-t-token-type, nxml-t-start to
381nxml-t-token-start.
382
383** Can we set fill-prefix to nil and rely on indenting?
384
385** xmltok should make available replacement text of entities containing
386elements
387
388** In rng-valid, instead of using modification-hooks and
389insert-behind-hooks on dependent overlays, use same technique as
390nxml-mode.
391
392** Port to XEmacs. Issues include: Unicode (XEmacs seems to be based on
393Mule-UCS); overlays/text properties vs extents; absence of
394fontification-functions hook.
395
396* Fontification
397
398** Allow face to depend on element qname, attribute qname, attribute
399value. Use list with pairs of (R . F), where R specifies regexps and
400F specifies faces. How can this list be made to depend on the
401document type?
402
403* Other
404
405** Support RELAX NG XML syntax (use XML parsing library).
406
407** Support W3C XML Schema (use XML parsing library).
408
409** Command to infer schema from current document (like trang).
410
411* Schemas
412
413** XSLT schema should take advantage of RELAX NG to express cooccurrence
414constraints on attributes (e.g. xsl:template).
415
416* Documentation
417
418** Move material from README to manual.
419
420** Document encodings.
421
422* Notes
423
424** How can we allow an error to be displayed on a different token from
425where it is detected? In particular, for a missing closing ">" we
426will need to display it at the beginning of the following token. At
427the moment, when we parse the following token the error overlay will
428get cleared.
429
430** How should rng-goto-next-error deal with narrowing?
431
432** Perhaps should merge errors having same start position even if they
433have different ends.
434
435** How to handle surrogates? One possibility is to be compatible with
436utf8.e: represent as sequence of 4 chars. But utf-16 is incompatible
437with this.
438
439** Should we distinguish well-formedness errors from invalidity errors?
440(I think not: we may want to recover from a bad start-tag by implying
441an end-tag.)
442
443** Seems to be a bug with Emacs, where a mouse movement that causes
444help-echo text to appear counts as pending input but does not cause
445idle timer to be restarted.
446
447** Use XML to represent this file.
448
449** I had a TODO which said simply "split-string". What did I mean?
450
451** Investigate performance on large files all on one line.
452
453* CVS emacs issues
454
455** Take advantage of UTF-8 CJK support.
456
457** Supply a next-error-function.
458
459** Investigate this NEWS item "Emacs now tries to set up buffer coding
460systems for HTML/XML files automatically."
461
462** Take advantage of the pointer text property.
463
464** Leverage char-displayable-p.
465
466Local variables:
467mode: outline
468end:
diff --git a/lisp/nxml/char-name/subdirs.el b/lisp/nxml/char-name/subdirs.el
new file mode 100644
index 00000000000..28d8936d890
--- /dev/null
+++ b/lisp/nxml/char-name/subdirs.el
@@ -0,0 +1,8 @@
1;; -*- no-byte-compile: t -*-
2;; In load-path, after this directory should come
3;; certain of its subdirectories. Here we specify them.
4(normal-top-level-add-to-load-path '("unicode" ))
5;; Local Variables:
6;; version-control: never
7;; no-byte-compile: t
8;; End:
diff --git a/lisp/nxml/char-name/unicode/00000-0007F.el b/lisp/nxml/char-name/unicode/00000-0007F.el
new file mode 100644
index 00000000000..122804fc47a
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/00000-0007F.el
@@ -0,0 +1,97 @@
1(nxml-define-char-name-set 'basic-latin
2 '(("SPACE" #x0020)
3 ("EXCLAMATION MARK" #x0021)
4 ("QUOTATION MARK" #x0022)
5 ("NUMBER SIGN" #x0023)
6 ("DOLLAR SIGN" #x0024)
7 ("PERCENT SIGN" #x0025)
8 ("AMPERSAND" #x0026)
9 ("APOSTROPHE" #x0027)
10 ("LEFT PARENTHESIS" #x0028)
11 ("RIGHT PARENTHESIS" #x0029)
12 ("ASTERISK" #x002A)
13 ("PLUS SIGN" #x002B)
14 ("COMMA" #x002C)
15 ("HYPHEN-MINUS" #x002D)
16 ("FULL STOP" #x002E)
17 ("SOLIDUS" #x002F)
18 ("DIGIT ZERO" #x0030)
19 ("DIGIT ONE" #x0031)
20 ("DIGIT TWO" #x0032)
21 ("DIGIT THREE" #x0033)
22 ("DIGIT FOUR" #x0034)
23 ("DIGIT FIVE" #x0035)
24 ("DIGIT SIX" #x0036)
25 ("DIGIT SEVEN" #x0037)
26 ("DIGIT EIGHT" #x0038)
27 ("DIGIT NINE" #x0039)
28 ("COLON" #x003A)
29 ("SEMICOLON" #x003B)
30 ("LESS-THAN SIGN" #x003C)
31 ("EQUALS SIGN" #x003D)
32 ("GREATER-THAN SIGN" #x003E)
33 ("QUESTION MARK" #x003F)
34 ("COMMERCIAL AT" #x0040)
35 ("LATIN CAPITAL LETTER A" #x0041)
36 ("LATIN CAPITAL LETTER B" #x0042)
37 ("LATIN CAPITAL LETTER C" #x0043)
38 ("LATIN CAPITAL LETTER D" #x0044)
39 ("LATIN CAPITAL LETTER E" #x0045)
40 ("LATIN CAPITAL LETTER F" #x0046)
41 ("LATIN CAPITAL LETTER G" #x0047)
42 ("LATIN CAPITAL LETTER H" #x0048)
43 ("LATIN CAPITAL LETTER I" #x0049)
44 ("LATIN CAPITAL LETTER J" #x004A)
45 ("LATIN CAPITAL LETTER K" #x004B)
46 ("LATIN CAPITAL LETTER L" #x004C)
47 ("LATIN CAPITAL LETTER M" #x004D)
48 ("LATIN CAPITAL LETTER N" #x004E)
49 ("LATIN CAPITAL LETTER O" #x004F)
50 ("LATIN CAPITAL LETTER P" #x0050)
51 ("LATIN CAPITAL LETTER Q" #x0051)
52 ("LATIN CAPITAL LETTER R" #x0052)
53 ("LATIN CAPITAL LETTER S" #x0053)
54 ("LATIN CAPITAL LETTER T" #x0054)
55 ("LATIN CAPITAL LETTER U" #x0055)
56 ("LATIN CAPITAL LETTER V" #x0056)
57 ("LATIN CAPITAL LETTER W" #x0057)
58 ("LATIN CAPITAL LETTER X" #x0058)
59 ("LATIN CAPITAL LETTER Y" #x0059)
60 ("LATIN CAPITAL LETTER Z" #x005A)
61 ("LEFT SQUARE BRACKET" #x005B)
62 ("REVERSE SOLIDUS" #x005C)
63 ("RIGHT SQUARE BRACKET" #x005D)
64 ("CIRCUMFLEX ACCENT" #x005E)
65 ("LOW LINE" #x005F)
66 ("GRAVE ACCENT" #x0060)
67 ("LATIN SMALL LETTER A" #x0061)
68 ("LATIN SMALL LETTER B" #x0062)
69 ("LATIN SMALL LETTER C" #x0063)
70 ("LATIN SMALL LETTER D" #x0064)
71 ("LATIN SMALL LETTER E" #x0065)
72 ("LATIN SMALL LETTER F" #x0066)
73 ("LATIN SMALL LETTER G" #x0067)
74 ("LATIN SMALL LETTER H" #x0068)
75 ("LATIN SMALL LETTER I" #x0069)
76 ("LATIN SMALL LETTER J" #x006A)
77 ("LATIN SMALL LETTER K" #x006B)
78 ("LATIN SMALL LETTER L" #x006C)
79 ("LATIN SMALL LETTER M" #x006D)
80 ("LATIN SMALL LETTER N" #x006E)
81 ("LATIN SMALL LETTER O" #x006F)
82 ("LATIN SMALL LETTER P" #x0070)
83 ("LATIN SMALL LETTER Q" #x0071)
84 ("LATIN SMALL LETTER R" #x0072)
85 ("LATIN SMALL LETTER S" #x0073)
86 ("LATIN SMALL LETTER T" #x0074)
87 ("LATIN SMALL LETTER U" #x0075)
88 ("LATIN SMALL LETTER V" #x0076)
89 ("LATIN SMALL LETTER W" #x0077)
90 ("LATIN SMALL LETTER X" #x0078)
91 ("LATIN SMALL LETTER Y" #x0079)
92 ("LATIN SMALL LETTER Z" #x007A)
93 ("LEFT CURLY BRACKET" #x007B)
94 ("VERTICAL LINE" #x007C)
95 ("RIGHT CURLY BRACKET" #x007D)
96 ("TILDE" #x007E)
97 ))
diff --git a/lisp/nxml/char-name/unicode/00080-000FF.el b/lisp/nxml/char-name/unicode/00080-000FF.el
new file mode 100644
index 00000000000..1d7f463d56f
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/00080-000FF.el
@@ -0,0 +1,98 @@
1(nxml-define-char-name-set 'latin-1-supplement
2 '(("NO-BREAK SPACE" #x00A0)
3 ("INVERTED EXCLAMATION MARK" #x00A1)
4 ("CENT SIGN" #x00A2)
5 ("POUND SIGN" #x00A3)
6 ("CURRENCY SIGN" #x00A4)
7 ("YEN SIGN" #x00A5)
8 ("BROKEN BAR" #x00A6)
9 ("SECTION SIGN" #x00A7)
10 ("DIAERESIS" #x00A8)
11 ("COPYRIGHT SIGN" #x00A9)
12 ("FEMININE ORDINAL INDICATOR" #x00AA)
13 ("LEFT-POINTING DOUBLE ANGLE QUOTATION MARK" #x00AB)
14 ("NOT SIGN" #x00AC)
15 ("SOFT HYPHEN" #x00AD)
16 ("REGISTERED SIGN" #x00AE)
17 ("MACRON" #x00AF)
18 ("DEGREE SIGN" #x00B0)
19 ("PLUS-MINUS SIGN" #x00B1)
20 ("SUPERSCRIPT TWO" #x00B2)
21 ("SUPERSCRIPT THREE" #x00B3)
22 ("ACUTE ACCENT" #x00B4)
23 ("MICRO SIGN" #x00B5)
24 ("PILCROW SIGN" #x00B6)
25 ("MIDDLE DOT" #x00B7)
26 ("CEDILLA" #x00B8)
27 ("SUPERSCRIPT ONE" #x00B9)
28 ("MASCULINE ORDINAL INDICATOR" #x00BA)
29 ("RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK" #x00BB)
30 ("VULGAR FRACTION ONE QUARTER" #x00BC)
31 ("VULGAR FRACTION ONE HALF" #x00BD)
32 ("VULGAR FRACTION THREE QUARTERS" #x00BE)
33 ("INVERTED QUESTION MARK" #x00BF)
34 ("LATIN CAPITAL LETTER A WITH GRAVE" #x00C0)
35 ("LATIN CAPITAL LETTER A WITH ACUTE" #x00C1)
36 ("LATIN CAPITAL LETTER A WITH CIRCUMFLEX" #x00C2)
37 ("LATIN CAPITAL LETTER A WITH TILDE" #x00C3)
38 ("LATIN CAPITAL LETTER A WITH DIAERESIS" #x00C4)
39 ("LATIN CAPITAL LETTER A WITH RING ABOVE" #x00C5)
40 ("LATIN CAPITAL LETTER AE" #x00C6)
41 ("LATIN CAPITAL LETTER C WITH CEDILLA" #x00C7)
42 ("LATIN CAPITAL LETTER E WITH GRAVE" #x00C8)
43 ("LATIN CAPITAL LETTER E WITH ACUTE" #x00C9)
44 ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX" #x00CA)
45 ("LATIN CAPITAL LETTER E WITH DIAERESIS" #x00CB)
46 ("LATIN CAPITAL LETTER I WITH GRAVE" #x00CC)
47 ("LATIN CAPITAL LETTER I WITH ACUTE" #x00CD)
48 ("LATIN CAPITAL LETTER I WITH CIRCUMFLEX" #x00CE)
49 ("LATIN CAPITAL LETTER I WITH DIAERESIS" #x00CF)
50 ("LATIN CAPITAL LETTER ETH" #x00D0)
51 ("LATIN CAPITAL LETTER N WITH TILDE" #x00D1)
52 ("LATIN CAPITAL LETTER O WITH GRAVE" #x00D2)
53 ("LATIN CAPITAL LETTER O WITH ACUTE" #x00D3)
54 ("LATIN CAPITAL LETTER O WITH CIRCUMFLEX" #x00D4)
55 ("LATIN CAPITAL LETTER O WITH TILDE" #x00D5)
56 ("LATIN CAPITAL LETTER O WITH DIAERESIS" #x00D6)
57 ("MULTIPLICATION SIGN" #x00D7)
58 ("LATIN CAPITAL LETTER O WITH STROKE" #x00D8)
59 ("LATIN CAPITAL LETTER U WITH GRAVE" #x00D9)
60 ("LATIN CAPITAL LETTER U WITH ACUTE" #x00DA)
61 ("LATIN CAPITAL LETTER U WITH CIRCUMFLEX" #x00DB)
62 ("LATIN CAPITAL LETTER U WITH DIAERESIS" #x00DC)
63 ("LATIN CAPITAL LETTER Y WITH ACUTE" #x00DD)
64 ("LATIN CAPITAL LETTER THORN" #x00DE)
65 ("LATIN SMALL LETTER SHARP S" #x00DF)
66 ("LATIN SMALL LETTER A WITH GRAVE" #x00E0)
67 ("LATIN SMALL LETTER A WITH ACUTE" #x00E1)
68 ("LATIN SMALL LETTER A WITH CIRCUMFLEX" #x00E2)
69 ("LATIN SMALL LETTER A WITH TILDE" #x00E3)
70 ("LATIN SMALL LETTER A WITH DIAERESIS" #x00E4)
71 ("LATIN SMALL LETTER A WITH RING ABOVE" #x00E5)
72 ("LATIN SMALL LETTER AE" #x00E6)
73 ("LATIN SMALL LETTER C WITH CEDILLA" #x00E7)
74 ("LATIN SMALL LETTER E WITH GRAVE" #x00E8)
75 ("LATIN SMALL LETTER E WITH ACUTE" #x00E9)
76 ("LATIN SMALL LETTER E WITH CIRCUMFLEX" #x00EA)
77 ("LATIN SMALL LETTER E WITH DIAERESIS" #x00EB)
78 ("LATIN SMALL LETTER I WITH GRAVE" #x00EC)
79 ("LATIN SMALL LETTER I WITH ACUTE" #x00ED)
80 ("LATIN SMALL LETTER I WITH CIRCUMFLEX" #x00EE)
81 ("LATIN SMALL LETTER I WITH DIAERESIS" #x00EF)
82 ("LATIN SMALL LETTER ETH" #x00F0)
83 ("LATIN SMALL LETTER N WITH TILDE" #x00F1)
84 ("LATIN SMALL LETTER O WITH GRAVE" #x00F2)
85 ("LATIN SMALL LETTER O WITH ACUTE" #x00F3)
86 ("LATIN SMALL LETTER O WITH CIRCUMFLEX" #x00F4)
87 ("LATIN SMALL LETTER O WITH TILDE" #x00F5)
88 ("LATIN SMALL LETTER O WITH DIAERESIS" #x00F6)
89 ("DIVISION SIGN" #x00F7)
90 ("LATIN SMALL LETTER O WITH STROKE" #x00F8)
91 ("LATIN SMALL LETTER U WITH GRAVE" #x00F9)
92 ("LATIN SMALL LETTER U WITH ACUTE" #x00FA)
93 ("LATIN SMALL LETTER U WITH CIRCUMFLEX" #x00FB)
94 ("LATIN SMALL LETTER U WITH DIAERESIS" #x00FC)
95 ("LATIN SMALL LETTER Y WITH ACUTE" #x00FD)
96 ("LATIN SMALL LETTER THORN" #x00FE)
97 ("LATIN SMALL LETTER Y WITH DIAERESIS" #x00FF)
98 ))
diff --git a/lisp/nxml/char-name/unicode/00100-0017F.el b/lisp/nxml/char-name/unicode/00100-0017F.el
new file mode 100644
index 00000000000..7a97964a161
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/00100-0017F.el
@@ -0,0 +1,130 @@
1(nxml-define-char-name-set 'latin-extended-a
2 '(("LATIN CAPITAL LETTER A WITH MACRON" #x0100)
3 ("LATIN SMALL LETTER A WITH MACRON" #x0101)
4 ("LATIN CAPITAL LETTER A WITH BREVE" #x0102)
5 ("LATIN SMALL LETTER A WITH BREVE" #x0103)
6 ("LATIN CAPITAL LETTER A WITH OGONEK" #x0104)
7 ("LATIN SMALL LETTER A WITH OGONEK" #x0105)
8 ("LATIN CAPITAL LETTER C WITH ACUTE" #x0106)
9 ("LATIN SMALL LETTER C WITH ACUTE" #x0107)
10 ("LATIN CAPITAL LETTER C WITH CIRCUMFLEX" #x0108)
11 ("LATIN SMALL LETTER C WITH CIRCUMFLEX" #x0109)
12 ("LATIN CAPITAL LETTER C WITH DOT ABOVE" #x010A)
13 ("LATIN SMALL LETTER C WITH DOT ABOVE" #x010B)
14 ("LATIN CAPITAL LETTER C WITH CARON" #x010C)
15 ("LATIN SMALL LETTER C WITH CARON" #x010D)
16 ("LATIN CAPITAL LETTER D WITH CARON" #x010E)
17 ("LATIN SMALL LETTER D WITH CARON" #x010F)
18 ("LATIN CAPITAL LETTER D WITH STROKE" #x0110)
19 ("LATIN SMALL LETTER D WITH STROKE" #x0111)
20 ("LATIN CAPITAL LETTER E WITH MACRON" #x0112)
21 ("LATIN SMALL LETTER E WITH MACRON" #x0113)
22 ("LATIN CAPITAL LETTER E WITH BREVE" #x0114)
23 ("LATIN SMALL LETTER E WITH BREVE" #x0115)
24 ("LATIN CAPITAL LETTER E WITH DOT ABOVE" #x0116)
25 ("LATIN SMALL LETTER E WITH DOT ABOVE" #x0117)
26 ("LATIN CAPITAL LETTER E WITH OGONEK" #x0118)
27 ("LATIN SMALL LETTER E WITH OGONEK" #x0119)
28 ("LATIN CAPITAL LETTER E WITH CARON" #x011A)
29 ("LATIN SMALL LETTER E WITH CARON" #x011B)
30 ("LATIN CAPITAL LETTER G WITH CIRCUMFLEX" #x011C)
31 ("LATIN SMALL LETTER G WITH CIRCUMFLEX" #x011D)
32 ("LATIN CAPITAL LETTER G WITH BREVE" #x011E)
33 ("LATIN SMALL LETTER G WITH BREVE" #x011F)
34 ("LATIN CAPITAL LETTER G WITH DOT ABOVE" #x0120)
35 ("LATIN SMALL LETTER G WITH DOT ABOVE" #x0121)
36 ("LATIN CAPITAL LETTER G WITH CEDILLA" #x0122)
37 ("LATIN SMALL LETTER G WITH CEDILLA" #x0123)
38 ("LATIN CAPITAL LETTER H WITH CIRCUMFLEX" #x0124)
39 ("LATIN SMALL LETTER H WITH CIRCUMFLEX" #x0125)
40 ("LATIN CAPITAL LETTER H WITH STROKE" #x0126)
41 ("LATIN SMALL LETTER H WITH STROKE" #x0127)
42 ("LATIN CAPITAL LETTER I WITH TILDE" #x0128)
43 ("LATIN SMALL LETTER I WITH TILDE" #x0129)
44 ("LATIN CAPITAL LETTER I WITH MACRON" #x012A)
45 ("LATIN SMALL LETTER I WITH MACRON" #x012B)
46 ("LATIN CAPITAL LETTER I WITH BREVE" #x012C)
47 ("LATIN SMALL LETTER I WITH BREVE" #x012D)
48 ("LATIN CAPITAL LETTER I WITH OGONEK" #x012E)
49 ("LATIN SMALL LETTER I WITH OGONEK" #x012F)
50 ("LATIN CAPITAL LETTER I WITH DOT ABOVE" #x0130)
51 ("LATIN SMALL LETTER DOTLESS I" #x0131)
52 ("LATIN CAPITAL LIGATURE IJ" #x0132)
53 ("LATIN SMALL LIGATURE IJ" #x0133)
54 ("LATIN CAPITAL LETTER J WITH CIRCUMFLEX" #x0134)
55 ("LATIN SMALL LETTER J WITH CIRCUMFLEX" #x0135)
56 ("LATIN CAPITAL LETTER K WITH CEDILLA" #x0136)
57 ("LATIN SMALL LETTER K WITH CEDILLA" #x0137)
58 ("LATIN SMALL LETTER KRA" #x0138)
59 ("LATIN CAPITAL LETTER L WITH ACUTE" #x0139)
60 ("LATIN SMALL LETTER L WITH ACUTE" #x013A)
61 ("LATIN CAPITAL LETTER L WITH CEDILLA" #x013B)
62 ("LATIN SMALL LETTER L WITH CEDILLA" #x013C)
63 ("LATIN CAPITAL LETTER L WITH CARON" #x013D)
64 ("LATIN SMALL LETTER L WITH CARON" #x013E)
65 ("LATIN CAPITAL LETTER L WITH MIDDLE DOT" #x013F)
66 ("LATIN SMALL LETTER L WITH MIDDLE DOT" #x0140)
67 ("LATIN CAPITAL LETTER L WITH STROKE" #x0141)
68 ("LATIN SMALL LETTER L WITH STROKE" #x0142)
69 ("LATIN CAPITAL LETTER N WITH ACUTE" #x0143)
70 ("LATIN SMALL LETTER N WITH ACUTE" #x0144)
71 ("LATIN CAPITAL LETTER N WITH CEDILLA" #x0145)
72 ("LATIN SMALL LETTER N WITH CEDILLA" #x0146)
73 ("LATIN CAPITAL LETTER N WITH CARON" #x0147)
74 ("LATIN SMALL LETTER N WITH CARON" #x0148)
75 ("LATIN SMALL LETTER N PRECEDED BY APOSTROPHE" #x0149)
76 ("LATIN CAPITAL LETTER ENG" #x014A)
77 ("LATIN SMALL LETTER ENG" #x014B)
78 ("LATIN CAPITAL LETTER O WITH MACRON" #x014C)
79 ("LATIN SMALL LETTER O WITH MACRON" #x014D)
80 ("LATIN CAPITAL LETTER O WITH BREVE" #x014E)
81 ("LATIN SMALL LETTER O WITH BREVE" #x014F)
82 ("LATIN CAPITAL LETTER O WITH DOUBLE ACUTE" #x0150)
83 ("LATIN SMALL LETTER O WITH DOUBLE ACUTE" #x0151)
84 ("LATIN CAPITAL LIGATURE OE" #x0152)
85 ("LATIN SMALL LIGATURE OE" #x0153)
86 ("LATIN CAPITAL LETTER R WITH ACUTE" #x0154)
87 ("LATIN SMALL LETTER R WITH ACUTE" #x0155)
88 ("LATIN CAPITAL LETTER R WITH CEDILLA" #x0156)
89 ("LATIN SMALL LETTER R WITH CEDILLA" #x0157)
90 ("LATIN CAPITAL LETTER R WITH CARON" #x0158)
91 ("LATIN SMALL LETTER R WITH CARON" #x0159)
92 ("LATIN CAPITAL LETTER S WITH ACUTE" #x015A)
93 ("LATIN SMALL LETTER S WITH ACUTE" #x015B)
94 ("LATIN CAPITAL LETTER S WITH CIRCUMFLEX" #x015C)
95 ("LATIN SMALL LETTER S WITH CIRCUMFLEX" #x015D)
96 ("LATIN CAPITAL LETTER S WITH CEDILLA" #x015E)
97 ("LATIN SMALL LETTER S WITH CEDILLA" #x015F)
98 ("LATIN CAPITAL LETTER S WITH CARON" #x0160)
99 ("LATIN SMALL LETTER S WITH CARON" #x0161)
100 ("LATIN CAPITAL LETTER T WITH CEDILLA" #x0162)
101 ("LATIN SMALL LETTER T WITH CEDILLA" #x0163)
102 ("LATIN CAPITAL LETTER T WITH CARON" #x0164)
103 ("LATIN SMALL LETTER T WITH CARON" #x0165)
104 ("LATIN CAPITAL LETTER T WITH STROKE" #x0166)
105 ("LATIN SMALL LETTER T WITH STROKE" #x0167)
106 ("LATIN CAPITAL LETTER U WITH TILDE" #x0168)
107 ("LATIN SMALL LETTER U WITH TILDE" #x0169)
108 ("LATIN CAPITAL LETTER U WITH MACRON" #x016A)
109 ("LATIN SMALL LETTER U WITH MACRON" #x016B)
110 ("LATIN CAPITAL LETTER U WITH BREVE" #x016C)
111 ("LATIN SMALL LETTER U WITH BREVE" #x016D)
112 ("LATIN CAPITAL LETTER U WITH RING ABOVE" #x016E)
113 ("LATIN SMALL LETTER U WITH RING ABOVE" #x016F)
114 ("LATIN CAPITAL LETTER U WITH DOUBLE ACUTE" #x0170)
115 ("LATIN SMALL LETTER U WITH DOUBLE ACUTE" #x0171)
116 ("LATIN CAPITAL LETTER U WITH OGONEK" #x0172)
117 ("LATIN SMALL LETTER U WITH OGONEK" #x0173)
118 ("LATIN CAPITAL LETTER W WITH CIRCUMFLEX" #x0174)
119 ("LATIN SMALL LETTER W WITH CIRCUMFLEX" #x0175)
120 ("LATIN CAPITAL LETTER Y WITH CIRCUMFLEX" #x0176)
121 ("LATIN SMALL LETTER Y WITH CIRCUMFLEX" #x0177)
122 ("LATIN CAPITAL LETTER Y WITH DIAERESIS" #x0178)
123 ("LATIN CAPITAL LETTER Z WITH ACUTE" #x0179)
124 ("LATIN SMALL LETTER Z WITH ACUTE" #x017A)
125 ("LATIN CAPITAL LETTER Z WITH DOT ABOVE" #x017B)
126 ("LATIN SMALL LETTER Z WITH DOT ABOVE" #x017C)
127 ("LATIN CAPITAL LETTER Z WITH CARON" #x017D)
128 ("LATIN SMALL LETTER Z WITH CARON" #x017E)
129 ("LATIN SMALL LETTER LONG S" #x017F)
130 ))
diff --git a/lisp/nxml/char-name/unicode/00180-0024F.el b/lisp/nxml/char-name/unicode/00180-0024F.el
new file mode 100644
index 00000000000..6a6a7ff3c18
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/00180-0024F.el
@@ -0,0 +1,181 @@
1(nxml-define-char-name-set 'latin-extended-b
2 '(("LATIN SMALL LETTER B WITH STROKE" #x0180)
3 ("LATIN CAPITAL LETTER B WITH HOOK" #x0181)
4 ("LATIN CAPITAL LETTER B WITH TOPBAR" #x0182)
5 ("LATIN SMALL LETTER B WITH TOPBAR" #x0183)
6 ("LATIN CAPITAL LETTER TONE SIX" #x0184)
7 ("LATIN SMALL LETTER TONE SIX" #x0185)
8 ("LATIN CAPITAL LETTER OPEN O" #x0186)
9 ("LATIN CAPITAL LETTER C WITH HOOK" #x0187)
10 ("LATIN SMALL LETTER C WITH HOOK" #x0188)
11 ("LATIN CAPITAL LETTER AFRICAN D" #x0189)
12 ("LATIN CAPITAL LETTER D WITH HOOK" #x018A)
13 ("LATIN CAPITAL LETTER D WITH TOPBAR" #x018B)
14 ("LATIN SMALL LETTER D WITH TOPBAR" #x018C)
15 ("LATIN SMALL LETTER TURNED DELTA" #x018D)
16 ("LATIN CAPITAL LETTER REVERSED E" #x018E)
17 ("LATIN CAPITAL LETTER SCHWA" #x018F)
18 ("LATIN CAPITAL LETTER OPEN E" #x0190)
19 ("LATIN CAPITAL LETTER F WITH HOOK" #x0191)
20 ("LATIN SMALL LETTER F WITH HOOK" #x0192)
21 ("LATIN CAPITAL LETTER G WITH HOOK" #x0193)
22 ("LATIN CAPITAL LETTER GAMMA" #x0194)
23 ("LATIN SMALL LETTER HV" #x0195)
24 ("LATIN CAPITAL LETTER IOTA" #x0196)
25 ("LATIN CAPITAL LETTER I WITH STROKE" #x0197)
26 ("LATIN CAPITAL LETTER K WITH HOOK" #x0198)
27 ("LATIN SMALL LETTER K WITH HOOK" #x0199)
28 ("LATIN SMALL LETTER L WITH BAR" #x019A)
29 ("LATIN SMALL LETTER LAMBDA WITH STROKE" #x019B)
30 ("LATIN CAPITAL LETTER TURNED M" #x019C)
31 ("LATIN CAPITAL LETTER N WITH LEFT HOOK" #x019D)
32 ("LATIN SMALL LETTER N WITH LONG RIGHT LEG" #x019E)
33 ("LATIN CAPITAL LETTER O WITH MIDDLE TILDE" #x019F)
34 ("LATIN CAPITAL LETTER O WITH HORN" #x01A0)
35 ("LATIN SMALL LETTER O WITH HORN" #x01A1)
36 ("LATIN CAPITAL LETTER OI" #x01A2)
37 ("LATIN SMALL LETTER OI" #x01A3)
38 ("LATIN CAPITAL LETTER P WITH HOOK" #x01A4)
39 ("LATIN SMALL LETTER P WITH HOOK" #x01A5)
40 ("LATIN LETTER YR" #x01A6)
41 ("LATIN CAPITAL LETTER TONE TWO" #x01A7)
42 ("LATIN SMALL LETTER TONE TWO" #x01A8)
43 ("LATIN CAPITAL LETTER ESH" #x01A9)
44 ("LATIN LETTER REVERSED ESH LOOP" #x01AA)
45 ("LATIN SMALL LETTER T WITH PALATAL HOOK" #x01AB)
46 ("LATIN CAPITAL LETTER T WITH HOOK" #x01AC)
47 ("LATIN SMALL LETTER T WITH HOOK" #x01AD)
48 ("LATIN CAPITAL LETTER T WITH RETROFLEX HOOK" #x01AE)
49 ("LATIN CAPITAL LETTER U WITH HORN" #x01AF)
50 ("LATIN SMALL LETTER U WITH HORN" #x01B0)
51 ("LATIN CAPITAL LETTER UPSILON" #x01B1)
52 ("LATIN CAPITAL LETTER V WITH HOOK" #x01B2)
53 ("LATIN CAPITAL LETTER Y WITH HOOK" #x01B3)
54 ("LATIN SMALL LETTER Y WITH HOOK" #x01B4)
55 ("LATIN CAPITAL LETTER Z WITH STROKE" #x01B5)
56 ("LATIN SMALL LETTER Z WITH STROKE" #x01B6)
57 ("LATIN CAPITAL LETTER EZH" #x01B7)
58 ("LATIN CAPITAL LETTER EZH REVERSED" #x01B8)
59 ("LATIN SMALL LETTER EZH REVERSED" #x01B9)
60 ("LATIN SMALL LETTER EZH WITH TAIL" #x01BA)
61 ("LATIN LETTER TWO WITH STROKE" #x01BB)
62 ("LATIN CAPITAL LETTER TONE FIVE" #x01BC)
63 ("LATIN SMALL LETTER TONE FIVE" #x01BD)
64 ("LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE" #x01BE)
65 ("LATIN LETTER WYNN" #x01BF)
66 ("LATIN LETTER DENTAL CLICK" #x01C0)
67 ("LATIN LETTER LATERAL CLICK" #x01C1)
68 ("LATIN LETTER ALVEOLAR CLICK" #x01C2)
69 ("LATIN LETTER RETROFLEX CLICK" #x01C3)
70 ("LATIN CAPITAL LETTER DZ WITH CARON" #x01C4)
71 ("LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON" #x01C5)
72 ("LATIN SMALL LETTER DZ WITH CARON" #x01C6)
73 ("LATIN CAPITAL LETTER LJ" #x01C7)
74 ("LATIN CAPITAL LETTER L WITH SMALL LETTER J" #x01C8)
75 ("LATIN SMALL LETTER LJ" #x01C9)
76 ("LATIN CAPITAL LETTER NJ" #x01CA)
77 ("LATIN CAPITAL LETTER N WITH SMALL LETTER J" #x01CB)
78 ("LATIN SMALL LETTER NJ" #x01CC)
79 ("LATIN CAPITAL LETTER A WITH CARON" #x01CD)
80 ("LATIN SMALL LETTER A WITH CARON" #x01CE)
81 ("LATIN CAPITAL LETTER I WITH CARON" #x01CF)
82 ("LATIN SMALL LETTER I WITH CARON" #x01D0)
83 ("LATIN CAPITAL LETTER O WITH CARON" #x01D1)
84 ("LATIN SMALL LETTER O WITH CARON" #x01D2)
85 ("LATIN CAPITAL LETTER U WITH CARON" #x01D3)
86 ("LATIN SMALL LETTER U WITH CARON" #x01D4)
87 ("LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON" #x01D5)
88 ("LATIN SMALL LETTER U WITH DIAERESIS AND MACRON" #x01D6)
89 ("LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE" #x01D7)
90 ("LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE" #x01D8)
91 ("LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON" #x01D9)
92 ("LATIN SMALL LETTER U WITH DIAERESIS AND CARON" #x01DA)
93 ("LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE" #x01DB)
94 ("LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE" #x01DC)
95 ("LATIN SMALL LETTER TURNED E" #x01DD)
96 ("LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON" #x01DE)
97 ("LATIN SMALL LETTER A WITH DIAERESIS AND MACRON" #x01DF)
98 ("LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON" #x01E0)
99 ("LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON" #x01E1)
100 ("LATIN CAPITAL LETTER AE WITH MACRON" #x01E2)
101 ("LATIN SMALL LETTER AE WITH MACRON" #x01E3)
102 ("LATIN CAPITAL LETTER G WITH STROKE" #x01E4)
103 ("LATIN SMALL LETTER G WITH STROKE" #x01E5)
104 ("LATIN CAPITAL LETTER G WITH CARON" #x01E6)
105 ("LATIN SMALL LETTER G WITH CARON" #x01E7)
106 ("LATIN CAPITAL LETTER K WITH CARON" #x01E8)
107 ("LATIN SMALL LETTER K WITH CARON" #x01E9)
108 ("LATIN CAPITAL LETTER O WITH OGONEK" #x01EA)
109 ("LATIN SMALL LETTER O WITH OGONEK" #x01EB)
110 ("LATIN CAPITAL LETTER O WITH OGONEK AND MACRON" #x01EC)
111 ("LATIN SMALL LETTER O WITH OGONEK AND MACRON" #x01ED)
112 ("LATIN CAPITAL LETTER EZH WITH CARON" #x01EE)
113 ("LATIN SMALL LETTER EZH WITH CARON" #x01EF)
114 ("LATIN SMALL LETTER J WITH CARON" #x01F0)
115 ("LATIN CAPITAL LETTER DZ" #x01F1)
116 ("LATIN CAPITAL LETTER D WITH SMALL LETTER Z" #x01F2)
117 ("LATIN SMALL LETTER DZ" #x01F3)
118 ("LATIN CAPITAL LETTER G WITH ACUTE" #x01F4)
119 ("LATIN SMALL LETTER G WITH ACUTE" #x01F5)
120 ("LATIN CAPITAL LETTER HWAIR" #x01F6)
121 ("LATIN CAPITAL LETTER WYNN" #x01F7)
122 ("LATIN CAPITAL LETTER N WITH GRAVE" #x01F8)
123 ("LATIN SMALL LETTER N WITH GRAVE" #x01F9)
124 ("LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE" #x01FA)
125 ("LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE" #x01FB)
126 ("LATIN CAPITAL LETTER AE WITH ACUTE" #x01FC)
127 ("LATIN SMALL LETTER AE WITH ACUTE" #x01FD)
128 ("LATIN CAPITAL LETTER O WITH STROKE AND ACUTE" #x01FE)
129 ("LATIN SMALL LETTER O WITH STROKE AND ACUTE" #x01FF)
130 ("LATIN CAPITAL LETTER A WITH DOUBLE GRAVE" #x0200)
131 ("LATIN SMALL LETTER A WITH DOUBLE GRAVE" #x0201)
132 ("LATIN CAPITAL LETTER A WITH INVERTED BREVE" #x0202)
133 ("LATIN SMALL LETTER A WITH INVERTED BREVE" #x0203)
134 ("LATIN CAPITAL LETTER E WITH DOUBLE GRAVE" #x0204)
135 ("LATIN SMALL LETTER E WITH DOUBLE GRAVE" #x0205)
136 ("LATIN CAPITAL LETTER E WITH INVERTED BREVE" #x0206)
137 ("LATIN SMALL LETTER E WITH INVERTED BREVE" #x0207)
138 ("LATIN CAPITAL LETTER I WITH DOUBLE GRAVE" #x0208)
139 ("LATIN SMALL LETTER I WITH DOUBLE GRAVE" #x0209)
140 ("LATIN CAPITAL LETTER I WITH INVERTED BREVE" #x020A)
141 ("LATIN SMALL LETTER I WITH INVERTED BREVE" #x020B)
142 ("LATIN CAPITAL LETTER O WITH DOUBLE GRAVE" #x020C)
143 ("LATIN SMALL LETTER O WITH DOUBLE GRAVE" #x020D)
144 ("LATIN CAPITAL LETTER O WITH INVERTED BREVE" #x020E)
145 ("LATIN SMALL LETTER O WITH INVERTED BREVE" #x020F)
146 ("LATIN CAPITAL LETTER R WITH DOUBLE GRAVE" #x0210)
147 ("LATIN SMALL LETTER R WITH DOUBLE GRAVE" #x0211)
148 ("LATIN CAPITAL LETTER R WITH INVERTED BREVE" #x0212)
149 ("LATIN SMALL LETTER R WITH INVERTED BREVE" #x0213)
150 ("LATIN CAPITAL LETTER U WITH DOUBLE GRAVE" #x0214)
151 ("LATIN SMALL LETTER U WITH DOUBLE GRAVE" #x0215)
152 ("LATIN CAPITAL LETTER U WITH INVERTED BREVE" #x0216)
153 ("LATIN SMALL LETTER U WITH INVERTED BREVE" #x0217)
154 ("LATIN CAPITAL LETTER S WITH COMMA BELOW" #x0218)
155 ("LATIN SMALL LETTER S WITH COMMA BELOW" #x0219)
156 ("LATIN CAPITAL LETTER T WITH COMMA BELOW" #x021A)
157 ("LATIN SMALL LETTER T WITH COMMA BELOW" #x021B)
158 ("LATIN CAPITAL LETTER YOGH" #x021C)
159 ("LATIN SMALL LETTER YOGH" #x021D)
160 ("LATIN CAPITAL LETTER H WITH CARON" #x021E)
161 ("LATIN SMALL LETTER H WITH CARON" #x021F)
162 ("LATIN CAPITAL LETTER N WITH LONG RIGHT LEG" #x0220)
163 ("LATIN CAPITAL LETTER OU" #x0222)
164 ("LATIN SMALL LETTER OU" #x0223)
165 ("LATIN CAPITAL LETTER Z WITH HOOK" #x0224)
166 ("LATIN SMALL LETTER Z WITH HOOK" #x0225)
167 ("LATIN CAPITAL LETTER A WITH DOT ABOVE" #x0226)
168 ("LATIN SMALL LETTER A WITH DOT ABOVE" #x0227)
169 ("LATIN CAPITAL LETTER E WITH CEDILLA" #x0228)
170 ("LATIN SMALL LETTER E WITH CEDILLA" #x0229)
171 ("LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON" #x022A)
172 ("LATIN SMALL LETTER O WITH DIAERESIS AND MACRON" #x022B)
173 ("LATIN CAPITAL LETTER O WITH TILDE AND MACRON" #x022C)
174 ("LATIN SMALL LETTER O WITH TILDE AND MACRON" #x022D)
175 ("LATIN CAPITAL LETTER O WITH DOT ABOVE" #x022E)
176 ("LATIN SMALL LETTER O WITH DOT ABOVE" #x022F)
177 ("LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON" #x0230)
178 ("LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON" #x0231)
179 ("LATIN CAPITAL LETTER Y WITH MACRON" #x0232)
180 ("LATIN SMALL LETTER Y WITH MACRON" #x0233)
181 ))
diff --git a/lisp/nxml/char-name/unicode/00250-002AF.el b/lisp/nxml/char-name/unicode/00250-002AF.el
new file mode 100644
index 00000000000..84814214f50
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/00250-002AF.el
@@ -0,0 +1,96 @@
1(nxml-define-char-name-set 'ipa-extensions
2 '(("LATIN SMALL LETTER TURNED A" #x0250)
3 ("LATIN SMALL LETTER ALPHA" #x0251)
4 ("LATIN SMALL LETTER TURNED ALPHA" #x0252)
5 ("LATIN SMALL LETTER B WITH HOOK" #x0253)
6 ("LATIN SMALL LETTER OPEN O" #x0254)
7 ("LATIN SMALL LETTER C WITH CURL" #x0255)
8 ("LATIN SMALL LETTER D WITH TAIL" #x0256)
9 ("LATIN SMALL LETTER D WITH HOOK" #x0257)
10 ("LATIN SMALL LETTER REVERSED E" #x0258)
11 ("LATIN SMALL LETTER SCHWA" #x0259)
12 ("LATIN SMALL LETTER SCHWA WITH HOOK" #x025A)
13 ("LATIN SMALL LETTER OPEN E" #x025B)
14 ("LATIN SMALL LETTER REVERSED OPEN E" #x025C)
15 ("LATIN SMALL LETTER REVERSED OPEN E WITH HOOK" #x025D)
16 ("LATIN SMALL LETTER CLOSED REVERSED OPEN E" #x025E)
17 ("LATIN SMALL LETTER DOTLESS J WITH STROKE" #x025F)
18 ("LATIN SMALL LETTER G WITH HOOK" #x0260)
19 ("LATIN SMALL LETTER SCRIPT G" #x0261)
20 ("LATIN LETTER SMALL CAPITAL G" #x0262)
21 ("LATIN SMALL LETTER GAMMA" #x0263)
22 ("LATIN SMALL LETTER RAMS HORN" #x0264)
23 ("LATIN SMALL LETTER TURNED H" #x0265)
24 ("LATIN SMALL LETTER H WITH HOOK" #x0266)
25 ("LATIN SMALL LETTER HENG WITH HOOK" #x0267)
26 ("LATIN SMALL LETTER I WITH STROKE" #x0268)
27 ("LATIN SMALL LETTER IOTA" #x0269)
28 ("LATIN LETTER SMALL CAPITAL I" #x026A)
29 ("LATIN SMALL LETTER L WITH MIDDLE TILDE" #x026B)
30 ("LATIN SMALL LETTER L WITH BELT" #x026C)
31 ("LATIN SMALL LETTER L WITH RETROFLEX HOOK" #x026D)
32 ("LATIN SMALL LETTER LEZH" #x026E)
33 ("LATIN SMALL LETTER TURNED M" #x026F)
34 ("LATIN SMALL LETTER TURNED M WITH LONG LEG" #x0270)
35 ("LATIN SMALL LETTER M WITH HOOK" #x0271)
36 ("LATIN SMALL LETTER N WITH LEFT HOOK" #x0272)
37 ("LATIN SMALL LETTER N WITH RETROFLEX HOOK" #x0273)
38 ("LATIN LETTER SMALL CAPITAL N" #x0274)
39 ("LATIN SMALL LETTER BARRED O" #x0275)
40 ("LATIN LETTER SMALL CAPITAL OE" #x0276)
41 ("LATIN SMALL LETTER CLOSED OMEGA" #x0277)
42 ("LATIN SMALL LETTER PHI" #x0278)
43 ("LATIN SMALL LETTER TURNED R" #x0279)
44 ("LATIN SMALL LETTER TURNED R WITH LONG LEG" #x027A)
45 ("LATIN SMALL LETTER TURNED R WITH HOOK" #x027B)
46 ("LATIN SMALL LETTER R WITH LONG LEG" #x027C)
47 ("LATIN SMALL LETTER R WITH TAIL" #x027D)
48 ("LATIN SMALL LETTER R WITH FISHHOOK" #x027E)
49 ("LATIN SMALL LETTER REVERSED R WITH FISHHOOK" #x027F)
50 ("LATIN LETTER SMALL CAPITAL R" #x0280)
51 ("LATIN LETTER SMALL CAPITAL INVERTED R" #x0281)
52 ("LATIN SMALL LETTER S WITH HOOK" #x0282)
53 ("LATIN SMALL LETTER ESH" #x0283)
54 ("LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK" #x0284)
55 ("LATIN SMALL LETTER SQUAT REVERSED ESH" #x0285)
56 ("LATIN SMALL LETTER ESH WITH CURL" #x0286)
57 ("LATIN SMALL LETTER TURNED T" #x0287)
58 ("LATIN SMALL LETTER T WITH RETROFLEX HOOK" #x0288)
59 ("LATIN SMALL LETTER U BAR" #x0289)
60 ("LATIN SMALL LETTER UPSILON" #x028A)
61 ("LATIN SMALL LETTER V WITH HOOK" #x028B)
62 ("LATIN SMALL LETTER TURNED V" #x028C)
63 ("LATIN SMALL LETTER TURNED W" #x028D)
64 ("LATIN SMALL LETTER TURNED Y" #x028E)
65 ("LATIN LETTER SMALL CAPITAL Y" #x028F)
66 ("LATIN SMALL LETTER Z WITH RETROFLEX HOOK" #x0290)
67 ("LATIN SMALL LETTER Z WITH CURL" #x0291)
68 ("LATIN SMALL LETTER EZH" #x0292)
69 ("LATIN SMALL LETTER EZH WITH CURL" #x0293)
70 ("LATIN LETTER GLOTTAL STOP" #x0294)
71 ("LATIN LETTER PHARYNGEAL VOICED FRICATIVE" #x0295)
72 ("LATIN LETTER INVERTED GLOTTAL STOP" #x0296)
73 ("LATIN LETTER STRETCHED C" #x0297)
74 ("LATIN LETTER BILABIAL CLICK" #x0298)
75 ("LATIN LETTER SMALL CAPITAL B" #x0299)
76 ("LATIN SMALL LETTER CLOSED OPEN E" #x029A)
77 ("LATIN LETTER SMALL CAPITAL G WITH HOOK" #x029B)
78 ("LATIN LETTER SMALL CAPITAL H" #x029C)
79 ("LATIN SMALL LETTER J WITH CROSSED-TAIL" #x029D)
80 ("LATIN SMALL LETTER TURNED K" #x029E)
81 ("LATIN LETTER SMALL CAPITAL L" #x029F)
82 ("LATIN SMALL LETTER Q WITH HOOK" #x02A0)
83 ("LATIN LETTER GLOTTAL STOP WITH STROKE" #x02A1)
84 ("LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE" #x02A2)
85 ("LATIN SMALL LETTER DZ DIGRAPH" #x02A3)
86 ("LATIN SMALL LETTER DEZH DIGRAPH" #x02A4)
87 ("LATIN SMALL LETTER DZ DIGRAPH WITH CURL" #x02A5)
88 ("LATIN SMALL LETTER TS DIGRAPH" #x02A6)
89 ("LATIN SMALL LETTER TESH DIGRAPH" #x02A7)
90 ("LATIN SMALL LETTER TC DIGRAPH WITH CURL" #x02A8)
91 ("LATIN SMALL LETTER FENG DIGRAPH" #x02A9)
92 ("LATIN SMALL LETTER LS DIGRAPH" #x02AA)
93 ("LATIN SMALL LETTER LZ DIGRAPH" #x02AB)
94 ("LATIN LETTER BILABIAL PERCUSSIVE" #x02AC)
95 ("LATIN LETTER BIDENTAL PERCUSSIVE" #x02AD)
96 ))
diff --git a/lisp/nxml/char-name/unicode/002B0-002FF.el b/lisp/nxml/char-name/unicode/002B0-002FF.el
new file mode 100644
index 00000000000..4f74699d76e
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/002B0-002FF.el
@@ -0,0 +1,65 @@
1(nxml-define-char-name-set 'spacing-modifier-letters
2 '(("MODIFIER LETTER SMALL H" #x02B0)
3 ("MODIFIER LETTER SMALL H WITH HOOK" #x02B1)
4 ("MODIFIER LETTER SMALL J" #x02B2)
5 ("MODIFIER LETTER SMALL R" #x02B3)
6 ("MODIFIER LETTER SMALL TURNED R" #x02B4)
7 ("MODIFIER LETTER SMALL TURNED R WITH HOOK" #x02B5)
8 ("MODIFIER LETTER SMALL CAPITAL INVERTED R" #x02B6)
9 ("MODIFIER LETTER SMALL W" #x02B7)
10 ("MODIFIER LETTER SMALL Y" #x02B8)
11 ("MODIFIER LETTER PRIME" #x02B9)
12 ("MODIFIER LETTER DOUBLE PRIME" #x02BA)
13 ("MODIFIER LETTER TURNED COMMA" #x02BB)
14 ("MODIFIER LETTER APOSTROPHE" #x02BC)
15 ("MODIFIER LETTER REVERSED COMMA" #x02BD)
16 ("MODIFIER LETTER RIGHT HALF RING" #x02BE)
17 ("MODIFIER LETTER LEFT HALF RING" #x02BF)
18 ("MODIFIER LETTER GLOTTAL STOP" #x02C0)
19 ("MODIFIER LETTER REVERSED GLOTTAL STOP" #x02C1)
20 ("MODIFIER LETTER LEFT ARROWHEAD" #x02C2)
21 ("MODIFIER LETTER RIGHT ARROWHEAD" #x02C3)
22 ("MODIFIER LETTER UP ARROWHEAD" #x02C4)
23 ("MODIFIER LETTER DOWN ARROWHEAD" #x02C5)
24 ("MODIFIER LETTER CIRCUMFLEX ACCENT" #x02C6)
25 ("CARON" #x02C7)
26 ("MODIFIER LETTER VERTICAL LINE" #x02C8)
27 ("MODIFIER LETTER MACRON" #x02C9)
28 ("MODIFIER LETTER ACUTE ACCENT" #x02CA)
29 ("MODIFIER LETTER GRAVE ACCENT" #x02CB)
30 ("MODIFIER LETTER LOW VERTICAL LINE" #x02CC)
31 ("MODIFIER LETTER LOW MACRON" #x02CD)
32 ("MODIFIER LETTER LOW GRAVE ACCENT" #x02CE)
33 ("MODIFIER LETTER LOW ACUTE ACCENT" #x02CF)
34 ("MODIFIER LETTER TRIANGULAR COLON" #x02D0)
35 ("MODIFIER LETTER HALF TRIANGULAR COLON" #x02D1)
36 ("MODIFIER LETTER CENTRED RIGHT HALF RING" #x02D2)
37 ("MODIFIER LETTER CENTRED LEFT HALF RING" #x02D3)
38 ("MODIFIER LETTER UP TACK" #x02D4)
39 ("MODIFIER LETTER DOWN TACK" #x02D5)
40 ("MODIFIER LETTER PLUS SIGN" #x02D6)
41 ("MODIFIER LETTER MINUS SIGN" #x02D7)
42 ("BREVE" #x02D8)
43 ("DOT ABOVE" #x02D9)
44 ("RING ABOVE" #x02DA)
45 ("OGONEK" #x02DB)
46 ("SMALL TILDE" #x02DC)
47 ("DOUBLE ACUTE ACCENT" #x02DD)
48 ("MODIFIER LETTER RHOTIC HOOK" #x02DE)
49 ("MODIFIER LETTER CROSS ACCENT" #x02DF)
50 ("MODIFIER LETTER SMALL GAMMA" #x02E0)
51 ("MODIFIER LETTER SMALL L" #x02E1)
52 ("MODIFIER LETTER SMALL S" #x02E2)
53 ("MODIFIER LETTER SMALL X" #x02E3)
54 ("MODIFIER LETTER SMALL REVERSED GLOTTAL STOP" #x02E4)
55 ("MODIFIER LETTER EXTRA-HIGH TONE BAR" #x02E5)
56 ("MODIFIER LETTER HIGH TONE BAR" #x02E6)
57 ("MODIFIER LETTER MID TONE BAR" #x02E7)
58 ("MODIFIER LETTER LOW TONE BAR" #x02E8)
59 ("MODIFIER LETTER EXTRA-LOW TONE BAR" #x02E9)
60 ("MODIFIER LETTER YIN DEPARTING TONE MARK" #x02EA)
61 ("MODIFIER LETTER YANG DEPARTING TONE MARK" #x02EB)
62 ("MODIFIER LETTER VOICING" #x02EC)
63 ("MODIFIER LETTER UNASPIRATED" #x02ED)
64 ("MODIFIER LETTER DOUBLE APOSTROPHE" #x02EE)
65 ))
diff --git a/lisp/nxml/char-name/unicode/00300-0036F.el b/lisp/nxml/char-name/unicode/00300-0036F.el
new file mode 100644
index 00000000000..33e9627d92e
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/00300-0036F.el
@@ -0,0 +1,98 @@
1(nxml-define-char-name-set 'combining-diacritical-marks
2 '(("COMBINING GRAVE ACCENT" #x0300)
3 ("COMBINING ACUTE ACCENT" #x0301)
4 ("COMBINING CIRCUMFLEX ACCENT" #x0302)
5 ("COMBINING TILDE" #x0303)
6 ("COMBINING MACRON" #x0304)
7 ("COMBINING OVERLINE" #x0305)
8 ("COMBINING BREVE" #x0306)
9 ("COMBINING DOT ABOVE" #x0307)
10 ("COMBINING DIAERESIS" #x0308)
11 ("COMBINING HOOK ABOVE" #x0309)
12 ("COMBINING RING ABOVE" #x030A)
13 ("COMBINING DOUBLE ACUTE ACCENT" #x030B)
14 ("COMBINING CARON" #x030C)
15 ("COMBINING VERTICAL LINE ABOVE" #x030D)
16 ("COMBINING DOUBLE VERTICAL LINE ABOVE" #x030E)
17 ("COMBINING DOUBLE GRAVE ACCENT" #x030F)
18 ("COMBINING CANDRABINDU" #x0310)
19 ("COMBINING INVERTED BREVE" #x0311)
20 ("COMBINING TURNED COMMA ABOVE" #x0312)
21 ("COMBINING COMMA ABOVE" #x0313)
22 ("COMBINING REVERSED COMMA ABOVE" #x0314)
23 ("COMBINING COMMA ABOVE RIGHT" #x0315)
24 ("COMBINING GRAVE ACCENT BELOW" #x0316)
25 ("COMBINING ACUTE ACCENT BELOW" #x0317)
26 ("COMBINING LEFT TACK BELOW" #x0318)
27 ("COMBINING RIGHT TACK BELOW" #x0319)
28 ("COMBINING LEFT ANGLE ABOVE" #x031A)
29 ("COMBINING HORN" #x031B)
30 ("COMBINING LEFT HALF RING BELOW" #x031C)
31 ("COMBINING UP TACK BELOW" #x031D)
32 ("COMBINING DOWN TACK BELOW" #x031E)
33 ("COMBINING PLUS SIGN BELOW" #x031F)
34 ("COMBINING MINUS SIGN BELOW" #x0320)
35 ("COMBINING PALATALIZED HOOK BELOW" #x0321)
36 ("COMBINING RETROFLEX HOOK BELOW" #x0322)
37 ("COMBINING DOT BELOW" #x0323)
38 ("COMBINING DIAERESIS BELOW" #x0324)
39 ("COMBINING RING BELOW" #x0325)
40 ("COMBINING COMMA BELOW" #x0326)
41 ("COMBINING CEDILLA" #x0327)
42 ("COMBINING OGONEK" #x0328)
43 ("COMBINING VERTICAL LINE BELOW" #x0329)
44 ("COMBINING BRIDGE BELOW" #x032A)
45 ("COMBINING INVERTED DOUBLE ARCH BELOW" #x032B)
46 ("COMBINING CARON BELOW" #x032C)
47 ("COMBINING CIRCUMFLEX ACCENT BELOW" #x032D)
48 ("COMBINING BREVE BELOW" #x032E)
49 ("COMBINING INVERTED BREVE BELOW" #x032F)
50 ("COMBINING TILDE BELOW" #x0330)
51 ("COMBINING MACRON BELOW" #x0331)
52 ("COMBINING LOW LINE" #x0332)
53 ("COMBINING DOUBLE LOW LINE" #x0333)
54 ("COMBINING TILDE OVERLAY" #x0334)
55 ("COMBINING SHORT STROKE OVERLAY" #x0335)
56 ("COMBINING LONG STROKE OVERLAY" #x0336)
57 ("COMBINING SHORT SOLIDUS OVERLAY" #x0337)
58 ("COMBINING LONG SOLIDUS OVERLAY" #x0338)
59 ("COMBINING RIGHT HALF RING BELOW" #x0339)
60 ("COMBINING INVERTED BRIDGE BELOW" #x033A)
61 ("COMBINING SQUARE BELOW" #x033B)
62 ("COMBINING SEAGULL BELOW" #x033C)
63 ("COMBINING X ABOVE" #x033D)
64 ("COMBINING VERTICAL TILDE" #x033E)
65 ("COMBINING DOUBLE OVERLINE" #x033F)
66 ("COMBINING GRAVE TONE MARK" #x0340)
67 ("COMBINING ACUTE TONE MARK" #x0341)
68 ("COMBINING GREEK PERISPOMENI" #x0342)
69 ("COMBINING GREEK KORONIS" #x0343)
70 ("COMBINING GREEK DIALYTIKA TONOS" #x0344)
71 ("COMBINING GREEK YPOGEGRAMMENI" #x0345)
72 ("COMBINING BRIDGE ABOVE" #x0346)
73 ("COMBINING EQUALS SIGN BELOW" #x0347)
74 ("COMBINING DOUBLE VERTICAL LINE BELOW" #x0348)
75 ("COMBINING LEFT ANGLE BELOW" #x0349)
76 ("COMBINING NOT TILDE ABOVE" #x034A)
77 ("COMBINING HOMOTHETIC ABOVE" #x034B)
78 ("COMBINING ALMOST EQUAL TO ABOVE" #x034C)
79 ("COMBINING LEFT RIGHT ARROW BELOW" #x034D)
80 ("COMBINING UPWARDS ARROW BELOW" #x034E)
81 ("COMBINING GRAPHEME JOINER" #x034F)
82 ("COMBINING DOUBLE TILDE" #x0360)
83 ("COMBINING DOUBLE INVERTED BREVE" #x0361)
84 ("COMBINING DOUBLE RIGHTWARDS ARROW BELOW" #x0362)
85 ("COMBINING LATIN SMALL LETTER A" #x0363)
86 ("COMBINING LATIN SMALL LETTER E" #x0364)
87 ("COMBINING LATIN SMALL LETTER I" #x0365)
88 ("COMBINING LATIN SMALL LETTER O" #x0366)
89 ("COMBINING LATIN SMALL LETTER U" #x0367)
90 ("COMBINING LATIN SMALL LETTER C" #x0368)
91 ("COMBINING LATIN SMALL LETTER D" #x0369)
92 ("COMBINING LATIN SMALL LETTER H" #x036A)
93 ("COMBINING LATIN SMALL LETTER M" #x036B)
94 ("COMBINING LATIN SMALL LETTER R" #x036C)
95 ("COMBINING LATIN SMALL LETTER T" #x036D)
96 ("COMBINING LATIN SMALL LETTER V" #x036E)
97 ("COMBINING LATIN SMALL LETTER X" #x036F)
98 ))
diff --git a/lisp/nxml/char-name/unicode/00370-003FF.el b/lisp/nxml/char-name/unicode/00370-003FF.el
new file mode 100644
index 00000000000..031b58d877d
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/00370-003FF.el
@@ -0,0 +1,117 @@
1(nxml-define-char-name-set 'greek-and-coptic
2 '(("GREEK NUMERAL SIGN" #x0374)
3 ("GREEK LOWER NUMERAL SIGN" #x0375)
4 ("GREEK YPOGEGRAMMENI" #x037A)
5 ("GREEK QUESTION MARK" #x037E)
6 ("GREEK TONOS" #x0384)
7 ("GREEK DIALYTIKA TONOS" #x0385)
8 ("GREEK CAPITAL LETTER ALPHA WITH TONOS" #x0386)
9 ("GREEK ANO TELEIA" #x0387)
10 ("GREEK CAPITAL LETTER EPSILON WITH TONOS" #x0388)
11 ("GREEK CAPITAL LETTER ETA WITH TONOS" #x0389)
12 ("GREEK CAPITAL LETTER IOTA WITH TONOS" #x038A)
13 ("GREEK CAPITAL LETTER OMICRON WITH TONOS" #x038C)
14 ("GREEK CAPITAL LETTER UPSILON WITH TONOS" #x038E)
15 ("GREEK CAPITAL LETTER OMEGA WITH TONOS" #x038F)
16 ("GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS" #x0390)
17 ("GREEK CAPITAL LETTER ALPHA" #x0391)
18 ("GREEK CAPITAL LETTER BETA" #x0392)
19 ("GREEK CAPITAL LETTER GAMMA" #x0393)
20 ("GREEK CAPITAL LETTER DELTA" #x0394)
21 ("GREEK CAPITAL LETTER EPSILON" #x0395)
22 ("GREEK CAPITAL LETTER ZETA" #x0396)
23 ("GREEK CAPITAL LETTER ETA" #x0397)
24 ("GREEK CAPITAL LETTER THETA" #x0398)
25 ("GREEK CAPITAL LETTER IOTA" #x0399)
26 ("GREEK CAPITAL LETTER KAPPA" #x039A)
27 ("GREEK CAPITAL LETTER LAMDA" #x039B)
28 ("GREEK CAPITAL LETTER MU" #x039C)
29 ("GREEK CAPITAL LETTER NU" #x039D)
30 ("GREEK CAPITAL LETTER XI" #x039E)
31 ("GREEK CAPITAL LETTER OMICRON" #x039F)
32 ("GREEK CAPITAL LETTER PI" #x03A0)
33 ("GREEK CAPITAL LETTER RHO" #x03A1)
34 ("GREEK CAPITAL LETTER SIGMA" #x03A3)
35 ("GREEK CAPITAL LETTER TAU" #x03A4)
36 ("GREEK CAPITAL LETTER UPSILON" #x03A5)
37 ("GREEK CAPITAL LETTER PHI" #x03A6)
38 ("GREEK CAPITAL LETTER CHI" #x03A7)
39 ("GREEK CAPITAL LETTER PSI" #x03A8)
40 ("GREEK CAPITAL LETTER OMEGA" #x03A9)
41 ("GREEK CAPITAL LETTER IOTA WITH DIALYTIKA" #x03AA)
42 ("GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA" #x03AB)
43 ("GREEK SMALL LETTER ALPHA WITH TONOS" #x03AC)
44 ("GREEK SMALL LETTER EPSILON WITH TONOS" #x03AD)
45 ("GREEK SMALL LETTER ETA WITH TONOS" #x03AE)
46 ("GREEK SMALL LETTER IOTA WITH TONOS" #x03AF)
47 ("GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS" #x03B0)
48 ("GREEK SMALL LETTER ALPHA" #x03B1)
49 ("GREEK SMALL LETTER BETA" #x03B2)
50 ("GREEK SMALL LETTER GAMMA" #x03B3)
51 ("GREEK SMALL LETTER DELTA" #x03B4)
52 ("GREEK SMALL LETTER EPSILON" #x03B5)
53 ("GREEK SMALL LETTER ZETA" #x03B6)
54 ("GREEK SMALL LETTER ETA" #x03B7)
55 ("GREEK SMALL LETTER THETA" #x03B8)
56 ("GREEK SMALL LETTER IOTA" #x03B9)
57 ("GREEK SMALL LETTER KAPPA" #x03BA)
58 ("GREEK SMALL LETTER LAMDA" #x03BB)
59 ("GREEK SMALL LETTER MU" #x03BC)
60 ("GREEK SMALL LETTER NU" #x03BD)
61 ("GREEK SMALL LETTER XI" #x03BE)
62 ("GREEK SMALL LETTER OMICRON" #x03BF)
63 ("GREEK SMALL LETTER PI" #x03C0)
64 ("GREEK SMALL LETTER RHO" #x03C1)
65 ("GREEK SMALL LETTER FINAL SIGMA" #x03C2)
66 ("GREEK SMALL LETTER SIGMA" #x03C3)
67 ("GREEK SMALL LETTER TAU" #x03C4)
68 ("GREEK SMALL LETTER UPSILON" #x03C5)
69 ("GREEK SMALL LETTER PHI" #x03C6)
70 ("GREEK SMALL LETTER CHI" #x03C7)
71 ("GREEK SMALL LETTER PSI" #x03C8)
72 ("GREEK SMALL LETTER OMEGA" #x03C9)
73 ("GREEK SMALL LETTER IOTA WITH DIALYTIKA" #x03CA)
74 ("GREEK SMALL LETTER UPSILON WITH DIALYTIKA" #x03CB)
75 ("GREEK SMALL LETTER OMICRON WITH TONOS" #x03CC)
76 ("GREEK SMALL LETTER UPSILON WITH TONOS" #x03CD)
77 ("GREEK SMALL LETTER OMEGA WITH TONOS" #x03CE)
78 ("GREEK BETA SYMBOL" #x03D0)
79 ("GREEK THETA SYMBOL" #x03D1)
80 ("GREEK UPSILON WITH HOOK SYMBOL" #x03D2)
81 ("GREEK UPSILON WITH ACUTE AND HOOK SYMBOL" #x03D3)
82 ("GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL" #x03D4)
83 ("GREEK PHI SYMBOL" #x03D5)
84 ("GREEK PI SYMBOL" #x03D6)
85 ("GREEK KAI SYMBOL" #x03D7)
86 ("GREEK LETTER ARCHAIC KOPPA" #x03D8)
87 ("GREEK SMALL LETTER ARCHAIC KOPPA" #x03D9)
88 ("GREEK LETTER STIGMA" #x03DA)
89 ("GREEK SMALL LETTER STIGMA" #x03DB)
90 ("GREEK LETTER DIGAMMA" #x03DC)
91 ("GREEK SMALL LETTER DIGAMMA" #x03DD)
92 ("GREEK LETTER KOPPA" #x03DE)
93 ("GREEK SMALL LETTER KOPPA" #x03DF)
94 ("GREEK LETTER SAMPI" #x03E0)
95 ("GREEK SMALL LETTER SAMPI" #x03E1)
96 ("COPTIC CAPITAL LETTER SHEI" #x03E2)
97 ("COPTIC SMALL LETTER SHEI" #x03E3)
98 ("COPTIC CAPITAL LETTER FEI" #x03E4)
99 ("COPTIC SMALL LETTER FEI" #x03E5)
100 ("COPTIC CAPITAL LETTER KHEI" #x03E6)
101 ("COPTIC SMALL LETTER KHEI" #x03E7)
102 ("COPTIC CAPITAL LETTER HORI" #x03E8)
103 ("COPTIC SMALL LETTER HORI" #x03E9)
104 ("COPTIC CAPITAL LETTER GANGIA" #x03EA)
105 ("COPTIC SMALL LETTER GANGIA" #x03EB)
106 ("COPTIC CAPITAL LETTER SHIMA" #x03EC)
107 ("COPTIC SMALL LETTER SHIMA" #x03ED)
108 ("COPTIC CAPITAL LETTER DEI" #x03EE)
109 ("COPTIC SMALL LETTER DEI" #x03EF)
110 ("GREEK KAPPA SYMBOL" #x03F0)
111 ("GREEK RHO SYMBOL" #x03F1)
112 ("GREEK LUNATE SIGMA SYMBOL" #x03F2)
113 ("GREEK LETTER YOT" #x03F3)
114 ("GREEK CAPITAL THETA SYMBOL" #x03F4)
115 ("GREEK LUNATE EPSILON SYMBOL" #x03F5)
116 ("GREEK REVERSED LUNATE EPSILON SYMBOL" #x03F6)
117 ))
diff --git a/lisp/nxml/char-name/unicode/00400-004FF.el b/lisp/nxml/char-name/unicode/00400-004FF.el
new file mode 100644
index 00000000000..9de27e0dc57
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/00400-004FF.el
@@ -0,0 +1,248 @@
1(nxml-define-char-name-set 'cyrillic
2 '(("CYRILLIC CAPITAL LETTER IE WITH GRAVE" #x0400)
3 ("CYRILLIC CAPITAL LETTER IO" #x0401)
4 ("CYRILLIC CAPITAL LETTER DJE" #x0402)
5 ("CYRILLIC CAPITAL LETTER GJE" #x0403)
6 ("CYRILLIC CAPITAL LETTER UKRAINIAN IE" #x0404)
7 ("CYRILLIC CAPITAL LETTER DZE" #x0405)
8 ("CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I" #x0406)
9 ("CYRILLIC CAPITAL LETTER YI" #x0407)
10 ("CYRILLIC CAPITAL LETTER JE" #x0408)
11 ("CYRILLIC CAPITAL LETTER LJE" #x0409)
12 ("CYRILLIC CAPITAL LETTER NJE" #x040A)
13 ("CYRILLIC CAPITAL LETTER TSHE" #x040B)
14 ("CYRILLIC CAPITAL LETTER KJE" #x040C)
15 ("CYRILLIC CAPITAL LETTER I WITH GRAVE" #x040D)
16 ("CYRILLIC CAPITAL LETTER SHORT U" #x040E)
17 ("CYRILLIC CAPITAL LETTER DZHE" #x040F)
18 ("CYRILLIC CAPITAL LETTER A" #x0410)
19 ("CYRILLIC CAPITAL LETTER BE" #x0411)
20 ("CYRILLIC CAPITAL LETTER VE" #x0412)
21 ("CYRILLIC CAPITAL LETTER GHE" #x0413)
22 ("CYRILLIC CAPITAL LETTER DE" #x0414)
23 ("CYRILLIC CAPITAL LETTER IE" #x0415)
24 ("CYRILLIC CAPITAL LETTER ZHE" #x0416)
25 ("CYRILLIC CAPITAL LETTER ZE" #x0417)
26 ("CYRILLIC CAPITAL LETTER I" #x0418)
27 ("CYRILLIC CAPITAL LETTER SHORT I" #x0419)
28 ("CYRILLIC CAPITAL LETTER KA" #x041A)
29 ("CYRILLIC CAPITAL LETTER EL" #x041B)
30 ("CYRILLIC CAPITAL LETTER EM" #x041C)
31 ("CYRILLIC CAPITAL LETTER EN" #x041D)
32 ("CYRILLIC CAPITAL LETTER O" #x041E)
33 ("CYRILLIC CAPITAL LETTER PE" #x041F)
34 ("CYRILLIC CAPITAL LETTER ER" #x0420)
35 ("CYRILLIC CAPITAL LETTER ES" #x0421)
36 ("CYRILLIC CAPITAL LETTER TE" #x0422)
37 ("CYRILLIC CAPITAL LETTER U" #x0423)
38 ("CYRILLIC CAPITAL LETTER EF" #x0424)
39 ("CYRILLIC CAPITAL LETTER HA" #x0425)
40 ("CYRILLIC CAPITAL LETTER TSE" #x0426)
41 ("CYRILLIC CAPITAL LETTER CHE" #x0427)
42 ("CYRILLIC CAPITAL LETTER SHA" #x0428)
43 ("CYRILLIC CAPITAL LETTER SHCHA" #x0429)
44 ("CYRILLIC CAPITAL LETTER HARD SIGN" #x042A)
45 ("CYRILLIC CAPITAL LETTER YERU" #x042B)
46 ("CYRILLIC CAPITAL LETTER SOFT SIGN" #x042C)
47 ("CYRILLIC CAPITAL LETTER E" #x042D)
48 ("CYRILLIC CAPITAL LETTER YU" #x042E)
49 ("CYRILLIC CAPITAL LETTER YA" #x042F)
50 ("CYRILLIC SMALL LETTER A" #x0430)
51 ("CYRILLIC SMALL LETTER BE" #x0431)
52 ("CYRILLIC SMALL LETTER VE" #x0432)
53 ("CYRILLIC SMALL LETTER GHE" #x0433)
54 ("CYRILLIC SMALL LETTER DE" #x0434)
55 ("CYRILLIC SMALL LETTER IE" #x0435)
56 ("CYRILLIC SMALL LETTER ZHE" #x0436)
57 ("CYRILLIC SMALL LETTER ZE" #x0437)
58 ("CYRILLIC SMALL LETTER I" #x0438)
59 ("CYRILLIC SMALL LETTER SHORT I" #x0439)
60 ("CYRILLIC SMALL LETTER KA" #x043A)
61 ("CYRILLIC SMALL LETTER EL" #x043B)
62 ("CYRILLIC SMALL LETTER EM" #x043C)
63 ("CYRILLIC SMALL LETTER EN" #x043D)
64 ("CYRILLIC SMALL LETTER O" #x043E)
65 ("CYRILLIC SMALL LETTER PE" #x043F)
66 ("CYRILLIC SMALL LETTER ER" #x0440)
67 ("CYRILLIC SMALL LETTER ES" #x0441)
68 ("CYRILLIC SMALL LETTER TE" #x0442)
69 ("CYRILLIC SMALL LETTER U" #x0443)
70 ("CYRILLIC SMALL LETTER EF" #x0444)
71 ("CYRILLIC SMALL LETTER HA" #x0445)
72 ("CYRILLIC SMALL LETTER TSE" #x0446)
73 ("CYRILLIC SMALL LETTER CHE" #x0447)
74 ("CYRILLIC SMALL LETTER SHA" #x0448)
75 ("CYRILLIC SMALL LETTER SHCHA" #x0449)
76 ("CYRILLIC SMALL LETTER HARD SIGN" #x044A)
77 ("CYRILLIC SMALL LETTER YERU" #x044B)
78 ("CYRILLIC SMALL LETTER SOFT SIGN" #x044C)
79 ("CYRILLIC SMALL LETTER E" #x044D)
80 ("CYRILLIC SMALL LETTER YU" #x044E)
81 ("CYRILLIC SMALL LETTER YA" #x044F)
82 ("CYRILLIC SMALL LETTER IE WITH GRAVE" #x0450)
83 ("CYRILLIC SMALL LETTER IO" #x0451)
84 ("CYRILLIC SMALL LETTER DJE" #x0452)
85 ("CYRILLIC SMALL LETTER GJE" #x0453)
86 ("CYRILLIC SMALL LETTER UKRAINIAN IE" #x0454)
87 ("CYRILLIC SMALL LETTER DZE" #x0455)
88 ("CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I" #x0456)
89 ("CYRILLIC SMALL LETTER YI" #x0457)
90 ("CYRILLIC SMALL LETTER JE" #x0458)
91 ("CYRILLIC SMALL LETTER LJE" #x0459)
92 ("CYRILLIC SMALL LETTER NJE" #x045A)
93 ("CYRILLIC SMALL LETTER TSHE" #x045B)
94 ("CYRILLIC SMALL LETTER KJE" #x045C)
95 ("CYRILLIC SMALL LETTER I WITH GRAVE" #x045D)
96 ("CYRILLIC SMALL LETTER SHORT U" #x045E)
97 ("CYRILLIC SMALL LETTER DZHE" #x045F)
98 ("CYRILLIC CAPITAL LETTER OMEGA" #x0460)
99 ("CYRILLIC SMALL LETTER OMEGA" #x0461)
100 ("CYRILLIC CAPITAL LETTER YAT" #x0462)
101 ("CYRILLIC SMALL LETTER YAT" #x0463)
102 ("CYRILLIC CAPITAL LETTER IOTIFIED E" #x0464)
103 ("CYRILLIC SMALL LETTER IOTIFIED E" #x0465)
104 ("CYRILLIC CAPITAL LETTER LITTLE YUS" #x0466)
105 ("CYRILLIC SMALL LETTER LITTLE YUS" #x0467)
106 ("CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS" #x0468)
107 ("CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS" #x0469)
108 ("CYRILLIC CAPITAL LETTER BIG YUS" #x046A)
109 ("CYRILLIC SMALL LETTER BIG YUS" #x046B)
110 ("CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS" #x046C)
111 ("CYRILLIC SMALL LETTER IOTIFIED BIG YUS" #x046D)
112 ("CYRILLIC CAPITAL LETTER KSI" #x046E)
113 ("CYRILLIC SMALL LETTER KSI" #x046F)
114 ("CYRILLIC CAPITAL LETTER PSI" #x0470)
115 ("CYRILLIC SMALL LETTER PSI" #x0471)
116 ("CYRILLIC CAPITAL LETTER FITA" #x0472)
117 ("CYRILLIC SMALL LETTER FITA" #x0473)
118 ("CYRILLIC CAPITAL LETTER IZHITSA" #x0474)
119 ("CYRILLIC SMALL LETTER IZHITSA" #x0475)
120 ("CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT" #x0476)
121 ("CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT" #x0477)
122 ("CYRILLIC CAPITAL LETTER UK" #x0478)
123 ("CYRILLIC SMALL LETTER UK" #x0479)
124 ("CYRILLIC CAPITAL LETTER ROUND OMEGA" #x047A)
125 ("CYRILLIC SMALL LETTER ROUND OMEGA" #x047B)
126 ("CYRILLIC CAPITAL LETTER OMEGA WITH TITLO" #x047C)
127 ("CYRILLIC SMALL LETTER OMEGA WITH TITLO" #x047D)
128 ("CYRILLIC CAPITAL LETTER OT" #x047E)
129 ("CYRILLIC SMALL LETTER OT" #x047F)
130 ("CYRILLIC CAPITAL LETTER KOPPA" #x0480)
131 ("CYRILLIC SMALL LETTER KOPPA" #x0481)
132 ("CYRILLIC THOUSANDS SIGN" #x0482)
133 ("COMBINING CYRILLIC TITLO" #x0483)
134 ("COMBINING CYRILLIC PALATALIZATION" #x0484)
135 ("COMBINING CYRILLIC DASIA PNEUMATA" #x0485)
136 ("COMBINING CYRILLIC PSILI PNEUMATA" #x0486)
137 ("COMBINING CYRILLIC HUNDRED THOUSANDS SIGN" #x0488)
138 ("COMBINING CYRILLIC MILLIONS SIGN" #x0489)
139 ("CYRILLIC CAPITAL LETTER SHORT I WITH TAIL" #x048A)
140 ("CYRILLIC SMALL LETTER SHORT I WITH TAIL" #x048B)
141 ("CYRILLIC CAPITAL LETTER SEMISOFT SIGN" #x048C)
142 ("CYRILLIC SMALL LETTER SEMISOFT SIGN" #x048D)
143 ("CYRILLIC CAPITAL LETTER ER WITH TICK" #x048E)
144 ("CYRILLIC SMALL LETTER ER WITH TICK" #x048F)
145 ("CYRILLIC CAPITAL LETTER GHE WITH UPTURN" #x0490)
146 ("CYRILLIC SMALL LETTER GHE WITH UPTURN" #x0491)
147 ("CYRILLIC CAPITAL LETTER GHE WITH STROKE" #x0492)
148 ("CYRILLIC SMALL LETTER GHE WITH STROKE" #x0493)
149 ("CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK" #x0494)
150 ("CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK" #x0495)
151 ("CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER" #x0496)
152 ("CYRILLIC SMALL LETTER ZHE WITH DESCENDER" #x0497)
153 ("CYRILLIC CAPITAL LETTER ZE WITH DESCENDER" #x0498)
154 ("CYRILLIC SMALL LETTER ZE WITH DESCENDER" #x0499)
155 ("CYRILLIC CAPITAL LETTER KA WITH DESCENDER" #x049A)
156 ("CYRILLIC SMALL LETTER KA WITH DESCENDER" #x049B)
157 ("CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE" #x049C)
158 ("CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE" #x049D)
159 ("CYRILLIC CAPITAL LETTER KA WITH STROKE" #x049E)
160 ("CYRILLIC SMALL LETTER KA WITH STROKE" #x049F)
161 ("CYRILLIC CAPITAL LETTER BASHKIR KA" #x04A0)
162 ("CYRILLIC SMALL LETTER BASHKIR KA" #x04A1)
163 ("CYRILLIC CAPITAL LETTER EN WITH DESCENDER" #x04A2)
164 ("CYRILLIC SMALL LETTER EN WITH DESCENDER" #x04A3)
165 ("CYRILLIC CAPITAL LIGATURE EN GHE" #x04A4)
166 ("CYRILLIC SMALL LIGATURE EN GHE" #x04A5)
167 ("CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK" #x04A6)
168 ("CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK" #x04A7)
169 ("CYRILLIC CAPITAL LETTER ABKHASIAN HA" #x04A8)
170 ("CYRILLIC SMALL LETTER ABKHASIAN HA" #x04A9)
171 ("CYRILLIC CAPITAL LETTER ES WITH DESCENDER" #x04AA)
172 ("CYRILLIC SMALL LETTER ES WITH DESCENDER" #x04AB)
173 ("CYRILLIC CAPITAL LETTER TE WITH DESCENDER" #x04AC)
174 ("CYRILLIC SMALL LETTER TE WITH DESCENDER" #x04AD)
175 ("CYRILLIC CAPITAL LETTER STRAIGHT U" #x04AE)
176 ("CYRILLIC SMALL LETTER STRAIGHT U" #x04AF)
177 ("CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE" #x04B0)
178 ("CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE" #x04B1)
179 ("CYRILLIC CAPITAL LETTER HA WITH DESCENDER" #x04B2)
180 ("CYRILLIC SMALL LETTER HA WITH DESCENDER" #x04B3)
181 ("CYRILLIC CAPITAL LIGATURE TE TSE" #x04B4)
182 ("CYRILLIC SMALL LIGATURE TE TSE" #x04B5)
183 ("CYRILLIC CAPITAL LETTER CHE WITH DESCENDER" #x04B6)
184 ("CYRILLIC SMALL LETTER CHE WITH DESCENDER" #x04B7)
185 ("CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE" #x04B8)
186 ("CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE" #x04B9)
187 ("CYRILLIC CAPITAL LETTER SHHA" #x04BA)
188 ("CYRILLIC SMALL LETTER SHHA" #x04BB)
189 ("CYRILLIC CAPITAL LETTER ABKHASIAN CHE" #x04BC)
190 ("CYRILLIC SMALL LETTER ABKHASIAN CHE" #x04BD)
191 ("CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER" #x04BE)
192 ("CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER" #x04BF)
193 ("CYRILLIC LETTER PALOCHKA" #x04C0)
194 ("CYRILLIC CAPITAL LETTER ZHE WITH BREVE" #x04C1)
195 ("CYRILLIC SMALL LETTER ZHE WITH BREVE" #x04C2)
196 ("CYRILLIC CAPITAL LETTER KA WITH HOOK" #x04C3)
197 ("CYRILLIC SMALL LETTER KA WITH HOOK" #x04C4)
198 ("CYRILLIC CAPITAL LETTER EL WITH TAIL" #x04C5)
199 ("CYRILLIC SMALL LETTER EL WITH TAIL" #x04C6)
200 ("CYRILLIC CAPITAL LETTER EN WITH HOOK" #x04C7)
201 ("CYRILLIC SMALL LETTER EN WITH HOOK" #x04C8)
202 ("CYRILLIC CAPITAL LETTER EN WITH TAIL" #x04C9)
203 ("CYRILLIC SMALL LETTER EN WITH TAIL" #x04CA)
204 ("CYRILLIC CAPITAL LETTER KHAKASSIAN CHE" #x04CB)
205 ("CYRILLIC SMALL LETTER KHAKASSIAN CHE" #x04CC)
206 ("CYRILLIC CAPITAL LETTER EM WITH TAIL" #x04CD)
207 ("CYRILLIC SMALL LETTER EM WITH TAIL" #x04CE)
208 ("CYRILLIC CAPITAL LETTER A WITH BREVE" #x04D0)
209 ("CYRILLIC SMALL LETTER A WITH BREVE" #x04D1)
210 ("CYRILLIC CAPITAL LETTER A WITH DIAERESIS" #x04D2)
211 ("CYRILLIC SMALL LETTER A WITH DIAERESIS" #x04D3)
212 ("CYRILLIC CAPITAL LIGATURE A IE" #x04D4)
213 ("CYRILLIC SMALL LIGATURE A IE" #x04D5)
214 ("CYRILLIC CAPITAL LETTER IE WITH BREVE" #x04D6)
215 ("CYRILLIC SMALL LETTER IE WITH BREVE" #x04D7)
216 ("CYRILLIC CAPITAL LETTER SCHWA" #x04D8)
217 ("CYRILLIC SMALL LETTER SCHWA" #x04D9)
218 ("CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS" #x04DA)
219 ("CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS" #x04DB)
220 ("CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS" #x04DC)
221 ("CYRILLIC SMALL LETTER ZHE WITH DIAERESIS" #x04DD)
222 ("CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS" #x04DE)
223 ("CYRILLIC SMALL LETTER ZE WITH DIAERESIS" #x04DF)
224 ("CYRILLIC CAPITAL LETTER ABKHASIAN DZE" #x04E0)
225 ("CYRILLIC SMALL LETTER ABKHASIAN DZE" #x04E1)
226 ("CYRILLIC CAPITAL LETTER I WITH MACRON" #x04E2)
227 ("CYRILLIC SMALL LETTER I WITH MACRON" #x04E3)
228 ("CYRILLIC CAPITAL LETTER I WITH DIAERESIS" #x04E4)
229 ("CYRILLIC SMALL LETTER I WITH DIAERESIS" #x04E5)
230 ("CYRILLIC CAPITAL LETTER O WITH DIAERESIS" #x04E6)
231 ("CYRILLIC SMALL LETTER O WITH DIAERESIS" #x04E7)
232 ("CYRILLIC CAPITAL LETTER BARRED O" #x04E8)
233 ("CYRILLIC SMALL LETTER BARRED O" #x04E9)
234 ("CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS" #x04EA)
235 ("CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS" #x04EB)
236 ("CYRILLIC CAPITAL LETTER E WITH DIAERESIS" #x04EC)
237 ("CYRILLIC SMALL LETTER E WITH DIAERESIS" #x04ED)
238 ("CYRILLIC CAPITAL LETTER U WITH MACRON" #x04EE)
239 ("CYRILLIC SMALL LETTER U WITH MACRON" #x04EF)
240 ("CYRILLIC CAPITAL LETTER U WITH DIAERESIS" #x04F0)
241 ("CYRILLIC SMALL LETTER U WITH DIAERESIS" #x04F1)
242 ("CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE" #x04F2)
243 ("CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE" #x04F3)
244 ("CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS" #x04F4)
245 ("CYRILLIC SMALL LETTER CHE WITH DIAERESIS" #x04F5)
246 ("CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS" #x04F8)
247 ("CYRILLIC SMALL LETTER YERU WITH DIAERESIS" #x04F9)
248 ))
diff --git a/lisp/nxml/char-name/unicode/00500-0052F.el b/lisp/nxml/char-name/unicode/00500-0052F.el
new file mode 100644
index 00000000000..a59541150ef
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/00500-0052F.el
@@ -0,0 +1,18 @@
1(nxml-define-char-name-set 'cyrillic-supplementary
2 '(("CYRILLIC CAPITAL LETTER KOMI DE" #x0500)
3 ("CYRILLIC SMALL LETTER KOMI DE" #x0501)
4 ("CYRILLIC CAPITAL LETTER KOMI DJE" #x0502)
5 ("CYRILLIC SMALL LETTER KOMI DJE" #x0503)
6 ("CYRILLIC CAPITAL LETTER KOMI ZJE" #x0504)
7 ("CYRILLIC SMALL LETTER KOMI ZJE" #x0505)
8 ("CYRILLIC CAPITAL LETTER KOMI DZJE" #x0506)
9 ("CYRILLIC SMALL LETTER KOMI DZJE" #x0507)
10 ("CYRILLIC CAPITAL LETTER KOMI LJE" #x0508)
11 ("CYRILLIC SMALL LETTER KOMI LJE" #x0509)
12 ("CYRILLIC CAPITAL LETTER KOMI NJE" #x050A)
13 ("CYRILLIC SMALL LETTER KOMI NJE" #x050B)
14 ("CYRILLIC CAPITAL LETTER KOMI SJE" #x050C)
15 ("CYRILLIC SMALL LETTER KOMI SJE" #x050D)
16 ("CYRILLIC CAPITAL LETTER KOMI TJE" #x050E)
17 ("CYRILLIC SMALL LETTER KOMI TJE" #x050F)
18 ))
diff --git a/lisp/nxml/char-name/unicode/00530-0058F.el b/lisp/nxml/char-name/unicode/00530-0058F.el
new file mode 100644
index 00000000000..0f5d0ed1e5f
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/00530-0058F.el
@@ -0,0 +1,88 @@
1(nxml-define-char-name-set 'armenian
2 '(("ARMENIAN CAPITAL LETTER AYB" #x0531)
3 ("ARMENIAN CAPITAL LETTER BEN" #x0532)
4 ("ARMENIAN CAPITAL LETTER GIM" #x0533)
5 ("ARMENIAN CAPITAL LETTER DA" #x0534)
6 ("ARMENIAN CAPITAL LETTER ECH" #x0535)
7 ("ARMENIAN CAPITAL LETTER ZA" #x0536)
8 ("ARMENIAN CAPITAL LETTER EH" #x0537)
9 ("ARMENIAN CAPITAL LETTER ET" #x0538)
10 ("ARMENIAN CAPITAL LETTER TO" #x0539)
11 ("ARMENIAN CAPITAL LETTER ZHE" #x053A)
12 ("ARMENIAN CAPITAL LETTER INI" #x053B)
13 ("ARMENIAN CAPITAL LETTER LIWN" #x053C)
14 ("ARMENIAN CAPITAL LETTER XEH" #x053D)
15 ("ARMENIAN CAPITAL LETTER CA" #x053E)
16 ("ARMENIAN CAPITAL LETTER KEN" #x053F)
17 ("ARMENIAN CAPITAL LETTER HO" #x0540)
18 ("ARMENIAN CAPITAL LETTER JA" #x0541)
19 ("ARMENIAN CAPITAL LETTER GHAD" #x0542)
20 ("ARMENIAN CAPITAL LETTER CHEH" #x0543)
21 ("ARMENIAN CAPITAL LETTER MEN" #x0544)
22 ("ARMENIAN CAPITAL LETTER YI" #x0545)
23 ("ARMENIAN CAPITAL LETTER NOW" #x0546)
24 ("ARMENIAN CAPITAL LETTER SHA" #x0547)
25 ("ARMENIAN CAPITAL LETTER VO" #x0548)
26 ("ARMENIAN CAPITAL LETTER CHA" #x0549)
27 ("ARMENIAN CAPITAL LETTER PEH" #x054A)
28 ("ARMENIAN CAPITAL LETTER JHEH" #x054B)
29 ("ARMENIAN CAPITAL LETTER RA" #x054C)
30 ("ARMENIAN CAPITAL LETTER SEH" #x054D)
31 ("ARMENIAN CAPITAL LETTER VEW" #x054E)
32 ("ARMENIAN CAPITAL LETTER TIWN" #x054F)
33 ("ARMENIAN CAPITAL LETTER REH" #x0550)
34 ("ARMENIAN CAPITAL LETTER CO" #x0551)
35 ("ARMENIAN CAPITAL LETTER YIWN" #x0552)
36 ("ARMENIAN CAPITAL LETTER PIWR" #x0553)
37 ("ARMENIAN CAPITAL LETTER KEH" #x0554)
38 ("ARMENIAN CAPITAL LETTER OH" #x0555)
39 ("ARMENIAN CAPITAL LETTER FEH" #x0556)
40 ("ARMENIAN MODIFIER LETTER LEFT HALF RING" #x0559)
41 ("ARMENIAN APOSTROPHE" #x055A)
42 ("ARMENIAN EMPHASIS MARK" #x055B)
43 ("ARMENIAN EXCLAMATION MARK" #x055C)
44 ("ARMENIAN COMMA" #x055D)
45 ("ARMENIAN QUESTION MARK" #x055E)
46 ("ARMENIAN ABBREVIATION MARK" #x055F)
47 ("ARMENIAN SMALL LETTER AYB" #x0561)
48 ("ARMENIAN SMALL LETTER BEN" #x0562)
49 ("ARMENIAN SMALL LETTER GIM" #x0563)
50 ("ARMENIAN SMALL LETTER DA" #x0564)
51 ("ARMENIAN SMALL LETTER ECH" #x0565)
52 ("ARMENIAN SMALL LETTER ZA" #x0566)
53 ("ARMENIAN SMALL LETTER EH" #x0567)
54 ("ARMENIAN SMALL LETTER ET" #x0568)
55 ("ARMENIAN SMALL LETTER TO" #x0569)
56 ("ARMENIAN SMALL LETTER ZHE" #x056A)
57 ("ARMENIAN SMALL LETTER INI" #x056B)
58 ("ARMENIAN SMALL LETTER LIWN" #x056C)
59 ("ARMENIAN SMALL LETTER XEH" #x056D)
60 ("ARMENIAN SMALL LETTER CA" #x056E)
61 ("ARMENIAN SMALL LETTER KEN" #x056F)
62 ("ARMENIAN SMALL LETTER HO" #x0570)
63 ("ARMENIAN SMALL LETTER JA" #x0571)
64 ("ARMENIAN SMALL LETTER GHAD" #x0572)
65 ("ARMENIAN SMALL LETTER CHEH" #x0573)
66 ("ARMENIAN SMALL LETTER MEN" #x0574)
67 ("ARMENIAN SMALL LETTER YI" #x0575)
68 ("ARMENIAN SMALL LETTER NOW" #x0576)
69 ("ARMENIAN SMALL LETTER SHA" #x0577)
70 ("ARMENIAN SMALL LETTER VO" #x0578)
71 ("ARMENIAN SMALL LETTER CHA" #x0579)
72 ("ARMENIAN SMALL LETTER PEH" #x057A)
73 ("ARMENIAN SMALL LETTER JHEH" #x057B)
74 ("ARMENIAN SMALL LETTER RA" #x057C)
75 ("ARMENIAN SMALL LETTER SEH" #x057D)
76 ("ARMENIAN SMALL LETTER VEW" #x057E)
77 ("ARMENIAN SMALL LETTER TIWN" #x057F)
78 ("ARMENIAN SMALL LETTER REH" #x0580)
79 ("ARMENIAN SMALL LETTER CO" #x0581)
80 ("ARMENIAN SMALL LETTER YIWN" #x0582)
81 ("ARMENIAN SMALL LETTER PIWR" #x0583)
82 ("ARMENIAN SMALL LETTER KEH" #x0584)
83 ("ARMENIAN SMALL LETTER OH" #x0585)
84 ("ARMENIAN SMALL LETTER FEH" #x0586)
85 ("ARMENIAN SMALL LIGATURE ECH YIWN" #x0587)
86 ("ARMENIAN FULL STOP" #x0589)
87 ("ARMENIAN HYPHEN" #x058A)
88 ))
diff --git a/lisp/nxml/char-name/unicode/00590-005FF.el b/lisp/nxml/char-name/unicode/00590-005FF.el
new file mode 100644
index 00000000000..b33d5ea0650
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/00590-005FF.el
@@ -0,0 +1,84 @@
1(nxml-define-char-name-set 'hebrew
2 '(("HEBREW ACCENT ETNAHTA" #x0591)
3 ("HEBREW ACCENT SEGOL" #x0592)
4 ("HEBREW ACCENT SHALSHELET" #x0593)
5 ("HEBREW ACCENT ZAQEF QATAN" #x0594)
6 ("HEBREW ACCENT ZAQEF GADOL" #x0595)
7 ("HEBREW ACCENT TIPEHA" #x0596)
8 ("HEBREW ACCENT REVIA" #x0597)
9 ("HEBREW ACCENT ZARQA" #x0598)
10 ("HEBREW ACCENT PASHTA" #x0599)
11 ("HEBREW ACCENT YETIV" #x059A)
12 ("HEBREW ACCENT TEVIR" #x059B)
13 ("HEBREW ACCENT GERESH" #x059C)
14 ("HEBREW ACCENT GERESH MUQDAM" #x059D)
15 ("HEBREW ACCENT GERSHAYIM" #x059E)
16 ("HEBREW ACCENT QARNEY PARA" #x059F)
17 ("HEBREW ACCENT TELISHA GEDOLA" #x05A0)
18 ("HEBREW ACCENT PAZER" #x05A1)
19 ("HEBREW ACCENT MUNAH" #x05A3)
20 ("HEBREW ACCENT MAHAPAKH" #x05A4)
21 ("HEBREW ACCENT MERKHA" #x05A5)
22 ("HEBREW ACCENT MERKHA KEFULA" #x05A6)
23 ("HEBREW ACCENT DARGA" #x05A7)
24 ("HEBREW ACCENT QADMA" #x05A8)
25 ("HEBREW ACCENT TELISHA QETANA" #x05A9)
26 ("HEBREW ACCENT YERAH BEN YOMO" #x05AA)
27 ("HEBREW ACCENT OLE" #x05AB)
28 ("HEBREW ACCENT ILUY" #x05AC)
29 ("HEBREW ACCENT DEHI" #x05AD)
30 ("HEBREW ACCENT ZINOR" #x05AE)
31 ("HEBREW MARK MASORA CIRCLE" #x05AF)
32 ("HEBREW POINT SHEVA" #x05B0)
33 ("HEBREW POINT HATAF SEGOL" #x05B1)
34 ("HEBREW POINT HATAF PATAH" #x05B2)
35 ("HEBREW POINT HATAF QAMATS" #x05B3)
36 ("HEBREW POINT HIRIQ" #x05B4)
37 ("HEBREW POINT TSERE" #x05B5)
38 ("HEBREW POINT SEGOL" #x05B6)
39 ("HEBREW POINT PATAH" #x05B7)
40 ("HEBREW POINT QAMATS" #x05B8)
41 ("HEBREW POINT HOLAM" #x05B9)
42 ("HEBREW POINT QUBUTS" #x05BB)
43 ("HEBREW POINT DAGESH OR MAPIQ" #x05BC)
44 ("HEBREW POINT METEG" #x05BD)
45 ("HEBREW PUNCTUATION MAQAF" #x05BE)
46 ("HEBREW POINT RAFE" #x05BF)
47 ("HEBREW PUNCTUATION PASEQ" #x05C0)
48 ("HEBREW POINT SHIN DOT" #x05C1)
49 ("HEBREW POINT SIN DOT" #x05C2)
50 ("HEBREW PUNCTUATION SOF PASUQ" #x05C3)
51 ("HEBREW MARK UPPER DOT" #x05C4)
52 ("HEBREW LETTER ALEF" #x05D0)
53 ("HEBREW LETTER BET" #x05D1)
54 ("HEBREW LETTER GIMEL" #x05D2)
55 ("HEBREW LETTER DALET" #x05D3)
56 ("HEBREW LETTER HE" #x05D4)
57 ("HEBREW LETTER VAV" #x05D5)
58 ("HEBREW LETTER ZAYIN" #x05D6)
59 ("HEBREW LETTER HET" #x05D7)
60 ("HEBREW LETTER TET" #x05D8)
61 ("HEBREW LETTER YOD" #x05D9)
62 ("HEBREW LETTER FINAL KAF" #x05DA)
63 ("HEBREW LETTER KAF" #x05DB)
64 ("HEBREW LETTER LAMED" #x05DC)
65 ("HEBREW LETTER FINAL MEM" #x05DD)
66 ("HEBREW LETTER MEM" #x05DE)
67 ("HEBREW LETTER FINAL NUN" #x05DF)
68 ("HEBREW LETTER NUN" #x05E0)
69 ("HEBREW LETTER SAMEKH" #x05E1)
70 ("HEBREW LETTER AYIN" #x05E2)
71 ("HEBREW LETTER FINAL PE" #x05E3)
72 ("HEBREW LETTER PE" #x05E4)
73 ("HEBREW LETTER FINAL TSADI" #x05E5)
74 ("HEBREW LETTER TSADI" #x05E6)
75 ("HEBREW LETTER QOF" #x05E7)
76 ("HEBREW LETTER RESH" #x05E8)
77 ("HEBREW LETTER SHIN" #x05E9)
78 ("HEBREW LETTER TAV" #x05EA)
79 ("HEBREW LIGATURE YIDDISH DOUBLE VAV" #x05F0)
80 ("HEBREW LIGATURE YIDDISH VAV YOD" #x05F1)
81 ("HEBREW LIGATURE YIDDISH DOUBLE YOD" #x05F2)
82 ("HEBREW PUNCTUATION GERESH" #x05F3)
83 ("HEBREW PUNCTUATION GERSHAYIM" #x05F4)
84 ))
diff --git a/lisp/nxml/char-name/unicode/00600-006FF.el b/lisp/nxml/char-name/unicode/00600-006FF.el
new file mode 100644
index 00000000000..9009737528a
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/00600-006FF.el
@@ -0,0 +1,210 @@
1(nxml-define-char-name-set 'arabic
2 '(("ARABIC COMMA" #x060C)
3 ("ARABIC SEMICOLON" #x061B)
4 ("ARABIC QUESTION MARK" #x061F)
5 ("ARABIC LETTER HAMZA" #x0621)
6 ("ARABIC LETTER ALEF WITH MADDA ABOVE" #x0622)
7 ("ARABIC LETTER ALEF WITH HAMZA ABOVE" #x0623)
8 ("ARABIC LETTER WAW WITH HAMZA ABOVE" #x0624)
9 ("ARABIC LETTER ALEF WITH HAMZA BELOW" #x0625)
10 ("ARABIC LETTER YEH WITH HAMZA ABOVE" #x0626)
11 ("ARABIC LETTER ALEF" #x0627)
12 ("ARABIC LETTER BEH" #x0628)
13 ("ARABIC LETTER TEH MARBUTA" #x0629)
14 ("ARABIC LETTER TEH" #x062A)
15 ("ARABIC LETTER THEH" #x062B)
16 ("ARABIC LETTER JEEM" #x062C)
17 ("ARABIC LETTER HAH" #x062D)
18 ("ARABIC LETTER KHAH" #x062E)
19 ("ARABIC LETTER DAL" #x062F)
20 ("ARABIC LETTER THAL" #x0630)
21 ("ARABIC LETTER REH" #x0631)
22 ("ARABIC LETTER ZAIN" #x0632)
23 ("ARABIC LETTER SEEN" #x0633)
24 ("ARABIC LETTER SHEEN" #x0634)
25 ("ARABIC LETTER SAD" #x0635)
26 ("ARABIC LETTER DAD" #x0636)
27 ("ARABIC LETTER TAH" #x0637)
28 ("ARABIC LETTER ZAH" #x0638)
29 ("ARABIC LETTER AIN" #x0639)
30 ("ARABIC LETTER GHAIN" #x063A)
31 ("ARABIC TATWEEL" #x0640)
32 ("ARABIC LETTER FEH" #x0641)
33 ("ARABIC LETTER QAF" #x0642)
34 ("ARABIC LETTER KAF" #x0643)
35 ("ARABIC LETTER LAM" #x0644)
36 ("ARABIC LETTER MEEM" #x0645)
37 ("ARABIC LETTER NOON" #x0646)
38 ("ARABIC LETTER HEH" #x0647)
39 ("ARABIC LETTER WAW" #x0648)
40 ("ARABIC LETTER ALEF MAKSURA" #x0649)
41 ("ARABIC LETTER YEH" #x064A)
42 ("ARABIC FATHATAN" #x064B)
43 ("ARABIC DAMMATAN" #x064C)
44 ("ARABIC KASRATAN" #x064D)
45 ("ARABIC FATHA" #x064E)
46 ("ARABIC DAMMA" #x064F)
47 ("ARABIC KASRA" #x0650)
48 ("ARABIC SHADDA" #x0651)
49 ("ARABIC SUKUN" #x0652)
50 ("ARABIC MADDAH ABOVE" #x0653)
51 ("ARABIC HAMZA ABOVE" #x0654)
52 ("ARABIC HAMZA BELOW" #x0655)
53 ("ARABIC-INDIC DIGIT ZERO" #x0660)
54 ("ARABIC-INDIC DIGIT ONE" #x0661)
55 ("ARABIC-INDIC DIGIT TWO" #x0662)
56 ("ARABIC-INDIC DIGIT THREE" #x0663)
57 ("ARABIC-INDIC DIGIT FOUR" #x0664)
58 ("ARABIC-INDIC DIGIT FIVE" #x0665)
59 ("ARABIC-INDIC DIGIT SIX" #x0666)
60 ("ARABIC-INDIC DIGIT SEVEN" #x0667)
61 ("ARABIC-INDIC DIGIT EIGHT" #x0668)
62 ("ARABIC-INDIC DIGIT NINE" #x0669)
63 ("ARABIC PERCENT SIGN" #x066A)
64 ("ARABIC DECIMAL SEPARATOR" #x066B)
65 ("ARABIC THOUSANDS SEPARATOR" #x066C)
66 ("ARABIC FIVE POINTED STAR" #x066D)
67 ("ARABIC LETTER DOTLESS BEH" #x066E)
68 ("ARABIC LETTER DOTLESS QAF" #x066F)
69 ("ARABIC LETTER SUPERSCRIPT ALEF" #x0670)
70 ("ARABIC LETTER ALEF WASLA" #x0671)
71 ("ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE" #x0672)
72 ("ARABIC LETTER ALEF WITH WAVY HAMZA BELOW" #x0673)
73 ("ARABIC LETTER HIGH HAMZA" #x0674)
74 ("ARABIC LETTER HIGH HAMZA ALEF" #x0675)
75 ("ARABIC LETTER HIGH HAMZA WAW" #x0676)
76 ("ARABIC LETTER U WITH HAMZA ABOVE" #x0677)
77 ("ARABIC LETTER HIGH HAMZA YEH" #x0678)
78 ("ARABIC LETTER TTEH" #x0679)
79 ("ARABIC LETTER TTEHEH" #x067A)
80 ("ARABIC LETTER BEEH" #x067B)
81 ("ARABIC LETTER TEH WITH RING" #x067C)
82 ("ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS" #x067D)
83 ("ARABIC LETTER PEH" #x067E)
84 ("ARABIC LETTER TEHEH" #x067F)
85 ("ARABIC LETTER BEHEH" #x0680)
86 ("ARABIC LETTER HAH WITH HAMZA ABOVE" #x0681)
87 ("ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE" #x0682)
88 ("ARABIC LETTER NYEH" #x0683)
89 ("ARABIC LETTER DYEH" #x0684)
90 ("ARABIC LETTER HAH WITH THREE DOTS ABOVE" #x0685)
91 ("ARABIC LETTER TCHEH" #x0686)
92 ("ARABIC LETTER TCHEHEH" #x0687)
93 ("ARABIC LETTER DDAL" #x0688)
94 ("ARABIC LETTER DAL WITH RING" #x0689)
95 ("ARABIC LETTER DAL WITH DOT BELOW" #x068A)
96 ("ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH" #x068B)
97 ("ARABIC LETTER DAHAL" #x068C)
98 ("ARABIC LETTER DDAHAL" #x068D)
99 ("ARABIC LETTER DUL" #x068E)
100 ("ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS" #x068F)
101 ("ARABIC LETTER DAL WITH FOUR DOTS ABOVE" #x0690)
102 ("ARABIC LETTER RREH" #x0691)
103 ("ARABIC LETTER REH WITH SMALL V" #x0692)
104 ("ARABIC LETTER REH WITH RING" #x0693)
105 ("ARABIC LETTER REH WITH DOT BELOW" #x0694)
106 ("ARABIC LETTER REH WITH SMALL V BELOW" #x0695)
107 ("ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE" #x0696)
108 ("ARABIC LETTER REH WITH TWO DOTS ABOVE" #x0697)
109 ("ARABIC LETTER JEH" #x0698)
110 ("ARABIC LETTER REH WITH FOUR DOTS ABOVE" #x0699)
111 ("ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE" #x069A)
112 ("ARABIC LETTER SEEN WITH THREE DOTS BELOW" #x069B)
113 ("ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE" #x069C)
114 ("ARABIC LETTER SAD WITH TWO DOTS BELOW" #x069D)
115 ("ARABIC LETTER SAD WITH THREE DOTS ABOVE" #x069E)
116 ("ARABIC LETTER TAH WITH THREE DOTS ABOVE" #x069F)
117 ("ARABIC LETTER AIN WITH THREE DOTS ABOVE" #x06A0)
118 ("ARABIC LETTER DOTLESS FEH" #x06A1)
119 ("ARABIC LETTER FEH WITH DOT MOVED BELOW" #x06A2)
120 ("ARABIC LETTER FEH WITH DOT BELOW" #x06A3)
121 ("ARABIC LETTER VEH" #x06A4)
122 ("ARABIC LETTER FEH WITH THREE DOTS BELOW" #x06A5)
123 ("ARABIC LETTER PEHEH" #x06A6)
124 ("ARABIC LETTER QAF WITH DOT ABOVE" #x06A7)
125 ("ARABIC LETTER QAF WITH THREE DOTS ABOVE" #x06A8)
126 ("ARABIC LETTER KEHEH" #x06A9)
127 ("ARABIC LETTER SWASH KAF" #x06AA)
128 ("ARABIC LETTER KAF WITH RING" #x06AB)
129 ("ARABIC LETTER KAF WITH DOT ABOVE" #x06AC)
130 ("ARABIC LETTER NG" #x06AD)
131 ("ARABIC LETTER KAF WITH THREE DOTS BELOW" #x06AE)
132 ("ARABIC LETTER GAF" #x06AF)
133 ("ARABIC LETTER GAF WITH RING" #x06B0)
134 ("ARABIC LETTER NGOEH" #x06B1)
135 ("ARABIC LETTER GAF WITH TWO DOTS BELOW" #x06B2)
136 ("ARABIC LETTER GUEH" #x06B3)
137 ("ARABIC LETTER GAF WITH THREE DOTS ABOVE" #x06B4)
138 ("ARABIC LETTER LAM WITH SMALL V" #x06B5)
139 ("ARABIC LETTER LAM WITH DOT ABOVE" #x06B6)
140 ("ARABIC LETTER LAM WITH THREE DOTS ABOVE" #x06B7)
141 ("ARABIC LETTER LAM WITH THREE DOTS BELOW" #x06B8)
142 ("ARABIC LETTER NOON WITH DOT BELOW" #x06B9)
143 ("ARABIC LETTER NOON GHUNNA" #x06BA)
144 ("ARABIC LETTER RNOON" #x06BB)
145 ("ARABIC LETTER NOON WITH RING" #x06BC)
146 ("ARABIC LETTER NOON WITH THREE DOTS ABOVE" #x06BD)
147 ("ARABIC LETTER HEH DOACHASHMEE" #x06BE)
148 ("ARABIC LETTER TCHEH WITH DOT ABOVE" #x06BF)
149 ("ARABIC LETTER HEH WITH YEH ABOVE" #x06C0)
150 ("ARABIC LETTER HEH GOAL" #x06C1)
151 ("ARABIC LETTER HEH GOAL WITH HAMZA ABOVE" #x06C2)
152 ("ARABIC LETTER TEH MARBUTA GOAL" #x06C3)
153 ("ARABIC LETTER WAW WITH RING" #x06C4)
154 ("ARABIC LETTER KIRGHIZ OE" #x06C5)
155 ("ARABIC LETTER OE" #x06C6)
156 ("ARABIC LETTER U" #x06C7)
157 ("ARABIC LETTER YU" #x06C8)
158 ("ARABIC LETTER KIRGHIZ YU" #x06C9)
159 ("ARABIC LETTER WAW WITH TWO DOTS ABOVE" #x06CA)
160 ("ARABIC LETTER VE" #x06CB)
161 ("ARABIC LETTER FARSI YEH" #x06CC)
162 ("ARABIC LETTER YEH WITH TAIL" #x06CD)
163 ("ARABIC LETTER YEH WITH SMALL V" #x06CE)
164 ("ARABIC LETTER WAW WITH DOT ABOVE" #x06CF)
165 ("ARABIC LETTER E" #x06D0)
166 ("ARABIC LETTER YEH WITH THREE DOTS BELOW" #x06D1)
167 ("ARABIC LETTER YEH BARREE" #x06D2)
168 ("ARABIC LETTER YEH BARREE WITH HAMZA ABOVE" #x06D3)
169 ("ARABIC FULL STOP" #x06D4)
170 ("ARABIC LETTER AE" #x06D5)
171 ("ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA" #x06D6)
172 ("ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA" #x06D7)
173 ("ARABIC SMALL HIGH MEEM INITIAL FORM" #x06D8)
174 ("ARABIC SMALL HIGH LAM ALEF" #x06D9)
175 ("ARABIC SMALL HIGH JEEM" #x06DA)
176 ("ARABIC SMALL HIGH THREE DOTS" #x06DB)
177 ("ARABIC SMALL HIGH SEEN" #x06DC)
178 ("ARABIC END OF AYAH" #x06DD)
179 ("ARABIC START OF RUB EL HIZB" #x06DE)
180 ("ARABIC SMALL HIGH ROUNDED ZERO" #x06DF)
181 ("ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO" #x06E0)
182 ("ARABIC SMALL HIGH DOTLESS HEAD OF KHAH" #x06E1)
183 ("ARABIC SMALL HIGH MEEM ISOLATED FORM" #x06E2)
184 ("ARABIC SMALL LOW SEEN" #x06E3)
185 ("ARABIC SMALL HIGH MADDA" #x06E4)
186 ("ARABIC SMALL WAW" #x06E5)
187 ("ARABIC SMALL YEH" #x06E6)
188 ("ARABIC SMALL HIGH YEH" #x06E7)
189 ("ARABIC SMALL HIGH NOON" #x06E8)
190 ("ARABIC PLACE OF SAJDAH" #x06E9)
191 ("ARABIC EMPTY CENTRE LOW STOP" #x06EA)
192 ("ARABIC EMPTY CENTRE HIGH STOP" #x06EB)
193 ("ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE" #x06EC)
194 ("ARABIC SMALL LOW MEEM" #x06ED)
195 ("EXTENDED ARABIC-INDIC DIGIT ZERO" #x06F0)
196 ("EXTENDED ARABIC-INDIC DIGIT ONE" #x06F1)
197 ("EXTENDED ARABIC-INDIC DIGIT TWO" #x06F2)
198 ("EXTENDED ARABIC-INDIC DIGIT THREE" #x06F3)
199 ("EXTENDED ARABIC-INDIC DIGIT FOUR" #x06F4)
200 ("EXTENDED ARABIC-INDIC DIGIT FIVE" #x06F5)
201 ("EXTENDED ARABIC-INDIC DIGIT SIX" #x06F6)
202 ("EXTENDED ARABIC-INDIC DIGIT SEVEN" #x06F7)
203 ("EXTENDED ARABIC-INDIC DIGIT EIGHT" #x06F8)
204 ("EXTENDED ARABIC-INDIC DIGIT NINE" #x06F9)
205 ("ARABIC LETTER SHEEN WITH DOT BELOW" #x06FA)
206 ("ARABIC LETTER DAD WITH DOT BELOW" #x06FB)
207 ("ARABIC LETTER GHAIN WITH DOT BELOW" #x06FC)
208 ("ARABIC SIGN SINDHI AMPERSAND" #x06FD)
209 ("ARABIC SIGN SINDHI POSTPOSITION MEN" #x06FE)
210 ))
diff --git a/lisp/nxml/char-name/unicode/00700-0074F.el b/lisp/nxml/char-name/unicode/00700-0074F.el
new file mode 100644
index 00000000000..434861cf2b5
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/00700-0074F.el
@@ -0,0 +1,73 @@
1(nxml-define-char-name-set 'syriac
2 '(("SYRIAC END OF PARAGRAPH" #x0700)
3 ("SYRIAC SUPRALINEAR FULL STOP" #x0701)
4 ("SYRIAC SUBLINEAR FULL STOP" #x0702)
5 ("SYRIAC SUPRALINEAR COLON" #x0703)
6 ("SYRIAC SUBLINEAR COLON" #x0704)
7 ("SYRIAC HORIZONTAL COLON" #x0705)
8 ("SYRIAC COLON SKEWED LEFT" #x0706)
9 ("SYRIAC COLON SKEWED RIGHT" #x0707)
10 ("SYRIAC SUPRALINEAR COLON SKEWED LEFT" #x0708)
11 ("SYRIAC SUBLINEAR COLON SKEWED RIGHT" #x0709)
12 ("SYRIAC CONTRACTION" #x070A)
13 ("SYRIAC HARKLEAN OBELUS" #x070B)
14 ("SYRIAC HARKLEAN METOBELUS" #x070C)
15 ("SYRIAC HARKLEAN ASTERISCUS" #x070D)
16 ("SYRIAC ABBREVIATION MARK" #x070F)
17 ("SYRIAC LETTER ALAPH" #x0710)
18 ("SYRIAC LETTER SUPERSCRIPT ALAPH" #x0711)
19 ("SYRIAC LETTER BETH" #x0712)
20 ("SYRIAC LETTER GAMAL" #x0713)
21 ("SYRIAC LETTER GAMAL GARSHUNI" #x0714)
22 ("SYRIAC LETTER DALATH" #x0715)
23 ("SYRIAC LETTER DOTLESS DALATH RISH" #x0716)
24 ("SYRIAC LETTER HE" #x0717)
25 ("SYRIAC LETTER WAW" #x0718)
26 ("SYRIAC LETTER ZAIN" #x0719)
27 ("SYRIAC LETTER HETH" #x071A)
28 ("SYRIAC LETTER TETH" #x071B)
29 ("SYRIAC LETTER TETH GARSHUNI" #x071C)
30 ("SYRIAC LETTER YUDH" #x071D)
31 ("SYRIAC LETTER YUDH HE" #x071E)
32 ("SYRIAC LETTER KAPH" #x071F)
33 ("SYRIAC LETTER LAMADH" #x0720)
34 ("SYRIAC LETTER MIM" #x0721)
35 ("SYRIAC LETTER NUN" #x0722)
36 ("SYRIAC LETTER SEMKATH" #x0723)
37 ("SYRIAC LETTER FINAL SEMKATH" #x0724)
38 ("SYRIAC LETTER E" #x0725)
39 ("SYRIAC LETTER PE" #x0726)
40 ("SYRIAC LETTER REVERSED PE" #x0727)
41 ("SYRIAC LETTER SADHE" #x0728)
42 ("SYRIAC LETTER QAPH" #x0729)
43 ("SYRIAC LETTER RISH" #x072A)
44 ("SYRIAC LETTER SHIN" #x072B)
45 ("SYRIAC LETTER TAW" #x072C)
46 ("SYRIAC PTHAHA ABOVE" #x0730)
47 ("SYRIAC PTHAHA BELOW" #x0731)
48 ("SYRIAC PTHAHA DOTTED" #x0732)
49 ("SYRIAC ZQAPHA ABOVE" #x0733)
50 ("SYRIAC ZQAPHA BELOW" #x0734)
51 ("SYRIAC ZQAPHA DOTTED" #x0735)
52 ("SYRIAC RBASA ABOVE" #x0736)
53 ("SYRIAC RBASA BELOW" #x0737)
54 ("SYRIAC DOTTED ZLAMA HORIZONTAL" #x0738)
55 ("SYRIAC DOTTED ZLAMA ANGULAR" #x0739)
56 ("SYRIAC HBASA ABOVE" #x073A)
57 ("SYRIAC HBASA BELOW" #x073B)
58 ("SYRIAC HBASA-ESASA DOTTED" #x073C)
59 ("SYRIAC ESASA ABOVE" #x073D)
60 ("SYRIAC ESASA BELOW" #x073E)
61 ("SYRIAC RWAHA" #x073F)
62 ("SYRIAC FEMININE DOT" #x0740)
63 ("SYRIAC QUSHSHAYA" #x0741)
64 ("SYRIAC RUKKAKHA" #x0742)
65 ("SYRIAC TWO VERTICAL DOTS ABOVE" #x0743)
66 ("SYRIAC TWO VERTICAL DOTS BELOW" #x0744)
67 ("SYRIAC THREE DOTS ABOVE" #x0745)
68 ("SYRIAC THREE DOTS BELOW" #x0746)
69 ("SYRIAC OBLIQUE LINE ABOVE" #x0747)
70 ("SYRIAC OBLIQUE LINE BELOW" #x0748)
71 ("SYRIAC MUSIC" #x0749)
72 ("SYRIAC BARREKH" #x074A)
73 ))
diff --git a/lisp/nxml/char-name/unicode/00780-007BF.el b/lisp/nxml/char-name/unicode/00780-007BF.el
new file mode 100644
index 00000000000..bb572921ddc
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/00780-007BF.el
@@ -0,0 +1,52 @@
1(nxml-define-char-name-set 'thaana
2 '(("THAANA LETTER HAA" #x0780)
3 ("THAANA LETTER SHAVIYANI" #x0781)
4 ("THAANA LETTER NOONU" #x0782)
5 ("THAANA LETTER RAA" #x0783)
6 ("THAANA LETTER BAA" #x0784)
7 ("THAANA LETTER LHAVIYANI" #x0785)
8 ("THAANA LETTER KAAFU" #x0786)
9 ("THAANA LETTER ALIFU" #x0787)
10 ("THAANA LETTER VAAVU" #x0788)
11 ("THAANA LETTER MEEMU" #x0789)
12 ("THAANA LETTER FAAFU" #x078A)
13 ("THAANA LETTER DHAALU" #x078B)
14 ("THAANA LETTER THAA" #x078C)
15 ("THAANA LETTER LAAMU" #x078D)
16 ("THAANA LETTER GAAFU" #x078E)
17 ("THAANA LETTER GNAVIYANI" #x078F)
18 ("THAANA LETTER SEENU" #x0790)
19 ("THAANA LETTER DAVIYANI" #x0791)
20 ("THAANA LETTER ZAVIYANI" #x0792)
21 ("THAANA LETTER TAVIYANI" #x0793)
22 ("THAANA LETTER YAA" #x0794)
23 ("THAANA LETTER PAVIYANI" #x0795)
24 ("THAANA LETTER JAVIYANI" #x0796)
25 ("THAANA LETTER CHAVIYANI" #x0797)
26 ("THAANA LETTER TTAA" #x0798)
27 ("THAANA LETTER HHAA" #x0799)
28 ("THAANA LETTER KHAA" #x079A)
29 ("THAANA LETTER THAALU" #x079B)
30 ("THAANA LETTER ZAA" #x079C)
31 ("THAANA LETTER SHEENU" #x079D)
32 ("THAANA LETTER SAADHU" #x079E)
33 ("THAANA LETTER DAADHU" #x079F)
34 ("THAANA LETTER TO" #x07A0)
35 ("THAANA LETTER ZO" #x07A1)
36 ("THAANA LETTER AINU" #x07A2)
37 ("THAANA LETTER GHAINU" #x07A3)
38 ("THAANA LETTER QAAFU" #x07A4)
39 ("THAANA LETTER WAAVU" #x07A5)
40 ("THAANA ABAFILI" #x07A6)
41 ("THAANA AABAAFILI" #x07A7)
42 ("THAANA IBIFILI" #x07A8)
43 ("THAANA EEBEEFILI" #x07A9)
44 ("THAANA UBUFILI" #x07AA)
45 ("THAANA OOBOOFILI" #x07AB)
46 ("THAANA EBEFILI" #x07AC)
47 ("THAANA EYBEYFILI" #x07AD)
48 ("THAANA OBOFILI" #x07AE)
49 ("THAANA OABOAFILI" #x07AF)
50 ("THAANA SUKUN" #x07B0)
51 ("THAANA LETTER NAA" #x07B1)
52 ))
diff --git a/lisp/nxml/char-name/unicode/00900-0097F.el b/lisp/nxml/char-name/unicode/00900-0097F.el
new file mode 100644
index 00000000000..c93dd4654b2
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/00900-0097F.el
@@ -0,0 +1,106 @@
1(nxml-define-char-name-set 'devanagari
2 '(("DEVANAGARI SIGN CANDRABINDU" #x0901)
3 ("DEVANAGARI SIGN ANUSVARA" #x0902)
4 ("DEVANAGARI SIGN VISARGA" #x0903)
5 ("DEVANAGARI LETTER A" #x0905)
6 ("DEVANAGARI LETTER AA" #x0906)
7 ("DEVANAGARI LETTER I" #x0907)
8 ("DEVANAGARI LETTER II" #x0908)
9 ("DEVANAGARI LETTER U" #x0909)
10 ("DEVANAGARI LETTER UU" #x090A)
11 ("DEVANAGARI LETTER VOCALIC R" #x090B)
12 ("DEVANAGARI LETTER VOCALIC L" #x090C)
13 ("DEVANAGARI LETTER CANDRA E" #x090D)
14 ("DEVANAGARI LETTER SHORT E" #x090E)
15 ("DEVANAGARI LETTER E" #x090F)
16 ("DEVANAGARI LETTER AI" #x0910)
17 ("DEVANAGARI LETTER CANDRA O" #x0911)
18 ("DEVANAGARI LETTER SHORT O" #x0912)
19 ("DEVANAGARI LETTER O" #x0913)
20 ("DEVANAGARI LETTER AU" #x0914)
21 ("DEVANAGARI LETTER KA" #x0915)
22 ("DEVANAGARI LETTER KHA" #x0916)
23 ("DEVANAGARI LETTER GA" #x0917)
24 ("DEVANAGARI LETTER GHA" #x0918)
25 ("DEVANAGARI LETTER NGA" #x0919)
26 ("DEVANAGARI LETTER CA" #x091A)
27 ("DEVANAGARI LETTER CHA" #x091B)
28 ("DEVANAGARI LETTER JA" #x091C)
29 ("DEVANAGARI LETTER JHA" #x091D)
30 ("DEVANAGARI LETTER NYA" #x091E)
31 ("DEVANAGARI LETTER TTA" #x091F)
32 ("DEVANAGARI LETTER TTHA" #x0920)
33 ("DEVANAGARI LETTER DDA" #x0921)
34 ("DEVANAGARI LETTER DDHA" #x0922)
35 ("DEVANAGARI LETTER NNA" #x0923)
36 ("DEVANAGARI LETTER TA" #x0924)
37 ("DEVANAGARI LETTER THA" #x0925)
38 ("DEVANAGARI LETTER DA" #x0926)
39 ("DEVANAGARI LETTER DHA" #x0927)
40 ("DEVANAGARI LETTER NA" #x0928)
41 ("DEVANAGARI LETTER NNNA" #x0929)
42 ("DEVANAGARI LETTER PA" #x092A)
43 ("DEVANAGARI LETTER PHA" #x092B)
44 ("DEVANAGARI LETTER BA" #x092C)
45 ("DEVANAGARI LETTER BHA" #x092D)
46 ("DEVANAGARI LETTER MA" #x092E)
47 ("DEVANAGARI LETTER YA" #x092F)
48 ("DEVANAGARI LETTER RA" #x0930)
49 ("DEVANAGARI LETTER RRA" #x0931)
50 ("DEVANAGARI LETTER LA" #x0932)
51 ("DEVANAGARI LETTER LLA" #x0933)
52 ("DEVANAGARI LETTER LLLA" #x0934)
53 ("DEVANAGARI LETTER VA" #x0935)
54 ("DEVANAGARI LETTER SHA" #x0936)
55 ("DEVANAGARI LETTER SSA" #x0937)
56 ("DEVANAGARI LETTER SA" #x0938)
57 ("DEVANAGARI LETTER HA" #x0939)
58 ("DEVANAGARI SIGN NUKTA" #x093C)
59 ("DEVANAGARI SIGN AVAGRAHA" #x093D)
60 ("DEVANAGARI VOWEL SIGN AA" #x093E)
61 ("DEVANAGARI VOWEL SIGN I" #x093F)
62 ("DEVANAGARI VOWEL SIGN II" #x0940)
63 ("DEVANAGARI VOWEL SIGN U" #x0941)
64 ("DEVANAGARI VOWEL SIGN UU" #x0942)
65 ("DEVANAGARI VOWEL SIGN VOCALIC R" #x0943)
66 ("DEVANAGARI VOWEL SIGN VOCALIC RR" #x0944)
67 ("DEVANAGARI VOWEL SIGN CANDRA E" #x0945)
68 ("DEVANAGARI VOWEL SIGN SHORT E" #x0946)
69 ("DEVANAGARI VOWEL SIGN E" #x0947)
70 ("DEVANAGARI VOWEL SIGN AI" #x0948)
71 ("DEVANAGARI VOWEL SIGN CANDRA O" #x0949)
72 ("DEVANAGARI VOWEL SIGN SHORT O" #x094A)
73 ("DEVANAGARI VOWEL SIGN O" #x094B)
74 ("DEVANAGARI VOWEL SIGN AU" #x094C)
75 ("DEVANAGARI SIGN VIRAMA" #x094D)
76 ("DEVANAGARI OM" #x0950)
77 ("DEVANAGARI STRESS SIGN UDATTA" #x0951)
78 ("DEVANAGARI STRESS SIGN ANUDATTA" #x0952)
79 ("DEVANAGARI GRAVE ACCENT" #x0953)
80 ("DEVANAGARI ACUTE ACCENT" #x0954)
81 ("DEVANAGARI LETTER QA" #x0958)
82 ("DEVANAGARI LETTER KHHA" #x0959)
83 ("DEVANAGARI LETTER GHHA" #x095A)
84 ("DEVANAGARI LETTER ZA" #x095B)
85 ("DEVANAGARI LETTER DDDHA" #x095C)
86 ("DEVANAGARI LETTER RHA" #x095D)
87 ("DEVANAGARI LETTER FA" #x095E)
88 ("DEVANAGARI LETTER YYA" #x095F)
89 ("DEVANAGARI LETTER VOCALIC RR" #x0960)
90 ("DEVANAGARI LETTER VOCALIC LL" #x0961)
91 ("DEVANAGARI VOWEL SIGN VOCALIC L" #x0962)
92 ("DEVANAGARI VOWEL SIGN VOCALIC LL" #x0963)
93 ("DEVANAGARI DANDA" #x0964)
94 ("DEVANAGARI DOUBLE DANDA" #x0965)
95 ("DEVANAGARI DIGIT ZERO" #x0966)
96 ("DEVANAGARI DIGIT ONE" #x0967)
97 ("DEVANAGARI DIGIT TWO" #x0968)
98 ("DEVANAGARI DIGIT THREE" #x0969)
99 ("DEVANAGARI DIGIT FOUR" #x096A)
100 ("DEVANAGARI DIGIT FIVE" #x096B)
101 ("DEVANAGARI DIGIT SIX" #x096C)
102 ("DEVANAGARI DIGIT SEVEN" #x096D)
103 ("DEVANAGARI DIGIT EIGHT" #x096E)
104 ("DEVANAGARI DIGIT NINE" #x096F)
105 ("DEVANAGARI ABBREVIATION SIGN" #x0970)
106 ))
diff --git a/lisp/nxml/char-name/unicode/00980-009FF.el b/lisp/nxml/char-name/unicode/00980-009FF.el
new file mode 100644
index 00000000000..cfae10e0950
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/00980-009FF.el
@@ -0,0 +1,91 @@
1(nxml-define-char-name-set 'bengali
2 '(("BENGALI SIGN CANDRABINDU" #x0981)
3 ("BENGALI SIGN ANUSVARA" #x0982)
4 ("BENGALI SIGN VISARGA" #x0983)
5 ("BENGALI LETTER A" #x0985)
6 ("BENGALI LETTER AA" #x0986)
7 ("BENGALI LETTER I" #x0987)
8 ("BENGALI LETTER II" #x0988)
9 ("BENGALI LETTER U" #x0989)
10 ("BENGALI LETTER UU" #x098A)
11 ("BENGALI LETTER VOCALIC R" #x098B)
12 ("BENGALI LETTER VOCALIC L" #x098C)
13 ("BENGALI LETTER E" #x098F)
14 ("BENGALI LETTER AI" #x0990)
15 ("BENGALI LETTER O" #x0993)
16 ("BENGALI LETTER AU" #x0994)
17 ("BENGALI LETTER KA" #x0995)
18 ("BENGALI LETTER KHA" #x0996)
19 ("BENGALI LETTER GA" #x0997)
20 ("BENGALI LETTER GHA" #x0998)
21 ("BENGALI LETTER NGA" #x0999)
22 ("BENGALI LETTER CA" #x099A)
23 ("BENGALI LETTER CHA" #x099B)
24 ("BENGALI LETTER JA" #x099C)
25 ("BENGALI LETTER JHA" #x099D)
26 ("BENGALI LETTER NYA" #x099E)
27 ("BENGALI LETTER TTA" #x099F)
28 ("BENGALI LETTER TTHA" #x09A0)
29 ("BENGALI LETTER DDA" #x09A1)
30 ("BENGALI LETTER DDHA" #x09A2)
31 ("BENGALI LETTER NNA" #x09A3)
32 ("BENGALI LETTER TA" #x09A4)
33 ("BENGALI LETTER THA" #x09A5)
34 ("BENGALI LETTER DA" #x09A6)
35 ("BENGALI LETTER DHA" #x09A7)
36 ("BENGALI LETTER NA" #x09A8)
37 ("BENGALI LETTER PA" #x09AA)
38 ("BENGALI LETTER PHA" #x09AB)
39 ("BENGALI LETTER BA" #x09AC)
40 ("BENGALI LETTER BHA" #x09AD)
41 ("BENGALI LETTER MA" #x09AE)
42 ("BENGALI LETTER YA" #x09AF)
43 ("BENGALI LETTER RA" #x09B0)
44 ("BENGALI LETTER LA" #x09B2)
45 ("BENGALI LETTER SHA" #x09B6)
46 ("BENGALI LETTER SSA" #x09B7)
47 ("BENGALI LETTER SA" #x09B8)
48 ("BENGALI LETTER HA" #x09B9)
49 ("BENGALI SIGN NUKTA" #x09BC)
50 ("BENGALI VOWEL SIGN AA" #x09BE)
51 ("BENGALI VOWEL SIGN I" #x09BF)
52 ("BENGALI VOWEL SIGN II" #x09C0)
53 ("BENGALI VOWEL SIGN U" #x09C1)
54 ("BENGALI VOWEL SIGN UU" #x09C2)
55 ("BENGALI VOWEL SIGN VOCALIC R" #x09C3)
56 ("BENGALI VOWEL SIGN VOCALIC RR" #x09C4)
57 ("BENGALI VOWEL SIGN E" #x09C7)
58 ("BENGALI VOWEL SIGN AI" #x09C8)
59 ("BENGALI VOWEL SIGN O" #x09CB)
60 ("BENGALI VOWEL SIGN AU" #x09CC)
61 ("BENGALI SIGN VIRAMA" #x09CD)
62 ("BENGALI AU LENGTH MARK" #x09D7)
63 ("BENGALI LETTER RRA" #x09DC)
64 ("BENGALI LETTER RHA" #x09DD)
65 ("BENGALI LETTER YYA" #x09DF)
66 ("BENGALI LETTER VOCALIC RR" #x09E0)
67 ("BENGALI LETTER VOCALIC LL" #x09E1)
68 ("BENGALI VOWEL SIGN VOCALIC L" #x09E2)
69 ("BENGALI VOWEL SIGN VOCALIC LL" #x09E3)
70 ("BENGALI DIGIT ZERO" #x09E6)
71 ("BENGALI DIGIT ONE" #x09E7)
72 ("BENGALI DIGIT TWO" #x09E8)
73 ("BENGALI DIGIT THREE" #x09E9)
74 ("BENGALI DIGIT FOUR" #x09EA)
75 ("BENGALI DIGIT FIVE" #x09EB)
76 ("BENGALI DIGIT SIX" #x09EC)
77 ("BENGALI DIGIT SEVEN" #x09ED)
78 ("BENGALI DIGIT EIGHT" #x09EE)
79 ("BENGALI DIGIT NINE" #x09EF)
80 ("BENGALI LETTER RA WITH MIDDLE DIAGONAL" #x09F0)
81 ("BENGALI LETTER RA WITH LOWER DIAGONAL" #x09F1)
82 ("BENGALI RUPEE MARK" #x09F2)
83 ("BENGALI RUPEE SIGN" #x09F3)
84 ("BENGALI CURRENCY NUMERATOR ONE" #x09F4)
85 ("BENGALI CURRENCY NUMERATOR TWO" #x09F5)
86 ("BENGALI CURRENCY NUMERATOR THREE" #x09F6)
87 ("BENGALI CURRENCY NUMERATOR FOUR" #x09F7)
88 ("BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR" #x09F8)
89 ("BENGALI CURRENCY DENOMINATOR SIXTEEN" #x09F9)
90 ("BENGALI ISSHAR" #x09FA)
91 ))
diff --git a/lisp/nxml/char-name/unicode/00A00-00A7F.el b/lisp/nxml/char-name/unicode/00A00-00A7F.el
new file mode 100644
index 00000000000..5adfaed0ef1
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/00A00-00A7F.el
@@ -0,0 +1,77 @@
1(nxml-define-char-name-set 'gurmukhi
2 '(("GURMUKHI SIGN BINDI" #x0A02)
3 ("GURMUKHI LETTER A" #x0A05)
4 ("GURMUKHI LETTER AA" #x0A06)
5 ("GURMUKHI LETTER I" #x0A07)
6 ("GURMUKHI LETTER II" #x0A08)
7 ("GURMUKHI LETTER U" #x0A09)
8 ("GURMUKHI LETTER UU" #x0A0A)
9 ("GURMUKHI LETTER EE" #x0A0F)
10 ("GURMUKHI LETTER AI" #x0A10)
11 ("GURMUKHI LETTER OO" #x0A13)
12 ("GURMUKHI LETTER AU" #x0A14)
13 ("GURMUKHI LETTER KA" #x0A15)
14 ("GURMUKHI LETTER KHA" #x0A16)
15 ("GURMUKHI LETTER GA" #x0A17)
16 ("GURMUKHI LETTER GHA" #x0A18)
17 ("GURMUKHI LETTER NGA" #x0A19)
18 ("GURMUKHI LETTER CA" #x0A1A)
19 ("GURMUKHI LETTER CHA" #x0A1B)
20 ("GURMUKHI LETTER JA" #x0A1C)
21 ("GURMUKHI LETTER JHA" #x0A1D)
22 ("GURMUKHI LETTER NYA" #x0A1E)
23 ("GURMUKHI LETTER TTA" #x0A1F)
24 ("GURMUKHI LETTER TTHA" #x0A20)
25 ("GURMUKHI LETTER DDA" #x0A21)
26 ("GURMUKHI LETTER DDHA" #x0A22)
27 ("GURMUKHI LETTER NNA" #x0A23)
28 ("GURMUKHI LETTER TA" #x0A24)
29 ("GURMUKHI LETTER THA" #x0A25)
30 ("GURMUKHI LETTER DA" #x0A26)
31 ("GURMUKHI LETTER DHA" #x0A27)
32 ("GURMUKHI LETTER NA" #x0A28)
33 ("GURMUKHI LETTER PA" #x0A2A)
34 ("GURMUKHI LETTER PHA" #x0A2B)
35 ("GURMUKHI LETTER BA" #x0A2C)
36 ("GURMUKHI LETTER BHA" #x0A2D)
37 ("GURMUKHI LETTER MA" #x0A2E)
38 ("GURMUKHI LETTER YA" #x0A2F)
39 ("GURMUKHI LETTER RA" #x0A30)
40 ("GURMUKHI LETTER LA" #x0A32)
41 ("GURMUKHI LETTER LLA" #x0A33)
42 ("GURMUKHI LETTER VA" #x0A35)
43 ("GURMUKHI LETTER SHA" #x0A36)
44 ("GURMUKHI LETTER SA" #x0A38)
45 ("GURMUKHI LETTER HA" #x0A39)
46 ("GURMUKHI SIGN NUKTA" #x0A3C)
47 ("GURMUKHI VOWEL SIGN AA" #x0A3E)
48 ("GURMUKHI VOWEL SIGN I" #x0A3F)
49 ("GURMUKHI VOWEL SIGN II" #x0A40)
50 ("GURMUKHI VOWEL SIGN U" #x0A41)
51 ("GURMUKHI VOWEL SIGN UU" #x0A42)
52 ("GURMUKHI VOWEL SIGN EE" #x0A47)
53 ("GURMUKHI VOWEL SIGN AI" #x0A48)
54 ("GURMUKHI VOWEL SIGN OO" #x0A4B)
55 ("GURMUKHI VOWEL SIGN AU" #x0A4C)
56 ("GURMUKHI SIGN VIRAMA" #x0A4D)
57 ("GURMUKHI LETTER KHHA" #x0A59)
58 ("GURMUKHI LETTER GHHA" #x0A5A)
59 ("GURMUKHI LETTER ZA" #x0A5B)
60 ("GURMUKHI LETTER RRA" #x0A5C)
61 ("GURMUKHI LETTER FA" #x0A5E)
62 ("GURMUKHI DIGIT ZERO" #x0A66)
63 ("GURMUKHI DIGIT ONE" #x0A67)
64 ("GURMUKHI DIGIT TWO" #x0A68)
65 ("GURMUKHI DIGIT THREE" #x0A69)
66 ("GURMUKHI DIGIT FOUR" #x0A6A)
67 ("GURMUKHI DIGIT FIVE" #x0A6B)
68 ("GURMUKHI DIGIT SIX" #x0A6C)
69 ("GURMUKHI DIGIT SEVEN" #x0A6D)
70 ("GURMUKHI DIGIT EIGHT" #x0A6E)
71 ("GURMUKHI DIGIT NINE" #x0A6F)
72 ("GURMUKHI TIPPI" #x0A70)
73 ("GURMUKHI ADDAK" #x0A71)
74 ("GURMUKHI IRI" #x0A72)
75 ("GURMUKHI URA" #x0A73)
76 ("GURMUKHI EK ONKAR" #x0A74)
77 ))
diff --git a/lisp/nxml/char-name/unicode/00A80-00AFF.el b/lisp/nxml/char-name/unicode/00A80-00AFF.el
new file mode 100644
index 00000000000..35be7fa7a55
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/00A80-00AFF.el
@@ -0,0 +1,80 @@
1(nxml-define-char-name-set 'gujarati
2 '(("GUJARATI SIGN CANDRABINDU" #x0A81)
3 ("GUJARATI SIGN ANUSVARA" #x0A82)
4 ("GUJARATI SIGN VISARGA" #x0A83)
5 ("GUJARATI LETTER A" #x0A85)
6 ("GUJARATI LETTER AA" #x0A86)
7 ("GUJARATI LETTER I" #x0A87)
8 ("GUJARATI LETTER II" #x0A88)
9 ("GUJARATI LETTER U" #x0A89)
10 ("GUJARATI LETTER UU" #x0A8A)
11 ("GUJARATI LETTER VOCALIC R" #x0A8B)
12 ("GUJARATI VOWEL CANDRA E" #x0A8D)
13 ("GUJARATI LETTER E" #x0A8F)
14 ("GUJARATI LETTER AI" #x0A90)
15 ("GUJARATI VOWEL CANDRA O" #x0A91)
16 ("GUJARATI LETTER O" #x0A93)
17 ("GUJARATI LETTER AU" #x0A94)
18 ("GUJARATI LETTER KA" #x0A95)
19 ("GUJARATI LETTER KHA" #x0A96)
20 ("GUJARATI LETTER GA" #x0A97)
21 ("GUJARATI LETTER GHA" #x0A98)
22 ("GUJARATI LETTER NGA" #x0A99)
23 ("GUJARATI LETTER CA" #x0A9A)
24 ("GUJARATI LETTER CHA" #x0A9B)
25 ("GUJARATI LETTER JA" #x0A9C)
26 ("GUJARATI LETTER JHA" #x0A9D)
27 ("GUJARATI LETTER NYA" #x0A9E)
28 ("GUJARATI LETTER TTA" #x0A9F)
29 ("GUJARATI LETTER TTHA" #x0AA0)
30 ("GUJARATI LETTER DDA" #x0AA1)
31 ("GUJARATI LETTER DDHA" #x0AA2)
32 ("GUJARATI LETTER NNA" #x0AA3)
33 ("GUJARATI LETTER TA" #x0AA4)
34 ("GUJARATI LETTER THA" #x0AA5)
35 ("GUJARATI LETTER DA" #x0AA6)
36 ("GUJARATI LETTER DHA" #x0AA7)
37 ("GUJARATI LETTER NA" #x0AA8)
38 ("GUJARATI LETTER PA" #x0AAA)
39 ("GUJARATI LETTER PHA" #x0AAB)
40 ("GUJARATI LETTER BA" #x0AAC)
41 ("GUJARATI LETTER BHA" #x0AAD)
42 ("GUJARATI LETTER MA" #x0AAE)
43 ("GUJARATI LETTER YA" #x0AAF)
44 ("GUJARATI LETTER RA" #x0AB0)
45 ("GUJARATI LETTER LA" #x0AB2)
46 ("GUJARATI LETTER LLA" #x0AB3)
47 ("GUJARATI LETTER VA" #x0AB5)
48 ("GUJARATI LETTER SHA" #x0AB6)
49 ("GUJARATI LETTER SSA" #x0AB7)
50 ("GUJARATI LETTER SA" #x0AB8)
51 ("GUJARATI LETTER HA" #x0AB9)
52 ("GUJARATI SIGN NUKTA" #x0ABC)
53 ("GUJARATI SIGN AVAGRAHA" #x0ABD)
54 ("GUJARATI VOWEL SIGN AA" #x0ABE)
55 ("GUJARATI VOWEL SIGN I" #x0ABF)
56 ("GUJARATI VOWEL SIGN II" #x0AC0)
57 ("GUJARATI VOWEL SIGN U" #x0AC1)
58 ("GUJARATI VOWEL SIGN UU" #x0AC2)
59 ("GUJARATI VOWEL SIGN VOCALIC R" #x0AC3)
60 ("GUJARATI VOWEL SIGN VOCALIC RR" #x0AC4)
61 ("GUJARATI VOWEL SIGN CANDRA E" #x0AC5)
62 ("GUJARATI VOWEL SIGN E" #x0AC7)
63 ("GUJARATI VOWEL SIGN AI" #x0AC8)
64 ("GUJARATI VOWEL SIGN CANDRA O" #x0AC9)
65 ("GUJARATI VOWEL SIGN O" #x0ACB)
66 ("GUJARATI VOWEL SIGN AU" #x0ACC)
67 ("GUJARATI SIGN VIRAMA" #x0ACD)
68 ("GUJARATI OM" #x0AD0)
69 ("GUJARATI LETTER VOCALIC RR" #x0AE0)
70 ("GUJARATI DIGIT ZERO" #x0AE6)
71 ("GUJARATI DIGIT ONE" #x0AE7)
72 ("GUJARATI DIGIT TWO" #x0AE8)
73 ("GUJARATI DIGIT THREE" #x0AE9)
74 ("GUJARATI DIGIT FOUR" #x0AEA)
75 ("GUJARATI DIGIT FIVE" #x0AEB)
76 ("GUJARATI DIGIT SIX" #x0AEC)
77 ("GUJARATI DIGIT SEVEN" #x0AED)
78 ("GUJARATI DIGIT EIGHT" #x0AEE)
79 ("GUJARATI DIGIT NINE" #x0AEF)
80 ))
diff --git a/lisp/nxml/char-name/unicode/00B00-00B7F.el b/lisp/nxml/char-name/unicode/00B00-00B7F.el
new file mode 100644
index 00000000000..e0d08648c99
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/00B00-00B7F.el
@@ -0,0 +1,81 @@
1(nxml-define-char-name-set 'oriya
2 '(("ORIYA SIGN CANDRABINDU" #x0B01)
3 ("ORIYA SIGN ANUSVARA" #x0B02)
4 ("ORIYA SIGN VISARGA" #x0B03)
5 ("ORIYA LETTER A" #x0B05)
6 ("ORIYA LETTER AA" #x0B06)
7 ("ORIYA LETTER I" #x0B07)
8 ("ORIYA LETTER II" #x0B08)
9 ("ORIYA LETTER U" #x0B09)
10 ("ORIYA LETTER UU" #x0B0A)
11 ("ORIYA LETTER VOCALIC R" #x0B0B)
12 ("ORIYA LETTER VOCALIC L" #x0B0C)
13 ("ORIYA LETTER E" #x0B0F)
14 ("ORIYA LETTER AI" #x0B10)
15 ("ORIYA LETTER O" #x0B13)
16 ("ORIYA LETTER AU" #x0B14)
17 ("ORIYA LETTER KA" #x0B15)
18 ("ORIYA LETTER KHA" #x0B16)
19 ("ORIYA LETTER GA" #x0B17)
20 ("ORIYA LETTER GHA" #x0B18)
21 ("ORIYA LETTER NGA" #x0B19)
22 ("ORIYA LETTER CA" #x0B1A)
23 ("ORIYA LETTER CHA" #x0B1B)
24 ("ORIYA LETTER JA" #x0B1C)
25 ("ORIYA LETTER JHA" #x0B1D)
26 ("ORIYA LETTER NYA" #x0B1E)
27 ("ORIYA LETTER TTA" #x0B1F)
28 ("ORIYA LETTER TTHA" #x0B20)
29 ("ORIYA LETTER DDA" #x0B21)
30 ("ORIYA LETTER DDHA" #x0B22)
31 ("ORIYA LETTER NNA" #x0B23)
32 ("ORIYA LETTER TA" #x0B24)
33 ("ORIYA LETTER THA" #x0B25)
34 ("ORIYA LETTER DA" #x0B26)
35 ("ORIYA LETTER DHA" #x0B27)
36 ("ORIYA LETTER NA" #x0B28)
37 ("ORIYA LETTER PA" #x0B2A)
38 ("ORIYA LETTER PHA" #x0B2B)
39 ("ORIYA LETTER BA" #x0B2C)
40 ("ORIYA LETTER BHA" #x0B2D)
41 ("ORIYA LETTER MA" #x0B2E)
42 ("ORIYA LETTER YA" #x0B2F)
43 ("ORIYA LETTER RA" #x0B30)
44 ("ORIYA LETTER LA" #x0B32)
45 ("ORIYA LETTER LLA" #x0B33)
46 ("ORIYA LETTER SHA" #x0B36)
47 ("ORIYA LETTER SSA" #x0B37)
48 ("ORIYA LETTER SA" #x0B38)
49 ("ORIYA LETTER HA" #x0B39)
50 ("ORIYA SIGN NUKTA" #x0B3C)
51 ("ORIYA SIGN AVAGRAHA" #x0B3D)
52 ("ORIYA VOWEL SIGN AA" #x0B3E)
53 ("ORIYA VOWEL SIGN I" #x0B3F)
54 ("ORIYA VOWEL SIGN II" #x0B40)
55 ("ORIYA VOWEL SIGN U" #x0B41)
56 ("ORIYA VOWEL SIGN UU" #x0B42)
57 ("ORIYA VOWEL SIGN VOCALIC R" #x0B43)
58 ("ORIYA VOWEL SIGN E" #x0B47)
59 ("ORIYA VOWEL SIGN AI" #x0B48)
60 ("ORIYA VOWEL SIGN O" #x0B4B)
61 ("ORIYA VOWEL SIGN AU" #x0B4C)
62 ("ORIYA SIGN VIRAMA" #x0B4D)
63 ("ORIYA AI LENGTH MARK" #x0B56)
64 ("ORIYA AU LENGTH MARK" #x0B57)
65 ("ORIYA LETTER RRA" #x0B5C)
66 ("ORIYA LETTER RHA" #x0B5D)
67 ("ORIYA LETTER YYA" #x0B5F)
68 ("ORIYA LETTER VOCALIC RR" #x0B60)
69 ("ORIYA LETTER VOCALIC LL" #x0B61)
70 ("ORIYA DIGIT ZERO" #x0B66)
71 ("ORIYA DIGIT ONE" #x0B67)
72 ("ORIYA DIGIT TWO" #x0B68)
73 ("ORIYA DIGIT THREE" #x0B69)
74 ("ORIYA DIGIT FOUR" #x0B6A)
75 ("ORIYA DIGIT FIVE" #x0B6B)
76 ("ORIYA DIGIT SIX" #x0B6C)
77 ("ORIYA DIGIT SEVEN" #x0B6D)
78 ("ORIYA DIGIT EIGHT" #x0B6E)
79 ("ORIYA DIGIT NINE" #x0B6F)
80 ("ORIYA ISSHAR" #x0B70)
81 ))
diff --git a/lisp/nxml/char-name/unicode/00B80-00BFF.el b/lisp/nxml/char-name/unicode/00B80-00BFF.el
new file mode 100644
index 00000000000..8e23e1341c7
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/00B80-00BFF.el
@@ -0,0 +1,63 @@
1(nxml-define-char-name-set 'tamil
2 '(("TAMIL SIGN ANUSVARA" #x0B82)
3 ("TAMIL SIGN VISARGA" #x0B83)
4 ("TAMIL LETTER A" #x0B85)
5 ("TAMIL LETTER AA" #x0B86)
6 ("TAMIL LETTER I" #x0B87)
7 ("TAMIL LETTER II" #x0B88)
8 ("TAMIL LETTER U" #x0B89)
9 ("TAMIL LETTER UU" #x0B8A)
10 ("TAMIL LETTER E" #x0B8E)
11 ("TAMIL LETTER EE" #x0B8F)
12 ("TAMIL LETTER AI" #x0B90)
13 ("TAMIL LETTER O" #x0B92)
14 ("TAMIL LETTER OO" #x0B93)
15 ("TAMIL LETTER AU" #x0B94)
16 ("TAMIL LETTER KA" #x0B95)
17 ("TAMIL LETTER NGA" #x0B99)
18 ("TAMIL LETTER CA" #x0B9A)
19 ("TAMIL LETTER JA" #x0B9C)
20 ("TAMIL LETTER NYA" #x0B9E)
21 ("TAMIL LETTER TTA" #x0B9F)
22 ("TAMIL LETTER NNA" #x0BA3)
23 ("TAMIL LETTER TA" #x0BA4)
24 ("TAMIL LETTER NA" #x0BA8)
25 ("TAMIL LETTER NNNA" #x0BA9)
26 ("TAMIL LETTER PA" #x0BAA)
27 ("TAMIL LETTER MA" #x0BAE)
28 ("TAMIL LETTER YA" #x0BAF)
29 ("TAMIL LETTER RA" #x0BB0)
30 ("TAMIL LETTER RRA" #x0BB1)
31 ("TAMIL LETTER LA" #x0BB2)
32 ("TAMIL LETTER LLA" #x0BB3)
33 ("TAMIL LETTER LLLA" #x0BB4)
34 ("TAMIL LETTER VA" #x0BB5)
35 ("TAMIL LETTER SSA" #x0BB7)
36 ("TAMIL LETTER SA" #x0BB8)
37 ("TAMIL LETTER HA" #x0BB9)
38 ("TAMIL VOWEL SIGN AA" #x0BBE)
39 ("TAMIL VOWEL SIGN I" #x0BBF)
40 ("TAMIL VOWEL SIGN II" #x0BC0)
41 ("TAMIL VOWEL SIGN U" #x0BC1)
42 ("TAMIL VOWEL SIGN UU" #x0BC2)
43 ("TAMIL VOWEL SIGN E" #x0BC6)
44 ("TAMIL VOWEL SIGN EE" #x0BC7)
45 ("TAMIL VOWEL SIGN AI" #x0BC8)
46 ("TAMIL VOWEL SIGN O" #x0BCA)
47 ("TAMIL VOWEL SIGN OO" #x0BCB)
48 ("TAMIL VOWEL SIGN AU" #x0BCC)
49 ("TAMIL SIGN VIRAMA" #x0BCD)
50 ("TAMIL AU LENGTH MARK" #x0BD7)
51 ("TAMIL DIGIT ONE" #x0BE7)
52 ("TAMIL DIGIT TWO" #x0BE8)
53 ("TAMIL DIGIT THREE" #x0BE9)
54 ("TAMIL DIGIT FOUR" #x0BEA)
55 ("TAMIL DIGIT FIVE" #x0BEB)
56 ("TAMIL DIGIT SIX" #x0BEC)
57 ("TAMIL DIGIT SEVEN" #x0BED)
58 ("TAMIL DIGIT EIGHT" #x0BEE)
59 ("TAMIL DIGIT NINE" #x0BEF)
60 ("TAMIL NUMBER TEN" #x0BF0)
61 ("TAMIL NUMBER ONE HUNDRED" #x0BF1)
62 ("TAMIL NUMBER ONE THOUSAND" #x0BF2)
63 ))
diff --git a/lisp/nxml/char-name/unicode/00C00-00C7F.el b/lisp/nxml/char-name/unicode/00C00-00C7F.el
new file mode 100644
index 00000000000..ef70b35ee10
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/00C00-00C7F.el
@@ -0,0 +1,82 @@
1(nxml-define-char-name-set 'telugu
2 '(("TELUGU SIGN CANDRABINDU" #x0C01)
3 ("TELUGU SIGN ANUSVARA" #x0C02)
4 ("TELUGU SIGN VISARGA" #x0C03)
5 ("TELUGU LETTER A" #x0C05)
6 ("TELUGU LETTER AA" #x0C06)
7 ("TELUGU LETTER I" #x0C07)
8 ("TELUGU LETTER II" #x0C08)
9 ("TELUGU LETTER U" #x0C09)
10 ("TELUGU LETTER UU" #x0C0A)
11 ("TELUGU LETTER VOCALIC R" #x0C0B)
12 ("TELUGU LETTER VOCALIC L" #x0C0C)
13 ("TELUGU LETTER E" #x0C0E)
14 ("TELUGU LETTER EE" #x0C0F)
15 ("TELUGU LETTER AI" #x0C10)
16 ("TELUGU LETTER O" #x0C12)
17 ("TELUGU LETTER OO" #x0C13)
18 ("TELUGU LETTER AU" #x0C14)
19 ("TELUGU LETTER KA" #x0C15)
20 ("TELUGU LETTER KHA" #x0C16)
21 ("TELUGU LETTER GA" #x0C17)
22 ("TELUGU LETTER GHA" #x0C18)
23 ("TELUGU LETTER NGA" #x0C19)
24 ("TELUGU LETTER CA" #x0C1A)
25 ("TELUGU LETTER CHA" #x0C1B)
26 ("TELUGU LETTER JA" #x0C1C)
27 ("TELUGU LETTER JHA" #x0C1D)
28 ("TELUGU LETTER NYA" #x0C1E)
29 ("TELUGU LETTER TTA" #x0C1F)
30 ("TELUGU LETTER TTHA" #x0C20)
31 ("TELUGU LETTER DDA" #x0C21)
32 ("TELUGU LETTER DDHA" #x0C22)
33 ("TELUGU LETTER NNA" #x0C23)
34 ("TELUGU LETTER TA" #x0C24)
35 ("TELUGU LETTER THA" #x0C25)
36 ("TELUGU LETTER DA" #x0C26)
37 ("TELUGU LETTER DHA" #x0C27)
38 ("TELUGU LETTER NA" #x0C28)
39 ("TELUGU LETTER PA" #x0C2A)
40 ("TELUGU LETTER PHA" #x0C2B)
41 ("TELUGU LETTER BA" #x0C2C)
42 ("TELUGU LETTER BHA" #x0C2D)
43 ("TELUGU LETTER MA" #x0C2E)
44 ("TELUGU LETTER YA" #x0C2F)
45 ("TELUGU LETTER RA" #x0C30)
46 ("TELUGU LETTER RRA" #x0C31)
47 ("TELUGU LETTER LA" #x0C32)
48 ("TELUGU LETTER LLA" #x0C33)
49 ("TELUGU LETTER VA" #x0C35)
50 ("TELUGU LETTER SHA" #x0C36)
51 ("TELUGU LETTER SSA" #x0C37)
52 ("TELUGU LETTER SA" #x0C38)
53 ("TELUGU LETTER HA" #x0C39)
54 ("TELUGU VOWEL SIGN AA" #x0C3E)
55 ("TELUGU VOWEL SIGN I" #x0C3F)
56 ("TELUGU VOWEL SIGN II" #x0C40)
57 ("TELUGU VOWEL SIGN U" #x0C41)
58 ("TELUGU VOWEL SIGN UU" #x0C42)
59 ("TELUGU VOWEL SIGN VOCALIC R" #x0C43)
60 ("TELUGU VOWEL SIGN VOCALIC RR" #x0C44)
61 ("TELUGU VOWEL SIGN E" #x0C46)
62 ("TELUGU VOWEL SIGN EE" #x0C47)
63 ("TELUGU VOWEL SIGN AI" #x0C48)
64 ("TELUGU VOWEL SIGN O" #x0C4A)
65 ("TELUGU VOWEL SIGN OO" #x0C4B)
66 ("TELUGU VOWEL SIGN AU" #x0C4C)
67 ("TELUGU SIGN VIRAMA" #x0C4D)
68 ("TELUGU LENGTH MARK" #x0C55)
69 ("TELUGU AI LENGTH MARK" #x0C56)
70 ("TELUGU LETTER VOCALIC RR" #x0C60)
71 ("TELUGU LETTER VOCALIC LL" #x0C61)
72 ("TELUGU DIGIT ZERO" #x0C66)
73 ("TELUGU DIGIT ONE" #x0C67)
74 ("TELUGU DIGIT TWO" #x0C68)
75 ("TELUGU DIGIT THREE" #x0C69)
76 ("TELUGU DIGIT FOUR" #x0C6A)
77 ("TELUGU DIGIT FIVE" #x0C6B)
78 ("TELUGU DIGIT SIX" #x0C6C)
79 ("TELUGU DIGIT SEVEN" #x0C6D)
80 ("TELUGU DIGIT EIGHT" #x0C6E)
81 ("TELUGU DIGIT NINE" #x0C6F)
82 ))
diff --git a/lisp/nxml/char-name/unicode/00C80-00CFF.el b/lisp/nxml/char-name/unicode/00C80-00CFF.el
new file mode 100644
index 00000000000..b94e1944563
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/00C80-00CFF.el
@@ -0,0 +1,82 @@
1(nxml-define-char-name-set 'kannada
2 '(("KANNADA SIGN ANUSVARA" #x0C82)
3 ("KANNADA SIGN VISARGA" #x0C83)
4 ("KANNADA LETTER A" #x0C85)
5 ("KANNADA LETTER AA" #x0C86)
6 ("KANNADA LETTER I" #x0C87)
7 ("KANNADA LETTER II" #x0C88)
8 ("KANNADA LETTER U" #x0C89)
9 ("KANNADA LETTER UU" #x0C8A)
10 ("KANNADA LETTER VOCALIC R" #x0C8B)
11 ("KANNADA LETTER VOCALIC L" #x0C8C)
12 ("KANNADA LETTER E" #x0C8E)
13 ("KANNADA LETTER EE" #x0C8F)
14 ("KANNADA LETTER AI" #x0C90)
15 ("KANNADA LETTER O" #x0C92)
16 ("KANNADA LETTER OO" #x0C93)
17 ("KANNADA LETTER AU" #x0C94)
18 ("KANNADA LETTER KA" #x0C95)
19 ("KANNADA LETTER KHA" #x0C96)
20 ("KANNADA LETTER GA" #x0C97)
21 ("KANNADA LETTER GHA" #x0C98)
22 ("KANNADA LETTER NGA" #x0C99)
23 ("KANNADA LETTER CA" #x0C9A)
24 ("KANNADA LETTER CHA" #x0C9B)
25 ("KANNADA LETTER JA" #x0C9C)
26 ("KANNADA LETTER JHA" #x0C9D)
27 ("KANNADA LETTER NYA" #x0C9E)
28 ("KANNADA LETTER TTA" #x0C9F)
29 ("KANNADA LETTER TTHA" #x0CA0)
30 ("KANNADA LETTER DDA" #x0CA1)
31 ("KANNADA LETTER DDHA" #x0CA2)
32 ("KANNADA LETTER NNA" #x0CA3)
33 ("KANNADA LETTER TA" #x0CA4)
34 ("KANNADA LETTER THA" #x0CA5)
35 ("KANNADA LETTER DA" #x0CA6)
36 ("KANNADA LETTER DHA" #x0CA7)
37 ("KANNADA LETTER NA" #x0CA8)
38 ("KANNADA LETTER PA" #x0CAA)
39 ("KANNADA LETTER PHA" #x0CAB)
40 ("KANNADA LETTER BA" #x0CAC)
41 ("KANNADA LETTER BHA" #x0CAD)
42 ("KANNADA LETTER MA" #x0CAE)
43 ("KANNADA LETTER YA" #x0CAF)
44 ("KANNADA LETTER RA" #x0CB0)
45 ("KANNADA LETTER RRA" #x0CB1)
46 ("KANNADA LETTER LA" #x0CB2)
47 ("KANNADA LETTER LLA" #x0CB3)
48 ("KANNADA LETTER VA" #x0CB5)
49 ("KANNADA LETTER SHA" #x0CB6)
50 ("KANNADA LETTER SSA" #x0CB7)
51 ("KANNADA LETTER SA" #x0CB8)
52 ("KANNADA LETTER HA" #x0CB9)
53 ("KANNADA VOWEL SIGN AA" #x0CBE)
54 ("KANNADA VOWEL SIGN I" #x0CBF)
55 ("KANNADA VOWEL SIGN II" #x0CC0)
56 ("KANNADA VOWEL SIGN U" #x0CC1)
57 ("KANNADA VOWEL SIGN UU" #x0CC2)
58 ("KANNADA VOWEL SIGN VOCALIC R" #x0CC3)
59 ("KANNADA VOWEL SIGN VOCALIC RR" #x0CC4)
60 ("KANNADA VOWEL SIGN E" #x0CC6)
61 ("KANNADA VOWEL SIGN EE" #x0CC7)
62 ("KANNADA VOWEL SIGN AI" #x0CC8)
63 ("KANNADA VOWEL SIGN O" #x0CCA)
64 ("KANNADA VOWEL SIGN OO" #x0CCB)
65 ("KANNADA VOWEL SIGN AU" #x0CCC)
66 ("KANNADA SIGN VIRAMA" #x0CCD)
67 ("KANNADA LENGTH MARK" #x0CD5)
68 ("KANNADA AI LENGTH MARK" #x0CD6)
69 ("KANNADA LETTER FA" #x0CDE)
70 ("KANNADA LETTER VOCALIC RR" #x0CE0)
71 ("KANNADA LETTER VOCALIC LL" #x0CE1)
72 ("KANNADA DIGIT ZERO" #x0CE6)
73 ("KANNADA DIGIT ONE" #x0CE7)
74 ("KANNADA DIGIT TWO" #x0CE8)
75 ("KANNADA DIGIT THREE" #x0CE9)
76 ("KANNADA DIGIT FOUR" #x0CEA)
77 ("KANNADA DIGIT FIVE" #x0CEB)
78 ("KANNADA DIGIT SIX" #x0CEC)
79 ("KANNADA DIGIT SEVEN" #x0CED)
80 ("KANNADA DIGIT EIGHT" #x0CEE)
81 ("KANNADA DIGIT NINE" #x0CEF)
82 ))
diff --git a/lisp/nxml/char-name/unicode/00D00-00D7F.el b/lisp/nxml/char-name/unicode/00D00-00D7F.el
new file mode 100644
index 00000000000..e9ea7e2aeaa
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/00D00-00D7F.el
@@ -0,0 +1,80 @@
1(nxml-define-char-name-set 'malayalam
2 '(("MALAYALAM SIGN ANUSVARA" #x0D02)
3 ("MALAYALAM SIGN VISARGA" #x0D03)
4 ("MALAYALAM LETTER A" #x0D05)
5 ("MALAYALAM LETTER AA" #x0D06)
6 ("MALAYALAM LETTER I" #x0D07)
7 ("MALAYALAM LETTER II" #x0D08)
8 ("MALAYALAM LETTER U" #x0D09)
9 ("MALAYALAM LETTER UU" #x0D0A)
10 ("MALAYALAM LETTER VOCALIC R" #x0D0B)
11 ("MALAYALAM LETTER VOCALIC L" #x0D0C)
12 ("MALAYALAM LETTER E" #x0D0E)
13 ("MALAYALAM LETTER EE" #x0D0F)
14 ("MALAYALAM LETTER AI" #x0D10)
15 ("MALAYALAM LETTER O" #x0D12)
16 ("MALAYALAM LETTER OO" #x0D13)
17 ("MALAYALAM LETTER AU" #x0D14)
18 ("MALAYALAM LETTER KA" #x0D15)
19 ("MALAYALAM LETTER KHA" #x0D16)
20 ("MALAYALAM LETTER GA" #x0D17)
21 ("MALAYALAM LETTER GHA" #x0D18)
22 ("MALAYALAM LETTER NGA" #x0D19)
23 ("MALAYALAM LETTER CA" #x0D1A)
24 ("MALAYALAM LETTER CHA" #x0D1B)
25 ("MALAYALAM LETTER JA" #x0D1C)
26 ("MALAYALAM LETTER JHA" #x0D1D)
27 ("MALAYALAM LETTER NYA" #x0D1E)
28 ("MALAYALAM LETTER TTA" #x0D1F)
29 ("MALAYALAM LETTER TTHA" #x0D20)
30 ("MALAYALAM LETTER DDA" #x0D21)
31 ("MALAYALAM LETTER DDHA" #x0D22)
32 ("MALAYALAM LETTER NNA" #x0D23)
33 ("MALAYALAM LETTER TA" #x0D24)
34 ("MALAYALAM LETTER THA" #x0D25)
35 ("MALAYALAM LETTER DA" #x0D26)
36 ("MALAYALAM LETTER DHA" #x0D27)
37 ("MALAYALAM LETTER NA" #x0D28)
38 ("MALAYALAM LETTER PA" #x0D2A)
39 ("MALAYALAM LETTER PHA" #x0D2B)
40 ("MALAYALAM LETTER BA" #x0D2C)
41 ("MALAYALAM LETTER BHA" #x0D2D)
42 ("MALAYALAM LETTER MA" #x0D2E)
43 ("MALAYALAM LETTER YA" #x0D2F)
44 ("MALAYALAM LETTER RA" #x0D30)
45 ("MALAYALAM LETTER RRA" #x0D31)
46 ("MALAYALAM LETTER LA" #x0D32)
47 ("MALAYALAM LETTER LLA" #x0D33)
48 ("MALAYALAM LETTER LLLA" #x0D34)
49 ("MALAYALAM LETTER VA" #x0D35)
50 ("MALAYALAM LETTER SHA" #x0D36)
51 ("MALAYALAM LETTER SSA" #x0D37)
52 ("MALAYALAM LETTER SA" #x0D38)
53 ("MALAYALAM LETTER HA" #x0D39)
54 ("MALAYALAM VOWEL SIGN AA" #x0D3E)
55 ("MALAYALAM VOWEL SIGN I" #x0D3F)
56 ("MALAYALAM VOWEL SIGN II" #x0D40)
57 ("MALAYALAM VOWEL SIGN U" #x0D41)
58 ("MALAYALAM VOWEL SIGN UU" #x0D42)
59 ("MALAYALAM VOWEL SIGN VOCALIC R" #x0D43)
60 ("MALAYALAM VOWEL SIGN E" #x0D46)
61 ("MALAYALAM VOWEL SIGN EE" #x0D47)
62 ("MALAYALAM VOWEL SIGN AI" #x0D48)
63 ("MALAYALAM VOWEL SIGN O" #x0D4A)
64 ("MALAYALAM VOWEL SIGN OO" #x0D4B)
65 ("MALAYALAM VOWEL SIGN AU" #x0D4C)
66 ("MALAYALAM SIGN VIRAMA" #x0D4D)
67 ("MALAYALAM AU LENGTH MARK" #x0D57)
68 ("MALAYALAM LETTER VOCALIC RR" #x0D60)
69 ("MALAYALAM LETTER VOCALIC LL" #x0D61)
70 ("MALAYALAM DIGIT ZERO" #x0D66)
71 ("MALAYALAM DIGIT ONE" #x0D67)
72 ("MALAYALAM DIGIT TWO" #x0D68)
73 ("MALAYALAM DIGIT THREE" #x0D69)
74 ("MALAYALAM DIGIT FOUR" #x0D6A)
75 ("MALAYALAM DIGIT FIVE" #x0D6B)
76 ("MALAYALAM DIGIT SIX" #x0D6C)
77 ("MALAYALAM DIGIT SEVEN" #x0D6D)
78 ("MALAYALAM DIGIT EIGHT" #x0D6E)
79 ("MALAYALAM DIGIT NINE" #x0D6F)
80 ))
diff --git a/lisp/nxml/char-name/unicode/00D80-00DFF.el b/lisp/nxml/char-name/unicode/00D80-00DFF.el
new file mode 100644
index 00000000000..d0278dd0884
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/00D80-00DFF.el
@@ -0,0 +1,82 @@
1(nxml-define-char-name-set 'sinhala
2 '(("SINHALA SIGN ANUSVARAYA" #x0D82)
3 ("SINHALA SIGN VISARGAYA" #x0D83)
4 ("SINHALA LETTER AYANNA" #x0D85)
5 ("SINHALA LETTER AAYANNA" #x0D86)
6 ("SINHALA LETTER AEYANNA" #x0D87)
7 ("SINHALA LETTER AEEYANNA" #x0D88)
8 ("SINHALA LETTER IYANNA" #x0D89)
9 ("SINHALA LETTER IIYANNA" #x0D8A)
10 ("SINHALA LETTER UYANNA" #x0D8B)
11 ("SINHALA LETTER UUYANNA" #x0D8C)
12 ("SINHALA LETTER IRUYANNA" #x0D8D)
13 ("SINHALA LETTER IRUUYANNA" #x0D8E)
14 ("SINHALA LETTER ILUYANNA" #x0D8F)
15 ("SINHALA LETTER ILUUYANNA" #x0D90)
16 ("SINHALA LETTER EYANNA" #x0D91)
17 ("SINHALA LETTER EEYANNA" #x0D92)
18 ("SINHALA LETTER AIYANNA" #x0D93)
19 ("SINHALA LETTER OYANNA" #x0D94)
20 ("SINHALA LETTER OOYANNA" #x0D95)
21 ("SINHALA LETTER AUYANNA" #x0D96)
22 ("SINHALA LETTER ALPAPRAANA KAYANNA" #x0D9A)
23 ("SINHALA LETTER MAHAAPRAANA KAYANNA" #x0D9B)
24 ("SINHALA LETTER ALPAPRAANA GAYANNA" #x0D9C)
25 ("SINHALA LETTER MAHAAPRAANA GAYANNA" #x0D9D)
26 ("SINHALA LETTER KANTAJA NAASIKYAYA" #x0D9E)
27 ("SINHALA LETTER SANYAKA GAYANNA" #x0D9F)
28 ("SINHALA LETTER ALPAPRAANA CAYANNA" #x0DA0)
29 ("SINHALA LETTER MAHAAPRAANA CAYANNA" #x0DA1)
30 ("SINHALA LETTER ALPAPRAANA JAYANNA" #x0DA2)
31 ("SINHALA LETTER MAHAAPRAANA JAYANNA" #x0DA3)
32 ("SINHALA LETTER TAALUJA NAASIKYAYA" #x0DA4)
33 ("SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA" #x0DA5)
34 ("SINHALA LETTER SANYAKA JAYANNA" #x0DA6)
35 ("SINHALA LETTER ALPAPRAANA TTAYANNA" #x0DA7)
36 ("SINHALA LETTER MAHAAPRAANA TTAYANNA" #x0DA8)
37 ("SINHALA LETTER ALPAPRAANA DDAYANNA" #x0DA9)
38 ("SINHALA LETTER MAHAAPRAANA DDAYANNA" #x0DAA)
39 ("SINHALA LETTER MUURDHAJA NAYANNA" #x0DAB)
40 ("SINHALA LETTER SANYAKA DDAYANNA" #x0DAC)
41 ("SINHALA LETTER ALPAPRAANA TAYANNA" #x0DAD)
42 ("SINHALA LETTER MAHAAPRAANA TAYANNA" #x0DAE)
43 ("SINHALA LETTER ALPAPRAANA DAYANNA" #x0DAF)
44 ("SINHALA LETTER MAHAAPRAANA DAYANNA" #x0DB0)
45 ("SINHALA LETTER DANTAJA NAYANNA" #x0DB1)
46 ("SINHALA LETTER SANYAKA DAYANNA" #x0DB3)
47 ("SINHALA LETTER ALPAPRAANA PAYANNA" #x0DB4)
48 ("SINHALA LETTER MAHAAPRAANA PAYANNA" #x0DB5)
49 ("SINHALA LETTER ALPAPRAANA BAYANNA" #x0DB6)
50 ("SINHALA LETTER MAHAAPRAANA BAYANNA" #x0DB7)
51 ("SINHALA LETTER MAYANNA" #x0DB8)
52 ("SINHALA LETTER AMBA BAYANNA" #x0DB9)
53 ("SINHALA LETTER YAYANNA" #x0DBA)
54 ("SINHALA LETTER RAYANNA" #x0DBB)
55 ("SINHALA LETTER DANTAJA LAYANNA" #x0DBD)
56 ("SINHALA LETTER VAYANNA" #x0DC0)
57 ("SINHALA LETTER TAALUJA SAYANNA" #x0DC1)
58 ("SINHALA LETTER MUURDHAJA SAYANNA" #x0DC2)
59 ("SINHALA LETTER DANTAJA SAYANNA" #x0DC3)
60 ("SINHALA LETTER HAYANNA" #x0DC4)
61 ("SINHALA LETTER MUURDHAJA LAYANNA" #x0DC5)
62 ("SINHALA LETTER FAYANNA" #x0DC6)
63 ("SINHALA SIGN AL-LAKUNA" #x0DCA)
64 ("SINHALA VOWEL SIGN AELA-PILLA" #x0DCF)
65 ("SINHALA VOWEL SIGN KETTI AEDA-PILLA" #x0DD0)
66 ("SINHALA VOWEL SIGN DIGA AEDA-PILLA" #x0DD1)
67 ("SINHALA VOWEL SIGN KETTI IS-PILLA" #x0DD2)
68 ("SINHALA VOWEL SIGN DIGA IS-PILLA" #x0DD3)
69 ("SINHALA VOWEL SIGN KETTI PAA-PILLA" #x0DD4)
70 ("SINHALA VOWEL SIGN DIGA PAA-PILLA" #x0DD6)
71 ("SINHALA VOWEL SIGN GAETTA-PILLA" #x0DD8)
72 ("SINHALA VOWEL SIGN KOMBUVA" #x0DD9)
73 ("SINHALA VOWEL SIGN DIGA KOMBUVA" #x0DDA)
74 ("SINHALA VOWEL SIGN KOMBU DEKA" #x0DDB)
75 ("SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA" #x0DDC)
76 ("SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA" #x0DDD)
77 ("SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA" #x0DDE)
78 ("SINHALA VOWEL SIGN GAYANUKITTA" #x0DDF)
79 ("SINHALA VOWEL SIGN DIGA GAETTA-PILLA" #x0DF2)
80 ("SINHALA VOWEL SIGN DIGA GAYANUKITTA" #x0DF3)
81 ("SINHALA PUNCTUATION KUNDDALIYA" #x0DF4)
82 ))
diff --git a/lisp/nxml/char-name/unicode/00E00-00E7F.el b/lisp/nxml/char-name/unicode/00E00-00E7F.el
new file mode 100644
index 00000000000..ef5a9bb949c
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/00E00-00E7F.el
@@ -0,0 +1,89 @@
1(nxml-define-char-name-set 'thai
2 '(("THAI CHARACTER KO KAI" #x0E01)
3 ("THAI CHARACTER KHO KHAI" #x0E02)
4 ("THAI CHARACTER KHO KHUAT" #x0E03)
5 ("THAI CHARACTER KHO KHWAI" #x0E04)
6 ("THAI CHARACTER KHO KHON" #x0E05)
7 ("THAI CHARACTER KHO RAKHANG" #x0E06)
8 ("THAI CHARACTER NGO NGU" #x0E07)
9 ("THAI CHARACTER CHO CHAN" #x0E08)
10 ("THAI CHARACTER CHO CHING" #x0E09)
11 ("THAI CHARACTER CHO CHANG" #x0E0A)
12 ("THAI CHARACTER SO SO" #x0E0B)
13 ("THAI CHARACTER CHO CHOE" #x0E0C)
14 ("THAI CHARACTER YO YING" #x0E0D)
15 ("THAI CHARACTER DO CHADA" #x0E0E)
16 ("THAI CHARACTER TO PATAK" #x0E0F)
17 ("THAI CHARACTER THO THAN" #x0E10)
18 ("THAI CHARACTER THO NANGMONTHO" #x0E11)
19 ("THAI CHARACTER THO PHUTHAO" #x0E12)
20 ("THAI CHARACTER NO NEN" #x0E13)
21 ("THAI CHARACTER DO DEK" #x0E14)
22 ("THAI CHARACTER TO TAO" #x0E15)
23 ("THAI CHARACTER THO THUNG" #x0E16)
24 ("THAI CHARACTER THO THAHAN" #x0E17)
25 ("THAI CHARACTER THO THONG" #x0E18)
26 ("THAI CHARACTER NO NU" #x0E19)
27 ("THAI CHARACTER BO BAIMAI" #x0E1A)
28 ("THAI CHARACTER PO PLA" #x0E1B)
29 ("THAI CHARACTER PHO PHUNG" #x0E1C)
30 ("THAI CHARACTER FO FA" #x0E1D)
31 ("THAI CHARACTER PHO PHAN" #x0E1E)
32 ("THAI CHARACTER FO FAN" #x0E1F)
33 ("THAI CHARACTER PHO SAMPHAO" #x0E20)
34 ("THAI CHARACTER MO MA" #x0E21)
35 ("THAI CHARACTER YO YAK" #x0E22)
36 ("THAI CHARACTER RO RUA" #x0E23)
37 ("THAI CHARACTER RU" #x0E24)
38 ("THAI CHARACTER LO LING" #x0E25)
39 ("THAI CHARACTER LU" #x0E26)
40 ("THAI CHARACTER WO WAEN" #x0E27)
41 ("THAI CHARACTER SO SALA" #x0E28)
42 ("THAI CHARACTER SO RUSI" #x0E29)
43 ("THAI CHARACTER SO SUA" #x0E2A)
44 ("THAI CHARACTER HO HIP" #x0E2B)
45 ("THAI CHARACTER LO CHULA" #x0E2C)
46 ("THAI CHARACTER O ANG" #x0E2D)
47 ("THAI CHARACTER HO NOKHUK" #x0E2E)
48 ("THAI CHARACTER PAIYANNOI" #x0E2F)
49 ("THAI CHARACTER SARA A" #x0E30)
50 ("THAI CHARACTER MAI HAN-AKAT" #x0E31)
51 ("THAI CHARACTER SARA AA" #x0E32)
52 ("THAI CHARACTER SARA AM" #x0E33)
53 ("THAI CHARACTER SARA I" #x0E34)
54 ("THAI CHARACTER SARA II" #x0E35)
55 ("THAI CHARACTER SARA UE" #x0E36)
56 ("THAI CHARACTER SARA UEE" #x0E37)
57 ("THAI CHARACTER SARA U" #x0E38)
58 ("THAI CHARACTER SARA UU" #x0E39)
59 ("THAI CHARACTER PHINTHU" #x0E3A)
60 ("THAI CURRENCY SYMBOL BAHT" #x0E3F)
61 ("THAI CHARACTER SARA E" #x0E40)
62 ("THAI CHARACTER SARA AE" #x0E41)
63 ("THAI CHARACTER SARA O" #x0E42)
64 ("THAI CHARACTER SARA AI MAIMUAN" #x0E43)
65 ("THAI CHARACTER SARA AI MAIMALAI" #x0E44)
66 ("THAI CHARACTER LAKKHANGYAO" #x0E45)
67 ("THAI CHARACTER MAIYAMOK" #x0E46)
68 ("THAI CHARACTER MAITAIKHU" #x0E47)
69 ("THAI CHARACTER MAI EK" #x0E48)
70 ("THAI CHARACTER MAI THO" #x0E49)
71 ("THAI CHARACTER MAI TRI" #x0E4A)
72 ("THAI CHARACTER MAI CHATTAWA" #x0E4B)
73 ("THAI CHARACTER THANTHAKHAT" #x0E4C)
74 ("THAI CHARACTER NIKHAHIT" #x0E4D)
75 ("THAI CHARACTER YAMAKKAN" #x0E4E)
76 ("THAI CHARACTER FONGMAN" #x0E4F)
77 ("THAI DIGIT ZERO" #x0E50)
78 ("THAI DIGIT ONE" #x0E51)
79 ("THAI DIGIT TWO" #x0E52)
80 ("THAI DIGIT THREE" #x0E53)
81 ("THAI DIGIT FOUR" #x0E54)
82 ("THAI DIGIT FIVE" #x0E55)
83 ("THAI DIGIT SIX" #x0E56)
84 ("THAI DIGIT SEVEN" #x0E57)
85 ("THAI DIGIT EIGHT" #x0E58)
86 ("THAI DIGIT NINE" #x0E59)
87 ("THAI CHARACTER ANGKHANKHU" #x0E5A)
88 ("THAI CHARACTER KHOMUT" #x0E5B)
89 ))
diff --git a/lisp/nxml/char-name/unicode/00E80-00EFF.el b/lisp/nxml/char-name/unicode/00E80-00EFF.el
new file mode 100644
index 00000000000..f9842bc8cbc
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/00E80-00EFF.el
@@ -0,0 +1,67 @@
1(nxml-define-char-name-set 'lao
2 '(("LAO LETTER KO" #x0E81)
3 ("LAO LETTER KHO SUNG" #x0E82)
4 ("LAO LETTER KHO TAM" #x0E84)
5 ("LAO LETTER NGO" #x0E87)
6 ("LAO LETTER CO" #x0E88)
7 ("LAO LETTER SO TAM" #x0E8A)
8 ("LAO LETTER NYO" #x0E8D)
9 ("LAO LETTER DO" #x0E94)
10 ("LAO LETTER TO" #x0E95)
11 ("LAO LETTER THO SUNG" #x0E96)
12 ("LAO LETTER THO TAM" #x0E97)
13 ("LAO LETTER NO" #x0E99)
14 ("LAO LETTER BO" #x0E9A)
15 ("LAO LETTER PO" #x0E9B)
16 ("LAO LETTER PHO SUNG" #x0E9C)
17 ("LAO LETTER FO TAM" #x0E9D)
18 ("LAO LETTER PHO TAM" #x0E9E)
19 ("LAO LETTER FO SUNG" #x0E9F)
20 ("LAO LETTER MO" #x0EA1)
21 ("LAO LETTER YO" #x0EA2)
22 ("LAO LETTER LO LING" #x0EA3)
23 ("LAO LETTER LO LOOT" #x0EA5)
24 ("LAO LETTER WO" #x0EA7)
25 ("LAO LETTER SO SUNG" #x0EAA)
26 ("LAO LETTER HO SUNG" #x0EAB)
27 ("LAO LETTER O" #x0EAD)
28 ("LAO LETTER HO TAM" #x0EAE)
29 ("LAO ELLIPSIS" #x0EAF)
30 ("LAO VOWEL SIGN A" #x0EB0)
31 ("LAO VOWEL SIGN MAI KAN" #x0EB1)
32 ("LAO VOWEL SIGN AA" #x0EB2)
33 ("LAO VOWEL SIGN AM" #x0EB3)
34 ("LAO VOWEL SIGN I" #x0EB4)
35 ("LAO VOWEL SIGN II" #x0EB5)
36 ("LAO VOWEL SIGN Y" #x0EB6)
37 ("LAO VOWEL SIGN YY" #x0EB7)
38 ("LAO VOWEL SIGN U" #x0EB8)
39 ("LAO VOWEL SIGN UU" #x0EB9)
40 ("LAO VOWEL SIGN MAI KON" #x0EBB)
41 ("LAO SEMIVOWEL SIGN LO" #x0EBC)
42 ("LAO SEMIVOWEL SIGN NYO" #x0EBD)
43 ("LAO VOWEL SIGN E" #x0EC0)
44 ("LAO VOWEL SIGN EI" #x0EC1)
45 ("LAO VOWEL SIGN O" #x0EC2)
46 ("LAO VOWEL SIGN AY" #x0EC3)
47 ("LAO VOWEL SIGN AI" #x0EC4)
48 ("LAO KO LA" #x0EC6)
49 ("LAO TONE MAI EK" #x0EC8)
50 ("LAO TONE MAI THO" #x0EC9)
51 ("LAO TONE MAI TI" #x0ECA)
52 ("LAO TONE MAI CATAWA" #x0ECB)
53 ("LAO CANCELLATION MARK" #x0ECC)
54 ("LAO NIGGAHITA" #x0ECD)
55 ("LAO DIGIT ZERO" #x0ED0)
56 ("LAO DIGIT ONE" #x0ED1)
57 ("LAO DIGIT TWO" #x0ED2)
58 ("LAO DIGIT THREE" #x0ED3)
59 ("LAO DIGIT FOUR" #x0ED4)
60 ("LAO DIGIT FIVE" #x0ED5)
61 ("LAO DIGIT SIX" #x0ED6)
62 ("LAO DIGIT SEVEN" #x0ED7)
63 ("LAO DIGIT EIGHT" #x0ED8)
64 ("LAO DIGIT NINE" #x0ED9)
65 ("LAO HO NO" #x0EDC)
66 ("LAO HO MO" #x0EDD)
67 ))
diff --git a/lisp/nxml/char-name/unicode/00F00-00FFF.el b/lisp/nxml/char-name/unicode/00F00-00FFF.el
new file mode 100644
index 00000000000..7440269e0e3
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/00F00-00FFF.el
@@ -0,0 +1,195 @@
1(nxml-define-char-name-set 'tibetan
2 '(("TIBETAN SYLLABLE OM" #x0F00)
3 ("TIBETAN MARK GTER YIG MGO TRUNCATED A" #x0F01)
4 ("TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA" #x0F02)
5 ("TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA" #x0F03)
6 ("TIBETAN MARK INITIAL YIG MGO MDUN MA" #x0F04)
7 ("TIBETAN MARK CLOSING YIG MGO SGAB MA" #x0F05)
8 ("TIBETAN MARK CARET YIG MGO PHUR SHAD MA" #x0F06)
9 ("TIBETAN MARK YIG MGO TSHEG SHAD MA" #x0F07)
10 ("TIBETAN MARK SBRUL SHAD" #x0F08)
11 ("TIBETAN MARK BSKUR YIG MGO" #x0F09)
12 ("TIBETAN MARK BKA- SHOG YIG MGO" #x0F0A)
13 ("TIBETAN MARK INTERSYLLABIC TSHEG" #x0F0B)
14 ("TIBETAN MARK DELIMITER TSHEG BSTAR" #x0F0C)
15 ("TIBETAN MARK SHAD" #x0F0D)
16 ("TIBETAN MARK NYIS SHAD" #x0F0E)
17 ("TIBETAN MARK TSHEG SHAD" #x0F0F)
18 ("TIBETAN MARK NYIS TSHEG SHAD" #x0F10)
19 ("TIBETAN MARK RIN CHEN SPUNGS SHAD" #x0F11)
20 ("TIBETAN MARK RGYA GRAM SHAD" #x0F12)
21 ("TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN" #x0F13)
22 ("TIBETAN MARK GTER TSHEG" #x0F14)
23 ("TIBETAN LOGOTYPE SIGN CHAD RTAGS" #x0F15)
24 ("TIBETAN LOGOTYPE SIGN LHAG RTAGS" #x0F16)
25 ("TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS" #x0F17)
26 ("TIBETAN ASTROLOGICAL SIGN -KHYUD PA" #x0F18)
27 ("TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS" #x0F19)
28 ("TIBETAN SIGN RDEL DKAR GCIG" #x0F1A)
29 ("TIBETAN SIGN RDEL DKAR GNYIS" #x0F1B)
30 ("TIBETAN SIGN RDEL DKAR GSUM" #x0F1C)
31 ("TIBETAN SIGN RDEL NAG GCIG" #x0F1D)
32 ("TIBETAN SIGN RDEL NAG GNYIS" #x0F1E)
33 ("TIBETAN SIGN RDEL DKAR RDEL NAG" #x0F1F)
34 ("TIBETAN DIGIT ZERO" #x0F20)
35 ("TIBETAN DIGIT ONE" #x0F21)
36 ("TIBETAN DIGIT TWO" #x0F22)
37 ("TIBETAN DIGIT THREE" #x0F23)
38 ("TIBETAN DIGIT FOUR" #x0F24)
39 ("TIBETAN DIGIT FIVE" #x0F25)
40 ("TIBETAN DIGIT SIX" #x0F26)
41 ("TIBETAN DIGIT SEVEN" #x0F27)
42 ("TIBETAN DIGIT EIGHT" #x0F28)
43 ("TIBETAN DIGIT NINE" #x0F29)
44 ("TIBETAN DIGIT HALF ONE" #x0F2A)
45 ("TIBETAN DIGIT HALF TWO" #x0F2B)
46 ("TIBETAN DIGIT HALF THREE" #x0F2C)
47 ("TIBETAN DIGIT HALF FOUR" #x0F2D)
48 ("TIBETAN DIGIT HALF FIVE" #x0F2E)
49 ("TIBETAN DIGIT HALF SIX" #x0F2F)
50 ("TIBETAN DIGIT HALF SEVEN" #x0F30)
51 ("TIBETAN DIGIT HALF EIGHT" #x0F31)
52 ("TIBETAN DIGIT HALF NINE" #x0F32)
53 ("TIBETAN DIGIT HALF ZERO" #x0F33)
54 ("TIBETAN MARK BSDUS RTAGS" #x0F34)
55 ("TIBETAN MARK NGAS BZUNG NYI ZLA" #x0F35)
56 ("TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN" #x0F36)
57 ("TIBETAN MARK NGAS BZUNG SGOR RTAGS" #x0F37)
58 ("TIBETAN MARK CHE MGO" #x0F38)
59 ("TIBETAN MARK TSA -PHRU" #x0F39)
60 ("TIBETAN MARK GUG RTAGS GYON" #x0F3A)
61 ("TIBETAN MARK GUG RTAGS GYAS" #x0F3B)
62 ("TIBETAN MARK ANG KHANG GYON" #x0F3C)
63 ("TIBETAN MARK ANG KHANG GYAS" #x0F3D)
64 ("TIBETAN SIGN YAR TSHES" #x0F3E)
65 ("TIBETAN SIGN MAR TSHES" #x0F3F)
66 ("TIBETAN LETTER KA" #x0F40)
67 ("TIBETAN LETTER KHA" #x0F41)
68 ("TIBETAN LETTER GA" #x0F42)
69 ("TIBETAN LETTER GHA" #x0F43)
70 ("TIBETAN LETTER NGA" #x0F44)
71 ("TIBETAN LETTER CA" #x0F45)
72 ("TIBETAN LETTER CHA" #x0F46)
73 ("TIBETAN LETTER JA" #x0F47)
74 ("TIBETAN LETTER NYA" #x0F49)
75 ("TIBETAN LETTER TTA" #x0F4A)
76 ("TIBETAN LETTER TTHA" #x0F4B)
77 ("TIBETAN LETTER DDA" #x0F4C)
78 ("TIBETAN LETTER DDHA" #x0F4D)
79 ("TIBETAN LETTER NNA" #x0F4E)
80 ("TIBETAN LETTER TA" #x0F4F)
81 ("TIBETAN LETTER THA" #x0F50)
82 ("TIBETAN LETTER DA" #x0F51)
83 ("TIBETAN LETTER DHA" #x0F52)
84 ("TIBETAN LETTER NA" #x0F53)
85 ("TIBETAN LETTER PA" #x0F54)
86 ("TIBETAN LETTER PHA" #x0F55)
87 ("TIBETAN LETTER BA" #x0F56)
88 ("TIBETAN LETTER BHA" #x0F57)
89 ("TIBETAN LETTER MA" #x0F58)
90 ("TIBETAN LETTER TSA" #x0F59)
91 ("TIBETAN LETTER TSHA" #x0F5A)
92 ("TIBETAN LETTER DZA" #x0F5B)
93 ("TIBETAN LETTER DZHA" #x0F5C)
94 ("TIBETAN LETTER WA" #x0F5D)
95 ("TIBETAN LETTER ZHA" #x0F5E)
96 ("TIBETAN LETTER ZA" #x0F5F)
97 ("TIBETAN LETTER -A" #x0F60)
98 ("TIBETAN LETTER YA" #x0F61)
99 ("TIBETAN LETTER RA" #x0F62)
100 ("TIBETAN LETTER LA" #x0F63)
101 ("TIBETAN LETTER SHA" #x0F64)
102 ("TIBETAN LETTER SSA" #x0F65)
103 ("TIBETAN LETTER SA" #x0F66)
104 ("TIBETAN LETTER HA" #x0F67)
105 ("TIBETAN LETTER A" #x0F68)
106 ("TIBETAN LETTER KSSA" #x0F69)
107 ("TIBETAN LETTER FIXED-FORM RA" #x0F6A)
108 ("TIBETAN VOWEL SIGN AA" #x0F71)
109 ("TIBETAN VOWEL SIGN I" #x0F72)
110 ("TIBETAN VOWEL SIGN II" #x0F73)
111 ("TIBETAN VOWEL SIGN U" #x0F74)
112 ("TIBETAN VOWEL SIGN UU" #x0F75)
113 ("TIBETAN VOWEL SIGN VOCALIC R" #x0F76)
114 ("TIBETAN VOWEL SIGN VOCALIC RR" #x0F77)
115 ("TIBETAN VOWEL SIGN VOCALIC L" #x0F78)
116 ("TIBETAN VOWEL SIGN VOCALIC LL" #x0F79)
117 ("TIBETAN VOWEL SIGN E" #x0F7A)
118 ("TIBETAN VOWEL SIGN EE" #x0F7B)
119 ("TIBETAN VOWEL SIGN O" #x0F7C)
120 ("TIBETAN VOWEL SIGN OO" #x0F7D)
121 ("TIBETAN SIGN RJES SU NGA RO" #x0F7E)
122 ("TIBETAN SIGN RNAM BCAD" #x0F7F)
123 ("TIBETAN VOWEL SIGN REVERSED I" #x0F80)
124 ("TIBETAN VOWEL SIGN REVERSED II" #x0F81)
125 ("TIBETAN SIGN NYI ZLA NAA DA" #x0F82)
126 ("TIBETAN SIGN SNA LDAN" #x0F83)
127 ("TIBETAN MARK HALANTA" #x0F84)
128 ("TIBETAN MARK PALUTA" #x0F85)
129 ("TIBETAN SIGN LCI RTAGS" #x0F86)
130 ("TIBETAN SIGN YANG RTAGS" #x0F87)
131 ("TIBETAN SIGN LCE TSA CAN" #x0F88)
132 ("TIBETAN SIGN MCHU CAN" #x0F89)
133 ("TIBETAN SIGN GRU CAN RGYINGS" #x0F8A)
134 ("TIBETAN SIGN GRU MED RGYINGS" #x0F8B)
135 ("TIBETAN SUBJOINED LETTER KA" #x0F90)
136 ("TIBETAN SUBJOINED LETTER KHA" #x0F91)
137 ("TIBETAN SUBJOINED LETTER GA" #x0F92)
138 ("TIBETAN SUBJOINED LETTER GHA" #x0F93)
139 ("TIBETAN SUBJOINED LETTER NGA" #x0F94)
140 ("TIBETAN SUBJOINED LETTER CA" #x0F95)
141 ("TIBETAN SUBJOINED LETTER CHA" #x0F96)
142 ("TIBETAN SUBJOINED LETTER JA" #x0F97)
143 ("TIBETAN SUBJOINED LETTER NYA" #x0F99)
144 ("TIBETAN SUBJOINED LETTER TTA" #x0F9A)
145 ("TIBETAN SUBJOINED LETTER TTHA" #x0F9B)
146 ("TIBETAN SUBJOINED LETTER DDA" #x0F9C)
147 ("TIBETAN SUBJOINED LETTER DDHA" #x0F9D)
148 ("TIBETAN SUBJOINED LETTER NNA" #x0F9E)
149 ("TIBETAN SUBJOINED LETTER TA" #x0F9F)
150 ("TIBETAN SUBJOINED LETTER THA" #x0FA0)
151 ("TIBETAN SUBJOINED LETTER DA" #x0FA1)
152 ("TIBETAN SUBJOINED LETTER DHA" #x0FA2)
153 ("TIBETAN SUBJOINED LETTER NA" #x0FA3)
154 ("TIBETAN SUBJOINED LETTER PA" #x0FA4)
155 ("TIBETAN SUBJOINED LETTER PHA" #x0FA5)
156 ("TIBETAN SUBJOINED LETTER BA" #x0FA6)
157 ("TIBETAN SUBJOINED LETTER BHA" #x0FA7)
158 ("TIBETAN SUBJOINED LETTER MA" #x0FA8)
159 ("TIBETAN SUBJOINED LETTER TSA" #x0FA9)
160 ("TIBETAN SUBJOINED LETTER TSHA" #x0FAA)
161 ("TIBETAN SUBJOINED LETTER DZA" #x0FAB)
162 ("TIBETAN SUBJOINED LETTER DZHA" #x0FAC)
163 ("TIBETAN SUBJOINED LETTER WA" #x0FAD)
164 ("TIBETAN SUBJOINED LETTER ZHA" #x0FAE)
165 ("TIBETAN SUBJOINED LETTER ZA" #x0FAF)
166 ("TIBETAN SUBJOINED LETTER -A" #x0FB0)
167 ("TIBETAN SUBJOINED LETTER YA" #x0FB1)
168 ("TIBETAN SUBJOINED LETTER RA" #x0FB2)
169 ("TIBETAN SUBJOINED LETTER LA" #x0FB3)
170 ("TIBETAN SUBJOINED LETTER SHA" #x0FB4)
171 ("TIBETAN SUBJOINED LETTER SSA" #x0FB5)
172 ("TIBETAN SUBJOINED LETTER SA" #x0FB6)
173 ("TIBETAN SUBJOINED LETTER HA" #x0FB7)
174 ("TIBETAN SUBJOINED LETTER A" #x0FB8)
175 ("TIBETAN SUBJOINED LETTER KSSA" #x0FB9)
176 ("TIBETAN SUBJOINED LETTER FIXED-FORM WA" #x0FBA)
177 ("TIBETAN SUBJOINED LETTER FIXED-FORM YA" #x0FBB)
178 ("TIBETAN SUBJOINED LETTER FIXED-FORM RA" #x0FBC)
179 ("TIBETAN KU RU KHA" #x0FBE)
180 ("TIBETAN KU RU KHA BZHI MIG CAN" #x0FBF)
181 ("TIBETAN CANTILLATION SIGN HEAVY BEAT" #x0FC0)
182 ("TIBETAN CANTILLATION SIGN LIGHT BEAT" #x0FC1)
183 ("TIBETAN CANTILLATION SIGN CANG TE-U" #x0FC2)
184 ("TIBETAN CANTILLATION SIGN SBUB -CHAL" #x0FC3)
185 ("TIBETAN SYMBOL DRIL BU" #x0FC4)
186 ("TIBETAN SYMBOL RDO RJE" #x0FC5)
187 ("TIBETAN SYMBOL PADMA GDAN" #x0FC6)
188 ("TIBETAN SYMBOL RDO RJE RGYA GRAM" #x0FC7)
189 ("TIBETAN SYMBOL PHUR PA" #x0FC8)
190 ("TIBETAN SYMBOL NOR BU" #x0FC9)
191 ("TIBETAN SYMBOL NOR BU NYIS -KHYIL" #x0FCA)
192 ("TIBETAN SYMBOL NOR BU GSUM -KHYIL" #x0FCB)
193 ("TIBETAN SYMBOL NOR BU BZHI -KHYIL" #x0FCC)
194 ("TIBETAN SIGN RDEL NAG GSUM" #x0FCF)
195 ))
diff --git a/lisp/nxml/char-name/unicode/01000-0109F.el b/lisp/nxml/char-name/unicode/01000-0109F.el
new file mode 100644
index 00000000000..4465de42dda
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/01000-0109F.el
@@ -0,0 +1,80 @@
1(nxml-define-char-name-set 'myanmar
2 '(("MYANMAR LETTER KA" #x1000)
3 ("MYANMAR LETTER KHA" #x1001)
4 ("MYANMAR LETTER GA" #x1002)
5 ("MYANMAR LETTER GHA" #x1003)
6 ("MYANMAR LETTER NGA" #x1004)
7 ("MYANMAR LETTER CA" #x1005)
8 ("MYANMAR LETTER CHA" #x1006)
9 ("MYANMAR LETTER JA" #x1007)
10 ("MYANMAR LETTER JHA" #x1008)
11 ("MYANMAR LETTER NYA" #x1009)
12 ("MYANMAR LETTER NNYA" #x100A)
13 ("MYANMAR LETTER TTA" #x100B)
14 ("MYANMAR LETTER TTHA" #x100C)
15 ("MYANMAR LETTER DDA" #x100D)
16 ("MYANMAR LETTER DDHA" #x100E)
17 ("MYANMAR LETTER NNA" #x100F)
18 ("MYANMAR LETTER TA" #x1010)
19 ("MYANMAR LETTER THA" #x1011)
20 ("MYANMAR LETTER DA" #x1012)
21 ("MYANMAR LETTER DHA" #x1013)
22 ("MYANMAR LETTER NA" #x1014)
23 ("MYANMAR LETTER PA" #x1015)
24 ("MYANMAR LETTER PHA" #x1016)
25 ("MYANMAR LETTER BA" #x1017)
26 ("MYANMAR LETTER BHA" #x1018)
27 ("MYANMAR LETTER MA" #x1019)
28 ("MYANMAR LETTER YA" #x101A)
29 ("MYANMAR LETTER RA" #x101B)
30 ("MYANMAR LETTER LA" #x101C)
31 ("MYANMAR LETTER WA" #x101D)
32 ("MYANMAR LETTER SA" #x101E)
33 ("MYANMAR LETTER HA" #x101F)
34 ("MYANMAR LETTER LLA" #x1020)
35 ("MYANMAR LETTER A" #x1021)
36 ("MYANMAR LETTER I" #x1023)
37 ("MYANMAR LETTER II" #x1024)
38 ("MYANMAR LETTER U" #x1025)
39 ("MYANMAR LETTER UU" #x1026)
40 ("MYANMAR LETTER E" #x1027)
41 ("MYANMAR LETTER O" #x1029)
42 ("MYANMAR LETTER AU" #x102A)
43 ("MYANMAR VOWEL SIGN AA" #x102C)
44 ("MYANMAR VOWEL SIGN I" #x102D)
45 ("MYANMAR VOWEL SIGN II" #x102E)
46 ("MYANMAR VOWEL SIGN U" #x102F)
47 ("MYANMAR VOWEL SIGN UU" #x1030)
48 ("MYANMAR VOWEL SIGN E" #x1031)
49 ("MYANMAR VOWEL SIGN AI" #x1032)
50 ("MYANMAR SIGN ANUSVARA" #x1036)
51 ("MYANMAR SIGN DOT BELOW" #x1037)
52 ("MYANMAR SIGN VISARGA" #x1038)
53 ("MYANMAR SIGN VIRAMA" #x1039)
54 ("MYANMAR DIGIT ZERO" #x1040)
55 ("MYANMAR DIGIT ONE" #x1041)
56 ("MYANMAR DIGIT TWO" #x1042)
57 ("MYANMAR DIGIT THREE" #x1043)
58 ("MYANMAR DIGIT FOUR" #x1044)
59 ("MYANMAR DIGIT FIVE" #x1045)
60 ("MYANMAR DIGIT SIX" #x1046)
61 ("MYANMAR DIGIT SEVEN" #x1047)
62 ("MYANMAR DIGIT EIGHT" #x1048)
63 ("MYANMAR DIGIT NINE" #x1049)
64 ("MYANMAR SIGN LITTLE SECTION" #x104A)
65 ("MYANMAR SIGN SECTION" #x104B)
66 ("MYANMAR SYMBOL LOCATIVE" #x104C)
67 ("MYANMAR SYMBOL COMPLETED" #x104D)
68 ("MYANMAR SYMBOL AFOREMENTIONED" #x104E)
69 ("MYANMAR SYMBOL GENITIVE" #x104F)
70 ("MYANMAR LETTER SHA" #x1050)
71 ("MYANMAR LETTER SSA" #x1051)
72 ("MYANMAR LETTER VOCALIC R" #x1052)
73 ("MYANMAR LETTER VOCALIC RR" #x1053)
74 ("MYANMAR LETTER VOCALIC L" #x1054)
75 ("MYANMAR LETTER VOCALIC LL" #x1055)
76 ("MYANMAR VOWEL SIGN VOCALIC R" #x1056)
77 ("MYANMAR VOWEL SIGN VOCALIC RR" #x1057)
78 ("MYANMAR VOWEL SIGN VOCALIC L" #x1058)
79 ("MYANMAR VOWEL SIGN VOCALIC LL" #x1059)
80 ))
diff --git a/lisp/nxml/char-name/unicode/010A0-010FF.el b/lisp/nxml/char-name/unicode/010A0-010FF.el
new file mode 100644
index 00000000000..26abf69d527
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/010A0-010FF.el
@@ -0,0 +1,82 @@
1(nxml-define-char-name-set 'georgian
2 '(("GEORGIAN CAPITAL LETTER AN" #x10A0)
3 ("GEORGIAN CAPITAL LETTER BAN" #x10A1)
4 ("GEORGIAN CAPITAL LETTER GAN" #x10A2)
5 ("GEORGIAN CAPITAL LETTER DON" #x10A3)
6 ("GEORGIAN CAPITAL LETTER EN" #x10A4)
7 ("GEORGIAN CAPITAL LETTER VIN" #x10A5)
8 ("GEORGIAN CAPITAL LETTER ZEN" #x10A6)
9 ("GEORGIAN CAPITAL LETTER TAN" #x10A7)
10 ("GEORGIAN CAPITAL LETTER IN" #x10A8)
11 ("GEORGIAN CAPITAL LETTER KAN" #x10A9)
12 ("GEORGIAN CAPITAL LETTER LAS" #x10AA)
13 ("GEORGIAN CAPITAL LETTER MAN" #x10AB)
14 ("GEORGIAN CAPITAL LETTER NAR" #x10AC)
15 ("GEORGIAN CAPITAL LETTER ON" #x10AD)
16 ("GEORGIAN CAPITAL LETTER PAR" #x10AE)
17 ("GEORGIAN CAPITAL LETTER ZHAR" #x10AF)
18 ("GEORGIAN CAPITAL LETTER RAE" #x10B0)
19 ("GEORGIAN CAPITAL LETTER SAN" #x10B1)
20 ("GEORGIAN CAPITAL LETTER TAR" #x10B2)
21 ("GEORGIAN CAPITAL LETTER UN" #x10B3)
22 ("GEORGIAN CAPITAL LETTER PHAR" #x10B4)
23 ("GEORGIAN CAPITAL LETTER KHAR" #x10B5)
24 ("GEORGIAN CAPITAL LETTER GHAN" #x10B6)
25 ("GEORGIAN CAPITAL LETTER QAR" #x10B7)
26 ("GEORGIAN CAPITAL LETTER SHIN" #x10B8)
27 ("GEORGIAN CAPITAL LETTER CHIN" #x10B9)
28 ("GEORGIAN CAPITAL LETTER CAN" #x10BA)
29 ("GEORGIAN CAPITAL LETTER JIL" #x10BB)
30 ("GEORGIAN CAPITAL LETTER CIL" #x10BC)
31 ("GEORGIAN CAPITAL LETTER CHAR" #x10BD)
32 ("GEORGIAN CAPITAL LETTER XAN" #x10BE)
33 ("GEORGIAN CAPITAL LETTER JHAN" #x10BF)
34 ("GEORGIAN CAPITAL LETTER HAE" #x10C0)
35 ("GEORGIAN CAPITAL LETTER HE" #x10C1)
36 ("GEORGIAN CAPITAL LETTER HIE" #x10C2)
37 ("GEORGIAN CAPITAL LETTER WE" #x10C3)
38 ("GEORGIAN CAPITAL LETTER HAR" #x10C4)
39 ("GEORGIAN CAPITAL LETTER HOE" #x10C5)
40 ("GEORGIAN LETTER AN" #x10D0)
41 ("GEORGIAN LETTER BAN" #x10D1)
42 ("GEORGIAN LETTER GAN" #x10D2)
43 ("GEORGIAN LETTER DON" #x10D3)
44 ("GEORGIAN LETTER EN" #x10D4)
45 ("GEORGIAN LETTER VIN" #x10D5)
46 ("GEORGIAN LETTER ZEN" #x10D6)
47 ("GEORGIAN LETTER TAN" #x10D7)
48 ("GEORGIAN LETTER IN" #x10D8)
49 ("GEORGIAN LETTER KAN" #x10D9)
50 ("GEORGIAN LETTER LAS" #x10DA)
51 ("GEORGIAN LETTER MAN" #x10DB)
52 ("GEORGIAN LETTER NAR" #x10DC)
53 ("GEORGIAN LETTER ON" #x10DD)
54 ("GEORGIAN LETTER PAR" #x10DE)
55 ("GEORGIAN LETTER ZHAR" #x10DF)
56 ("GEORGIAN LETTER RAE" #x10E0)
57 ("GEORGIAN LETTER SAN" #x10E1)
58 ("GEORGIAN LETTER TAR" #x10E2)
59 ("GEORGIAN LETTER UN" #x10E3)
60 ("GEORGIAN LETTER PHAR" #x10E4)
61 ("GEORGIAN LETTER KHAR" #x10E5)
62 ("GEORGIAN LETTER GHAN" #x10E6)
63 ("GEORGIAN LETTER QAR" #x10E7)
64 ("GEORGIAN LETTER SHIN" #x10E8)
65 ("GEORGIAN LETTER CHIN" #x10E9)
66 ("GEORGIAN LETTER CAN" #x10EA)
67 ("GEORGIAN LETTER JIL" #x10EB)
68 ("GEORGIAN LETTER CIL" #x10EC)
69 ("GEORGIAN LETTER CHAR" #x10ED)
70 ("GEORGIAN LETTER XAN" #x10EE)
71 ("GEORGIAN LETTER JHAN" #x10EF)
72 ("GEORGIAN LETTER HAE" #x10F0)
73 ("GEORGIAN LETTER HE" #x10F1)
74 ("GEORGIAN LETTER HIE" #x10F2)
75 ("GEORGIAN LETTER WE" #x10F3)
76 ("GEORGIAN LETTER HAR" #x10F4)
77 ("GEORGIAN LETTER HOE" #x10F5)
78 ("GEORGIAN LETTER FI" #x10F6)
79 ("GEORGIAN LETTER YN" #x10F7)
80 ("GEORGIAN LETTER ELIFI" #x10F8)
81 ("GEORGIAN PARAGRAPH SEPARATOR" #x10FB)
82 ))
diff --git a/lisp/nxml/char-name/unicode/01100-011FF.el b/lisp/nxml/char-name/unicode/01100-011FF.el
new file mode 100644
index 00000000000..b89d01536f8
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/01100-011FF.el
@@ -0,0 +1,242 @@
1(nxml-define-char-name-set 'hangul-jamo
2 '(("HANGUL CHOSEONG KIYEOK" #x1100)
3 ("HANGUL CHOSEONG SSANGKIYEOK" #x1101)
4 ("HANGUL CHOSEONG NIEUN" #x1102)
5 ("HANGUL CHOSEONG TIKEUT" #x1103)
6 ("HANGUL CHOSEONG SSANGTIKEUT" #x1104)
7 ("HANGUL CHOSEONG RIEUL" #x1105)
8 ("HANGUL CHOSEONG MIEUM" #x1106)
9 ("HANGUL CHOSEONG PIEUP" #x1107)
10 ("HANGUL CHOSEONG SSANGPIEUP" #x1108)
11 ("HANGUL CHOSEONG SIOS" #x1109)
12 ("HANGUL CHOSEONG SSANGSIOS" #x110A)
13 ("HANGUL CHOSEONG IEUNG" #x110B)
14 ("HANGUL CHOSEONG CIEUC" #x110C)
15 ("HANGUL CHOSEONG SSANGCIEUC" #x110D)
16 ("HANGUL CHOSEONG CHIEUCH" #x110E)
17 ("HANGUL CHOSEONG KHIEUKH" #x110F)
18 ("HANGUL CHOSEONG THIEUTH" #x1110)
19 ("HANGUL CHOSEONG PHIEUPH" #x1111)
20 ("HANGUL CHOSEONG HIEUH" #x1112)
21 ("HANGUL CHOSEONG NIEUN-KIYEOK" #x1113)
22 ("HANGUL CHOSEONG SSANGNIEUN" #x1114)
23 ("HANGUL CHOSEONG NIEUN-TIKEUT" #x1115)
24 ("HANGUL CHOSEONG NIEUN-PIEUP" #x1116)
25 ("HANGUL CHOSEONG TIKEUT-KIYEOK" #x1117)
26 ("HANGUL CHOSEONG RIEUL-NIEUN" #x1118)
27 ("HANGUL CHOSEONG SSANGRIEUL" #x1119)
28 ("HANGUL CHOSEONG RIEUL-HIEUH" #x111A)
29 ("HANGUL CHOSEONG KAPYEOUNRIEUL" #x111B)
30 ("HANGUL CHOSEONG MIEUM-PIEUP" #x111C)
31 ("HANGUL CHOSEONG KAPYEOUNMIEUM" #x111D)
32 ("HANGUL CHOSEONG PIEUP-KIYEOK" #x111E)
33 ("HANGUL CHOSEONG PIEUP-NIEUN" #x111F)
34 ("HANGUL CHOSEONG PIEUP-TIKEUT" #x1120)
35 ("HANGUL CHOSEONG PIEUP-SIOS" #x1121)
36 ("HANGUL CHOSEONG PIEUP-SIOS-KIYEOK" #x1122)
37 ("HANGUL CHOSEONG PIEUP-SIOS-TIKEUT" #x1123)
38 ("HANGUL CHOSEONG PIEUP-SIOS-PIEUP" #x1124)
39 ("HANGUL CHOSEONG PIEUP-SSANGSIOS" #x1125)
40 ("HANGUL CHOSEONG PIEUP-SIOS-CIEUC" #x1126)
41 ("HANGUL CHOSEONG PIEUP-CIEUC" #x1127)
42 ("HANGUL CHOSEONG PIEUP-CHIEUCH" #x1128)
43 ("HANGUL CHOSEONG PIEUP-THIEUTH" #x1129)
44 ("HANGUL CHOSEONG PIEUP-PHIEUPH" #x112A)
45 ("HANGUL CHOSEONG KAPYEOUNPIEUP" #x112B)
46 ("HANGUL CHOSEONG KAPYEOUNSSANGPIEUP" #x112C)
47 ("HANGUL CHOSEONG SIOS-KIYEOK" #x112D)
48 ("HANGUL CHOSEONG SIOS-NIEUN" #x112E)
49 ("HANGUL CHOSEONG SIOS-TIKEUT" #x112F)
50 ("HANGUL CHOSEONG SIOS-RIEUL" #x1130)
51 ("HANGUL CHOSEONG SIOS-MIEUM" #x1131)
52 ("HANGUL CHOSEONG SIOS-PIEUP" #x1132)
53 ("HANGUL CHOSEONG SIOS-PIEUP-KIYEOK" #x1133)
54 ("HANGUL CHOSEONG SIOS-SSANGSIOS" #x1134)
55 ("HANGUL CHOSEONG SIOS-IEUNG" #x1135)
56 ("HANGUL CHOSEONG SIOS-CIEUC" #x1136)
57 ("HANGUL CHOSEONG SIOS-CHIEUCH" #x1137)
58 ("HANGUL CHOSEONG SIOS-KHIEUKH" #x1138)
59 ("HANGUL CHOSEONG SIOS-THIEUTH" #x1139)
60 ("HANGUL CHOSEONG SIOS-PHIEUPH" #x113A)
61 ("HANGUL CHOSEONG SIOS-HIEUH" #x113B)
62 ("HANGUL CHOSEONG CHITUEUMSIOS" #x113C)
63 ("HANGUL CHOSEONG CHITUEUMSSANGSIOS" #x113D)
64 ("HANGUL CHOSEONG CEONGCHIEUMSIOS" #x113E)
65 ("HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS" #x113F)
66 ("HANGUL CHOSEONG PANSIOS" #x1140)
67 ("HANGUL CHOSEONG IEUNG-KIYEOK" #x1141)
68 ("HANGUL CHOSEONG IEUNG-TIKEUT" #x1142)
69 ("HANGUL CHOSEONG IEUNG-MIEUM" #x1143)
70 ("HANGUL CHOSEONG IEUNG-PIEUP" #x1144)
71 ("HANGUL CHOSEONG IEUNG-SIOS" #x1145)
72 ("HANGUL CHOSEONG IEUNG-PANSIOS" #x1146)
73 ("HANGUL CHOSEONG SSANGIEUNG" #x1147)
74 ("HANGUL CHOSEONG IEUNG-CIEUC" #x1148)
75 ("HANGUL CHOSEONG IEUNG-CHIEUCH" #x1149)
76 ("HANGUL CHOSEONG IEUNG-THIEUTH" #x114A)
77 ("HANGUL CHOSEONG IEUNG-PHIEUPH" #x114B)
78 ("HANGUL CHOSEONG YESIEUNG" #x114C)
79 ("HANGUL CHOSEONG CIEUC-IEUNG" #x114D)
80 ("HANGUL CHOSEONG CHITUEUMCIEUC" #x114E)
81 ("HANGUL CHOSEONG CHITUEUMSSANGCIEUC" #x114F)
82 ("HANGUL CHOSEONG CEONGCHIEUMCIEUC" #x1150)
83 ("HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC" #x1151)
84 ("HANGUL CHOSEONG CHIEUCH-KHIEUKH" #x1152)
85 ("HANGUL CHOSEONG CHIEUCH-HIEUH" #x1153)
86 ("HANGUL CHOSEONG CHITUEUMCHIEUCH" #x1154)
87 ("HANGUL CHOSEONG CEONGCHIEUMCHIEUCH" #x1155)
88 ("HANGUL CHOSEONG PHIEUPH-PIEUP" #x1156)
89 ("HANGUL CHOSEONG KAPYEOUNPHIEUPH" #x1157)
90 ("HANGUL CHOSEONG SSANGHIEUH" #x1158)
91 ("HANGUL CHOSEONG YEORINHIEUH" #x1159)
92 ("HANGUL CHOSEONG FILLER" #x115F)
93 ("HANGUL JUNGSEONG FILLER" #x1160)
94 ("HANGUL JUNGSEONG A" #x1161)
95 ("HANGUL JUNGSEONG AE" #x1162)
96 ("HANGUL JUNGSEONG YA" #x1163)
97 ("HANGUL JUNGSEONG YAE" #x1164)
98 ("HANGUL JUNGSEONG EO" #x1165)
99 ("HANGUL JUNGSEONG E" #x1166)
100 ("HANGUL JUNGSEONG YEO" #x1167)
101 ("HANGUL JUNGSEONG YE" #x1168)
102 ("HANGUL JUNGSEONG O" #x1169)
103 ("HANGUL JUNGSEONG WA" #x116A)
104 ("HANGUL JUNGSEONG WAE" #x116B)
105 ("HANGUL JUNGSEONG OE" #x116C)
106 ("HANGUL JUNGSEONG YO" #x116D)
107 ("HANGUL JUNGSEONG U" #x116E)
108 ("HANGUL JUNGSEONG WEO" #x116F)
109 ("HANGUL JUNGSEONG WE" #x1170)
110 ("HANGUL JUNGSEONG WI" #x1171)
111 ("HANGUL JUNGSEONG YU" #x1172)
112 ("HANGUL JUNGSEONG EU" #x1173)
113 ("HANGUL JUNGSEONG YI" #x1174)
114 ("HANGUL JUNGSEONG I" #x1175)
115 ("HANGUL JUNGSEONG A-O" #x1176)
116 ("HANGUL JUNGSEONG A-U" #x1177)
117 ("HANGUL JUNGSEONG YA-O" #x1178)
118 ("HANGUL JUNGSEONG YA-YO" #x1179)
119 ("HANGUL JUNGSEONG EO-O" #x117A)
120 ("HANGUL JUNGSEONG EO-U" #x117B)
121 ("HANGUL JUNGSEONG EO-EU" #x117C)
122 ("HANGUL JUNGSEONG YEO-O" #x117D)
123 ("HANGUL JUNGSEONG YEO-U" #x117E)
124 ("HANGUL JUNGSEONG O-EO" #x117F)
125 ("HANGUL JUNGSEONG O-E" #x1180)
126 ("HANGUL JUNGSEONG O-YE" #x1181)
127 ("HANGUL JUNGSEONG O-O" #x1182)
128 ("HANGUL JUNGSEONG O-U" #x1183)
129 ("HANGUL JUNGSEONG YO-YA" #x1184)
130 ("HANGUL JUNGSEONG YO-YAE" #x1185)
131 ("HANGUL JUNGSEONG YO-YEO" #x1186)
132 ("HANGUL JUNGSEONG YO-O" #x1187)
133 ("HANGUL JUNGSEONG YO-I" #x1188)
134 ("HANGUL JUNGSEONG U-A" #x1189)
135 ("HANGUL JUNGSEONG U-AE" #x118A)
136 ("HANGUL JUNGSEONG U-EO-EU" #x118B)
137 ("HANGUL JUNGSEONG U-YE" #x118C)
138 ("HANGUL JUNGSEONG U-U" #x118D)
139 ("HANGUL JUNGSEONG YU-A" #x118E)
140 ("HANGUL JUNGSEONG YU-EO" #x118F)
141 ("HANGUL JUNGSEONG YU-E" #x1190)
142 ("HANGUL JUNGSEONG YU-YEO" #x1191)
143 ("HANGUL JUNGSEONG YU-YE" #x1192)
144 ("HANGUL JUNGSEONG YU-U" #x1193)
145 ("HANGUL JUNGSEONG YU-I" #x1194)
146 ("HANGUL JUNGSEONG EU-U" #x1195)
147 ("HANGUL JUNGSEONG EU-EU" #x1196)
148 ("HANGUL JUNGSEONG YI-U" #x1197)
149 ("HANGUL JUNGSEONG I-A" #x1198)
150 ("HANGUL JUNGSEONG I-YA" #x1199)
151 ("HANGUL JUNGSEONG I-O" #x119A)
152 ("HANGUL JUNGSEONG I-U" #x119B)
153 ("HANGUL JUNGSEONG I-EU" #x119C)
154 ("HANGUL JUNGSEONG I-ARAEA" #x119D)
155 ("HANGUL JUNGSEONG ARAEA" #x119E)
156 ("HANGUL JUNGSEONG ARAEA-EO" #x119F)
157 ("HANGUL JUNGSEONG ARAEA-U" #x11A0)
158 ("HANGUL JUNGSEONG ARAEA-I" #x11A1)
159 ("HANGUL JUNGSEONG SSANGARAEA" #x11A2)
160 ("HANGUL JONGSEONG KIYEOK" #x11A8)
161 ("HANGUL JONGSEONG SSANGKIYEOK" #x11A9)
162 ("HANGUL JONGSEONG KIYEOK-SIOS" #x11AA)
163 ("HANGUL JONGSEONG NIEUN" #x11AB)
164 ("HANGUL JONGSEONG NIEUN-CIEUC" #x11AC)
165 ("HANGUL JONGSEONG NIEUN-HIEUH" #x11AD)
166 ("HANGUL JONGSEONG TIKEUT" #x11AE)
167 ("HANGUL JONGSEONG RIEUL" #x11AF)
168 ("HANGUL JONGSEONG RIEUL-KIYEOK" #x11B0)
169 ("HANGUL JONGSEONG RIEUL-MIEUM" #x11B1)
170 ("HANGUL JONGSEONG RIEUL-PIEUP" #x11B2)
171 ("HANGUL JONGSEONG RIEUL-SIOS" #x11B3)
172 ("HANGUL JONGSEONG RIEUL-THIEUTH" #x11B4)
173 ("HANGUL JONGSEONG RIEUL-PHIEUPH" #x11B5)
174 ("HANGUL JONGSEONG RIEUL-HIEUH" #x11B6)
175 ("HANGUL JONGSEONG MIEUM" #x11B7)
176 ("HANGUL JONGSEONG PIEUP" #x11B8)
177 ("HANGUL JONGSEONG PIEUP-SIOS" #x11B9)
178 ("HANGUL JONGSEONG SIOS" #x11BA)
179 ("HANGUL JONGSEONG SSANGSIOS" #x11BB)
180 ("HANGUL JONGSEONG IEUNG" #x11BC)
181 ("HANGUL JONGSEONG CIEUC" #x11BD)
182 ("HANGUL JONGSEONG CHIEUCH" #x11BE)
183 ("HANGUL JONGSEONG KHIEUKH" #x11BF)
184 ("HANGUL JONGSEONG THIEUTH" #x11C0)
185 ("HANGUL JONGSEONG PHIEUPH" #x11C1)
186 ("HANGUL JONGSEONG HIEUH" #x11C2)
187 ("HANGUL JONGSEONG KIYEOK-RIEUL" #x11C3)
188 ("HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK" #x11C4)
189 ("HANGUL JONGSEONG NIEUN-KIYEOK" #x11C5)
190 ("HANGUL JONGSEONG NIEUN-TIKEUT" #x11C6)
191 ("HANGUL JONGSEONG NIEUN-SIOS" #x11C7)
192 ("HANGUL JONGSEONG NIEUN-PANSIOS" #x11C8)
193 ("HANGUL JONGSEONG NIEUN-THIEUTH" #x11C9)
194 ("HANGUL JONGSEONG TIKEUT-KIYEOK" #x11CA)
195 ("HANGUL JONGSEONG TIKEUT-RIEUL" #x11CB)
196 ("HANGUL JONGSEONG RIEUL-KIYEOK-SIOS" #x11CC)
197 ("HANGUL JONGSEONG RIEUL-NIEUN" #x11CD)
198 ("HANGUL JONGSEONG RIEUL-TIKEUT" #x11CE)
199 ("HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH" #x11CF)
200 ("HANGUL JONGSEONG SSANGRIEUL" #x11D0)
201 ("HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK" #x11D1)
202 ("HANGUL JONGSEONG RIEUL-MIEUM-SIOS" #x11D2)
203 ("HANGUL JONGSEONG RIEUL-PIEUP-SIOS" #x11D3)
204 ("HANGUL JONGSEONG RIEUL-PIEUP-HIEUH" #x11D4)
205 ("HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP" #x11D5)
206 ("HANGUL JONGSEONG RIEUL-SSANGSIOS" #x11D6)
207 ("HANGUL JONGSEONG RIEUL-PANSIOS" #x11D7)
208 ("HANGUL JONGSEONG RIEUL-KHIEUKH" #x11D8)
209 ("HANGUL JONGSEONG RIEUL-YEORINHIEUH" #x11D9)
210 ("HANGUL JONGSEONG MIEUM-KIYEOK" #x11DA)
211 ("HANGUL JONGSEONG MIEUM-RIEUL" #x11DB)
212 ("HANGUL JONGSEONG MIEUM-PIEUP" #x11DC)
213 ("HANGUL JONGSEONG MIEUM-SIOS" #x11DD)
214 ("HANGUL JONGSEONG MIEUM-SSANGSIOS" #x11DE)
215 ("HANGUL JONGSEONG MIEUM-PANSIOS" #x11DF)
216 ("HANGUL JONGSEONG MIEUM-CHIEUCH" #x11E0)
217 ("HANGUL JONGSEONG MIEUM-HIEUH" #x11E1)
218 ("HANGUL JONGSEONG KAPYEOUNMIEUM" #x11E2)
219 ("HANGUL JONGSEONG PIEUP-RIEUL" #x11E3)
220 ("HANGUL JONGSEONG PIEUP-PHIEUPH" #x11E4)
221 ("HANGUL JONGSEONG PIEUP-HIEUH" #x11E5)
222 ("HANGUL JONGSEONG KAPYEOUNPIEUP" #x11E6)
223 ("HANGUL JONGSEONG SIOS-KIYEOK" #x11E7)
224 ("HANGUL JONGSEONG SIOS-TIKEUT" #x11E8)
225 ("HANGUL JONGSEONG SIOS-RIEUL" #x11E9)
226 ("HANGUL JONGSEONG SIOS-PIEUP" #x11EA)
227 ("HANGUL JONGSEONG PANSIOS" #x11EB)
228 ("HANGUL JONGSEONG IEUNG-KIYEOK" #x11EC)
229 ("HANGUL JONGSEONG IEUNG-SSANGKIYEOK" #x11ED)
230 ("HANGUL JONGSEONG SSANGIEUNG" #x11EE)
231 ("HANGUL JONGSEONG IEUNG-KHIEUKH" #x11EF)
232 ("HANGUL JONGSEONG YESIEUNG" #x11F0)
233 ("HANGUL JONGSEONG YESIEUNG-SIOS" #x11F1)
234 ("HANGUL JONGSEONG YESIEUNG-PANSIOS" #x11F2)
235 ("HANGUL JONGSEONG PHIEUPH-PIEUP" #x11F3)
236 ("HANGUL JONGSEONG KAPYEOUNPHIEUPH" #x11F4)
237 ("HANGUL JONGSEONG HIEUH-NIEUN" #x11F5)
238 ("HANGUL JONGSEONG HIEUH-RIEUL" #x11F6)
239 ("HANGUL JONGSEONG HIEUH-MIEUM" #x11F7)
240 ("HANGUL JONGSEONG HIEUH-PIEUP" #x11F8)
241 ("HANGUL JONGSEONG YEORINHIEUH" #x11F9)
242 ))
diff --git a/lisp/nxml/char-name/unicode/01200-0137F.el b/lisp/nxml/char-name/unicode/01200-0137F.el
new file mode 100644
index 00000000000..06f59a3d841
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/01200-0137F.el
@@ -0,0 +1,347 @@
1(nxml-define-char-name-set 'ethiopic
2 '(("ETHIOPIC SYLLABLE HA" #x1200)
3 ("ETHIOPIC SYLLABLE HU" #x1201)
4 ("ETHIOPIC SYLLABLE HI" #x1202)
5 ("ETHIOPIC SYLLABLE HAA" #x1203)
6 ("ETHIOPIC SYLLABLE HEE" #x1204)
7 ("ETHIOPIC SYLLABLE HE" #x1205)
8 ("ETHIOPIC SYLLABLE HO" #x1206)
9 ("ETHIOPIC SYLLABLE LA" #x1208)
10 ("ETHIOPIC SYLLABLE LU" #x1209)
11 ("ETHIOPIC SYLLABLE LI" #x120A)
12 ("ETHIOPIC SYLLABLE LAA" #x120B)
13 ("ETHIOPIC SYLLABLE LEE" #x120C)
14 ("ETHIOPIC SYLLABLE LE" #x120D)
15 ("ETHIOPIC SYLLABLE LO" #x120E)
16 ("ETHIOPIC SYLLABLE LWA" #x120F)
17 ("ETHIOPIC SYLLABLE HHA" #x1210)
18 ("ETHIOPIC SYLLABLE HHU" #x1211)
19 ("ETHIOPIC SYLLABLE HHI" #x1212)
20 ("ETHIOPIC SYLLABLE HHAA" #x1213)
21 ("ETHIOPIC SYLLABLE HHEE" #x1214)
22 ("ETHIOPIC SYLLABLE HHE" #x1215)
23 ("ETHIOPIC SYLLABLE HHO" #x1216)
24 ("ETHIOPIC SYLLABLE HHWA" #x1217)
25 ("ETHIOPIC SYLLABLE MA" #x1218)
26 ("ETHIOPIC SYLLABLE MU" #x1219)
27 ("ETHIOPIC SYLLABLE MI" #x121A)
28 ("ETHIOPIC SYLLABLE MAA" #x121B)
29 ("ETHIOPIC SYLLABLE MEE" #x121C)
30 ("ETHIOPIC SYLLABLE ME" #x121D)
31 ("ETHIOPIC SYLLABLE MO" #x121E)
32 ("ETHIOPIC SYLLABLE MWA" #x121F)
33 ("ETHIOPIC SYLLABLE SZA" #x1220)
34 ("ETHIOPIC SYLLABLE SZU" #x1221)
35 ("ETHIOPIC SYLLABLE SZI" #x1222)
36 ("ETHIOPIC SYLLABLE SZAA" #x1223)
37 ("ETHIOPIC SYLLABLE SZEE" #x1224)
38 ("ETHIOPIC SYLLABLE SZE" #x1225)
39 ("ETHIOPIC SYLLABLE SZO" #x1226)
40 ("ETHIOPIC SYLLABLE SZWA" #x1227)
41 ("ETHIOPIC SYLLABLE RA" #x1228)
42 ("ETHIOPIC SYLLABLE RU" #x1229)
43 ("ETHIOPIC SYLLABLE RI" #x122A)
44 ("ETHIOPIC SYLLABLE RAA" #x122B)
45 ("ETHIOPIC SYLLABLE REE" #x122C)
46 ("ETHIOPIC SYLLABLE RE" #x122D)
47 ("ETHIOPIC SYLLABLE RO" #x122E)
48 ("ETHIOPIC SYLLABLE RWA" #x122F)
49 ("ETHIOPIC SYLLABLE SA" #x1230)
50 ("ETHIOPIC SYLLABLE SU" #x1231)
51 ("ETHIOPIC SYLLABLE SI" #x1232)
52 ("ETHIOPIC SYLLABLE SAA" #x1233)
53 ("ETHIOPIC SYLLABLE SEE" #x1234)
54 ("ETHIOPIC SYLLABLE SE" #x1235)
55 ("ETHIOPIC SYLLABLE SO" #x1236)
56 ("ETHIOPIC SYLLABLE SWA" #x1237)
57 ("ETHIOPIC SYLLABLE SHA" #x1238)
58 ("ETHIOPIC SYLLABLE SHU" #x1239)
59 ("ETHIOPIC SYLLABLE SHI" #x123A)
60 ("ETHIOPIC SYLLABLE SHAA" #x123B)
61 ("ETHIOPIC SYLLABLE SHEE" #x123C)
62 ("ETHIOPIC SYLLABLE SHE" #x123D)
63 ("ETHIOPIC SYLLABLE SHO" #x123E)
64 ("ETHIOPIC SYLLABLE SHWA" #x123F)
65 ("ETHIOPIC SYLLABLE QA" #x1240)
66 ("ETHIOPIC SYLLABLE QU" #x1241)
67 ("ETHIOPIC SYLLABLE QI" #x1242)
68 ("ETHIOPIC SYLLABLE QAA" #x1243)
69 ("ETHIOPIC SYLLABLE QEE" #x1244)
70 ("ETHIOPIC SYLLABLE QE" #x1245)
71 ("ETHIOPIC SYLLABLE QO" #x1246)
72 ("ETHIOPIC SYLLABLE QWA" #x1248)
73 ("ETHIOPIC SYLLABLE QWI" #x124A)
74 ("ETHIOPIC SYLLABLE QWAA" #x124B)
75 ("ETHIOPIC SYLLABLE QWEE" #x124C)
76 ("ETHIOPIC SYLLABLE QWE" #x124D)
77 ("ETHIOPIC SYLLABLE QHA" #x1250)
78 ("ETHIOPIC SYLLABLE QHU" #x1251)
79 ("ETHIOPIC SYLLABLE QHI" #x1252)
80 ("ETHIOPIC SYLLABLE QHAA" #x1253)
81 ("ETHIOPIC SYLLABLE QHEE" #x1254)
82 ("ETHIOPIC SYLLABLE QHE" #x1255)
83 ("ETHIOPIC SYLLABLE QHO" #x1256)
84 ("ETHIOPIC SYLLABLE QHWA" #x1258)
85 ("ETHIOPIC SYLLABLE QHWI" #x125A)
86 ("ETHIOPIC SYLLABLE QHWAA" #x125B)
87 ("ETHIOPIC SYLLABLE QHWEE" #x125C)
88 ("ETHIOPIC SYLLABLE QHWE" #x125D)
89 ("ETHIOPIC SYLLABLE BA" #x1260)
90 ("ETHIOPIC SYLLABLE BU" #x1261)
91 ("ETHIOPIC SYLLABLE BI" #x1262)
92 ("ETHIOPIC SYLLABLE BAA" #x1263)
93 ("ETHIOPIC SYLLABLE BEE" #x1264)
94 ("ETHIOPIC SYLLABLE BE" #x1265)
95 ("ETHIOPIC SYLLABLE BO" #x1266)
96 ("ETHIOPIC SYLLABLE BWA" #x1267)
97 ("ETHIOPIC SYLLABLE VA" #x1268)
98 ("ETHIOPIC SYLLABLE VU" #x1269)
99 ("ETHIOPIC SYLLABLE VI" #x126A)
100 ("ETHIOPIC SYLLABLE VAA" #x126B)
101 ("ETHIOPIC SYLLABLE VEE" #x126C)
102 ("ETHIOPIC SYLLABLE VE" #x126D)
103 ("ETHIOPIC SYLLABLE VO" #x126E)
104 ("ETHIOPIC SYLLABLE VWA" #x126F)
105 ("ETHIOPIC SYLLABLE TA" #x1270)
106 ("ETHIOPIC SYLLABLE TU" #x1271)
107 ("ETHIOPIC SYLLABLE TI" #x1272)
108 ("ETHIOPIC SYLLABLE TAA" #x1273)
109 ("ETHIOPIC SYLLABLE TEE" #x1274)
110 ("ETHIOPIC SYLLABLE TE" #x1275)
111 ("ETHIOPIC SYLLABLE TO" #x1276)
112 ("ETHIOPIC SYLLABLE TWA" #x1277)
113 ("ETHIOPIC SYLLABLE CA" #x1278)
114 ("ETHIOPIC SYLLABLE CU" #x1279)
115 ("ETHIOPIC SYLLABLE CI" #x127A)
116 ("ETHIOPIC SYLLABLE CAA" #x127B)
117 ("ETHIOPIC SYLLABLE CEE" #x127C)
118 ("ETHIOPIC SYLLABLE CE" #x127D)
119 ("ETHIOPIC SYLLABLE CO" #x127E)
120 ("ETHIOPIC SYLLABLE CWA" #x127F)
121 ("ETHIOPIC SYLLABLE XA" #x1280)
122 ("ETHIOPIC SYLLABLE XU" #x1281)
123 ("ETHIOPIC SYLLABLE XI" #x1282)
124 ("ETHIOPIC SYLLABLE XAA" #x1283)
125 ("ETHIOPIC SYLLABLE XEE" #x1284)
126 ("ETHIOPIC SYLLABLE XE" #x1285)
127 ("ETHIOPIC SYLLABLE XO" #x1286)
128 ("ETHIOPIC SYLLABLE XWA" #x1288)
129 ("ETHIOPIC SYLLABLE XWI" #x128A)
130 ("ETHIOPIC SYLLABLE XWAA" #x128B)
131 ("ETHIOPIC SYLLABLE XWEE" #x128C)
132 ("ETHIOPIC SYLLABLE XWE" #x128D)
133 ("ETHIOPIC SYLLABLE NA" #x1290)
134 ("ETHIOPIC SYLLABLE NU" #x1291)
135 ("ETHIOPIC SYLLABLE NI" #x1292)
136 ("ETHIOPIC SYLLABLE NAA" #x1293)
137 ("ETHIOPIC SYLLABLE NEE" #x1294)
138 ("ETHIOPIC SYLLABLE NE" #x1295)
139 ("ETHIOPIC SYLLABLE NO" #x1296)
140 ("ETHIOPIC SYLLABLE NWA" #x1297)
141 ("ETHIOPIC SYLLABLE NYA" #x1298)
142 ("ETHIOPIC SYLLABLE NYU" #x1299)
143 ("ETHIOPIC SYLLABLE NYI" #x129A)
144 ("ETHIOPIC SYLLABLE NYAA" #x129B)
145 ("ETHIOPIC SYLLABLE NYEE" #x129C)
146 ("ETHIOPIC SYLLABLE NYE" #x129D)
147 ("ETHIOPIC SYLLABLE NYO" #x129E)
148 ("ETHIOPIC SYLLABLE NYWA" #x129F)
149 ("ETHIOPIC SYLLABLE GLOTTAL A" #x12A0)
150 ("ETHIOPIC SYLLABLE GLOTTAL U" #x12A1)
151 ("ETHIOPIC SYLLABLE GLOTTAL I" #x12A2)
152 ("ETHIOPIC SYLLABLE GLOTTAL AA" #x12A3)
153 ("ETHIOPIC SYLLABLE GLOTTAL EE" #x12A4)
154 ("ETHIOPIC SYLLABLE GLOTTAL E" #x12A5)
155 ("ETHIOPIC SYLLABLE GLOTTAL O" #x12A6)
156 ("ETHIOPIC SYLLABLE GLOTTAL WA" #x12A7)
157 ("ETHIOPIC SYLLABLE KA" #x12A8)
158 ("ETHIOPIC SYLLABLE KU" #x12A9)
159 ("ETHIOPIC SYLLABLE KI" #x12AA)
160 ("ETHIOPIC SYLLABLE KAA" #x12AB)
161 ("ETHIOPIC SYLLABLE KEE" #x12AC)
162 ("ETHIOPIC SYLLABLE KE" #x12AD)
163 ("ETHIOPIC SYLLABLE KO" #x12AE)
164 ("ETHIOPIC SYLLABLE KWA" #x12B0)
165 ("ETHIOPIC SYLLABLE KWI" #x12B2)
166 ("ETHIOPIC SYLLABLE KWAA" #x12B3)
167 ("ETHIOPIC SYLLABLE KWEE" #x12B4)
168 ("ETHIOPIC SYLLABLE KWE" #x12B5)
169 ("ETHIOPIC SYLLABLE KXA" #x12B8)
170 ("ETHIOPIC SYLLABLE KXU" #x12B9)
171 ("ETHIOPIC SYLLABLE KXI" #x12BA)
172 ("ETHIOPIC SYLLABLE KXAA" #x12BB)
173 ("ETHIOPIC SYLLABLE KXEE" #x12BC)
174 ("ETHIOPIC SYLLABLE KXE" #x12BD)
175 ("ETHIOPIC SYLLABLE KXO" #x12BE)
176 ("ETHIOPIC SYLLABLE KXWA" #x12C0)
177 ("ETHIOPIC SYLLABLE KXWI" #x12C2)
178 ("ETHIOPIC SYLLABLE KXWAA" #x12C3)
179 ("ETHIOPIC SYLLABLE KXWEE" #x12C4)
180 ("ETHIOPIC SYLLABLE KXWE" #x12C5)
181 ("ETHIOPIC SYLLABLE WA" #x12C8)
182 ("ETHIOPIC SYLLABLE WU" #x12C9)
183 ("ETHIOPIC SYLLABLE WI" #x12CA)
184 ("ETHIOPIC SYLLABLE WAA" #x12CB)
185 ("ETHIOPIC SYLLABLE WEE" #x12CC)
186 ("ETHIOPIC SYLLABLE WE" #x12CD)
187 ("ETHIOPIC SYLLABLE WO" #x12CE)
188 ("ETHIOPIC SYLLABLE PHARYNGEAL A" #x12D0)
189 ("ETHIOPIC SYLLABLE PHARYNGEAL U" #x12D1)
190 ("ETHIOPIC SYLLABLE PHARYNGEAL I" #x12D2)
191 ("ETHIOPIC SYLLABLE PHARYNGEAL AA" #x12D3)
192 ("ETHIOPIC SYLLABLE PHARYNGEAL EE" #x12D4)
193 ("ETHIOPIC SYLLABLE PHARYNGEAL E" #x12D5)
194 ("ETHIOPIC SYLLABLE PHARYNGEAL O" #x12D6)
195 ("ETHIOPIC SYLLABLE ZA" #x12D8)
196 ("ETHIOPIC SYLLABLE ZU" #x12D9)
197 ("ETHIOPIC SYLLABLE ZI" #x12DA)
198 ("ETHIOPIC SYLLABLE ZAA" #x12DB)
199 ("ETHIOPIC SYLLABLE ZEE" #x12DC)
200 ("ETHIOPIC SYLLABLE ZE" #x12DD)
201 ("ETHIOPIC SYLLABLE ZO" #x12DE)
202 ("ETHIOPIC SYLLABLE ZWA" #x12DF)
203 ("ETHIOPIC SYLLABLE ZHA" #x12E0)
204 ("ETHIOPIC SYLLABLE ZHU" #x12E1)
205 ("ETHIOPIC SYLLABLE ZHI" #x12E2)
206 ("ETHIOPIC SYLLABLE ZHAA" #x12E3)
207 ("ETHIOPIC SYLLABLE ZHEE" #x12E4)
208 ("ETHIOPIC SYLLABLE ZHE" #x12E5)
209 ("ETHIOPIC SYLLABLE ZHO" #x12E6)
210 ("ETHIOPIC SYLLABLE ZHWA" #x12E7)
211 ("ETHIOPIC SYLLABLE YA" #x12E8)
212 ("ETHIOPIC SYLLABLE YU" #x12E9)
213 ("ETHIOPIC SYLLABLE YI" #x12EA)
214 ("ETHIOPIC SYLLABLE YAA" #x12EB)
215 ("ETHIOPIC SYLLABLE YEE" #x12EC)
216 ("ETHIOPIC SYLLABLE YE" #x12ED)
217 ("ETHIOPIC SYLLABLE YO" #x12EE)
218 ("ETHIOPIC SYLLABLE DA" #x12F0)
219 ("ETHIOPIC SYLLABLE DU" #x12F1)
220 ("ETHIOPIC SYLLABLE DI" #x12F2)
221 ("ETHIOPIC SYLLABLE DAA" #x12F3)
222 ("ETHIOPIC SYLLABLE DEE" #x12F4)
223 ("ETHIOPIC SYLLABLE DE" #x12F5)
224 ("ETHIOPIC SYLLABLE DO" #x12F6)
225 ("ETHIOPIC SYLLABLE DWA" #x12F7)
226 ("ETHIOPIC SYLLABLE DDA" #x12F8)
227 ("ETHIOPIC SYLLABLE DDU" #x12F9)
228 ("ETHIOPIC SYLLABLE DDI" #x12FA)
229 ("ETHIOPIC SYLLABLE DDAA" #x12FB)
230 ("ETHIOPIC SYLLABLE DDEE" #x12FC)
231 ("ETHIOPIC SYLLABLE DDE" #x12FD)
232 ("ETHIOPIC SYLLABLE DDO" #x12FE)
233 ("ETHIOPIC SYLLABLE DDWA" #x12FF)
234 ("ETHIOPIC SYLLABLE JA" #x1300)
235 ("ETHIOPIC SYLLABLE JU" #x1301)
236 ("ETHIOPIC SYLLABLE JI" #x1302)
237 ("ETHIOPIC SYLLABLE JAA" #x1303)
238 ("ETHIOPIC SYLLABLE JEE" #x1304)
239 ("ETHIOPIC SYLLABLE JE" #x1305)
240 ("ETHIOPIC SYLLABLE JO" #x1306)
241 ("ETHIOPIC SYLLABLE JWA" #x1307)
242 ("ETHIOPIC SYLLABLE GA" #x1308)
243 ("ETHIOPIC SYLLABLE GU" #x1309)
244 ("ETHIOPIC SYLLABLE GI" #x130A)
245 ("ETHIOPIC SYLLABLE GAA" #x130B)
246 ("ETHIOPIC SYLLABLE GEE" #x130C)
247 ("ETHIOPIC SYLLABLE GE" #x130D)
248 ("ETHIOPIC SYLLABLE GO" #x130E)
249 ("ETHIOPIC SYLLABLE GWA" #x1310)
250 ("ETHIOPIC SYLLABLE GWI" #x1312)
251 ("ETHIOPIC SYLLABLE GWAA" #x1313)
252 ("ETHIOPIC SYLLABLE GWEE" #x1314)
253 ("ETHIOPIC SYLLABLE GWE" #x1315)
254 ("ETHIOPIC SYLLABLE GGA" #x1318)
255 ("ETHIOPIC SYLLABLE GGU" #x1319)
256 ("ETHIOPIC SYLLABLE GGI" #x131A)
257 ("ETHIOPIC SYLLABLE GGAA" #x131B)
258 ("ETHIOPIC SYLLABLE GGEE" #x131C)
259 ("ETHIOPIC SYLLABLE GGE" #x131D)
260 ("ETHIOPIC SYLLABLE GGO" #x131E)
261 ("ETHIOPIC SYLLABLE THA" #x1320)
262 ("ETHIOPIC SYLLABLE THU" #x1321)
263 ("ETHIOPIC SYLLABLE THI" #x1322)
264 ("ETHIOPIC SYLLABLE THAA" #x1323)
265 ("ETHIOPIC SYLLABLE THEE" #x1324)
266 ("ETHIOPIC SYLLABLE THE" #x1325)
267 ("ETHIOPIC SYLLABLE THO" #x1326)
268 ("ETHIOPIC SYLLABLE THWA" #x1327)
269 ("ETHIOPIC SYLLABLE CHA" #x1328)
270 ("ETHIOPIC SYLLABLE CHU" #x1329)
271 ("ETHIOPIC SYLLABLE CHI" #x132A)
272 ("ETHIOPIC SYLLABLE CHAA" #x132B)
273 ("ETHIOPIC SYLLABLE CHEE" #x132C)
274 ("ETHIOPIC SYLLABLE CHE" #x132D)
275 ("ETHIOPIC SYLLABLE CHO" #x132E)
276 ("ETHIOPIC SYLLABLE CHWA" #x132F)
277 ("ETHIOPIC SYLLABLE PHA" #x1330)
278 ("ETHIOPIC SYLLABLE PHU" #x1331)
279 ("ETHIOPIC SYLLABLE PHI" #x1332)
280 ("ETHIOPIC SYLLABLE PHAA" #x1333)
281 ("ETHIOPIC SYLLABLE PHEE" #x1334)
282 ("ETHIOPIC SYLLABLE PHE" #x1335)
283 ("ETHIOPIC SYLLABLE PHO" #x1336)
284 ("ETHIOPIC SYLLABLE PHWA" #x1337)
285 ("ETHIOPIC SYLLABLE TSA" #x1338)
286 ("ETHIOPIC SYLLABLE TSU" #x1339)
287 ("ETHIOPIC SYLLABLE TSI" #x133A)
288 ("ETHIOPIC SYLLABLE TSAA" #x133B)
289 ("ETHIOPIC SYLLABLE TSEE" #x133C)
290 ("ETHIOPIC SYLLABLE TSE" #x133D)
291 ("ETHIOPIC SYLLABLE TSO" #x133E)
292 ("ETHIOPIC SYLLABLE TSWA" #x133F)
293 ("ETHIOPIC SYLLABLE TZA" #x1340)
294 ("ETHIOPIC SYLLABLE TZU" #x1341)
295 ("ETHIOPIC SYLLABLE TZI" #x1342)
296 ("ETHIOPIC SYLLABLE TZAA" #x1343)
297 ("ETHIOPIC SYLLABLE TZEE" #x1344)
298 ("ETHIOPIC SYLLABLE TZE" #x1345)
299 ("ETHIOPIC SYLLABLE TZO" #x1346)
300 ("ETHIOPIC SYLLABLE FA" #x1348)
301 ("ETHIOPIC SYLLABLE FU" #x1349)
302 ("ETHIOPIC SYLLABLE FI" #x134A)
303 ("ETHIOPIC SYLLABLE FAA" #x134B)
304 ("ETHIOPIC SYLLABLE FEE" #x134C)
305 ("ETHIOPIC SYLLABLE FE" #x134D)
306 ("ETHIOPIC SYLLABLE FO" #x134E)
307 ("ETHIOPIC SYLLABLE FWA" #x134F)
308 ("ETHIOPIC SYLLABLE PA" #x1350)
309 ("ETHIOPIC SYLLABLE PU" #x1351)
310 ("ETHIOPIC SYLLABLE PI" #x1352)
311 ("ETHIOPIC SYLLABLE PAA" #x1353)
312 ("ETHIOPIC SYLLABLE PEE" #x1354)
313 ("ETHIOPIC SYLLABLE PE" #x1355)
314 ("ETHIOPIC SYLLABLE PO" #x1356)
315 ("ETHIOPIC SYLLABLE PWA" #x1357)
316 ("ETHIOPIC SYLLABLE RYA" #x1358)
317 ("ETHIOPIC SYLLABLE MYA" #x1359)
318 ("ETHIOPIC SYLLABLE FYA" #x135A)
319 ("ETHIOPIC WORDSPACE" #x1361)
320 ("ETHIOPIC FULL STOP" #x1362)
321 ("ETHIOPIC COMMA" #x1363)
322 ("ETHIOPIC SEMICOLON" #x1364)
323 ("ETHIOPIC COLON" #x1365)
324 ("ETHIOPIC PREFACE COLON" #x1366)
325 ("ETHIOPIC QUESTION MARK" #x1367)
326 ("ETHIOPIC PARAGRAPH SEPARATOR" #x1368)
327 ("ETHIOPIC DIGIT ONE" #x1369)
328 ("ETHIOPIC DIGIT TWO" #x136A)
329 ("ETHIOPIC DIGIT THREE" #x136B)
330 ("ETHIOPIC DIGIT FOUR" #x136C)
331 ("ETHIOPIC DIGIT FIVE" #x136D)
332 ("ETHIOPIC DIGIT SIX" #x136E)
333 ("ETHIOPIC DIGIT SEVEN" #x136F)
334 ("ETHIOPIC DIGIT EIGHT" #x1370)
335 ("ETHIOPIC DIGIT NINE" #x1371)
336 ("ETHIOPIC NUMBER TEN" #x1372)
337 ("ETHIOPIC NUMBER TWENTY" #x1373)
338 ("ETHIOPIC NUMBER THIRTY" #x1374)
339 ("ETHIOPIC NUMBER FORTY" #x1375)
340 ("ETHIOPIC NUMBER FIFTY" #x1376)
341 ("ETHIOPIC NUMBER SIXTY" #x1377)
342 ("ETHIOPIC NUMBER SEVENTY" #x1378)
343 ("ETHIOPIC NUMBER EIGHTY" #x1379)
344 ("ETHIOPIC NUMBER NINETY" #x137A)
345 ("ETHIOPIC NUMBER HUNDRED" #x137B)
346 ("ETHIOPIC NUMBER TEN THOUSAND" #x137C)
347 ))
diff --git a/lisp/nxml/char-name/unicode/013A0-013FF.el b/lisp/nxml/char-name/unicode/013A0-013FF.el
new file mode 100644
index 00000000000..74111fb8b09
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/013A0-013FF.el
@@ -0,0 +1,87 @@
1(nxml-define-char-name-set 'cherokee
2 '(("CHEROKEE LETTER A" #x13A0)
3 ("CHEROKEE LETTER E" #x13A1)
4 ("CHEROKEE LETTER I" #x13A2)
5 ("CHEROKEE LETTER O" #x13A3)
6 ("CHEROKEE LETTER U" #x13A4)
7 ("CHEROKEE LETTER V" #x13A5)
8 ("CHEROKEE LETTER GA" #x13A6)
9 ("CHEROKEE LETTER KA" #x13A7)
10 ("CHEROKEE LETTER GE" #x13A8)
11 ("CHEROKEE LETTER GI" #x13A9)
12 ("CHEROKEE LETTER GO" #x13AA)
13 ("CHEROKEE LETTER GU" #x13AB)
14 ("CHEROKEE LETTER GV" #x13AC)
15 ("CHEROKEE LETTER HA" #x13AD)
16 ("CHEROKEE LETTER HE" #x13AE)
17 ("CHEROKEE LETTER HI" #x13AF)
18 ("CHEROKEE LETTER HO" #x13B0)
19 ("CHEROKEE LETTER HU" #x13B1)
20 ("CHEROKEE LETTER HV" #x13B2)
21 ("CHEROKEE LETTER LA" #x13B3)
22 ("CHEROKEE LETTER LE" #x13B4)
23 ("CHEROKEE LETTER LI" #x13B5)
24 ("CHEROKEE LETTER LO" #x13B6)
25 ("CHEROKEE LETTER LU" #x13B7)
26 ("CHEROKEE LETTER LV" #x13B8)
27 ("CHEROKEE LETTER MA" #x13B9)
28 ("CHEROKEE LETTER ME" #x13BA)
29 ("CHEROKEE LETTER MI" #x13BB)
30 ("CHEROKEE LETTER MO" #x13BC)
31 ("CHEROKEE LETTER MU" #x13BD)
32 ("CHEROKEE LETTER NA" #x13BE)
33 ("CHEROKEE LETTER HNA" #x13BF)
34 ("CHEROKEE LETTER NAH" #x13C0)
35 ("CHEROKEE LETTER NE" #x13C1)
36 ("CHEROKEE LETTER NI" #x13C2)
37 ("CHEROKEE LETTER NO" #x13C3)
38 ("CHEROKEE LETTER NU" #x13C4)
39 ("CHEROKEE LETTER NV" #x13C5)
40 ("CHEROKEE LETTER QUA" #x13C6)
41 ("CHEROKEE LETTER QUE" #x13C7)
42 ("CHEROKEE LETTER QUI" #x13C8)
43 ("CHEROKEE LETTER QUO" #x13C9)
44 ("CHEROKEE LETTER QUU" #x13CA)
45 ("CHEROKEE LETTER QUV" #x13CB)
46 ("CHEROKEE LETTER SA" #x13CC)
47 ("CHEROKEE LETTER S" #x13CD)
48 ("CHEROKEE LETTER SE" #x13CE)
49 ("CHEROKEE LETTER SI" #x13CF)
50 ("CHEROKEE LETTER SO" #x13D0)
51 ("CHEROKEE LETTER SU" #x13D1)
52 ("CHEROKEE LETTER SV" #x13D2)
53 ("CHEROKEE LETTER DA" #x13D3)
54 ("CHEROKEE LETTER TA" #x13D4)
55 ("CHEROKEE LETTER DE" #x13D5)
56 ("CHEROKEE LETTER TE" #x13D6)
57 ("CHEROKEE LETTER DI" #x13D7)
58 ("CHEROKEE LETTER TI" #x13D8)
59 ("CHEROKEE LETTER DO" #x13D9)
60 ("CHEROKEE LETTER DU" #x13DA)
61 ("CHEROKEE LETTER DV" #x13DB)
62 ("CHEROKEE LETTER DLA" #x13DC)
63 ("CHEROKEE LETTER TLA" #x13DD)
64 ("CHEROKEE LETTER TLE" #x13DE)
65 ("CHEROKEE LETTER TLI" #x13DF)
66 ("CHEROKEE LETTER TLO" #x13E0)
67 ("CHEROKEE LETTER TLU" #x13E1)
68 ("CHEROKEE LETTER TLV" #x13E2)
69 ("CHEROKEE LETTER TSA" #x13E3)
70 ("CHEROKEE LETTER TSE" #x13E4)
71 ("CHEROKEE LETTER TSI" #x13E5)
72 ("CHEROKEE LETTER TSO" #x13E6)
73 ("CHEROKEE LETTER TSU" #x13E7)
74 ("CHEROKEE LETTER TSV" #x13E8)
75 ("CHEROKEE LETTER WA" #x13E9)
76 ("CHEROKEE LETTER WE" #x13EA)
77 ("CHEROKEE LETTER WI" #x13EB)
78 ("CHEROKEE LETTER WO" #x13EC)
79 ("CHEROKEE LETTER WU" #x13ED)
80 ("CHEROKEE LETTER WV" #x13EE)
81 ("CHEROKEE LETTER YA" #x13EF)
82 ("CHEROKEE LETTER YE" #x13F0)
83 ("CHEROKEE LETTER YI" #x13F1)
84 ("CHEROKEE LETTER YO" #x13F2)
85 ("CHEROKEE LETTER YU" #x13F3)
86 ("CHEROKEE LETTER YV" #x13F4)
87 ))
diff --git a/lisp/nxml/char-name/unicode/01400-0167F.el b/lisp/nxml/char-name/unicode/01400-0167F.el
new file mode 100644
index 00000000000..644b2552d00
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/01400-0167F.el
@@ -0,0 +1,632 @@
1(nxml-define-char-name-set 'unified-canadian-aboriginal-syllabics
2 '(("CANADIAN SYLLABICS E" #x1401)
3 ("CANADIAN SYLLABICS AAI" #x1402)
4 ("CANADIAN SYLLABICS I" #x1403)
5 ("CANADIAN SYLLABICS II" #x1404)
6 ("CANADIAN SYLLABICS O" #x1405)
7 ("CANADIAN SYLLABICS OO" #x1406)
8 ("CANADIAN SYLLABICS Y-CREE OO" #x1407)
9 ("CANADIAN SYLLABICS CARRIER EE" #x1408)
10 ("CANADIAN SYLLABICS CARRIER I" #x1409)
11 ("CANADIAN SYLLABICS A" #x140A)
12 ("CANADIAN SYLLABICS AA" #x140B)
13 ("CANADIAN SYLLABICS WE" #x140C)
14 ("CANADIAN SYLLABICS WEST-CREE WE" #x140D)
15 ("CANADIAN SYLLABICS WI" #x140E)
16 ("CANADIAN SYLLABICS WEST-CREE WI" #x140F)
17 ("CANADIAN SYLLABICS WII" #x1410)
18 ("CANADIAN SYLLABICS WEST-CREE WII" #x1411)
19 ("CANADIAN SYLLABICS WO" #x1412)
20 ("CANADIAN SYLLABICS WEST-CREE WO" #x1413)
21 ("CANADIAN SYLLABICS WOO" #x1414)
22 ("CANADIAN SYLLABICS WEST-CREE WOO" #x1415)
23 ("CANADIAN SYLLABICS NASKAPI WOO" #x1416)
24 ("CANADIAN SYLLABICS WA" #x1417)
25 ("CANADIAN SYLLABICS WEST-CREE WA" #x1418)
26 ("CANADIAN SYLLABICS WAA" #x1419)
27 ("CANADIAN SYLLABICS WEST-CREE WAA" #x141A)
28 ("CANADIAN SYLLABICS NASKAPI WAA" #x141B)
29 ("CANADIAN SYLLABICS AI" #x141C)
30 ("CANADIAN SYLLABICS Y-CREE W" #x141D)
31 ("CANADIAN SYLLABICS GLOTTAL STOP" #x141E)
32 ("CANADIAN SYLLABICS FINAL ACUTE" #x141F)
33 ("CANADIAN SYLLABICS FINAL GRAVE" #x1420)
34 ("CANADIAN SYLLABICS FINAL BOTTOM HALF RING" #x1421)
35 ("CANADIAN SYLLABICS FINAL TOP HALF RING" #x1422)
36 ("CANADIAN SYLLABICS FINAL RIGHT HALF RING" #x1423)
37 ("CANADIAN SYLLABICS FINAL RING" #x1424)
38 ("CANADIAN SYLLABICS FINAL DOUBLE ACUTE" #x1425)
39 ("CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES" #x1426)
40 ("CANADIAN SYLLABICS FINAL MIDDLE DOT" #x1427)
41 ("CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE" #x1428)
42 ("CANADIAN SYLLABICS FINAL PLUS" #x1429)
43 ("CANADIAN SYLLABICS FINAL DOWN TACK" #x142A)
44 ("CANADIAN SYLLABICS EN" #x142B)
45 ("CANADIAN SYLLABICS IN" #x142C)
46 ("CANADIAN SYLLABICS ON" #x142D)
47 ("CANADIAN SYLLABICS AN" #x142E)
48 ("CANADIAN SYLLABICS PE" #x142F)
49 ("CANADIAN SYLLABICS PAAI" #x1430)
50 ("CANADIAN SYLLABICS PI" #x1431)
51 ("CANADIAN SYLLABICS PII" #x1432)
52 ("CANADIAN SYLLABICS PO" #x1433)
53 ("CANADIAN SYLLABICS POO" #x1434)
54 ("CANADIAN SYLLABICS Y-CREE POO" #x1435)
55 ("CANADIAN SYLLABICS CARRIER HEE" #x1436)
56 ("CANADIAN SYLLABICS CARRIER HI" #x1437)
57 ("CANADIAN SYLLABICS PA" #x1438)
58 ("CANADIAN SYLLABICS PAA" #x1439)
59 ("CANADIAN SYLLABICS PWE" #x143A)
60 ("CANADIAN SYLLABICS WEST-CREE PWE" #x143B)
61 ("CANADIAN SYLLABICS PWI" #x143C)
62 ("CANADIAN SYLLABICS WEST-CREE PWI" #x143D)
63 ("CANADIAN SYLLABICS PWII" #x143E)
64 ("CANADIAN SYLLABICS WEST-CREE PWII" #x143F)
65 ("CANADIAN SYLLABICS PWO" #x1440)
66 ("CANADIAN SYLLABICS WEST-CREE PWO" #x1441)
67 ("CANADIAN SYLLABICS PWOO" #x1442)
68 ("CANADIAN SYLLABICS WEST-CREE PWOO" #x1443)
69 ("CANADIAN SYLLABICS PWA" #x1444)
70 ("CANADIAN SYLLABICS WEST-CREE PWA" #x1445)
71 ("CANADIAN SYLLABICS PWAA" #x1446)
72 ("CANADIAN SYLLABICS WEST-CREE PWAA" #x1447)
73 ("CANADIAN SYLLABICS Y-CREE PWAA" #x1448)
74 ("CANADIAN SYLLABICS P" #x1449)
75 ("CANADIAN SYLLABICS WEST-CREE P" #x144A)
76 ("CANADIAN SYLLABICS CARRIER H" #x144B)
77 ("CANADIAN SYLLABICS TE" #x144C)
78 ("CANADIAN SYLLABICS TAAI" #x144D)
79 ("CANADIAN SYLLABICS TI" #x144E)
80 ("CANADIAN SYLLABICS TII" #x144F)
81 ("CANADIAN SYLLABICS TO" #x1450)
82 ("CANADIAN SYLLABICS TOO" #x1451)
83 ("CANADIAN SYLLABICS Y-CREE TOO" #x1452)
84 ("CANADIAN SYLLABICS CARRIER DEE" #x1453)
85 ("CANADIAN SYLLABICS CARRIER DI" #x1454)
86 ("CANADIAN SYLLABICS TA" #x1455)
87 ("CANADIAN SYLLABICS TAA" #x1456)
88 ("CANADIAN SYLLABICS TWE" #x1457)
89 ("CANADIAN SYLLABICS WEST-CREE TWE" #x1458)
90 ("CANADIAN SYLLABICS TWI" #x1459)
91 ("CANADIAN SYLLABICS WEST-CREE TWI" #x145A)
92 ("CANADIAN SYLLABICS TWII" #x145B)
93 ("CANADIAN SYLLABICS WEST-CREE TWII" #x145C)
94 ("CANADIAN SYLLABICS TWO" #x145D)
95 ("CANADIAN SYLLABICS WEST-CREE TWO" #x145E)
96 ("CANADIAN SYLLABICS TWOO" #x145F)
97 ("CANADIAN SYLLABICS WEST-CREE TWOO" #x1460)
98 ("CANADIAN SYLLABICS TWA" #x1461)
99 ("CANADIAN SYLLABICS WEST-CREE TWA" #x1462)
100 ("CANADIAN SYLLABICS TWAA" #x1463)
101 ("CANADIAN SYLLABICS WEST-CREE TWAA" #x1464)
102 ("CANADIAN SYLLABICS NASKAPI TWAA" #x1465)
103 ("CANADIAN SYLLABICS T" #x1466)
104 ("CANADIAN SYLLABICS TTE" #x1467)
105 ("CANADIAN SYLLABICS TTI" #x1468)
106 ("CANADIAN SYLLABICS TTO" #x1469)
107 ("CANADIAN SYLLABICS TTA" #x146A)
108 ("CANADIAN SYLLABICS KE" #x146B)
109 ("CANADIAN SYLLABICS KAAI" #x146C)
110 ("CANADIAN SYLLABICS KI" #x146D)
111 ("CANADIAN SYLLABICS KII" #x146E)
112 ("CANADIAN SYLLABICS KO" #x146F)
113 ("CANADIAN SYLLABICS KOO" #x1470)
114 ("CANADIAN SYLLABICS Y-CREE KOO" #x1471)
115 ("CANADIAN SYLLABICS KA" #x1472)
116 ("CANADIAN SYLLABICS KAA" #x1473)
117 ("CANADIAN SYLLABICS KWE" #x1474)
118 ("CANADIAN SYLLABICS WEST-CREE KWE" #x1475)
119 ("CANADIAN SYLLABICS KWI" #x1476)
120 ("CANADIAN SYLLABICS WEST-CREE KWI" #x1477)
121 ("CANADIAN SYLLABICS KWII" #x1478)
122 ("CANADIAN SYLLABICS WEST-CREE KWII" #x1479)
123 ("CANADIAN SYLLABICS KWO" #x147A)
124 ("CANADIAN SYLLABICS WEST-CREE KWO" #x147B)
125 ("CANADIAN SYLLABICS KWOO" #x147C)
126 ("CANADIAN SYLLABICS WEST-CREE KWOO" #x147D)
127 ("CANADIAN SYLLABICS KWA" #x147E)
128 ("CANADIAN SYLLABICS WEST-CREE KWA" #x147F)
129 ("CANADIAN SYLLABICS KWAA" #x1480)
130 ("CANADIAN SYLLABICS WEST-CREE KWAA" #x1481)
131 ("CANADIAN SYLLABICS NASKAPI KWAA" #x1482)
132 ("CANADIAN SYLLABICS K" #x1483)
133 ("CANADIAN SYLLABICS KW" #x1484)
134 ("CANADIAN SYLLABICS SOUTH-SLAVEY KEH" #x1485)
135 ("CANADIAN SYLLABICS SOUTH-SLAVEY KIH" #x1486)
136 ("CANADIAN SYLLABICS SOUTH-SLAVEY KOH" #x1487)
137 ("CANADIAN SYLLABICS SOUTH-SLAVEY KAH" #x1488)
138 ("CANADIAN SYLLABICS CE" #x1489)
139 ("CANADIAN SYLLABICS CAAI" #x148A)
140 ("CANADIAN SYLLABICS CI" #x148B)
141 ("CANADIAN SYLLABICS CII" #x148C)
142 ("CANADIAN SYLLABICS CO" #x148D)
143 ("CANADIAN SYLLABICS COO" #x148E)
144 ("CANADIAN SYLLABICS Y-CREE COO" #x148F)
145 ("CANADIAN SYLLABICS CA" #x1490)
146 ("CANADIAN SYLLABICS CAA" #x1491)
147 ("CANADIAN SYLLABICS CWE" #x1492)
148 ("CANADIAN SYLLABICS WEST-CREE CWE" #x1493)
149 ("CANADIAN SYLLABICS CWI" #x1494)
150 ("CANADIAN SYLLABICS WEST-CREE CWI" #x1495)
151 ("CANADIAN SYLLABICS CWII" #x1496)
152 ("CANADIAN SYLLABICS WEST-CREE CWII" #x1497)
153 ("CANADIAN SYLLABICS CWO" #x1498)
154 ("CANADIAN SYLLABICS WEST-CREE CWO" #x1499)
155 ("CANADIAN SYLLABICS CWOO" #x149A)
156 ("CANADIAN SYLLABICS WEST-CREE CWOO" #x149B)
157 ("CANADIAN SYLLABICS CWA" #x149C)
158 ("CANADIAN SYLLABICS WEST-CREE CWA" #x149D)
159 ("CANADIAN SYLLABICS CWAA" #x149E)
160 ("CANADIAN SYLLABICS WEST-CREE CWAA" #x149F)
161 ("CANADIAN SYLLABICS NASKAPI CWAA" #x14A0)
162 ("CANADIAN SYLLABICS C" #x14A1)
163 ("CANADIAN SYLLABICS SAYISI TH" #x14A2)
164 ("CANADIAN SYLLABICS ME" #x14A3)
165 ("CANADIAN SYLLABICS MAAI" #x14A4)
166 ("CANADIAN SYLLABICS MI" #x14A5)
167 ("CANADIAN SYLLABICS MII" #x14A6)
168 ("CANADIAN SYLLABICS MO" #x14A7)
169 ("CANADIAN SYLLABICS MOO" #x14A8)
170 ("CANADIAN SYLLABICS Y-CREE MOO" #x14A9)
171 ("CANADIAN SYLLABICS MA" #x14AA)
172 ("CANADIAN SYLLABICS MAA" #x14AB)
173 ("CANADIAN SYLLABICS MWE" #x14AC)
174 ("CANADIAN SYLLABICS WEST-CREE MWE" #x14AD)
175 ("CANADIAN SYLLABICS MWI" #x14AE)
176 ("CANADIAN SYLLABICS WEST-CREE MWI" #x14AF)
177 ("CANADIAN SYLLABICS MWII" #x14B0)
178 ("CANADIAN SYLLABICS WEST-CREE MWII" #x14B1)
179 ("CANADIAN SYLLABICS MWO" #x14B2)
180 ("CANADIAN SYLLABICS WEST-CREE MWO" #x14B3)
181 ("CANADIAN SYLLABICS MWOO" #x14B4)
182 ("CANADIAN SYLLABICS WEST-CREE MWOO" #x14B5)
183 ("CANADIAN SYLLABICS MWA" #x14B6)
184 ("CANADIAN SYLLABICS WEST-CREE MWA" #x14B7)
185 ("CANADIAN SYLLABICS MWAA" #x14B8)
186 ("CANADIAN SYLLABICS WEST-CREE MWAA" #x14B9)
187 ("CANADIAN SYLLABICS NASKAPI MWAA" #x14BA)
188 ("CANADIAN SYLLABICS M" #x14BB)
189 ("CANADIAN SYLLABICS WEST-CREE M" #x14BC)
190 ("CANADIAN SYLLABICS MH" #x14BD)
191 ("CANADIAN SYLLABICS ATHAPASCAN M" #x14BE)
192 ("CANADIAN SYLLABICS SAYISI M" #x14BF)
193 ("CANADIAN SYLLABICS NE" #x14C0)
194 ("CANADIAN SYLLABICS NAAI" #x14C1)
195 ("CANADIAN SYLLABICS NI" #x14C2)
196 ("CANADIAN SYLLABICS NII" #x14C3)
197 ("CANADIAN SYLLABICS NO" #x14C4)
198 ("CANADIAN SYLLABICS NOO" #x14C5)
199 ("CANADIAN SYLLABICS Y-CREE NOO" #x14C6)
200 ("CANADIAN SYLLABICS NA" #x14C7)
201 ("CANADIAN SYLLABICS NAA" #x14C8)
202 ("CANADIAN SYLLABICS NWE" #x14C9)
203 ("CANADIAN SYLLABICS WEST-CREE NWE" #x14CA)
204 ("CANADIAN SYLLABICS NWA" #x14CB)
205 ("CANADIAN SYLLABICS WEST-CREE NWA" #x14CC)
206 ("CANADIAN SYLLABICS NWAA" #x14CD)
207 ("CANADIAN SYLLABICS WEST-CREE NWAA" #x14CE)
208 ("CANADIAN SYLLABICS NASKAPI NWAA" #x14CF)
209 ("CANADIAN SYLLABICS N" #x14D0)
210 ("CANADIAN SYLLABICS CARRIER NG" #x14D1)
211 ("CANADIAN SYLLABICS NH" #x14D2)
212 ("CANADIAN SYLLABICS LE" #x14D3)
213 ("CANADIAN SYLLABICS LAAI" #x14D4)
214 ("CANADIAN SYLLABICS LI" #x14D5)
215 ("CANADIAN SYLLABICS LII" #x14D6)
216 ("CANADIAN SYLLABICS LO" #x14D7)
217 ("CANADIAN SYLLABICS LOO" #x14D8)
218 ("CANADIAN SYLLABICS Y-CREE LOO" #x14D9)
219 ("CANADIAN SYLLABICS LA" #x14DA)
220 ("CANADIAN SYLLABICS LAA" #x14DB)
221 ("CANADIAN SYLLABICS LWE" #x14DC)
222 ("CANADIAN SYLLABICS WEST-CREE LWE" #x14DD)
223 ("CANADIAN SYLLABICS LWI" #x14DE)
224 ("CANADIAN SYLLABICS WEST-CREE LWI" #x14DF)
225 ("CANADIAN SYLLABICS LWII" #x14E0)
226 ("CANADIAN SYLLABICS WEST-CREE LWII" #x14E1)
227 ("CANADIAN SYLLABICS LWO" #x14E2)
228 ("CANADIAN SYLLABICS WEST-CREE LWO" #x14E3)
229 ("CANADIAN SYLLABICS LWOO" #x14E4)
230 ("CANADIAN SYLLABICS WEST-CREE LWOO" #x14E5)
231 ("CANADIAN SYLLABICS LWA" #x14E6)
232 ("CANADIAN SYLLABICS WEST-CREE LWA" #x14E7)
233 ("CANADIAN SYLLABICS LWAA" #x14E8)
234 ("CANADIAN SYLLABICS WEST-CREE LWAA" #x14E9)
235 ("CANADIAN SYLLABICS L" #x14EA)
236 ("CANADIAN SYLLABICS WEST-CREE L" #x14EB)
237 ("CANADIAN SYLLABICS MEDIAL L" #x14EC)
238 ("CANADIAN SYLLABICS SE" #x14ED)
239 ("CANADIAN SYLLABICS SAAI" #x14EE)
240 ("CANADIAN SYLLABICS SI" #x14EF)
241 ("CANADIAN SYLLABICS SII" #x14F0)
242 ("CANADIAN SYLLABICS SO" #x14F1)
243 ("CANADIAN SYLLABICS SOO" #x14F2)
244 ("CANADIAN SYLLABICS Y-CREE SOO" #x14F3)
245 ("CANADIAN SYLLABICS SA" #x14F4)
246 ("CANADIAN SYLLABICS SAA" #x14F5)
247 ("CANADIAN SYLLABICS SWE" #x14F6)
248 ("CANADIAN SYLLABICS WEST-CREE SWE" #x14F7)
249 ("CANADIAN SYLLABICS SWI" #x14F8)
250 ("CANADIAN SYLLABICS WEST-CREE SWI" #x14F9)
251 ("CANADIAN SYLLABICS SWII" #x14FA)
252 ("CANADIAN SYLLABICS WEST-CREE SWII" #x14FB)
253 ("CANADIAN SYLLABICS SWO" #x14FC)
254 ("CANADIAN SYLLABICS WEST-CREE SWO" #x14FD)
255 ("CANADIAN SYLLABICS SWOO" #x14FE)
256 ("CANADIAN SYLLABICS WEST-CREE SWOO" #x14FF)
257 ("CANADIAN SYLLABICS SWA" #x1500)
258 ("CANADIAN SYLLABICS WEST-CREE SWA" #x1501)
259 ("CANADIAN SYLLABICS SWAA" #x1502)
260 ("CANADIAN SYLLABICS WEST-CREE SWAA" #x1503)
261 ("CANADIAN SYLLABICS NASKAPI SWAA" #x1504)
262 ("CANADIAN SYLLABICS S" #x1505)
263 ("CANADIAN SYLLABICS ATHAPASCAN S" #x1506)
264 ("CANADIAN SYLLABICS SW" #x1507)
265 ("CANADIAN SYLLABICS BLACKFOOT S" #x1508)
266 ("CANADIAN SYLLABICS MOOSE-CREE SK" #x1509)
267 ("CANADIAN SYLLABICS NASKAPI SKW" #x150A)
268 ("CANADIAN SYLLABICS NASKAPI S-W" #x150B)
269 ("CANADIAN SYLLABICS NASKAPI SPWA" #x150C)
270 ("CANADIAN SYLLABICS NASKAPI STWA" #x150D)
271 ("CANADIAN SYLLABICS NASKAPI SKWA" #x150E)
272 ("CANADIAN SYLLABICS NASKAPI SCWA" #x150F)
273 ("CANADIAN SYLLABICS SHE" #x1510)
274 ("CANADIAN SYLLABICS SHI" #x1511)
275 ("CANADIAN SYLLABICS SHII" #x1512)
276 ("CANADIAN SYLLABICS SHO" #x1513)
277 ("CANADIAN SYLLABICS SHOO" #x1514)
278 ("CANADIAN SYLLABICS SHA" #x1515)
279 ("CANADIAN SYLLABICS SHAA" #x1516)
280 ("CANADIAN SYLLABICS SHWE" #x1517)
281 ("CANADIAN SYLLABICS WEST-CREE SHWE" #x1518)
282 ("CANADIAN SYLLABICS SHWI" #x1519)
283 ("CANADIAN SYLLABICS WEST-CREE SHWI" #x151A)
284 ("CANADIAN SYLLABICS SHWII" #x151B)
285 ("CANADIAN SYLLABICS WEST-CREE SHWII" #x151C)
286 ("CANADIAN SYLLABICS SHWO" #x151D)
287 ("CANADIAN SYLLABICS WEST-CREE SHWO" #x151E)
288 ("CANADIAN SYLLABICS SHWOO" #x151F)
289 ("CANADIAN SYLLABICS WEST-CREE SHWOO" #x1520)
290 ("CANADIAN SYLLABICS SHWA" #x1521)
291 ("CANADIAN SYLLABICS WEST-CREE SHWA" #x1522)
292 ("CANADIAN SYLLABICS SHWAA" #x1523)
293 ("CANADIAN SYLLABICS WEST-CREE SHWAA" #x1524)
294 ("CANADIAN SYLLABICS SH" #x1525)
295 ("CANADIAN SYLLABICS YE" #x1526)
296 ("CANADIAN SYLLABICS YAAI" #x1527)
297 ("CANADIAN SYLLABICS YI" #x1528)
298 ("CANADIAN SYLLABICS YII" #x1529)
299 ("CANADIAN SYLLABICS YO" #x152A)
300 ("CANADIAN SYLLABICS YOO" #x152B)
301 ("CANADIAN SYLLABICS Y-CREE YOO" #x152C)
302 ("CANADIAN SYLLABICS YA" #x152D)
303 ("CANADIAN SYLLABICS YAA" #x152E)
304 ("CANADIAN SYLLABICS YWE" #x152F)
305 ("CANADIAN SYLLABICS WEST-CREE YWE" #x1530)
306 ("CANADIAN SYLLABICS YWI" #x1531)
307 ("CANADIAN SYLLABICS WEST-CREE YWI" #x1532)
308 ("CANADIAN SYLLABICS YWII" #x1533)
309 ("CANADIAN SYLLABICS WEST-CREE YWII" #x1534)
310 ("CANADIAN SYLLABICS YWO" #x1535)
311 ("CANADIAN SYLLABICS WEST-CREE YWO" #x1536)
312 ("CANADIAN SYLLABICS YWOO" #x1537)
313 ("CANADIAN SYLLABICS WEST-CREE YWOO" #x1538)
314 ("CANADIAN SYLLABICS YWA" #x1539)
315 ("CANADIAN SYLLABICS WEST-CREE YWA" #x153A)
316 ("CANADIAN SYLLABICS YWAA" #x153B)
317 ("CANADIAN SYLLABICS WEST-CREE YWAA" #x153C)
318 ("CANADIAN SYLLABICS NASKAPI YWAA" #x153D)
319 ("CANADIAN SYLLABICS Y" #x153E)
320 ("CANADIAN SYLLABICS BIBLE-CREE Y" #x153F)
321 ("CANADIAN SYLLABICS WEST-CREE Y" #x1540)
322 ("CANADIAN SYLLABICS SAYISI YI" #x1541)
323 ("CANADIAN SYLLABICS RE" #x1542)
324 ("CANADIAN SYLLABICS R-CREE RE" #x1543)
325 ("CANADIAN SYLLABICS WEST-CREE LE" #x1544)
326 ("CANADIAN SYLLABICS RAAI" #x1545)
327 ("CANADIAN SYLLABICS RI" #x1546)
328 ("CANADIAN SYLLABICS RII" #x1547)
329 ("CANADIAN SYLLABICS RO" #x1548)
330 ("CANADIAN SYLLABICS ROO" #x1549)
331 ("CANADIAN SYLLABICS WEST-CREE LO" #x154A)
332 ("CANADIAN SYLLABICS RA" #x154B)
333 ("CANADIAN SYLLABICS RAA" #x154C)
334 ("CANADIAN SYLLABICS WEST-CREE LA" #x154D)
335 ("CANADIAN SYLLABICS RWAA" #x154E)
336 ("CANADIAN SYLLABICS WEST-CREE RWAA" #x154F)
337 ("CANADIAN SYLLABICS R" #x1550)
338 ("CANADIAN SYLLABICS WEST-CREE R" #x1551)
339 ("CANADIAN SYLLABICS MEDIAL R" #x1552)
340 ("CANADIAN SYLLABICS FE" #x1553)
341 ("CANADIAN SYLLABICS FAAI" #x1554)
342 ("CANADIAN SYLLABICS FI" #x1555)
343 ("CANADIAN SYLLABICS FII" #x1556)
344 ("CANADIAN SYLLABICS FO" #x1557)
345 ("CANADIAN SYLLABICS FOO" #x1558)
346 ("CANADIAN SYLLABICS FA" #x1559)
347 ("CANADIAN SYLLABICS FAA" #x155A)
348 ("CANADIAN SYLLABICS FWAA" #x155B)
349 ("CANADIAN SYLLABICS WEST-CREE FWAA" #x155C)
350 ("CANADIAN SYLLABICS F" #x155D)
351 ("CANADIAN SYLLABICS THE" #x155E)
352 ("CANADIAN SYLLABICS N-CREE THE" #x155F)
353 ("CANADIAN SYLLABICS THI" #x1560)
354 ("CANADIAN SYLLABICS N-CREE THI" #x1561)
355 ("CANADIAN SYLLABICS THII" #x1562)
356 ("CANADIAN SYLLABICS N-CREE THII" #x1563)
357 ("CANADIAN SYLLABICS THO" #x1564)
358 ("CANADIAN SYLLABICS THOO" #x1565)
359 ("CANADIAN SYLLABICS THA" #x1566)
360 ("CANADIAN SYLLABICS THAA" #x1567)
361 ("CANADIAN SYLLABICS THWAA" #x1568)
362 ("CANADIAN SYLLABICS WEST-CREE THWAA" #x1569)
363 ("CANADIAN SYLLABICS TH" #x156A)
364 ("CANADIAN SYLLABICS TTHE" #x156B)
365 ("CANADIAN SYLLABICS TTHI" #x156C)
366 ("CANADIAN SYLLABICS TTHO" #x156D)
367 ("CANADIAN SYLLABICS TTHA" #x156E)
368 ("CANADIAN SYLLABICS TTH" #x156F)
369 ("CANADIAN SYLLABICS TYE" #x1570)
370 ("CANADIAN SYLLABICS TYI" #x1571)
371 ("CANADIAN SYLLABICS TYO" #x1572)
372 ("CANADIAN SYLLABICS TYA" #x1573)
373 ("CANADIAN SYLLABICS NUNAVIK HE" #x1574)
374 ("CANADIAN SYLLABICS NUNAVIK HI" #x1575)
375 ("CANADIAN SYLLABICS NUNAVIK HII" #x1576)
376 ("CANADIAN SYLLABICS NUNAVIK HO" #x1577)
377 ("CANADIAN SYLLABICS NUNAVIK HOO" #x1578)
378 ("CANADIAN SYLLABICS NUNAVIK HA" #x1579)
379 ("CANADIAN SYLLABICS NUNAVIK HAA" #x157A)
380 ("CANADIAN SYLLABICS NUNAVIK H" #x157B)
381 ("CANADIAN SYLLABICS NUNAVUT H" #x157C)
382 ("CANADIAN SYLLABICS HK" #x157D)
383 ("CANADIAN SYLLABICS QAAI" #x157E)
384 ("CANADIAN SYLLABICS QI" #x157F)
385 ("CANADIAN SYLLABICS QII" #x1580)
386 ("CANADIAN SYLLABICS QO" #x1581)
387 ("CANADIAN SYLLABICS QOO" #x1582)
388 ("CANADIAN SYLLABICS QA" #x1583)
389 ("CANADIAN SYLLABICS QAA" #x1584)
390 ("CANADIAN SYLLABICS Q" #x1585)
391 ("CANADIAN SYLLABICS TLHE" #x1586)
392 ("CANADIAN SYLLABICS TLHI" #x1587)
393 ("CANADIAN SYLLABICS TLHO" #x1588)
394 ("CANADIAN SYLLABICS TLHA" #x1589)
395 ("CANADIAN SYLLABICS WEST-CREE RE" #x158A)
396 ("CANADIAN SYLLABICS WEST-CREE RI" #x158B)
397 ("CANADIAN SYLLABICS WEST-CREE RO" #x158C)
398 ("CANADIAN SYLLABICS WEST-CREE RA" #x158D)
399 ("CANADIAN SYLLABICS NGAAI" #x158E)
400 ("CANADIAN SYLLABICS NGI" #x158F)
401 ("CANADIAN SYLLABICS NGII" #x1590)
402 ("CANADIAN SYLLABICS NGO" #x1591)
403 ("CANADIAN SYLLABICS NGOO" #x1592)
404 ("CANADIAN SYLLABICS NGA" #x1593)
405 ("CANADIAN SYLLABICS NGAA" #x1594)
406 ("CANADIAN SYLLABICS NG" #x1595)
407 ("CANADIAN SYLLABICS NNG" #x1596)
408 ("CANADIAN SYLLABICS SAYISI SHE" #x1597)
409 ("CANADIAN SYLLABICS SAYISI SHI" #x1598)
410 ("CANADIAN SYLLABICS SAYISI SHO" #x1599)
411 ("CANADIAN SYLLABICS SAYISI SHA" #x159A)
412 ("CANADIAN SYLLABICS WOODS-CREE THE" #x159B)
413 ("CANADIAN SYLLABICS WOODS-CREE THI" #x159C)
414 ("CANADIAN SYLLABICS WOODS-CREE THO" #x159D)
415 ("CANADIAN SYLLABICS WOODS-CREE THA" #x159E)
416 ("CANADIAN SYLLABICS WOODS-CREE TH" #x159F)
417 ("CANADIAN SYLLABICS LHI" #x15A0)
418 ("CANADIAN SYLLABICS LHII" #x15A1)
419 ("CANADIAN SYLLABICS LHO" #x15A2)
420 ("CANADIAN SYLLABICS LHOO" #x15A3)
421 ("CANADIAN SYLLABICS LHA" #x15A4)
422 ("CANADIAN SYLLABICS LHAA" #x15A5)
423 ("CANADIAN SYLLABICS LH" #x15A6)
424 ("CANADIAN SYLLABICS TH-CREE THE" #x15A7)
425 ("CANADIAN SYLLABICS TH-CREE THI" #x15A8)
426 ("CANADIAN SYLLABICS TH-CREE THII" #x15A9)
427 ("CANADIAN SYLLABICS TH-CREE THO" #x15AA)
428 ("CANADIAN SYLLABICS TH-CREE THOO" #x15AB)
429 ("CANADIAN SYLLABICS TH-CREE THA" #x15AC)
430 ("CANADIAN SYLLABICS TH-CREE THAA" #x15AD)
431 ("CANADIAN SYLLABICS TH-CREE TH" #x15AE)
432 ("CANADIAN SYLLABICS AIVILIK B" #x15AF)
433 ("CANADIAN SYLLABICS BLACKFOOT E" #x15B0)
434 ("CANADIAN SYLLABICS BLACKFOOT I" #x15B1)
435 ("CANADIAN SYLLABICS BLACKFOOT O" #x15B2)
436 ("CANADIAN SYLLABICS BLACKFOOT A" #x15B3)
437 ("CANADIAN SYLLABICS BLACKFOOT WE" #x15B4)
438 ("CANADIAN SYLLABICS BLACKFOOT WI" #x15B5)
439 ("CANADIAN SYLLABICS BLACKFOOT WO" #x15B6)
440 ("CANADIAN SYLLABICS BLACKFOOT WA" #x15B7)
441 ("CANADIAN SYLLABICS BLACKFOOT NE" #x15B8)
442 ("CANADIAN SYLLABICS BLACKFOOT NI" #x15B9)
443 ("CANADIAN SYLLABICS BLACKFOOT NO" #x15BA)
444 ("CANADIAN SYLLABICS BLACKFOOT NA" #x15BB)
445 ("CANADIAN SYLLABICS BLACKFOOT KE" #x15BC)
446 ("CANADIAN SYLLABICS BLACKFOOT KI" #x15BD)
447 ("CANADIAN SYLLABICS BLACKFOOT KO" #x15BE)
448 ("CANADIAN SYLLABICS BLACKFOOT KA" #x15BF)
449 ("CANADIAN SYLLABICS SAYISI HE" #x15C0)
450 ("CANADIAN SYLLABICS SAYISI HI" #x15C1)
451 ("CANADIAN SYLLABICS SAYISI HO" #x15C2)
452 ("CANADIAN SYLLABICS SAYISI HA" #x15C3)
453 ("CANADIAN SYLLABICS CARRIER GHU" #x15C4)
454 ("CANADIAN SYLLABICS CARRIER GHO" #x15C5)
455 ("CANADIAN SYLLABICS CARRIER GHE" #x15C6)
456 ("CANADIAN SYLLABICS CARRIER GHEE" #x15C7)
457 ("CANADIAN SYLLABICS CARRIER GHI" #x15C8)
458 ("CANADIAN SYLLABICS CARRIER GHA" #x15C9)
459 ("CANADIAN SYLLABICS CARRIER RU" #x15CA)
460 ("CANADIAN SYLLABICS CARRIER RO" #x15CB)
461 ("CANADIAN SYLLABICS CARRIER RE" #x15CC)
462 ("CANADIAN SYLLABICS CARRIER REE" #x15CD)
463 ("CANADIAN SYLLABICS CARRIER RI" #x15CE)
464 ("CANADIAN SYLLABICS CARRIER RA" #x15CF)
465 ("CANADIAN SYLLABICS CARRIER WU" #x15D0)
466 ("CANADIAN SYLLABICS CARRIER WO" #x15D1)
467 ("CANADIAN SYLLABICS CARRIER WE" #x15D2)
468 ("CANADIAN SYLLABICS CARRIER WEE" #x15D3)
469 ("CANADIAN SYLLABICS CARRIER WI" #x15D4)
470 ("CANADIAN SYLLABICS CARRIER WA" #x15D5)
471 ("CANADIAN SYLLABICS CARRIER HWU" #x15D6)
472 ("CANADIAN SYLLABICS CARRIER HWO" #x15D7)
473 ("CANADIAN SYLLABICS CARRIER HWE" #x15D8)
474 ("CANADIAN SYLLABICS CARRIER HWEE" #x15D9)
475 ("CANADIAN SYLLABICS CARRIER HWI" #x15DA)
476 ("CANADIAN SYLLABICS CARRIER HWA" #x15DB)
477 ("CANADIAN SYLLABICS CARRIER THU" #x15DC)
478 ("CANADIAN SYLLABICS CARRIER THO" #x15DD)
479 ("CANADIAN SYLLABICS CARRIER THE" #x15DE)
480 ("CANADIAN SYLLABICS CARRIER THEE" #x15DF)
481 ("CANADIAN SYLLABICS CARRIER THI" #x15E0)
482 ("CANADIAN SYLLABICS CARRIER THA" #x15E1)
483 ("CANADIAN SYLLABICS CARRIER TTU" #x15E2)
484 ("CANADIAN SYLLABICS CARRIER TTO" #x15E3)
485 ("CANADIAN SYLLABICS CARRIER TTE" #x15E4)
486 ("CANADIAN SYLLABICS CARRIER TTEE" #x15E5)
487 ("CANADIAN SYLLABICS CARRIER TTI" #x15E6)
488 ("CANADIAN SYLLABICS CARRIER TTA" #x15E7)
489 ("CANADIAN SYLLABICS CARRIER PU" #x15E8)
490 ("CANADIAN SYLLABICS CARRIER PO" #x15E9)
491 ("CANADIAN SYLLABICS CARRIER PE" #x15EA)
492 ("CANADIAN SYLLABICS CARRIER PEE" #x15EB)
493 ("CANADIAN SYLLABICS CARRIER PI" #x15EC)
494 ("CANADIAN SYLLABICS CARRIER PA" #x15ED)
495 ("CANADIAN SYLLABICS CARRIER P" #x15EE)
496 ("CANADIAN SYLLABICS CARRIER GU" #x15EF)
497 ("CANADIAN SYLLABICS CARRIER GO" #x15F0)
498 ("CANADIAN SYLLABICS CARRIER GE" #x15F1)
499 ("CANADIAN SYLLABICS CARRIER GEE" #x15F2)
500 ("CANADIAN SYLLABICS CARRIER GI" #x15F3)
501 ("CANADIAN SYLLABICS CARRIER GA" #x15F4)
502 ("CANADIAN SYLLABICS CARRIER KHU" #x15F5)
503 ("CANADIAN SYLLABICS CARRIER KHO" #x15F6)
504 ("CANADIAN SYLLABICS CARRIER KHE" #x15F7)
505 ("CANADIAN SYLLABICS CARRIER KHEE" #x15F8)
506 ("CANADIAN SYLLABICS CARRIER KHI" #x15F9)
507 ("CANADIAN SYLLABICS CARRIER KHA" #x15FA)
508 ("CANADIAN SYLLABICS CARRIER KKU" #x15FB)
509 ("CANADIAN SYLLABICS CARRIER KKO" #x15FC)
510 ("CANADIAN SYLLABICS CARRIER KKE" #x15FD)
511 ("CANADIAN SYLLABICS CARRIER KKEE" #x15FE)
512 ("CANADIAN SYLLABICS CARRIER KKI" #x15FF)
513 ("CANADIAN SYLLABICS CARRIER KKA" #x1600)
514 ("CANADIAN SYLLABICS CARRIER KK" #x1601)
515 ("CANADIAN SYLLABICS CARRIER NU" #x1602)
516 ("CANADIAN SYLLABICS CARRIER NO" #x1603)
517 ("CANADIAN SYLLABICS CARRIER NE" #x1604)
518 ("CANADIAN SYLLABICS CARRIER NEE" #x1605)
519 ("CANADIAN SYLLABICS CARRIER NI" #x1606)
520 ("CANADIAN SYLLABICS CARRIER NA" #x1607)
521 ("CANADIAN SYLLABICS CARRIER MU" #x1608)
522 ("CANADIAN SYLLABICS CARRIER MO" #x1609)
523 ("CANADIAN SYLLABICS CARRIER ME" #x160A)
524 ("CANADIAN SYLLABICS CARRIER MEE" #x160B)
525 ("CANADIAN SYLLABICS CARRIER MI" #x160C)
526 ("CANADIAN SYLLABICS CARRIER MA" #x160D)
527 ("CANADIAN SYLLABICS CARRIER YU" #x160E)
528 ("CANADIAN SYLLABICS CARRIER YO" #x160F)
529 ("CANADIAN SYLLABICS CARRIER YE" #x1610)
530 ("CANADIAN SYLLABICS CARRIER YEE" #x1611)
531 ("CANADIAN SYLLABICS CARRIER YI" #x1612)
532 ("CANADIAN SYLLABICS CARRIER YA" #x1613)
533 ("CANADIAN SYLLABICS CARRIER JU" #x1614)
534 ("CANADIAN SYLLABICS SAYISI JU" #x1615)
535 ("CANADIAN SYLLABICS CARRIER JO" #x1616)
536 ("CANADIAN SYLLABICS CARRIER JE" #x1617)
537 ("CANADIAN SYLLABICS CARRIER JEE" #x1618)
538 ("CANADIAN SYLLABICS CARRIER JI" #x1619)
539 ("CANADIAN SYLLABICS SAYISI JI" #x161A)
540 ("CANADIAN SYLLABICS CARRIER JA" #x161B)
541 ("CANADIAN SYLLABICS CARRIER JJU" #x161C)
542 ("CANADIAN SYLLABICS CARRIER JJO" #x161D)
543 ("CANADIAN SYLLABICS CARRIER JJE" #x161E)
544 ("CANADIAN SYLLABICS CARRIER JJEE" #x161F)
545 ("CANADIAN SYLLABICS CARRIER JJI" #x1620)
546 ("CANADIAN SYLLABICS CARRIER JJA" #x1621)
547 ("CANADIAN SYLLABICS CARRIER LU" #x1622)
548 ("CANADIAN SYLLABICS CARRIER LO" #x1623)
549 ("CANADIAN SYLLABICS CARRIER LE" #x1624)
550 ("CANADIAN SYLLABICS CARRIER LEE" #x1625)
551 ("CANADIAN SYLLABICS CARRIER LI" #x1626)
552 ("CANADIAN SYLLABICS CARRIER LA" #x1627)
553 ("CANADIAN SYLLABICS CARRIER DLU" #x1628)
554 ("CANADIAN SYLLABICS CARRIER DLO" #x1629)
555 ("CANADIAN SYLLABICS CARRIER DLE" #x162A)
556 ("CANADIAN SYLLABICS CARRIER DLEE" #x162B)
557 ("CANADIAN SYLLABICS CARRIER DLI" #x162C)
558 ("CANADIAN SYLLABICS CARRIER DLA" #x162D)
559 ("CANADIAN SYLLABICS CARRIER LHU" #x162E)
560 ("CANADIAN SYLLABICS CARRIER LHO" #x162F)
561 ("CANADIAN SYLLABICS CARRIER LHE" #x1630)
562 ("CANADIAN SYLLABICS CARRIER LHEE" #x1631)
563 ("CANADIAN SYLLABICS CARRIER LHI" #x1632)
564 ("CANADIAN SYLLABICS CARRIER LHA" #x1633)
565 ("CANADIAN SYLLABICS CARRIER TLHU" #x1634)
566 ("CANADIAN SYLLABICS CARRIER TLHO" #x1635)
567 ("CANADIAN SYLLABICS CARRIER TLHE" #x1636)
568 ("CANADIAN SYLLABICS CARRIER TLHEE" #x1637)
569 ("CANADIAN SYLLABICS CARRIER TLHI" #x1638)
570 ("CANADIAN SYLLABICS CARRIER TLHA" #x1639)
571 ("CANADIAN SYLLABICS CARRIER TLU" #x163A)
572 ("CANADIAN SYLLABICS CARRIER TLO" #x163B)
573 ("CANADIAN SYLLABICS CARRIER TLE" #x163C)
574 ("CANADIAN SYLLABICS CARRIER TLEE" #x163D)
575 ("CANADIAN SYLLABICS CARRIER TLI" #x163E)
576 ("CANADIAN SYLLABICS CARRIER TLA" #x163F)
577 ("CANADIAN SYLLABICS CARRIER ZU" #x1640)
578 ("CANADIAN SYLLABICS CARRIER ZO" #x1641)
579 ("CANADIAN SYLLABICS CARRIER ZE" #x1642)
580 ("CANADIAN SYLLABICS CARRIER ZEE" #x1643)
581 ("CANADIAN SYLLABICS CARRIER ZI" #x1644)
582 ("CANADIAN SYLLABICS CARRIER ZA" #x1645)
583 ("CANADIAN SYLLABICS CARRIER Z" #x1646)
584 ("CANADIAN SYLLABICS CARRIER INITIAL Z" #x1647)
585 ("CANADIAN SYLLABICS CARRIER DZU" #x1648)
586 ("CANADIAN SYLLABICS CARRIER DZO" #x1649)
587 ("CANADIAN SYLLABICS CARRIER DZE" #x164A)
588 ("CANADIAN SYLLABICS CARRIER DZEE" #x164B)
589 ("CANADIAN SYLLABICS CARRIER DZI" #x164C)
590 ("CANADIAN SYLLABICS CARRIER DZA" #x164D)
591 ("CANADIAN SYLLABICS CARRIER SU" #x164E)
592 ("CANADIAN SYLLABICS CARRIER SO" #x164F)
593 ("CANADIAN SYLLABICS CARRIER SE" #x1650)
594 ("CANADIAN SYLLABICS CARRIER SEE" #x1651)
595 ("CANADIAN SYLLABICS CARRIER SI" #x1652)
596 ("CANADIAN SYLLABICS CARRIER SA" #x1653)
597 ("CANADIAN SYLLABICS CARRIER SHU" #x1654)
598 ("CANADIAN SYLLABICS CARRIER SHO" #x1655)
599 ("CANADIAN SYLLABICS CARRIER SHE" #x1656)
600 ("CANADIAN SYLLABICS CARRIER SHEE" #x1657)
601 ("CANADIAN SYLLABICS CARRIER SHI" #x1658)
602 ("CANADIAN SYLLABICS CARRIER SHA" #x1659)
603 ("CANADIAN SYLLABICS CARRIER SH" #x165A)
604 ("CANADIAN SYLLABICS CARRIER TSU" #x165B)
605 ("CANADIAN SYLLABICS CARRIER TSO" #x165C)
606 ("CANADIAN SYLLABICS CARRIER TSE" #x165D)
607 ("CANADIAN SYLLABICS CARRIER TSEE" #x165E)
608 ("CANADIAN SYLLABICS CARRIER TSI" #x165F)
609 ("CANADIAN SYLLABICS CARRIER TSA" #x1660)
610 ("CANADIAN SYLLABICS CARRIER CHU" #x1661)
611 ("CANADIAN SYLLABICS CARRIER CHO" #x1662)
612 ("CANADIAN SYLLABICS CARRIER CHE" #x1663)
613 ("CANADIAN SYLLABICS CARRIER CHEE" #x1664)
614 ("CANADIAN SYLLABICS CARRIER CHI" #x1665)
615 ("CANADIAN SYLLABICS CARRIER CHA" #x1666)
616 ("CANADIAN SYLLABICS CARRIER TTSU" #x1667)
617 ("CANADIAN SYLLABICS CARRIER TTSO" #x1668)
618 ("CANADIAN SYLLABICS CARRIER TTSE" #x1669)
619 ("CANADIAN SYLLABICS CARRIER TTSEE" #x166A)
620 ("CANADIAN SYLLABICS CARRIER TTSI" #x166B)
621 ("CANADIAN SYLLABICS CARRIER TTSA" #x166C)
622 ("CANADIAN SYLLABICS CHI SIGN" #x166D)
623 ("CANADIAN SYLLABICS FULL STOP" #x166E)
624 ("CANADIAN SYLLABICS QAI" #x166F)
625 ("CANADIAN SYLLABICS NGAI" #x1670)
626 ("CANADIAN SYLLABICS NNGI" #x1671)
627 ("CANADIAN SYLLABICS NNGII" #x1672)
628 ("CANADIAN SYLLABICS NNGO" #x1673)
629 ("CANADIAN SYLLABICS NNGOO" #x1674)
630 ("CANADIAN SYLLABICS NNGA" #x1675)
631 ("CANADIAN SYLLABICS NNGAA" #x1676)
632 ))
diff --git a/lisp/nxml/char-name/unicode/01680-0169F.el b/lisp/nxml/char-name/unicode/01680-0169F.el
new file mode 100644
index 00000000000..827b70e6b00
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/01680-0169F.el
@@ -0,0 +1,31 @@
1(nxml-define-char-name-set 'ogham
2 '(("OGHAM SPACE MARK" #x1680)
3 ("OGHAM LETTER BEITH" #x1681)
4 ("OGHAM LETTER LUIS" #x1682)
5 ("OGHAM LETTER FEARN" #x1683)
6 ("OGHAM LETTER SAIL" #x1684)
7 ("OGHAM LETTER NION" #x1685)
8 ("OGHAM LETTER UATH" #x1686)
9 ("OGHAM LETTER DAIR" #x1687)
10 ("OGHAM LETTER TINNE" #x1688)
11 ("OGHAM LETTER COLL" #x1689)
12 ("OGHAM LETTER CEIRT" #x168A)
13 ("OGHAM LETTER MUIN" #x168B)
14 ("OGHAM LETTER GORT" #x168C)
15 ("OGHAM LETTER NGEADAL" #x168D)
16 ("OGHAM LETTER STRAIF" #x168E)
17 ("OGHAM LETTER RUIS" #x168F)
18 ("OGHAM LETTER AILM" #x1690)
19 ("OGHAM LETTER ONN" #x1691)
20 ("OGHAM LETTER UR" #x1692)
21 ("OGHAM LETTER EADHADH" #x1693)
22 ("OGHAM LETTER IODHADH" #x1694)
23 ("OGHAM LETTER EABHADH" #x1695)
24 ("OGHAM LETTER OR" #x1696)
25 ("OGHAM LETTER UILLEANN" #x1697)
26 ("OGHAM LETTER IFIN" #x1698)
27 ("OGHAM LETTER EAMHANCHOLL" #x1699)
28 ("OGHAM LETTER PEITH" #x169A)
29 ("OGHAM FEATHER MARK" #x169B)
30 ("OGHAM REVERSED FEATHER MARK" #x169C)
31 ))
diff --git a/lisp/nxml/char-name/unicode/016A0-016FF.el b/lisp/nxml/char-name/unicode/016A0-016FF.el
new file mode 100644
index 00000000000..ce67a4069e5
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/016A0-016FF.el
@@ -0,0 +1,83 @@
1(nxml-define-char-name-set 'runic
2 '(("RUNIC LETTER FEHU FEOH FE F" #x16A0)
3 ("RUNIC LETTER V" #x16A1)
4 ("RUNIC LETTER URUZ UR U" #x16A2)
5 ("RUNIC LETTER YR" #x16A3)
6 ("RUNIC LETTER Y" #x16A4)
7 ("RUNIC LETTER W" #x16A5)
8 ("RUNIC LETTER THURISAZ THURS THORN" #x16A6)
9 ("RUNIC LETTER ETH" #x16A7)
10 ("RUNIC LETTER ANSUZ A" #x16A8)
11 ("RUNIC LETTER OS O" #x16A9)
12 ("RUNIC LETTER AC A" #x16AA)
13 ("RUNIC LETTER AESC" #x16AB)
14 ("RUNIC LETTER LONG-BRANCH-OSS O" #x16AC)
15 ("RUNIC LETTER SHORT-TWIG-OSS O" #x16AD)
16 ("RUNIC LETTER O" #x16AE)
17 ("RUNIC LETTER OE" #x16AF)
18 ("RUNIC LETTER ON" #x16B0)
19 ("RUNIC LETTER RAIDO RAD REID R" #x16B1)
20 ("RUNIC LETTER KAUNA" #x16B2)
21 ("RUNIC LETTER CEN" #x16B3)
22 ("RUNIC LETTER KAUN K" #x16B4)
23 ("RUNIC LETTER G" #x16B5)
24 ("RUNIC LETTER ENG" #x16B6)
25 ("RUNIC LETTER GEBO GYFU G" #x16B7)
26 ("RUNIC LETTER GAR" #x16B8)
27 ("RUNIC LETTER WUNJO WYNN W" #x16B9)
28 ("RUNIC LETTER HAGLAZ H" #x16BA)
29 ("RUNIC LETTER HAEGL H" #x16BB)
30 ("RUNIC LETTER LONG-BRANCH-HAGALL H" #x16BC)
31 ("RUNIC LETTER SHORT-TWIG-HAGALL H" #x16BD)
32 ("RUNIC LETTER NAUDIZ NYD NAUD N" #x16BE)
33 ("RUNIC LETTER SHORT-TWIG-NAUD N" #x16BF)
34 ("RUNIC LETTER DOTTED-N" #x16C0)
35 ("RUNIC LETTER ISAZ IS ISS I" #x16C1)
36 ("RUNIC LETTER E" #x16C2)
37 ("RUNIC LETTER JERAN J" #x16C3)
38 ("RUNIC LETTER GER" #x16C4)
39 ("RUNIC LETTER LONG-BRANCH-AR AE" #x16C5)
40 ("RUNIC LETTER SHORT-TWIG-AR A" #x16C6)
41 ("RUNIC LETTER IWAZ EOH" #x16C7)
42 ("RUNIC LETTER PERTHO PEORTH P" #x16C8)
43 ("RUNIC LETTER ALGIZ EOLHX" #x16C9)
44 ("RUNIC LETTER SOWILO S" #x16CA)
45 ("RUNIC LETTER SIGEL LONG-BRANCH-SOL S" #x16CB)
46 ("RUNIC LETTER SHORT-TWIG-SOL S" #x16CC)
47 ("RUNIC LETTER C" #x16CD)
48 ("RUNIC LETTER Z" #x16CE)
49 ("RUNIC LETTER TIWAZ TIR TYR T" #x16CF)
50 ("RUNIC LETTER SHORT-TWIG-TYR T" #x16D0)
51 ("RUNIC LETTER D" #x16D1)
52 ("RUNIC LETTER BERKANAN BEORC BJARKAN B" #x16D2)
53 ("RUNIC LETTER SHORT-TWIG-BJARKAN B" #x16D3)
54 ("RUNIC LETTER DOTTED-P" #x16D4)
55 ("RUNIC LETTER OPEN-P" #x16D5)
56 ("RUNIC LETTER EHWAZ EH E" #x16D6)
57 ("RUNIC LETTER MANNAZ MAN M" #x16D7)
58 ("RUNIC LETTER LONG-BRANCH-MADR M" #x16D8)
59 ("RUNIC LETTER SHORT-TWIG-MADR M" #x16D9)
60 ("RUNIC LETTER LAUKAZ LAGU LOGR L" #x16DA)
61 ("RUNIC LETTER DOTTED-L" #x16DB)
62 ("RUNIC LETTER INGWAZ" #x16DC)
63 ("RUNIC LETTER ING" #x16DD)
64 ("RUNIC LETTER DAGAZ DAEG D" #x16DE)
65 ("RUNIC LETTER OTHALAN ETHEL O" #x16DF)
66 ("RUNIC LETTER EAR" #x16E0)
67 ("RUNIC LETTER IOR" #x16E1)
68 ("RUNIC LETTER CWEORTH" #x16E2)
69 ("RUNIC LETTER CALC" #x16E3)
70 ("RUNIC LETTER CEALC" #x16E4)
71 ("RUNIC LETTER STAN" #x16E5)
72 ("RUNIC LETTER LONG-BRANCH-YR" #x16E6)
73 ("RUNIC LETTER SHORT-TWIG-YR" #x16E7)
74 ("RUNIC LETTER ICELANDIC-YR" #x16E8)
75 ("RUNIC LETTER Q" #x16E9)
76 ("RUNIC LETTER X" #x16EA)
77 ("RUNIC SINGLE PUNCTUATION" #x16EB)
78 ("RUNIC MULTIPLE PUNCTUATION" #x16EC)
79 ("RUNIC CROSS PUNCTUATION" #x16ED)
80 ("RUNIC ARLAUG SYMBOL" #x16EE)
81 ("RUNIC TVIMADUR SYMBOL" #x16EF)
82 ("RUNIC BELGTHOR SYMBOL" #x16F0)
83 ))
diff --git a/lisp/nxml/char-name/unicode/01700-0171F.el b/lisp/nxml/char-name/unicode/01700-0171F.el
new file mode 100644
index 00000000000..b30500639b6
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/01700-0171F.el
@@ -0,0 +1,22 @@
1(nxml-define-char-name-set 'tagalog
2 '(("TAGALOG LETTER A" #x1700)
3 ("TAGALOG LETTER I" #x1701)
4 ("TAGALOG LETTER U" #x1702)
5 ("TAGALOG LETTER KA" #x1703)
6 ("TAGALOG LETTER GA" #x1704)
7 ("TAGALOG LETTER NGA" #x1705)
8 ("TAGALOG LETTER TA" #x1706)
9 ("TAGALOG LETTER DA" #x1707)
10 ("TAGALOG LETTER NA" #x1708)
11 ("TAGALOG LETTER PA" #x1709)
12 ("TAGALOG LETTER BA" #x170A)
13 ("TAGALOG LETTER MA" #x170B)
14 ("TAGALOG LETTER YA" #x170C)
15 ("TAGALOG LETTER LA" #x170E)
16 ("TAGALOG LETTER WA" #x170F)
17 ("TAGALOG LETTER SA" #x1710)
18 ("TAGALOG LETTER HA" #x1711)
19 ("TAGALOG VOWEL SIGN I" #x1712)
20 ("TAGALOG VOWEL SIGN U" #x1713)
21 ("TAGALOG SIGN VIRAMA" #x1714)
22 ))
diff --git a/lisp/nxml/char-name/unicode/01720-0173F.el b/lisp/nxml/char-name/unicode/01720-0173F.el
new file mode 100644
index 00000000000..09f61ea1b55
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/01720-0173F.el
@@ -0,0 +1,25 @@
1(nxml-define-char-name-set 'hanunoo
2 '(("HANUNOO LETTER A" #x1720)
3 ("HANUNOO LETTER I" #x1721)
4 ("HANUNOO LETTER U" #x1722)
5 ("HANUNOO LETTER KA" #x1723)
6 ("HANUNOO LETTER GA" #x1724)
7 ("HANUNOO LETTER NGA" #x1725)
8 ("HANUNOO LETTER TA" #x1726)
9 ("HANUNOO LETTER DA" #x1727)
10 ("HANUNOO LETTER NA" #x1728)
11 ("HANUNOO LETTER PA" #x1729)
12 ("HANUNOO LETTER BA" #x172A)
13 ("HANUNOO LETTER MA" #x172B)
14 ("HANUNOO LETTER YA" #x172C)
15 ("HANUNOO LETTER RA" #x172D)
16 ("HANUNOO LETTER LA" #x172E)
17 ("HANUNOO LETTER WA" #x172F)
18 ("HANUNOO LETTER SA" #x1730)
19 ("HANUNOO LETTER HA" #x1731)
20 ("HANUNOO VOWEL SIGN I" #x1732)
21 ("HANUNOO VOWEL SIGN U" #x1733)
22 ("HANUNOO SIGN PAMUDPOD" #x1734)
23 ("PHILIPPINE SINGLE PUNCTUATION" #x1735)
24 ("PHILIPPINE DOUBLE PUNCTUATION" #x1736)
25 ))
diff --git a/lisp/nxml/char-name/unicode/01740-0175F.el b/lisp/nxml/char-name/unicode/01740-0175F.el
new file mode 100644
index 00000000000..b507c90c268
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/01740-0175F.el
@@ -0,0 +1,22 @@
1(nxml-define-char-name-set 'buhid
2 '(("BUHID LETTER A" #x1740)
3 ("BUHID LETTER I" #x1741)
4 ("BUHID LETTER U" #x1742)
5 ("BUHID LETTER KA" #x1743)
6 ("BUHID LETTER GA" #x1744)
7 ("BUHID LETTER NGA" #x1745)
8 ("BUHID LETTER TA" #x1746)
9 ("BUHID LETTER DA" #x1747)
10 ("BUHID LETTER NA" #x1748)
11 ("BUHID LETTER PA" #x1749)
12 ("BUHID LETTER BA" #x174A)
13 ("BUHID LETTER MA" #x174B)
14 ("BUHID LETTER YA" #x174C)
15 ("BUHID LETTER RA" #x174D)
16 ("BUHID LETTER LA" #x174E)
17 ("BUHID LETTER WA" #x174F)
18 ("BUHID LETTER SA" #x1750)
19 ("BUHID LETTER HA" #x1751)
20 ("BUHID VOWEL SIGN I" #x1752)
21 ("BUHID VOWEL SIGN U" #x1753)
22 ))
diff --git a/lisp/nxml/char-name/unicode/01760-0177F.el b/lisp/nxml/char-name/unicode/01760-0177F.el
new file mode 100644
index 00000000000..e824c2bd434
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/01760-0177F.el
@@ -0,0 +1,20 @@
1(nxml-define-char-name-set 'tagbanwa
2 '(("TAGBANWA LETTER A" #x1760)
3 ("TAGBANWA LETTER I" #x1761)
4 ("TAGBANWA LETTER U" #x1762)
5 ("TAGBANWA LETTER KA" #x1763)
6 ("TAGBANWA LETTER GA" #x1764)
7 ("TAGBANWA LETTER NGA" #x1765)
8 ("TAGBANWA LETTER TA" #x1766)
9 ("TAGBANWA LETTER DA" #x1767)
10 ("TAGBANWA LETTER NA" #x1768)
11 ("TAGBANWA LETTER PA" #x1769)
12 ("TAGBANWA LETTER BA" #x176A)
13 ("TAGBANWA LETTER MA" #x176B)
14 ("TAGBANWA LETTER YA" #x176C)
15 ("TAGBANWA LETTER LA" #x176E)
16 ("TAGBANWA LETTER WA" #x176F)
17 ("TAGBANWA LETTER SA" #x1770)
18 ("TAGBANWA VOWEL SIGN I" #x1772)
19 ("TAGBANWA VOWEL SIGN U" #x1773)
20 ))
diff --git a/lisp/nxml/char-name/unicode/01780-017FF.el b/lisp/nxml/char-name/unicode/01780-017FF.el
new file mode 100644
index 00000000000..e9671c943ca
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/01780-017FF.el
@@ -0,0 +1,105 @@
1(nxml-define-char-name-set 'khmer
2 '(("KHMER LETTER KA" #x1780)
3 ("KHMER LETTER KHA" #x1781)
4 ("KHMER LETTER KO" #x1782)
5 ("KHMER LETTER KHO" #x1783)
6 ("KHMER LETTER NGO" #x1784)
7 ("KHMER LETTER CA" #x1785)
8 ("KHMER LETTER CHA" #x1786)
9 ("KHMER LETTER CO" #x1787)
10 ("KHMER LETTER CHO" #x1788)
11 ("KHMER LETTER NYO" #x1789)
12 ("KHMER LETTER DA" #x178A)
13 ("KHMER LETTER TTHA" #x178B)
14 ("KHMER LETTER DO" #x178C)
15 ("KHMER LETTER TTHO" #x178D)
16 ("KHMER LETTER NNO" #x178E)
17 ("KHMER LETTER TA" #x178F)
18 ("KHMER LETTER THA" #x1790)
19 ("KHMER LETTER TO" #x1791)
20 ("KHMER LETTER THO" #x1792)
21 ("KHMER LETTER NO" #x1793)
22 ("KHMER LETTER BA" #x1794)
23 ("KHMER LETTER PHA" #x1795)
24 ("KHMER LETTER PO" #x1796)
25 ("KHMER LETTER PHO" #x1797)
26 ("KHMER LETTER MO" #x1798)
27 ("KHMER LETTER YO" #x1799)
28 ("KHMER LETTER RO" #x179A)
29 ("KHMER LETTER LO" #x179B)
30 ("KHMER LETTER VO" #x179C)
31 ("KHMER LETTER SHA" #x179D)
32 ("KHMER LETTER SSO" #x179E)
33 ("KHMER LETTER SA" #x179F)
34 ("KHMER LETTER HA" #x17A0)
35 ("KHMER LETTER LA" #x17A1)
36 ("KHMER LETTER QA" #x17A2)
37 ("KHMER INDEPENDENT VOWEL QAQ" #x17A3)
38 ("KHMER INDEPENDENT VOWEL QAA" #x17A4)
39 ("KHMER INDEPENDENT VOWEL QI" #x17A5)
40 ("KHMER INDEPENDENT VOWEL QII" #x17A6)
41 ("KHMER INDEPENDENT VOWEL QU" #x17A7)
42 ("KHMER INDEPENDENT VOWEL QUK" #x17A8)
43 ("KHMER INDEPENDENT VOWEL QUU" #x17A9)
44 ("KHMER INDEPENDENT VOWEL QUUV" #x17AA)
45 ("KHMER INDEPENDENT VOWEL RY" #x17AB)
46 ("KHMER INDEPENDENT VOWEL RYY" #x17AC)
47 ("KHMER INDEPENDENT VOWEL LY" #x17AD)
48 ("KHMER INDEPENDENT VOWEL LYY" #x17AE)
49 ("KHMER INDEPENDENT VOWEL QE" #x17AF)
50 ("KHMER INDEPENDENT VOWEL QAI" #x17B0)
51 ("KHMER INDEPENDENT VOWEL QOO TYPE ONE" #x17B1)
52 ("KHMER INDEPENDENT VOWEL QOO TYPE TWO" #x17B2)
53 ("KHMER INDEPENDENT VOWEL QAU" #x17B3)
54 ("KHMER VOWEL INHERENT AQ" #x17B4)
55 ("KHMER VOWEL INHERENT AA" #x17B5)
56 ("KHMER VOWEL SIGN AA" #x17B6)
57 ("KHMER VOWEL SIGN I" #x17B7)
58 ("KHMER VOWEL SIGN II" #x17B8)
59 ("KHMER VOWEL SIGN Y" #x17B9)
60 ("KHMER VOWEL SIGN YY" #x17BA)
61 ("KHMER VOWEL SIGN U" #x17BB)
62 ("KHMER VOWEL SIGN UU" #x17BC)
63 ("KHMER VOWEL SIGN UA" #x17BD)
64 ("KHMER VOWEL SIGN OE" #x17BE)
65 ("KHMER VOWEL SIGN YA" #x17BF)
66 ("KHMER VOWEL SIGN IE" #x17C0)
67 ("KHMER VOWEL SIGN E" #x17C1)
68 ("KHMER VOWEL SIGN AE" #x17C2)
69 ("KHMER VOWEL SIGN AI" #x17C3)
70 ("KHMER VOWEL SIGN OO" #x17C4)
71 ("KHMER VOWEL SIGN AU" #x17C5)
72 ("KHMER SIGN NIKAHIT" #x17C6)
73 ("KHMER SIGN REAHMUK" #x17C7)
74 ("KHMER SIGN YUUKALEAPINTU" #x17C8)
75 ("KHMER SIGN MUUSIKATOAN" #x17C9)
76 ("KHMER SIGN TRIISAP" #x17CA)
77 ("KHMER SIGN BANTOC" #x17CB)
78 ("KHMER SIGN ROBAT" #x17CC)
79 ("KHMER SIGN TOANDAKHIAT" #x17CD)
80 ("KHMER SIGN KAKABAT" #x17CE)
81 ("KHMER SIGN AHSDA" #x17CF)
82 ("KHMER SIGN SAMYOK SANNYA" #x17D0)
83 ("KHMER SIGN VIRIAM" #x17D1)
84 ("KHMER SIGN COENG" #x17D2)
85 ("KHMER SIGN BATHAMASAT" #x17D3)
86 ("KHMER SIGN KHAN" #x17D4)
87 ("KHMER SIGN BARIYOOSAN" #x17D5)
88 ("KHMER SIGN CAMNUC PII KUUH" #x17D6)
89 ("KHMER SIGN LEK TOO" #x17D7)
90 ("KHMER SIGN BEYYAL" #x17D8)
91 ("KHMER SIGN PHNAEK MUAN" #x17D9)
92 ("KHMER SIGN KOOMUUT" #x17DA)
93 ("KHMER CURRENCY SYMBOL RIEL" #x17DB)
94 ("KHMER SIGN AVAKRAHASANYA" #x17DC)
95 ("KHMER DIGIT ZERO" #x17E0)
96 ("KHMER DIGIT ONE" #x17E1)
97 ("KHMER DIGIT TWO" #x17E2)
98 ("KHMER DIGIT THREE" #x17E3)
99 ("KHMER DIGIT FOUR" #x17E4)
100 ("KHMER DIGIT FIVE" #x17E5)
101 ("KHMER DIGIT SIX" #x17E6)
102 ("KHMER DIGIT SEVEN" #x17E7)
103 ("KHMER DIGIT EIGHT" #x17E8)
104 ("KHMER DIGIT NINE" #x17E9)
105 ))
diff --git a/lisp/nxml/char-name/unicode/01800-018AF.el b/lisp/nxml/char-name/unicode/01800-018AF.el
new file mode 100644
index 00000000000..fd3e2455a29
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/01800-018AF.el
@@ -0,0 +1,157 @@
1(nxml-define-char-name-set 'mongolian
2 '(("MONGOLIAN BIRGA" #x1800)
3 ("MONGOLIAN ELLIPSIS" #x1801)
4 ("MONGOLIAN COMMA" #x1802)
5 ("MONGOLIAN FULL STOP" #x1803)
6 ("MONGOLIAN COLON" #x1804)
7 ("MONGOLIAN FOUR DOTS" #x1805)
8 ("MONGOLIAN TODO SOFT HYPHEN" #x1806)
9 ("MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER" #x1807)
10 ("MONGOLIAN MANCHU COMMA" #x1808)
11 ("MONGOLIAN MANCHU FULL STOP" #x1809)
12 ("MONGOLIAN NIRUGU" #x180A)
13 ("MONGOLIAN FREE VARIATION SELECTOR ONE" #x180B)
14 ("MONGOLIAN FREE VARIATION SELECTOR TWO" #x180C)
15 ("MONGOLIAN FREE VARIATION SELECTOR THREE" #x180D)
16 ("MONGOLIAN VOWEL SEPARATOR" #x180E)
17 ("MONGOLIAN DIGIT ZERO" #x1810)
18 ("MONGOLIAN DIGIT ONE" #x1811)
19 ("MONGOLIAN DIGIT TWO" #x1812)
20 ("MONGOLIAN DIGIT THREE" #x1813)
21 ("MONGOLIAN DIGIT FOUR" #x1814)
22 ("MONGOLIAN DIGIT FIVE" #x1815)
23 ("MONGOLIAN DIGIT SIX" #x1816)
24 ("MONGOLIAN DIGIT SEVEN" #x1817)
25 ("MONGOLIAN DIGIT EIGHT" #x1818)
26 ("MONGOLIAN DIGIT NINE" #x1819)
27 ("MONGOLIAN LETTER A" #x1820)
28 ("MONGOLIAN LETTER E" #x1821)
29 ("MONGOLIAN LETTER I" #x1822)
30 ("MONGOLIAN LETTER O" #x1823)
31 ("MONGOLIAN LETTER U" #x1824)
32 ("MONGOLIAN LETTER OE" #x1825)
33 ("MONGOLIAN LETTER UE" #x1826)
34 ("MONGOLIAN LETTER EE" #x1827)
35 ("MONGOLIAN LETTER NA" #x1828)
36 ("MONGOLIAN LETTER ANG" #x1829)
37 ("MONGOLIAN LETTER BA" #x182A)
38 ("MONGOLIAN LETTER PA" #x182B)
39 ("MONGOLIAN LETTER QA" #x182C)
40 ("MONGOLIAN LETTER GA" #x182D)
41 ("MONGOLIAN LETTER MA" #x182E)
42 ("MONGOLIAN LETTER LA" #x182F)
43 ("MONGOLIAN LETTER SA" #x1830)
44 ("MONGOLIAN LETTER SHA" #x1831)
45 ("MONGOLIAN LETTER TA" #x1832)
46 ("MONGOLIAN LETTER DA" #x1833)
47 ("MONGOLIAN LETTER CHA" #x1834)
48 ("MONGOLIAN LETTER JA" #x1835)
49 ("MONGOLIAN LETTER YA" #x1836)
50 ("MONGOLIAN LETTER RA" #x1837)
51 ("MONGOLIAN LETTER WA" #x1838)
52 ("MONGOLIAN LETTER FA" #x1839)
53 ("MONGOLIAN LETTER KA" #x183A)
54 ("MONGOLIAN LETTER KHA" #x183B)
55 ("MONGOLIAN LETTER TSA" #x183C)
56 ("MONGOLIAN LETTER ZA" #x183D)
57 ("MONGOLIAN LETTER HAA" #x183E)
58 ("MONGOLIAN LETTER ZRA" #x183F)
59 ("MONGOLIAN LETTER LHA" #x1840)
60 ("MONGOLIAN LETTER ZHI" #x1841)
61 ("MONGOLIAN LETTER CHI" #x1842)
62 ("MONGOLIAN LETTER TODO LONG VOWEL SIGN" #x1843)
63 ("MONGOLIAN LETTER TODO E" #x1844)
64 ("MONGOLIAN LETTER TODO I" #x1845)
65 ("MONGOLIAN LETTER TODO O" #x1846)
66 ("MONGOLIAN LETTER TODO U" #x1847)
67 ("MONGOLIAN LETTER TODO OE" #x1848)
68 ("MONGOLIAN LETTER TODO UE" #x1849)
69 ("MONGOLIAN LETTER TODO ANG" #x184A)
70 ("MONGOLIAN LETTER TODO BA" #x184B)
71 ("MONGOLIAN LETTER TODO PA" #x184C)
72 ("MONGOLIAN LETTER TODO QA" #x184D)
73 ("MONGOLIAN LETTER TODO GA" #x184E)
74 ("MONGOLIAN LETTER TODO MA" #x184F)
75 ("MONGOLIAN LETTER TODO TA" #x1850)
76 ("MONGOLIAN LETTER TODO DA" #x1851)
77 ("MONGOLIAN LETTER TODO CHA" #x1852)
78 ("MONGOLIAN LETTER TODO JA" #x1853)
79 ("MONGOLIAN LETTER TODO TSA" #x1854)
80 ("MONGOLIAN LETTER TODO YA" #x1855)
81 ("MONGOLIAN LETTER TODO WA" #x1856)
82 ("MONGOLIAN LETTER TODO KA" #x1857)
83 ("MONGOLIAN LETTER TODO GAA" #x1858)
84 ("MONGOLIAN LETTER TODO HAA" #x1859)
85 ("MONGOLIAN LETTER TODO JIA" #x185A)
86 ("MONGOLIAN LETTER TODO NIA" #x185B)
87 ("MONGOLIAN LETTER TODO DZA" #x185C)
88 ("MONGOLIAN LETTER SIBE E" #x185D)
89 ("MONGOLIAN LETTER SIBE I" #x185E)
90 ("MONGOLIAN LETTER SIBE IY" #x185F)
91 ("MONGOLIAN LETTER SIBE UE" #x1860)
92 ("MONGOLIAN LETTER SIBE U" #x1861)
93 ("MONGOLIAN LETTER SIBE ANG" #x1862)
94 ("MONGOLIAN LETTER SIBE KA" #x1863)
95 ("MONGOLIAN LETTER SIBE GA" #x1864)
96 ("MONGOLIAN LETTER SIBE HA" #x1865)
97 ("MONGOLIAN LETTER SIBE PA" #x1866)
98 ("MONGOLIAN LETTER SIBE SHA" #x1867)
99 ("MONGOLIAN LETTER SIBE TA" #x1868)
100 ("MONGOLIAN LETTER SIBE DA" #x1869)
101 ("MONGOLIAN LETTER SIBE JA" #x186A)
102 ("MONGOLIAN LETTER SIBE FA" #x186B)
103 ("MONGOLIAN LETTER SIBE GAA" #x186C)
104 ("MONGOLIAN LETTER SIBE HAA" #x186D)
105 ("MONGOLIAN LETTER SIBE TSA" #x186E)
106 ("MONGOLIAN LETTER SIBE ZA" #x186F)
107 ("MONGOLIAN LETTER SIBE RAA" #x1870)
108 ("MONGOLIAN LETTER SIBE CHA" #x1871)
109 ("MONGOLIAN LETTER SIBE ZHA" #x1872)
110 ("MONGOLIAN LETTER MANCHU I" #x1873)
111 ("MONGOLIAN LETTER MANCHU KA" #x1874)
112 ("MONGOLIAN LETTER MANCHU RA" #x1875)
113 ("MONGOLIAN LETTER MANCHU FA" #x1876)
114 ("MONGOLIAN LETTER MANCHU ZHA" #x1877)
115 ("MONGOLIAN LETTER ALI GALI ANUSVARA ONE" #x1880)
116 ("MONGOLIAN LETTER ALI GALI VISARGA ONE" #x1881)
117 ("MONGOLIAN LETTER ALI GALI DAMARU" #x1882)
118 ("MONGOLIAN LETTER ALI GALI UBADAMA" #x1883)
119 ("MONGOLIAN LETTER ALI GALI INVERTED UBADAMA" #x1884)
120 ("MONGOLIAN LETTER ALI GALI BALUDA" #x1885)
121 ("MONGOLIAN LETTER ALI GALI THREE BALUDA" #x1886)
122 ("MONGOLIAN LETTER ALI GALI A" #x1887)
123 ("MONGOLIAN LETTER ALI GALI I" #x1888)
124 ("MONGOLIAN LETTER ALI GALI KA" #x1889)
125 ("MONGOLIAN LETTER ALI GALI NGA" #x188A)
126 ("MONGOLIAN LETTER ALI GALI CA" #x188B)
127 ("MONGOLIAN LETTER ALI GALI TTA" #x188C)
128 ("MONGOLIAN LETTER ALI GALI TTHA" #x188D)
129 ("MONGOLIAN LETTER ALI GALI DDA" #x188E)
130 ("MONGOLIAN LETTER ALI GALI NNA" #x188F)
131 ("MONGOLIAN LETTER ALI GALI TA" #x1890)
132 ("MONGOLIAN LETTER ALI GALI DA" #x1891)
133 ("MONGOLIAN LETTER ALI GALI PA" #x1892)
134 ("MONGOLIAN LETTER ALI GALI PHA" #x1893)
135 ("MONGOLIAN LETTER ALI GALI SSA" #x1894)
136 ("MONGOLIAN LETTER ALI GALI ZHA" #x1895)
137 ("MONGOLIAN LETTER ALI GALI ZA" #x1896)
138 ("MONGOLIAN LETTER ALI GALI AH" #x1897)
139 ("MONGOLIAN LETTER TODO ALI GALI TA" #x1898)
140 ("MONGOLIAN LETTER TODO ALI GALI ZHA" #x1899)
141 ("MONGOLIAN LETTER MANCHU ALI GALI GHA" #x189A)
142 ("MONGOLIAN LETTER MANCHU ALI GALI NGA" #x189B)
143 ("MONGOLIAN LETTER MANCHU ALI GALI CA" #x189C)
144 ("MONGOLIAN LETTER MANCHU ALI GALI JHA" #x189D)
145 ("MONGOLIAN LETTER MANCHU ALI GALI TTA" #x189E)
146 ("MONGOLIAN LETTER MANCHU ALI GALI DDHA" #x189F)
147 ("MONGOLIAN LETTER MANCHU ALI GALI TA" #x18A0)
148 ("MONGOLIAN LETTER MANCHU ALI GALI DHA" #x18A1)
149 ("MONGOLIAN LETTER MANCHU ALI GALI SSA" #x18A2)
150 ("MONGOLIAN LETTER MANCHU ALI GALI CYA" #x18A3)
151 ("MONGOLIAN LETTER MANCHU ALI GALI ZHA" #x18A4)
152 ("MONGOLIAN LETTER MANCHU ALI GALI ZA" #x18A5)
153 ("MONGOLIAN LETTER ALI GALI HALF U" #x18A6)
154 ("MONGOLIAN LETTER ALI GALI HALF YA" #x18A7)
155 ("MONGOLIAN LETTER MANCHU ALI GALI BHA" #x18A8)
156 ("MONGOLIAN LETTER ALI GALI DAGALGA" #x18A9)
157 ))
diff --git a/lisp/nxml/char-name/unicode/01E00-01EFF.el b/lisp/nxml/char-name/unicode/01E00-01EFF.el
new file mode 100644
index 00000000000..618b74cd3da
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/01E00-01EFF.el
@@ -0,0 +1,248 @@
1(nxml-define-char-name-set 'latin-extended-additional
2 '(("LATIN CAPITAL LETTER A WITH RING BELOW" #x1E00)
3 ("LATIN SMALL LETTER A WITH RING BELOW" #x1E01)
4 ("LATIN CAPITAL LETTER B WITH DOT ABOVE" #x1E02)
5 ("LATIN SMALL LETTER B WITH DOT ABOVE" #x1E03)
6 ("LATIN CAPITAL LETTER B WITH DOT BELOW" #x1E04)
7 ("LATIN SMALL LETTER B WITH DOT BELOW" #x1E05)
8 ("LATIN CAPITAL LETTER B WITH LINE BELOW" #x1E06)
9 ("LATIN SMALL LETTER B WITH LINE BELOW" #x1E07)
10 ("LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE" #x1E08)
11 ("LATIN SMALL LETTER C WITH CEDILLA AND ACUTE" #x1E09)
12 ("LATIN CAPITAL LETTER D WITH DOT ABOVE" #x1E0A)
13 ("LATIN SMALL LETTER D WITH DOT ABOVE" #x1E0B)
14 ("LATIN CAPITAL LETTER D WITH DOT BELOW" #x1E0C)
15 ("LATIN SMALL LETTER D WITH DOT BELOW" #x1E0D)
16 ("LATIN CAPITAL LETTER D WITH LINE BELOW" #x1E0E)
17 ("LATIN SMALL LETTER D WITH LINE BELOW" #x1E0F)
18 ("LATIN CAPITAL LETTER D WITH CEDILLA" #x1E10)
19 ("LATIN SMALL LETTER D WITH CEDILLA" #x1E11)
20 ("LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW" #x1E12)
21 ("LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW" #x1E13)
22 ("LATIN CAPITAL LETTER E WITH MACRON AND GRAVE" #x1E14)
23 ("LATIN SMALL LETTER E WITH MACRON AND GRAVE" #x1E15)
24 ("LATIN CAPITAL LETTER E WITH MACRON AND ACUTE" #x1E16)
25 ("LATIN SMALL LETTER E WITH MACRON AND ACUTE" #x1E17)
26 ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW" #x1E18)
27 ("LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW" #x1E19)
28 ("LATIN CAPITAL LETTER E WITH TILDE BELOW" #x1E1A)
29 ("LATIN SMALL LETTER E WITH TILDE BELOW" #x1E1B)
30 ("LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE" #x1E1C)
31 ("LATIN SMALL LETTER E WITH CEDILLA AND BREVE" #x1E1D)
32 ("LATIN CAPITAL LETTER F WITH DOT ABOVE" #x1E1E)
33 ("LATIN SMALL LETTER F WITH DOT ABOVE" #x1E1F)
34 ("LATIN CAPITAL LETTER G WITH MACRON" #x1E20)
35 ("LATIN SMALL LETTER G WITH MACRON" #x1E21)
36 ("LATIN CAPITAL LETTER H WITH DOT ABOVE" #x1E22)
37 ("LATIN SMALL LETTER H WITH DOT ABOVE" #x1E23)
38 ("LATIN CAPITAL LETTER H WITH DOT BELOW" #x1E24)
39 ("LATIN SMALL LETTER H WITH DOT BELOW" #x1E25)
40 ("LATIN CAPITAL LETTER H WITH DIAERESIS" #x1E26)
41 ("LATIN SMALL LETTER H WITH DIAERESIS" #x1E27)
42 ("LATIN CAPITAL LETTER H WITH CEDILLA" #x1E28)
43 ("LATIN SMALL LETTER H WITH CEDILLA" #x1E29)
44 ("LATIN CAPITAL LETTER H WITH BREVE BELOW" #x1E2A)
45 ("LATIN SMALL LETTER H WITH BREVE BELOW" #x1E2B)
46 ("LATIN CAPITAL LETTER I WITH TILDE BELOW" #x1E2C)
47 ("LATIN SMALL LETTER I WITH TILDE BELOW" #x1E2D)
48 ("LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE" #x1E2E)
49 ("LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE" #x1E2F)
50 ("LATIN CAPITAL LETTER K WITH ACUTE" #x1E30)
51 ("LATIN SMALL LETTER K WITH ACUTE" #x1E31)
52 ("LATIN CAPITAL LETTER K WITH DOT BELOW" #x1E32)
53 ("LATIN SMALL LETTER K WITH DOT BELOW" #x1E33)
54 ("LATIN CAPITAL LETTER K WITH LINE BELOW" #x1E34)
55 ("LATIN SMALL LETTER K WITH LINE BELOW" #x1E35)
56 ("LATIN CAPITAL LETTER L WITH DOT BELOW" #x1E36)
57 ("LATIN SMALL LETTER L WITH DOT BELOW" #x1E37)
58 ("LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON" #x1E38)
59 ("LATIN SMALL LETTER L WITH DOT BELOW AND MACRON" #x1E39)
60 ("LATIN CAPITAL LETTER L WITH LINE BELOW" #x1E3A)
61 ("LATIN SMALL LETTER L WITH LINE BELOW" #x1E3B)
62 ("LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW" #x1E3C)
63 ("LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW" #x1E3D)
64 ("LATIN CAPITAL LETTER M WITH ACUTE" #x1E3E)
65 ("LATIN SMALL LETTER M WITH ACUTE" #x1E3F)
66 ("LATIN CAPITAL LETTER M WITH DOT ABOVE" #x1E40)
67 ("LATIN SMALL LETTER M WITH DOT ABOVE" #x1E41)
68 ("LATIN CAPITAL LETTER M WITH DOT BELOW" #x1E42)
69 ("LATIN SMALL LETTER M WITH DOT BELOW" #x1E43)
70 ("LATIN CAPITAL LETTER N WITH DOT ABOVE" #x1E44)
71 ("LATIN SMALL LETTER N WITH DOT ABOVE" #x1E45)
72 ("LATIN CAPITAL LETTER N WITH DOT BELOW" #x1E46)
73 ("LATIN SMALL LETTER N WITH DOT BELOW" #x1E47)
74 ("LATIN CAPITAL LETTER N WITH LINE BELOW" #x1E48)
75 ("LATIN SMALL LETTER N WITH LINE BELOW" #x1E49)
76 ("LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW" #x1E4A)
77 ("LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW" #x1E4B)
78 ("LATIN CAPITAL LETTER O WITH TILDE AND ACUTE" #x1E4C)
79 ("LATIN SMALL LETTER O WITH TILDE AND ACUTE" #x1E4D)
80 ("LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS" #x1E4E)
81 ("LATIN SMALL LETTER O WITH TILDE AND DIAERESIS" #x1E4F)
82 ("LATIN CAPITAL LETTER O WITH MACRON AND GRAVE" #x1E50)
83 ("LATIN SMALL LETTER O WITH MACRON AND GRAVE" #x1E51)
84 ("LATIN CAPITAL LETTER O WITH MACRON AND ACUTE" #x1E52)
85 ("LATIN SMALL LETTER O WITH MACRON AND ACUTE" #x1E53)
86 ("LATIN CAPITAL LETTER P WITH ACUTE" #x1E54)
87 ("LATIN SMALL LETTER P WITH ACUTE" #x1E55)
88 ("LATIN CAPITAL LETTER P WITH DOT ABOVE" #x1E56)
89 ("LATIN SMALL LETTER P WITH DOT ABOVE" #x1E57)
90 ("LATIN CAPITAL LETTER R WITH DOT ABOVE" #x1E58)
91 ("LATIN SMALL LETTER R WITH DOT ABOVE" #x1E59)
92 ("LATIN CAPITAL LETTER R WITH DOT BELOW" #x1E5A)
93 ("LATIN SMALL LETTER R WITH DOT BELOW" #x1E5B)
94 ("LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON" #x1E5C)
95 ("LATIN SMALL LETTER R WITH DOT BELOW AND MACRON" #x1E5D)
96 ("LATIN CAPITAL LETTER R WITH LINE BELOW" #x1E5E)
97 ("LATIN SMALL LETTER R WITH LINE BELOW" #x1E5F)
98 ("LATIN CAPITAL LETTER S WITH DOT ABOVE" #x1E60)
99 ("LATIN SMALL LETTER S WITH DOT ABOVE" #x1E61)
100 ("LATIN CAPITAL LETTER S WITH DOT BELOW" #x1E62)
101 ("LATIN SMALL LETTER S WITH DOT BELOW" #x1E63)
102 ("LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE" #x1E64)
103 ("LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE" #x1E65)
104 ("LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE" #x1E66)
105 ("LATIN SMALL LETTER S WITH CARON AND DOT ABOVE" #x1E67)
106 ("LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE" #x1E68)
107 ("LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE" #x1E69)
108 ("LATIN CAPITAL LETTER T WITH DOT ABOVE" #x1E6A)
109 ("LATIN SMALL LETTER T WITH DOT ABOVE" #x1E6B)
110 ("LATIN CAPITAL LETTER T WITH DOT BELOW" #x1E6C)
111 ("LATIN SMALL LETTER T WITH DOT BELOW" #x1E6D)
112 ("LATIN CAPITAL LETTER T WITH LINE BELOW" #x1E6E)
113 ("LATIN SMALL LETTER T WITH LINE BELOW" #x1E6F)
114 ("LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW" #x1E70)
115 ("LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW" #x1E71)
116 ("LATIN CAPITAL LETTER U WITH DIAERESIS BELOW" #x1E72)
117 ("LATIN SMALL LETTER U WITH DIAERESIS BELOW" #x1E73)
118 ("LATIN CAPITAL LETTER U WITH TILDE BELOW" #x1E74)
119 ("LATIN SMALL LETTER U WITH TILDE BELOW" #x1E75)
120 ("LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW" #x1E76)
121 ("LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW" #x1E77)
122 ("LATIN CAPITAL LETTER U WITH TILDE AND ACUTE" #x1E78)
123 ("LATIN SMALL LETTER U WITH TILDE AND ACUTE" #x1E79)
124 ("LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS" #x1E7A)
125 ("LATIN SMALL LETTER U WITH MACRON AND DIAERESIS" #x1E7B)
126 ("LATIN CAPITAL LETTER V WITH TILDE" #x1E7C)
127 ("LATIN SMALL LETTER V WITH TILDE" #x1E7D)
128 ("LATIN CAPITAL LETTER V WITH DOT BELOW" #x1E7E)
129 ("LATIN SMALL LETTER V WITH DOT BELOW" #x1E7F)
130 ("LATIN CAPITAL LETTER W WITH GRAVE" #x1E80)
131 ("LATIN SMALL LETTER W WITH GRAVE" #x1E81)
132 ("LATIN CAPITAL LETTER W WITH ACUTE" #x1E82)
133 ("LATIN SMALL LETTER W WITH ACUTE" #x1E83)
134 ("LATIN CAPITAL LETTER W WITH DIAERESIS" #x1E84)
135 ("LATIN SMALL LETTER W WITH DIAERESIS" #x1E85)
136 ("LATIN CAPITAL LETTER W WITH DOT ABOVE" #x1E86)
137 ("LATIN SMALL LETTER W WITH DOT ABOVE" #x1E87)
138 ("LATIN CAPITAL LETTER W WITH DOT BELOW" #x1E88)
139 ("LATIN SMALL LETTER W WITH DOT BELOW" #x1E89)
140 ("LATIN CAPITAL LETTER X WITH DOT ABOVE" #x1E8A)
141 ("LATIN SMALL LETTER X WITH DOT ABOVE" #x1E8B)
142 ("LATIN CAPITAL LETTER X WITH DIAERESIS" #x1E8C)
143 ("LATIN SMALL LETTER X WITH DIAERESIS" #x1E8D)
144 ("LATIN CAPITAL LETTER Y WITH DOT ABOVE" #x1E8E)
145 ("LATIN SMALL LETTER Y WITH DOT ABOVE" #x1E8F)
146 ("LATIN CAPITAL LETTER Z WITH CIRCUMFLEX" #x1E90)
147 ("LATIN SMALL LETTER Z WITH CIRCUMFLEX" #x1E91)
148 ("LATIN CAPITAL LETTER Z WITH DOT BELOW" #x1E92)
149 ("LATIN SMALL LETTER Z WITH DOT BELOW" #x1E93)
150 ("LATIN CAPITAL LETTER Z WITH LINE BELOW" #x1E94)
151 ("LATIN SMALL LETTER Z WITH LINE BELOW" #x1E95)
152 ("LATIN SMALL LETTER H WITH LINE BELOW" #x1E96)
153 ("LATIN SMALL LETTER T WITH DIAERESIS" #x1E97)
154 ("LATIN SMALL LETTER W WITH RING ABOVE" #x1E98)
155 ("LATIN SMALL LETTER Y WITH RING ABOVE" #x1E99)
156 ("LATIN SMALL LETTER A WITH RIGHT HALF RING" #x1E9A)
157 ("LATIN SMALL LETTER LONG S WITH DOT ABOVE" #x1E9B)
158 ("LATIN CAPITAL LETTER A WITH DOT BELOW" #x1EA0)
159 ("LATIN SMALL LETTER A WITH DOT BELOW" #x1EA1)
160 ("LATIN CAPITAL LETTER A WITH HOOK ABOVE" #x1EA2)
161 ("LATIN SMALL LETTER A WITH HOOK ABOVE" #x1EA3)
162 ("LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE" #x1EA4)
163 ("LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE" #x1EA5)
164 ("LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE" #x1EA6)
165 ("LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE" #x1EA7)
166 ("LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE" #x1EA8)
167 ("LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE" #x1EA9)
168 ("LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE" #x1EAA)
169 ("LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE" #x1EAB)
170 ("LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW" #x1EAC)
171 ("LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW" #x1EAD)
172 ("LATIN CAPITAL LETTER A WITH BREVE AND ACUTE" #x1EAE)
173 ("LATIN SMALL LETTER A WITH BREVE AND ACUTE" #x1EAF)
174 ("LATIN CAPITAL LETTER A WITH BREVE AND GRAVE" #x1EB0)
175 ("LATIN SMALL LETTER A WITH BREVE AND GRAVE" #x1EB1)
176 ("LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE" #x1EB2)
177 ("LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE" #x1EB3)
178 ("LATIN CAPITAL LETTER A WITH BREVE AND TILDE" #x1EB4)
179 ("LATIN SMALL LETTER A WITH BREVE AND TILDE" #x1EB5)
180 ("LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW" #x1EB6)
181 ("LATIN SMALL LETTER A WITH BREVE AND DOT BELOW" #x1EB7)
182 ("LATIN CAPITAL LETTER E WITH DOT BELOW" #x1EB8)
183 ("LATIN SMALL LETTER E WITH DOT BELOW" #x1EB9)
184 ("LATIN CAPITAL LETTER E WITH HOOK ABOVE" #x1EBA)
185 ("LATIN SMALL LETTER E WITH HOOK ABOVE" #x1EBB)
186 ("LATIN CAPITAL LETTER E WITH TILDE" #x1EBC)
187 ("LATIN SMALL LETTER E WITH TILDE" #x1EBD)
188 ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE" #x1EBE)
189 ("LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE" #x1EBF)
190 ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE" #x1EC0)
191 ("LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE" #x1EC1)
192 ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE" #x1EC2)
193 ("LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE" #x1EC3)
194 ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE" #x1EC4)
195 ("LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE" #x1EC5)
196 ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW" #x1EC6)
197 ("LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW" #x1EC7)
198 ("LATIN CAPITAL LETTER I WITH HOOK ABOVE" #x1EC8)
199 ("LATIN SMALL LETTER I WITH HOOK ABOVE" #x1EC9)
200 ("LATIN CAPITAL LETTER I WITH DOT BELOW" #x1ECA)
201 ("LATIN SMALL LETTER I WITH DOT BELOW" #x1ECB)
202 ("LATIN CAPITAL LETTER O WITH DOT BELOW" #x1ECC)
203 ("LATIN SMALL LETTER O WITH DOT BELOW" #x1ECD)
204 ("LATIN CAPITAL LETTER O WITH HOOK ABOVE" #x1ECE)
205 ("LATIN SMALL LETTER O WITH HOOK ABOVE" #x1ECF)
206 ("LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE" #x1ED0)
207 ("LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE" #x1ED1)
208 ("LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE" #x1ED2)
209 ("LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE" #x1ED3)
210 ("LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE" #x1ED4)
211 ("LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE" #x1ED5)
212 ("LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE" #x1ED6)
213 ("LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE" #x1ED7)
214 ("LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW" #x1ED8)
215 ("LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW" #x1ED9)
216 ("LATIN CAPITAL LETTER O WITH HORN AND ACUTE" #x1EDA)
217 ("LATIN SMALL LETTER O WITH HORN AND ACUTE" #x1EDB)
218 ("LATIN CAPITAL LETTER O WITH HORN AND GRAVE" #x1EDC)
219 ("LATIN SMALL LETTER O WITH HORN AND GRAVE" #x1EDD)
220 ("LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE" #x1EDE)
221 ("LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE" #x1EDF)
222 ("LATIN CAPITAL LETTER O WITH HORN AND TILDE" #x1EE0)
223 ("LATIN SMALL LETTER O WITH HORN AND TILDE" #x1EE1)
224 ("LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW" #x1EE2)
225 ("LATIN SMALL LETTER O WITH HORN AND DOT BELOW" #x1EE3)
226 ("LATIN CAPITAL LETTER U WITH DOT BELOW" #x1EE4)
227 ("LATIN SMALL LETTER U WITH DOT BELOW" #x1EE5)
228 ("LATIN CAPITAL LETTER U WITH HOOK ABOVE" #x1EE6)
229 ("LATIN SMALL LETTER U WITH HOOK ABOVE" #x1EE7)
230 ("LATIN CAPITAL LETTER U WITH HORN AND ACUTE" #x1EE8)
231 ("LATIN SMALL LETTER U WITH HORN AND ACUTE" #x1EE9)
232 ("LATIN CAPITAL LETTER U WITH HORN AND GRAVE" #x1EEA)
233 ("LATIN SMALL LETTER U WITH HORN AND GRAVE" #x1EEB)
234 ("LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE" #x1EEC)
235 ("LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE" #x1EED)
236 ("LATIN CAPITAL LETTER U WITH HORN AND TILDE" #x1EEE)
237 ("LATIN SMALL LETTER U WITH HORN AND TILDE" #x1EEF)
238 ("LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW" #x1EF0)
239 ("LATIN SMALL LETTER U WITH HORN AND DOT BELOW" #x1EF1)
240 ("LATIN CAPITAL LETTER Y WITH GRAVE" #x1EF2)
241 ("LATIN SMALL LETTER Y WITH GRAVE" #x1EF3)
242 ("LATIN CAPITAL LETTER Y WITH DOT BELOW" #x1EF4)
243 ("LATIN SMALL LETTER Y WITH DOT BELOW" #x1EF5)
244 ("LATIN CAPITAL LETTER Y WITH HOOK ABOVE" #x1EF6)
245 ("LATIN SMALL LETTER Y WITH HOOK ABOVE" #x1EF7)
246 ("LATIN CAPITAL LETTER Y WITH TILDE" #x1EF8)
247 ("LATIN SMALL LETTER Y WITH TILDE" #x1EF9)
248 ))
diff --git a/lisp/nxml/char-name/unicode/01F00-01FFF.el b/lisp/nxml/char-name/unicode/01F00-01FFF.el
new file mode 100644
index 00000000000..56ce30a017a
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/01F00-01FFF.el
@@ -0,0 +1,235 @@
1(nxml-define-char-name-set 'greek-extended
2 '(("GREEK SMALL LETTER ALPHA WITH PSILI" #x1F00)
3 ("GREEK SMALL LETTER ALPHA WITH DASIA" #x1F01)
4 ("GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA" #x1F02)
5 ("GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA" #x1F03)
6 ("GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA" #x1F04)
7 ("GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA" #x1F05)
8 ("GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI" #x1F06)
9 ("GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI" #x1F07)
10 ("GREEK CAPITAL LETTER ALPHA WITH PSILI" #x1F08)
11 ("GREEK CAPITAL LETTER ALPHA WITH DASIA" #x1F09)
12 ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA" #x1F0A)
13 ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA" #x1F0B)
14 ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA" #x1F0C)
15 ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA" #x1F0D)
16 ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI" #x1F0E)
17 ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI" #x1F0F)
18 ("GREEK SMALL LETTER EPSILON WITH PSILI" #x1F10)
19 ("GREEK SMALL LETTER EPSILON WITH DASIA" #x1F11)
20 ("GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA" #x1F12)
21 ("GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA" #x1F13)
22 ("GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA" #x1F14)
23 ("GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA" #x1F15)
24 ("GREEK CAPITAL LETTER EPSILON WITH PSILI" #x1F18)
25 ("GREEK CAPITAL LETTER EPSILON WITH DASIA" #x1F19)
26 ("GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA" #x1F1A)
27 ("GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA" #x1F1B)
28 ("GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA" #x1F1C)
29 ("GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA" #x1F1D)
30 ("GREEK SMALL LETTER ETA WITH PSILI" #x1F20)
31 ("GREEK SMALL LETTER ETA WITH DASIA" #x1F21)
32 ("GREEK SMALL LETTER ETA WITH PSILI AND VARIA" #x1F22)
33 ("GREEK SMALL LETTER ETA WITH DASIA AND VARIA" #x1F23)
34 ("GREEK SMALL LETTER ETA WITH PSILI AND OXIA" #x1F24)
35 ("GREEK SMALL LETTER ETA WITH DASIA AND OXIA" #x1F25)
36 ("GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI" #x1F26)
37 ("GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI" #x1F27)
38 ("GREEK CAPITAL LETTER ETA WITH PSILI" #x1F28)
39 ("GREEK CAPITAL LETTER ETA WITH DASIA" #x1F29)
40 ("GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA" #x1F2A)
41 ("GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA" #x1F2B)
42 ("GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA" #x1F2C)
43 ("GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA" #x1F2D)
44 ("GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI" #x1F2E)
45 ("GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI" #x1F2F)
46 ("GREEK SMALL LETTER IOTA WITH PSILI" #x1F30)
47 ("GREEK SMALL LETTER IOTA WITH DASIA" #x1F31)
48 ("GREEK SMALL LETTER IOTA WITH PSILI AND VARIA" #x1F32)
49 ("GREEK SMALL LETTER IOTA WITH DASIA AND VARIA" #x1F33)
50 ("GREEK SMALL LETTER IOTA WITH PSILI AND OXIA" #x1F34)
51 ("GREEK SMALL LETTER IOTA WITH DASIA AND OXIA" #x1F35)
52 ("GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI" #x1F36)
53 ("GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI" #x1F37)
54 ("GREEK CAPITAL LETTER IOTA WITH PSILI" #x1F38)
55 ("GREEK CAPITAL LETTER IOTA WITH DASIA" #x1F39)
56 ("GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA" #x1F3A)
57 ("GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA" #x1F3B)
58 ("GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA" #x1F3C)
59 ("GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA" #x1F3D)
60 ("GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI" #x1F3E)
61 ("GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI" #x1F3F)
62 ("GREEK SMALL LETTER OMICRON WITH PSILI" #x1F40)
63 ("GREEK SMALL LETTER OMICRON WITH DASIA" #x1F41)
64 ("GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA" #x1F42)
65 ("GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA" #x1F43)
66 ("GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA" #x1F44)
67 ("GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA" #x1F45)
68 ("GREEK CAPITAL LETTER OMICRON WITH PSILI" #x1F48)
69 ("GREEK CAPITAL LETTER OMICRON WITH DASIA" #x1F49)
70 ("GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA" #x1F4A)
71 ("GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA" #x1F4B)
72 ("GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA" #x1F4C)
73 ("GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA" #x1F4D)
74 ("GREEK SMALL LETTER UPSILON WITH PSILI" #x1F50)
75 ("GREEK SMALL LETTER UPSILON WITH DASIA" #x1F51)
76 ("GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA" #x1F52)
77 ("GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA" #x1F53)
78 ("GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA" #x1F54)
79 ("GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA" #x1F55)
80 ("GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI" #x1F56)
81 ("GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI" #x1F57)
82 ("GREEK CAPITAL LETTER UPSILON WITH DASIA" #x1F59)
83 ("GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA" #x1F5B)
84 ("GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA" #x1F5D)
85 ("GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI" #x1F5F)
86 ("GREEK SMALL LETTER OMEGA WITH PSILI" #x1F60)
87 ("GREEK SMALL LETTER OMEGA WITH DASIA" #x1F61)
88 ("GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA" #x1F62)
89 ("GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA" #x1F63)
90 ("GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA" #x1F64)
91 ("GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA" #x1F65)
92 ("GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI" #x1F66)
93 ("GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI" #x1F67)
94 ("GREEK CAPITAL LETTER OMEGA WITH PSILI" #x1F68)
95 ("GREEK CAPITAL LETTER OMEGA WITH DASIA" #x1F69)
96 ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA" #x1F6A)
97 ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA" #x1F6B)
98 ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA" #x1F6C)
99 ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA" #x1F6D)
100 ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI" #x1F6E)
101 ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI" #x1F6F)
102 ("GREEK SMALL LETTER ALPHA WITH VARIA" #x1F70)
103 ("GREEK SMALL LETTER ALPHA WITH OXIA" #x1F71)
104 ("GREEK SMALL LETTER EPSILON WITH VARIA" #x1F72)
105 ("GREEK SMALL LETTER EPSILON WITH OXIA" #x1F73)
106 ("GREEK SMALL LETTER ETA WITH VARIA" #x1F74)
107 ("GREEK SMALL LETTER ETA WITH OXIA" #x1F75)
108 ("GREEK SMALL LETTER IOTA WITH VARIA" #x1F76)
109 ("GREEK SMALL LETTER IOTA WITH OXIA" #x1F77)
110 ("GREEK SMALL LETTER OMICRON WITH VARIA" #x1F78)
111 ("GREEK SMALL LETTER OMICRON WITH OXIA" #x1F79)
112 ("GREEK SMALL LETTER UPSILON WITH VARIA" #x1F7A)
113 ("GREEK SMALL LETTER UPSILON WITH OXIA" #x1F7B)
114 ("GREEK SMALL LETTER OMEGA WITH VARIA" #x1F7C)
115 ("GREEK SMALL LETTER OMEGA WITH OXIA" #x1F7D)
116 ("GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI" #x1F80)
117 ("GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI" #x1F81)
118 ("GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI" #x1F82)
119 ("GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI" #x1F83)
120 ("GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI" #x1F84)
121 ("GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI" #x1F85)
122 ("GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI" #x1F86)
123 ("GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI" #x1F87)
124 ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI" #x1F88)
125 ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI" #x1F89)
126 ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI" #x1F8A)
127 ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI" #x1F8B)
128 ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI" #x1F8C)
129 ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI" #x1F8D)
130 ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI" #x1F8E)
131 ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI" #x1F8F)
132 ("GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI" #x1F90)
133 ("GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI" #x1F91)
134 ("GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI" #x1F92)
135 ("GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI" #x1F93)
136 ("GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI" #x1F94)
137 ("GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI" #x1F95)
138 ("GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI" #x1F96)
139 ("GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI" #x1F97)
140 ("GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI" #x1F98)
141 ("GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI" #x1F99)
142 ("GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI" #x1F9A)
143 ("GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI" #x1F9B)
144 ("GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI" #x1F9C)
145 ("GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI" #x1F9D)
146 ("GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI" #x1F9E)
147 ("GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI" #x1F9F)
148 ("GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI" #x1FA0)
149 ("GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI" #x1FA1)
150 ("GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI" #x1FA2)
151 ("GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI" #x1FA3)
152 ("GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI" #x1FA4)
153 ("GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI" #x1FA5)
154 ("GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI" #x1FA6)
155 ("GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI" #x1FA7)
156 ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI" #x1FA8)
157 ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI" #x1FA9)
158 ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI" #x1FAA)
159 ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI" #x1FAB)
160 ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI" #x1FAC)
161 ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI" #x1FAD)
162 ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI" #x1FAE)
163 ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI" #x1FAF)
164 ("GREEK SMALL LETTER ALPHA WITH VRACHY" #x1FB0)
165 ("GREEK SMALL LETTER ALPHA WITH MACRON" #x1FB1)
166 ("GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI" #x1FB2)
167 ("GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI" #x1FB3)
168 ("GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI" #x1FB4)
169 ("GREEK SMALL LETTER ALPHA WITH PERISPOMENI" #x1FB6)
170 ("GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI" #x1FB7)
171 ("GREEK CAPITAL LETTER ALPHA WITH VRACHY" #x1FB8)
172 ("GREEK CAPITAL LETTER ALPHA WITH MACRON" #x1FB9)
173 ("GREEK CAPITAL LETTER ALPHA WITH VARIA" #x1FBA)
174 ("GREEK CAPITAL LETTER ALPHA WITH OXIA" #x1FBB)
175 ("GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI" #x1FBC)
176 ("GREEK KORONIS" #x1FBD)
177 ("GREEK PROSGEGRAMMENI" #x1FBE)
178 ("GREEK PSILI" #x1FBF)
179 ("GREEK PERISPOMENI" #x1FC0)
180 ("GREEK DIALYTIKA AND PERISPOMENI" #x1FC1)
181 ("GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI" #x1FC2)
182 ("GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI" #x1FC3)
183 ("GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI" #x1FC4)
184 ("GREEK SMALL LETTER ETA WITH PERISPOMENI" #x1FC6)
185 ("GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI" #x1FC7)
186 ("GREEK CAPITAL LETTER EPSILON WITH VARIA" #x1FC8)
187 ("GREEK CAPITAL LETTER EPSILON WITH OXIA" #x1FC9)
188 ("GREEK CAPITAL LETTER ETA WITH VARIA" #x1FCA)
189 ("GREEK CAPITAL LETTER ETA WITH OXIA" #x1FCB)
190 ("GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI" #x1FCC)
191 ("GREEK PSILI AND VARIA" #x1FCD)
192 ("GREEK PSILI AND OXIA" #x1FCE)
193 ("GREEK PSILI AND PERISPOMENI" #x1FCF)
194 ("GREEK SMALL LETTER IOTA WITH VRACHY" #x1FD0)
195 ("GREEK SMALL LETTER IOTA WITH MACRON" #x1FD1)
196 ("GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA" #x1FD2)
197 ("GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA" #x1FD3)
198 ("GREEK SMALL LETTER IOTA WITH PERISPOMENI" #x1FD6)
199 ("GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI" #x1FD7)
200 ("GREEK CAPITAL LETTER IOTA WITH VRACHY" #x1FD8)
201 ("GREEK CAPITAL LETTER IOTA WITH MACRON" #x1FD9)
202 ("GREEK CAPITAL LETTER IOTA WITH VARIA" #x1FDA)
203 ("GREEK CAPITAL LETTER IOTA WITH OXIA" #x1FDB)
204 ("GREEK DASIA AND VARIA" #x1FDD)
205 ("GREEK DASIA AND OXIA" #x1FDE)
206 ("GREEK DASIA AND PERISPOMENI" #x1FDF)
207 ("GREEK SMALL LETTER UPSILON WITH VRACHY" #x1FE0)
208 ("GREEK SMALL LETTER UPSILON WITH MACRON" #x1FE1)
209 ("GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA" #x1FE2)
210 ("GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA" #x1FE3)
211 ("GREEK SMALL LETTER RHO WITH PSILI" #x1FE4)
212 ("GREEK SMALL LETTER RHO WITH DASIA" #x1FE5)
213 ("GREEK SMALL LETTER UPSILON WITH PERISPOMENI" #x1FE6)
214 ("GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI" #x1FE7)
215 ("GREEK CAPITAL LETTER UPSILON WITH VRACHY" #x1FE8)
216 ("GREEK CAPITAL LETTER UPSILON WITH MACRON" #x1FE9)
217 ("GREEK CAPITAL LETTER UPSILON WITH VARIA" #x1FEA)
218 ("GREEK CAPITAL LETTER UPSILON WITH OXIA" #x1FEB)
219 ("GREEK CAPITAL LETTER RHO WITH DASIA" #x1FEC)
220 ("GREEK DIALYTIKA AND VARIA" #x1FED)
221 ("GREEK DIALYTIKA AND OXIA" #x1FEE)
222 ("GREEK VARIA" #x1FEF)
223 ("GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI" #x1FF2)
224 ("GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI" #x1FF3)
225 ("GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI" #x1FF4)
226 ("GREEK SMALL LETTER OMEGA WITH PERISPOMENI" #x1FF6)
227 ("GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI" #x1FF7)
228 ("GREEK CAPITAL LETTER OMICRON WITH VARIA" #x1FF8)
229 ("GREEK CAPITAL LETTER OMICRON WITH OXIA" #x1FF9)
230 ("GREEK CAPITAL LETTER OMEGA WITH VARIA" #x1FFA)
231 ("GREEK CAPITAL LETTER OMEGA WITH OXIA" #x1FFB)
232 ("GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI" #x1FFC)
233 ("GREEK OXIA" #x1FFD)
234 ("GREEK DASIA" #x1FFE)
235 ))
diff --git a/lisp/nxml/char-name/unicode/02000-0206F.el b/lisp/nxml/char-name/unicode/02000-0206F.el
new file mode 100644
index 00000000000..54f6207cd42
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/02000-0206F.el
@@ -0,0 +1,97 @@
1(nxml-define-char-name-set 'general-punctuation
2 '(("EN QUAD" #x2000)
3 ("EM QUAD" #x2001)
4 ("EN SPACE" #x2002)
5 ("EM SPACE" #x2003)
6 ("THREE-PER-EM SPACE" #x2004)
7 ("FOUR-PER-EM SPACE" #x2005)
8 ("SIX-PER-EM SPACE" #x2006)
9 ("FIGURE SPACE" #x2007)
10 ("PUNCTUATION SPACE" #x2008)
11 ("THIN SPACE" #x2009)
12 ("HAIR SPACE" #x200A)
13 ("ZERO WIDTH SPACE" #x200B)
14 ("ZERO WIDTH NON-JOINER" #x200C)
15 ("ZERO WIDTH JOINER" #x200D)
16 ("LEFT-TO-RIGHT MARK" #x200E)
17 ("RIGHT-TO-LEFT MARK" #x200F)
18 ("HYPHEN" #x2010)
19 ("NON-BREAKING HYPHEN" #x2011)
20 ("FIGURE DASH" #x2012)
21 ("EN DASH" #x2013)
22 ("EM DASH" #x2014)
23 ("HORIZONTAL BAR" #x2015)
24 ("DOUBLE VERTICAL LINE" #x2016)
25 ("DOUBLE LOW LINE" #x2017)
26 ("LEFT SINGLE QUOTATION MARK" #x2018)
27 ("RIGHT SINGLE QUOTATION MARK" #x2019)
28 ("SINGLE LOW-9 QUOTATION MARK" #x201A)
29 ("SINGLE HIGH-REVERSED-9 QUOTATION MARK" #x201B)
30 ("LEFT DOUBLE QUOTATION MARK" #x201C)
31 ("RIGHT DOUBLE QUOTATION MARK" #x201D)
32 ("DOUBLE LOW-9 QUOTATION MARK" #x201E)
33 ("DOUBLE HIGH-REVERSED-9 QUOTATION MARK" #x201F)
34 ("DAGGER" #x2020)
35 ("DOUBLE DAGGER" #x2021)
36 ("BULLET" #x2022)
37 ("TRIANGULAR BULLET" #x2023)
38 ("ONE DOT LEADER" #x2024)
39 ("TWO DOT LEADER" #x2025)
40 ("HORIZONTAL ELLIPSIS" #x2026)
41 ("HYPHENATION POINT" #x2027)
42 ("LINE SEPARATOR" #x2028)
43 ("PARAGRAPH SEPARATOR" #x2029)
44 ("LEFT-TO-RIGHT EMBEDDING" #x202A)
45 ("RIGHT-TO-LEFT EMBEDDING" #x202B)
46 ("POP DIRECTIONAL FORMATTING" #x202C)
47 ("LEFT-TO-RIGHT OVERRIDE" #x202D)
48 ("RIGHT-TO-LEFT OVERRIDE" #x202E)
49 ("NARROW NO-BREAK SPACE" #x202F)
50 ("PER MILLE SIGN" #x2030)
51 ("PER TEN THOUSAND SIGN" #x2031)
52 ("PRIME" #x2032)
53 ("DOUBLE PRIME" #x2033)
54 ("TRIPLE PRIME" #x2034)
55 ("REVERSED PRIME" #x2035)
56 ("REVERSED DOUBLE PRIME" #x2036)
57 ("REVERSED TRIPLE PRIME" #x2037)
58 ("CARET" #x2038)
59 ("SINGLE LEFT-POINTING ANGLE QUOTATION MARK" #x2039)
60 ("SINGLE RIGHT-POINTING ANGLE QUOTATION MARK" #x203A)
61 ("REFERENCE MARK" #x203B)
62 ("DOUBLE EXCLAMATION MARK" #x203C)
63 ("INTERROBANG" #x203D)
64 ("OVERLINE" #x203E)
65 ("UNDERTIE" #x203F)
66 ("CHARACTER TIE" #x2040)
67 ("CARET INSERTION POINT" #x2041)
68 ("ASTERISM" #x2042)
69 ("HYPHEN BULLET" #x2043)
70 ("FRACTION SLASH" #x2044)
71 ("LEFT SQUARE BRACKET WITH QUILL" #x2045)
72 ("RIGHT SQUARE BRACKET WITH QUILL" #x2046)
73 ("DOUBLE QUESTION MARK" #x2047)
74 ("QUESTION EXCLAMATION MARK" #x2048)
75 ("EXCLAMATION QUESTION MARK" #x2049)
76 ("TIRONIAN SIGN ET" #x204A)
77 ("REVERSED PILCROW SIGN" #x204B)
78 ("BLACK LEFTWARDS BULLET" #x204C)
79 ("BLACK RIGHTWARDS BULLET" #x204D)
80 ("LOW ASTERISK" #x204E)
81 ("REVERSED SEMICOLON" #x204F)
82 ("CLOSE UP" #x2050)
83 ("TWO ASTERISKS ALIGNED VERTICALLY" #x2051)
84 ("COMMERCIAL MINUS SIGN" #x2052)
85 ("QUADRUPLE PRIME" #x2057)
86 ("MEDIUM MATHEMATICAL SPACE" #x205F)
87 ("WORD JOINER" #x2060)
88 ("FUNCTION APPLICATION" #x2061)
89 ("INVISIBLE TIMES" #x2062)
90 ("INVISIBLE SEPARATOR" #x2063)
91 ("INHIBIT SYMMETRIC SWAPPING" #x206A)
92 ("ACTIVATE SYMMETRIC SWAPPING" #x206B)
93 ("INHIBIT ARABIC FORM SHAPING" #x206C)
94 ("ACTIVATE ARABIC FORM SHAPING" #x206D)
95 ("NATIONAL DIGIT SHAPES" #x206E)
96 ("NOMINAL DIGIT SHAPES" #x206F)
97 ))
diff --git a/lisp/nxml/char-name/unicode/02070-0209F.el b/lisp/nxml/char-name/unicode/02070-0209F.el
new file mode 100644
index 00000000000..5d37880fd62
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/02070-0209F.el
@@ -0,0 +1,31 @@
1(nxml-define-char-name-set 'superscripts-and-subscripts
2 '(("SUPERSCRIPT ZERO" #x2070)
3 ("SUPERSCRIPT LATIN SMALL LETTER I" #x2071)
4 ("SUPERSCRIPT FOUR" #x2074)
5 ("SUPERSCRIPT FIVE" #x2075)
6 ("SUPERSCRIPT SIX" #x2076)
7 ("SUPERSCRIPT SEVEN" #x2077)
8 ("SUPERSCRIPT EIGHT" #x2078)
9 ("SUPERSCRIPT NINE" #x2079)
10 ("SUPERSCRIPT PLUS SIGN" #x207A)
11 ("SUPERSCRIPT MINUS" #x207B)
12 ("SUPERSCRIPT EQUALS SIGN" #x207C)
13 ("SUPERSCRIPT LEFT PARENTHESIS" #x207D)
14 ("SUPERSCRIPT RIGHT PARENTHESIS" #x207E)
15 ("SUPERSCRIPT LATIN SMALL LETTER N" #x207F)
16 ("SUBSCRIPT ZERO" #x2080)
17 ("SUBSCRIPT ONE" #x2081)
18 ("SUBSCRIPT TWO" #x2082)
19 ("SUBSCRIPT THREE" #x2083)
20 ("SUBSCRIPT FOUR" #x2084)
21 ("SUBSCRIPT FIVE" #x2085)
22 ("SUBSCRIPT SIX" #x2086)
23 ("SUBSCRIPT SEVEN" #x2087)
24 ("SUBSCRIPT EIGHT" #x2088)
25 ("SUBSCRIPT NINE" #x2089)
26 ("SUBSCRIPT PLUS SIGN" #x208A)
27 ("SUBSCRIPT MINUS" #x208B)
28 ("SUBSCRIPT EQUALS SIGN" #x208C)
29 ("SUBSCRIPT LEFT PARENTHESIS" #x208D)
30 ("SUBSCRIPT RIGHT PARENTHESIS" #x208E)
31 ))
diff --git a/lisp/nxml/char-name/unicode/020A0-020CF.el b/lisp/nxml/char-name/unicode/020A0-020CF.el
new file mode 100644
index 00000000000..1cab37edcbc
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/020A0-020CF.el
@@ -0,0 +1,20 @@
1(nxml-define-char-name-set 'currency-symbols
2 '(("EURO-CURRENCY SIGN" #x20A0)
3 ("COLON SIGN" #x20A1)
4 ("CRUZEIRO SIGN" #x20A2)
5 ("FRENCH FRANC SIGN" #x20A3)
6 ("LIRA SIGN" #x20A4)
7 ("MILL SIGN" #x20A5)
8 ("NAIRA SIGN" #x20A6)
9 ("PESETA SIGN" #x20A7)
10 ("RUPEE SIGN" #x20A8)
11 ("WON SIGN" #x20A9)
12 ("NEW SHEQEL SIGN" #x20AA)
13 ("DONG SIGN" #x20AB)
14 ("EURO SIGN" #x20AC)
15 ("KIP SIGN" #x20AD)
16 ("TUGRIK SIGN" #x20AE)
17 ("DRACHMA SIGN" #x20AF)
18 ("GERMAN PENNY SIGN" #x20B0)
19 ("PESO SIGN" #x20B1)
20 ))
diff --git a/lisp/nxml/char-name/unicode/020D0-020FF.el b/lisp/nxml/char-name/unicode/020D0-020FF.el
new file mode 100644
index 00000000000..e610d399d49
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/020D0-020FF.el
@@ -0,0 +1,29 @@
1(nxml-define-char-name-set 'combining-diacritical-marks-for-symbols
2 '(("COMBINING LEFT HARPOON ABOVE" #x20D0)
3 ("COMBINING RIGHT HARPOON ABOVE" #x20D1)
4 ("COMBINING LONG VERTICAL LINE OVERLAY" #x20D2)
5 ("COMBINING SHORT VERTICAL LINE OVERLAY" #x20D3)
6 ("COMBINING ANTICLOCKWISE ARROW ABOVE" #x20D4)
7 ("COMBINING CLOCKWISE ARROW ABOVE" #x20D5)
8 ("COMBINING LEFT ARROW ABOVE" #x20D6)
9 ("COMBINING RIGHT ARROW ABOVE" #x20D7)
10 ("COMBINING RING OVERLAY" #x20D8)
11 ("COMBINING CLOCKWISE RING OVERLAY" #x20D9)
12 ("COMBINING ANTICLOCKWISE RING OVERLAY" #x20DA)
13 ("COMBINING THREE DOTS ABOVE" #x20DB)
14 ("COMBINING FOUR DOTS ABOVE" #x20DC)
15 ("COMBINING ENCLOSING CIRCLE" #x20DD)
16 ("COMBINING ENCLOSING SQUARE" #x20DE)
17 ("COMBINING ENCLOSING DIAMOND" #x20DF)
18 ("COMBINING ENCLOSING CIRCLE BACKSLASH" #x20E0)
19 ("COMBINING LEFT RIGHT ARROW ABOVE" #x20E1)
20 ("COMBINING ENCLOSING SCREEN" #x20E2)
21 ("COMBINING ENCLOSING KEYCAP" #x20E3)
22 ("COMBINING ENCLOSING UPWARD POINTING TRIANGLE" #x20E4)
23 ("COMBINING REVERSE SOLIDUS OVERLAY" #x20E5)
24 ("COMBINING DOUBLE VERTICAL STROKE OVERLAY" #x20E6)
25 ("COMBINING ANNUITY SYMBOL" #x20E7)
26 ("COMBINING TRIPLE UNDERDOT" #x20E8)
27 ("COMBINING WIDE BRIDGE ABOVE" #x20E9)
28 ("COMBINING LEFTWARDS ARROW OVERLAY" #x20EA)
29 ))
diff --git a/lisp/nxml/char-name/unicode/02100-0214F.el b/lisp/nxml/char-name/unicode/02100-0214F.el
new file mode 100644
index 00000000000..bdf929f6544
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/02100-0214F.el
@@ -0,0 +1,76 @@
1(nxml-define-char-name-set 'letterlike-symbols
2 '(("ACCOUNT OF" #x2100)
3 ("ADDRESSED TO THE SUBJECT" #x2101)
4 ("DOUBLE-STRUCK CAPITAL C" #x2102)
5 ("DEGREE CELSIUS" #x2103)
6 ("CENTRE LINE SYMBOL" #x2104)
7 ("CARE OF" #x2105)
8 ("CADA UNA" #x2106)
9 ("EULER CONSTANT" #x2107)
10 ("SCRUPLE" #x2108)
11 ("DEGREE FAHRENHEIT" #x2109)
12 ("SCRIPT SMALL G" #x210A)
13 ("SCRIPT CAPITAL H" #x210B)
14 ("BLACK-LETTER CAPITAL H" #x210C)
15 ("DOUBLE-STRUCK CAPITAL H" #x210D)
16 ("PLANCK CONSTANT" #x210E)
17 ("PLANCK CONSTANT OVER TWO PI" #x210F)
18 ("SCRIPT CAPITAL I" #x2110)
19 ("BLACK-LETTER CAPITAL I" #x2111)
20 ("SCRIPT CAPITAL L" #x2112)
21 ("SCRIPT SMALL L" #x2113)
22 ("L B BAR SYMBOL" #x2114)
23 ("DOUBLE-STRUCK CAPITAL N" #x2115)
24 ("NUMERO SIGN" #x2116)
25 ("SOUND RECORDING COPYRIGHT" #x2117)
26 ("SCRIPT CAPITAL P" #x2118)
27 ("DOUBLE-STRUCK CAPITAL P" #x2119)
28 ("DOUBLE-STRUCK CAPITAL Q" #x211A)
29 ("SCRIPT CAPITAL R" #x211B)
30 ("BLACK-LETTER CAPITAL R" #x211C)
31 ("DOUBLE-STRUCK CAPITAL R" #x211D)
32 ("PRESCRIPTION TAKE" #x211E)
33 ("RESPONSE" #x211F)
34 ("SERVICE MARK" #x2120)
35 ("TELEPHONE SIGN" #x2121)
36 ("TRADE MARK SIGN" #x2122)
37 ("VERSICLE" #x2123)
38 ("DOUBLE-STRUCK CAPITAL Z" #x2124)
39 ("OUNCE SIGN" #x2125)
40 ("OHM SIGN" #x2126)
41 ("INVERTED OHM SIGN" #x2127)
42 ("BLACK-LETTER CAPITAL Z" #x2128)
43 ("TURNED GREEK SMALL LETTER IOTA" #x2129)
44 ("KELVIN SIGN" #x212A)
45 ("ANGSTROM SIGN" #x212B)
46 ("SCRIPT CAPITAL B" #x212C)
47 ("BLACK-LETTER CAPITAL C" #x212D)
48 ("ESTIMATED SYMBOL" #x212E)
49 ("SCRIPT SMALL E" #x212F)
50 ("SCRIPT CAPITAL E" #x2130)
51 ("SCRIPT CAPITAL F" #x2131)
52 ("TURNED CAPITAL F" #x2132)
53 ("SCRIPT CAPITAL M" #x2133)
54 ("SCRIPT SMALL O" #x2134)
55 ("ALEF SYMBOL" #x2135)
56 ("BET SYMBOL" #x2136)
57 ("GIMEL SYMBOL" #x2137)
58 ("DALET SYMBOL" #x2138)
59 ("INFORMATION SOURCE" #x2139)
60 ("ROTATED CAPITAL Q" #x213A)
61 ("DOUBLE-STRUCK SMALL GAMMA" #x213D)
62 ("DOUBLE-STRUCK CAPITAL GAMMA" #x213E)
63 ("DOUBLE-STRUCK CAPITAL PI" #x213F)
64 ("DOUBLE-STRUCK N-ARY SUMMATION" #x2140)
65 ("TURNED SANS-SERIF CAPITAL G" #x2141)
66 ("TURNED SANS-SERIF CAPITAL L" #x2142)
67 ("REVERSED SANS-SERIF CAPITAL L" #x2143)
68 ("TURNED SANS-SERIF CAPITAL Y" #x2144)
69 ("DOUBLE-STRUCK ITALIC CAPITAL D" #x2145)
70 ("DOUBLE-STRUCK ITALIC SMALL D" #x2146)
71 ("DOUBLE-STRUCK ITALIC SMALL E" #x2147)
72 ("DOUBLE-STRUCK ITALIC SMALL I" #x2148)
73 ("DOUBLE-STRUCK ITALIC SMALL J" #x2149)
74 ("PROPERTY LINE" #x214A)
75 ("TURNED AMPERSAND" #x214B)
76 ))
diff --git a/lisp/nxml/char-name/unicode/02150-0218F.el b/lisp/nxml/char-name/unicode/02150-0218F.el
new file mode 100644
index 00000000000..4300c497803
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/02150-0218F.el
@@ -0,0 +1,51 @@
1(nxml-define-char-name-set 'number-forms
2 '(("VULGAR FRACTION ONE THIRD" #x2153)
3 ("VULGAR FRACTION TWO THIRDS" #x2154)
4 ("VULGAR FRACTION ONE FIFTH" #x2155)
5 ("VULGAR FRACTION TWO FIFTHS" #x2156)
6 ("VULGAR FRACTION THREE FIFTHS" #x2157)
7 ("VULGAR FRACTION FOUR FIFTHS" #x2158)
8 ("VULGAR FRACTION ONE SIXTH" #x2159)
9 ("VULGAR FRACTION FIVE SIXTHS" #x215A)
10 ("VULGAR FRACTION ONE EIGHTH" #x215B)
11 ("VULGAR FRACTION THREE EIGHTHS" #x215C)
12 ("VULGAR FRACTION FIVE EIGHTHS" #x215D)
13 ("VULGAR FRACTION SEVEN EIGHTHS" #x215E)
14 ("FRACTION NUMERATOR ONE" #x215F)
15 ("ROMAN NUMERAL ONE" #x2160)
16 ("ROMAN NUMERAL TWO" #x2161)
17 ("ROMAN NUMERAL THREE" #x2162)
18 ("ROMAN NUMERAL FOUR" #x2163)
19 ("ROMAN NUMERAL FIVE" #x2164)
20 ("ROMAN NUMERAL SIX" #x2165)
21 ("ROMAN NUMERAL SEVEN" #x2166)
22 ("ROMAN NUMERAL EIGHT" #x2167)
23 ("ROMAN NUMERAL NINE" #x2168)
24 ("ROMAN NUMERAL TEN" #x2169)
25 ("ROMAN NUMERAL ELEVEN" #x216A)
26 ("ROMAN NUMERAL TWELVE" #x216B)
27 ("ROMAN NUMERAL FIFTY" #x216C)
28 ("ROMAN NUMERAL ONE HUNDRED" #x216D)
29 ("ROMAN NUMERAL FIVE HUNDRED" #x216E)
30 ("ROMAN NUMERAL ONE THOUSAND" #x216F)
31 ("SMALL ROMAN NUMERAL ONE" #x2170)
32 ("SMALL ROMAN NUMERAL TWO" #x2171)
33 ("SMALL ROMAN NUMERAL THREE" #x2172)
34 ("SMALL ROMAN NUMERAL FOUR" #x2173)
35 ("SMALL ROMAN NUMERAL FIVE" #x2174)
36 ("SMALL ROMAN NUMERAL SIX" #x2175)
37 ("SMALL ROMAN NUMERAL SEVEN" #x2176)
38 ("SMALL ROMAN NUMERAL EIGHT" #x2177)
39 ("SMALL ROMAN NUMERAL NINE" #x2178)
40 ("SMALL ROMAN NUMERAL TEN" #x2179)
41 ("SMALL ROMAN NUMERAL ELEVEN" #x217A)
42 ("SMALL ROMAN NUMERAL TWELVE" #x217B)
43 ("SMALL ROMAN NUMERAL FIFTY" #x217C)
44 ("SMALL ROMAN NUMERAL ONE HUNDRED" #x217D)
45 ("SMALL ROMAN NUMERAL FIVE HUNDRED" #x217E)
46 ("SMALL ROMAN NUMERAL ONE THOUSAND" #x217F)
47 ("ROMAN NUMERAL ONE THOUSAND C D" #x2180)
48 ("ROMAN NUMERAL FIVE THOUSAND" #x2181)
49 ("ROMAN NUMERAL TEN THOUSAND" #x2182)
50 ("ROMAN NUMERAL REVERSED ONE HUNDRED" #x2183)
51 ))
diff --git a/lisp/nxml/char-name/unicode/02190-021FF.el b/lisp/nxml/char-name/unicode/02190-021FF.el
new file mode 100644
index 00000000000..88989ed7b63
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/02190-021FF.el
@@ -0,0 +1,114 @@
1(nxml-define-char-name-set 'arrows
2 '(("LEFTWARDS ARROW" #x2190)
3 ("UPWARDS ARROW" #x2191)
4 ("RIGHTWARDS ARROW" #x2192)
5 ("DOWNWARDS ARROW" #x2193)
6 ("LEFT RIGHT ARROW" #x2194)
7 ("UP DOWN ARROW" #x2195)
8 ("NORTH WEST ARROW" #x2196)
9 ("NORTH EAST ARROW" #x2197)
10 ("SOUTH EAST ARROW" #x2198)
11 ("SOUTH WEST ARROW" #x2199)
12 ("LEFTWARDS ARROW WITH STROKE" #x219A)
13 ("RIGHTWARDS ARROW WITH STROKE" #x219B)
14 ("LEFTWARDS WAVE ARROW" #x219C)
15 ("RIGHTWARDS WAVE ARROW" #x219D)
16 ("LEFTWARDS TWO HEADED ARROW" #x219E)
17 ("UPWARDS TWO HEADED ARROW" #x219F)
18 ("RIGHTWARDS TWO HEADED ARROW" #x21A0)
19 ("DOWNWARDS TWO HEADED ARROW" #x21A1)
20 ("LEFTWARDS ARROW WITH TAIL" #x21A2)
21 ("RIGHTWARDS ARROW WITH TAIL" #x21A3)
22 ("LEFTWARDS ARROW FROM BAR" #x21A4)
23 ("UPWARDS ARROW FROM BAR" #x21A5)
24 ("RIGHTWARDS ARROW FROM BAR" #x21A6)
25 ("DOWNWARDS ARROW FROM BAR" #x21A7)
26 ("UP DOWN ARROW WITH BASE" #x21A8)
27 ("LEFTWARDS ARROW WITH HOOK" #x21A9)
28 ("RIGHTWARDS ARROW WITH HOOK" #x21AA)
29 ("LEFTWARDS ARROW WITH LOOP" #x21AB)
30 ("RIGHTWARDS ARROW WITH LOOP" #x21AC)
31 ("LEFT RIGHT WAVE ARROW" #x21AD)
32 ("LEFT RIGHT ARROW WITH STROKE" #x21AE)
33 ("DOWNWARDS ZIGZAG ARROW" #x21AF)
34 ("UPWARDS ARROW WITH TIP LEFTWARDS" #x21B0)
35 ("UPWARDS ARROW WITH TIP RIGHTWARDS" #x21B1)
36 ("DOWNWARDS ARROW WITH TIP LEFTWARDS" #x21B2)
37 ("DOWNWARDS ARROW WITH TIP RIGHTWARDS" #x21B3)
38 ("RIGHTWARDS ARROW WITH CORNER DOWNWARDS" #x21B4)
39 ("DOWNWARDS ARROW WITH CORNER LEFTWARDS" #x21B5)
40 ("ANTICLOCKWISE TOP SEMICIRCLE ARROW" #x21B6)
41 ("CLOCKWISE TOP SEMICIRCLE ARROW" #x21B7)
42 ("NORTH WEST ARROW TO LONG BAR" #x21B8)
43 ("LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR" #x21B9)
44 ("ANTICLOCKWISE OPEN CIRCLE ARROW" #x21BA)
45 ("CLOCKWISE OPEN CIRCLE ARROW" #x21BB)
46 ("LEFTWARDS HARPOON WITH BARB UPWARDS" #x21BC)
47 ("LEFTWARDS HARPOON WITH BARB DOWNWARDS" #x21BD)
48 ("UPWARDS HARPOON WITH BARB RIGHTWARDS" #x21BE)
49 ("UPWARDS HARPOON WITH BARB LEFTWARDS" #x21BF)
50 ("RIGHTWARDS HARPOON WITH BARB UPWARDS" #x21C0)
51 ("RIGHTWARDS HARPOON WITH BARB DOWNWARDS" #x21C1)
52 ("DOWNWARDS HARPOON WITH BARB RIGHTWARDS" #x21C2)
53 ("DOWNWARDS HARPOON WITH BARB LEFTWARDS" #x21C3)
54 ("RIGHTWARDS ARROW OVER LEFTWARDS ARROW" #x21C4)
55 ("UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW" #x21C5)
56 ("LEFTWARDS ARROW OVER RIGHTWARDS ARROW" #x21C6)
57 ("LEFTWARDS PAIRED ARROWS" #x21C7)
58 ("UPWARDS PAIRED ARROWS" #x21C8)
59 ("RIGHTWARDS PAIRED ARROWS" #x21C9)
60 ("DOWNWARDS PAIRED ARROWS" #x21CA)
61 ("LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON" #x21CB)
62 ("RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON" #x21CC)
63 ("LEFTWARDS DOUBLE ARROW WITH STROKE" #x21CD)
64 ("LEFT RIGHT DOUBLE ARROW WITH STROKE" #x21CE)
65 ("RIGHTWARDS DOUBLE ARROW WITH STROKE" #x21CF)
66 ("LEFTWARDS DOUBLE ARROW" #x21D0)
67 ("UPWARDS DOUBLE ARROW" #x21D1)
68 ("RIGHTWARDS DOUBLE ARROW" #x21D2)
69 ("DOWNWARDS DOUBLE ARROW" #x21D3)
70 ("LEFT RIGHT DOUBLE ARROW" #x21D4)
71 ("UP DOWN DOUBLE ARROW" #x21D5)
72 ("NORTH WEST DOUBLE ARROW" #x21D6)
73 ("NORTH EAST DOUBLE ARROW" #x21D7)
74 ("SOUTH EAST DOUBLE ARROW" #x21D8)
75 ("SOUTH WEST DOUBLE ARROW" #x21D9)
76 ("LEFTWARDS TRIPLE ARROW" #x21DA)
77 ("RIGHTWARDS TRIPLE ARROW" #x21DB)
78 ("LEFTWARDS SQUIGGLE ARROW" #x21DC)
79 ("RIGHTWARDS SQUIGGLE ARROW" #x21DD)
80 ("UPWARDS ARROW WITH DOUBLE STROKE" #x21DE)
81 ("DOWNWARDS ARROW WITH DOUBLE STROKE" #x21DF)
82 ("LEFTWARDS DASHED ARROW" #x21E0)
83 ("UPWARDS DASHED ARROW" #x21E1)
84 ("RIGHTWARDS DASHED ARROW" #x21E2)
85 ("DOWNWARDS DASHED ARROW" #x21E3)
86 ("LEFTWARDS ARROW TO BAR" #x21E4)
87 ("RIGHTWARDS ARROW TO BAR" #x21E5)
88 ("LEFTWARDS WHITE ARROW" #x21E6)
89 ("UPWARDS WHITE ARROW" #x21E7)
90 ("RIGHTWARDS WHITE ARROW" #x21E8)
91 ("DOWNWARDS WHITE ARROW" #x21E9)
92 ("UPWARDS WHITE ARROW FROM BAR" #x21EA)
93 ("UPWARDS WHITE ARROW ON PEDESTAL" #x21EB)
94 ("UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR" #x21EC)
95 ("UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR" #x21ED)
96 ("UPWARDS WHITE DOUBLE ARROW" #x21EE)
97 ("UPWARDS WHITE DOUBLE ARROW ON PEDESTAL" #x21EF)
98 ("RIGHTWARDS WHITE ARROW FROM WALL" #x21F0)
99 ("NORTH WEST ARROW TO CORNER" #x21F1)
100 ("SOUTH EAST ARROW TO CORNER" #x21F2)
101 ("UP DOWN WHITE ARROW" #x21F3)
102 ("RIGHT ARROW WITH SMALL CIRCLE" #x21F4)
103 ("DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW" #x21F5)
104 ("THREE RIGHTWARDS ARROWS" #x21F6)
105 ("LEFTWARDS ARROW WITH VERTICAL STROKE" #x21F7)
106 ("RIGHTWARDS ARROW WITH VERTICAL STROKE" #x21F8)
107 ("LEFT RIGHT ARROW WITH VERTICAL STROKE" #x21F9)
108 ("LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE" #x21FA)
109 ("RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE" #x21FB)
110 ("LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE" #x21FC)
111 ("LEFTWARDS OPEN-HEADED ARROW" #x21FD)
112 ("RIGHTWARDS OPEN-HEADED ARROW" #x21FE)
113 ("LEFT RIGHT OPEN-HEADED ARROW" #x21FF)
114 ))
diff --git a/lisp/nxml/char-name/unicode/02200-022FF.el b/lisp/nxml/char-name/unicode/02200-022FF.el
new file mode 100644
index 00000000000..a28f77853db
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/02200-022FF.el
@@ -0,0 +1,258 @@
1(nxml-define-char-name-set 'mathematical-operators
2 '(("FOR ALL" #x2200)
3 ("COMPLEMENT" #x2201)
4 ("PARTIAL DIFFERENTIAL" #x2202)
5 ("THERE EXISTS" #x2203)
6 ("THERE DOES NOT EXIST" #x2204)
7 ("EMPTY SET" #x2205)
8 ("INCREMENT" #x2206)
9 ("NABLA" #x2207)
10 ("ELEMENT OF" #x2208)
11 ("NOT AN ELEMENT OF" #x2209)
12 ("SMALL ELEMENT OF" #x220A)
13 ("CONTAINS AS MEMBER" #x220B)
14 ("DOES NOT CONTAIN AS MEMBER" #x220C)
15 ("SMALL CONTAINS AS MEMBER" #x220D)
16 ("END OF PROOF" #x220E)
17 ("N-ARY PRODUCT" #x220F)
18 ("N-ARY COPRODUCT" #x2210)
19 ("N-ARY SUMMATION" #x2211)
20 ("MINUS SIGN" #x2212)
21 ("MINUS-OR-PLUS SIGN" #x2213)
22 ("DOT PLUS" #x2214)
23 ("DIVISION SLASH" #x2215)
24 ("SET MINUS" #x2216)
25 ("ASTERISK OPERATOR" #x2217)
26 ("RING OPERATOR" #x2218)
27 ("BULLET OPERATOR" #x2219)
28 ("SQUARE ROOT" #x221A)
29 ("CUBE ROOT" #x221B)
30 ("FOURTH ROOT" #x221C)
31 ("PROPORTIONAL TO" #x221D)
32 ("INFINITY" #x221E)
33 ("RIGHT ANGLE" #x221F)
34 ("ANGLE" #x2220)
35 ("MEASURED ANGLE" #x2221)
36 ("SPHERICAL ANGLE" #x2222)
37 ("DIVIDES" #x2223)
38 ("DOES NOT DIVIDE" #x2224)
39 ("PARALLEL TO" #x2225)
40 ("NOT PARALLEL TO" #x2226)
41 ("LOGICAL AND" #x2227)
42 ("LOGICAL OR" #x2228)
43 ("INTERSECTION" #x2229)
44 ("UNION" #x222A)
45 ("INTEGRAL" #x222B)
46 ("DOUBLE INTEGRAL" #x222C)
47 ("TRIPLE INTEGRAL" #x222D)
48 ("CONTOUR INTEGRAL" #x222E)
49 ("SURFACE INTEGRAL" #x222F)
50 ("VOLUME INTEGRAL" #x2230)
51 ("CLOCKWISE INTEGRAL" #x2231)
52 ("CLOCKWISE CONTOUR INTEGRAL" #x2232)
53 ("ANTICLOCKWISE CONTOUR INTEGRAL" #x2233)
54 ("THEREFORE" #x2234)
55 ("BECAUSE" #x2235)
56 ("RATIO" #x2236)
57 ("PROPORTION" #x2237)
58 ("DOT MINUS" #x2238)
59 ("EXCESS" #x2239)
60 ("GEOMETRIC PROPORTION" #x223A)
61 ("HOMOTHETIC" #x223B)
62 ("TILDE OPERATOR" #x223C)
63 ("REVERSED TILDE" #x223D)
64 ("INVERTED LAZY S" #x223E)
65 ("SINE WAVE" #x223F)
66 ("WREATH PRODUCT" #x2240)
67 ("NOT TILDE" #x2241)
68 ("MINUS TILDE" #x2242)
69 ("ASYMPTOTICALLY EQUAL TO" #x2243)
70 ("NOT ASYMPTOTICALLY EQUAL TO" #x2244)
71 ("APPROXIMATELY EQUAL TO" #x2245)
72 ("APPROXIMATELY BUT NOT ACTUALLY EQUAL TO" #x2246)
73 ("NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO" #x2247)
74 ("ALMOST EQUAL TO" #x2248)
75 ("NOT ALMOST EQUAL TO" #x2249)
76 ("ALMOST EQUAL OR EQUAL TO" #x224A)
77 ("TRIPLE TILDE" #x224B)
78 ("ALL EQUAL TO" #x224C)
79 ("EQUIVALENT TO" #x224D)
80 ("GEOMETRICALLY EQUIVALENT TO" #x224E)
81 ("DIFFERENCE BETWEEN" #x224F)
82 ("APPROACHES THE LIMIT" #x2250)
83 ("GEOMETRICALLY EQUAL TO" #x2251)
84 ("APPROXIMATELY EQUAL TO OR THE IMAGE OF" #x2252)
85 ("IMAGE OF OR APPROXIMATELY EQUAL TO" #x2253)
86 ("COLON EQUALS" #x2254)
87 ("EQUALS COLON" #x2255)
88 ("RING IN EQUAL TO" #x2256)
89 ("RING EQUAL TO" #x2257)
90 ("CORRESPONDS TO" #x2258)
91 ("ESTIMATES" #x2259)
92 ("EQUIANGULAR TO" #x225A)
93 ("STAR EQUALS" #x225B)
94 ("DELTA EQUAL TO" #x225C)
95 ("EQUAL TO BY DEFINITION" #x225D)
96 ("MEASURED BY" #x225E)
97 ("QUESTIONED EQUAL TO" #x225F)
98 ("NOT EQUAL TO" #x2260)
99 ("IDENTICAL TO" #x2261)
100 ("NOT IDENTICAL TO" #x2262)
101 ("STRICTLY EQUIVALENT TO" #x2263)
102 ("LESS-THAN OR EQUAL TO" #x2264)
103 ("GREATER-THAN OR EQUAL TO" #x2265)
104 ("LESS-THAN OVER EQUAL TO" #x2266)
105 ("GREATER-THAN OVER EQUAL TO" #x2267)
106 ("LESS-THAN BUT NOT EQUAL TO" #x2268)
107 ("GREATER-THAN BUT NOT EQUAL TO" #x2269)
108 ("MUCH LESS-THAN" #x226A)
109 ("MUCH GREATER-THAN" #x226B)
110 ("BETWEEN" #x226C)
111 ("NOT EQUIVALENT TO" #x226D)
112 ("NOT LESS-THAN" #x226E)
113 ("NOT GREATER-THAN" #x226F)
114 ("NEITHER LESS-THAN NOR EQUAL TO" #x2270)
115 ("NEITHER GREATER-THAN NOR EQUAL TO" #x2271)
116 ("LESS-THAN OR EQUIVALENT TO" #x2272)
117 ("GREATER-THAN OR EQUIVALENT TO" #x2273)
118 ("NEITHER LESS-THAN NOR EQUIVALENT TO" #x2274)
119 ("NEITHER GREATER-THAN NOR EQUIVALENT TO" #x2275)
120 ("LESS-THAN OR GREATER-THAN" #x2276)
121 ("GREATER-THAN OR LESS-THAN" #x2277)
122 ("NEITHER LESS-THAN NOR GREATER-THAN" #x2278)
123 ("NEITHER GREATER-THAN NOR LESS-THAN" #x2279)
124 ("PRECEDES" #x227A)
125 ("SUCCEEDS" #x227B)
126 ("PRECEDES OR EQUAL TO" #x227C)
127 ("SUCCEEDS OR EQUAL TO" #x227D)
128 ("PRECEDES OR EQUIVALENT TO" #x227E)
129 ("SUCCEEDS OR EQUIVALENT TO" #x227F)
130 ("DOES NOT PRECEDE" #x2280)
131 ("DOES NOT SUCCEED" #x2281)
132 ("SUBSET OF" #x2282)
133 ("SUPERSET OF" #x2283)
134 ("NOT A SUBSET OF" #x2284)
135 ("NOT A SUPERSET OF" #x2285)
136 ("SUBSET OF OR EQUAL TO" #x2286)
137 ("SUPERSET OF OR EQUAL TO" #x2287)
138 ("NEITHER A SUBSET OF NOR EQUAL TO" #x2288)
139 ("NEITHER A SUPERSET OF NOR EQUAL TO" #x2289)
140 ("SUBSET OF WITH NOT EQUAL TO" #x228A)
141 ("SUPERSET OF WITH NOT EQUAL TO" #x228B)
142 ("MULTISET" #x228C)
143 ("MULTISET MULTIPLICATION" #x228D)
144 ("MULTISET UNION" #x228E)
145 ("SQUARE IMAGE OF" #x228F)
146 ("SQUARE ORIGINAL OF" #x2290)
147 ("SQUARE IMAGE OF OR EQUAL TO" #x2291)
148 ("SQUARE ORIGINAL OF OR EQUAL TO" #x2292)
149 ("SQUARE CAP" #x2293)
150 ("SQUARE CUP" #x2294)
151 ("CIRCLED PLUS" #x2295)
152 ("CIRCLED MINUS" #x2296)
153 ("CIRCLED TIMES" #x2297)
154 ("CIRCLED DIVISION SLASH" #x2298)
155 ("CIRCLED DOT OPERATOR" #x2299)
156 ("CIRCLED RING OPERATOR" #x229A)
157 ("CIRCLED ASTERISK OPERATOR" #x229B)
158 ("CIRCLED EQUALS" #x229C)
159 ("CIRCLED DASH" #x229D)
160 ("SQUARED PLUS" #x229E)
161 ("SQUARED MINUS" #x229F)
162 ("SQUARED TIMES" #x22A0)
163 ("SQUARED DOT OPERATOR" #x22A1)
164 ("RIGHT TACK" #x22A2)
165 ("LEFT TACK" #x22A3)
166 ("DOWN TACK" #x22A4)
167 ("UP TACK" #x22A5)
168 ("ASSERTION" #x22A6)
169 ("MODELS" #x22A7)
170 ("TRUE" #x22A8)
171 ("FORCES" #x22A9)
172 ("TRIPLE VERTICAL BAR RIGHT TURNSTILE" #x22AA)
173 ("DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE" #x22AB)
174 ("DOES NOT PROVE" #x22AC)
175 ("NOT TRUE" #x22AD)
176 ("DOES NOT FORCE" #x22AE)
177 ("NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE" #x22AF)
178 ("PRECEDES UNDER RELATION" #x22B0)
179 ("SUCCEEDS UNDER RELATION" #x22B1)
180 ("NORMAL SUBGROUP OF" #x22B2)
181 ("CONTAINS AS NORMAL SUBGROUP" #x22B3)
182 ("NORMAL SUBGROUP OF OR EQUAL TO" #x22B4)
183 ("CONTAINS AS NORMAL SUBGROUP OR EQUAL TO" #x22B5)
184 ("ORIGINAL OF" #x22B6)
185 ("IMAGE OF" #x22B7)
186 ("MULTIMAP" #x22B8)
187 ("HERMITIAN CONJUGATE MATRIX" #x22B9)
188 ("INTERCALATE" #x22BA)
189 ("XOR" #x22BB)
190 ("NAND" #x22BC)
191 ("NOR" #x22BD)
192 ("RIGHT ANGLE WITH ARC" #x22BE)
193 ("RIGHT TRIANGLE" #x22BF)
194 ("N-ARY LOGICAL AND" #x22C0)
195 ("N-ARY LOGICAL OR" #x22C1)
196 ("N-ARY INTERSECTION" #x22C2)
197 ("N-ARY UNION" #x22C3)
198 ("DIAMOND OPERATOR" #x22C4)
199 ("DOT OPERATOR" #x22C5)
200 ("STAR OPERATOR" #x22C6)
201 ("DIVISION TIMES" #x22C7)
202 ("BOWTIE" #x22C8)
203 ("LEFT NORMAL FACTOR SEMIDIRECT PRODUCT" #x22C9)
204 ("RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT" #x22CA)
205 ("LEFT SEMIDIRECT PRODUCT" #x22CB)
206 ("RIGHT SEMIDIRECT PRODUCT" #x22CC)
207 ("REVERSED TILDE EQUALS" #x22CD)
208 ("CURLY LOGICAL OR" #x22CE)
209 ("CURLY LOGICAL AND" #x22CF)
210 ("DOUBLE SUBSET" #x22D0)
211 ("DOUBLE SUPERSET" #x22D1)
212 ("DOUBLE INTERSECTION" #x22D2)
213 ("DOUBLE UNION" #x22D3)
214 ("PITCHFORK" #x22D4)
215 ("EQUAL AND PARALLEL TO" #x22D5)
216 ("LESS-THAN WITH DOT" #x22D6)
217 ("GREATER-THAN WITH DOT" #x22D7)
218 ("VERY MUCH LESS-THAN" #x22D8)
219 ("VERY MUCH GREATER-THAN" #x22D9)
220 ("LESS-THAN EQUAL TO OR GREATER-THAN" #x22DA)
221 ("GREATER-THAN EQUAL TO OR LESS-THAN" #x22DB)
222 ("EQUAL TO OR LESS-THAN" #x22DC)
223 ("EQUAL TO OR GREATER-THAN" #x22DD)
224 ("EQUAL TO OR PRECEDES" #x22DE)
225 ("EQUAL TO OR SUCCEEDS" #x22DF)
226 ("DOES NOT PRECEDE OR EQUAL" #x22E0)
227 ("DOES NOT SUCCEED OR EQUAL" #x22E1)
228 ("NOT SQUARE IMAGE OF OR EQUAL TO" #x22E2)
229 ("NOT SQUARE ORIGINAL OF OR EQUAL TO" #x22E3)
230 ("SQUARE IMAGE OF OR NOT EQUAL TO" #x22E4)
231 ("SQUARE ORIGINAL OF OR NOT EQUAL TO" #x22E5)
232 ("LESS-THAN BUT NOT EQUIVALENT TO" #x22E6)
233 ("GREATER-THAN BUT NOT EQUIVALENT TO" #x22E7)
234 ("PRECEDES BUT NOT EQUIVALENT TO" #x22E8)
235 ("SUCCEEDS BUT NOT EQUIVALENT TO" #x22E9)
236 ("NOT NORMAL SUBGROUP OF" #x22EA)
237 ("DOES NOT CONTAIN AS NORMAL SUBGROUP" #x22EB)
238 ("NOT NORMAL SUBGROUP OF OR EQUAL TO" #x22EC)
239 ("DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL" #x22ED)
240 ("VERTICAL ELLIPSIS" #x22EE)
241 ("MIDLINE HORIZONTAL ELLIPSIS" #x22EF)
242 ("UP RIGHT DIAGONAL ELLIPSIS" #x22F0)
243 ("DOWN RIGHT DIAGONAL ELLIPSIS" #x22F1)
244 ("ELEMENT OF WITH LONG HORIZONTAL STROKE" #x22F2)
245 ("ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE" #x22F3)
246 ("SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE" #x22F4)
247 ("ELEMENT OF WITH DOT ABOVE" #x22F5)
248 ("ELEMENT OF WITH OVERBAR" #x22F6)
249 ("SMALL ELEMENT OF WITH OVERBAR" #x22F7)
250 ("ELEMENT OF WITH UNDERBAR" #x22F8)
251 ("ELEMENT OF WITH TWO HORIZONTAL STROKES" #x22F9)
252 ("CONTAINS WITH LONG HORIZONTAL STROKE" #x22FA)
253 ("CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE" #x22FB)
254 ("SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE" #x22FC)
255 ("CONTAINS WITH OVERBAR" #x22FD)
256 ("SMALL CONTAINS WITH OVERBAR" #x22FE)
257 ("Z NOTATION BAG MEMBERSHIP" #x22FF)
258 ))
diff --git a/lisp/nxml/char-name/unicode/02300-023FF.el b/lisp/nxml/char-name/unicode/02300-023FF.el
new file mode 100644
index 00000000000..a2558948319
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/02300-023FF.el
@@ -0,0 +1,209 @@
1(nxml-define-char-name-set 'miscellaneous-technical
2 '(("DIAMETER SIGN" #x2300)
3 ("ELECTRIC ARROW" #x2301)
4 ("HOUSE" #x2302)
5 ("UP ARROWHEAD" #x2303)
6 ("DOWN ARROWHEAD" #x2304)
7 ("PROJECTIVE" #x2305)
8 ("PERSPECTIVE" #x2306)
9 ("WAVY LINE" #x2307)
10 ("LEFT CEILING" #x2308)
11 ("RIGHT CEILING" #x2309)
12 ("LEFT FLOOR" #x230A)
13 ("RIGHT FLOOR" #x230B)
14 ("BOTTOM RIGHT CROP" #x230C)
15 ("BOTTOM LEFT CROP" #x230D)
16 ("TOP RIGHT CROP" #x230E)
17 ("TOP LEFT CROP" #x230F)
18 ("REVERSED NOT SIGN" #x2310)
19 ("SQUARE LOZENGE" #x2311)
20 ("ARC" #x2312)
21 ("SEGMENT" #x2313)
22 ("SECTOR" #x2314)
23 ("TELEPHONE RECORDER" #x2315)
24 ("POSITION INDICATOR" #x2316)
25 ("VIEWDATA SQUARE" #x2317)
26 ("PLACE OF INTEREST SIGN" #x2318)
27 ("TURNED NOT SIGN" #x2319)
28 ("WATCH" #x231A)
29 ("HOURGLASS" #x231B)
30 ("TOP LEFT CORNER" #x231C)
31 ("TOP RIGHT CORNER" #x231D)
32 ("BOTTOM LEFT CORNER" #x231E)
33 ("BOTTOM RIGHT CORNER" #x231F)
34 ("TOP HALF INTEGRAL" #x2320)
35 ("BOTTOM HALF INTEGRAL" #x2321)
36 ("FROWN" #x2322)
37 ("SMILE" #x2323)
38 ("UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS" #x2324)
39 ("OPTION KEY" #x2325)
40 ("ERASE TO THE RIGHT" #x2326)
41 ("X IN A RECTANGLE BOX" #x2327)
42 ("KEYBOARD" #x2328)
43 ("LEFT-POINTING ANGLE BRACKET" #x2329)
44 ("RIGHT-POINTING ANGLE BRACKET" #x232A)
45 ("ERASE TO THE LEFT" #x232B)
46 ("BENZENE RING" #x232C)
47 ("CYLINDRICITY" #x232D)
48 ("ALL AROUND-PROFILE" #x232E)
49 ("SYMMETRY" #x232F)
50 ("TOTAL RUNOUT" #x2330)
51 ("DIMENSION ORIGIN" #x2331)
52 ("CONICAL TAPER" #x2332)
53 ("SLOPE" #x2333)
54 ("COUNTERBORE" #x2334)
55 ("COUNTERSINK" #x2335)
56 ("APL FUNCTIONAL SYMBOL I-BEAM" #x2336)
57 ("APL FUNCTIONAL SYMBOL SQUISH QUAD" #x2337)
58 ("APL FUNCTIONAL SYMBOL QUAD EQUAL" #x2338)
59 ("APL FUNCTIONAL SYMBOL QUAD DIVIDE" #x2339)
60 ("APL FUNCTIONAL SYMBOL QUAD DIAMOND" #x233A)
61 ("APL FUNCTIONAL SYMBOL QUAD JOT" #x233B)
62 ("APL FUNCTIONAL SYMBOL QUAD CIRCLE" #x233C)
63 ("APL FUNCTIONAL SYMBOL CIRCLE STILE" #x233D)
64 ("APL FUNCTIONAL SYMBOL CIRCLE JOT" #x233E)
65 ("APL FUNCTIONAL SYMBOL SLASH BAR" #x233F)
66 ("APL FUNCTIONAL SYMBOL BACKSLASH BAR" #x2340)
67 ("APL FUNCTIONAL SYMBOL QUAD SLASH" #x2341)
68 ("APL FUNCTIONAL SYMBOL QUAD BACKSLASH" #x2342)
69 ("APL FUNCTIONAL SYMBOL QUAD LESS-THAN" #x2343)
70 ("APL FUNCTIONAL SYMBOL QUAD GREATER-THAN" #x2344)
71 ("APL FUNCTIONAL SYMBOL LEFTWARDS VANE" #x2345)
72 ("APL FUNCTIONAL SYMBOL RIGHTWARDS VANE" #x2346)
73 ("APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW" #x2347)
74 ("APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW" #x2348)
75 ("APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH" #x2349)
76 ("APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR" #x234A)
77 ("APL FUNCTIONAL SYMBOL DELTA STILE" #x234B)
78 ("APL FUNCTIONAL SYMBOL QUAD DOWN CARET" #x234C)
79 ("APL FUNCTIONAL SYMBOL QUAD DELTA" #x234D)
80 ("APL FUNCTIONAL SYMBOL DOWN TACK JOT" #x234E)
81 ("APL FUNCTIONAL SYMBOL UPWARDS VANE" #x234F)
82 ("APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW" #x2350)
83 ("APL FUNCTIONAL SYMBOL UP TACK OVERBAR" #x2351)
84 ("APL FUNCTIONAL SYMBOL DEL STILE" #x2352)
85 ("APL FUNCTIONAL SYMBOL QUAD UP CARET" #x2353)
86 ("APL FUNCTIONAL SYMBOL QUAD DEL" #x2354)
87 ("APL FUNCTIONAL SYMBOL UP TACK JOT" #x2355)
88 ("APL FUNCTIONAL SYMBOL DOWNWARDS VANE" #x2356)
89 ("APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW" #x2357)
90 ("APL FUNCTIONAL SYMBOL QUOTE UNDERBAR" #x2358)
91 ("APL FUNCTIONAL SYMBOL DELTA UNDERBAR" #x2359)
92 ("APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR" #x235A)
93 ("APL FUNCTIONAL SYMBOL JOT UNDERBAR" #x235B)
94 ("APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR" #x235C)
95 ("APL FUNCTIONAL SYMBOL UP SHOE JOT" #x235D)
96 ("APL FUNCTIONAL SYMBOL QUOTE QUAD" #x235E)
97 ("APL FUNCTIONAL SYMBOL CIRCLE STAR" #x235F)
98 ("APL FUNCTIONAL SYMBOL QUAD COLON" #x2360)
99 ("APL FUNCTIONAL SYMBOL UP TACK DIAERESIS" #x2361)
100 ("APL FUNCTIONAL SYMBOL DEL DIAERESIS" #x2362)
101 ("APL FUNCTIONAL SYMBOL STAR DIAERESIS" #x2363)
102 ("APL FUNCTIONAL SYMBOL JOT DIAERESIS" #x2364)
103 ("APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS" #x2365)
104 ("APL FUNCTIONAL SYMBOL DOWN SHOE STILE" #x2366)
105 ("APL FUNCTIONAL SYMBOL LEFT SHOE STILE" #x2367)
106 ("APL FUNCTIONAL SYMBOL TILDE DIAERESIS" #x2368)
107 ("APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS" #x2369)
108 ("APL FUNCTIONAL SYMBOL COMMA BAR" #x236A)
109 ("APL FUNCTIONAL SYMBOL DEL TILDE" #x236B)
110 ("APL FUNCTIONAL SYMBOL ZILDE" #x236C)
111 ("APL FUNCTIONAL SYMBOL STILE TILDE" #x236D)
112 ("APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR" #x236E)
113 ("APL FUNCTIONAL SYMBOL QUAD NOT EQUAL" #x236F)
114 ("APL FUNCTIONAL SYMBOL QUAD QUESTION" #x2370)
115 ("APL FUNCTIONAL SYMBOL DOWN CARET TILDE" #x2371)
116 ("APL FUNCTIONAL SYMBOL UP CARET TILDE" #x2372)
117 ("APL FUNCTIONAL SYMBOL IOTA" #x2373)
118 ("APL FUNCTIONAL SYMBOL RHO" #x2374)
119 ("APL FUNCTIONAL SYMBOL OMEGA" #x2375)
120 ("APL FUNCTIONAL SYMBOL ALPHA UNDERBAR" #x2376)
121 ("APL FUNCTIONAL SYMBOL EPSILON UNDERBAR" #x2377)
122 ("APL FUNCTIONAL SYMBOL IOTA UNDERBAR" #x2378)
123 ("APL FUNCTIONAL SYMBOL OMEGA UNDERBAR" #x2379)
124 ("APL FUNCTIONAL SYMBOL ALPHA" #x237A)
125 ("NOT CHECK MARK" #x237B)
126 ("RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW" #x237C)
127 ("SHOULDERED OPEN BOX" #x237D)
128 ("BELL SYMBOL" #x237E)
129 ("VERTICAL LINE WITH MIDDLE DOT" #x237F)
130 ("INSERTION SYMBOL" #x2380)
131 ("CONTINUOUS UNDERLINE SYMBOL" #x2381)
132 ("DISCONTINUOUS UNDERLINE SYMBOL" #x2382)
133 ("EMPHASIS SYMBOL" #x2383)
134 ("COMPOSITION SYMBOL" #x2384)
135 ("WHITE SQUARE WITH CENTRE VERTICAL LINE" #x2385)
136 ("ENTER SYMBOL" #x2386)
137 ("ALTERNATIVE KEY SYMBOL" #x2387)
138 ("HELM SYMBOL" #x2388)
139 ("CIRCLED HORIZONTAL BAR WITH NOTCH" #x2389)
140 ("CIRCLED TRIANGLE DOWN" #x238A)
141 ("BROKEN CIRCLE WITH NORTHWEST ARROW" #x238B)
142 ("UNDO SYMBOL" #x238C)
143 ("MONOSTABLE SYMBOL" #x238D)
144 ("HYSTERESIS SYMBOL" #x238E)
145 ("OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL" #x238F)
146 ("OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL" #x2390)
147 ("PASSIVE-PULL-DOWN-OUTPUT SYMBOL" #x2391)
148 ("PASSIVE-PULL-UP-OUTPUT SYMBOL" #x2392)
149 ("DIRECT CURRENT SYMBOL FORM TWO" #x2393)
150 ("SOFTWARE-FUNCTION SYMBOL" #x2394)
151 ("APL FUNCTIONAL SYMBOL QUAD" #x2395)
152 ("DECIMAL SEPARATOR KEY SYMBOL" #x2396)
153 ("PREVIOUS PAGE" #x2397)
154 ("NEXT PAGE" #x2398)
155 ("PRINT SCREEN SYMBOL" #x2399)
156 ("CLEAR SCREEN SYMBOL" #x239A)
157 ("LEFT PARENTHESIS UPPER HOOK" #x239B)
158 ("LEFT PARENTHESIS EXTENSION" #x239C)
159 ("LEFT PARENTHESIS LOWER HOOK" #x239D)
160 ("RIGHT PARENTHESIS UPPER HOOK" #x239E)
161 ("RIGHT PARENTHESIS EXTENSION" #x239F)
162 ("RIGHT PARENTHESIS LOWER HOOK" #x23A0)
163 ("LEFT SQUARE BRACKET UPPER CORNER" #x23A1)
164 ("LEFT SQUARE BRACKET EXTENSION" #x23A2)
165 ("LEFT SQUARE BRACKET LOWER CORNER" #x23A3)
166 ("RIGHT SQUARE BRACKET UPPER CORNER" #x23A4)
167 ("RIGHT SQUARE BRACKET EXTENSION" #x23A5)
168 ("RIGHT SQUARE BRACKET LOWER CORNER" #x23A6)
169 ("LEFT CURLY BRACKET UPPER HOOK" #x23A7)
170 ("LEFT CURLY BRACKET MIDDLE PIECE" #x23A8)
171 ("LEFT CURLY BRACKET LOWER HOOK" #x23A9)
172 ("CURLY BRACKET EXTENSION" #x23AA)
173 ("RIGHT CURLY BRACKET UPPER HOOK" #x23AB)
174 ("RIGHT CURLY BRACKET MIDDLE PIECE" #x23AC)
175 ("RIGHT CURLY BRACKET LOWER HOOK" #x23AD)
176 ("INTEGRAL EXTENSION" #x23AE)
177 ("HORIZONTAL LINE EXTENSION" #x23AF)
178 ("UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION" #x23B0)
179 ("UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION" #x23B1)
180 ("SUMMATION TOP" #x23B2)
181 ("SUMMATION BOTTOM" #x23B3)
182 ("TOP SQUARE BRACKET" #x23B4)
183 ("BOTTOM SQUARE BRACKET" #x23B5)
184 ("BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET" #x23B6)
185 ("RADICAL SYMBOL BOTTOM" #x23B7)
186 ("LEFT VERTICAL BOX LINE" #x23B8)
187 ("RIGHT VERTICAL BOX LINE" #x23B9)
188 ("HORIZONTAL SCAN LINE-1" #x23BA)
189 ("HORIZONTAL SCAN LINE-3" #x23BB)
190 ("HORIZONTAL SCAN LINE-7" #x23BC)
191 ("HORIZONTAL SCAN LINE-9" #x23BD)
192 ("DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT" #x23BE)
193 ("DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT" #x23BF)
194 ("DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE" #x23C0)
195 ("DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE" #x23C1)
196 ("DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE" #x23C2)
197 ("DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE" #x23C3)
198 ("DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE" #x23C4)
199 ("DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE" #x23C5)
200 ("DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE" #x23C6)
201 ("DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE" #x23C7)
202 ("DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE" #x23C8)
203 ("DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL" #x23C9)
204 ("DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL" #x23CA)
205 ("DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT" #x23CB)
206 ("DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT" #x23CC)
207 ("SQUARE FOOT" #x23CD)
208 ("RETURN SYMBOL" #x23CE)
209 ))
diff --git a/lisp/nxml/char-name/unicode/02400-0243F.el b/lisp/nxml/char-name/unicode/02400-0243F.el
new file mode 100644
index 00000000000..b4cc42640f4
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/02400-0243F.el
@@ -0,0 +1,41 @@
1(nxml-define-char-name-set 'control-pictures
2 '(("SYMBOL FOR NULL" #x2400)
3 ("SYMBOL FOR START OF HEADING" #x2401)
4 ("SYMBOL FOR START OF TEXT" #x2402)
5 ("SYMBOL FOR END OF TEXT" #x2403)
6 ("SYMBOL FOR END OF TRANSMISSION" #x2404)
7 ("SYMBOL FOR ENQUIRY" #x2405)
8 ("SYMBOL FOR ACKNOWLEDGE" #x2406)
9 ("SYMBOL FOR BELL" #x2407)
10 ("SYMBOL FOR BACKSPACE" #x2408)
11 ("SYMBOL FOR HORIZONTAL TABULATION" #x2409)
12 ("SYMBOL FOR LINE FEED" #x240A)
13 ("SYMBOL FOR VERTICAL TABULATION" #x240B)
14 ("SYMBOL FOR FORM FEED" #x240C)
15 ("SYMBOL FOR CARRIAGE RETURN" #x240D)
16 ("SYMBOL FOR SHIFT OUT" #x240E)
17 ("SYMBOL FOR SHIFT IN" #x240F)
18 ("SYMBOL FOR DATA LINK ESCAPE" #x2410)
19 ("SYMBOL FOR DEVICE CONTROL ONE" #x2411)
20 ("SYMBOL FOR DEVICE CONTROL TWO" #x2412)
21 ("SYMBOL FOR DEVICE CONTROL THREE" #x2413)
22 ("SYMBOL FOR DEVICE CONTROL FOUR" #x2414)
23 ("SYMBOL FOR NEGATIVE ACKNOWLEDGE" #x2415)
24 ("SYMBOL FOR SYNCHRONOUS IDLE" #x2416)
25 ("SYMBOL FOR END OF TRANSMISSION BLOCK" #x2417)
26 ("SYMBOL FOR CANCEL" #x2418)
27 ("SYMBOL FOR END OF MEDIUM" #x2419)
28 ("SYMBOL FOR SUBSTITUTE" #x241A)
29 ("SYMBOL FOR ESCAPE" #x241B)
30 ("SYMBOL FOR FILE SEPARATOR" #x241C)
31 ("SYMBOL FOR GROUP SEPARATOR" #x241D)
32 ("SYMBOL FOR RECORD SEPARATOR" #x241E)
33 ("SYMBOL FOR UNIT SEPARATOR" #x241F)
34 ("SYMBOL FOR SPACE" #x2420)
35 ("SYMBOL FOR DELETE" #x2421)
36 ("BLANK SYMBOL" #x2422)
37 ("OPEN BOX" #x2423)
38 ("SYMBOL FOR NEWLINE" #x2424)
39 ("SYMBOL FOR DELETE FORM TWO" #x2425)
40 ("SYMBOL FOR SUBSTITUTE FORM TWO" #x2426)
41 ))
diff --git a/lisp/nxml/char-name/unicode/02440-0245F.el b/lisp/nxml/char-name/unicode/02440-0245F.el
new file mode 100644
index 00000000000..332720d71f0
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/02440-0245F.el
@@ -0,0 +1,13 @@
1(nxml-define-char-name-set 'optical-character-recognition
2 '(("OCR HOOK" #x2440)
3 ("OCR CHAIR" #x2441)
4 ("OCR FORK" #x2442)
5 ("OCR INVERTED FORK" #x2443)
6 ("OCR BELT BUCKLE" #x2444)
7 ("OCR BOW TIE" #x2445)
8 ("OCR BRANCH BANK IDENTIFICATION" #x2446)
9 ("OCR AMOUNT OF CHECK" #x2447)
10 ("OCR DASH" #x2448)
11 ("OCR CUSTOMER ACCOUNT NUMBER" #x2449)
12 ("OCR DOUBLE BACKSLASH" #x244A)
13 ))
diff --git a/lisp/nxml/char-name/unicode/02460-024FF.el b/lisp/nxml/char-name/unicode/02460-024FF.el
new file mode 100644
index 00000000000..41152bff4a6
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/02460-024FF.el
@@ -0,0 +1,161 @@
1(nxml-define-char-name-set 'enclosed-alphanumerics
2 '(("CIRCLED DIGIT ONE" #x2460)
3 ("CIRCLED DIGIT TWO" #x2461)
4 ("CIRCLED DIGIT THREE" #x2462)
5 ("CIRCLED DIGIT FOUR" #x2463)
6 ("CIRCLED DIGIT FIVE" #x2464)
7 ("CIRCLED DIGIT SIX" #x2465)
8 ("CIRCLED DIGIT SEVEN" #x2466)
9 ("CIRCLED DIGIT EIGHT" #x2467)
10 ("CIRCLED DIGIT NINE" #x2468)
11 ("CIRCLED NUMBER TEN" #x2469)
12 ("CIRCLED NUMBER ELEVEN" #x246A)
13 ("CIRCLED NUMBER TWELVE" #x246B)
14 ("CIRCLED NUMBER THIRTEEN" #x246C)
15 ("CIRCLED NUMBER FOURTEEN" #x246D)
16 ("CIRCLED NUMBER FIFTEEN" #x246E)
17 ("CIRCLED NUMBER SIXTEEN" #x246F)
18 ("CIRCLED NUMBER SEVENTEEN" #x2470)
19 ("CIRCLED NUMBER EIGHTEEN" #x2471)
20 ("CIRCLED NUMBER NINETEEN" #x2472)
21 ("CIRCLED NUMBER TWENTY" #x2473)
22 ("PARENTHESIZED DIGIT ONE" #x2474)
23 ("PARENTHESIZED DIGIT TWO" #x2475)
24 ("PARENTHESIZED DIGIT THREE" #x2476)
25 ("PARENTHESIZED DIGIT FOUR" #x2477)
26 ("PARENTHESIZED DIGIT FIVE" #x2478)
27 ("PARENTHESIZED DIGIT SIX" #x2479)
28 ("PARENTHESIZED DIGIT SEVEN" #x247A)
29 ("PARENTHESIZED DIGIT EIGHT" #x247B)
30 ("PARENTHESIZED DIGIT NINE" #x247C)
31 ("PARENTHESIZED NUMBER TEN" #x247D)
32 ("PARENTHESIZED NUMBER ELEVEN" #x247E)
33 ("PARENTHESIZED NUMBER TWELVE" #x247F)
34 ("PARENTHESIZED NUMBER THIRTEEN" #x2480)
35 ("PARENTHESIZED NUMBER FOURTEEN" #x2481)
36 ("PARENTHESIZED NUMBER FIFTEEN" #x2482)
37 ("PARENTHESIZED NUMBER SIXTEEN" #x2483)
38 ("PARENTHESIZED NUMBER SEVENTEEN" #x2484)
39 ("PARENTHESIZED NUMBER EIGHTEEN" #x2485)
40 ("PARENTHESIZED NUMBER NINETEEN" #x2486)
41 ("PARENTHESIZED NUMBER TWENTY" #x2487)
42 ("DIGIT ONE FULL STOP" #x2488)
43 ("DIGIT TWO FULL STOP" #x2489)
44 ("DIGIT THREE FULL STOP" #x248A)
45 ("DIGIT FOUR FULL STOP" #x248B)
46 ("DIGIT FIVE FULL STOP" #x248C)
47 ("DIGIT SIX FULL STOP" #x248D)
48 ("DIGIT SEVEN FULL STOP" #x248E)
49 ("DIGIT EIGHT FULL STOP" #x248F)
50 ("DIGIT NINE FULL STOP" #x2490)
51 ("NUMBER TEN FULL STOP" #x2491)
52 ("NUMBER ELEVEN FULL STOP" #x2492)
53 ("NUMBER TWELVE FULL STOP" #x2493)
54 ("NUMBER THIRTEEN FULL STOP" #x2494)
55 ("NUMBER FOURTEEN FULL STOP" #x2495)
56 ("NUMBER FIFTEEN FULL STOP" #x2496)
57 ("NUMBER SIXTEEN FULL STOP" #x2497)
58 ("NUMBER SEVENTEEN FULL STOP" #x2498)
59 ("NUMBER EIGHTEEN FULL STOP" #x2499)
60 ("NUMBER NINETEEN FULL STOP" #x249A)
61 ("NUMBER TWENTY FULL STOP" #x249B)
62 ("PARENTHESIZED LATIN SMALL LETTER A" #x249C)
63 ("PARENTHESIZED LATIN SMALL LETTER B" #x249D)
64 ("PARENTHESIZED LATIN SMALL LETTER C" #x249E)
65 ("PARENTHESIZED LATIN SMALL LETTER D" #x249F)
66 ("PARENTHESIZED LATIN SMALL LETTER E" #x24A0)
67 ("PARENTHESIZED LATIN SMALL LETTER F" #x24A1)
68 ("PARENTHESIZED LATIN SMALL LETTER G" #x24A2)
69 ("PARENTHESIZED LATIN SMALL LETTER H" #x24A3)
70 ("PARENTHESIZED LATIN SMALL LETTER I" #x24A4)
71 ("PARENTHESIZED LATIN SMALL LETTER J" #x24A5)
72 ("PARENTHESIZED LATIN SMALL LETTER K" #x24A6)
73 ("PARENTHESIZED LATIN SMALL LETTER L" #x24A7)
74 ("PARENTHESIZED LATIN SMALL LETTER M" #x24A8)
75 ("PARENTHESIZED LATIN SMALL LETTER N" #x24A9)
76 ("PARENTHESIZED LATIN SMALL LETTER O" #x24AA)
77 ("PARENTHESIZED LATIN SMALL LETTER P" #x24AB)
78 ("PARENTHESIZED LATIN SMALL LETTER Q" #x24AC)
79 ("PARENTHESIZED LATIN SMALL LETTER R" #x24AD)
80 ("PARENTHESIZED LATIN SMALL LETTER S" #x24AE)
81 ("PARENTHESIZED LATIN SMALL LETTER T" #x24AF)
82 ("PARENTHESIZED LATIN SMALL LETTER U" #x24B0)
83 ("PARENTHESIZED LATIN SMALL LETTER V" #x24B1)
84 ("PARENTHESIZED LATIN SMALL LETTER W" #x24B2)
85 ("PARENTHESIZED LATIN SMALL LETTER X" #x24B3)
86 ("PARENTHESIZED LATIN SMALL LETTER Y" #x24B4)
87 ("PARENTHESIZED LATIN SMALL LETTER Z" #x24B5)
88 ("CIRCLED LATIN CAPITAL LETTER A" #x24B6)
89 ("CIRCLED LATIN CAPITAL LETTER B" #x24B7)
90 ("CIRCLED LATIN CAPITAL LETTER C" #x24B8)
91 ("CIRCLED LATIN CAPITAL LETTER D" #x24B9)
92 ("CIRCLED LATIN CAPITAL LETTER E" #x24BA)
93 ("CIRCLED LATIN CAPITAL LETTER F" #x24BB)
94 ("CIRCLED LATIN CAPITAL LETTER G" #x24BC)
95 ("CIRCLED LATIN CAPITAL LETTER H" #x24BD)
96 ("CIRCLED LATIN CAPITAL LETTER I" #x24BE)
97 ("CIRCLED LATIN CAPITAL LETTER J" #x24BF)
98 ("CIRCLED LATIN CAPITAL LETTER K" #x24C0)
99 ("CIRCLED LATIN CAPITAL LETTER L" #x24C1)
100 ("CIRCLED LATIN CAPITAL LETTER M" #x24C2)
101 ("CIRCLED LATIN CAPITAL LETTER N" #x24C3)
102 ("CIRCLED LATIN CAPITAL LETTER O" #x24C4)
103 ("CIRCLED LATIN CAPITAL LETTER P" #x24C5)
104 ("CIRCLED LATIN CAPITAL LETTER Q" #x24C6)
105 ("CIRCLED LATIN CAPITAL LETTER R" #x24C7)
106 ("CIRCLED LATIN CAPITAL LETTER S" #x24C8)
107 ("CIRCLED LATIN CAPITAL LETTER T" #x24C9)
108 ("CIRCLED LATIN CAPITAL LETTER U" #x24CA)
109 ("CIRCLED LATIN CAPITAL LETTER V" #x24CB)
110 ("CIRCLED LATIN CAPITAL LETTER W" #x24CC)
111 ("CIRCLED LATIN CAPITAL LETTER X" #x24CD)
112 ("CIRCLED LATIN CAPITAL LETTER Y" #x24CE)
113 ("CIRCLED LATIN CAPITAL LETTER Z" #x24CF)
114 ("CIRCLED LATIN SMALL LETTER A" #x24D0)
115 ("CIRCLED LATIN SMALL LETTER B" #x24D1)
116 ("CIRCLED LATIN SMALL LETTER C" #x24D2)
117 ("CIRCLED LATIN SMALL LETTER D" #x24D3)
118 ("CIRCLED LATIN SMALL LETTER E" #x24D4)
119 ("CIRCLED LATIN SMALL LETTER F" #x24D5)
120 ("CIRCLED LATIN SMALL LETTER G" #x24D6)
121 ("CIRCLED LATIN SMALL LETTER H" #x24D7)
122 ("CIRCLED LATIN SMALL LETTER I" #x24D8)
123 ("CIRCLED LATIN SMALL LETTER J" #x24D9)
124 ("CIRCLED LATIN SMALL LETTER K" #x24DA)
125 ("CIRCLED LATIN SMALL LETTER L" #x24DB)
126 ("CIRCLED LATIN SMALL LETTER M" #x24DC)
127 ("CIRCLED LATIN SMALL LETTER N" #x24DD)
128 ("CIRCLED LATIN SMALL LETTER O" #x24DE)
129 ("CIRCLED LATIN SMALL LETTER P" #x24DF)
130 ("CIRCLED LATIN SMALL LETTER Q" #x24E0)
131 ("CIRCLED LATIN SMALL LETTER R" #x24E1)
132 ("CIRCLED LATIN SMALL LETTER S" #x24E2)
133 ("CIRCLED LATIN SMALL LETTER T" #x24E3)
134 ("CIRCLED LATIN SMALL LETTER U" #x24E4)
135 ("CIRCLED LATIN SMALL LETTER V" #x24E5)
136 ("CIRCLED LATIN SMALL LETTER W" #x24E6)
137 ("CIRCLED LATIN SMALL LETTER X" #x24E7)
138 ("CIRCLED LATIN SMALL LETTER Y" #x24E8)
139 ("CIRCLED LATIN SMALL LETTER Z" #x24E9)
140 ("CIRCLED DIGIT ZERO" #x24EA)
141 ("NEGATIVE CIRCLED NUMBER ELEVEN" #x24EB)
142 ("NEGATIVE CIRCLED NUMBER TWELVE" #x24EC)
143 ("NEGATIVE CIRCLED NUMBER THIRTEEN" #x24ED)
144 ("NEGATIVE CIRCLED NUMBER FOURTEEN" #x24EE)
145 ("NEGATIVE CIRCLED NUMBER FIFTEEN" #x24EF)
146 ("NEGATIVE CIRCLED NUMBER SIXTEEN" #x24F0)
147 ("NEGATIVE CIRCLED NUMBER SEVENTEEN" #x24F1)
148 ("NEGATIVE CIRCLED NUMBER EIGHTEEN" #x24F2)
149 ("NEGATIVE CIRCLED NUMBER NINETEEN" #x24F3)
150 ("NEGATIVE CIRCLED NUMBER TWENTY" #x24F4)
151 ("DOUBLE CIRCLED DIGIT ONE" #x24F5)
152 ("DOUBLE CIRCLED DIGIT TWO" #x24F6)
153 ("DOUBLE CIRCLED DIGIT THREE" #x24F7)
154 ("DOUBLE CIRCLED DIGIT FOUR" #x24F8)
155 ("DOUBLE CIRCLED DIGIT FIVE" #x24F9)
156 ("DOUBLE CIRCLED DIGIT SIX" #x24FA)
157 ("DOUBLE CIRCLED DIGIT SEVEN" #x24FB)
158 ("DOUBLE CIRCLED DIGIT EIGHT" #x24FC)
159 ("DOUBLE CIRCLED DIGIT NINE" #x24FD)
160 ("DOUBLE CIRCLED NUMBER TEN" #x24FE)
161 ))
diff --git a/lisp/nxml/char-name/unicode/02500-0257F.el b/lisp/nxml/char-name/unicode/02500-0257F.el
new file mode 100644
index 00000000000..bf17039df2b
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/02500-0257F.el
@@ -0,0 +1,130 @@
1(nxml-define-char-name-set 'box-drawing
2 '(("BOX DRAWINGS LIGHT HORIZONTAL" #x2500)
3 ("BOX DRAWINGS HEAVY HORIZONTAL" #x2501)
4 ("BOX DRAWINGS LIGHT VERTICAL" #x2502)
5 ("BOX DRAWINGS HEAVY VERTICAL" #x2503)
6 ("BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL" #x2504)
7 ("BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL" #x2505)
8 ("BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL" #x2506)
9 ("BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL" #x2507)
10 ("BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL" #x2508)
11 ("BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL" #x2509)
12 ("BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL" #x250A)
13 ("BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL" #x250B)
14 ("BOX DRAWINGS LIGHT DOWN AND RIGHT" #x250C)
15 ("BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY" #x250D)
16 ("BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT" #x250E)
17 ("BOX DRAWINGS HEAVY DOWN AND RIGHT" #x250F)
18 ("BOX DRAWINGS LIGHT DOWN AND LEFT" #x2510)
19 ("BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY" #x2511)
20 ("BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT" #x2512)
21 ("BOX DRAWINGS HEAVY DOWN AND LEFT" #x2513)
22 ("BOX DRAWINGS LIGHT UP AND RIGHT" #x2514)
23 ("BOX DRAWINGS UP LIGHT AND RIGHT HEAVY" #x2515)
24 ("BOX DRAWINGS UP HEAVY AND RIGHT LIGHT" #x2516)
25 ("BOX DRAWINGS HEAVY UP AND RIGHT" #x2517)
26 ("BOX DRAWINGS LIGHT UP AND LEFT" #x2518)
27 ("BOX DRAWINGS UP LIGHT AND LEFT HEAVY" #x2519)
28 ("BOX DRAWINGS UP HEAVY AND LEFT LIGHT" #x251A)
29 ("BOX DRAWINGS HEAVY UP AND LEFT" #x251B)
30 ("BOX DRAWINGS LIGHT VERTICAL AND RIGHT" #x251C)
31 ("BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY" #x251D)
32 ("BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT" #x251E)
33 ("BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT" #x251F)
34 ("BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT" #x2520)
35 ("BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY" #x2521)
36 ("BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY" #x2522)
37 ("BOX DRAWINGS HEAVY VERTICAL AND RIGHT" #x2523)
38 ("BOX DRAWINGS LIGHT VERTICAL AND LEFT" #x2524)
39 ("BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY" #x2525)
40 ("BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT" #x2526)
41 ("BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT" #x2527)
42 ("BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT" #x2528)
43 ("BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY" #x2529)
44 ("BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY" #x252A)
45 ("BOX DRAWINGS HEAVY VERTICAL AND LEFT" #x252B)
46 ("BOX DRAWINGS LIGHT DOWN AND HORIZONTAL" #x252C)
47 ("BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT" #x252D)
48 ("BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT" #x252E)
49 ("BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY" #x252F)
50 ("BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT" #x2530)
51 ("BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY" #x2531)
52 ("BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY" #x2532)
53 ("BOX DRAWINGS HEAVY DOWN AND HORIZONTAL" #x2533)
54 ("BOX DRAWINGS LIGHT UP AND HORIZONTAL" #x2534)
55 ("BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT" #x2535)
56 ("BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT" #x2536)
57 ("BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY" #x2537)
58 ("BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT" #x2538)
59 ("BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY" #x2539)
60 ("BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY" #x253A)
61 ("BOX DRAWINGS HEAVY UP AND HORIZONTAL" #x253B)
62 ("BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL" #x253C)
63 ("BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT" #x253D)
64 ("BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT" #x253E)
65 ("BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY" #x253F)
66 ("BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT" #x2540)
67 ("BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT" #x2541)
68 ("BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT" #x2542)
69 ("BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT" #x2543)
70 ("BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT" #x2544)
71 ("BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT" #x2545)
72 ("BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT" #x2546)
73 ("BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY" #x2547)
74 ("BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY" #x2548)
75 ("BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY" #x2549)
76 ("BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY" #x254A)
77 ("BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL" #x254B)
78 ("BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL" #x254C)
79 ("BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL" #x254D)
80 ("BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL" #x254E)
81 ("BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL" #x254F)
82 ("BOX DRAWINGS DOUBLE HORIZONTAL" #x2550)
83 ("BOX DRAWINGS DOUBLE VERTICAL" #x2551)
84 ("BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE" #x2552)
85 ("BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE" #x2553)
86 ("BOX DRAWINGS DOUBLE DOWN AND RIGHT" #x2554)
87 ("BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE" #x2555)
88 ("BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE" #x2556)
89 ("BOX DRAWINGS DOUBLE DOWN AND LEFT" #x2557)
90 ("BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE" #x2558)
91 ("BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE" #x2559)
92 ("BOX DRAWINGS DOUBLE UP AND RIGHT" #x255A)
93 ("BOX DRAWINGS UP SINGLE AND LEFT DOUBLE" #x255B)
94 ("BOX DRAWINGS UP DOUBLE AND LEFT SINGLE" #x255C)
95 ("BOX DRAWINGS DOUBLE UP AND LEFT" #x255D)
96 ("BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE" #x255E)
97 ("BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE" #x255F)
98 ("BOX DRAWINGS DOUBLE VERTICAL AND RIGHT" #x2560)
99 ("BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE" #x2561)
100 ("BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE" #x2562)
101 ("BOX DRAWINGS DOUBLE VERTICAL AND LEFT" #x2563)
102 ("BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE" #x2564)
103 ("BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE" #x2565)
104 ("BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL" #x2566)
105 ("BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE" #x2567)
106 ("BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE" #x2568)
107 ("BOX DRAWINGS DOUBLE UP AND HORIZONTAL" #x2569)
108 ("BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE" #x256A)
109 ("BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE" #x256B)
110 ("BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL" #x256C)
111 ("BOX DRAWINGS LIGHT ARC DOWN AND RIGHT" #x256D)
112 ("BOX DRAWINGS LIGHT ARC DOWN AND LEFT" #x256E)
113 ("BOX DRAWINGS LIGHT ARC UP AND LEFT" #x256F)
114 ("BOX DRAWINGS LIGHT ARC UP AND RIGHT" #x2570)
115 ("BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT" #x2571)
116 ("BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT" #x2572)
117 ("BOX DRAWINGS LIGHT DIAGONAL CROSS" #x2573)
118 ("BOX DRAWINGS LIGHT LEFT" #x2574)
119 ("BOX DRAWINGS LIGHT UP" #x2575)
120 ("BOX DRAWINGS LIGHT RIGHT" #x2576)
121 ("BOX DRAWINGS LIGHT DOWN" #x2577)
122 ("BOX DRAWINGS HEAVY LEFT" #x2578)
123 ("BOX DRAWINGS HEAVY UP" #x2579)
124 ("BOX DRAWINGS HEAVY RIGHT" #x257A)
125 ("BOX DRAWINGS HEAVY DOWN" #x257B)
126 ("BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT" #x257C)
127 ("BOX DRAWINGS LIGHT UP AND HEAVY DOWN" #x257D)
128 ("BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT" #x257E)
129 ("BOX DRAWINGS HEAVY UP AND LIGHT DOWN" #x257F)
130 ))
diff --git a/lisp/nxml/char-name/unicode/02580-0259F.el b/lisp/nxml/char-name/unicode/02580-0259F.el
new file mode 100644
index 00000000000..89413a2e441
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/02580-0259F.el
@@ -0,0 +1,34 @@
1(nxml-define-char-name-set 'block-elements
2 '(("UPPER HALF BLOCK" #x2580)
3 ("LOWER ONE EIGHTH BLOCK" #x2581)
4 ("LOWER ONE QUARTER BLOCK" #x2582)
5 ("LOWER THREE EIGHTHS BLOCK" #x2583)
6 ("LOWER HALF BLOCK" #x2584)
7 ("LOWER FIVE EIGHTHS BLOCK" #x2585)
8 ("LOWER THREE QUARTERS BLOCK" #x2586)
9 ("LOWER SEVEN EIGHTHS BLOCK" #x2587)
10 ("FULL BLOCK" #x2588)
11 ("LEFT SEVEN EIGHTHS BLOCK" #x2589)
12 ("LEFT THREE QUARTERS BLOCK" #x258A)
13 ("LEFT FIVE EIGHTHS BLOCK" #x258B)
14 ("LEFT HALF BLOCK" #x258C)
15 ("LEFT THREE EIGHTHS BLOCK" #x258D)
16 ("LEFT ONE QUARTER BLOCK" #x258E)
17 ("LEFT ONE EIGHTH BLOCK" #x258F)
18 ("RIGHT HALF BLOCK" #x2590)
19 ("LIGHT SHADE" #x2591)
20 ("MEDIUM SHADE" #x2592)
21 ("DARK SHADE" #x2593)
22 ("UPPER ONE EIGHTH BLOCK" #x2594)
23 ("RIGHT ONE EIGHTH BLOCK" #x2595)
24 ("QUADRANT LOWER LEFT" #x2596)
25 ("QUADRANT LOWER RIGHT" #x2597)
26 ("QUADRANT UPPER LEFT" #x2598)
27 ("QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT" #x2599)
28 ("QUADRANT UPPER LEFT AND LOWER RIGHT" #x259A)
29 ("QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT" #x259B)
30 ("QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT" #x259C)
31 ("QUADRANT UPPER RIGHT" #x259D)
32 ("QUADRANT UPPER RIGHT AND LOWER LEFT" #x259E)
33 ("QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT" #x259F)
34 ))
diff --git a/lisp/nxml/char-name/unicode/025A0-025FF.el b/lisp/nxml/char-name/unicode/025A0-025FF.el
new file mode 100644
index 00000000000..2313c781d66
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/025A0-025FF.el
@@ -0,0 +1,98 @@
1(nxml-define-char-name-set 'geometric-shapes
2 '(("BLACK SQUARE" #x25A0)
3 ("WHITE SQUARE" #x25A1)
4 ("WHITE SQUARE WITH ROUNDED CORNERS" #x25A2)
5 ("WHITE SQUARE CONTAINING BLACK SMALL SQUARE" #x25A3)
6 ("SQUARE WITH HORIZONTAL FILL" #x25A4)
7 ("SQUARE WITH VERTICAL FILL" #x25A5)
8 ("SQUARE WITH ORTHOGONAL CROSSHATCH FILL" #x25A6)
9 ("SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL" #x25A7)
10 ("SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL" #x25A8)
11 ("SQUARE WITH DIAGONAL CROSSHATCH FILL" #x25A9)
12 ("BLACK SMALL SQUARE" #x25AA)
13 ("WHITE SMALL SQUARE" #x25AB)
14 ("BLACK RECTANGLE" #x25AC)
15 ("WHITE RECTANGLE" #x25AD)
16 ("BLACK VERTICAL RECTANGLE" #x25AE)
17 ("WHITE VERTICAL RECTANGLE" #x25AF)
18 ("BLACK PARALLELOGRAM" #x25B0)
19 ("WHITE PARALLELOGRAM" #x25B1)
20 ("BLACK UP-POINTING TRIANGLE" #x25B2)
21 ("WHITE UP-POINTING TRIANGLE" #x25B3)
22 ("BLACK UP-POINTING SMALL TRIANGLE" #x25B4)
23 ("WHITE UP-POINTING SMALL TRIANGLE" #x25B5)
24 ("BLACK RIGHT-POINTING TRIANGLE" #x25B6)
25 ("WHITE RIGHT-POINTING TRIANGLE" #x25B7)
26 ("BLACK RIGHT-POINTING SMALL TRIANGLE" #x25B8)
27 ("WHITE RIGHT-POINTING SMALL TRIANGLE" #x25B9)
28 ("BLACK RIGHT-POINTING POINTER" #x25BA)
29 ("WHITE RIGHT-POINTING POINTER" #x25BB)
30 ("BLACK DOWN-POINTING TRIANGLE" #x25BC)
31 ("WHITE DOWN-POINTING TRIANGLE" #x25BD)
32 ("BLACK DOWN-POINTING SMALL TRIANGLE" #x25BE)
33 ("WHITE DOWN-POINTING SMALL TRIANGLE" #x25BF)
34 ("BLACK LEFT-POINTING TRIANGLE" #x25C0)
35 ("WHITE LEFT-POINTING TRIANGLE" #x25C1)
36 ("BLACK LEFT-POINTING SMALL TRIANGLE" #x25C2)
37 ("WHITE LEFT-POINTING SMALL TRIANGLE" #x25C3)
38 ("BLACK LEFT-POINTING POINTER" #x25C4)
39 ("WHITE LEFT-POINTING POINTER" #x25C5)
40 ("BLACK DIAMOND" #x25C6)
41 ("WHITE DIAMOND" #x25C7)
42 ("WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND" #x25C8)
43 ("FISHEYE" #x25C9)
44 ("LOZENGE" #x25CA)
45 ("WHITE CIRCLE" #x25CB)
46 ("DOTTED CIRCLE" #x25CC)
47 ("CIRCLE WITH VERTICAL FILL" #x25CD)
48 ("BULLSEYE" #x25CE)
49 ("BLACK CIRCLE" #x25CF)
50 ("CIRCLE WITH LEFT HALF BLACK" #x25D0)
51 ("CIRCLE WITH RIGHT HALF BLACK" #x25D1)
52 ("CIRCLE WITH LOWER HALF BLACK" #x25D2)
53 ("CIRCLE WITH UPPER HALF BLACK" #x25D3)
54 ("CIRCLE WITH UPPER RIGHT QUADRANT BLACK" #x25D4)
55 ("CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK" #x25D5)
56 ("LEFT HALF BLACK CIRCLE" #x25D6)
57 ("RIGHT HALF BLACK CIRCLE" #x25D7)
58 ("INVERSE BULLET" #x25D8)
59 ("INVERSE WHITE CIRCLE" #x25D9)
60 ("UPPER HALF INVERSE WHITE CIRCLE" #x25DA)
61 ("LOWER HALF INVERSE WHITE CIRCLE" #x25DB)
62 ("UPPER LEFT QUADRANT CIRCULAR ARC" #x25DC)
63 ("UPPER RIGHT QUADRANT CIRCULAR ARC" #x25DD)
64 ("LOWER RIGHT QUADRANT CIRCULAR ARC" #x25DE)
65 ("LOWER LEFT QUADRANT CIRCULAR ARC" #x25DF)
66 ("UPPER HALF CIRCLE" #x25E0)
67 ("LOWER HALF CIRCLE" #x25E1)
68 ("BLACK LOWER RIGHT TRIANGLE" #x25E2)
69 ("BLACK LOWER LEFT TRIANGLE" #x25E3)
70 ("BLACK UPPER LEFT TRIANGLE" #x25E4)
71 ("BLACK UPPER RIGHT TRIANGLE" #x25E5)
72 ("WHITE BULLET" #x25E6)
73 ("SQUARE WITH LEFT HALF BLACK" #x25E7)
74 ("SQUARE WITH RIGHT HALF BLACK" #x25E8)
75 ("SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK" #x25E9)
76 ("SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK" #x25EA)
77 ("WHITE SQUARE WITH VERTICAL BISECTING LINE" #x25EB)
78 ("WHITE UP-POINTING TRIANGLE WITH DOT" #x25EC)
79 ("UP-POINTING TRIANGLE WITH LEFT HALF BLACK" #x25ED)
80 ("UP-POINTING TRIANGLE WITH RIGHT HALF BLACK" #x25EE)
81 ("LARGE CIRCLE" #x25EF)
82 ("WHITE SQUARE WITH UPPER LEFT QUADRANT" #x25F0)
83 ("WHITE SQUARE WITH LOWER LEFT QUADRANT" #x25F1)
84 ("WHITE SQUARE WITH LOWER RIGHT QUADRANT" #x25F2)
85 ("WHITE SQUARE WITH UPPER RIGHT QUADRANT" #x25F3)
86 ("WHITE CIRCLE WITH UPPER LEFT QUADRANT" #x25F4)
87 ("WHITE CIRCLE WITH LOWER LEFT QUADRANT" #x25F5)
88 ("WHITE CIRCLE WITH LOWER RIGHT QUADRANT" #x25F6)
89 ("WHITE CIRCLE WITH UPPER RIGHT QUADRANT" #x25F7)
90 ("UPPER LEFT TRIANGLE" #x25F8)
91 ("UPPER RIGHT TRIANGLE" #x25F9)
92 ("LOWER LEFT TRIANGLE" #x25FA)
93 ("WHITE MEDIUM SQUARE" #x25FB)
94 ("BLACK MEDIUM SQUARE" #x25FC)
95 ("WHITE MEDIUM SMALL SQUARE" #x25FD)
96 ("BLACK MEDIUM SMALL SQUARE" #x25FE)
97 ("LOWER RIGHT TRIANGLE" #x25FF)
98 ))
diff --git a/lisp/nxml/char-name/unicode/02600-026FF.el b/lisp/nxml/char-name/unicode/02600-026FF.el
new file mode 100644
index 00000000000..eaae9bec08f
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/02600-026FF.el
@@ -0,0 +1,135 @@
1(nxml-define-char-name-set 'miscellaneous-symbols
2 '(("BLACK SUN WITH RAYS" #x2600)
3 ("CLOUD" #x2601)
4 ("UMBRELLA" #x2602)
5 ("SNOWMAN" #x2603)
6 ("COMET" #x2604)
7 ("BLACK STAR" #x2605)
8 ("WHITE STAR" #x2606)
9 ("LIGHTNING" #x2607)
10 ("THUNDERSTORM" #x2608)
11 ("SUN" #x2609)
12 ("ASCENDING NODE" #x260A)
13 ("DESCENDING NODE" #x260B)
14 ("CONJUNCTION" #x260C)
15 ("OPPOSITION" #x260D)
16 ("BLACK TELEPHONE" #x260E)
17 ("WHITE TELEPHONE" #x260F)
18 ("BALLOT BOX" #x2610)
19 ("BALLOT BOX WITH CHECK" #x2611)
20 ("BALLOT BOX WITH X" #x2612)
21 ("SALTIRE" #x2613)
22 ("WHITE SHOGI PIECE" #x2616)
23 ("BLACK SHOGI PIECE" #x2617)
24 ("REVERSED ROTATED FLORAL HEART BULLET" #x2619)
25 ("BLACK LEFT POINTING INDEX" #x261A)
26 ("BLACK RIGHT POINTING INDEX" #x261B)
27 ("WHITE LEFT POINTING INDEX" #x261C)
28 ("WHITE UP POINTING INDEX" #x261D)
29 ("WHITE RIGHT POINTING INDEX" #x261E)
30 ("WHITE DOWN POINTING INDEX" #x261F)
31 ("SKULL AND CROSSBONES" #x2620)
32 ("CAUTION SIGN" #x2621)
33 ("RADIOACTIVE SIGN" #x2622)
34 ("BIOHAZARD SIGN" #x2623)
35 ("CADUCEUS" #x2624)
36 ("ANKH" #x2625)
37 ("ORTHODOX CROSS" #x2626)
38 ("CHI RHO" #x2627)
39 ("CROSS OF LORRAINE" #x2628)
40 ("CROSS OF JERUSALEM" #x2629)
41 ("STAR AND CRESCENT" #x262A)
42 ("FARSI SYMBOL" #x262B)
43 ("ADI SHAKTI" #x262C)
44 ("HAMMER AND SICKLE" #x262D)
45 ("PEACE SYMBOL" #x262E)
46 ("YIN YANG" #x262F)
47 ("TRIGRAM FOR HEAVEN" #x2630)
48 ("TRIGRAM FOR LAKE" #x2631)
49 ("TRIGRAM FOR FIRE" #x2632)
50 ("TRIGRAM FOR THUNDER" #x2633)
51 ("TRIGRAM FOR WIND" #x2634)
52 ("TRIGRAM FOR WATER" #x2635)
53 ("TRIGRAM FOR MOUNTAIN" #x2636)
54 ("TRIGRAM FOR EARTH" #x2637)
55 ("WHEEL OF DHARMA" #x2638)
56 ("WHITE FROWNING FACE" #x2639)
57 ("WHITE SMILING FACE" #x263A)
58 ("BLACK SMILING FACE" #x263B)
59 ("WHITE SUN WITH RAYS" #x263C)
60 ("FIRST QUARTER MOON" #x263D)
61 ("LAST QUARTER MOON" #x263E)
62 ("MERCURY" #x263F)
63 ("FEMALE SIGN" #x2640)
64 ("EARTH" #x2641)
65 ("MALE SIGN" #x2642)
66 ("JUPITER" #x2643)
67 ("SATURN" #x2644)
68 ("URANUS" #x2645)
69 ("NEPTUNE" #x2646)
70 ("PLUTO" #x2647)
71 ("ARIES" #x2648)
72 ("TAURUS" #x2649)
73 ("GEMINI" #x264A)
74 ("CANCER" #x264B)
75 ("LEO" #x264C)
76 ("VIRGO" #x264D)
77 ("LIBRA" #x264E)
78 ("SCORPIUS" #x264F)
79 ("SAGITTARIUS" #x2650)
80 ("CAPRICORN" #x2651)
81 ("AQUARIUS" #x2652)
82 ("PISCES" #x2653)
83 ("WHITE CHESS KING" #x2654)
84 ("WHITE CHESS QUEEN" #x2655)
85 ("WHITE CHESS ROOK" #x2656)
86 ("WHITE CHESS BISHOP" #x2657)
87 ("WHITE CHESS KNIGHT" #x2658)
88 ("WHITE CHESS PAWN" #x2659)
89 ("BLACK CHESS KING" #x265A)
90 ("BLACK CHESS QUEEN" #x265B)
91 ("BLACK CHESS ROOK" #x265C)
92 ("BLACK CHESS BISHOP" #x265D)
93 ("BLACK CHESS KNIGHT" #x265E)
94 ("BLACK CHESS PAWN" #x265F)
95 ("BLACK SPADE SUIT" #x2660)
96 ("WHITE HEART SUIT" #x2661)
97 ("WHITE DIAMOND SUIT" #x2662)
98 ("BLACK CLUB SUIT" #x2663)
99 ("WHITE SPADE SUIT" #x2664)
100 ("BLACK HEART SUIT" #x2665)
101 ("BLACK DIAMOND SUIT" #x2666)
102 ("WHITE CLUB SUIT" #x2667)
103 ("HOT SPRINGS" #x2668)
104 ("QUARTER NOTE" #x2669)
105 ("EIGHTH NOTE" #x266A)
106 ("BEAMED EIGHTH NOTES" #x266B)
107 ("BEAMED SIXTEENTH NOTES" #x266C)
108 ("MUSIC FLAT SIGN" #x266D)
109 ("MUSIC NATURAL SIGN" #x266E)
110 ("MUSIC SHARP SIGN" #x266F)
111 ("WEST SYRIAC CROSS" #x2670)
112 ("EAST SYRIAC CROSS" #x2671)
113 ("UNIVERSAL RECYCLING SYMBOL" #x2672)
114 ("RECYCLING SYMBOL FOR TYPE-1 PLASTICS" #x2673)
115 ("RECYCLING SYMBOL FOR TYPE-2 PLASTICS" #x2674)
116 ("RECYCLING SYMBOL FOR TYPE-3 PLASTICS" #x2675)
117 ("RECYCLING SYMBOL FOR TYPE-4 PLASTICS" #x2676)
118 ("RECYCLING SYMBOL FOR TYPE-5 PLASTICS" #x2677)
119 ("RECYCLING SYMBOL FOR TYPE-6 PLASTICS" #x2678)
120 ("RECYCLING SYMBOL FOR TYPE-7 PLASTICS" #x2679)
121 ("RECYCLING SYMBOL FOR GENERIC MATERIALS" #x267A)
122 ("BLACK UNIVERSAL RECYCLING SYMBOL" #x267B)
123 ("RECYCLED PAPER SYMBOL" #x267C)
124 ("PARTIALLY-RECYCLED PAPER SYMBOL" #x267D)
125 ("DIE FACE-1" #x2680)
126 ("DIE FACE-2" #x2681)
127 ("DIE FACE-3" #x2682)
128 ("DIE FACE-4" #x2683)
129 ("DIE FACE-5" #x2684)
130 ("DIE FACE-6" #x2685)
131 ("WHITE CIRCLE WITH DOT RIGHT" #x2686)
132 ("WHITE CIRCLE WITH TWO DOTS" #x2687)
133 ("BLACK CIRCLE WITH WHITE DOT RIGHT" #x2688)
134 ("BLACK CIRCLE WITH TWO WHITE DOTS" #x2689)
135 ))
diff --git a/lisp/nxml/char-name/unicode/02700-027BF.el b/lisp/nxml/char-name/unicode/02700-027BF.el
new file mode 100644
index 00000000000..e4361a32404
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/02700-027BF.el
@@ -0,0 +1,176 @@
1(nxml-define-char-name-set 'dingbats
2 '(("UPPER BLADE SCISSORS" #x2701)
3 ("BLACK SCISSORS" #x2702)
4 ("LOWER BLADE SCISSORS" #x2703)
5 ("WHITE SCISSORS" #x2704)
6 ("TELEPHONE LOCATION SIGN" #x2706)
7 ("TAPE DRIVE" #x2707)
8 ("AIRPLANE" #x2708)
9 ("ENVELOPE" #x2709)
10 ("VICTORY HAND" #x270C)
11 ("WRITING HAND" #x270D)
12 ("LOWER RIGHT PENCIL" #x270E)
13 ("PENCIL" #x270F)
14 ("UPPER RIGHT PENCIL" #x2710)
15 ("WHITE NIB" #x2711)
16 ("BLACK NIB" #x2712)
17 ("CHECK MARK" #x2713)
18 ("HEAVY CHECK MARK" #x2714)
19 ("MULTIPLICATION X" #x2715)
20 ("HEAVY MULTIPLICATION X" #x2716)
21 ("BALLOT X" #x2717)
22 ("HEAVY BALLOT X" #x2718)
23 ("OUTLINED GREEK CROSS" #x2719)
24 ("HEAVY GREEK CROSS" #x271A)
25 ("OPEN CENTRE CROSS" #x271B)
26 ("HEAVY OPEN CENTRE CROSS" #x271C)
27 ("LATIN CROSS" #x271D)
28 ("SHADOWED WHITE LATIN CROSS" #x271E)
29 ("OUTLINED LATIN CROSS" #x271F)
30 ("MALTESE CROSS" #x2720)
31 ("STAR OF DAVID" #x2721)
32 ("FOUR TEARDROP-SPOKED ASTERISK" #x2722)
33 ("FOUR BALLOON-SPOKED ASTERISK" #x2723)
34 ("HEAVY FOUR BALLOON-SPOKED ASTERISK" #x2724)
35 ("FOUR CLUB-SPOKED ASTERISK" #x2725)
36 ("BLACK FOUR POINTED STAR" #x2726)
37 ("WHITE FOUR POINTED STAR" #x2727)
38 ("STRESS OUTLINED WHITE STAR" #x2729)
39 ("CIRCLED WHITE STAR" #x272A)
40 ("OPEN CENTRE BLACK STAR" #x272B)
41 ("BLACK CENTRE WHITE STAR" #x272C)
42 ("OUTLINED BLACK STAR" #x272D)
43 ("HEAVY OUTLINED BLACK STAR" #x272E)
44 ("PINWHEEL STAR" #x272F)
45 ("SHADOWED WHITE STAR" #x2730)
46 ("HEAVY ASTERISK" #x2731)
47 ("OPEN CENTRE ASTERISK" #x2732)
48 ("EIGHT SPOKED ASTERISK" #x2733)
49 ("EIGHT POINTED BLACK STAR" #x2734)
50 ("EIGHT POINTED PINWHEEL STAR" #x2735)
51 ("SIX POINTED BLACK STAR" #x2736)
52 ("EIGHT POINTED RECTILINEAR BLACK STAR" #x2737)
53 ("HEAVY EIGHT POINTED RECTILINEAR BLACK STAR" #x2738)
54 ("TWELVE POINTED BLACK STAR" #x2739)
55 ("SIXTEEN POINTED ASTERISK" #x273A)
56 ("TEARDROP-SPOKED ASTERISK" #x273B)
57 ("OPEN CENTRE TEARDROP-SPOKED ASTERISK" #x273C)
58 ("HEAVY TEARDROP-SPOKED ASTERISK" #x273D)
59 ("SIX PETALLED BLACK AND WHITE FLORETTE" #x273E)
60 ("BLACK FLORETTE" #x273F)
61 ("WHITE FLORETTE" #x2740)
62 ("EIGHT PETALLED OUTLINED BLACK FLORETTE" #x2741)
63 ("CIRCLED OPEN CENTRE EIGHT POINTED STAR" #x2742)
64 ("HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK" #x2743)
65 ("SNOWFLAKE" #x2744)
66 ("TIGHT TRIFOLIATE SNOWFLAKE" #x2745)
67 ("HEAVY CHEVRON SNOWFLAKE" #x2746)
68 ("SPARKLE" #x2747)
69 ("HEAVY SPARKLE" #x2748)
70 ("BALLOON-SPOKED ASTERISK" #x2749)
71 ("EIGHT TEARDROP-SPOKED PROPELLER ASTERISK" #x274A)
72 ("HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK" #x274B)
73 ("SHADOWED WHITE CIRCLE" #x274D)
74 ("LOWER RIGHT DROP-SHADOWED WHITE SQUARE" #x274F)
75 ("UPPER RIGHT DROP-SHADOWED WHITE SQUARE" #x2750)
76 ("LOWER RIGHT SHADOWED WHITE SQUARE" #x2751)
77 ("UPPER RIGHT SHADOWED WHITE SQUARE" #x2752)
78 ("BLACK DIAMOND MINUS WHITE X" #x2756)
79 ("LIGHT VERTICAL BAR" #x2758)
80 ("MEDIUM VERTICAL BAR" #x2759)
81 ("HEAVY VERTICAL BAR" #x275A)
82 ("HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT" #x275B)
83 ("HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT" #x275C)
84 ("HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT" #x275D)
85 ("HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT" #x275E)
86 ("CURVED STEM PARAGRAPH SIGN ORNAMENT" #x2761)
87 ("HEAVY EXCLAMATION MARK ORNAMENT" #x2762)
88 ("HEAVY HEART EXCLAMATION MARK ORNAMENT" #x2763)
89 ("HEAVY BLACK HEART" #x2764)
90 ("ROTATED HEAVY BLACK HEART BULLET" #x2765)
91 ("FLORAL HEART" #x2766)
92 ("ROTATED FLORAL HEART BULLET" #x2767)
93 ("MEDIUM LEFT PARENTHESIS ORNAMENT" #x2768)
94 ("MEDIUM RIGHT PARENTHESIS ORNAMENT" #x2769)
95 ("MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT" #x276A)
96 ("MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT" #x276B)
97 ("MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT" #x276C)
98 ("MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT" #x276D)
99 ("HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT" #x276E)
100 ("HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT" #x276F)
101 ("HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT" #x2770)
102 ("HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT" #x2771)
103 ("LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT" #x2772)
104 ("LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT" #x2773)
105 ("MEDIUM LEFT CURLY BRACKET ORNAMENT" #x2774)
106 ("MEDIUM RIGHT CURLY BRACKET ORNAMENT" #x2775)
107 ("DINGBAT NEGATIVE CIRCLED DIGIT ONE" #x2776)
108 ("DINGBAT NEGATIVE CIRCLED DIGIT TWO" #x2777)
109 ("DINGBAT NEGATIVE CIRCLED DIGIT THREE" #x2778)
110 ("DINGBAT NEGATIVE CIRCLED DIGIT FOUR" #x2779)
111 ("DINGBAT NEGATIVE CIRCLED DIGIT FIVE" #x277A)
112 ("DINGBAT NEGATIVE CIRCLED DIGIT SIX" #x277B)
113 ("DINGBAT NEGATIVE CIRCLED DIGIT SEVEN" #x277C)
114 ("DINGBAT NEGATIVE CIRCLED DIGIT EIGHT" #x277D)
115 ("DINGBAT NEGATIVE CIRCLED DIGIT NINE" #x277E)
116 ("DINGBAT NEGATIVE CIRCLED NUMBER TEN" #x277F)
117 ("DINGBAT CIRCLED SANS-SERIF DIGIT ONE" #x2780)
118 ("DINGBAT CIRCLED SANS-SERIF DIGIT TWO" #x2781)
119 ("DINGBAT CIRCLED SANS-SERIF DIGIT THREE" #x2782)
120 ("DINGBAT CIRCLED SANS-SERIF DIGIT FOUR" #x2783)
121 ("DINGBAT CIRCLED SANS-SERIF DIGIT FIVE" #x2784)
122 ("DINGBAT CIRCLED SANS-SERIF DIGIT SIX" #x2785)
123 ("DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN" #x2786)
124 ("DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT" #x2787)
125 ("DINGBAT CIRCLED SANS-SERIF DIGIT NINE" #x2788)
126 ("DINGBAT CIRCLED SANS-SERIF NUMBER TEN" #x2789)
127 ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE" #x278A)
128 ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO" #x278B)
129 ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE" #x278C)
130 ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR" #x278D)
131 ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE" #x278E)
132 ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX" #x278F)
133 ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN" #x2790)
134 ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT" #x2791)
135 ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE" #x2792)
136 ("DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN" #x2793)
137 ("HEAVY WIDE-HEADED RIGHTWARDS ARROW" #x2794)
138 ("HEAVY SOUTH EAST ARROW" #x2798)
139 ("HEAVY RIGHTWARDS ARROW" #x2799)
140 ("HEAVY NORTH EAST ARROW" #x279A)
141 ("DRAFTING POINT RIGHTWARDS ARROW" #x279B)
142 ("HEAVY ROUND-TIPPED RIGHTWARDS ARROW" #x279C)
143 ("TRIANGLE-HEADED RIGHTWARDS ARROW" #x279D)
144 ("HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW" #x279E)
145 ("DASHED TRIANGLE-HEADED RIGHTWARDS ARROW" #x279F)
146 ("HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW" #x27A0)
147 ("BLACK RIGHTWARDS ARROW" #x27A1)
148 ("THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD" #x27A2)
149 ("THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD" #x27A3)
150 ("BLACK RIGHTWARDS ARROWHEAD" #x27A4)
151 ("HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW" #x27A5)
152 ("HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW" #x27A6)
153 ("SQUAT BLACK RIGHTWARDS ARROW" #x27A7)
154 ("HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW" #x27A8)
155 ("RIGHT-SHADED WHITE RIGHTWARDS ARROW" #x27A9)
156 ("LEFT-SHADED WHITE RIGHTWARDS ARROW" #x27AA)
157 ("BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW" #x27AB)
158 ("FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW" #x27AC)
159 ("HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW" #x27AD)
160 ("HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW" #x27AE)
161 ("NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW" #x27AF)
162 ("NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW" #x27B1)
163 ("CIRCLED HEAVY WHITE RIGHTWARDS ARROW" #x27B2)
164 ("WHITE-FEATHERED RIGHTWARDS ARROW" #x27B3)
165 ("BLACK-FEATHERED SOUTH EAST ARROW" #x27B4)
166 ("BLACK-FEATHERED RIGHTWARDS ARROW" #x27B5)
167 ("BLACK-FEATHERED NORTH EAST ARROW" #x27B6)
168 ("HEAVY BLACK-FEATHERED SOUTH EAST ARROW" #x27B7)
169 ("HEAVY BLACK-FEATHERED RIGHTWARDS ARROW" #x27B8)
170 ("HEAVY BLACK-FEATHERED NORTH EAST ARROW" #x27B9)
171 ("TEARDROP-BARBED RIGHTWARDS ARROW" #x27BA)
172 ("HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW" #x27BB)
173 ("WEDGE-TAILED RIGHTWARDS ARROW" #x27BC)
174 ("HEAVY WEDGE-TAILED RIGHTWARDS ARROW" #x27BD)
175 ("OPEN-OUTLINED RIGHTWARDS ARROW" #x27BE)
176 ))
diff --git a/lisp/nxml/char-name/unicode/027C0-027EF.el b/lisp/nxml/char-name/unicode/027C0-027EF.el
new file mode 100644
index 00000000000..c68207cff76
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/027C0-027EF.el
@@ -0,0 +1,30 @@
1(nxml-define-char-name-set 'miscellaneous-mathematical-symbols-a
2 '(("WHITE DIAMOND WITH CENTRED DOT" #x27D0)
3 ("AND WITH DOT" #x27D1)
4 ("ELEMENT OF OPENING UPWARDS" #x27D2)
5 ("LOWER RIGHT CORNER WITH DOT" #x27D3)
6 ("UPPER LEFT CORNER WITH DOT" #x27D4)
7 ("LEFT OUTER JOIN" #x27D5)
8 ("RIGHT OUTER JOIN" #x27D6)
9 ("FULL OUTER JOIN" #x27D7)
10 ("LARGE UP TACK" #x27D8)
11 ("LARGE DOWN TACK" #x27D9)
12 ("LEFT AND RIGHT DOUBLE TURNSTILE" #x27DA)
13 ("LEFT AND RIGHT TACK" #x27DB)
14 ("LEFT MULTIMAP" #x27DC)
15 ("LONG RIGHT TACK" #x27DD)
16 ("LONG LEFT TACK" #x27DE)
17 ("UP TACK WITH CIRCLE ABOVE" #x27DF)
18 ("LOZENGE DIVIDED BY HORIZONTAL RULE" #x27E0)
19 ("WHITE CONCAVE-SIDED DIAMOND" #x27E1)
20 ("WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK" #x27E2)
21 ("WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK" #x27E3)
22 ("WHITE SQUARE WITH LEFTWARDS TICK" #x27E4)
23 ("WHITE SQUARE WITH RIGHTWARDS TICK" #x27E5)
24 ("MATHEMATICAL LEFT WHITE SQUARE BRACKET" #x27E6)
25 ("MATHEMATICAL RIGHT WHITE SQUARE BRACKET" #x27E7)
26 ("MATHEMATICAL LEFT ANGLE BRACKET" #x27E8)
27 ("MATHEMATICAL RIGHT ANGLE BRACKET" #x27E9)
28 ("MATHEMATICAL LEFT DOUBLE ANGLE BRACKET" #x27EA)
29 ("MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET" #x27EB)
30 ))
diff --git a/lisp/nxml/char-name/unicode/027F0-027FF.el b/lisp/nxml/char-name/unicode/027F0-027FF.el
new file mode 100644
index 00000000000..3403ce46146
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/027F0-027FF.el
@@ -0,0 +1,18 @@
1(nxml-define-char-name-set 'supplemental-arrows-a
2 '(("UPWARDS QUADRUPLE ARROW" #x27F0)
3 ("DOWNWARDS QUADRUPLE ARROW" #x27F1)
4 ("ANTICLOCKWISE GAPPED CIRCLE ARROW" #x27F2)
5 ("CLOCKWISE GAPPED CIRCLE ARROW" #x27F3)
6 ("RIGHT ARROW WITH CIRCLED PLUS" #x27F4)
7 ("LONG LEFTWARDS ARROW" #x27F5)
8 ("LONG RIGHTWARDS ARROW" #x27F6)
9 ("LONG LEFT RIGHT ARROW" #x27F7)
10 ("LONG LEFTWARDS DOUBLE ARROW" #x27F8)
11 ("LONG RIGHTWARDS DOUBLE ARROW" #x27F9)
12 ("LONG LEFT RIGHT DOUBLE ARROW" #x27FA)
13 ("LONG LEFTWARDS ARROW FROM BAR" #x27FB)
14 ("LONG RIGHTWARDS ARROW FROM BAR" #x27FC)
15 ("LONG LEFTWARDS DOUBLE ARROW FROM BAR" #x27FD)
16 ("LONG RIGHTWARDS DOUBLE ARROW FROM BAR" #x27FE)
17 ("LONG RIGHTWARDS SQUIGGLE ARROW" #x27FF)
18 ))
diff --git a/lisp/nxml/char-name/unicode/02800-028FF.el b/lisp/nxml/char-name/unicode/02800-028FF.el
new file mode 100644
index 00000000000..91876d840bf
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/02800-028FF.el
@@ -0,0 +1,258 @@
1(nxml-define-char-name-set 'braille-patterns
2 '(("BRAILLE PATTERN BLANK" #x2800)
3 ("BRAILLE PATTERN DOTS-1" #x2801)
4 ("BRAILLE PATTERN DOTS-2" #x2802)
5 ("BRAILLE PATTERN DOTS-12" #x2803)
6 ("BRAILLE PATTERN DOTS-3" #x2804)
7 ("BRAILLE PATTERN DOTS-13" #x2805)
8 ("BRAILLE PATTERN DOTS-23" #x2806)
9 ("BRAILLE PATTERN DOTS-123" #x2807)
10 ("BRAILLE PATTERN DOTS-4" #x2808)
11 ("BRAILLE PATTERN DOTS-14" #x2809)
12 ("BRAILLE PATTERN DOTS-24" #x280A)
13 ("BRAILLE PATTERN DOTS-124" #x280B)
14 ("BRAILLE PATTERN DOTS-34" #x280C)
15 ("BRAILLE PATTERN DOTS-134" #x280D)
16 ("BRAILLE PATTERN DOTS-234" #x280E)
17 ("BRAILLE PATTERN DOTS-1234" #x280F)
18 ("BRAILLE PATTERN DOTS-5" #x2810)
19 ("BRAILLE PATTERN DOTS-15" #x2811)
20 ("BRAILLE PATTERN DOTS-25" #x2812)
21 ("BRAILLE PATTERN DOTS-125" #x2813)
22 ("BRAILLE PATTERN DOTS-35" #x2814)
23 ("BRAILLE PATTERN DOTS-135" #x2815)
24 ("BRAILLE PATTERN DOTS-235" #x2816)
25 ("BRAILLE PATTERN DOTS-1235" #x2817)
26 ("BRAILLE PATTERN DOTS-45" #x2818)
27 ("BRAILLE PATTERN DOTS-145" #x2819)
28 ("BRAILLE PATTERN DOTS-245" #x281A)
29 ("BRAILLE PATTERN DOTS-1245" #x281B)
30 ("BRAILLE PATTERN DOTS-345" #x281C)
31 ("BRAILLE PATTERN DOTS-1345" #x281D)
32 ("BRAILLE PATTERN DOTS-2345" #x281E)
33 ("BRAILLE PATTERN DOTS-12345" #x281F)
34 ("BRAILLE PATTERN DOTS-6" #x2820)
35 ("BRAILLE PATTERN DOTS-16" #x2821)
36 ("BRAILLE PATTERN DOTS-26" #x2822)
37 ("BRAILLE PATTERN DOTS-126" #x2823)
38 ("BRAILLE PATTERN DOTS-36" #x2824)
39 ("BRAILLE PATTERN DOTS-136" #x2825)
40 ("BRAILLE PATTERN DOTS-236" #x2826)
41 ("BRAILLE PATTERN DOTS-1236" #x2827)
42 ("BRAILLE PATTERN DOTS-46" #x2828)
43 ("BRAILLE PATTERN DOTS-146" #x2829)
44 ("BRAILLE PATTERN DOTS-246" #x282A)
45 ("BRAILLE PATTERN DOTS-1246" #x282B)
46 ("BRAILLE PATTERN DOTS-346" #x282C)
47 ("BRAILLE PATTERN DOTS-1346" #x282D)
48 ("BRAILLE PATTERN DOTS-2346" #x282E)
49 ("BRAILLE PATTERN DOTS-12346" #x282F)
50 ("BRAILLE PATTERN DOTS-56" #x2830)
51 ("BRAILLE PATTERN DOTS-156" #x2831)
52 ("BRAILLE PATTERN DOTS-256" #x2832)
53 ("BRAILLE PATTERN DOTS-1256" #x2833)
54 ("BRAILLE PATTERN DOTS-356" #x2834)
55 ("BRAILLE PATTERN DOTS-1356" #x2835)
56 ("BRAILLE PATTERN DOTS-2356" #x2836)
57 ("BRAILLE PATTERN DOTS-12356" #x2837)
58 ("BRAILLE PATTERN DOTS-456" #x2838)
59 ("BRAILLE PATTERN DOTS-1456" #x2839)
60 ("BRAILLE PATTERN DOTS-2456" #x283A)
61 ("BRAILLE PATTERN DOTS-12456" #x283B)
62 ("BRAILLE PATTERN DOTS-3456" #x283C)
63 ("BRAILLE PATTERN DOTS-13456" #x283D)
64 ("BRAILLE PATTERN DOTS-23456" #x283E)
65 ("BRAILLE PATTERN DOTS-123456" #x283F)
66 ("BRAILLE PATTERN DOTS-7" #x2840)
67 ("BRAILLE PATTERN DOTS-17" #x2841)
68 ("BRAILLE PATTERN DOTS-27" #x2842)
69 ("BRAILLE PATTERN DOTS-127" #x2843)
70 ("BRAILLE PATTERN DOTS-37" #x2844)
71 ("BRAILLE PATTERN DOTS-137" #x2845)
72 ("BRAILLE PATTERN DOTS-237" #x2846)
73 ("BRAILLE PATTERN DOTS-1237" #x2847)
74 ("BRAILLE PATTERN DOTS-47" #x2848)
75 ("BRAILLE PATTERN DOTS-147" #x2849)
76 ("BRAILLE PATTERN DOTS-247" #x284A)
77 ("BRAILLE PATTERN DOTS-1247" #x284B)
78 ("BRAILLE PATTERN DOTS-347" #x284C)
79 ("BRAILLE PATTERN DOTS-1347" #x284D)
80 ("BRAILLE PATTERN DOTS-2347" #x284E)
81 ("BRAILLE PATTERN DOTS-12347" #x284F)
82 ("BRAILLE PATTERN DOTS-57" #x2850)
83 ("BRAILLE PATTERN DOTS-157" #x2851)
84 ("BRAILLE PATTERN DOTS-257" #x2852)
85 ("BRAILLE PATTERN DOTS-1257" #x2853)
86 ("BRAILLE PATTERN DOTS-357" #x2854)
87 ("BRAILLE PATTERN DOTS-1357" #x2855)
88 ("BRAILLE PATTERN DOTS-2357" #x2856)
89 ("BRAILLE PATTERN DOTS-12357" #x2857)
90 ("BRAILLE PATTERN DOTS-457" #x2858)
91 ("BRAILLE PATTERN DOTS-1457" #x2859)
92 ("BRAILLE PATTERN DOTS-2457" #x285A)
93 ("BRAILLE PATTERN DOTS-12457" #x285B)
94 ("BRAILLE PATTERN DOTS-3457" #x285C)
95 ("BRAILLE PATTERN DOTS-13457" #x285D)
96 ("BRAILLE PATTERN DOTS-23457" #x285E)
97 ("BRAILLE PATTERN DOTS-123457" #x285F)
98 ("BRAILLE PATTERN DOTS-67" #x2860)
99 ("BRAILLE PATTERN DOTS-167" #x2861)
100 ("BRAILLE PATTERN DOTS-267" #x2862)
101 ("BRAILLE PATTERN DOTS-1267" #x2863)
102 ("BRAILLE PATTERN DOTS-367" #x2864)
103 ("BRAILLE PATTERN DOTS-1367" #x2865)
104 ("BRAILLE PATTERN DOTS-2367" #x2866)
105 ("BRAILLE PATTERN DOTS-12367" #x2867)
106 ("BRAILLE PATTERN DOTS-467" #x2868)
107 ("BRAILLE PATTERN DOTS-1467" #x2869)
108 ("BRAILLE PATTERN DOTS-2467" #x286A)
109 ("BRAILLE PATTERN DOTS-12467" #x286B)
110 ("BRAILLE PATTERN DOTS-3467" #x286C)
111 ("BRAILLE PATTERN DOTS-13467" #x286D)
112 ("BRAILLE PATTERN DOTS-23467" #x286E)
113 ("BRAILLE PATTERN DOTS-123467" #x286F)
114 ("BRAILLE PATTERN DOTS-567" #x2870)
115 ("BRAILLE PATTERN DOTS-1567" #x2871)
116 ("BRAILLE PATTERN DOTS-2567" #x2872)
117 ("BRAILLE PATTERN DOTS-12567" #x2873)
118 ("BRAILLE PATTERN DOTS-3567" #x2874)
119 ("BRAILLE PATTERN DOTS-13567" #x2875)
120 ("BRAILLE PATTERN DOTS-23567" #x2876)
121 ("BRAILLE PATTERN DOTS-123567" #x2877)
122 ("BRAILLE PATTERN DOTS-4567" #x2878)
123 ("BRAILLE PATTERN DOTS-14567" #x2879)
124 ("BRAILLE PATTERN DOTS-24567" #x287A)
125 ("BRAILLE PATTERN DOTS-124567" #x287B)
126 ("BRAILLE PATTERN DOTS-34567" #x287C)
127 ("BRAILLE PATTERN DOTS-134567" #x287D)
128 ("BRAILLE PATTERN DOTS-234567" #x287E)
129 ("BRAILLE PATTERN DOTS-1234567" #x287F)
130 ("BRAILLE PATTERN DOTS-8" #x2880)
131 ("BRAILLE PATTERN DOTS-18" #x2881)
132 ("BRAILLE PATTERN DOTS-28" #x2882)
133 ("BRAILLE PATTERN DOTS-128" #x2883)
134 ("BRAILLE PATTERN DOTS-38" #x2884)
135 ("BRAILLE PATTERN DOTS-138" #x2885)
136 ("BRAILLE PATTERN DOTS-238" #x2886)
137 ("BRAILLE PATTERN DOTS-1238" #x2887)
138 ("BRAILLE PATTERN DOTS-48" #x2888)
139 ("BRAILLE PATTERN DOTS-148" #x2889)
140 ("BRAILLE PATTERN DOTS-248" #x288A)
141 ("BRAILLE PATTERN DOTS-1248" #x288B)
142 ("BRAILLE PATTERN DOTS-348" #x288C)
143 ("BRAILLE PATTERN DOTS-1348" #x288D)
144 ("BRAILLE PATTERN DOTS-2348" #x288E)
145 ("BRAILLE PATTERN DOTS-12348" #x288F)
146 ("BRAILLE PATTERN DOTS-58" #x2890)
147 ("BRAILLE PATTERN DOTS-158" #x2891)
148 ("BRAILLE PATTERN DOTS-258" #x2892)
149 ("BRAILLE PATTERN DOTS-1258" #x2893)
150 ("BRAILLE PATTERN DOTS-358" #x2894)
151 ("BRAILLE PATTERN DOTS-1358" #x2895)
152 ("BRAILLE PATTERN DOTS-2358" #x2896)
153 ("BRAILLE PATTERN DOTS-12358" #x2897)
154 ("BRAILLE PATTERN DOTS-458" #x2898)
155 ("BRAILLE PATTERN DOTS-1458" #x2899)
156 ("BRAILLE PATTERN DOTS-2458" #x289A)
157 ("BRAILLE PATTERN DOTS-12458" #x289B)
158 ("BRAILLE PATTERN DOTS-3458" #x289C)
159 ("BRAILLE PATTERN DOTS-13458" #x289D)
160 ("BRAILLE PATTERN DOTS-23458" #x289E)
161 ("BRAILLE PATTERN DOTS-123458" #x289F)
162 ("BRAILLE PATTERN DOTS-68" #x28A0)
163 ("BRAILLE PATTERN DOTS-168" #x28A1)
164 ("BRAILLE PATTERN DOTS-268" #x28A2)
165 ("BRAILLE PATTERN DOTS-1268" #x28A3)
166 ("BRAILLE PATTERN DOTS-368" #x28A4)
167 ("BRAILLE PATTERN DOTS-1368" #x28A5)
168 ("BRAILLE PATTERN DOTS-2368" #x28A6)
169 ("BRAILLE PATTERN DOTS-12368" #x28A7)
170 ("BRAILLE PATTERN DOTS-468" #x28A8)
171 ("BRAILLE PATTERN DOTS-1468" #x28A9)
172 ("BRAILLE PATTERN DOTS-2468" #x28AA)
173 ("BRAILLE PATTERN DOTS-12468" #x28AB)
174 ("BRAILLE PATTERN DOTS-3468" #x28AC)
175 ("BRAILLE PATTERN DOTS-13468" #x28AD)
176 ("BRAILLE PATTERN DOTS-23468" #x28AE)
177 ("BRAILLE PATTERN DOTS-123468" #x28AF)
178 ("BRAILLE PATTERN DOTS-568" #x28B0)
179 ("BRAILLE PATTERN DOTS-1568" #x28B1)
180 ("BRAILLE PATTERN DOTS-2568" #x28B2)
181 ("BRAILLE PATTERN DOTS-12568" #x28B3)
182 ("BRAILLE PATTERN DOTS-3568" #x28B4)
183 ("BRAILLE PATTERN DOTS-13568" #x28B5)
184 ("BRAILLE PATTERN DOTS-23568" #x28B6)
185 ("BRAILLE PATTERN DOTS-123568" #x28B7)
186 ("BRAILLE PATTERN DOTS-4568" #x28B8)
187 ("BRAILLE PATTERN DOTS-14568" #x28B9)
188 ("BRAILLE PATTERN DOTS-24568" #x28BA)
189 ("BRAILLE PATTERN DOTS-124568" #x28BB)
190 ("BRAILLE PATTERN DOTS-34568" #x28BC)
191 ("BRAILLE PATTERN DOTS-134568" #x28BD)
192 ("BRAILLE PATTERN DOTS-234568" #x28BE)
193 ("BRAILLE PATTERN DOTS-1234568" #x28BF)
194 ("BRAILLE PATTERN DOTS-78" #x28C0)
195 ("BRAILLE PATTERN DOTS-178" #x28C1)
196 ("BRAILLE PATTERN DOTS-278" #x28C2)
197 ("BRAILLE PATTERN DOTS-1278" #x28C3)
198 ("BRAILLE PATTERN DOTS-378" #x28C4)
199 ("BRAILLE PATTERN DOTS-1378" #x28C5)
200 ("BRAILLE PATTERN DOTS-2378" #x28C6)
201 ("BRAILLE PATTERN DOTS-12378" #x28C7)
202 ("BRAILLE PATTERN DOTS-478" #x28C8)
203 ("BRAILLE PATTERN DOTS-1478" #x28C9)
204 ("BRAILLE PATTERN DOTS-2478" #x28CA)
205 ("BRAILLE PATTERN DOTS-12478" #x28CB)
206 ("BRAILLE PATTERN DOTS-3478" #x28CC)
207 ("BRAILLE PATTERN DOTS-13478" #x28CD)
208 ("BRAILLE PATTERN DOTS-23478" #x28CE)
209 ("BRAILLE PATTERN DOTS-123478" #x28CF)
210 ("BRAILLE PATTERN DOTS-578" #x28D0)
211 ("BRAILLE PATTERN DOTS-1578" #x28D1)
212 ("BRAILLE PATTERN DOTS-2578" #x28D2)
213 ("BRAILLE PATTERN DOTS-12578" #x28D3)
214 ("BRAILLE PATTERN DOTS-3578" #x28D4)
215 ("BRAILLE PATTERN DOTS-13578" #x28D5)
216 ("BRAILLE PATTERN DOTS-23578" #x28D6)
217 ("BRAILLE PATTERN DOTS-123578" #x28D7)
218 ("BRAILLE PATTERN DOTS-4578" #x28D8)
219 ("BRAILLE PATTERN DOTS-14578" #x28D9)
220 ("BRAILLE PATTERN DOTS-24578" #x28DA)
221 ("BRAILLE PATTERN DOTS-124578" #x28DB)
222 ("BRAILLE PATTERN DOTS-34578" #x28DC)
223 ("BRAILLE PATTERN DOTS-134578" #x28DD)
224 ("BRAILLE PATTERN DOTS-234578" #x28DE)
225 ("BRAILLE PATTERN DOTS-1234578" #x28DF)
226 ("BRAILLE PATTERN DOTS-678" #x28E0)
227 ("BRAILLE PATTERN DOTS-1678" #x28E1)
228 ("BRAILLE PATTERN DOTS-2678" #x28E2)
229 ("BRAILLE PATTERN DOTS-12678" #x28E3)
230 ("BRAILLE PATTERN DOTS-3678" #x28E4)
231 ("BRAILLE PATTERN DOTS-13678" #x28E5)
232 ("BRAILLE PATTERN DOTS-23678" #x28E6)
233 ("BRAILLE PATTERN DOTS-123678" #x28E7)
234 ("BRAILLE PATTERN DOTS-4678" #x28E8)
235 ("BRAILLE PATTERN DOTS-14678" #x28E9)
236 ("BRAILLE PATTERN DOTS-24678" #x28EA)
237 ("BRAILLE PATTERN DOTS-124678" #x28EB)
238 ("BRAILLE PATTERN DOTS-34678" #x28EC)
239 ("BRAILLE PATTERN DOTS-134678" #x28ED)
240 ("BRAILLE PATTERN DOTS-234678" #x28EE)
241 ("BRAILLE PATTERN DOTS-1234678" #x28EF)
242 ("BRAILLE PATTERN DOTS-5678" #x28F0)
243 ("BRAILLE PATTERN DOTS-15678" #x28F1)
244 ("BRAILLE PATTERN DOTS-25678" #x28F2)
245 ("BRAILLE PATTERN DOTS-125678" #x28F3)
246 ("BRAILLE PATTERN DOTS-35678" #x28F4)
247 ("BRAILLE PATTERN DOTS-135678" #x28F5)
248 ("BRAILLE PATTERN DOTS-235678" #x28F6)
249 ("BRAILLE PATTERN DOTS-1235678" #x28F7)
250 ("BRAILLE PATTERN DOTS-45678" #x28F8)
251 ("BRAILLE PATTERN DOTS-145678" #x28F9)
252 ("BRAILLE PATTERN DOTS-245678" #x28FA)
253 ("BRAILLE PATTERN DOTS-1245678" #x28FB)
254 ("BRAILLE PATTERN DOTS-345678" #x28FC)
255 ("BRAILLE PATTERN DOTS-1345678" #x28FD)
256 ("BRAILLE PATTERN DOTS-2345678" #x28FE)
257 ("BRAILLE PATTERN DOTS-12345678" #x28FF)
258 ))
diff --git a/lisp/nxml/char-name/unicode/02900-0297F.el b/lisp/nxml/char-name/unicode/02900-0297F.el
new file mode 100644
index 00000000000..a70eb7fe839
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/02900-0297F.el
@@ -0,0 +1,130 @@
1(nxml-define-char-name-set 'supplemental-arrows-b
2 '(("RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE" #x2900)
3 ("RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE" #x2901)
4 ("LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE" #x2902)
5 ("RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE" #x2903)
6 ("LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE" #x2904)
7 ("RIGHTWARDS TWO-HEADED ARROW FROM BAR" #x2905)
8 ("LEFTWARDS DOUBLE ARROW FROM BAR" #x2906)
9 ("RIGHTWARDS DOUBLE ARROW FROM BAR" #x2907)
10 ("DOWNWARDS ARROW WITH HORIZONTAL STROKE" #x2908)
11 ("UPWARDS ARROW WITH HORIZONTAL STROKE" #x2909)
12 ("UPWARDS TRIPLE ARROW" #x290A)
13 ("DOWNWARDS TRIPLE ARROW" #x290B)
14 ("LEFTWARDS DOUBLE DASH ARROW" #x290C)
15 ("RIGHTWARDS DOUBLE DASH ARROW" #x290D)
16 ("LEFTWARDS TRIPLE DASH ARROW" #x290E)
17 ("RIGHTWARDS TRIPLE DASH ARROW" #x290F)
18 ("RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW" #x2910)
19 ("RIGHTWARDS ARROW WITH DOTTED STEM" #x2911)
20 ("UPWARDS ARROW TO BAR" #x2912)
21 ("DOWNWARDS ARROW TO BAR" #x2913)
22 ("RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE" #x2914)
23 ("RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE" #x2915)
24 ("RIGHTWARDS TWO-HEADED ARROW WITH TAIL" #x2916)
25 ("RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE" #x2917)
26 ("RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE" #x2918)
27 ("LEFTWARDS ARROW-TAIL" #x2919)
28 ("RIGHTWARDS ARROW-TAIL" #x291A)
29 ("LEFTWARDS DOUBLE ARROW-TAIL" #x291B)
30 ("RIGHTWARDS DOUBLE ARROW-TAIL" #x291C)
31 ("LEFTWARDS ARROW TO BLACK DIAMOND" #x291D)
32 ("RIGHTWARDS ARROW TO BLACK DIAMOND" #x291E)
33 ("LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND" #x291F)
34 ("RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND" #x2920)
35 ("NORTH WEST AND SOUTH EAST ARROW" #x2921)
36 ("NORTH EAST AND SOUTH WEST ARROW" #x2922)
37 ("NORTH WEST ARROW WITH HOOK" #x2923)
38 ("NORTH EAST ARROW WITH HOOK" #x2924)
39 ("SOUTH EAST ARROW WITH HOOK" #x2925)
40 ("SOUTH WEST ARROW WITH HOOK" #x2926)
41 ("NORTH WEST ARROW AND NORTH EAST ARROW" #x2927)
42 ("NORTH EAST ARROW AND SOUTH EAST ARROW" #x2928)
43 ("SOUTH EAST ARROW AND SOUTH WEST ARROW" #x2929)
44 ("SOUTH WEST ARROW AND NORTH WEST ARROW" #x292A)
45 ("RISING DIAGONAL CROSSING FALLING DIAGONAL" #x292B)
46 ("FALLING DIAGONAL CROSSING RISING DIAGONAL" #x292C)
47 ("SOUTH EAST ARROW CROSSING NORTH EAST ARROW" #x292D)
48 ("NORTH EAST ARROW CROSSING SOUTH EAST ARROW" #x292E)
49 ("FALLING DIAGONAL CROSSING NORTH EAST ARROW" #x292F)
50 ("RISING DIAGONAL CROSSING SOUTH EAST ARROW" #x2930)
51 ("NORTH EAST ARROW CROSSING NORTH WEST ARROW" #x2931)
52 ("NORTH WEST ARROW CROSSING NORTH EAST ARROW" #x2932)
53 ("WAVE ARROW POINTING DIRECTLY RIGHT" #x2933)
54 ("ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS" #x2934)
55 ("ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS" #x2935)
56 ("ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS" #x2936)
57 ("ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS" #x2937)
58 ("RIGHT-SIDE ARC CLOCKWISE ARROW" #x2938)
59 ("LEFT-SIDE ARC ANTICLOCKWISE ARROW" #x2939)
60 ("TOP ARC ANTICLOCKWISE ARROW" #x293A)
61 ("BOTTOM ARC ANTICLOCKWISE ARROW" #x293B)
62 ("TOP ARC CLOCKWISE ARROW WITH MINUS" #x293C)
63 ("TOP ARC ANTICLOCKWISE ARROW WITH PLUS" #x293D)
64 ("LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW" #x293E)
65 ("LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW" #x293F)
66 ("ANTICLOCKWISE CLOSED CIRCLE ARROW" #x2940)
67 ("CLOCKWISE CLOSED CIRCLE ARROW" #x2941)
68 ("RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW" #x2942)
69 ("LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW" #x2943)
70 ("SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW" #x2944)
71 ("RIGHTWARDS ARROW WITH PLUS BELOW" #x2945)
72 ("LEFTWARDS ARROW WITH PLUS BELOW" #x2946)
73 ("RIGHTWARDS ARROW THROUGH X" #x2947)
74 ("LEFT RIGHT ARROW THROUGH SMALL CIRCLE" #x2948)
75 ("UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE" #x2949)
76 ("LEFT BARB UP RIGHT BARB DOWN HARPOON" #x294A)
77 ("LEFT BARB DOWN RIGHT BARB UP HARPOON" #x294B)
78 ("UP BARB RIGHT DOWN BARB LEFT HARPOON" #x294C)
79 ("UP BARB LEFT DOWN BARB RIGHT HARPOON" #x294D)
80 ("LEFT BARB UP RIGHT BARB UP HARPOON" #x294E)
81 ("UP BARB RIGHT DOWN BARB RIGHT HARPOON" #x294F)
82 ("LEFT BARB DOWN RIGHT BARB DOWN HARPOON" #x2950)
83 ("UP BARB LEFT DOWN BARB LEFT HARPOON" #x2951)
84 ("LEFTWARDS HARPOON WITH BARB UP TO BAR" #x2952)
85 ("RIGHTWARDS HARPOON WITH BARB UP TO BAR" #x2953)
86 ("UPWARDS HARPOON WITH BARB RIGHT TO BAR" #x2954)
87 ("DOWNWARDS HARPOON WITH BARB RIGHT TO BAR" #x2955)
88 ("LEFTWARDS HARPOON WITH BARB DOWN TO BAR" #x2956)
89 ("RIGHTWARDS HARPOON WITH BARB DOWN TO BAR" #x2957)
90 ("UPWARDS HARPOON WITH BARB LEFT TO BAR" #x2958)
91 ("DOWNWARDS HARPOON WITH BARB LEFT TO BAR" #x2959)
92 ("LEFTWARDS HARPOON WITH BARB UP FROM BAR" #x295A)
93 ("RIGHTWARDS HARPOON WITH BARB UP FROM BAR" #x295B)
94 ("UPWARDS HARPOON WITH BARB RIGHT FROM BAR" #x295C)
95 ("DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR" #x295D)
96 ("LEFTWARDS HARPOON WITH BARB DOWN FROM BAR" #x295E)
97 ("RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR" #x295F)
98 ("UPWARDS HARPOON WITH BARB LEFT FROM BAR" #x2960)
99 ("DOWNWARDS HARPOON WITH BARB LEFT FROM BAR" #x2961)
100 ("LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN" #x2962)
101 ("UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT" #x2963)
102 ("RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN" #x2964)
103 ("DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT" #x2965)
104 ("LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP" #x2966)
105 ("LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN" #x2967)
106 ("RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP" #x2968)
107 ("RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN" #x2969)
108 ("LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH" #x296A)
109 ("LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH" #x296B)
110 ("RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH" #x296C)
111 ("RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH" #x296D)
112 ("UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT" #x296E)
113 ("DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT" #x296F)
114 ("RIGHT DOUBLE ARROW WITH ROUNDED HEAD" #x2970)
115 ("EQUALS SIGN ABOVE RIGHTWARDS ARROW" #x2971)
116 ("TILDE OPERATOR ABOVE RIGHTWARDS ARROW" #x2972)
117 ("LEFTWARDS ARROW ABOVE TILDE OPERATOR" #x2973)
118 ("RIGHTWARDS ARROW ABOVE TILDE OPERATOR" #x2974)
119 ("RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO" #x2975)
120 ("LESS-THAN ABOVE LEFTWARDS ARROW" #x2976)
121 ("LEFTWARDS ARROW THROUGH LESS-THAN" #x2977)
122 ("GREATER-THAN ABOVE RIGHTWARDS ARROW" #x2978)
123 ("SUBSET ABOVE RIGHTWARDS ARROW" #x2979)
124 ("LEFTWARDS ARROW THROUGH SUBSET" #x297A)
125 ("SUPERSET ABOVE LEFTWARDS ARROW" #x297B)
126 ("LEFT FISH TAIL" #x297C)
127 ("RIGHT FISH TAIL" #x297D)
128 ("UP FISH TAIL" #x297E)
129 ("DOWN FISH TAIL" #x297F)
130 ))
diff --git a/lisp/nxml/char-name/unicode/02980-029FF.el b/lisp/nxml/char-name/unicode/02980-029FF.el
new file mode 100644
index 00000000000..f1e368783a6
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/02980-029FF.el
@@ -0,0 +1,130 @@
1(nxml-define-char-name-set 'miscellaneous-mathematical-symbols-b
2 '(("TRIPLE VERTICAL BAR DELIMITER" #x2980)
3 ("Z NOTATION SPOT" #x2981)
4 ("Z NOTATION TYPE COLON" #x2982)
5 ("LEFT WHITE CURLY BRACKET" #x2983)
6 ("RIGHT WHITE CURLY BRACKET" #x2984)
7 ("LEFT WHITE PARENTHESIS" #x2985)
8 ("RIGHT WHITE PARENTHESIS" #x2986)
9 ("Z NOTATION LEFT IMAGE BRACKET" #x2987)
10 ("Z NOTATION RIGHT IMAGE BRACKET" #x2988)
11 ("Z NOTATION LEFT BINDING BRACKET" #x2989)
12 ("Z NOTATION RIGHT BINDING BRACKET" #x298A)
13 ("LEFT SQUARE BRACKET WITH UNDERBAR" #x298B)
14 ("RIGHT SQUARE BRACKET WITH UNDERBAR" #x298C)
15 ("LEFT SQUARE BRACKET WITH TICK IN TOP CORNER" #x298D)
16 ("RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER" #x298E)
17 ("LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER" #x298F)
18 ("RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER" #x2990)
19 ("LEFT ANGLE BRACKET WITH DOT" #x2991)
20 ("RIGHT ANGLE BRACKET WITH DOT" #x2992)
21 ("LEFT ARC LESS-THAN BRACKET" #x2993)
22 ("RIGHT ARC GREATER-THAN BRACKET" #x2994)
23 ("DOUBLE LEFT ARC GREATER-THAN BRACKET" #x2995)
24 ("DOUBLE RIGHT ARC LESS-THAN BRACKET" #x2996)
25 ("LEFT BLACK TORTOISE SHELL BRACKET" #x2997)
26 ("RIGHT BLACK TORTOISE SHELL BRACKET" #x2998)
27 ("DOTTED FENCE" #x2999)
28 ("VERTICAL ZIGZAG LINE" #x299A)
29 ("MEASURED ANGLE OPENING LEFT" #x299B)
30 ("RIGHT ANGLE VARIANT WITH SQUARE" #x299C)
31 ("MEASURED RIGHT ANGLE WITH DOT" #x299D)
32 ("ANGLE WITH S INSIDE" #x299E)
33 ("ACUTE ANGLE" #x299F)
34 ("SPHERICAL ANGLE OPENING LEFT" #x29A0)
35 ("SPHERICAL ANGLE OPENING UP" #x29A1)
36 ("TURNED ANGLE" #x29A2)
37 ("REVERSED ANGLE" #x29A3)
38 ("ANGLE WITH UNDERBAR" #x29A4)
39 ("REVERSED ANGLE WITH UNDERBAR" #x29A5)
40 ("OBLIQUE ANGLE OPENING UP" #x29A6)
41 ("OBLIQUE ANGLE OPENING DOWN" #x29A7)
42 ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT" #x29A8)
43 ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT" #x29A9)
44 ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT" #x29AA)
45 ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT" #x29AB)
46 ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP" #x29AC)
47 ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP" #x29AD)
48 ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN" #x29AE)
49 ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN" #x29AF)
50 ("REVERSED EMPTY SET" #x29B0)
51 ("EMPTY SET WITH OVERBAR" #x29B1)
52 ("EMPTY SET WITH SMALL CIRCLE ABOVE" #x29B2)
53 ("EMPTY SET WITH RIGHT ARROW ABOVE" #x29B3)
54 ("EMPTY SET WITH LEFT ARROW ABOVE" #x29B4)
55 ("CIRCLE WITH HORIZONTAL BAR" #x29B5)
56 ("CIRCLED VERTICAL BAR" #x29B6)
57 ("CIRCLED PARALLEL" #x29B7)
58 ("CIRCLED REVERSE SOLIDUS" #x29B8)
59 ("CIRCLED PERPENDICULAR" #x29B9)
60 ("CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR" #x29BA)
61 ("CIRCLE WITH SUPERIMPOSED X" #x29BB)
62 ("CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN" #x29BC)
63 ("UP ARROW THROUGH CIRCLE" #x29BD)
64 ("CIRCLED WHITE BULLET" #x29BE)
65 ("CIRCLED BULLET" #x29BF)
66 ("CIRCLED LESS-THAN" #x29C0)
67 ("CIRCLED GREATER-THAN" #x29C1)
68 ("CIRCLE WITH SMALL CIRCLE TO THE RIGHT" #x29C2)
69 ("CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT" #x29C3)
70 ("SQUARED RISING DIAGONAL SLASH" #x29C4)
71 ("SQUARED FALLING DIAGONAL SLASH" #x29C5)
72 ("SQUARED ASTERISK" #x29C6)
73 ("SQUARED SMALL CIRCLE" #x29C7)
74 ("SQUARED SQUARE" #x29C8)
75 ("TWO JOINED SQUARES" #x29C9)
76 ("TRIANGLE WITH DOT ABOVE" #x29CA)
77 ("TRIANGLE WITH UNDERBAR" #x29CB)
78 ("S IN TRIANGLE" #x29CC)
79 ("TRIANGLE WITH SERIFS AT BOTTOM" #x29CD)
80 ("RIGHT TRIANGLE ABOVE LEFT TRIANGLE" #x29CE)
81 ("LEFT TRIANGLE BESIDE VERTICAL BAR" #x29CF)
82 ("VERTICAL BAR BESIDE RIGHT TRIANGLE" #x29D0)
83 ("BOWTIE WITH LEFT HALF BLACK" #x29D1)
84 ("BOWTIE WITH RIGHT HALF BLACK" #x29D2)
85 ("BLACK BOWTIE" #x29D3)
86 ("TIMES WITH LEFT HALF BLACK" #x29D4)
87 ("TIMES WITH RIGHT HALF BLACK" #x29D5)
88 ("WHITE HOURGLASS" #x29D6)
89 ("BLACK HOURGLASS" #x29D7)
90 ("LEFT WIGGLY FENCE" #x29D8)
91 ("RIGHT WIGGLY FENCE" #x29D9)
92 ("LEFT DOUBLE WIGGLY FENCE" #x29DA)
93 ("RIGHT DOUBLE WIGGLY FENCE" #x29DB)
94 ("INCOMPLETE INFINITY" #x29DC)
95 ("TIE OVER INFINITY" #x29DD)
96 ("INFINITY NEGATED WITH VERTICAL BAR" #x29DE)
97 ("DOUBLE-ENDED MULTIMAP" #x29DF)
98 ("SQUARE WITH CONTOURED OUTLINE" #x29E0)
99 ("INCREASES AS" #x29E1)
100 ("SHUFFLE PRODUCT" #x29E2)
101 ("EQUALS SIGN AND SLANTED PARALLEL" #x29E3)
102 ("EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE" #x29E4)
103 ("IDENTICAL TO AND SLANTED PARALLEL" #x29E5)
104 ("GLEICH STARK" #x29E6)
105 ("THERMODYNAMIC" #x29E7)
106 ("DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK" #x29E8)
107 ("DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK" #x29E9)
108 ("BLACK DIAMOND WITH DOWN ARROW" #x29EA)
109 ("BLACK LOZENGE" #x29EB)
110 ("WHITE CIRCLE WITH DOWN ARROW" #x29EC)
111 ("BLACK CIRCLE WITH DOWN ARROW" #x29ED)
112 ("ERROR-BARRED WHITE SQUARE" #x29EE)
113 ("ERROR-BARRED BLACK SQUARE" #x29EF)
114 ("ERROR-BARRED WHITE DIAMOND" #x29F0)
115 ("ERROR-BARRED BLACK DIAMOND" #x29F1)
116 ("ERROR-BARRED WHITE CIRCLE" #x29F2)
117 ("ERROR-BARRED BLACK CIRCLE" #x29F3)
118 ("RULE-DELAYED" #x29F4)
119 ("REVERSE SOLIDUS OPERATOR" #x29F5)
120 ("SOLIDUS WITH OVERBAR" #x29F6)
121 ("REVERSE SOLIDUS WITH HORIZONTAL STROKE" #x29F7)
122 ("BIG SOLIDUS" #x29F8)
123 ("BIG REVERSE SOLIDUS" #x29F9)
124 ("DOUBLE PLUS" #x29FA)
125 ("TRIPLE PLUS" #x29FB)
126 ("LEFT-POINTING CURVED ANGLE BRACKET" #x29FC)
127 ("RIGHT-POINTING CURVED ANGLE BRACKET" #x29FD)
128 ("TINY" #x29FE)
129 ("MINY" #x29FF)
130 ))
diff --git a/lisp/nxml/char-name/unicode/02A00-02AFF.el b/lisp/nxml/char-name/unicode/02A00-02AFF.el
new file mode 100644
index 00000000000..e6f9ca432bb
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/02A00-02AFF.el
@@ -0,0 +1,258 @@
1(nxml-define-char-name-set 'supplemental-mathematical-operators
2 '(("N-ARY CIRCLED DOT OPERATOR" #x2A00)
3 ("N-ARY CIRCLED PLUS OPERATOR" #x2A01)
4 ("N-ARY CIRCLED TIMES OPERATOR" #x2A02)
5 ("N-ARY UNION OPERATOR WITH DOT" #x2A03)
6 ("N-ARY UNION OPERATOR WITH PLUS" #x2A04)
7 ("N-ARY SQUARE INTERSECTION OPERATOR" #x2A05)
8 ("N-ARY SQUARE UNION OPERATOR" #x2A06)
9 ("TWO LOGICAL AND OPERATOR" #x2A07)
10 ("TWO LOGICAL OR OPERATOR" #x2A08)
11 ("N-ARY TIMES OPERATOR" #x2A09)
12 ("MODULO TWO SUM" #x2A0A)
13 ("SUMMATION WITH INTEGRAL" #x2A0B)
14 ("QUADRUPLE INTEGRAL OPERATOR" #x2A0C)
15 ("FINITE PART INTEGRAL" #x2A0D)
16 ("INTEGRAL WITH DOUBLE STROKE" #x2A0E)
17 ("INTEGRAL AVERAGE WITH SLASH" #x2A0F)
18 ("CIRCULATION FUNCTION" #x2A10)
19 ("ANTICLOCKWISE INTEGRATION" #x2A11)
20 ("LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE" #x2A12)
21 ("LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE" #x2A13)
22 ("LINE INTEGRATION NOT INCLUDING THE POLE" #x2A14)
23 ("INTEGRAL AROUND A POINT OPERATOR" #x2A15)
24 ("QUATERNION INTEGRAL OPERATOR" #x2A16)
25 ("INTEGRAL WITH LEFTWARDS ARROW WITH HOOK" #x2A17)
26 ("INTEGRAL WITH TIMES SIGN" #x2A18)
27 ("INTEGRAL WITH INTERSECTION" #x2A19)
28 ("INTEGRAL WITH UNION" #x2A1A)
29 ("INTEGRAL WITH OVERBAR" #x2A1B)
30 ("INTEGRAL WITH UNDERBAR" #x2A1C)
31 ("JOIN" #x2A1D)
32 ("LARGE LEFT TRIANGLE OPERATOR" #x2A1E)
33 ("Z NOTATION SCHEMA COMPOSITION" #x2A1F)
34 ("Z NOTATION SCHEMA PIPING" #x2A20)
35 ("Z NOTATION SCHEMA PROJECTION" #x2A21)
36 ("PLUS SIGN WITH SMALL CIRCLE ABOVE" #x2A22)
37 ("PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE" #x2A23)
38 ("PLUS SIGN WITH TILDE ABOVE" #x2A24)
39 ("PLUS SIGN WITH DOT BELOW" #x2A25)
40 ("PLUS SIGN WITH TILDE BELOW" #x2A26)
41 ("PLUS SIGN WITH SUBSCRIPT TWO" #x2A27)
42 ("PLUS SIGN WITH BLACK TRIANGLE" #x2A28)
43 ("MINUS SIGN WITH COMMA ABOVE" #x2A29)
44 ("MINUS SIGN WITH DOT BELOW" #x2A2A)
45 ("MINUS SIGN WITH FALLING DOTS" #x2A2B)
46 ("MINUS SIGN WITH RISING DOTS" #x2A2C)
47 ("PLUS SIGN IN LEFT HALF CIRCLE" #x2A2D)
48 ("PLUS SIGN IN RIGHT HALF CIRCLE" #x2A2E)
49 ("VECTOR OR CROSS PRODUCT" #x2A2F)
50 ("MULTIPLICATION SIGN WITH DOT ABOVE" #x2A30)
51 ("MULTIPLICATION SIGN WITH UNDERBAR" #x2A31)
52 ("SEMIDIRECT PRODUCT WITH BOTTOM CLOSED" #x2A32)
53 ("SMASH PRODUCT" #x2A33)
54 ("MULTIPLICATION SIGN IN LEFT HALF CIRCLE" #x2A34)
55 ("MULTIPLICATION SIGN IN RIGHT HALF CIRCLE" #x2A35)
56 ("CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT" #x2A36)
57 ("MULTIPLICATION SIGN IN DOUBLE CIRCLE" #x2A37)
58 ("CIRCLED DIVISION SIGN" #x2A38)
59 ("PLUS SIGN IN TRIANGLE" #x2A39)
60 ("MINUS SIGN IN TRIANGLE" #x2A3A)
61 ("MULTIPLICATION SIGN IN TRIANGLE" #x2A3B)
62 ("INTERIOR PRODUCT" #x2A3C)
63 ("RIGHTHAND INTERIOR PRODUCT" #x2A3D)
64 ("Z NOTATION RELATIONAL COMPOSITION" #x2A3E)
65 ("AMALGAMATION OR COPRODUCT" #x2A3F)
66 ("INTERSECTION WITH DOT" #x2A40)
67 ("UNION WITH MINUS SIGN" #x2A41)
68 ("UNION WITH OVERBAR" #x2A42)
69 ("INTERSECTION WITH OVERBAR" #x2A43)
70 ("INTERSECTION WITH LOGICAL AND" #x2A44)
71 ("UNION WITH LOGICAL OR" #x2A45)
72 ("UNION ABOVE INTERSECTION" #x2A46)
73 ("INTERSECTION ABOVE UNION" #x2A47)
74 ("UNION ABOVE BAR ABOVE INTERSECTION" #x2A48)
75 ("INTERSECTION ABOVE BAR ABOVE UNION" #x2A49)
76 ("UNION BESIDE AND JOINED WITH UNION" #x2A4A)
77 ("INTERSECTION BESIDE AND JOINED WITH INTERSECTION" #x2A4B)
78 ("CLOSED UNION WITH SERIFS" #x2A4C)
79 ("CLOSED INTERSECTION WITH SERIFS" #x2A4D)
80 ("DOUBLE SQUARE INTERSECTION" #x2A4E)
81 ("DOUBLE SQUARE UNION" #x2A4F)
82 ("CLOSED UNION WITH SERIFS AND SMASH PRODUCT" #x2A50)
83 ("LOGICAL AND WITH DOT ABOVE" #x2A51)
84 ("LOGICAL OR WITH DOT ABOVE" #x2A52)
85 ("DOUBLE LOGICAL AND" #x2A53)
86 ("DOUBLE LOGICAL OR" #x2A54)
87 ("TWO INTERSECTING LOGICAL AND" #x2A55)
88 ("TWO INTERSECTING LOGICAL OR" #x2A56)
89 ("SLOPING LARGE OR" #x2A57)
90 ("SLOPING LARGE AND" #x2A58)
91 ("LOGICAL OR OVERLAPPING LOGICAL AND" #x2A59)
92 ("LOGICAL AND WITH MIDDLE STEM" #x2A5A)
93 ("LOGICAL OR WITH MIDDLE STEM" #x2A5B)
94 ("LOGICAL AND WITH HORIZONTAL DASH" #x2A5C)
95 ("LOGICAL OR WITH HORIZONTAL DASH" #x2A5D)
96 ("LOGICAL AND WITH DOUBLE OVERBAR" #x2A5E)
97 ("LOGICAL AND WITH UNDERBAR" #x2A5F)
98 ("LOGICAL AND WITH DOUBLE UNDERBAR" #x2A60)
99 ("SMALL VEE WITH UNDERBAR" #x2A61)
100 ("LOGICAL OR WITH DOUBLE OVERBAR" #x2A62)
101 ("LOGICAL OR WITH DOUBLE UNDERBAR" #x2A63)
102 ("Z NOTATION DOMAIN ANTIRESTRICTION" #x2A64)
103 ("Z NOTATION RANGE ANTIRESTRICTION" #x2A65)
104 ("EQUALS SIGN WITH DOT BELOW" #x2A66)
105 ("IDENTICAL WITH DOT ABOVE" #x2A67)
106 ("TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE" #x2A68)
107 ("TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE" #x2A69)
108 ("TILDE OPERATOR WITH DOT ABOVE" #x2A6A)
109 ("TILDE OPERATOR WITH RISING DOTS" #x2A6B)
110 ("SIMILAR MINUS SIMILAR" #x2A6C)
111 ("CONGRUENT WITH DOT ABOVE" #x2A6D)
112 ("EQUALS WITH ASTERISK" #x2A6E)
113 ("ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT" #x2A6F)
114 ("APPROXIMATELY EQUAL OR EQUAL TO" #x2A70)
115 ("EQUALS SIGN ABOVE PLUS SIGN" #x2A71)
116 ("PLUS SIGN ABOVE EQUALS SIGN" #x2A72)
117 ("EQUALS SIGN ABOVE TILDE OPERATOR" #x2A73)
118 ("DOUBLE COLON EQUAL" #x2A74)
119 ("TWO CONSECUTIVE EQUALS SIGNS" #x2A75)
120 ("THREE CONSECUTIVE EQUALS SIGNS" #x2A76)
121 ("EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW" #x2A77)
122 ("EQUIVALENT WITH FOUR DOTS ABOVE" #x2A78)
123 ("LESS-THAN WITH CIRCLE INSIDE" #x2A79)
124 ("GREATER-THAN WITH CIRCLE INSIDE" #x2A7A)
125 ("LESS-THAN WITH QUESTION MARK ABOVE" #x2A7B)
126 ("GREATER-THAN WITH QUESTION MARK ABOVE" #x2A7C)
127 ("LESS-THAN OR SLANTED EQUAL TO" #x2A7D)
128 ("GREATER-THAN OR SLANTED EQUAL TO" #x2A7E)
129 ("LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE" #x2A7F)
130 ("GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE" #x2A80)
131 ("LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE" #x2A81)
132 ("GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE" #x2A82)
133 ("LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT" #x2A83)
134 ("GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT" #x2A84)
135 ("LESS-THAN OR APPROXIMATE" #x2A85)
136 ("GREATER-THAN OR APPROXIMATE" #x2A86)
137 ("LESS-THAN AND SINGLE-LINE NOT EQUAL TO" #x2A87)
138 ("GREATER-THAN AND SINGLE-LINE NOT EQUAL TO" #x2A88)
139 ("LESS-THAN AND NOT APPROXIMATE" #x2A89)
140 ("GREATER-THAN AND NOT APPROXIMATE" #x2A8A)
141 ("LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN" #x2A8B)
142 ("GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN" #x2A8C)
143 ("LESS-THAN ABOVE SIMILAR OR EQUAL" #x2A8D)
144 ("GREATER-THAN ABOVE SIMILAR OR EQUAL" #x2A8E)
145 ("LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN" #x2A8F)
146 ("GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN" #x2A90)
147 ("LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL" #x2A91)
148 ("GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL" #x2A92)
149 ("LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL" #x2A93)
150 ("GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL" #x2A94)
151 ("SLANTED EQUAL TO OR LESS-THAN" #x2A95)
152 ("SLANTED EQUAL TO OR GREATER-THAN" #x2A96)
153 ("SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE" #x2A97)
154 ("SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE" #x2A98)
155 ("DOUBLE-LINE EQUAL TO OR LESS-THAN" #x2A99)
156 ("DOUBLE-LINE EQUAL TO OR GREATER-THAN" #x2A9A)
157 ("DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN" #x2A9B)
158 ("DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN" #x2A9C)
159 ("SIMILAR OR LESS-THAN" #x2A9D)
160 ("SIMILAR OR GREATER-THAN" #x2A9E)
161 ("SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN" #x2A9F)
162 ("SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN" #x2AA0)
163 ("DOUBLE NESTED LESS-THAN" #x2AA1)
164 ("DOUBLE NESTED GREATER-THAN" #x2AA2)
165 ("DOUBLE NESTED LESS-THAN WITH UNDERBAR" #x2AA3)
166 ("GREATER-THAN OVERLAPPING LESS-THAN" #x2AA4)
167 ("GREATER-THAN BESIDE LESS-THAN" #x2AA5)
168 ("LESS-THAN CLOSED BY CURVE" #x2AA6)
169 ("GREATER-THAN CLOSED BY CURVE" #x2AA7)
170 ("LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL" #x2AA8)
171 ("GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL" #x2AA9)
172 ("SMALLER THAN" #x2AAA)
173 ("LARGER THAN" #x2AAB)
174 ("SMALLER THAN OR EQUAL TO" #x2AAC)
175 ("LARGER THAN OR EQUAL TO" #x2AAD)
176 ("EQUALS SIGN WITH BUMPY ABOVE" #x2AAE)
177 ("PRECEDES ABOVE SINGLE-LINE EQUALS SIGN" #x2AAF)
178 ("SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN" #x2AB0)
179 ("PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO" #x2AB1)
180 ("SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO" #x2AB2)
181 ("PRECEDES ABOVE EQUALS SIGN" #x2AB3)
182 ("SUCCEEDS ABOVE EQUALS SIGN" #x2AB4)
183 ("PRECEDES ABOVE NOT EQUAL TO" #x2AB5)
184 ("SUCCEEDS ABOVE NOT EQUAL TO" #x2AB6)
185 ("PRECEDES ABOVE ALMOST EQUAL TO" #x2AB7)
186 ("SUCCEEDS ABOVE ALMOST EQUAL TO" #x2AB8)
187 ("PRECEDES ABOVE NOT ALMOST EQUAL TO" #x2AB9)
188 ("SUCCEEDS ABOVE NOT ALMOST EQUAL TO" #x2ABA)
189 ("DOUBLE PRECEDES" #x2ABB)
190 ("DOUBLE SUCCEEDS" #x2ABC)
191 ("SUBSET WITH DOT" #x2ABD)
192 ("SUPERSET WITH DOT" #x2ABE)
193 ("SUBSET WITH PLUS SIGN BELOW" #x2ABF)
194 ("SUPERSET WITH PLUS SIGN BELOW" #x2AC0)
195 ("SUBSET WITH MULTIPLICATION SIGN BELOW" #x2AC1)
196 ("SUPERSET WITH MULTIPLICATION SIGN BELOW" #x2AC2)
197 ("SUBSET OF OR EQUAL TO WITH DOT ABOVE" #x2AC3)
198 ("SUPERSET OF OR EQUAL TO WITH DOT ABOVE" #x2AC4)
199 ("SUBSET OF ABOVE EQUALS SIGN" #x2AC5)
200 ("SUPERSET OF ABOVE EQUALS SIGN" #x2AC6)
201 ("SUBSET OF ABOVE TILDE OPERATOR" #x2AC7)
202 ("SUPERSET OF ABOVE TILDE OPERATOR" #x2AC8)
203 ("SUBSET OF ABOVE ALMOST EQUAL TO" #x2AC9)
204 ("SUPERSET OF ABOVE ALMOST EQUAL TO" #x2ACA)
205 ("SUBSET OF ABOVE NOT EQUAL TO" #x2ACB)
206 ("SUPERSET OF ABOVE NOT EQUAL TO" #x2ACC)
207 ("SQUARE LEFT OPEN BOX OPERATOR" #x2ACD)
208 ("SQUARE RIGHT OPEN BOX OPERATOR" #x2ACE)
209 ("CLOSED SUBSET" #x2ACF)
210 ("CLOSED SUPERSET" #x2AD0)
211 ("CLOSED SUBSET OR EQUAL TO" #x2AD1)
212 ("CLOSED SUPERSET OR EQUAL TO" #x2AD2)
213 ("SUBSET ABOVE SUPERSET" #x2AD3)
214 ("SUPERSET ABOVE SUBSET" #x2AD4)
215 ("SUBSET ABOVE SUBSET" #x2AD5)
216 ("SUPERSET ABOVE SUPERSET" #x2AD6)
217 ("SUPERSET BESIDE SUBSET" #x2AD7)
218 ("SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET" #x2AD8)
219 ("ELEMENT OF OPENING DOWNWARDS" #x2AD9)
220 ("PITCHFORK WITH TEE TOP" #x2ADA)
221 ("TRANSVERSAL INTERSECTION" #x2ADB)
222 ("FORKING" #x2ADC)
223 ("NONFORKING" #x2ADD)
224 ("SHORT LEFT TACK" #x2ADE)
225 ("SHORT DOWN TACK" #x2ADF)
226 ("SHORT UP TACK" #x2AE0)
227 ("PERPENDICULAR WITH S" #x2AE1)
228 ("VERTICAL BAR TRIPLE RIGHT TURNSTILE" #x2AE2)
229 ("DOUBLE VERTICAL BAR LEFT TURNSTILE" #x2AE3)
230 ("VERTICAL BAR DOUBLE LEFT TURNSTILE" #x2AE4)
231 ("DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE" #x2AE5)
232 ("LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL" #x2AE6)
233 ("SHORT DOWN TACK WITH OVERBAR" #x2AE7)
234 ("SHORT UP TACK WITH UNDERBAR" #x2AE8)
235 ("SHORT UP TACK ABOVE SHORT DOWN TACK" #x2AE9)
236 ("DOUBLE DOWN TACK" #x2AEA)
237 ("DOUBLE UP TACK" #x2AEB)
238 ("DOUBLE STROKE NOT SIGN" #x2AEC)
239 ("REVERSED DOUBLE STROKE NOT SIGN" #x2AED)
240 ("DOES NOT DIVIDE WITH REVERSED NEGATION SLASH" #x2AEE)
241 ("VERTICAL LINE WITH CIRCLE ABOVE" #x2AEF)
242 ("VERTICAL LINE WITH CIRCLE BELOW" #x2AF0)
243 ("DOWN TACK WITH CIRCLE BELOW" #x2AF1)
244 ("PARALLEL WITH HORIZONTAL STROKE" #x2AF2)
245 ("PARALLEL WITH TILDE OPERATOR" #x2AF3)
246 ("TRIPLE VERTICAL BAR BINARY RELATION" #x2AF4)
247 ("TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE" #x2AF5)
248 ("TRIPLE COLON OPERATOR" #x2AF6)
249 ("TRIPLE NESTED LESS-THAN" #x2AF7)
250 ("TRIPLE NESTED GREATER-THAN" #x2AF8)
251 ("DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO" #x2AF9)
252 ("DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO" #x2AFA)
253 ("TRIPLE SOLIDUS BINARY RELATION" #x2AFB)
254 ("LARGE TRIPLE VERTICAL BAR OPERATOR" #x2AFC)
255 ("DOUBLE SOLIDUS OPERATOR" #x2AFD)
256 ("WHITE VERTICAL BAR" #x2AFE)
257 ("N-ARY WHITE VERTICAL BAR" #x2AFF)
258 ))
diff --git a/lisp/nxml/char-name/unicode/02E80-02EFF.el b/lisp/nxml/char-name/unicode/02E80-02EFF.el
new file mode 100644
index 00000000000..3cb901803bc
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/02E80-02EFF.el
@@ -0,0 +1,117 @@
1(nxml-define-char-name-set 'cjk-radicals-supplement
2 '(("CJK RADICAL REPEAT" #x2E80)
3 ("CJK RADICAL CLIFF" #x2E81)
4 ("CJK RADICAL SECOND ONE" #x2E82)
5 ("CJK RADICAL SECOND TWO" #x2E83)
6 ("CJK RADICAL SECOND THREE" #x2E84)
7 ("CJK RADICAL PERSON" #x2E85)
8 ("CJK RADICAL BOX" #x2E86)
9 ("CJK RADICAL TABLE" #x2E87)
10 ("CJK RADICAL KNIFE ONE" #x2E88)
11 ("CJK RADICAL KNIFE TWO" #x2E89)
12 ("CJK RADICAL DIVINATION" #x2E8A)
13 ("CJK RADICAL SEAL" #x2E8B)
14 ("CJK RADICAL SMALL ONE" #x2E8C)
15 ("CJK RADICAL SMALL TWO" #x2E8D)
16 ("CJK RADICAL LAME ONE" #x2E8E)
17 ("CJK RADICAL LAME TWO" #x2E8F)
18 ("CJK RADICAL LAME THREE" #x2E90)
19 ("CJK RADICAL LAME FOUR" #x2E91)
20 ("CJK RADICAL SNAKE" #x2E92)
21 ("CJK RADICAL THREAD" #x2E93)
22 ("CJK RADICAL SNOUT ONE" #x2E94)
23 ("CJK RADICAL SNOUT TWO" #x2E95)
24 ("CJK RADICAL HEART ONE" #x2E96)
25 ("CJK RADICAL HEART TWO" #x2E97)
26 ("CJK RADICAL HAND" #x2E98)
27 ("CJK RADICAL RAP" #x2E99)
28 ("CJK RADICAL CHOKE" #x2E9B)
29 ("CJK RADICAL SUN" #x2E9C)
30 ("CJK RADICAL MOON" #x2E9D)
31 ("CJK RADICAL DEATH" #x2E9E)
32 ("CJK RADICAL MOTHER" #x2E9F)
33 ("CJK RADICAL CIVILIAN" #x2EA0)
34 ("CJK RADICAL WATER ONE" #x2EA1)
35 ("CJK RADICAL WATER TWO" #x2EA2)
36 ("CJK RADICAL FIRE" #x2EA3)
37 ("CJK RADICAL PAW ONE" #x2EA4)
38 ("CJK RADICAL PAW TWO" #x2EA5)
39 ("CJK RADICAL SIMPLIFIED HALF TREE TRUNK" #x2EA6)
40 ("CJK RADICAL COW" #x2EA7)
41 ("CJK RADICAL DOG" #x2EA8)
42 ("CJK RADICAL JADE" #x2EA9)
43 ("CJK RADICAL BOLT OF CLOTH" #x2EAA)
44 ("CJK RADICAL EYE" #x2EAB)
45 ("CJK RADICAL SPIRIT ONE" #x2EAC)
46 ("CJK RADICAL SPIRIT TWO" #x2EAD)
47 ("CJK RADICAL BAMBOO" #x2EAE)
48 ("CJK RADICAL SILK" #x2EAF)
49 ("CJK RADICAL C-SIMPLIFIED SILK" #x2EB0)
50 ("CJK RADICAL NET ONE" #x2EB1)
51 ("CJK RADICAL NET TWO" #x2EB2)
52 ("CJK RADICAL NET THREE" #x2EB3)
53 ("CJK RADICAL NET FOUR" #x2EB4)
54 ("CJK RADICAL MESH" #x2EB5)
55 ("CJK RADICAL SHEEP" #x2EB6)
56 ("CJK RADICAL RAM" #x2EB7)
57 ("CJK RADICAL EWE" #x2EB8)
58 ("CJK RADICAL OLD" #x2EB9)
59 ("CJK RADICAL BRUSH ONE" #x2EBA)
60 ("CJK RADICAL BRUSH TWO" #x2EBB)
61 ("CJK RADICAL MEAT" #x2EBC)
62 ("CJK RADICAL MORTAR" #x2EBD)
63 ("CJK RADICAL GRASS ONE" #x2EBE)
64 ("CJK RADICAL GRASS TWO" #x2EBF)
65 ("CJK RADICAL GRASS THREE" #x2EC0)
66 ("CJK RADICAL TIGER" #x2EC1)
67 ("CJK RADICAL CLOTHES" #x2EC2)
68 ("CJK RADICAL WEST ONE" #x2EC3)
69 ("CJK RADICAL WEST TWO" #x2EC4)
70 ("CJK RADICAL C-SIMPLIFIED SEE" #x2EC5)
71 ("CJK RADICAL SIMPLIFIED HORN" #x2EC6)
72 ("CJK RADICAL HORN" #x2EC7)
73 ("CJK RADICAL C-SIMPLIFIED SPEECH" #x2EC8)
74 ("CJK RADICAL C-SIMPLIFIED SHELL" #x2EC9)
75 ("CJK RADICAL FOOT" #x2ECA)
76 ("CJK RADICAL C-SIMPLIFIED CART" #x2ECB)
77 ("CJK RADICAL SIMPLIFIED WALK" #x2ECC)
78 ("CJK RADICAL WALK ONE" #x2ECD)
79 ("CJK RADICAL WALK TWO" #x2ECE)
80 ("CJK RADICAL CITY" #x2ECF)
81 ("CJK RADICAL C-SIMPLIFIED GOLD" #x2ED0)
82 ("CJK RADICAL LONG ONE" #x2ED1)
83 ("CJK RADICAL LONG TWO" #x2ED2)
84 ("CJK RADICAL C-SIMPLIFIED LONG" #x2ED3)
85 ("CJK RADICAL C-SIMPLIFIED GATE" #x2ED4)
86 ("CJK RADICAL MOUND ONE" #x2ED5)
87 ("CJK RADICAL MOUND TWO" #x2ED6)
88 ("CJK RADICAL RAIN" #x2ED7)
89 ("CJK RADICAL BLUE" #x2ED8)
90 ("CJK RADICAL C-SIMPLIFIED TANNED LEATHER" #x2ED9)
91 ("CJK RADICAL C-SIMPLIFIED LEAF" #x2EDA)
92 ("CJK RADICAL C-SIMPLIFIED WIND" #x2EDB)
93 ("CJK RADICAL C-SIMPLIFIED FLY" #x2EDC)
94 ("CJK RADICAL EAT ONE" #x2EDD)
95 ("CJK RADICAL EAT TWO" #x2EDE)
96 ("CJK RADICAL EAT THREE" #x2EDF)
97 ("CJK RADICAL C-SIMPLIFIED EAT" #x2EE0)
98 ("CJK RADICAL HEAD" #x2EE1)
99 ("CJK RADICAL C-SIMPLIFIED HORSE" #x2EE2)
100 ("CJK RADICAL BONE" #x2EE3)
101 ("CJK RADICAL GHOST" #x2EE4)
102 ("CJK RADICAL C-SIMPLIFIED FISH" #x2EE5)
103 ("CJK RADICAL C-SIMPLIFIED BIRD" #x2EE6)
104 ("CJK RADICAL C-SIMPLIFIED SALT" #x2EE7)
105 ("CJK RADICAL SIMPLIFIED WHEAT" #x2EE8)
106 ("CJK RADICAL SIMPLIFIED YELLOW" #x2EE9)
107 ("CJK RADICAL C-SIMPLIFIED FROG" #x2EEA)
108 ("CJK RADICAL J-SIMPLIFIED EVEN" #x2EEB)
109 ("CJK RADICAL C-SIMPLIFIED EVEN" #x2EEC)
110 ("CJK RADICAL J-SIMPLIFIED TOOTH" #x2EED)
111 ("CJK RADICAL C-SIMPLIFIED TOOTH" #x2EEE)
112 ("CJK RADICAL J-SIMPLIFIED DRAGON" #x2EEF)
113 ("CJK RADICAL C-SIMPLIFIED DRAGON" #x2EF0)
114 ("CJK RADICAL TURTLE" #x2EF1)
115 ("CJK RADICAL J-SIMPLIFIED TURTLE" #x2EF2)
116 ("CJK RADICAL C-SIMPLIFIED TURTLE" #x2EF3)
117 ))
diff --git a/lisp/nxml/char-name/unicode/02F00-02FDF.el b/lisp/nxml/char-name/unicode/02F00-02FDF.el
new file mode 100644
index 00000000000..89c202709f6
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/02F00-02FDF.el
@@ -0,0 +1,216 @@
1(nxml-define-char-name-set 'kangxi-radicals
2 '(("KANGXI RADICAL ONE" #x2F00)
3 ("KANGXI RADICAL LINE" #x2F01)
4 ("KANGXI RADICAL DOT" #x2F02)
5 ("KANGXI RADICAL SLASH" #x2F03)
6 ("KANGXI RADICAL SECOND" #x2F04)
7 ("KANGXI RADICAL HOOK" #x2F05)
8 ("KANGXI RADICAL TWO" #x2F06)
9 ("KANGXI RADICAL LID" #x2F07)
10 ("KANGXI RADICAL MAN" #x2F08)
11 ("KANGXI RADICAL LEGS" #x2F09)
12 ("KANGXI RADICAL ENTER" #x2F0A)
13 ("KANGXI RADICAL EIGHT" #x2F0B)
14 ("KANGXI RADICAL DOWN BOX" #x2F0C)
15 ("KANGXI RADICAL COVER" #x2F0D)
16 ("KANGXI RADICAL ICE" #x2F0E)
17 ("KANGXI RADICAL TABLE" #x2F0F)
18 ("KANGXI RADICAL OPEN BOX" #x2F10)
19 ("KANGXI RADICAL KNIFE" #x2F11)
20 ("KANGXI RADICAL POWER" #x2F12)
21 ("KANGXI RADICAL WRAP" #x2F13)
22 ("KANGXI RADICAL SPOON" #x2F14)
23 ("KANGXI RADICAL RIGHT OPEN BOX" #x2F15)
24 ("KANGXI RADICAL HIDING ENCLOSURE" #x2F16)
25 ("KANGXI RADICAL TEN" #x2F17)
26 ("KANGXI RADICAL DIVINATION" #x2F18)
27 ("KANGXI RADICAL SEAL" #x2F19)
28 ("KANGXI RADICAL CLIFF" #x2F1A)
29 ("KANGXI RADICAL PRIVATE" #x2F1B)
30 ("KANGXI RADICAL AGAIN" #x2F1C)
31 ("KANGXI RADICAL MOUTH" #x2F1D)
32 ("KANGXI RADICAL ENCLOSURE" #x2F1E)
33 ("KANGXI RADICAL EARTH" #x2F1F)
34 ("KANGXI RADICAL SCHOLAR" #x2F20)
35 ("KANGXI RADICAL GO" #x2F21)
36 ("KANGXI RADICAL GO SLOWLY" #x2F22)
37 ("KANGXI RADICAL EVENING" #x2F23)
38 ("KANGXI RADICAL BIG" #x2F24)
39 ("KANGXI RADICAL WOMAN" #x2F25)
40 ("KANGXI RADICAL CHILD" #x2F26)
41 ("KANGXI RADICAL ROOF" #x2F27)
42 ("KANGXI RADICAL INCH" #x2F28)
43 ("KANGXI RADICAL SMALL" #x2F29)
44 ("KANGXI RADICAL LAME" #x2F2A)
45 ("KANGXI RADICAL CORPSE" #x2F2B)
46 ("KANGXI RADICAL SPROUT" #x2F2C)
47 ("KANGXI RADICAL MOUNTAIN" #x2F2D)
48 ("KANGXI RADICAL RIVER" #x2F2E)
49 ("KANGXI RADICAL WORK" #x2F2F)
50 ("KANGXI RADICAL ONESELF" #x2F30)
51 ("KANGXI RADICAL TURBAN" #x2F31)
52 ("KANGXI RADICAL DRY" #x2F32)
53 ("KANGXI RADICAL SHORT THREAD" #x2F33)
54 ("KANGXI RADICAL DOTTED CLIFF" #x2F34)
55 ("KANGXI RADICAL LONG STRIDE" #x2F35)
56 ("KANGXI RADICAL TWO HANDS" #x2F36)
57 ("KANGXI RADICAL SHOOT" #x2F37)
58 ("KANGXI RADICAL BOW" #x2F38)
59 ("KANGXI RADICAL SNOUT" #x2F39)
60 ("KANGXI RADICAL BRISTLE" #x2F3A)
61 ("KANGXI RADICAL STEP" #x2F3B)
62 ("KANGXI RADICAL HEART" #x2F3C)
63 ("KANGXI RADICAL HALBERD" #x2F3D)
64 ("KANGXI RADICAL DOOR" #x2F3E)
65 ("KANGXI RADICAL HAND" #x2F3F)
66 ("KANGXI RADICAL BRANCH" #x2F40)
67 ("KANGXI RADICAL RAP" #x2F41)
68 ("KANGXI RADICAL SCRIPT" #x2F42)
69 ("KANGXI RADICAL DIPPER" #x2F43)
70 ("KANGXI RADICAL AXE" #x2F44)
71 ("KANGXI RADICAL SQUARE" #x2F45)
72 ("KANGXI RADICAL NOT" #x2F46)
73 ("KANGXI RADICAL SUN" #x2F47)
74 ("KANGXI RADICAL SAY" #x2F48)
75 ("KANGXI RADICAL MOON" #x2F49)
76 ("KANGXI RADICAL TREE" #x2F4A)
77 ("KANGXI RADICAL LACK" #x2F4B)
78 ("KANGXI RADICAL STOP" #x2F4C)
79 ("KANGXI RADICAL DEATH" #x2F4D)
80 ("KANGXI RADICAL WEAPON" #x2F4E)
81 ("KANGXI RADICAL DO NOT" #x2F4F)
82 ("KANGXI RADICAL COMPARE" #x2F50)
83 ("KANGXI RADICAL FUR" #x2F51)
84 ("KANGXI RADICAL CLAN" #x2F52)
85 ("KANGXI RADICAL STEAM" #x2F53)
86 ("KANGXI RADICAL WATER" #x2F54)
87 ("KANGXI RADICAL FIRE" #x2F55)
88 ("KANGXI RADICAL CLAW" #x2F56)
89 ("KANGXI RADICAL FATHER" #x2F57)
90 ("KANGXI RADICAL DOUBLE X" #x2F58)
91 ("KANGXI RADICAL HALF TREE TRUNK" #x2F59)
92 ("KANGXI RADICAL SLICE" #x2F5A)
93 ("KANGXI RADICAL FANG" #x2F5B)
94 ("KANGXI RADICAL COW" #x2F5C)
95 ("KANGXI RADICAL DOG" #x2F5D)
96 ("KANGXI RADICAL PROFOUND" #x2F5E)
97 ("KANGXI RADICAL JADE" #x2F5F)
98 ("KANGXI RADICAL MELON" #x2F60)
99 ("KANGXI RADICAL TILE" #x2F61)
100 ("KANGXI RADICAL SWEET" #x2F62)
101 ("KANGXI RADICAL LIFE" #x2F63)
102 ("KANGXI RADICAL USE" #x2F64)
103 ("KANGXI RADICAL FIELD" #x2F65)
104 ("KANGXI RADICAL BOLT OF CLOTH" #x2F66)
105 ("KANGXI RADICAL SICKNESS" #x2F67)
106 ("KANGXI RADICAL DOTTED TENT" #x2F68)
107 ("KANGXI RADICAL WHITE" #x2F69)
108 ("KANGXI RADICAL SKIN" #x2F6A)
109 ("KANGXI RADICAL DISH" #x2F6B)
110 ("KANGXI RADICAL EYE" #x2F6C)
111 ("KANGXI RADICAL SPEAR" #x2F6D)
112 ("KANGXI RADICAL ARROW" #x2F6E)
113 ("KANGXI RADICAL STONE" #x2F6F)
114 ("KANGXI RADICAL SPIRIT" #x2F70)
115 ("KANGXI RADICAL TRACK" #x2F71)
116 ("KANGXI RADICAL GRAIN" #x2F72)
117 ("KANGXI RADICAL CAVE" #x2F73)
118 ("KANGXI RADICAL STAND" #x2F74)
119 ("KANGXI RADICAL BAMBOO" #x2F75)
120 ("KANGXI RADICAL RICE" #x2F76)
121 ("KANGXI RADICAL SILK" #x2F77)
122 ("KANGXI RADICAL JAR" #x2F78)
123 ("KANGXI RADICAL NET" #x2F79)
124 ("KANGXI RADICAL SHEEP" #x2F7A)
125 ("KANGXI RADICAL FEATHER" #x2F7B)
126 ("KANGXI RADICAL OLD" #x2F7C)
127 ("KANGXI RADICAL AND" #x2F7D)
128 ("KANGXI RADICAL PLOW" #x2F7E)
129 ("KANGXI RADICAL EAR" #x2F7F)
130 ("KANGXI RADICAL BRUSH" #x2F80)
131 ("KANGXI RADICAL MEAT" #x2F81)
132 ("KANGXI RADICAL MINISTER" #x2F82)
133 ("KANGXI RADICAL SELF" #x2F83)
134 ("KANGXI RADICAL ARRIVE" #x2F84)
135 ("KANGXI RADICAL MORTAR" #x2F85)
136 ("KANGXI RADICAL TONGUE" #x2F86)
137 ("KANGXI RADICAL OPPOSE" #x2F87)
138 ("KANGXI RADICAL BOAT" #x2F88)
139 ("KANGXI RADICAL STOPPING" #x2F89)
140 ("KANGXI RADICAL COLOR" #x2F8A)
141 ("KANGXI RADICAL GRASS" #x2F8B)
142 ("KANGXI RADICAL TIGER" #x2F8C)
143 ("KANGXI RADICAL INSECT" #x2F8D)
144 ("KANGXI RADICAL BLOOD" #x2F8E)
145 ("KANGXI RADICAL WALK ENCLOSURE" #x2F8F)
146 ("KANGXI RADICAL CLOTHES" #x2F90)
147 ("KANGXI RADICAL WEST" #x2F91)
148 ("KANGXI RADICAL SEE" #x2F92)
149 ("KANGXI RADICAL HORN" #x2F93)
150 ("KANGXI RADICAL SPEECH" #x2F94)
151 ("KANGXI RADICAL VALLEY" #x2F95)
152 ("KANGXI RADICAL BEAN" #x2F96)
153 ("KANGXI RADICAL PIG" #x2F97)
154 ("KANGXI RADICAL BADGER" #x2F98)
155 ("KANGXI RADICAL SHELL" #x2F99)
156 ("KANGXI RADICAL RED" #x2F9A)
157 ("KANGXI RADICAL RUN" #x2F9B)
158 ("KANGXI RADICAL FOOT" #x2F9C)
159 ("KANGXI RADICAL BODY" #x2F9D)
160 ("KANGXI RADICAL CART" #x2F9E)
161 ("KANGXI RADICAL BITTER" #x2F9F)
162 ("KANGXI RADICAL MORNING" #x2FA0)
163 ("KANGXI RADICAL WALK" #x2FA1)
164 ("KANGXI RADICAL CITY" #x2FA2)
165 ("KANGXI RADICAL WINE" #x2FA3)
166 ("KANGXI RADICAL DISTINGUISH" #x2FA4)
167 ("KANGXI RADICAL VILLAGE" #x2FA5)
168 ("KANGXI RADICAL GOLD" #x2FA6)
169 ("KANGXI RADICAL LONG" #x2FA7)
170 ("KANGXI RADICAL GATE" #x2FA8)
171 ("KANGXI RADICAL MOUND" #x2FA9)
172 ("KANGXI RADICAL SLAVE" #x2FAA)
173 ("KANGXI RADICAL SHORT TAILED BIRD" #x2FAB)
174 ("KANGXI RADICAL RAIN" #x2FAC)
175 ("KANGXI RADICAL BLUE" #x2FAD)
176 ("KANGXI RADICAL WRONG" #x2FAE)
177 ("KANGXI RADICAL FACE" #x2FAF)
178 ("KANGXI RADICAL LEATHER" #x2FB0)
179 ("KANGXI RADICAL TANNED LEATHER" #x2FB1)
180 ("KANGXI RADICAL LEEK" #x2FB2)
181 ("KANGXI RADICAL SOUND" #x2FB3)
182 ("KANGXI RADICAL LEAF" #x2FB4)
183 ("KANGXI RADICAL WIND" #x2FB5)
184 ("KANGXI RADICAL FLY" #x2FB6)
185 ("KANGXI RADICAL EAT" #x2FB7)
186 ("KANGXI RADICAL HEAD" #x2FB8)
187 ("KANGXI RADICAL FRAGRANT" #x2FB9)
188 ("KANGXI RADICAL HORSE" #x2FBA)
189 ("KANGXI RADICAL BONE" #x2FBB)
190 ("KANGXI RADICAL TALL" #x2FBC)
191 ("KANGXI RADICAL HAIR" #x2FBD)
192 ("KANGXI RADICAL FIGHT" #x2FBE)
193 ("KANGXI RADICAL SACRIFICIAL WINE" #x2FBF)
194 ("KANGXI RADICAL CAULDRON" #x2FC0)
195 ("KANGXI RADICAL GHOST" #x2FC1)
196 ("KANGXI RADICAL FISH" #x2FC2)
197 ("KANGXI RADICAL BIRD" #x2FC3)
198 ("KANGXI RADICAL SALT" #x2FC4)
199 ("KANGXI RADICAL DEER" #x2FC5)
200 ("KANGXI RADICAL WHEAT" #x2FC6)
201 ("KANGXI RADICAL HEMP" #x2FC7)
202 ("KANGXI RADICAL YELLOW" #x2FC8)
203 ("KANGXI RADICAL MILLET" #x2FC9)
204 ("KANGXI RADICAL BLACK" #x2FCA)
205 ("KANGXI RADICAL EMBROIDERY" #x2FCB)
206 ("KANGXI RADICAL FROG" #x2FCC)
207 ("KANGXI RADICAL TRIPOD" #x2FCD)
208 ("KANGXI RADICAL DRUM" #x2FCE)
209 ("KANGXI RADICAL RAT" #x2FCF)
210 ("KANGXI RADICAL NOSE" #x2FD0)
211 ("KANGXI RADICAL EVEN" #x2FD1)
212 ("KANGXI RADICAL TOOTH" #x2FD2)
213 ("KANGXI RADICAL DRAGON" #x2FD3)
214 ("KANGXI RADICAL TURTLE" #x2FD4)
215 ("KANGXI RADICAL FLUTE" #x2FD5)
216 ))
diff --git a/lisp/nxml/char-name/unicode/02FF0-02FFF.el b/lisp/nxml/char-name/unicode/02FF0-02FFF.el
new file mode 100644
index 00000000000..9232af9cab1
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/02FF0-02FFF.el
@@ -0,0 +1,14 @@
1(nxml-define-char-name-set 'ideographic-description-characters
2 '(("IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT" #x2FF0)
3 ("IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW" #x2FF1)
4 ("IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT" #x2FF2)
5 ("IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW" #x2FF3)
6 ("IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND" #x2FF4)
7 ("IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE" #x2FF5)
8 ("IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW" #x2FF6)
9 ("IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT" #x2FF7)
10 ("IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT" #x2FF8)
11 ("IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT" #x2FF9)
12 ("IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT" #x2FFA)
13 ("IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID" #x2FFB)
14 ))
diff --git a/lisp/nxml/char-name/unicode/03000-0303F.el b/lisp/nxml/char-name/unicode/03000-0303F.el
new file mode 100644
index 00000000000..0b481adb4c4
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/03000-0303F.el
@@ -0,0 +1,66 @@
1(nxml-define-char-name-set 'cjk-symbols-and-punctuation
2 '(("IDEOGRAPHIC SPACE" #x3000)
3 ("IDEOGRAPHIC COMMA" #x3001)
4 ("IDEOGRAPHIC FULL STOP" #x3002)
5 ("DITTO MARK" #x3003)
6 ("JAPANESE INDUSTRIAL STANDARD SYMBOL" #x3004)
7 ("IDEOGRAPHIC ITERATION MARK" #x3005)
8 ("IDEOGRAPHIC CLOSING MARK" #x3006)
9 ("IDEOGRAPHIC NUMBER ZERO" #x3007)
10 ("LEFT ANGLE BRACKET" #x3008)
11 ("RIGHT ANGLE BRACKET" #x3009)
12 ("LEFT DOUBLE ANGLE BRACKET" #x300A)
13 ("RIGHT DOUBLE ANGLE BRACKET" #x300B)
14 ("LEFT CORNER BRACKET" #x300C)
15 ("RIGHT CORNER BRACKET" #x300D)
16 ("LEFT WHITE CORNER BRACKET" #x300E)
17 ("RIGHT WHITE CORNER BRACKET" #x300F)
18 ("LEFT BLACK LENTICULAR BRACKET" #x3010)
19 ("RIGHT BLACK LENTICULAR BRACKET" #x3011)
20 ("POSTAL MARK" #x3012)
21 ("GETA MARK" #x3013)
22 ("LEFT TORTOISE SHELL BRACKET" #x3014)
23 ("RIGHT TORTOISE SHELL BRACKET" #x3015)
24 ("LEFT WHITE LENTICULAR BRACKET" #x3016)
25 ("RIGHT WHITE LENTICULAR BRACKET" #x3017)
26 ("LEFT WHITE TORTOISE SHELL BRACKET" #x3018)
27 ("RIGHT WHITE TORTOISE SHELL BRACKET" #x3019)
28 ("LEFT WHITE SQUARE BRACKET" #x301A)
29 ("RIGHT WHITE SQUARE BRACKET" #x301B)
30 ("WAVE DASH" #x301C)
31 ("REVERSED DOUBLE PRIME QUOTATION MARK" #x301D)
32 ("DOUBLE PRIME QUOTATION MARK" #x301E)
33 ("LOW DOUBLE PRIME QUOTATION MARK" #x301F)
34 ("POSTAL MARK FACE" #x3020)
35 ("HANGZHOU NUMERAL ONE" #x3021)
36 ("HANGZHOU NUMERAL TWO" #x3022)
37 ("HANGZHOU NUMERAL THREE" #x3023)
38 ("HANGZHOU NUMERAL FOUR" #x3024)
39 ("HANGZHOU NUMERAL FIVE" #x3025)
40 ("HANGZHOU NUMERAL SIX" #x3026)
41 ("HANGZHOU NUMERAL SEVEN" #x3027)
42 ("HANGZHOU NUMERAL EIGHT" #x3028)
43 ("HANGZHOU NUMERAL NINE" #x3029)
44 ("IDEOGRAPHIC LEVEL TONE MARK" #x302A)
45 ("IDEOGRAPHIC RISING TONE MARK" #x302B)
46 ("IDEOGRAPHIC DEPARTING TONE MARK" #x302C)
47 ("IDEOGRAPHIC ENTERING TONE MARK" #x302D)
48 ("HANGUL SINGLE DOT TONE MARK" #x302E)
49 ("HANGUL DOUBLE DOT TONE MARK" #x302F)
50 ("WAVY DASH" #x3030)
51 ("VERTICAL KANA REPEAT MARK" #x3031)
52 ("VERTICAL KANA REPEAT WITH VOICED SOUND MARK" #x3032)
53 ("VERTICAL KANA REPEAT MARK UPPER HALF" #x3033)
54 ("VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF" #x3034)
55 ("VERTICAL KANA REPEAT MARK LOWER HALF" #x3035)
56 ("CIRCLED POSTAL MARK" #x3036)
57 ("IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL" #x3037)
58 ("HANGZHOU NUMERAL TEN" #x3038)
59 ("HANGZHOU NUMERAL TWENTY" #x3039)
60 ("HANGZHOU NUMERAL THIRTY" #x303A)
61 ("VERTICAL IDEOGRAPHIC ITERATION MARK" #x303B)
62 ("MASU MARK" #x303C)
63 ("PART ALTERNATION MARK" #x303D)
64 ("IDEOGRAPHIC VARIATION INDICATOR" #x303E)
65 ("IDEOGRAPHIC HALF FILL SPACE" #x303F)
66 ))
diff --git a/lisp/nxml/char-name/unicode/03040-0309F.el b/lisp/nxml/char-name/unicode/03040-0309F.el
new file mode 100644
index 00000000000..c19e541e0a4
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/03040-0309F.el
@@ -0,0 +1,95 @@
1(nxml-define-char-name-set 'hiragana
2 '(("HIRAGANA LETTER SMALL A" #x3041)
3 ("HIRAGANA LETTER A" #x3042)
4 ("HIRAGANA LETTER SMALL I" #x3043)
5 ("HIRAGANA LETTER I" #x3044)
6 ("HIRAGANA LETTER SMALL U" #x3045)
7 ("HIRAGANA LETTER U" #x3046)
8 ("HIRAGANA LETTER SMALL E" #x3047)
9 ("HIRAGANA LETTER E" #x3048)
10 ("HIRAGANA LETTER SMALL O" #x3049)
11 ("HIRAGANA LETTER O" #x304A)
12 ("HIRAGANA LETTER KA" #x304B)
13 ("HIRAGANA LETTER GA" #x304C)
14 ("HIRAGANA LETTER KI" #x304D)
15 ("HIRAGANA LETTER GI" #x304E)
16 ("HIRAGANA LETTER KU" #x304F)
17 ("HIRAGANA LETTER GU" #x3050)
18 ("HIRAGANA LETTER KE" #x3051)
19 ("HIRAGANA LETTER GE" #x3052)
20 ("HIRAGANA LETTER KO" #x3053)
21 ("HIRAGANA LETTER GO" #x3054)
22 ("HIRAGANA LETTER SA" #x3055)
23 ("HIRAGANA LETTER ZA" #x3056)
24 ("HIRAGANA LETTER SI" #x3057)
25 ("HIRAGANA LETTER ZI" #x3058)
26 ("HIRAGANA LETTER SU" #x3059)
27 ("HIRAGANA LETTER ZU" #x305A)
28 ("HIRAGANA LETTER SE" #x305B)
29 ("HIRAGANA LETTER ZE" #x305C)
30 ("HIRAGANA LETTER SO" #x305D)
31 ("HIRAGANA LETTER ZO" #x305E)
32 ("HIRAGANA LETTER TA" #x305F)
33 ("HIRAGANA LETTER DA" #x3060)
34 ("HIRAGANA LETTER TI" #x3061)
35 ("HIRAGANA LETTER DI" #x3062)
36 ("HIRAGANA LETTER SMALL TU" #x3063)
37 ("HIRAGANA LETTER TU" #x3064)
38 ("HIRAGANA LETTER DU" #x3065)
39 ("HIRAGANA LETTER TE" #x3066)
40 ("HIRAGANA LETTER DE" #x3067)
41 ("HIRAGANA LETTER TO" #x3068)
42 ("HIRAGANA LETTER DO" #x3069)
43 ("HIRAGANA LETTER NA" #x306A)
44 ("HIRAGANA LETTER NI" #x306B)
45 ("HIRAGANA LETTER NU" #x306C)
46 ("HIRAGANA LETTER NE" #x306D)
47 ("HIRAGANA LETTER NO" #x306E)
48 ("HIRAGANA LETTER HA" #x306F)
49 ("HIRAGANA LETTER BA" #x3070)
50 ("HIRAGANA LETTER PA" #x3071)
51 ("HIRAGANA LETTER HI" #x3072)
52 ("HIRAGANA LETTER BI" #x3073)
53 ("HIRAGANA LETTER PI" #x3074)
54 ("HIRAGANA LETTER HU" #x3075)
55 ("HIRAGANA LETTER BU" #x3076)
56 ("HIRAGANA LETTER PU" #x3077)
57 ("HIRAGANA LETTER HE" #x3078)
58 ("HIRAGANA LETTER BE" #x3079)
59 ("HIRAGANA LETTER PE" #x307A)
60 ("HIRAGANA LETTER HO" #x307B)
61 ("HIRAGANA LETTER BO" #x307C)
62 ("HIRAGANA LETTER PO" #x307D)
63 ("HIRAGANA LETTER MA" #x307E)
64 ("HIRAGANA LETTER MI" #x307F)
65 ("HIRAGANA LETTER MU" #x3080)
66 ("HIRAGANA LETTER ME" #x3081)
67 ("HIRAGANA LETTER MO" #x3082)
68 ("HIRAGANA LETTER SMALL YA" #x3083)
69 ("HIRAGANA LETTER YA" #x3084)
70 ("HIRAGANA LETTER SMALL YU" #x3085)
71 ("HIRAGANA LETTER YU" #x3086)
72 ("HIRAGANA LETTER SMALL YO" #x3087)
73 ("HIRAGANA LETTER YO" #x3088)
74 ("HIRAGANA LETTER RA" #x3089)
75 ("HIRAGANA LETTER RI" #x308A)
76 ("HIRAGANA LETTER RU" #x308B)
77 ("HIRAGANA LETTER RE" #x308C)
78 ("HIRAGANA LETTER RO" #x308D)
79 ("HIRAGANA LETTER SMALL WA" #x308E)
80 ("HIRAGANA LETTER WA" #x308F)
81 ("HIRAGANA LETTER WI" #x3090)
82 ("HIRAGANA LETTER WE" #x3091)
83 ("HIRAGANA LETTER WO" #x3092)
84 ("HIRAGANA LETTER N" #x3093)
85 ("HIRAGANA LETTER VU" #x3094)
86 ("HIRAGANA LETTER SMALL KA" #x3095)
87 ("HIRAGANA LETTER SMALL KE" #x3096)
88 ("COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK" #x3099)
89 ("COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK" #x309A)
90 ("KATAKANA-HIRAGANA VOICED SOUND MARK" #x309B)
91 ("KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK" #x309C)
92 ("HIRAGANA ITERATION MARK" #x309D)
93 ("HIRAGANA VOICED ITERATION MARK" #x309E)
94 ("HIRAGANA DIGRAPH YORI" #x309F)
95 ))
diff --git a/lisp/nxml/char-name/unicode/030A0-030FF.el b/lisp/nxml/char-name/unicode/030A0-030FF.el
new file mode 100644
index 00000000000..52168c73ad0
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/030A0-030FF.el
@@ -0,0 +1,98 @@
1(nxml-define-char-name-set 'katakana
2 '(("KATAKANA-HIRAGANA DOUBLE HYPHEN" #x30A0)
3 ("KATAKANA LETTER SMALL A" #x30A1)
4 ("KATAKANA LETTER A" #x30A2)
5 ("KATAKANA LETTER SMALL I" #x30A3)
6 ("KATAKANA LETTER I" #x30A4)
7 ("KATAKANA LETTER SMALL U" #x30A5)
8 ("KATAKANA LETTER U" #x30A6)
9 ("KATAKANA LETTER SMALL E" #x30A7)
10 ("KATAKANA LETTER E" #x30A8)
11 ("KATAKANA LETTER SMALL O" #x30A9)
12 ("KATAKANA LETTER O" #x30AA)
13 ("KATAKANA LETTER KA" #x30AB)
14 ("KATAKANA LETTER GA" #x30AC)
15 ("KATAKANA LETTER KI" #x30AD)
16 ("KATAKANA LETTER GI" #x30AE)
17 ("KATAKANA LETTER KU" #x30AF)
18 ("KATAKANA LETTER GU" #x30B0)
19 ("KATAKANA LETTER KE" #x30B1)
20 ("KATAKANA LETTER GE" #x30B2)
21 ("KATAKANA LETTER KO" #x30B3)
22 ("KATAKANA LETTER GO" #x30B4)
23 ("KATAKANA LETTER SA" #x30B5)
24 ("KATAKANA LETTER ZA" #x30B6)
25 ("KATAKANA LETTER SI" #x30B7)
26 ("KATAKANA LETTER ZI" #x30B8)
27 ("KATAKANA LETTER SU" #x30B9)
28 ("KATAKANA LETTER ZU" #x30BA)
29 ("KATAKANA LETTER SE" #x30BB)
30 ("KATAKANA LETTER ZE" #x30BC)
31 ("KATAKANA LETTER SO" #x30BD)
32 ("KATAKANA LETTER ZO" #x30BE)
33 ("KATAKANA LETTER TA" #x30BF)
34 ("KATAKANA LETTER DA" #x30C0)
35 ("KATAKANA LETTER TI" #x30C1)
36 ("KATAKANA LETTER DI" #x30C2)
37 ("KATAKANA LETTER SMALL TU" #x30C3)
38 ("KATAKANA LETTER TU" #x30C4)
39 ("KATAKANA LETTER DU" #x30C5)
40 ("KATAKANA LETTER TE" #x30C6)
41 ("KATAKANA LETTER DE" #x30C7)
42 ("KATAKANA LETTER TO" #x30C8)
43 ("KATAKANA LETTER DO" #x30C9)
44 ("KATAKANA LETTER NA" #x30CA)
45 ("KATAKANA LETTER NI" #x30CB)
46 ("KATAKANA LETTER NU" #x30CC)
47 ("KATAKANA LETTER NE" #x30CD)
48 ("KATAKANA LETTER NO" #x30CE)
49 ("KATAKANA LETTER HA" #x30CF)
50 ("KATAKANA LETTER BA" #x30D0)
51 ("KATAKANA LETTER PA" #x30D1)
52 ("KATAKANA LETTER HI" #x30D2)
53 ("KATAKANA LETTER BI" #x30D3)
54 ("KATAKANA LETTER PI" #x30D4)
55 ("KATAKANA LETTER HU" #x30D5)
56 ("KATAKANA LETTER BU" #x30D6)
57 ("KATAKANA LETTER PU" #x30D7)
58 ("KATAKANA LETTER HE" #x30D8)
59 ("KATAKANA LETTER BE" #x30D9)
60 ("KATAKANA LETTER PE" #x30DA)
61 ("KATAKANA LETTER HO" #x30DB)
62 ("KATAKANA LETTER BO" #x30DC)
63 ("KATAKANA LETTER PO" #x30DD)
64 ("KATAKANA LETTER MA" #x30DE)
65 ("KATAKANA LETTER MI" #x30DF)
66 ("KATAKANA LETTER MU" #x30E0)
67 ("KATAKANA LETTER ME" #x30E1)
68 ("KATAKANA LETTER MO" #x30E2)
69 ("KATAKANA LETTER SMALL YA" #x30E3)
70 ("KATAKANA LETTER YA" #x30E4)
71 ("KATAKANA LETTER SMALL YU" #x30E5)
72 ("KATAKANA LETTER YU" #x30E6)
73 ("KATAKANA LETTER SMALL YO" #x30E7)
74 ("KATAKANA LETTER YO" #x30E8)
75 ("KATAKANA LETTER RA" #x30E9)
76 ("KATAKANA LETTER RI" #x30EA)
77 ("KATAKANA LETTER RU" #x30EB)
78 ("KATAKANA LETTER RE" #x30EC)
79 ("KATAKANA LETTER RO" #x30ED)
80 ("KATAKANA LETTER SMALL WA" #x30EE)
81 ("KATAKANA LETTER WA" #x30EF)
82 ("KATAKANA LETTER WI" #x30F0)
83 ("KATAKANA LETTER WE" #x30F1)
84 ("KATAKANA LETTER WO" #x30F2)
85 ("KATAKANA LETTER N" #x30F3)
86 ("KATAKANA LETTER VU" #x30F4)
87 ("KATAKANA LETTER SMALL KA" #x30F5)
88 ("KATAKANA LETTER SMALL KE" #x30F6)
89 ("KATAKANA LETTER VA" #x30F7)
90 ("KATAKANA LETTER VI" #x30F8)
91 ("KATAKANA LETTER VE" #x30F9)
92 ("KATAKANA LETTER VO" #x30FA)
93 ("KATAKANA MIDDLE DOT" #x30FB)
94 ("KATAKANA-HIRAGANA PROLONGED SOUND MARK" #x30FC)
95 ("KATAKANA ITERATION MARK" #x30FD)
96 ("KATAKANA VOICED ITERATION MARK" #x30FE)
97 ("KATAKANA DIGRAPH KOTO" #x30FF)
98 ))
diff --git a/lisp/nxml/char-name/unicode/03100-0312F.el b/lisp/nxml/char-name/unicode/03100-0312F.el
new file mode 100644
index 00000000000..ea0cc9ee5e1
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/03100-0312F.el
@@ -0,0 +1,42 @@
1(nxml-define-char-name-set 'bopomofo
2 '(("BOPOMOFO LETTER B" #x3105)
3 ("BOPOMOFO LETTER P" #x3106)
4 ("BOPOMOFO LETTER M" #x3107)
5 ("BOPOMOFO LETTER F" #x3108)
6 ("BOPOMOFO LETTER D" #x3109)
7 ("BOPOMOFO LETTER T" #x310A)
8 ("BOPOMOFO LETTER N" #x310B)
9 ("BOPOMOFO LETTER L" #x310C)
10 ("BOPOMOFO LETTER G" #x310D)
11 ("BOPOMOFO LETTER K" #x310E)
12 ("BOPOMOFO LETTER H" #x310F)
13 ("BOPOMOFO LETTER J" #x3110)
14 ("BOPOMOFO LETTER Q" #x3111)
15 ("BOPOMOFO LETTER X" #x3112)
16 ("BOPOMOFO LETTER ZH" #x3113)
17 ("BOPOMOFO LETTER CH" #x3114)
18 ("BOPOMOFO LETTER SH" #x3115)
19 ("BOPOMOFO LETTER R" #x3116)
20 ("BOPOMOFO LETTER Z" #x3117)
21 ("BOPOMOFO LETTER C" #x3118)
22 ("BOPOMOFO LETTER S" #x3119)
23 ("BOPOMOFO LETTER A" #x311A)
24 ("BOPOMOFO LETTER O" #x311B)
25 ("BOPOMOFO LETTER E" #x311C)
26 ("BOPOMOFO LETTER EH" #x311D)
27 ("BOPOMOFO LETTER AI" #x311E)
28 ("BOPOMOFO LETTER EI" #x311F)
29 ("BOPOMOFO LETTER AU" #x3120)
30 ("BOPOMOFO LETTER OU" #x3121)
31 ("BOPOMOFO LETTER AN" #x3122)
32 ("BOPOMOFO LETTER EN" #x3123)
33 ("BOPOMOFO LETTER ANG" #x3124)
34 ("BOPOMOFO LETTER ENG" #x3125)
35 ("BOPOMOFO LETTER ER" #x3126)
36 ("BOPOMOFO LETTER I" #x3127)
37 ("BOPOMOFO LETTER U" #x3128)
38 ("BOPOMOFO LETTER IU" #x3129)
39 ("BOPOMOFO LETTER V" #x312A)
40 ("BOPOMOFO LETTER NG" #x312B)
41 ("BOPOMOFO LETTER GN" #x312C)
42 ))
diff --git a/lisp/nxml/char-name/unicode/03130-0318F.el b/lisp/nxml/char-name/unicode/03130-0318F.el
new file mode 100644
index 00000000000..5e7746f4a50
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/03130-0318F.el
@@ -0,0 +1,96 @@
1(nxml-define-char-name-set 'hangul-compatibility-jamo
2 '(("HANGUL LETTER KIYEOK" #x3131)
3 ("HANGUL LETTER SSANGKIYEOK" #x3132)
4 ("HANGUL LETTER KIYEOK-SIOS" #x3133)
5 ("HANGUL LETTER NIEUN" #x3134)
6 ("HANGUL LETTER NIEUN-CIEUC" #x3135)
7 ("HANGUL LETTER NIEUN-HIEUH" #x3136)
8 ("HANGUL LETTER TIKEUT" #x3137)
9 ("HANGUL LETTER SSANGTIKEUT" #x3138)
10 ("HANGUL LETTER RIEUL" #x3139)
11 ("HANGUL LETTER RIEUL-KIYEOK" #x313A)
12 ("HANGUL LETTER RIEUL-MIEUM" #x313B)
13 ("HANGUL LETTER RIEUL-PIEUP" #x313C)
14 ("HANGUL LETTER RIEUL-SIOS" #x313D)
15 ("HANGUL LETTER RIEUL-THIEUTH" #x313E)
16 ("HANGUL LETTER RIEUL-PHIEUPH" #x313F)
17 ("HANGUL LETTER RIEUL-HIEUH" #x3140)
18 ("HANGUL LETTER MIEUM" #x3141)
19 ("HANGUL LETTER PIEUP" #x3142)
20 ("HANGUL LETTER SSANGPIEUP" #x3143)
21 ("HANGUL LETTER PIEUP-SIOS" #x3144)
22 ("HANGUL LETTER SIOS" #x3145)
23 ("HANGUL LETTER SSANGSIOS" #x3146)
24 ("HANGUL LETTER IEUNG" #x3147)
25 ("HANGUL LETTER CIEUC" #x3148)
26 ("HANGUL LETTER SSANGCIEUC" #x3149)
27 ("HANGUL LETTER CHIEUCH" #x314A)
28 ("HANGUL LETTER KHIEUKH" #x314B)
29 ("HANGUL LETTER THIEUTH" #x314C)
30 ("HANGUL LETTER PHIEUPH" #x314D)
31 ("HANGUL LETTER HIEUH" #x314E)
32 ("HANGUL LETTER A" #x314F)
33 ("HANGUL LETTER AE" #x3150)
34 ("HANGUL LETTER YA" #x3151)
35 ("HANGUL LETTER YAE" #x3152)
36 ("HANGUL LETTER EO" #x3153)
37 ("HANGUL LETTER E" #x3154)
38 ("HANGUL LETTER YEO" #x3155)
39 ("HANGUL LETTER YE" #x3156)
40 ("HANGUL LETTER O" #x3157)
41 ("HANGUL LETTER WA" #x3158)
42 ("HANGUL LETTER WAE" #x3159)
43 ("HANGUL LETTER OE" #x315A)
44 ("HANGUL LETTER YO" #x315B)
45 ("HANGUL LETTER U" #x315C)
46 ("HANGUL LETTER WEO" #x315D)
47 ("HANGUL LETTER WE" #x315E)
48 ("HANGUL LETTER WI" #x315F)
49 ("HANGUL LETTER YU" #x3160)
50 ("HANGUL LETTER EU" #x3161)
51 ("HANGUL LETTER YI" #x3162)
52 ("HANGUL LETTER I" #x3163)
53 ("HANGUL FILLER" #x3164)
54 ("HANGUL LETTER SSANGNIEUN" #x3165)
55 ("HANGUL LETTER NIEUN-TIKEUT" #x3166)
56 ("HANGUL LETTER NIEUN-SIOS" #x3167)
57 ("HANGUL LETTER NIEUN-PANSIOS" #x3168)
58 ("HANGUL LETTER RIEUL-KIYEOK-SIOS" #x3169)
59 ("HANGUL LETTER RIEUL-TIKEUT" #x316A)
60 ("HANGUL LETTER RIEUL-PIEUP-SIOS" #x316B)
61 ("HANGUL LETTER RIEUL-PANSIOS" #x316C)
62 ("HANGUL LETTER RIEUL-YEORINHIEUH" #x316D)
63 ("HANGUL LETTER MIEUM-PIEUP" #x316E)
64 ("HANGUL LETTER MIEUM-SIOS" #x316F)
65 ("HANGUL LETTER MIEUM-PANSIOS" #x3170)
66 ("HANGUL LETTER KAPYEOUNMIEUM" #x3171)
67 ("HANGUL LETTER PIEUP-KIYEOK" #x3172)
68 ("HANGUL LETTER PIEUP-TIKEUT" #x3173)
69 ("HANGUL LETTER PIEUP-SIOS-KIYEOK" #x3174)
70 ("HANGUL LETTER PIEUP-SIOS-TIKEUT" #x3175)
71 ("HANGUL LETTER PIEUP-CIEUC" #x3176)
72 ("HANGUL LETTER PIEUP-THIEUTH" #x3177)
73 ("HANGUL LETTER KAPYEOUNPIEUP" #x3178)
74 ("HANGUL LETTER KAPYEOUNSSANGPIEUP" #x3179)
75 ("HANGUL LETTER SIOS-KIYEOK" #x317A)
76 ("HANGUL LETTER SIOS-NIEUN" #x317B)
77 ("HANGUL LETTER SIOS-TIKEUT" #x317C)
78 ("HANGUL LETTER SIOS-PIEUP" #x317D)
79 ("HANGUL LETTER SIOS-CIEUC" #x317E)
80 ("HANGUL LETTER PANSIOS" #x317F)
81 ("HANGUL LETTER SSANGIEUNG" #x3180)
82 ("HANGUL LETTER YESIEUNG" #x3181)
83 ("HANGUL LETTER YESIEUNG-SIOS" #x3182)
84 ("HANGUL LETTER YESIEUNG-PANSIOS" #x3183)
85 ("HANGUL LETTER KAPYEOUNPHIEUPH" #x3184)
86 ("HANGUL LETTER SSANGHIEUH" #x3185)
87 ("HANGUL LETTER YEORINHIEUH" #x3186)
88 ("HANGUL LETTER YO-YA" #x3187)
89 ("HANGUL LETTER YO-YAE" #x3188)
90 ("HANGUL LETTER YO-I" #x3189)
91 ("HANGUL LETTER YU-YEO" #x318A)
92 ("HANGUL LETTER YU-YE" #x318B)
93 ("HANGUL LETTER YU-I" #x318C)
94 ("HANGUL LETTER ARAEA" #x318D)
95 ("HANGUL LETTER ARAEAE" #x318E)
96 ))
diff --git a/lisp/nxml/char-name/unicode/03190-0319F.el b/lisp/nxml/char-name/unicode/03190-0319F.el
new file mode 100644
index 00000000000..b8520da93a0
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/03190-0319F.el
@@ -0,0 +1,18 @@
1(nxml-define-char-name-set 'kanbun
2 '(("IDEOGRAPHIC ANNOTATION LINKING MARK" #x3190)
3 ("IDEOGRAPHIC ANNOTATION REVERSE MARK" #x3191)
4 ("IDEOGRAPHIC ANNOTATION ONE MARK" #x3192)
5 ("IDEOGRAPHIC ANNOTATION TWO MARK" #x3193)
6 ("IDEOGRAPHIC ANNOTATION THREE MARK" #x3194)
7 ("IDEOGRAPHIC ANNOTATION FOUR MARK" #x3195)
8 ("IDEOGRAPHIC ANNOTATION TOP MARK" #x3196)
9 ("IDEOGRAPHIC ANNOTATION MIDDLE MARK" #x3197)
10 ("IDEOGRAPHIC ANNOTATION BOTTOM MARK" #x3198)
11 ("IDEOGRAPHIC ANNOTATION FIRST MARK" #x3199)
12 ("IDEOGRAPHIC ANNOTATION SECOND MARK" #x319A)
13 ("IDEOGRAPHIC ANNOTATION THIRD MARK" #x319B)
14 ("IDEOGRAPHIC ANNOTATION FOURTH MARK" #x319C)
15 ("IDEOGRAPHIC ANNOTATION HEAVEN MARK" #x319D)
16 ("IDEOGRAPHIC ANNOTATION EARTH MARK" #x319E)
17 ("IDEOGRAPHIC ANNOTATION MAN MARK" #x319F)
18 ))
diff --git a/lisp/nxml/char-name/unicode/031A0-031BF.el b/lisp/nxml/char-name/unicode/031A0-031BF.el
new file mode 100644
index 00000000000..18392547c89
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/031A0-031BF.el
@@ -0,0 +1,26 @@
1(nxml-define-char-name-set 'bopomofo-extended
2 '(("BOPOMOFO LETTER BU" #x31A0)
3 ("BOPOMOFO LETTER ZI" #x31A1)
4 ("BOPOMOFO LETTER JI" #x31A2)
5 ("BOPOMOFO LETTER GU" #x31A3)
6 ("BOPOMOFO LETTER EE" #x31A4)
7 ("BOPOMOFO LETTER ENN" #x31A5)
8 ("BOPOMOFO LETTER OO" #x31A6)
9 ("BOPOMOFO LETTER ONN" #x31A7)
10 ("BOPOMOFO LETTER IR" #x31A8)
11 ("BOPOMOFO LETTER ANN" #x31A9)
12 ("BOPOMOFO LETTER INN" #x31AA)
13 ("BOPOMOFO LETTER UNN" #x31AB)
14 ("BOPOMOFO LETTER IM" #x31AC)
15 ("BOPOMOFO LETTER NGG" #x31AD)
16 ("BOPOMOFO LETTER AINN" #x31AE)
17 ("BOPOMOFO LETTER AUNN" #x31AF)
18 ("BOPOMOFO LETTER AM" #x31B0)
19 ("BOPOMOFO LETTER OM" #x31B1)
20 ("BOPOMOFO LETTER ONG" #x31B2)
21 ("BOPOMOFO LETTER INNN" #x31B3)
22 ("BOPOMOFO FINAL LETTER P" #x31B4)
23 ("BOPOMOFO FINAL LETTER T" #x31B5)
24 ("BOPOMOFO FINAL LETTER K" #x31B6)
25 ("BOPOMOFO FINAL LETTER H" #x31B7)
26 ))
diff --git a/lisp/nxml/char-name/unicode/031F0-031FF.el b/lisp/nxml/char-name/unicode/031F0-031FF.el
new file mode 100644
index 00000000000..e637bf3c6d7
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/031F0-031FF.el
@@ -0,0 +1,18 @@
1(nxml-define-char-name-set 'katakana-phonetic-extensions
2 '(("KATAKANA LETTER SMALL KU" #x31F0)
3 ("KATAKANA LETTER SMALL SI" #x31F1)
4 ("KATAKANA LETTER SMALL SU" #x31F2)
5 ("KATAKANA LETTER SMALL TO" #x31F3)
6 ("KATAKANA LETTER SMALL NU" #x31F4)
7 ("KATAKANA LETTER SMALL HA" #x31F5)
8 ("KATAKANA LETTER SMALL HI" #x31F6)
9 ("KATAKANA LETTER SMALL HU" #x31F7)
10 ("KATAKANA LETTER SMALL HE" #x31F8)
11 ("KATAKANA LETTER SMALL HO" #x31F9)
12 ("KATAKANA LETTER SMALL MU" #x31FA)
13 ("KATAKANA LETTER SMALL RA" #x31FB)
14 ("KATAKANA LETTER SMALL RI" #x31FC)
15 ("KATAKANA LETTER SMALL RU" #x31FD)
16 ("KATAKANA LETTER SMALL RE" #x31FE)
17 ("KATAKANA LETTER SMALL RO" #x31FF)
18 ))
diff --git a/lisp/nxml/char-name/unicode/03200-032FF.el b/lisp/nxml/char-name/unicode/03200-032FF.el
new file mode 100644
index 00000000000..625ff5bdfdb
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/03200-032FF.el
@@ -0,0 +1,234 @@
1(nxml-define-char-name-set 'enclosed-cjk-letters-and-months
2 '(("PARENTHESIZED HANGUL KIYEOK" #x3200)
3 ("PARENTHESIZED HANGUL NIEUN" #x3201)
4 ("PARENTHESIZED HANGUL TIKEUT" #x3202)
5 ("PARENTHESIZED HANGUL RIEUL" #x3203)
6 ("PARENTHESIZED HANGUL MIEUM" #x3204)
7 ("PARENTHESIZED HANGUL PIEUP" #x3205)
8 ("PARENTHESIZED HANGUL SIOS" #x3206)
9 ("PARENTHESIZED HANGUL IEUNG" #x3207)
10 ("PARENTHESIZED HANGUL CIEUC" #x3208)
11 ("PARENTHESIZED HANGUL CHIEUCH" #x3209)
12 ("PARENTHESIZED HANGUL KHIEUKH" #x320A)
13 ("PARENTHESIZED HANGUL THIEUTH" #x320B)
14 ("PARENTHESIZED HANGUL PHIEUPH" #x320C)
15 ("PARENTHESIZED HANGUL HIEUH" #x320D)
16 ("PARENTHESIZED HANGUL KIYEOK A" #x320E)
17 ("PARENTHESIZED HANGUL NIEUN A" #x320F)
18 ("PARENTHESIZED HANGUL TIKEUT A" #x3210)
19 ("PARENTHESIZED HANGUL RIEUL A" #x3211)
20 ("PARENTHESIZED HANGUL MIEUM A" #x3212)
21 ("PARENTHESIZED HANGUL PIEUP A" #x3213)
22 ("PARENTHESIZED HANGUL SIOS A" #x3214)
23 ("PARENTHESIZED HANGUL IEUNG A" #x3215)
24 ("PARENTHESIZED HANGUL CIEUC A" #x3216)
25 ("PARENTHESIZED HANGUL CHIEUCH A" #x3217)
26 ("PARENTHESIZED HANGUL KHIEUKH A" #x3218)
27 ("PARENTHESIZED HANGUL THIEUTH A" #x3219)
28 ("PARENTHESIZED HANGUL PHIEUPH A" #x321A)
29 ("PARENTHESIZED HANGUL HIEUH A" #x321B)
30 ("PARENTHESIZED HANGUL CIEUC U" #x321C)
31 ("PARENTHESIZED IDEOGRAPH ONE" #x3220)
32 ("PARENTHESIZED IDEOGRAPH TWO" #x3221)
33 ("PARENTHESIZED IDEOGRAPH THREE" #x3222)
34 ("PARENTHESIZED IDEOGRAPH FOUR" #x3223)
35 ("PARENTHESIZED IDEOGRAPH FIVE" #x3224)
36 ("PARENTHESIZED IDEOGRAPH SIX" #x3225)
37 ("PARENTHESIZED IDEOGRAPH SEVEN" #x3226)
38 ("PARENTHESIZED IDEOGRAPH EIGHT" #x3227)
39 ("PARENTHESIZED IDEOGRAPH NINE" #x3228)
40 ("PARENTHESIZED IDEOGRAPH TEN" #x3229)
41 ("PARENTHESIZED IDEOGRAPH MOON" #x322A)
42 ("PARENTHESIZED IDEOGRAPH FIRE" #x322B)
43 ("PARENTHESIZED IDEOGRAPH WATER" #x322C)
44 ("PARENTHESIZED IDEOGRAPH WOOD" #x322D)
45 ("PARENTHESIZED IDEOGRAPH METAL" #x322E)
46 ("PARENTHESIZED IDEOGRAPH EARTH" #x322F)
47 ("PARENTHESIZED IDEOGRAPH SUN" #x3230)
48 ("PARENTHESIZED IDEOGRAPH STOCK" #x3231)
49 ("PARENTHESIZED IDEOGRAPH HAVE" #x3232)
50 ("PARENTHESIZED IDEOGRAPH SOCIETY" #x3233)
51 ("PARENTHESIZED IDEOGRAPH NAME" #x3234)
52 ("PARENTHESIZED IDEOGRAPH SPECIAL" #x3235)
53 ("PARENTHESIZED IDEOGRAPH FINANCIAL" #x3236)
54 ("PARENTHESIZED IDEOGRAPH CONGRATULATION" #x3237)
55 ("PARENTHESIZED IDEOGRAPH LABOR" #x3238)
56 ("PARENTHESIZED IDEOGRAPH REPRESENT" #x3239)
57 ("PARENTHESIZED IDEOGRAPH CALL" #x323A)
58 ("PARENTHESIZED IDEOGRAPH STUDY" #x323B)
59 ("PARENTHESIZED IDEOGRAPH SUPERVISE" #x323C)
60 ("PARENTHESIZED IDEOGRAPH ENTERPRISE" #x323D)
61 ("PARENTHESIZED IDEOGRAPH RESOURCE" #x323E)
62 ("PARENTHESIZED IDEOGRAPH ALLIANCE" #x323F)
63 ("PARENTHESIZED IDEOGRAPH FESTIVAL" #x3240)
64 ("PARENTHESIZED IDEOGRAPH REST" #x3241)
65 ("PARENTHESIZED IDEOGRAPH SELF" #x3242)
66 ("PARENTHESIZED IDEOGRAPH REACH" #x3243)
67 ("CIRCLED NUMBER TWENTY ONE" #x3251)
68 ("CIRCLED NUMBER TWENTY TWO" #x3252)
69 ("CIRCLED NUMBER TWENTY THREE" #x3253)
70 ("CIRCLED NUMBER TWENTY FOUR" #x3254)
71 ("CIRCLED NUMBER TWENTY FIVE" #x3255)
72 ("CIRCLED NUMBER TWENTY SIX" #x3256)
73 ("CIRCLED NUMBER TWENTY SEVEN" #x3257)
74 ("CIRCLED NUMBER TWENTY EIGHT" #x3258)
75 ("CIRCLED NUMBER TWENTY NINE" #x3259)
76 ("CIRCLED NUMBER THIRTY" #x325A)
77 ("CIRCLED NUMBER THIRTY ONE" #x325B)
78 ("CIRCLED NUMBER THIRTY TWO" #x325C)
79 ("CIRCLED NUMBER THIRTY THREE" #x325D)
80 ("CIRCLED NUMBER THIRTY FOUR" #x325E)
81 ("CIRCLED NUMBER THIRTY FIVE" #x325F)
82 ("CIRCLED HANGUL KIYEOK" #x3260)
83 ("CIRCLED HANGUL NIEUN" #x3261)
84 ("CIRCLED HANGUL TIKEUT" #x3262)
85 ("CIRCLED HANGUL RIEUL" #x3263)
86 ("CIRCLED HANGUL MIEUM" #x3264)
87 ("CIRCLED HANGUL PIEUP" #x3265)
88 ("CIRCLED HANGUL SIOS" #x3266)
89 ("CIRCLED HANGUL IEUNG" #x3267)
90 ("CIRCLED HANGUL CIEUC" #x3268)
91 ("CIRCLED HANGUL CHIEUCH" #x3269)
92 ("CIRCLED HANGUL KHIEUKH" #x326A)
93 ("CIRCLED HANGUL THIEUTH" #x326B)
94 ("CIRCLED HANGUL PHIEUPH" #x326C)
95 ("CIRCLED HANGUL HIEUH" #x326D)
96 ("CIRCLED HANGUL KIYEOK A" #x326E)
97 ("CIRCLED HANGUL NIEUN A" #x326F)
98 ("CIRCLED HANGUL TIKEUT A" #x3270)
99 ("CIRCLED HANGUL RIEUL A" #x3271)
100 ("CIRCLED HANGUL MIEUM A" #x3272)
101 ("CIRCLED HANGUL PIEUP A" #x3273)
102 ("CIRCLED HANGUL SIOS A" #x3274)
103 ("CIRCLED HANGUL IEUNG A" #x3275)
104 ("CIRCLED HANGUL CIEUC A" #x3276)
105 ("CIRCLED HANGUL CHIEUCH A" #x3277)
106 ("CIRCLED HANGUL KHIEUKH A" #x3278)
107 ("CIRCLED HANGUL THIEUTH A" #x3279)
108 ("CIRCLED HANGUL PHIEUPH A" #x327A)
109 ("CIRCLED HANGUL HIEUH A" #x327B)
110 ("KOREAN STANDARD SYMBOL" #x327F)
111 ("CIRCLED IDEOGRAPH ONE" #x3280)
112 ("CIRCLED IDEOGRAPH TWO" #x3281)
113 ("CIRCLED IDEOGRAPH THREE" #x3282)
114 ("CIRCLED IDEOGRAPH FOUR" #x3283)
115 ("CIRCLED IDEOGRAPH FIVE" #x3284)
116 ("CIRCLED IDEOGRAPH SIX" #x3285)
117 ("CIRCLED IDEOGRAPH SEVEN" #x3286)
118 ("CIRCLED IDEOGRAPH EIGHT" #x3287)
119 ("CIRCLED IDEOGRAPH NINE" #x3288)
120 ("CIRCLED IDEOGRAPH TEN" #x3289)
121 ("CIRCLED IDEOGRAPH MOON" #x328A)
122 ("CIRCLED IDEOGRAPH FIRE" #x328B)
123 ("CIRCLED IDEOGRAPH WATER" #x328C)
124 ("CIRCLED IDEOGRAPH WOOD" #x328D)
125 ("CIRCLED IDEOGRAPH METAL" #x328E)
126 ("CIRCLED IDEOGRAPH EARTH" #x328F)
127 ("CIRCLED IDEOGRAPH SUN" #x3290)
128 ("CIRCLED IDEOGRAPH STOCK" #x3291)
129 ("CIRCLED IDEOGRAPH HAVE" #x3292)
130 ("CIRCLED IDEOGRAPH SOCIETY" #x3293)
131 ("CIRCLED IDEOGRAPH NAME" #x3294)
132 ("CIRCLED IDEOGRAPH SPECIAL" #x3295)
133 ("CIRCLED IDEOGRAPH FINANCIAL" #x3296)
134 ("CIRCLED IDEOGRAPH CONGRATULATION" #x3297)
135 ("CIRCLED IDEOGRAPH LABOR" #x3298)
136 ("CIRCLED IDEOGRAPH SECRET" #x3299)
137 ("CIRCLED IDEOGRAPH MALE" #x329A)
138 ("CIRCLED IDEOGRAPH FEMALE" #x329B)
139 ("CIRCLED IDEOGRAPH SUITABLE" #x329C)
140 ("CIRCLED IDEOGRAPH EXCELLENT" #x329D)
141 ("CIRCLED IDEOGRAPH PRINT" #x329E)
142 ("CIRCLED IDEOGRAPH ATTENTION" #x329F)
143 ("CIRCLED IDEOGRAPH ITEM" #x32A0)
144 ("CIRCLED IDEOGRAPH REST" #x32A1)
145 ("CIRCLED IDEOGRAPH COPY" #x32A2)
146 ("CIRCLED IDEOGRAPH CORRECT" #x32A3)
147 ("CIRCLED IDEOGRAPH HIGH" #x32A4)
148 ("CIRCLED IDEOGRAPH CENTRE" #x32A5)
149 ("CIRCLED IDEOGRAPH LOW" #x32A6)
150 ("CIRCLED IDEOGRAPH LEFT" #x32A7)
151 ("CIRCLED IDEOGRAPH RIGHT" #x32A8)
152 ("CIRCLED IDEOGRAPH MEDICINE" #x32A9)
153 ("CIRCLED IDEOGRAPH RELIGION" #x32AA)
154 ("CIRCLED IDEOGRAPH STUDY" #x32AB)
155 ("CIRCLED IDEOGRAPH SUPERVISE" #x32AC)
156 ("CIRCLED IDEOGRAPH ENTERPRISE" #x32AD)
157 ("CIRCLED IDEOGRAPH RESOURCE" #x32AE)
158 ("CIRCLED IDEOGRAPH ALLIANCE" #x32AF)
159 ("CIRCLED IDEOGRAPH NIGHT" #x32B0)
160 ("CIRCLED NUMBER THIRTY SIX" #x32B1)
161 ("CIRCLED NUMBER THIRTY SEVEN" #x32B2)
162 ("CIRCLED NUMBER THIRTY EIGHT" #x32B3)
163 ("CIRCLED NUMBER THIRTY NINE" #x32B4)
164 ("CIRCLED NUMBER FORTY" #x32B5)
165 ("CIRCLED NUMBER FORTY ONE" #x32B6)
166 ("CIRCLED NUMBER FORTY TWO" #x32B7)
167 ("CIRCLED NUMBER FORTY THREE" #x32B8)
168 ("CIRCLED NUMBER FORTY FOUR" #x32B9)
169 ("CIRCLED NUMBER FORTY FIVE" #x32BA)
170 ("CIRCLED NUMBER FORTY SIX" #x32BB)
171 ("CIRCLED NUMBER FORTY SEVEN" #x32BC)
172 ("CIRCLED NUMBER FORTY EIGHT" #x32BD)
173 ("CIRCLED NUMBER FORTY NINE" #x32BE)
174 ("CIRCLED NUMBER FIFTY" #x32BF)
175 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY" #x32C0)
176 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY" #x32C1)
177 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH" #x32C2)
178 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL" #x32C3)
179 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY" #x32C4)
180 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE" #x32C5)
181 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY" #x32C6)
182 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST" #x32C7)
183 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER" #x32C8)
184 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER" #x32C9)
185 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER" #x32CA)
186 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER" #x32CB)
187 ("CIRCLED KATAKANA A" #x32D0)
188 ("CIRCLED KATAKANA I" #x32D1)
189 ("CIRCLED KATAKANA U" #x32D2)
190 ("CIRCLED KATAKANA E" #x32D3)
191 ("CIRCLED KATAKANA O" #x32D4)
192 ("CIRCLED KATAKANA KA" #x32D5)
193 ("CIRCLED KATAKANA KI" #x32D6)
194 ("CIRCLED KATAKANA KU" #x32D7)
195 ("CIRCLED KATAKANA KE" #x32D8)
196 ("CIRCLED KATAKANA KO" #x32D9)
197 ("CIRCLED KATAKANA SA" #x32DA)
198 ("CIRCLED KATAKANA SI" #x32DB)
199 ("CIRCLED KATAKANA SU" #x32DC)
200 ("CIRCLED KATAKANA SE" #x32DD)
201 ("CIRCLED KATAKANA SO" #x32DE)
202 ("CIRCLED KATAKANA TA" #x32DF)
203 ("CIRCLED KATAKANA TI" #x32E0)
204 ("CIRCLED KATAKANA TU" #x32E1)
205 ("CIRCLED KATAKANA TE" #x32E2)
206 ("CIRCLED KATAKANA TO" #x32E3)
207 ("CIRCLED KATAKANA NA" #x32E4)
208 ("CIRCLED KATAKANA NI" #x32E5)
209 ("CIRCLED KATAKANA NU" #x32E6)
210 ("CIRCLED KATAKANA NE" #x32E7)
211 ("CIRCLED KATAKANA NO" #x32E8)
212 ("CIRCLED KATAKANA HA" #x32E9)
213 ("CIRCLED KATAKANA HI" #x32EA)
214 ("CIRCLED KATAKANA HU" #x32EB)
215 ("CIRCLED KATAKANA HE" #x32EC)
216 ("CIRCLED KATAKANA HO" #x32ED)
217 ("CIRCLED KATAKANA MA" #x32EE)
218 ("CIRCLED KATAKANA MI" #x32EF)
219 ("CIRCLED KATAKANA MU" #x32F0)
220 ("CIRCLED KATAKANA ME" #x32F1)
221 ("CIRCLED KATAKANA MO" #x32F2)
222 ("CIRCLED KATAKANA YA" #x32F3)
223 ("CIRCLED KATAKANA YU" #x32F4)
224 ("CIRCLED KATAKANA YO" #x32F5)
225 ("CIRCLED KATAKANA RA" #x32F6)
226 ("CIRCLED KATAKANA RI" #x32F7)
227 ("CIRCLED KATAKANA RU" #x32F8)
228 ("CIRCLED KATAKANA RE" #x32F9)
229 ("CIRCLED KATAKANA RO" #x32FA)
230 ("CIRCLED KATAKANA WA" #x32FB)
231 ("CIRCLED KATAKANA WI" #x32FC)
232 ("CIRCLED KATAKANA WE" #x32FD)
233 ("CIRCLED KATAKANA WO" #x32FE)
234 ))
diff --git a/lisp/nxml/char-name/unicode/03300-033FF.el b/lisp/nxml/char-name/unicode/03300-033FF.el
new file mode 100644
index 00000000000..25a070fd6cf
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/03300-033FF.el
@@ -0,0 +1,251 @@
1(nxml-define-char-name-set 'cjk-compatibility
2 '(("SQUARE APAATO" #x3300)
3 ("SQUARE ARUHUA" #x3301)
4 ("SQUARE ANPEA" #x3302)
5 ("SQUARE AARU" #x3303)
6 ("SQUARE ININGU" #x3304)
7 ("SQUARE INTI" #x3305)
8 ("SQUARE UON" #x3306)
9 ("SQUARE ESUKUUDO" #x3307)
10 ("SQUARE EEKAA" #x3308)
11 ("SQUARE ONSU" #x3309)
12 ("SQUARE OOMU" #x330A)
13 ("SQUARE KAIRI" #x330B)
14 ("SQUARE KARATTO" #x330C)
15 ("SQUARE KARORII" #x330D)
16 ("SQUARE GARON" #x330E)
17 ("SQUARE GANMA" #x330F)
18 ("SQUARE GIGA" #x3310)
19 ("SQUARE GINII" #x3311)
20 ("SQUARE KYURII" #x3312)
21 ("SQUARE GIRUDAA" #x3313)
22 ("SQUARE KIRO" #x3314)
23 ("SQUARE KIROGURAMU" #x3315)
24 ("SQUARE KIROMEETORU" #x3316)
25 ("SQUARE KIROWATTO" #x3317)
26 ("SQUARE GURAMU" #x3318)
27 ("SQUARE GURAMUTON" #x3319)
28 ("SQUARE KURUZEIRO" #x331A)
29 ("SQUARE KUROONE" #x331B)
30 ("SQUARE KEESU" #x331C)
31 ("SQUARE KORUNA" #x331D)
32 ("SQUARE KOOPO" #x331E)
33 ("SQUARE SAIKURU" #x331F)
34 ("SQUARE SANTIIMU" #x3320)
35 ("SQUARE SIRINGU" #x3321)
36 ("SQUARE SENTI" #x3322)
37 ("SQUARE SENTO" #x3323)
38 ("SQUARE DAASU" #x3324)
39 ("SQUARE DESI" #x3325)
40 ("SQUARE DORU" #x3326)
41 ("SQUARE TON" #x3327)
42 ("SQUARE NANO" #x3328)
43 ("SQUARE NOTTO" #x3329)
44 ("SQUARE HAITU" #x332A)
45 ("SQUARE PAASENTO" #x332B)
46 ("SQUARE PAATU" #x332C)
47 ("SQUARE BAARERU" #x332D)
48 ("SQUARE PIASUTORU" #x332E)
49 ("SQUARE PIKURU" #x332F)
50 ("SQUARE PIKO" #x3330)
51 ("SQUARE BIRU" #x3331)
52 ("SQUARE HUARADDO" #x3332)
53 ("SQUARE HUIITO" #x3333)
54 ("SQUARE BUSSYERU" #x3334)
55 ("SQUARE HURAN" #x3335)
56 ("SQUARE HEKUTAARU" #x3336)
57 ("SQUARE PESO" #x3337)
58 ("SQUARE PENIHI" #x3338)
59 ("SQUARE HERUTU" #x3339)
60 ("SQUARE PENSU" #x333A)
61 ("SQUARE PEEZI" #x333B)
62 ("SQUARE BEETA" #x333C)
63 ("SQUARE POINTO" #x333D)
64 ("SQUARE BORUTO" #x333E)
65 ("SQUARE HON" #x333F)
66 ("SQUARE PONDO" #x3340)
67 ("SQUARE HOORU" #x3341)
68 ("SQUARE HOON" #x3342)
69 ("SQUARE MAIKURO" #x3343)
70 ("SQUARE MAIRU" #x3344)
71 ("SQUARE MAHHA" #x3345)
72 ("SQUARE MARUKU" #x3346)
73 ("SQUARE MANSYON" #x3347)
74 ("SQUARE MIKURON" #x3348)
75 ("SQUARE MIRI" #x3349)
76 ("SQUARE MIRIBAARU" #x334A)
77 ("SQUARE MEGA" #x334B)
78 ("SQUARE MEGATON" #x334C)
79 ("SQUARE MEETORU" #x334D)
80 ("SQUARE YAADO" #x334E)
81 ("SQUARE YAARU" #x334F)
82 ("SQUARE YUAN" #x3350)
83 ("SQUARE RITTORU" #x3351)
84 ("SQUARE RIRA" #x3352)
85 ("SQUARE RUPII" #x3353)
86 ("SQUARE RUUBURU" #x3354)
87 ("SQUARE REMU" #x3355)
88 ("SQUARE RENTOGEN" #x3356)
89 ("SQUARE WATTO" #x3357)
90 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO" #x3358)
91 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE" #x3359)
92 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO" #x335A)
93 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE" #x335B)
94 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR" #x335C)
95 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE" #x335D)
96 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX" #x335E)
97 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN" #x335F)
98 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT" #x3360)
99 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE" #x3361)
100 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN" #x3362)
101 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN" #x3363)
102 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE" #x3364)
103 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN" #x3365)
104 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN" #x3366)
105 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN" #x3367)
106 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN" #x3368)
107 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN" #x3369)
108 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN" #x336A)
109 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN" #x336B)
110 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY" #x336C)
111 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE" #x336D)
112 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO" #x336E)
113 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE" #x336F)
114 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR" #x3370)
115 ("SQUARE HPA" #x3371)
116 ("SQUARE DA" #x3372)
117 ("SQUARE AU" #x3373)
118 ("SQUARE BAR" #x3374)
119 ("SQUARE OV" #x3375)
120 ("SQUARE PC" #x3376)
121 ("SQUARE ERA NAME HEISEI" #x337B)
122 ("SQUARE ERA NAME SYOUWA" #x337C)
123 ("SQUARE ERA NAME TAISYOU" #x337D)
124 ("SQUARE ERA NAME MEIZI" #x337E)
125 ("SQUARE CORPORATION" #x337F)
126 ("SQUARE PA AMPS" #x3380)
127 ("SQUARE NA" #x3381)
128 ("SQUARE MU A" #x3382)
129 ("SQUARE MA" #x3383)
130 ("SQUARE KA" #x3384)
131 ("SQUARE KB" #x3385)
132 ("SQUARE MB" #x3386)
133 ("SQUARE GB" #x3387)
134 ("SQUARE CAL" #x3388)
135 ("SQUARE KCAL" #x3389)
136 ("SQUARE PF" #x338A)
137 ("SQUARE NF" #x338B)
138 ("SQUARE MU F" #x338C)
139 ("SQUARE MU G" #x338D)
140 ("SQUARE MG" #x338E)
141 ("SQUARE KG" #x338F)
142 ("SQUARE HZ" #x3390)
143 ("SQUARE KHZ" #x3391)
144 ("SQUARE MHZ" #x3392)
145 ("SQUARE GHZ" #x3393)
146 ("SQUARE THZ" #x3394)
147 ("SQUARE MU L" #x3395)
148 ("SQUARE ML" #x3396)
149 ("SQUARE DL" #x3397)
150 ("SQUARE KL" #x3398)
151 ("SQUARE FM" #x3399)
152 ("SQUARE NM" #x339A)
153 ("SQUARE MU M" #x339B)
154 ("SQUARE MM" #x339C)
155 ("SQUARE CM" #x339D)
156 ("SQUARE KM" #x339E)
157 ("SQUARE MM SQUARED" #x339F)
158 ("SQUARE CM SQUARED" #x33A0)
159 ("SQUARE M SQUARED" #x33A1)
160 ("SQUARE KM SQUARED" #x33A2)
161 ("SQUARE MM CUBED" #x33A3)
162 ("SQUARE CM CUBED" #x33A4)
163 ("SQUARE M CUBED" #x33A5)
164 ("SQUARE KM CUBED" #x33A6)
165 ("SQUARE M OVER S" #x33A7)
166 ("SQUARE M OVER S SQUARED" #x33A8)
167 ("SQUARE PA" #x33A9)
168 ("SQUARE KPA" #x33AA)
169 ("SQUARE MPA" #x33AB)
170 ("SQUARE GPA" #x33AC)
171 ("SQUARE RAD" #x33AD)
172 ("SQUARE RAD OVER S" #x33AE)
173 ("SQUARE RAD OVER S SQUARED" #x33AF)
174 ("SQUARE PS" #x33B0)
175 ("SQUARE NS" #x33B1)
176 ("SQUARE MU S" #x33B2)
177 ("SQUARE MS" #x33B3)
178 ("SQUARE PV" #x33B4)
179 ("SQUARE NV" #x33B5)
180 ("SQUARE MU V" #x33B6)
181 ("SQUARE MV" #x33B7)
182 ("SQUARE KV" #x33B8)
183 ("SQUARE MV MEGA" #x33B9)
184 ("SQUARE PW" #x33BA)
185 ("SQUARE NW" #x33BB)
186 ("SQUARE MU W" #x33BC)
187 ("SQUARE MW" #x33BD)
188 ("SQUARE KW" #x33BE)
189 ("SQUARE MW MEGA" #x33BF)
190 ("SQUARE K OHM" #x33C0)
191 ("SQUARE M OHM" #x33C1)
192 ("SQUARE AM" #x33C2)
193 ("SQUARE BQ" #x33C3)
194 ("SQUARE CC" #x33C4)
195 ("SQUARE CD" #x33C5)
196 ("SQUARE C OVER KG" #x33C6)
197 ("SQUARE CO" #x33C7)
198 ("SQUARE DB" #x33C8)
199 ("SQUARE GY" #x33C9)
200 ("SQUARE HA" #x33CA)
201 ("SQUARE HP" #x33CB)
202 ("SQUARE IN" #x33CC)
203 ("SQUARE KK" #x33CD)
204 ("SQUARE KM CAPITAL" #x33CE)
205 ("SQUARE KT" #x33CF)
206 ("SQUARE LM" #x33D0)
207 ("SQUARE LN" #x33D1)
208 ("SQUARE LOG" #x33D2)
209 ("SQUARE LX" #x33D3)
210 ("SQUARE MB SMALL" #x33D4)
211 ("SQUARE MIL" #x33D5)
212 ("SQUARE MOL" #x33D6)
213 ("SQUARE PH" #x33D7)
214 ("SQUARE PM" #x33D8)
215 ("SQUARE PPM" #x33D9)
216 ("SQUARE PR" #x33DA)
217 ("SQUARE SR" #x33DB)
218 ("SQUARE SV" #x33DC)
219 ("SQUARE WB" #x33DD)
220 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE" #x33E0)
221 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO" #x33E1)
222 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE" #x33E2)
223 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR" #x33E3)
224 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE" #x33E4)
225 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX" #x33E5)
226 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN" #x33E6)
227 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT" #x33E7)
228 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE" #x33E8)
229 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN" #x33E9)
230 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN" #x33EA)
231 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE" #x33EB)
232 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN" #x33EC)
233 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN" #x33ED)
234 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN" #x33EE)
235 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN" #x33EF)
236 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN" #x33F0)
237 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN" #x33F1)
238 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN" #x33F2)
239 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY" #x33F3)
240 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE" #x33F4)
241 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO" #x33F5)
242 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE" #x33F6)
243 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR" #x33F7)
244 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE" #x33F8)
245 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX" #x33F9)
246 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN" #x33FA)
247 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT" #x33FB)
248 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE" #x33FC)
249 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY" #x33FD)
250 ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE" #x33FE)
251 ))
diff --git a/lisp/nxml/char-name/unicode/03400-04DBF.el b/lisp/nxml/char-name/unicode/03400-04DBF.el
new file mode 100644
index 00000000000..14d5c4bff57
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/03400-04DBF.el
@@ -0,0 +1,2 @@
1(nxml-define-char-name-set 'cjk-unified-ideographs-extension-a
2 '())
diff --git a/lisp/nxml/char-name/unicode/0A000-0A48F.el b/lisp/nxml/char-name/unicode/0A000-0A48F.el
new file mode 100644
index 00000000000..8d0727f6c1d
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/0A000-0A48F.el
@@ -0,0 +1,1167 @@
1(nxml-define-char-name-set 'yi-syllables
2 '(("YI SYLLABLE IT" #xA000)
3 ("YI SYLLABLE IX" #xA001)
4 ("YI SYLLABLE I" #xA002)
5 ("YI SYLLABLE IP" #xA003)
6 ("YI SYLLABLE IET" #xA004)
7 ("YI SYLLABLE IEX" #xA005)
8 ("YI SYLLABLE IE" #xA006)
9 ("YI SYLLABLE IEP" #xA007)
10 ("YI SYLLABLE AT" #xA008)
11 ("YI SYLLABLE AX" #xA009)
12 ("YI SYLLABLE A" #xA00A)
13 ("YI SYLLABLE AP" #xA00B)
14 ("YI SYLLABLE UOX" #xA00C)
15 ("YI SYLLABLE UO" #xA00D)
16 ("YI SYLLABLE UOP" #xA00E)
17 ("YI SYLLABLE OT" #xA00F)
18 ("YI SYLLABLE OX" #xA010)
19 ("YI SYLLABLE O" #xA011)
20 ("YI SYLLABLE OP" #xA012)
21 ("YI SYLLABLE EX" #xA013)
22 ("YI SYLLABLE E" #xA014)
23 ("YI SYLLABLE WU" #xA015)
24 ("YI SYLLABLE BIT" #xA016)
25 ("YI SYLLABLE BIX" #xA017)
26 ("YI SYLLABLE BI" #xA018)
27 ("YI SYLLABLE BIP" #xA019)
28 ("YI SYLLABLE BIET" #xA01A)
29 ("YI SYLLABLE BIEX" #xA01B)
30 ("YI SYLLABLE BIE" #xA01C)
31 ("YI SYLLABLE BIEP" #xA01D)
32 ("YI SYLLABLE BAT" #xA01E)
33 ("YI SYLLABLE BAX" #xA01F)
34 ("YI SYLLABLE BA" #xA020)
35 ("YI SYLLABLE BAP" #xA021)
36 ("YI SYLLABLE BUOX" #xA022)
37 ("YI SYLLABLE BUO" #xA023)
38 ("YI SYLLABLE BUOP" #xA024)
39 ("YI SYLLABLE BOT" #xA025)
40 ("YI SYLLABLE BOX" #xA026)
41 ("YI SYLLABLE BO" #xA027)
42 ("YI SYLLABLE BOP" #xA028)
43 ("YI SYLLABLE BEX" #xA029)
44 ("YI SYLLABLE BE" #xA02A)
45 ("YI SYLLABLE BEP" #xA02B)
46 ("YI SYLLABLE BUT" #xA02C)
47 ("YI SYLLABLE BUX" #xA02D)
48 ("YI SYLLABLE BU" #xA02E)
49 ("YI SYLLABLE BUP" #xA02F)
50 ("YI SYLLABLE BURX" #xA030)
51 ("YI SYLLABLE BUR" #xA031)
52 ("YI SYLLABLE BYT" #xA032)
53 ("YI SYLLABLE BYX" #xA033)
54 ("YI SYLLABLE BY" #xA034)
55 ("YI SYLLABLE BYP" #xA035)
56 ("YI SYLLABLE BYRX" #xA036)
57 ("YI SYLLABLE BYR" #xA037)
58 ("YI SYLLABLE PIT" #xA038)
59 ("YI SYLLABLE PIX" #xA039)
60 ("YI SYLLABLE PI" #xA03A)
61 ("YI SYLLABLE PIP" #xA03B)
62 ("YI SYLLABLE PIEX" #xA03C)
63 ("YI SYLLABLE PIE" #xA03D)
64 ("YI SYLLABLE PIEP" #xA03E)
65 ("YI SYLLABLE PAT" #xA03F)
66 ("YI SYLLABLE PAX" #xA040)
67 ("YI SYLLABLE PA" #xA041)
68 ("YI SYLLABLE PAP" #xA042)
69 ("YI SYLLABLE PUOX" #xA043)
70 ("YI SYLLABLE PUO" #xA044)
71 ("YI SYLLABLE PUOP" #xA045)
72 ("YI SYLLABLE POT" #xA046)
73 ("YI SYLLABLE POX" #xA047)
74 ("YI SYLLABLE PO" #xA048)
75 ("YI SYLLABLE POP" #xA049)
76 ("YI SYLLABLE PUT" #xA04A)
77 ("YI SYLLABLE PUX" #xA04B)
78 ("YI SYLLABLE PU" #xA04C)
79 ("YI SYLLABLE PUP" #xA04D)
80 ("YI SYLLABLE PURX" #xA04E)
81 ("YI SYLLABLE PUR" #xA04F)
82 ("YI SYLLABLE PYT" #xA050)
83 ("YI SYLLABLE PYX" #xA051)
84 ("YI SYLLABLE PY" #xA052)
85 ("YI SYLLABLE PYP" #xA053)
86 ("YI SYLLABLE PYRX" #xA054)
87 ("YI SYLLABLE PYR" #xA055)
88 ("YI SYLLABLE BBIT" #xA056)
89 ("YI SYLLABLE BBIX" #xA057)
90 ("YI SYLLABLE BBI" #xA058)
91 ("YI SYLLABLE BBIP" #xA059)
92 ("YI SYLLABLE BBIET" #xA05A)
93 ("YI SYLLABLE BBIEX" #xA05B)
94 ("YI SYLLABLE BBIE" #xA05C)
95 ("YI SYLLABLE BBIEP" #xA05D)
96 ("YI SYLLABLE BBAT" #xA05E)
97 ("YI SYLLABLE BBAX" #xA05F)
98 ("YI SYLLABLE BBA" #xA060)
99 ("YI SYLLABLE BBAP" #xA061)
100 ("YI SYLLABLE BBUOX" #xA062)
101 ("YI SYLLABLE BBUO" #xA063)
102 ("YI SYLLABLE BBUOP" #xA064)
103 ("YI SYLLABLE BBOT" #xA065)
104 ("YI SYLLABLE BBOX" #xA066)
105 ("YI SYLLABLE BBO" #xA067)
106 ("YI SYLLABLE BBOP" #xA068)
107 ("YI SYLLABLE BBEX" #xA069)
108 ("YI SYLLABLE BBE" #xA06A)
109 ("YI SYLLABLE BBEP" #xA06B)
110 ("YI SYLLABLE BBUT" #xA06C)
111 ("YI SYLLABLE BBUX" #xA06D)
112 ("YI SYLLABLE BBU" #xA06E)
113 ("YI SYLLABLE BBUP" #xA06F)
114 ("YI SYLLABLE BBURX" #xA070)
115 ("YI SYLLABLE BBUR" #xA071)
116 ("YI SYLLABLE BBYT" #xA072)
117 ("YI SYLLABLE BBYX" #xA073)
118 ("YI SYLLABLE BBY" #xA074)
119 ("YI SYLLABLE BBYP" #xA075)
120 ("YI SYLLABLE NBIT" #xA076)
121 ("YI SYLLABLE NBIX" #xA077)
122 ("YI SYLLABLE NBI" #xA078)
123 ("YI SYLLABLE NBIP" #xA079)
124 ("YI SYLLABLE NBIEX" #xA07A)
125 ("YI SYLLABLE NBIE" #xA07B)
126 ("YI SYLLABLE NBIEP" #xA07C)
127 ("YI SYLLABLE NBAT" #xA07D)
128 ("YI SYLLABLE NBAX" #xA07E)
129 ("YI SYLLABLE NBA" #xA07F)
130 ("YI SYLLABLE NBAP" #xA080)
131 ("YI SYLLABLE NBOT" #xA081)
132 ("YI SYLLABLE NBOX" #xA082)
133 ("YI SYLLABLE NBO" #xA083)
134 ("YI SYLLABLE NBOP" #xA084)
135 ("YI SYLLABLE NBUT" #xA085)
136 ("YI SYLLABLE NBUX" #xA086)
137 ("YI SYLLABLE NBU" #xA087)
138 ("YI SYLLABLE NBUP" #xA088)
139 ("YI SYLLABLE NBURX" #xA089)
140 ("YI SYLLABLE NBUR" #xA08A)
141 ("YI SYLLABLE NBYT" #xA08B)
142 ("YI SYLLABLE NBYX" #xA08C)
143 ("YI SYLLABLE NBY" #xA08D)
144 ("YI SYLLABLE NBYP" #xA08E)
145 ("YI SYLLABLE NBYRX" #xA08F)
146 ("YI SYLLABLE NBYR" #xA090)
147 ("YI SYLLABLE HMIT" #xA091)
148 ("YI SYLLABLE HMIX" #xA092)
149 ("YI SYLLABLE HMI" #xA093)
150 ("YI SYLLABLE HMIP" #xA094)
151 ("YI SYLLABLE HMIEX" #xA095)
152 ("YI SYLLABLE HMIE" #xA096)
153 ("YI SYLLABLE HMIEP" #xA097)
154 ("YI SYLLABLE HMAT" #xA098)
155 ("YI SYLLABLE HMAX" #xA099)
156 ("YI SYLLABLE HMA" #xA09A)
157 ("YI SYLLABLE HMAP" #xA09B)
158 ("YI SYLLABLE HMUOX" #xA09C)
159 ("YI SYLLABLE HMUO" #xA09D)
160 ("YI SYLLABLE HMUOP" #xA09E)
161 ("YI SYLLABLE HMOT" #xA09F)
162 ("YI SYLLABLE HMOX" #xA0A0)
163 ("YI SYLLABLE HMO" #xA0A1)
164 ("YI SYLLABLE HMOP" #xA0A2)
165 ("YI SYLLABLE HMUT" #xA0A3)
166 ("YI SYLLABLE HMUX" #xA0A4)
167 ("YI SYLLABLE HMU" #xA0A5)
168 ("YI SYLLABLE HMUP" #xA0A6)
169 ("YI SYLLABLE HMURX" #xA0A7)
170 ("YI SYLLABLE HMUR" #xA0A8)
171 ("YI SYLLABLE HMYX" #xA0A9)
172 ("YI SYLLABLE HMY" #xA0AA)
173 ("YI SYLLABLE HMYP" #xA0AB)
174 ("YI SYLLABLE HMYRX" #xA0AC)
175 ("YI SYLLABLE HMYR" #xA0AD)
176 ("YI SYLLABLE MIT" #xA0AE)
177 ("YI SYLLABLE MIX" #xA0AF)
178 ("YI SYLLABLE MI" #xA0B0)
179 ("YI SYLLABLE MIP" #xA0B1)
180 ("YI SYLLABLE MIEX" #xA0B2)
181 ("YI SYLLABLE MIE" #xA0B3)
182 ("YI SYLLABLE MIEP" #xA0B4)
183 ("YI SYLLABLE MAT" #xA0B5)
184 ("YI SYLLABLE MAX" #xA0B6)
185 ("YI SYLLABLE MA" #xA0B7)
186 ("YI SYLLABLE MAP" #xA0B8)
187 ("YI SYLLABLE MUOT" #xA0B9)
188 ("YI SYLLABLE MUOX" #xA0BA)
189 ("YI SYLLABLE MUO" #xA0BB)
190 ("YI SYLLABLE MUOP" #xA0BC)
191 ("YI SYLLABLE MOT" #xA0BD)
192 ("YI SYLLABLE MOX" #xA0BE)
193 ("YI SYLLABLE MO" #xA0BF)
194 ("YI SYLLABLE MOP" #xA0C0)
195 ("YI SYLLABLE MEX" #xA0C1)
196 ("YI SYLLABLE ME" #xA0C2)
197 ("YI SYLLABLE MUT" #xA0C3)
198 ("YI SYLLABLE MUX" #xA0C4)
199 ("YI SYLLABLE MU" #xA0C5)
200 ("YI SYLLABLE MUP" #xA0C6)
201 ("YI SYLLABLE MURX" #xA0C7)
202 ("YI SYLLABLE MUR" #xA0C8)
203 ("YI SYLLABLE MYT" #xA0C9)
204 ("YI SYLLABLE MYX" #xA0CA)
205 ("YI SYLLABLE MY" #xA0CB)
206 ("YI SYLLABLE MYP" #xA0CC)
207 ("YI SYLLABLE FIT" #xA0CD)
208 ("YI SYLLABLE FIX" #xA0CE)
209 ("YI SYLLABLE FI" #xA0CF)
210 ("YI SYLLABLE FIP" #xA0D0)
211 ("YI SYLLABLE FAT" #xA0D1)
212 ("YI SYLLABLE FAX" #xA0D2)
213 ("YI SYLLABLE FA" #xA0D3)
214 ("YI SYLLABLE FAP" #xA0D4)
215 ("YI SYLLABLE FOX" #xA0D5)
216 ("YI SYLLABLE FO" #xA0D6)
217 ("YI SYLLABLE FOP" #xA0D7)
218 ("YI SYLLABLE FUT" #xA0D8)
219 ("YI SYLLABLE FUX" #xA0D9)
220 ("YI SYLLABLE FU" #xA0DA)
221 ("YI SYLLABLE FUP" #xA0DB)
222 ("YI SYLLABLE FURX" #xA0DC)
223 ("YI SYLLABLE FUR" #xA0DD)
224 ("YI SYLLABLE FYT" #xA0DE)
225 ("YI SYLLABLE FYX" #xA0DF)
226 ("YI SYLLABLE FY" #xA0E0)
227 ("YI SYLLABLE FYP" #xA0E1)
228 ("YI SYLLABLE VIT" #xA0E2)
229 ("YI SYLLABLE VIX" #xA0E3)
230 ("YI SYLLABLE VI" #xA0E4)
231 ("YI SYLLABLE VIP" #xA0E5)
232 ("YI SYLLABLE VIET" #xA0E6)
233 ("YI SYLLABLE VIEX" #xA0E7)
234 ("YI SYLLABLE VIE" #xA0E8)
235 ("YI SYLLABLE VIEP" #xA0E9)
236 ("YI SYLLABLE VAT" #xA0EA)
237 ("YI SYLLABLE VAX" #xA0EB)
238 ("YI SYLLABLE VA" #xA0EC)
239 ("YI SYLLABLE VAP" #xA0ED)
240 ("YI SYLLABLE VOT" #xA0EE)
241 ("YI SYLLABLE VOX" #xA0EF)
242 ("YI SYLLABLE VO" #xA0F0)
243 ("YI SYLLABLE VOP" #xA0F1)
244 ("YI SYLLABLE VEX" #xA0F2)
245 ("YI SYLLABLE VEP" #xA0F3)
246 ("YI SYLLABLE VUT" #xA0F4)
247 ("YI SYLLABLE VUX" #xA0F5)
248 ("YI SYLLABLE VU" #xA0F6)
249 ("YI SYLLABLE VUP" #xA0F7)
250 ("YI SYLLABLE VURX" #xA0F8)
251 ("YI SYLLABLE VUR" #xA0F9)
252 ("YI SYLLABLE VYT" #xA0FA)
253 ("YI SYLLABLE VYX" #xA0FB)
254 ("YI SYLLABLE VY" #xA0FC)
255 ("YI SYLLABLE VYP" #xA0FD)
256 ("YI SYLLABLE VYRX" #xA0FE)
257 ("YI SYLLABLE VYR" #xA0FF)
258 ("YI SYLLABLE DIT" #xA100)
259 ("YI SYLLABLE DIX" #xA101)
260 ("YI SYLLABLE DI" #xA102)
261 ("YI SYLLABLE DIP" #xA103)
262 ("YI SYLLABLE DIEX" #xA104)
263 ("YI SYLLABLE DIE" #xA105)
264 ("YI SYLLABLE DIEP" #xA106)
265 ("YI SYLLABLE DAT" #xA107)
266 ("YI SYLLABLE DAX" #xA108)
267 ("YI SYLLABLE DA" #xA109)
268 ("YI SYLLABLE DAP" #xA10A)
269 ("YI SYLLABLE DUOX" #xA10B)
270 ("YI SYLLABLE DUO" #xA10C)
271 ("YI SYLLABLE DOT" #xA10D)
272 ("YI SYLLABLE DOX" #xA10E)
273 ("YI SYLLABLE DO" #xA10F)
274 ("YI SYLLABLE DOP" #xA110)
275 ("YI SYLLABLE DEX" #xA111)
276 ("YI SYLLABLE DE" #xA112)
277 ("YI SYLLABLE DEP" #xA113)
278 ("YI SYLLABLE DUT" #xA114)
279 ("YI SYLLABLE DUX" #xA115)
280 ("YI SYLLABLE DU" #xA116)
281 ("YI SYLLABLE DUP" #xA117)
282 ("YI SYLLABLE DURX" #xA118)
283 ("YI SYLLABLE DUR" #xA119)
284 ("YI SYLLABLE TIT" #xA11A)
285 ("YI SYLLABLE TIX" #xA11B)
286 ("YI SYLLABLE TI" #xA11C)
287 ("YI SYLLABLE TIP" #xA11D)
288 ("YI SYLLABLE TIEX" #xA11E)
289 ("YI SYLLABLE TIE" #xA11F)
290 ("YI SYLLABLE TIEP" #xA120)
291 ("YI SYLLABLE TAT" #xA121)
292 ("YI SYLLABLE TAX" #xA122)
293 ("YI SYLLABLE TA" #xA123)
294 ("YI SYLLABLE TAP" #xA124)
295 ("YI SYLLABLE TUOT" #xA125)
296 ("YI SYLLABLE TUOX" #xA126)
297 ("YI SYLLABLE TUO" #xA127)
298 ("YI SYLLABLE TUOP" #xA128)
299 ("YI SYLLABLE TOT" #xA129)
300 ("YI SYLLABLE TOX" #xA12A)
301 ("YI SYLLABLE TO" #xA12B)
302 ("YI SYLLABLE TOP" #xA12C)
303 ("YI SYLLABLE TEX" #xA12D)
304 ("YI SYLLABLE TE" #xA12E)
305 ("YI SYLLABLE TEP" #xA12F)
306 ("YI SYLLABLE TUT" #xA130)
307 ("YI SYLLABLE TUX" #xA131)
308 ("YI SYLLABLE TU" #xA132)
309 ("YI SYLLABLE TUP" #xA133)
310 ("YI SYLLABLE TURX" #xA134)
311 ("YI SYLLABLE TUR" #xA135)
312 ("YI SYLLABLE DDIT" #xA136)
313 ("YI SYLLABLE DDIX" #xA137)
314 ("YI SYLLABLE DDI" #xA138)
315 ("YI SYLLABLE DDIP" #xA139)
316 ("YI SYLLABLE DDIEX" #xA13A)
317 ("YI SYLLABLE DDIE" #xA13B)
318 ("YI SYLLABLE DDIEP" #xA13C)
319 ("YI SYLLABLE DDAT" #xA13D)
320 ("YI SYLLABLE DDAX" #xA13E)
321 ("YI SYLLABLE DDA" #xA13F)
322 ("YI SYLLABLE DDAP" #xA140)
323 ("YI SYLLABLE DDUOX" #xA141)
324 ("YI SYLLABLE DDUO" #xA142)
325 ("YI SYLLABLE DDUOP" #xA143)
326 ("YI SYLLABLE DDOT" #xA144)
327 ("YI SYLLABLE DDOX" #xA145)
328 ("YI SYLLABLE DDO" #xA146)
329 ("YI SYLLABLE DDOP" #xA147)
330 ("YI SYLLABLE DDEX" #xA148)
331 ("YI SYLLABLE DDE" #xA149)
332 ("YI SYLLABLE DDEP" #xA14A)
333 ("YI SYLLABLE DDUT" #xA14B)
334 ("YI SYLLABLE DDUX" #xA14C)
335 ("YI SYLLABLE DDU" #xA14D)
336 ("YI SYLLABLE DDUP" #xA14E)
337 ("YI SYLLABLE DDURX" #xA14F)
338 ("YI SYLLABLE DDUR" #xA150)
339 ("YI SYLLABLE NDIT" #xA151)
340 ("YI SYLLABLE NDIX" #xA152)
341 ("YI SYLLABLE NDI" #xA153)
342 ("YI SYLLABLE NDIP" #xA154)
343 ("YI SYLLABLE NDIEX" #xA155)
344 ("YI SYLLABLE NDIE" #xA156)
345 ("YI SYLLABLE NDAT" #xA157)
346 ("YI SYLLABLE NDAX" #xA158)
347 ("YI SYLLABLE NDA" #xA159)
348 ("YI SYLLABLE NDAP" #xA15A)
349 ("YI SYLLABLE NDOT" #xA15B)
350 ("YI SYLLABLE NDOX" #xA15C)
351 ("YI SYLLABLE NDO" #xA15D)
352 ("YI SYLLABLE NDOP" #xA15E)
353 ("YI SYLLABLE NDEX" #xA15F)
354 ("YI SYLLABLE NDE" #xA160)
355 ("YI SYLLABLE NDEP" #xA161)
356 ("YI SYLLABLE NDUT" #xA162)
357 ("YI SYLLABLE NDUX" #xA163)
358 ("YI SYLLABLE NDU" #xA164)
359 ("YI SYLLABLE NDUP" #xA165)
360 ("YI SYLLABLE NDURX" #xA166)
361 ("YI SYLLABLE NDUR" #xA167)
362 ("YI SYLLABLE HNIT" #xA168)
363 ("YI SYLLABLE HNIX" #xA169)
364 ("YI SYLLABLE HNI" #xA16A)
365 ("YI SYLLABLE HNIP" #xA16B)
366 ("YI SYLLABLE HNIET" #xA16C)
367 ("YI SYLLABLE HNIEX" #xA16D)
368 ("YI SYLLABLE HNIE" #xA16E)
369 ("YI SYLLABLE HNIEP" #xA16F)
370 ("YI SYLLABLE HNAT" #xA170)
371 ("YI SYLLABLE HNAX" #xA171)
372 ("YI SYLLABLE HNA" #xA172)
373 ("YI SYLLABLE HNAP" #xA173)
374 ("YI SYLLABLE HNUOX" #xA174)
375 ("YI SYLLABLE HNUO" #xA175)
376 ("YI SYLLABLE HNOT" #xA176)
377 ("YI SYLLABLE HNOX" #xA177)
378 ("YI SYLLABLE HNOP" #xA178)
379 ("YI SYLLABLE HNEX" #xA179)
380 ("YI SYLLABLE HNE" #xA17A)
381 ("YI SYLLABLE HNEP" #xA17B)
382 ("YI SYLLABLE HNUT" #xA17C)
383 ("YI SYLLABLE NIT" #xA17D)
384 ("YI SYLLABLE NIX" #xA17E)
385 ("YI SYLLABLE NI" #xA17F)
386 ("YI SYLLABLE NIP" #xA180)
387 ("YI SYLLABLE NIEX" #xA181)
388 ("YI SYLLABLE NIE" #xA182)
389 ("YI SYLLABLE NIEP" #xA183)
390 ("YI SYLLABLE NAX" #xA184)
391 ("YI SYLLABLE NA" #xA185)
392 ("YI SYLLABLE NAP" #xA186)
393 ("YI SYLLABLE NUOX" #xA187)
394 ("YI SYLLABLE NUO" #xA188)
395 ("YI SYLLABLE NUOP" #xA189)
396 ("YI SYLLABLE NOT" #xA18A)
397 ("YI SYLLABLE NOX" #xA18B)
398 ("YI SYLLABLE NO" #xA18C)
399 ("YI SYLLABLE NOP" #xA18D)
400 ("YI SYLLABLE NEX" #xA18E)
401 ("YI SYLLABLE NE" #xA18F)
402 ("YI SYLLABLE NEP" #xA190)
403 ("YI SYLLABLE NUT" #xA191)
404 ("YI SYLLABLE NUX" #xA192)
405 ("YI SYLLABLE NU" #xA193)
406 ("YI SYLLABLE NUP" #xA194)
407 ("YI SYLLABLE NURX" #xA195)
408 ("YI SYLLABLE NUR" #xA196)
409 ("YI SYLLABLE HLIT" #xA197)
410 ("YI SYLLABLE HLIX" #xA198)
411 ("YI SYLLABLE HLI" #xA199)
412 ("YI SYLLABLE HLIP" #xA19A)
413 ("YI SYLLABLE HLIEX" #xA19B)
414 ("YI SYLLABLE HLIE" #xA19C)
415 ("YI SYLLABLE HLIEP" #xA19D)
416 ("YI SYLLABLE HLAT" #xA19E)
417 ("YI SYLLABLE HLAX" #xA19F)
418 ("YI SYLLABLE HLA" #xA1A0)
419 ("YI SYLLABLE HLAP" #xA1A1)
420 ("YI SYLLABLE HLUOX" #xA1A2)
421 ("YI SYLLABLE HLUO" #xA1A3)
422 ("YI SYLLABLE HLUOP" #xA1A4)
423 ("YI SYLLABLE HLOX" #xA1A5)
424 ("YI SYLLABLE HLO" #xA1A6)
425 ("YI SYLLABLE HLOP" #xA1A7)
426 ("YI SYLLABLE HLEX" #xA1A8)
427 ("YI SYLLABLE HLE" #xA1A9)
428 ("YI SYLLABLE HLEP" #xA1AA)
429 ("YI SYLLABLE HLUT" #xA1AB)
430 ("YI SYLLABLE HLUX" #xA1AC)
431 ("YI SYLLABLE HLU" #xA1AD)
432 ("YI SYLLABLE HLUP" #xA1AE)
433 ("YI SYLLABLE HLURX" #xA1AF)
434 ("YI SYLLABLE HLUR" #xA1B0)
435 ("YI SYLLABLE HLYT" #xA1B1)
436 ("YI SYLLABLE HLYX" #xA1B2)
437 ("YI SYLLABLE HLY" #xA1B3)
438 ("YI SYLLABLE HLYP" #xA1B4)
439 ("YI SYLLABLE HLYRX" #xA1B5)
440 ("YI SYLLABLE HLYR" #xA1B6)
441 ("YI SYLLABLE LIT" #xA1B7)
442 ("YI SYLLABLE LIX" #xA1B8)
443 ("YI SYLLABLE LI" #xA1B9)
444 ("YI SYLLABLE LIP" #xA1BA)
445 ("YI SYLLABLE LIET" #xA1BB)
446 ("YI SYLLABLE LIEX" #xA1BC)
447 ("YI SYLLABLE LIE" #xA1BD)
448 ("YI SYLLABLE LIEP" #xA1BE)
449 ("YI SYLLABLE LAT" #xA1BF)
450 ("YI SYLLABLE LAX" #xA1C0)
451 ("YI SYLLABLE LA" #xA1C1)
452 ("YI SYLLABLE LAP" #xA1C2)
453 ("YI SYLLABLE LUOT" #xA1C3)
454 ("YI SYLLABLE LUOX" #xA1C4)
455 ("YI SYLLABLE LUO" #xA1C5)
456 ("YI SYLLABLE LUOP" #xA1C6)
457 ("YI SYLLABLE LOT" #xA1C7)
458 ("YI SYLLABLE LOX" #xA1C8)
459 ("YI SYLLABLE LO" #xA1C9)
460 ("YI SYLLABLE LOP" #xA1CA)
461 ("YI SYLLABLE LEX" #xA1CB)
462 ("YI SYLLABLE LE" #xA1CC)
463 ("YI SYLLABLE LEP" #xA1CD)
464 ("YI SYLLABLE LUT" #xA1CE)
465 ("YI SYLLABLE LUX" #xA1CF)
466 ("YI SYLLABLE LU" #xA1D0)
467 ("YI SYLLABLE LUP" #xA1D1)
468 ("YI SYLLABLE LURX" #xA1D2)
469 ("YI SYLLABLE LUR" #xA1D3)
470 ("YI SYLLABLE LYT" #xA1D4)
471 ("YI SYLLABLE LYX" #xA1D5)
472 ("YI SYLLABLE LY" #xA1D6)
473 ("YI SYLLABLE LYP" #xA1D7)
474 ("YI SYLLABLE LYRX" #xA1D8)
475 ("YI SYLLABLE LYR" #xA1D9)
476 ("YI SYLLABLE GIT" #xA1DA)
477 ("YI SYLLABLE GIX" #xA1DB)
478 ("YI SYLLABLE GI" #xA1DC)
479 ("YI SYLLABLE GIP" #xA1DD)
480 ("YI SYLLABLE GIET" #xA1DE)
481 ("YI SYLLABLE GIEX" #xA1DF)
482 ("YI SYLLABLE GIE" #xA1E0)
483 ("YI SYLLABLE GIEP" #xA1E1)
484 ("YI SYLLABLE GAT" #xA1E2)
485 ("YI SYLLABLE GAX" #xA1E3)
486 ("YI SYLLABLE GA" #xA1E4)
487 ("YI SYLLABLE GAP" #xA1E5)
488 ("YI SYLLABLE GUOT" #xA1E6)
489 ("YI SYLLABLE GUOX" #xA1E7)
490 ("YI SYLLABLE GUO" #xA1E8)
491 ("YI SYLLABLE GUOP" #xA1E9)
492 ("YI SYLLABLE GOT" #xA1EA)
493 ("YI SYLLABLE GOX" #xA1EB)
494 ("YI SYLLABLE GO" #xA1EC)
495 ("YI SYLLABLE GOP" #xA1ED)
496 ("YI SYLLABLE GET" #xA1EE)
497 ("YI SYLLABLE GEX" #xA1EF)
498 ("YI SYLLABLE GE" #xA1F0)
499 ("YI SYLLABLE GEP" #xA1F1)
500 ("YI SYLLABLE GUT" #xA1F2)
501 ("YI SYLLABLE GUX" #xA1F3)
502 ("YI SYLLABLE GU" #xA1F4)
503 ("YI SYLLABLE GUP" #xA1F5)
504 ("YI SYLLABLE GURX" #xA1F6)
505 ("YI SYLLABLE GUR" #xA1F7)
506 ("YI SYLLABLE KIT" #xA1F8)
507 ("YI SYLLABLE KIX" #xA1F9)
508 ("YI SYLLABLE KI" #xA1FA)
509 ("YI SYLLABLE KIP" #xA1FB)
510 ("YI SYLLABLE KIEX" #xA1FC)
511 ("YI SYLLABLE KIE" #xA1FD)
512 ("YI SYLLABLE KIEP" #xA1FE)
513 ("YI SYLLABLE KAT" #xA1FF)
514 ("YI SYLLABLE KAX" #xA200)
515 ("YI SYLLABLE KA" #xA201)
516 ("YI SYLLABLE KAP" #xA202)
517 ("YI SYLLABLE KUOX" #xA203)
518 ("YI SYLLABLE KUO" #xA204)
519 ("YI SYLLABLE KUOP" #xA205)
520 ("YI SYLLABLE KOT" #xA206)
521 ("YI SYLLABLE KOX" #xA207)
522 ("YI SYLLABLE KO" #xA208)
523 ("YI SYLLABLE KOP" #xA209)
524 ("YI SYLLABLE KET" #xA20A)
525 ("YI SYLLABLE KEX" #xA20B)
526 ("YI SYLLABLE KE" #xA20C)
527 ("YI SYLLABLE KEP" #xA20D)
528 ("YI SYLLABLE KUT" #xA20E)
529 ("YI SYLLABLE KUX" #xA20F)
530 ("YI SYLLABLE KU" #xA210)
531 ("YI SYLLABLE KUP" #xA211)
532 ("YI SYLLABLE KURX" #xA212)
533 ("YI SYLLABLE KUR" #xA213)
534 ("YI SYLLABLE GGIT" #xA214)
535 ("YI SYLLABLE GGIX" #xA215)
536 ("YI SYLLABLE GGI" #xA216)
537 ("YI SYLLABLE GGIEX" #xA217)
538 ("YI SYLLABLE GGIE" #xA218)
539 ("YI SYLLABLE GGIEP" #xA219)
540 ("YI SYLLABLE GGAT" #xA21A)
541 ("YI SYLLABLE GGAX" #xA21B)
542 ("YI SYLLABLE GGA" #xA21C)
543 ("YI SYLLABLE GGAP" #xA21D)
544 ("YI SYLLABLE GGUOT" #xA21E)
545 ("YI SYLLABLE GGUOX" #xA21F)
546 ("YI SYLLABLE GGUO" #xA220)
547 ("YI SYLLABLE GGUOP" #xA221)
548 ("YI SYLLABLE GGOT" #xA222)
549 ("YI SYLLABLE GGOX" #xA223)
550 ("YI SYLLABLE GGO" #xA224)
551 ("YI SYLLABLE GGOP" #xA225)
552 ("YI SYLLABLE GGET" #xA226)
553 ("YI SYLLABLE GGEX" #xA227)
554 ("YI SYLLABLE GGE" #xA228)
555 ("YI SYLLABLE GGEP" #xA229)
556 ("YI SYLLABLE GGUT" #xA22A)
557 ("YI SYLLABLE GGUX" #xA22B)
558 ("YI SYLLABLE GGU" #xA22C)
559 ("YI SYLLABLE GGUP" #xA22D)
560 ("YI SYLLABLE GGURX" #xA22E)
561 ("YI SYLLABLE GGUR" #xA22F)
562 ("YI SYLLABLE MGIEX" #xA230)
563 ("YI SYLLABLE MGIE" #xA231)
564 ("YI SYLLABLE MGAT" #xA232)
565 ("YI SYLLABLE MGAX" #xA233)
566 ("YI SYLLABLE MGA" #xA234)
567 ("YI SYLLABLE MGAP" #xA235)
568 ("YI SYLLABLE MGUOX" #xA236)
569 ("YI SYLLABLE MGUO" #xA237)
570 ("YI SYLLABLE MGUOP" #xA238)
571 ("YI SYLLABLE MGOT" #xA239)
572 ("YI SYLLABLE MGOX" #xA23A)
573 ("YI SYLLABLE MGO" #xA23B)
574 ("YI SYLLABLE MGOP" #xA23C)
575 ("YI SYLLABLE MGEX" #xA23D)
576 ("YI SYLLABLE MGE" #xA23E)
577 ("YI SYLLABLE MGEP" #xA23F)
578 ("YI SYLLABLE MGUT" #xA240)
579 ("YI SYLLABLE MGUX" #xA241)
580 ("YI SYLLABLE MGU" #xA242)
581 ("YI SYLLABLE MGUP" #xA243)
582 ("YI SYLLABLE MGURX" #xA244)
583 ("YI SYLLABLE MGUR" #xA245)
584 ("YI SYLLABLE HXIT" #xA246)
585 ("YI SYLLABLE HXIX" #xA247)
586 ("YI SYLLABLE HXI" #xA248)
587 ("YI SYLLABLE HXIP" #xA249)
588 ("YI SYLLABLE HXIET" #xA24A)
589 ("YI SYLLABLE HXIEX" #xA24B)
590 ("YI SYLLABLE HXIE" #xA24C)
591 ("YI SYLLABLE HXIEP" #xA24D)
592 ("YI SYLLABLE HXAT" #xA24E)
593 ("YI SYLLABLE HXAX" #xA24F)
594 ("YI SYLLABLE HXA" #xA250)
595 ("YI SYLLABLE HXAP" #xA251)
596 ("YI SYLLABLE HXUOT" #xA252)
597 ("YI SYLLABLE HXUOX" #xA253)
598 ("YI SYLLABLE HXUO" #xA254)
599 ("YI SYLLABLE HXUOP" #xA255)
600 ("YI SYLLABLE HXOT" #xA256)
601 ("YI SYLLABLE HXOX" #xA257)
602 ("YI SYLLABLE HXO" #xA258)
603 ("YI SYLLABLE HXOP" #xA259)
604 ("YI SYLLABLE HXEX" #xA25A)
605 ("YI SYLLABLE HXE" #xA25B)
606 ("YI SYLLABLE HXEP" #xA25C)
607 ("YI SYLLABLE NGIEX" #xA25D)
608 ("YI SYLLABLE NGIE" #xA25E)
609 ("YI SYLLABLE NGIEP" #xA25F)
610 ("YI SYLLABLE NGAT" #xA260)
611 ("YI SYLLABLE NGAX" #xA261)
612 ("YI SYLLABLE NGA" #xA262)
613 ("YI SYLLABLE NGAP" #xA263)
614 ("YI SYLLABLE NGUOT" #xA264)
615 ("YI SYLLABLE NGUOX" #xA265)
616 ("YI SYLLABLE NGUO" #xA266)
617 ("YI SYLLABLE NGOT" #xA267)
618 ("YI SYLLABLE NGOX" #xA268)
619 ("YI SYLLABLE NGO" #xA269)
620 ("YI SYLLABLE NGOP" #xA26A)
621 ("YI SYLLABLE NGEX" #xA26B)
622 ("YI SYLLABLE NGE" #xA26C)
623 ("YI SYLLABLE NGEP" #xA26D)
624 ("YI SYLLABLE HIT" #xA26E)
625 ("YI SYLLABLE HIEX" #xA26F)
626 ("YI SYLLABLE HIE" #xA270)
627 ("YI SYLLABLE HAT" #xA271)
628 ("YI SYLLABLE HAX" #xA272)
629 ("YI SYLLABLE HA" #xA273)
630 ("YI SYLLABLE HAP" #xA274)
631 ("YI SYLLABLE HUOT" #xA275)
632 ("YI SYLLABLE HUOX" #xA276)
633 ("YI SYLLABLE HUO" #xA277)
634 ("YI SYLLABLE HUOP" #xA278)
635 ("YI SYLLABLE HOT" #xA279)
636 ("YI SYLLABLE HOX" #xA27A)
637 ("YI SYLLABLE HO" #xA27B)
638 ("YI SYLLABLE HOP" #xA27C)
639 ("YI SYLLABLE HEX" #xA27D)
640 ("YI SYLLABLE HE" #xA27E)
641 ("YI SYLLABLE HEP" #xA27F)
642 ("YI SYLLABLE WAT" #xA280)
643 ("YI SYLLABLE WAX" #xA281)
644 ("YI SYLLABLE WA" #xA282)
645 ("YI SYLLABLE WAP" #xA283)
646 ("YI SYLLABLE WUOX" #xA284)
647 ("YI SYLLABLE WUO" #xA285)
648 ("YI SYLLABLE WUOP" #xA286)
649 ("YI SYLLABLE WOX" #xA287)
650 ("YI SYLLABLE WO" #xA288)
651 ("YI SYLLABLE WOP" #xA289)
652 ("YI SYLLABLE WEX" #xA28A)
653 ("YI SYLLABLE WE" #xA28B)
654 ("YI SYLLABLE WEP" #xA28C)
655 ("YI SYLLABLE ZIT" #xA28D)
656 ("YI SYLLABLE ZIX" #xA28E)
657 ("YI SYLLABLE ZI" #xA28F)
658 ("YI SYLLABLE ZIP" #xA290)
659 ("YI SYLLABLE ZIEX" #xA291)
660 ("YI SYLLABLE ZIE" #xA292)
661 ("YI SYLLABLE ZIEP" #xA293)
662 ("YI SYLLABLE ZAT" #xA294)
663 ("YI SYLLABLE ZAX" #xA295)
664 ("YI SYLLABLE ZA" #xA296)
665 ("YI SYLLABLE ZAP" #xA297)
666 ("YI SYLLABLE ZUOX" #xA298)
667 ("YI SYLLABLE ZUO" #xA299)
668 ("YI SYLLABLE ZUOP" #xA29A)
669 ("YI SYLLABLE ZOT" #xA29B)
670 ("YI SYLLABLE ZOX" #xA29C)
671 ("YI SYLLABLE ZO" #xA29D)
672 ("YI SYLLABLE ZOP" #xA29E)
673 ("YI SYLLABLE ZEX" #xA29F)
674 ("YI SYLLABLE ZE" #xA2A0)
675 ("YI SYLLABLE ZEP" #xA2A1)
676 ("YI SYLLABLE ZUT" #xA2A2)
677 ("YI SYLLABLE ZUX" #xA2A3)
678 ("YI SYLLABLE ZU" #xA2A4)
679 ("YI SYLLABLE ZUP" #xA2A5)
680 ("YI SYLLABLE ZURX" #xA2A6)
681 ("YI SYLLABLE ZUR" #xA2A7)
682 ("YI SYLLABLE ZYT" #xA2A8)
683 ("YI SYLLABLE ZYX" #xA2A9)
684 ("YI SYLLABLE ZY" #xA2AA)
685 ("YI SYLLABLE ZYP" #xA2AB)
686 ("YI SYLLABLE ZYRX" #xA2AC)
687 ("YI SYLLABLE ZYR" #xA2AD)
688 ("YI SYLLABLE CIT" #xA2AE)
689 ("YI SYLLABLE CIX" #xA2AF)
690 ("YI SYLLABLE CI" #xA2B0)
691 ("YI SYLLABLE CIP" #xA2B1)
692 ("YI SYLLABLE CIET" #xA2B2)
693 ("YI SYLLABLE CIEX" #xA2B3)
694 ("YI SYLLABLE CIE" #xA2B4)
695 ("YI SYLLABLE CIEP" #xA2B5)
696 ("YI SYLLABLE CAT" #xA2B6)
697 ("YI SYLLABLE CAX" #xA2B7)
698 ("YI SYLLABLE CA" #xA2B8)
699 ("YI SYLLABLE CAP" #xA2B9)
700 ("YI SYLLABLE CUOX" #xA2BA)
701 ("YI SYLLABLE CUO" #xA2BB)
702 ("YI SYLLABLE CUOP" #xA2BC)
703 ("YI SYLLABLE COT" #xA2BD)
704 ("YI SYLLABLE COX" #xA2BE)
705 ("YI SYLLABLE CO" #xA2BF)
706 ("YI SYLLABLE COP" #xA2C0)
707 ("YI SYLLABLE CEX" #xA2C1)
708 ("YI SYLLABLE CE" #xA2C2)
709 ("YI SYLLABLE CEP" #xA2C3)
710 ("YI SYLLABLE CUT" #xA2C4)
711 ("YI SYLLABLE CUX" #xA2C5)
712 ("YI SYLLABLE CU" #xA2C6)
713 ("YI SYLLABLE CUP" #xA2C7)
714 ("YI SYLLABLE CURX" #xA2C8)
715 ("YI SYLLABLE CUR" #xA2C9)
716 ("YI SYLLABLE CYT" #xA2CA)
717 ("YI SYLLABLE CYX" #xA2CB)
718 ("YI SYLLABLE CY" #xA2CC)
719 ("YI SYLLABLE CYP" #xA2CD)
720 ("YI SYLLABLE CYRX" #xA2CE)
721 ("YI SYLLABLE CYR" #xA2CF)
722 ("YI SYLLABLE ZZIT" #xA2D0)
723 ("YI SYLLABLE ZZIX" #xA2D1)
724 ("YI SYLLABLE ZZI" #xA2D2)
725 ("YI SYLLABLE ZZIP" #xA2D3)
726 ("YI SYLLABLE ZZIET" #xA2D4)
727 ("YI SYLLABLE ZZIEX" #xA2D5)
728 ("YI SYLLABLE ZZIE" #xA2D6)
729 ("YI SYLLABLE ZZIEP" #xA2D7)
730 ("YI SYLLABLE ZZAT" #xA2D8)
731 ("YI SYLLABLE ZZAX" #xA2D9)
732 ("YI SYLLABLE ZZA" #xA2DA)
733 ("YI SYLLABLE ZZAP" #xA2DB)
734 ("YI SYLLABLE ZZOX" #xA2DC)
735 ("YI SYLLABLE ZZO" #xA2DD)
736 ("YI SYLLABLE ZZOP" #xA2DE)
737 ("YI SYLLABLE ZZEX" #xA2DF)
738 ("YI SYLLABLE ZZE" #xA2E0)
739 ("YI SYLLABLE ZZEP" #xA2E1)
740 ("YI SYLLABLE ZZUX" #xA2E2)
741 ("YI SYLLABLE ZZU" #xA2E3)
742 ("YI SYLLABLE ZZUP" #xA2E4)
743 ("YI SYLLABLE ZZURX" #xA2E5)
744 ("YI SYLLABLE ZZUR" #xA2E6)
745 ("YI SYLLABLE ZZYT" #xA2E7)
746 ("YI SYLLABLE ZZYX" #xA2E8)
747 ("YI SYLLABLE ZZY" #xA2E9)
748 ("YI SYLLABLE ZZYP" #xA2EA)
749 ("YI SYLLABLE ZZYRX" #xA2EB)
750 ("YI SYLLABLE ZZYR" #xA2EC)
751 ("YI SYLLABLE NZIT" #xA2ED)
752 ("YI SYLLABLE NZIX" #xA2EE)
753 ("YI SYLLABLE NZI" #xA2EF)
754 ("YI SYLLABLE NZIP" #xA2F0)
755 ("YI SYLLABLE NZIEX" #xA2F1)
756 ("YI SYLLABLE NZIE" #xA2F2)
757 ("YI SYLLABLE NZIEP" #xA2F3)
758 ("YI SYLLABLE NZAT" #xA2F4)
759 ("YI SYLLABLE NZAX" #xA2F5)
760 ("YI SYLLABLE NZA" #xA2F6)
761 ("YI SYLLABLE NZAP" #xA2F7)
762 ("YI SYLLABLE NZUOX" #xA2F8)
763 ("YI SYLLABLE NZUO" #xA2F9)
764 ("YI SYLLABLE NZOX" #xA2FA)
765 ("YI SYLLABLE NZOP" #xA2FB)
766 ("YI SYLLABLE NZEX" #xA2FC)
767 ("YI SYLLABLE NZE" #xA2FD)
768 ("YI SYLLABLE NZUX" #xA2FE)
769 ("YI SYLLABLE NZU" #xA2FF)
770 ("YI SYLLABLE NZUP" #xA300)
771 ("YI SYLLABLE NZURX" #xA301)
772 ("YI SYLLABLE NZUR" #xA302)
773 ("YI SYLLABLE NZYT" #xA303)
774 ("YI SYLLABLE NZYX" #xA304)
775 ("YI SYLLABLE NZY" #xA305)
776 ("YI SYLLABLE NZYP" #xA306)
777 ("YI SYLLABLE NZYRX" #xA307)
778 ("YI SYLLABLE NZYR" #xA308)
779 ("YI SYLLABLE SIT" #xA309)
780 ("YI SYLLABLE SIX" #xA30A)
781 ("YI SYLLABLE SI" #xA30B)
782 ("YI SYLLABLE SIP" #xA30C)
783 ("YI SYLLABLE SIEX" #xA30D)
784 ("YI SYLLABLE SIE" #xA30E)
785 ("YI SYLLABLE SIEP" #xA30F)
786 ("YI SYLLABLE SAT" #xA310)
787 ("YI SYLLABLE SAX" #xA311)
788 ("YI SYLLABLE SA" #xA312)
789 ("YI SYLLABLE SAP" #xA313)
790 ("YI SYLLABLE SUOX" #xA314)
791 ("YI SYLLABLE SUO" #xA315)
792 ("YI SYLLABLE SUOP" #xA316)
793 ("YI SYLLABLE SOT" #xA317)
794 ("YI SYLLABLE SOX" #xA318)
795 ("YI SYLLABLE SO" #xA319)
796 ("YI SYLLABLE SOP" #xA31A)
797 ("YI SYLLABLE SEX" #xA31B)
798 ("YI SYLLABLE SE" #xA31C)
799 ("YI SYLLABLE SEP" #xA31D)
800 ("YI SYLLABLE SUT" #xA31E)
801 ("YI SYLLABLE SUX" #xA31F)
802 ("YI SYLLABLE SU" #xA320)
803 ("YI SYLLABLE SUP" #xA321)
804 ("YI SYLLABLE SURX" #xA322)
805 ("YI SYLLABLE SUR" #xA323)
806 ("YI SYLLABLE SYT" #xA324)
807 ("YI SYLLABLE SYX" #xA325)
808 ("YI SYLLABLE SY" #xA326)
809 ("YI SYLLABLE SYP" #xA327)
810 ("YI SYLLABLE SYRX" #xA328)
811 ("YI SYLLABLE SYR" #xA329)
812 ("YI SYLLABLE SSIT" #xA32A)
813 ("YI SYLLABLE SSIX" #xA32B)
814 ("YI SYLLABLE SSI" #xA32C)
815 ("YI SYLLABLE SSIP" #xA32D)
816 ("YI SYLLABLE SSIEX" #xA32E)
817 ("YI SYLLABLE SSIE" #xA32F)
818 ("YI SYLLABLE SSIEP" #xA330)
819 ("YI SYLLABLE SSAT" #xA331)
820 ("YI SYLLABLE SSAX" #xA332)
821 ("YI SYLLABLE SSA" #xA333)
822 ("YI SYLLABLE SSAP" #xA334)
823 ("YI SYLLABLE SSOT" #xA335)
824 ("YI SYLLABLE SSOX" #xA336)
825 ("YI SYLLABLE SSO" #xA337)
826 ("YI SYLLABLE SSOP" #xA338)
827 ("YI SYLLABLE SSEX" #xA339)
828 ("YI SYLLABLE SSE" #xA33A)
829 ("YI SYLLABLE SSEP" #xA33B)
830 ("YI SYLLABLE SSUT" #xA33C)
831 ("YI SYLLABLE SSUX" #xA33D)
832 ("YI SYLLABLE SSU" #xA33E)
833 ("YI SYLLABLE SSUP" #xA33F)
834 ("YI SYLLABLE SSYT" #xA340)
835 ("YI SYLLABLE SSYX" #xA341)
836 ("YI SYLLABLE SSY" #xA342)
837 ("YI SYLLABLE SSYP" #xA343)
838 ("YI SYLLABLE SSYRX" #xA344)
839 ("YI SYLLABLE SSYR" #xA345)
840 ("YI SYLLABLE ZHAT" #xA346)
841 ("YI SYLLABLE ZHAX" #xA347)
842 ("YI SYLLABLE ZHA" #xA348)
843 ("YI SYLLABLE ZHAP" #xA349)
844 ("YI SYLLABLE ZHUOX" #xA34A)
845 ("YI SYLLABLE ZHUO" #xA34B)
846 ("YI SYLLABLE ZHUOP" #xA34C)
847 ("YI SYLLABLE ZHOT" #xA34D)
848 ("YI SYLLABLE ZHOX" #xA34E)
849 ("YI SYLLABLE ZHO" #xA34F)
850 ("YI SYLLABLE ZHOP" #xA350)
851 ("YI SYLLABLE ZHET" #xA351)
852 ("YI SYLLABLE ZHEX" #xA352)
853 ("YI SYLLABLE ZHE" #xA353)
854 ("YI SYLLABLE ZHEP" #xA354)
855 ("YI SYLLABLE ZHUT" #xA355)
856 ("YI SYLLABLE ZHUX" #xA356)
857 ("YI SYLLABLE ZHU" #xA357)
858 ("YI SYLLABLE ZHUP" #xA358)
859 ("YI SYLLABLE ZHURX" #xA359)
860 ("YI SYLLABLE ZHUR" #xA35A)
861 ("YI SYLLABLE ZHYT" #xA35B)
862 ("YI SYLLABLE ZHYX" #xA35C)
863 ("YI SYLLABLE ZHY" #xA35D)
864 ("YI SYLLABLE ZHYP" #xA35E)
865 ("YI SYLLABLE ZHYRX" #xA35F)
866 ("YI SYLLABLE ZHYR" #xA360)
867 ("YI SYLLABLE CHAT" #xA361)
868 ("YI SYLLABLE CHAX" #xA362)
869 ("YI SYLLABLE CHA" #xA363)
870 ("YI SYLLABLE CHAP" #xA364)
871 ("YI SYLLABLE CHUOT" #xA365)
872 ("YI SYLLABLE CHUOX" #xA366)
873 ("YI SYLLABLE CHUO" #xA367)
874 ("YI SYLLABLE CHUOP" #xA368)
875 ("YI SYLLABLE CHOT" #xA369)
876 ("YI SYLLABLE CHOX" #xA36A)
877 ("YI SYLLABLE CHO" #xA36B)
878 ("YI SYLLABLE CHOP" #xA36C)
879 ("YI SYLLABLE CHET" #xA36D)
880 ("YI SYLLABLE CHEX" #xA36E)
881 ("YI SYLLABLE CHE" #xA36F)
882 ("YI SYLLABLE CHEP" #xA370)
883 ("YI SYLLABLE CHUX" #xA371)
884 ("YI SYLLABLE CHU" #xA372)
885 ("YI SYLLABLE CHUP" #xA373)
886 ("YI SYLLABLE CHURX" #xA374)
887 ("YI SYLLABLE CHUR" #xA375)
888 ("YI SYLLABLE CHYT" #xA376)
889 ("YI SYLLABLE CHYX" #xA377)
890 ("YI SYLLABLE CHY" #xA378)
891 ("YI SYLLABLE CHYP" #xA379)
892 ("YI SYLLABLE CHYRX" #xA37A)
893 ("YI SYLLABLE CHYR" #xA37B)
894 ("YI SYLLABLE RRAX" #xA37C)
895 ("YI SYLLABLE RRA" #xA37D)
896 ("YI SYLLABLE RRUOX" #xA37E)
897 ("YI SYLLABLE RRUO" #xA37F)
898 ("YI SYLLABLE RROT" #xA380)
899 ("YI SYLLABLE RROX" #xA381)
900 ("YI SYLLABLE RRO" #xA382)
901 ("YI SYLLABLE RROP" #xA383)
902 ("YI SYLLABLE RRET" #xA384)
903 ("YI SYLLABLE RREX" #xA385)
904 ("YI SYLLABLE RRE" #xA386)
905 ("YI SYLLABLE RREP" #xA387)
906 ("YI SYLLABLE RRUT" #xA388)
907 ("YI SYLLABLE RRUX" #xA389)
908 ("YI SYLLABLE RRU" #xA38A)
909 ("YI SYLLABLE RRUP" #xA38B)
910 ("YI SYLLABLE RRURX" #xA38C)
911 ("YI SYLLABLE RRUR" #xA38D)
912 ("YI SYLLABLE RRYT" #xA38E)
913 ("YI SYLLABLE RRYX" #xA38F)
914 ("YI SYLLABLE RRY" #xA390)
915 ("YI SYLLABLE RRYP" #xA391)
916 ("YI SYLLABLE RRYRX" #xA392)
917 ("YI SYLLABLE RRYR" #xA393)
918 ("YI SYLLABLE NRAT" #xA394)
919 ("YI SYLLABLE NRAX" #xA395)
920 ("YI SYLLABLE NRA" #xA396)
921 ("YI SYLLABLE NRAP" #xA397)
922 ("YI SYLLABLE NROX" #xA398)
923 ("YI SYLLABLE NRO" #xA399)
924 ("YI SYLLABLE NROP" #xA39A)
925 ("YI SYLLABLE NRET" #xA39B)
926 ("YI SYLLABLE NREX" #xA39C)
927 ("YI SYLLABLE NRE" #xA39D)
928 ("YI SYLLABLE NREP" #xA39E)
929 ("YI SYLLABLE NRUT" #xA39F)
930 ("YI SYLLABLE NRUX" #xA3A0)
931 ("YI SYLLABLE NRU" #xA3A1)
932 ("YI SYLLABLE NRUP" #xA3A2)
933 ("YI SYLLABLE NRURX" #xA3A3)
934 ("YI SYLLABLE NRUR" #xA3A4)
935 ("YI SYLLABLE NRYT" #xA3A5)
936 ("YI SYLLABLE NRYX" #xA3A6)
937 ("YI SYLLABLE NRY" #xA3A7)
938 ("YI SYLLABLE NRYP" #xA3A8)
939 ("YI SYLLABLE NRYRX" #xA3A9)
940 ("YI SYLLABLE NRYR" #xA3AA)
941 ("YI SYLLABLE SHAT" #xA3AB)
942 ("YI SYLLABLE SHAX" #xA3AC)
943 ("YI SYLLABLE SHA" #xA3AD)
944 ("YI SYLLABLE SHAP" #xA3AE)
945 ("YI SYLLABLE SHUOX" #xA3AF)
946 ("YI SYLLABLE SHUO" #xA3B0)
947 ("YI SYLLABLE SHUOP" #xA3B1)
948 ("YI SYLLABLE SHOT" #xA3B2)
949 ("YI SYLLABLE SHOX" #xA3B3)
950 ("YI SYLLABLE SHO" #xA3B4)
951 ("YI SYLLABLE SHOP" #xA3B5)
952 ("YI SYLLABLE SHET" #xA3B6)
953 ("YI SYLLABLE SHEX" #xA3B7)
954 ("YI SYLLABLE SHE" #xA3B8)
955 ("YI SYLLABLE SHEP" #xA3B9)
956 ("YI SYLLABLE SHUT" #xA3BA)
957 ("YI SYLLABLE SHUX" #xA3BB)
958 ("YI SYLLABLE SHU" #xA3BC)
959 ("YI SYLLABLE SHUP" #xA3BD)
960 ("YI SYLLABLE SHURX" #xA3BE)
961 ("YI SYLLABLE SHUR" #xA3BF)
962 ("YI SYLLABLE SHYT" #xA3C0)
963 ("YI SYLLABLE SHYX" #xA3C1)
964 ("YI SYLLABLE SHY" #xA3C2)
965 ("YI SYLLABLE SHYP" #xA3C3)
966 ("YI SYLLABLE SHYRX" #xA3C4)
967 ("YI SYLLABLE SHYR" #xA3C5)
968 ("YI SYLLABLE RAT" #xA3C6)
969 ("YI SYLLABLE RAX" #xA3C7)
970 ("YI SYLLABLE RA" #xA3C8)
971 ("YI SYLLABLE RAP" #xA3C9)
972 ("YI SYLLABLE RUOX" #xA3CA)
973 ("YI SYLLABLE RUO" #xA3CB)
974 ("YI SYLLABLE RUOP" #xA3CC)
975 ("YI SYLLABLE ROT" #xA3CD)
976 ("YI SYLLABLE ROX" #xA3CE)
977 ("YI SYLLABLE RO" #xA3CF)
978 ("YI SYLLABLE ROP" #xA3D0)
979 ("YI SYLLABLE REX" #xA3D1)
980 ("YI SYLLABLE RE" #xA3D2)
981 ("YI SYLLABLE REP" #xA3D3)
982 ("YI SYLLABLE RUT" #xA3D4)
983 ("YI SYLLABLE RUX" #xA3D5)
984 ("YI SYLLABLE RU" #xA3D6)
985 ("YI SYLLABLE RUP" #xA3D7)
986 ("YI SYLLABLE RURX" #xA3D8)
987 ("YI SYLLABLE RUR" #xA3D9)
988 ("YI SYLLABLE RYT" #xA3DA)
989 ("YI SYLLABLE RYX" #xA3DB)
990 ("YI SYLLABLE RY" #xA3DC)
991 ("YI SYLLABLE RYP" #xA3DD)
992 ("YI SYLLABLE RYRX" #xA3DE)
993 ("YI SYLLABLE RYR" #xA3DF)
994 ("YI SYLLABLE JIT" #xA3E0)
995 ("YI SYLLABLE JIX" #xA3E1)
996 ("YI SYLLABLE JI" #xA3E2)
997 ("YI SYLLABLE JIP" #xA3E3)
998 ("YI SYLLABLE JIET" #xA3E4)
999 ("YI SYLLABLE JIEX" #xA3E5)
1000 ("YI SYLLABLE JIE" #xA3E6)
1001 ("YI SYLLABLE JIEP" #xA3E7)
1002 ("YI SYLLABLE JUOT" #xA3E8)
1003 ("YI SYLLABLE JUOX" #xA3E9)
1004 ("YI SYLLABLE JUO" #xA3EA)
1005 ("YI SYLLABLE JUOP" #xA3EB)
1006 ("YI SYLLABLE JOT" #xA3EC)
1007 ("YI SYLLABLE JOX" #xA3ED)
1008 ("YI SYLLABLE JO" #xA3EE)
1009 ("YI SYLLABLE JOP" #xA3EF)
1010 ("YI SYLLABLE JUT" #xA3F0)
1011 ("YI SYLLABLE JUX" #xA3F1)
1012 ("YI SYLLABLE JU" #xA3F2)
1013 ("YI SYLLABLE JUP" #xA3F3)
1014 ("YI SYLLABLE JURX" #xA3F4)
1015 ("YI SYLLABLE JUR" #xA3F5)
1016 ("YI SYLLABLE JYT" #xA3F6)
1017 ("YI SYLLABLE JYX" #xA3F7)
1018 ("YI SYLLABLE JY" #xA3F8)
1019 ("YI SYLLABLE JYP" #xA3F9)
1020 ("YI SYLLABLE JYRX" #xA3FA)
1021 ("YI SYLLABLE JYR" #xA3FB)
1022 ("YI SYLLABLE QIT" #xA3FC)
1023 ("YI SYLLABLE QIX" #xA3FD)
1024 ("YI SYLLABLE QI" #xA3FE)
1025 ("YI SYLLABLE QIP" #xA3FF)
1026 ("YI SYLLABLE QIET" #xA400)
1027 ("YI SYLLABLE QIEX" #xA401)
1028 ("YI SYLLABLE QIE" #xA402)
1029 ("YI SYLLABLE QIEP" #xA403)
1030 ("YI SYLLABLE QUOT" #xA404)
1031 ("YI SYLLABLE QUOX" #xA405)
1032 ("YI SYLLABLE QUO" #xA406)
1033 ("YI SYLLABLE QUOP" #xA407)
1034 ("YI SYLLABLE QOT" #xA408)
1035 ("YI SYLLABLE QOX" #xA409)
1036 ("YI SYLLABLE QO" #xA40A)
1037 ("YI SYLLABLE QOP" #xA40B)
1038 ("YI SYLLABLE QUT" #xA40C)
1039 ("YI SYLLABLE QUX" #xA40D)
1040 ("YI SYLLABLE QU" #xA40E)
1041 ("YI SYLLABLE QUP" #xA40F)
1042 ("YI SYLLABLE QURX" #xA410)
1043 ("YI SYLLABLE QUR" #xA411)
1044 ("YI SYLLABLE QYT" #xA412)
1045 ("YI SYLLABLE QYX" #xA413)
1046 ("YI SYLLABLE QY" #xA414)
1047 ("YI SYLLABLE QYP" #xA415)
1048 ("YI SYLLABLE QYRX" #xA416)
1049 ("YI SYLLABLE QYR" #xA417)
1050 ("YI SYLLABLE JJIT" #xA418)
1051 ("YI SYLLABLE JJIX" #xA419)
1052 ("YI SYLLABLE JJI" #xA41A)
1053 ("YI SYLLABLE JJIP" #xA41B)
1054 ("YI SYLLABLE JJIET" #xA41C)
1055 ("YI SYLLABLE JJIEX" #xA41D)
1056 ("YI SYLLABLE JJIE" #xA41E)
1057 ("YI SYLLABLE JJIEP" #xA41F)
1058 ("YI SYLLABLE JJUOX" #xA420)
1059 ("YI SYLLABLE JJUO" #xA421)
1060 ("YI SYLLABLE JJUOP" #xA422)
1061 ("YI SYLLABLE JJOT" #xA423)
1062 ("YI SYLLABLE JJOX" #xA424)
1063 ("YI SYLLABLE JJO" #xA425)
1064 ("YI SYLLABLE JJOP" #xA426)
1065 ("YI SYLLABLE JJUT" #xA427)
1066 ("YI SYLLABLE JJUX" #xA428)
1067 ("YI SYLLABLE JJU" #xA429)
1068 ("YI SYLLABLE JJUP" #xA42A)
1069 ("YI SYLLABLE JJURX" #xA42B)
1070 ("YI SYLLABLE JJUR" #xA42C)
1071 ("YI SYLLABLE JJYT" #xA42D)
1072 ("YI SYLLABLE JJYX" #xA42E)
1073 ("YI SYLLABLE JJY" #xA42F)
1074 ("YI SYLLABLE JJYP" #xA430)
1075 ("YI SYLLABLE NJIT" #xA431)
1076 ("YI SYLLABLE NJIX" #xA432)
1077 ("YI SYLLABLE NJI" #xA433)
1078 ("YI SYLLABLE NJIP" #xA434)
1079 ("YI SYLLABLE NJIET" #xA435)
1080 ("YI SYLLABLE NJIEX" #xA436)
1081 ("YI SYLLABLE NJIE" #xA437)
1082 ("YI SYLLABLE NJIEP" #xA438)
1083 ("YI SYLLABLE NJUOX" #xA439)
1084 ("YI SYLLABLE NJUO" #xA43A)
1085 ("YI SYLLABLE NJOT" #xA43B)
1086 ("YI SYLLABLE NJOX" #xA43C)
1087 ("YI SYLLABLE NJO" #xA43D)
1088 ("YI SYLLABLE NJOP" #xA43E)
1089 ("YI SYLLABLE NJUX" #xA43F)
1090 ("YI SYLLABLE NJU" #xA440)
1091 ("YI SYLLABLE NJUP" #xA441)
1092 ("YI SYLLABLE NJURX" #xA442)
1093 ("YI SYLLABLE NJUR" #xA443)
1094 ("YI SYLLABLE NJYT" #xA444)
1095 ("YI SYLLABLE NJYX" #xA445)
1096 ("YI SYLLABLE NJY" #xA446)
1097 ("YI SYLLABLE NJYP" #xA447)
1098 ("YI SYLLABLE NJYRX" #xA448)
1099 ("YI SYLLABLE NJYR" #xA449)
1100 ("YI SYLLABLE NYIT" #xA44A)
1101 ("YI SYLLABLE NYIX" #xA44B)
1102 ("YI SYLLABLE NYI" #xA44C)
1103 ("YI SYLLABLE NYIP" #xA44D)
1104 ("YI SYLLABLE NYIET" #xA44E)
1105 ("YI SYLLABLE NYIEX" #xA44F)
1106 ("YI SYLLABLE NYIE" #xA450)
1107 ("YI SYLLABLE NYIEP" #xA451)
1108 ("YI SYLLABLE NYUOX" #xA452)
1109 ("YI SYLLABLE NYUO" #xA453)
1110 ("YI SYLLABLE NYUOP" #xA454)
1111 ("YI SYLLABLE NYOT" #xA455)
1112 ("YI SYLLABLE NYOX" #xA456)
1113 ("YI SYLLABLE NYO" #xA457)
1114 ("YI SYLLABLE NYOP" #xA458)
1115 ("YI SYLLABLE NYUT" #xA459)
1116 ("YI SYLLABLE NYUX" #xA45A)
1117 ("YI SYLLABLE NYU" #xA45B)
1118 ("YI SYLLABLE NYUP" #xA45C)
1119 ("YI SYLLABLE XIT" #xA45D)
1120 ("YI SYLLABLE XIX" #xA45E)
1121 ("YI SYLLABLE XI" #xA45F)
1122 ("YI SYLLABLE XIP" #xA460)
1123 ("YI SYLLABLE XIET" #xA461)
1124 ("YI SYLLABLE XIEX" #xA462)
1125 ("YI SYLLABLE XIE" #xA463)
1126 ("YI SYLLABLE XIEP" #xA464)
1127 ("YI SYLLABLE XUOX" #xA465)
1128 ("YI SYLLABLE XUO" #xA466)
1129 ("YI SYLLABLE XOT" #xA467)
1130 ("YI SYLLABLE XOX" #xA468)
1131 ("YI SYLLABLE XO" #xA469)
1132 ("YI SYLLABLE XOP" #xA46A)
1133 ("YI SYLLABLE XYT" #xA46B)
1134 ("YI SYLLABLE XYX" #xA46C)
1135 ("YI SYLLABLE XY" #xA46D)
1136 ("YI SYLLABLE XYP" #xA46E)
1137 ("YI SYLLABLE XYRX" #xA46F)
1138 ("YI SYLLABLE XYR" #xA470)
1139 ("YI SYLLABLE YIT" #xA471)
1140 ("YI SYLLABLE YIX" #xA472)
1141 ("YI SYLLABLE YI" #xA473)
1142 ("YI SYLLABLE YIP" #xA474)
1143 ("YI SYLLABLE YIET" #xA475)
1144 ("YI SYLLABLE YIEX" #xA476)
1145 ("YI SYLLABLE YIE" #xA477)
1146 ("YI SYLLABLE YIEP" #xA478)
1147 ("YI SYLLABLE YUOT" #xA479)
1148 ("YI SYLLABLE YUOX" #xA47A)
1149 ("YI SYLLABLE YUO" #xA47B)
1150 ("YI SYLLABLE YUOP" #xA47C)
1151 ("YI SYLLABLE YOT" #xA47D)
1152 ("YI SYLLABLE YOX" #xA47E)
1153 ("YI SYLLABLE YO" #xA47F)
1154 ("YI SYLLABLE YOP" #xA480)
1155 ("YI SYLLABLE YUT" #xA481)
1156 ("YI SYLLABLE YUX" #xA482)
1157 ("YI SYLLABLE YU" #xA483)
1158 ("YI SYLLABLE YUP" #xA484)
1159 ("YI SYLLABLE YURX" #xA485)
1160 ("YI SYLLABLE YUR" #xA486)
1161 ("YI SYLLABLE YYT" #xA487)
1162 ("YI SYLLABLE YYX" #xA488)
1163 ("YI SYLLABLE YY" #xA489)
1164 ("YI SYLLABLE YYP" #xA48A)
1165 ("YI SYLLABLE YYRX" #xA48B)
1166 ("YI SYLLABLE YYR" #xA48C)
1167 ))
diff --git a/lisp/nxml/char-name/unicode/0A490-0A4CF.el b/lisp/nxml/char-name/unicode/0A490-0A4CF.el
new file mode 100644
index 00000000000..16c8656b48d
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/0A490-0A4CF.el
@@ -0,0 +1,57 @@
1(nxml-define-char-name-set 'yi-radicals
2 '(("YI RADICAL QOT" #xA490)
3 ("YI RADICAL LI" #xA491)
4 ("YI RADICAL KIT" #xA492)
5 ("YI RADICAL NYIP" #xA493)
6 ("YI RADICAL CYP" #xA494)
7 ("YI RADICAL SSI" #xA495)
8 ("YI RADICAL GGOP" #xA496)
9 ("YI RADICAL GEP" #xA497)
10 ("YI RADICAL MI" #xA498)
11 ("YI RADICAL HXIT" #xA499)
12 ("YI RADICAL LYR" #xA49A)
13 ("YI RADICAL BBUT" #xA49B)
14 ("YI RADICAL MOP" #xA49C)
15 ("YI RADICAL YO" #xA49D)
16 ("YI RADICAL PUT" #xA49E)
17 ("YI RADICAL HXUO" #xA49F)
18 ("YI RADICAL TAT" #xA4A0)
19 ("YI RADICAL GA" #xA4A1)
20 ("YI RADICAL ZUP" #xA4A2)
21 ("YI RADICAL CYT" #xA4A3)
22 ("YI RADICAL DDUR" #xA4A4)
23 ("YI RADICAL BUR" #xA4A5)
24 ("YI RADICAL GGUO" #xA4A6)
25 ("YI RADICAL NYOP" #xA4A7)
26 ("YI RADICAL TU" #xA4A8)
27 ("YI RADICAL OP" #xA4A9)
28 ("YI RADICAL JJUT" #xA4AA)
29 ("YI RADICAL ZOT" #xA4AB)
30 ("YI RADICAL PYT" #xA4AC)
31 ("YI RADICAL HMO" #xA4AD)
32 ("YI RADICAL YIT" #xA4AE)
33 ("YI RADICAL VUR" #xA4AF)
34 ("YI RADICAL SHY" #xA4B0)
35 ("YI RADICAL VEP" #xA4B1)
36 ("YI RADICAL ZA" #xA4B2)
37 ("YI RADICAL JO" #xA4B3)
38 ("YI RADICAL NZUP" #xA4B4)
39 ("YI RADICAL JJY" #xA4B5)
40 ("YI RADICAL GOT" #xA4B6)
41 ("YI RADICAL JJIE" #xA4B7)
42 ("YI RADICAL WO" #xA4B8)
43 ("YI RADICAL DU" #xA4B9)
44 ("YI RADICAL SHUR" #xA4BA)
45 ("YI RADICAL LIE" #xA4BB)
46 ("YI RADICAL CY" #xA4BC)
47 ("YI RADICAL CUOP" #xA4BD)
48 ("YI RADICAL CIP" #xA4BE)
49 ("YI RADICAL HXOP" #xA4BF)
50 ("YI RADICAL SHAT" #xA4C0)
51 ("YI RADICAL ZUR" #xA4C1)
52 ("YI RADICAL SHOP" #xA4C2)
53 ("YI RADICAL CHE" #xA4C3)
54 ("YI RADICAL ZZIET" #xA4C4)
55 ("YI RADICAL NBIE" #xA4C5)
56 ("YI RADICAL KE" #xA4C6)
57 ))
diff --git a/lisp/nxml/char-name/unicode/0FB00-0FB4F.el b/lisp/nxml/char-name/unicode/0FB00-0FB4F.el
new file mode 100644
index 00000000000..36818c1e130
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/0FB00-0FB4F.el
@@ -0,0 +1,60 @@
1(nxml-define-char-name-set 'alphabetic-presentation-forms
2 '(("LATIN SMALL LIGATURE FF" #xFB00)
3 ("LATIN SMALL LIGATURE FI" #xFB01)
4 ("LATIN SMALL LIGATURE FL" #xFB02)
5 ("LATIN SMALL LIGATURE FFI" #xFB03)
6 ("LATIN SMALL LIGATURE FFL" #xFB04)
7 ("LATIN SMALL LIGATURE LONG S T" #xFB05)
8 ("LATIN SMALL LIGATURE ST" #xFB06)
9 ("ARMENIAN SMALL LIGATURE MEN NOW" #xFB13)
10 ("ARMENIAN SMALL LIGATURE MEN ECH" #xFB14)
11 ("ARMENIAN SMALL LIGATURE MEN INI" #xFB15)
12 ("ARMENIAN SMALL LIGATURE VEW NOW" #xFB16)
13 ("ARMENIAN SMALL LIGATURE MEN XEH" #xFB17)
14 ("HEBREW LETTER YOD WITH HIRIQ" #xFB1D)
15 ("HEBREW POINT JUDEO-SPANISH VARIKA" #xFB1E)
16 ("HEBREW LIGATURE YIDDISH YOD YOD PATAH" #xFB1F)
17 ("HEBREW LETTER ALTERNATIVE AYIN" #xFB20)
18 ("HEBREW LETTER WIDE ALEF" #xFB21)
19 ("HEBREW LETTER WIDE DALET" #xFB22)
20 ("HEBREW LETTER WIDE HE" #xFB23)
21 ("HEBREW LETTER WIDE KAF" #xFB24)
22 ("HEBREW LETTER WIDE LAMED" #xFB25)
23 ("HEBREW LETTER WIDE FINAL MEM" #xFB26)
24 ("HEBREW LETTER WIDE RESH" #xFB27)
25 ("HEBREW LETTER WIDE TAV" #xFB28)
26 ("HEBREW LETTER ALTERNATIVE PLUS SIGN" #xFB29)
27 ("HEBREW LETTER SHIN WITH SHIN DOT" #xFB2A)
28 ("HEBREW LETTER SHIN WITH SIN DOT" #xFB2B)
29 ("HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT" #xFB2C)
30 ("HEBREW LETTER SHIN WITH DAGESH AND SIN DOT" #xFB2D)
31 ("HEBREW LETTER ALEF WITH PATAH" #xFB2E)
32 ("HEBREW LETTER ALEF WITH QAMATS" #xFB2F)
33 ("HEBREW LETTER ALEF WITH MAPIQ" #xFB30)
34 ("HEBREW LETTER BET WITH DAGESH" #xFB31)
35 ("HEBREW LETTER GIMEL WITH DAGESH" #xFB32)
36 ("HEBREW LETTER DALET WITH DAGESH" #xFB33)
37 ("HEBREW LETTER HE WITH MAPIQ" #xFB34)
38 ("HEBREW LETTER VAV WITH DAGESH" #xFB35)
39 ("HEBREW LETTER ZAYIN WITH DAGESH" #xFB36)
40 ("HEBREW LETTER TET WITH DAGESH" #xFB38)
41 ("HEBREW LETTER YOD WITH DAGESH" #xFB39)
42 ("HEBREW LETTER FINAL KAF WITH DAGESH" #xFB3A)
43 ("HEBREW LETTER KAF WITH DAGESH" #xFB3B)
44 ("HEBREW LETTER LAMED WITH DAGESH" #xFB3C)
45 ("HEBREW LETTER MEM WITH DAGESH" #xFB3E)
46 ("HEBREW LETTER NUN WITH DAGESH" #xFB40)
47 ("HEBREW LETTER SAMEKH WITH DAGESH" #xFB41)
48 ("HEBREW LETTER FINAL PE WITH DAGESH" #xFB43)
49 ("HEBREW LETTER PE WITH DAGESH" #xFB44)
50 ("HEBREW LETTER TSADI WITH DAGESH" #xFB46)
51 ("HEBREW LETTER QOF WITH DAGESH" #xFB47)
52 ("HEBREW LETTER RESH WITH DAGESH" #xFB48)
53 ("HEBREW LETTER SHIN WITH DAGESH" #xFB49)
54 ("HEBREW LETTER TAV WITH DAGESH" #xFB4A)
55 ("HEBREW LETTER VAV WITH HOLAM" #xFB4B)
56 ("HEBREW LETTER BET WITH RAFE" #xFB4C)
57 ("HEBREW LETTER KAF WITH RAFE" #xFB4D)
58 ("HEBREW LETTER PE WITH RAFE" #xFB4E)
59 ("HEBREW LIGATURE ALEF LAMED" #xFB4F)
60 ))
diff --git a/lisp/nxml/char-name/unicode/0FB50-0FDFF.el b/lisp/nxml/char-name/unicode/0FB50-0FDFF.el
new file mode 100644
index 00000000000..a39ae4700be
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/0FB50-0FDFF.el
@@ -0,0 +1,596 @@
1(nxml-define-char-name-set 'arabic-presentation-forms-a
2 '(("ARABIC LETTER ALEF WASLA ISOLATED FORM" #xFB50)
3 ("ARABIC LETTER ALEF WASLA FINAL FORM" #xFB51)
4 ("ARABIC LETTER BEEH ISOLATED FORM" #xFB52)
5 ("ARABIC LETTER BEEH FINAL FORM" #xFB53)
6 ("ARABIC LETTER BEEH INITIAL FORM" #xFB54)
7 ("ARABIC LETTER BEEH MEDIAL FORM" #xFB55)
8 ("ARABIC LETTER PEH ISOLATED FORM" #xFB56)
9 ("ARABIC LETTER PEH FINAL FORM" #xFB57)
10 ("ARABIC LETTER PEH INITIAL FORM" #xFB58)
11 ("ARABIC LETTER PEH MEDIAL FORM" #xFB59)
12 ("ARABIC LETTER BEHEH ISOLATED FORM" #xFB5A)
13 ("ARABIC LETTER BEHEH FINAL FORM" #xFB5B)
14 ("ARABIC LETTER BEHEH INITIAL FORM" #xFB5C)
15 ("ARABIC LETTER BEHEH MEDIAL FORM" #xFB5D)
16 ("ARABIC LETTER TTEHEH ISOLATED FORM" #xFB5E)
17 ("ARABIC LETTER TTEHEH FINAL FORM" #xFB5F)
18 ("ARABIC LETTER TTEHEH INITIAL FORM" #xFB60)
19 ("ARABIC LETTER TTEHEH MEDIAL FORM" #xFB61)
20 ("ARABIC LETTER TEHEH ISOLATED FORM" #xFB62)
21 ("ARABIC LETTER TEHEH FINAL FORM" #xFB63)
22 ("ARABIC LETTER TEHEH INITIAL FORM" #xFB64)
23 ("ARABIC LETTER TEHEH MEDIAL FORM" #xFB65)
24 ("ARABIC LETTER TTEH ISOLATED FORM" #xFB66)
25 ("ARABIC LETTER TTEH FINAL FORM" #xFB67)
26 ("ARABIC LETTER TTEH INITIAL FORM" #xFB68)
27 ("ARABIC LETTER TTEH MEDIAL FORM" #xFB69)
28 ("ARABIC LETTER VEH ISOLATED FORM" #xFB6A)
29 ("ARABIC LETTER VEH FINAL FORM" #xFB6B)
30 ("ARABIC LETTER VEH INITIAL FORM" #xFB6C)
31 ("ARABIC LETTER VEH MEDIAL FORM" #xFB6D)
32 ("ARABIC LETTER PEHEH ISOLATED FORM" #xFB6E)
33 ("ARABIC LETTER PEHEH FINAL FORM" #xFB6F)
34 ("ARABIC LETTER PEHEH INITIAL FORM" #xFB70)
35 ("ARABIC LETTER PEHEH MEDIAL FORM" #xFB71)
36 ("ARABIC LETTER DYEH ISOLATED FORM" #xFB72)
37 ("ARABIC LETTER DYEH FINAL FORM" #xFB73)
38 ("ARABIC LETTER DYEH INITIAL FORM" #xFB74)
39 ("ARABIC LETTER DYEH MEDIAL FORM" #xFB75)
40 ("ARABIC LETTER NYEH ISOLATED FORM" #xFB76)
41 ("ARABIC LETTER NYEH FINAL FORM" #xFB77)
42 ("ARABIC LETTER NYEH INITIAL FORM" #xFB78)
43 ("ARABIC LETTER NYEH MEDIAL FORM" #xFB79)
44 ("ARABIC LETTER TCHEH ISOLATED FORM" #xFB7A)
45 ("ARABIC LETTER TCHEH FINAL FORM" #xFB7B)
46 ("ARABIC LETTER TCHEH INITIAL FORM" #xFB7C)
47 ("ARABIC LETTER TCHEH MEDIAL FORM" #xFB7D)
48 ("ARABIC LETTER TCHEHEH ISOLATED FORM" #xFB7E)
49 ("ARABIC LETTER TCHEHEH FINAL FORM" #xFB7F)
50 ("ARABIC LETTER TCHEHEH INITIAL FORM" #xFB80)
51 ("ARABIC LETTER TCHEHEH MEDIAL FORM" #xFB81)
52 ("ARABIC LETTER DDAHAL ISOLATED FORM" #xFB82)
53 ("ARABIC LETTER DDAHAL FINAL FORM" #xFB83)
54 ("ARABIC LETTER DAHAL ISOLATED FORM" #xFB84)
55 ("ARABIC LETTER DAHAL FINAL FORM" #xFB85)
56 ("ARABIC LETTER DUL ISOLATED FORM" #xFB86)
57 ("ARABIC LETTER DUL FINAL FORM" #xFB87)
58 ("ARABIC LETTER DDAL ISOLATED FORM" #xFB88)
59 ("ARABIC LETTER DDAL FINAL FORM" #xFB89)
60 ("ARABIC LETTER JEH ISOLATED FORM" #xFB8A)
61 ("ARABIC LETTER JEH FINAL FORM" #xFB8B)
62 ("ARABIC LETTER RREH ISOLATED FORM" #xFB8C)
63 ("ARABIC LETTER RREH FINAL FORM" #xFB8D)
64 ("ARABIC LETTER KEHEH ISOLATED FORM" #xFB8E)
65 ("ARABIC LETTER KEHEH FINAL FORM" #xFB8F)
66 ("ARABIC LETTER KEHEH INITIAL FORM" #xFB90)
67 ("ARABIC LETTER KEHEH MEDIAL FORM" #xFB91)
68 ("ARABIC LETTER GAF ISOLATED FORM" #xFB92)
69 ("ARABIC LETTER GAF FINAL FORM" #xFB93)
70 ("ARABIC LETTER GAF INITIAL FORM" #xFB94)
71 ("ARABIC LETTER GAF MEDIAL FORM" #xFB95)
72 ("ARABIC LETTER GUEH ISOLATED FORM" #xFB96)
73 ("ARABIC LETTER GUEH FINAL FORM" #xFB97)
74 ("ARABIC LETTER GUEH INITIAL FORM" #xFB98)
75 ("ARABIC LETTER GUEH MEDIAL FORM" #xFB99)
76 ("ARABIC LETTER NGOEH ISOLATED FORM" #xFB9A)
77 ("ARABIC LETTER NGOEH FINAL FORM" #xFB9B)
78 ("ARABIC LETTER NGOEH INITIAL FORM" #xFB9C)
79 ("ARABIC LETTER NGOEH MEDIAL FORM" #xFB9D)
80 ("ARABIC LETTER NOON GHUNNA ISOLATED FORM" #xFB9E)
81 ("ARABIC LETTER NOON GHUNNA FINAL FORM" #xFB9F)
82 ("ARABIC LETTER RNOON ISOLATED FORM" #xFBA0)
83 ("ARABIC LETTER RNOON FINAL FORM" #xFBA1)
84 ("ARABIC LETTER RNOON INITIAL FORM" #xFBA2)
85 ("ARABIC LETTER RNOON MEDIAL FORM" #xFBA3)
86 ("ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM" #xFBA4)
87 ("ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM" #xFBA5)
88 ("ARABIC LETTER HEH GOAL ISOLATED FORM" #xFBA6)
89 ("ARABIC LETTER HEH GOAL FINAL FORM" #xFBA7)
90 ("ARABIC LETTER HEH GOAL INITIAL FORM" #xFBA8)
91 ("ARABIC LETTER HEH GOAL MEDIAL FORM" #xFBA9)
92 ("ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM" #xFBAA)
93 ("ARABIC LETTER HEH DOACHASHMEE FINAL FORM" #xFBAB)
94 ("ARABIC LETTER HEH DOACHASHMEE INITIAL FORM" #xFBAC)
95 ("ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM" #xFBAD)
96 ("ARABIC LETTER YEH BARREE ISOLATED FORM" #xFBAE)
97 ("ARABIC LETTER YEH BARREE FINAL FORM" #xFBAF)
98 ("ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM" #xFBB0)
99 ("ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM" #xFBB1)
100 ("ARABIC LETTER NG ISOLATED FORM" #xFBD3)
101 ("ARABIC LETTER NG FINAL FORM" #xFBD4)
102 ("ARABIC LETTER NG INITIAL FORM" #xFBD5)
103 ("ARABIC LETTER NG MEDIAL FORM" #xFBD6)
104 ("ARABIC LETTER U ISOLATED FORM" #xFBD7)
105 ("ARABIC LETTER U FINAL FORM" #xFBD8)
106 ("ARABIC LETTER OE ISOLATED FORM" #xFBD9)
107 ("ARABIC LETTER OE FINAL FORM" #xFBDA)
108 ("ARABIC LETTER YU ISOLATED FORM" #xFBDB)
109 ("ARABIC LETTER YU FINAL FORM" #xFBDC)
110 ("ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM" #xFBDD)
111 ("ARABIC LETTER VE ISOLATED FORM" #xFBDE)
112 ("ARABIC LETTER VE FINAL FORM" #xFBDF)
113 ("ARABIC LETTER KIRGHIZ OE ISOLATED FORM" #xFBE0)
114 ("ARABIC LETTER KIRGHIZ OE FINAL FORM" #xFBE1)
115 ("ARABIC LETTER KIRGHIZ YU ISOLATED FORM" #xFBE2)
116 ("ARABIC LETTER KIRGHIZ YU FINAL FORM" #xFBE3)
117 ("ARABIC LETTER E ISOLATED FORM" #xFBE4)
118 ("ARABIC LETTER E FINAL FORM" #xFBE5)
119 ("ARABIC LETTER E INITIAL FORM" #xFBE6)
120 ("ARABIC LETTER E MEDIAL FORM" #xFBE7)
121 ("ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM" #xFBE8)
122 ("ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM" #xFBE9)
123 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM" #xFBEA)
124 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM" #xFBEB)
125 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM" #xFBEC)
126 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM" #xFBED)
127 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM" #xFBEE)
128 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM" #xFBEF)
129 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM" #xFBF0)
130 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM" #xFBF1)
131 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM" #xFBF2)
132 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM" #xFBF3)
133 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM" #xFBF4)
134 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM" #xFBF5)
135 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM" #xFBF6)
136 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM" #xFBF7)
137 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM" #xFBF8)
138 ("ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM" #xFBF9)
139 ("ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM" #xFBFA)
140 ("ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM" #xFBFB)
141 ("ARABIC LETTER FARSI YEH ISOLATED FORM" #xFBFC)
142 ("ARABIC LETTER FARSI YEH FINAL FORM" #xFBFD)
143 ("ARABIC LETTER FARSI YEH INITIAL FORM" #xFBFE)
144 ("ARABIC LETTER FARSI YEH MEDIAL FORM" #xFBFF)
145 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM" #xFC00)
146 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM" #xFC01)
147 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM" #xFC02)
148 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM" #xFC03)
149 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM" #xFC04)
150 ("ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM" #xFC05)
151 ("ARABIC LIGATURE BEH WITH HAH ISOLATED FORM" #xFC06)
152 ("ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM" #xFC07)
153 ("ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM" #xFC08)
154 ("ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM" #xFC09)
155 ("ARABIC LIGATURE BEH WITH YEH ISOLATED FORM" #xFC0A)
156 ("ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM" #xFC0B)
157 ("ARABIC LIGATURE TEH WITH HAH ISOLATED FORM" #xFC0C)
158 ("ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM" #xFC0D)
159 ("ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM" #xFC0E)
160 ("ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM" #xFC0F)
161 ("ARABIC LIGATURE TEH WITH YEH ISOLATED FORM" #xFC10)
162 ("ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM" #xFC11)
163 ("ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM" #xFC12)
164 ("ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM" #xFC13)
165 ("ARABIC LIGATURE THEH WITH YEH ISOLATED FORM" #xFC14)
166 ("ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM" #xFC15)
167 ("ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM" #xFC16)
168 ("ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM" #xFC17)
169 ("ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM" #xFC18)
170 ("ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM" #xFC19)
171 ("ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM" #xFC1A)
172 ("ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM" #xFC1B)
173 ("ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM" #xFC1C)
174 ("ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM" #xFC1D)
175 ("ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM" #xFC1E)
176 ("ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM" #xFC1F)
177 ("ARABIC LIGATURE SAD WITH HAH ISOLATED FORM" #xFC20)
178 ("ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM" #xFC21)
179 ("ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM" #xFC22)
180 ("ARABIC LIGATURE DAD WITH HAH ISOLATED FORM" #xFC23)
181 ("ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM" #xFC24)
182 ("ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM" #xFC25)
183 ("ARABIC LIGATURE TAH WITH HAH ISOLATED FORM" #xFC26)
184 ("ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM" #xFC27)
185 ("ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM" #xFC28)
186 ("ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM" #xFC29)
187 ("ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM" #xFC2A)
188 ("ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM" #xFC2B)
189 ("ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM" #xFC2C)
190 ("ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM" #xFC2D)
191 ("ARABIC LIGATURE FEH WITH HAH ISOLATED FORM" #xFC2E)
192 ("ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM" #xFC2F)
193 ("ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM" #xFC30)
194 ("ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM" #xFC31)
195 ("ARABIC LIGATURE FEH WITH YEH ISOLATED FORM" #xFC32)
196 ("ARABIC LIGATURE QAF WITH HAH ISOLATED FORM" #xFC33)
197 ("ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM" #xFC34)
198 ("ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM" #xFC35)
199 ("ARABIC LIGATURE QAF WITH YEH ISOLATED FORM" #xFC36)
200 ("ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM" #xFC37)
201 ("ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM" #xFC38)
202 ("ARABIC LIGATURE KAF WITH HAH ISOLATED FORM" #xFC39)
203 ("ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM" #xFC3A)
204 ("ARABIC LIGATURE KAF WITH LAM ISOLATED FORM" #xFC3B)
205 ("ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM" #xFC3C)
206 ("ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM" #xFC3D)
207 ("ARABIC LIGATURE KAF WITH YEH ISOLATED FORM" #xFC3E)
208 ("ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM" #xFC3F)
209 ("ARABIC LIGATURE LAM WITH HAH ISOLATED FORM" #xFC40)
210 ("ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM" #xFC41)
211 ("ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM" #xFC42)
212 ("ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM" #xFC43)
213 ("ARABIC LIGATURE LAM WITH YEH ISOLATED FORM" #xFC44)
214 ("ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM" #xFC45)
215 ("ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM" #xFC46)
216 ("ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM" #xFC47)
217 ("ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM" #xFC48)
218 ("ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM" #xFC49)
219 ("ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM" #xFC4A)
220 ("ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM" #xFC4B)
221 ("ARABIC LIGATURE NOON WITH HAH ISOLATED FORM" #xFC4C)
222 ("ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM" #xFC4D)
223 ("ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM" #xFC4E)
224 ("ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM" #xFC4F)
225 ("ARABIC LIGATURE NOON WITH YEH ISOLATED FORM" #xFC50)
226 ("ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM" #xFC51)
227 ("ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM" #xFC52)
228 ("ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM" #xFC53)
229 ("ARABIC LIGATURE HEH WITH YEH ISOLATED FORM" #xFC54)
230 ("ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM" #xFC55)
231 ("ARABIC LIGATURE YEH WITH HAH ISOLATED FORM" #xFC56)
232 ("ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM" #xFC57)
233 ("ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM" #xFC58)
234 ("ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM" #xFC59)
235 ("ARABIC LIGATURE YEH WITH YEH ISOLATED FORM" #xFC5A)
236 ("ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM" #xFC5B)
237 ("ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM" #xFC5C)
238 ("ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM" #xFC5D)
239 ("ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM" #xFC5E)
240 ("ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM" #xFC5F)
241 ("ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM" #xFC60)
242 ("ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM" #xFC61)
243 ("ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM" #xFC62)
244 ("ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM" #xFC63)
245 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM" #xFC64)
246 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM" #xFC65)
247 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM" #xFC66)
248 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM" #xFC67)
249 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM" #xFC68)
250 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM" #xFC69)
251 ("ARABIC LIGATURE BEH WITH REH FINAL FORM" #xFC6A)
252 ("ARABIC LIGATURE BEH WITH ZAIN FINAL FORM" #xFC6B)
253 ("ARABIC LIGATURE BEH WITH MEEM FINAL FORM" #xFC6C)
254 ("ARABIC LIGATURE BEH WITH NOON FINAL FORM" #xFC6D)
255 ("ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM" #xFC6E)
256 ("ARABIC LIGATURE BEH WITH YEH FINAL FORM" #xFC6F)
257 ("ARABIC LIGATURE TEH WITH REH FINAL FORM" #xFC70)
258 ("ARABIC LIGATURE TEH WITH ZAIN FINAL FORM" #xFC71)
259 ("ARABIC LIGATURE TEH WITH MEEM FINAL FORM" #xFC72)
260 ("ARABIC LIGATURE TEH WITH NOON FINAL FORM" #xFC73)
261 ("ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM" #xFC74)
262 ("ARABIC LIGATURE TEH WITH YEH FINAL FORM" #xFC75)
263 ("ARABIC LIGATURE THEH WITH REH FINAL FORM" #xFC76)
264 ("ARABIC LIGATURE THEH WITH ZAIN FINAL FORM" #xFC77)
265 ("ARABIC LIGATURE THEH WITH MEEM FINAL FORM" #xFC78)
266 ("ARABIC LIGATURE THEH WITH NOON FINAL FORM" #xFC79)
267 ("ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM" #xFC7A)
268 ("ARABIC LIGATURE THEH WITH YEH FINAL FORM" #xFC7B)
269 ("ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM" #xFC7C)
270 ("ARABIC LIGATURE FEH WITH YEH FINAL FORM" #xFC7D)
271 ("ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM" #xFC7E)
272 ("ARABIC LIGATURE QAF WITH YEH FINAL FORM" #xFC7F)
273 ("ARABIC LIGATURE KAF WITH ALEF FINAL FORM" #xFC80)
274 ("ARABIC LIGATURE KAF WITH LAM FINAL FORM" #xFC81)
275 ("ARABIC LIGATURE KAF WITH MEEM FINAL FORM" #xFC82)
276 ("ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM" #xFC83)
277 ("ARABIC LIGATURE KAF WITH YEH FINAL FORM" #xFC84)
278 ("ARABIC LIGATURE LAM WITH MEEM FINAL FORM" #xFC85)
279 ("ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM" #xFC86)
280 ("ARABIC LIGATURE LAM WITH YEH FINAL FORM" #xFC87)
281 ("ARABIC LIGATURE MEEM WITH ALEF FINAL FORM" #xFC88)
282 ("ARABIC LIGATURE MEEM WITH MEEM FINAL FORM" #xFC89)
283 ("ARABIC LIGATURE NOON WITH REH FINAL FORM" #xFC8A)
284 ("ARABIC LIGATURE NOON WITH ZAIN FINAL FORM" #xFC8B)
285 ("ARABIC LIGATURE NOON WITH MEEM FINAL FORM" #xFC8C)
286 ("ARABIC LIGATURE NOON WITH NOON FINAL FORM" #xFC8D)
287 ("ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM" #xFC8E)
288 ("ARABIC LIGATURE NOON WITH YEH FINAL FORM" #xFC8F)
289 ("ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM" #xFC90)
290 ("ARABIC LIGATURE YEH WITH REH FINAL FORM" #xFC91)
291 ("ARABIC LIGATURE YEH WITH ZAIN FINAL FORM" #xFC92)
292 ("ARABIC LIGATURE YEH WITH MEEM FINAL FORM" #xFC93)
293 ("ARABIC LIGATURE YEH WITH NOON FINAL FORM" #xFC94)
294 ("ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM" #xFC95)
295 ("ARABIC LIGATURE YEH WITH YEH FINAL FORM" #xFC96)
296 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM" #xFC97)
297 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM" #xFC98)
298 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM" #xFC99)
299 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM" #xFC9A)
300 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM" #xFC9B)
301 ("ARABIC LIGATURE BEH WITH JEEM INITIAL FORM" #xFC9C)
302 ("ARABIC LIGATURE BEH WITH HAH INITIAL FORM" #xFC9D)
303 ("ARABIC LIGATURE BEH WITH KHAH INITIAL FORM" #xFC9E)
304 ("ARABIC LIGATURE BEH WITH MEEM INITIAL FORM" #xFC9F)
305 ("ARABIC LIGATURE BEH WITH HEH INITIAL FORM" #xFCA0)
306 ("ARABIC LIGATURE TEH WITH JEEM INITIAL FORM" #xFCA1)
307 ("ARABIC LIGATURE TEH WITH HAH INITIAL FORM" #xFCA2)
308 ("ARABIC LIGATURE TEH WITH KHAH INITIAL FORM" #xFCA3)
309 ("ARABIC LIGATURE TEH WITH MEEM INITIAL FORM" #xFCA4)
310 ("ARABIC LIGATURE TEH WITH HEH INITIAL FORM" #xFCA5)
311 ("ARABIC LIGATURE THEH WITH MEEM INITIAL FORM" #xFCA6)
312 ("ARABIC LIGATURE JEEM WITH HAH INITIAL FORM" #xFCA7)
313 ("ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM" #xFCA8)
314 ("ARABIC LIGATURE HAH WITH JEEM INITIAL FORM" #xFCA9)
315 ("ARABIC LIGATURE HAH WITH MEEM INITIAL FORM" #xFCAA)
316 ("ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM" #xFCAB)
317 ("ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM" #xFCAC)
318 ("ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM" #xFCAD)
319 ("ARABIC LIGATURE SEEN WITH HAH INITIAL FORM" #xFCAE)
320 ("ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM" #xFCAF)
321 ("ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM" #xFCB0)
322 ("ARABIC LIGATURE SAD WITH HAH INITIAL FORM" #xFCB1)
323 ("ARABIC LIGATURE SAD WITH KHAH INITIAL FORM" #xFCB2)
324 ("ARABIC LIGATURE SAD WITH MEEM INITIAL FORM" #xFCB3)
325 ("ARABIC LIGATURE DAD WITH JEEM INITIAL FORM" #xFCB4)
326 ("ARABIC LIGATURE DAD WITH HAH INITIAL FORM" #xFCB5)
327 ("ARABIC LIGATURE DAD WITH KHAH INITIAL FORM" #xFCB6)
328 ("ARABIC LIGATURE DAD WITH MEEM INITIAL FORM" #xFCB7)
329 ("ARABIC LIGATURE TAH WITH HAH INITIAL FORM" #xFCB8)
330 ("ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM" #xFCB9)
331 ("ARABIC LIGATURE AIN WITH JEEM INITIAL FORM" #xFCBA)
332 ("ARABIC LIGATURE AIN WITH MEEM INITIAL FORM" #xFCBB)
333 ("ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM" #xFCBC)
334 ("ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM" #xFCBD)
335 ("ARABIC LIGATURE FEH WITH JEEM INITIAL FORM" #xFCBE)
336 ("ARABIC LIGATURE FEH WITH HAH INITIAL FORM" #xFCBF)
337 ("ARABIC LIGATURE FEH WITH KHAH INITIAL FORM" #xFCC0)
338 ("ARABIC LIGATURE FEH WITH MEEM INITIAL FORM" #xFCC1)
339 ("ARABIC LIGATURE QAF WITH HAH INITIAL FORM" #xFCC2)
340 ("ARABIC LIGATURE QAF WITH MEEM INITIAL FORM" #xFCC3)
341 ("ARABIC LIGATURE KAF WITH JEEM INITIAL FORM" #xFCC4)
342 ("ARABIC LIGATURE KAF WITH HAH INITIAL FORM" #xFCC5)
343 ("ARABIC LIGATURE KAF WITH KHAH INITIAL FORM" #xFCC6)
344 ("ARABIC LIGATURE KAF WITH LAM INITIAL FORM" #xFCC7)
345 ("ARABIC LIGATURE KAF WITH MEEM INITIAL FORM" #xFCC8)
346 ("ARABIC LIGATURE LAM WITH JEEM INITIAL FORM" #xFCC9)
347 ("ARABIC LIGATURE LAM WITH HAH INITIAL FORM" #xFCCA)
348 ("ARABIC LIGATURE LAM WITH KHAH INITIAL FORM" #xFCCB)
349 ("ARABIC LIGATURE LAM WITH MEEM INITIAL FORM" #xFCCC)
350 ("ARABIC LIGATURE LAM WITH HEH INITIAL FORM" #xFCCD)
351 ("ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM" #xFCCE)
352 ("ARABIC LIGATURE MEEM WITH HAH INITIAL FORM" #xFCCF)
353 ("ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM" #xFCD0)
354 ("ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM" #xFCD1)
355 ("ARABIC LIGATURE NOON WITH JEEM INITIAL FORM" #xFCD2)
356 ("ARABIC LIGATURE NOON WITH HAH INITIAL FORM" #xFCD3)
357 ("ARABIC LIGATURE NOON WITH KHAH INITIAL FORM" #xFCD4)
358 ("ARABIC LIGATURE NOON WITH MEEM INITIAL FORM" #xFCD5)
359 ("ARABIC LIGATURE NOON WITH HEH INITIAL FORM" #xFCD6)
360 ("ARABIC LIGATURE HEH WITH JEEM INITIAL FORM" #xFCD7)
361 ("ARABIC LIGATURE HEH WITH MEEM INITIAL FORM" #xFCD8)
362 ("ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM" #xFCD9)
363 ("ARABIC LIGATURE YEH WITH JEEM INITIAL FORM" #xFCDA)
364 ("ARABIC LIGATURE YEH WITH HAH INITIAL FORM" #xFCDB)
365 ("ARABIC LIGATURE YEH WITH KHAH INITIAL FORM" #xFCDC)
366 ("ARABIC LIGATURE YEH WITH MEEM INITIAL FORM" #xFCDD)
367 ("ARABIC LIGATURE YEH WITH HEH INITIAL FORM" #xFCDE)
368 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM" #xFCDF)
369 ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM" #xFCE0)
370 ("ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM" #xFCE1)
371 ("ARABIC LIGATURE BEH WITH HEH MEDIAL FORM" #xFCE2)
372 ("ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM" #xFCE3)
373 ("ARABIC LIGATURE TEH WITH HEH MEDIAL FORM" #xFCE4)
374 ("ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM" #xFCE5)
375 ("ARABIC LIGATURE THEH WITH HEH MEDIAL FORM" #xFCE6)
376 ("ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM" #xFCE7)
377 ("ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM" #xFCE8)
378 ("ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM" #xFCE9)
379 ("ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM" #xFCEA)
380 ("ARABIC LIGATURE KAF WITH LAM MEDIAL FORM" #xFCEB)
381 ("ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM" #xFCEC)
382 ("ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM" #xFCED)
383 ("ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM" #xFCEE)
384 ("ARABIC LIGATURE NOON WITH HEH MEDIAL FORM" #xFCEF)
385 ("ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM" #xFCF0)
386 ("ARABIC LIGATURE YEH WITH HEH MEDIAL FORM" #xFCF1)
387 ("ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM" #xFCF2)
388 ("ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM" #xFCF3)
389 ("ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM" #xFCF4)
390 ("ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM" #xFCF5)
391 ("ARABIC LIGATURE TAH WITH YEH ISOLATED FORM" #xFCF6)
392 ("ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM" #xFCF7)
393 ("ARABIC LIGATURE AIN WITH YEH ISOLATED FORM" #xFCF8)
394 ("ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM" #xFCF9)
395 ("ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM" #xFCFA)
396 ("ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM" #xFCFB)
397 ("ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM" #xFCFC)
398 ("ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM" #xFCFD)
399 ("ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM" #xFCFE)
400 ("ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM" #xFCFF)
401 ("ARABIC LIGATURE HAH WITH YEH ISOLATED FORM" #xFD00)
402 ("ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM" #xFD01)
403 ("ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM" #xFD02)
404 ("ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM" #xFD03)
405 ("ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM" #xFD04)
406 ("ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM" #xFD05)
407 ("ARABIC LIGATURE SAD WITH YEH ISOLATED FORM" #xFD06)
408 ("ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM" #xFD07)
409 ("ARABIC LIGATURE DAD WITH YEH ISOLATED FORM" #xFD08)
410 ("ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM" #xFD09)
411 ("ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM" #xFD0A)
412 ("ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM" #xFD0B)
413 ("ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM" #xFD0C)
414 ("ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM" #xFD0D)
415 ("ARABIC LIGATURE SEEN WITH REH ISOLATED FORM" #xFD0E)
416 ("ARABIC LIGATURE SAD WITH REH ISOLATED FORM" #xFD0F)
417 ("ARABIC LIGATURE DAD WITH REH ISOLATED FORM" #xFD10)
418 ("ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM" #xFD11)
419 ("ARABIC LIGATURE TAH WITH YEH FINAL FORM" #xFD12)
420 ("ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM" #xFD13)
421 ("ARABIC LIGATURE AIN WITH YEH FINAL FORM" #xFD14)
422 ("ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM" #xFD15)
423 ("ARABIC LIGATURE GHAIN WITH YEH FINAL FORM" #xFD16)
424 ("ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM" #xFD17)
425 ("ARABIC LIGATURE SEEN WITH YEH FINAL FORM" #xFD18)
426 ("ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM" #xFD19)
427 ("ARABIC LIGATURE SHEEN WITH YEH FINAL FORM" #xFD1A)
428 ("ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM" #xFD1B)
429 ("ARABIC LIGATURE HAH WITH YEH FINAL FORM" #xFD1C)
430 ("ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM" #xFD1D)
431 ("ARABIC LIGATURE JEEM WITH YEH FINAL FORM" #xFD1E)
432 ("ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM" #xFD1F)
433 ("ARABIC LIGATURE KHAH WITH YEH FINAL FORM" #xFD20)
434 ("ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM" #xFD21)
435 ("ARABIC LIGATURE SAD WITH YEH FINAL FORM" #xFD22)
436 ("ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM" #xFD23)
437 ("ARABIC LIGATURE DAD WITH YEH FINAL FORM" #xFD24)
438 ("ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM" #xFD25)
439 ("ARABIC LIGATURE SHEEN WITH HAH FINAL FORM" #xFD26)
440 ("ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM" #xFD27)
441 ("ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM" #xFD28)
442 ("ARABIC LIGATURE SHEEN WITH REH FINAL FORM" #xFD29)
443 ("ARABIC LIGATURE SEEN WITH REH FINAL FORM" #xFD2A)
444 ("ARABIC LIGATURE SAD WITH REH FINAL FORM" #xFD2B)
445 ("ARABIC LIGATURE DAD WITH REH FINAL FORM" #xFD2C)
446 ("ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM" #xFD2D)
447 ("ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM" #xFD2E)
448 ("ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM" #xFD2F)
449 ("ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM" #xFD30)
450 ("ARABIC LIGATURE SEEN WITH HEH INITIAL FORM" #xFD31)
451 ("ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM" #xFD32)
452 ("ARABIC LIGATURE TAH WITH MEEM INITIAL FORM" #xFD33)
453 ("ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM" #xFD34)
454 ("ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM" #xFD35)
455 ("ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM" #xFD36)
456 ("ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM" #xFD37)
457 ("ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM" #xFD38)
458 ("ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM" #xFD39)
459 ("ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM" #xFD3A)
460 ("ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM" #xFD3B)
461 ("ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM" #xFD3C)
462 ("ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM" #xFD3D)
463 ("ORNATE LEFT PARENTHESIS" #xFD3E)
464 ("ORNATE RIGHT PARENTHESIS" #xFD3F)
465 ("ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM" #xFD50)
466 ("ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM" #xFD51)
467 ("ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM" #xFD52)
468 ("ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM" #xFD53)
469 ("ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM" #xFD54)
470 ("ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM" #xFD55)
471 ("ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM" #xFD56)
472 ("ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM" #xFD57)
473 ("ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM" #xFD58)
474 ("ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM" #xFD59)
475 ("ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM" #xFD5A)
476 ("ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM" #xFD5B)
477 ("ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM" #xFD5C)
478 ("ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM" #xFD5D)
479 ("ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM" #xFD5E)
480 ("ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM" #xFD5F)
481 ("ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM" #xFD60)
482 ("ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM" #xFD61)
483 ("ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM" #xFD62)
484 ("ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM" #xFD63)
485 ("ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM" #xFD64)
486 ("ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM" #xFD65)
487 ("ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM" #xFD66)
488 ("ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM" #xFD67)
489 ("ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM" #xFD68)
490 ("ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM" #xFD69)
491 ("ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM" #xFD6A)
492 ("ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM" #xFD6B)
493 ("ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM" #xFD6C)
494 ("ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM" #xFD6D)
495 ("ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM" #xFD6E)
496 ("ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM" #xFD6F)
497 ("ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM" #xFD70)
498 ("ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM" #xFD71)
499 ("ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM" #xFD72)
500 ("ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM" #xFD73)
501 ("ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM" #xFD74)
502 ("ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM" #xFD75)
503 ("ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM" #xFD76)
504 ("ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM" #xFD77)
505 ("ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM" #xFD78)
506 ("ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM" #xFD79)
507 ("ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM" #xFD7A)
508 ("ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM" #xFD7B)
509 ("ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM" #xFD7C)
510 ("ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM" #xFD7D)
511 ("ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM" #xFD7E)
512 ("ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM" #xFD7F)
513 ("ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM" #xFD80)
514 ("ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM" #xFD81)
515 ("ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM" #xFD82)
516 ("ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM" #xFD83)
517 ("ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM" #xFD84)
518 ("ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM" #xFD85)
519 ("ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM" #xFD86)
520 ("ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM" #xFD87)
521 ("ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM" #xFD88)
522 ("ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM" #xFD89)
523 ("ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM" #xFD8A)
524 ("ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM" #xFD8B)
525 ("ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM" #xFD8C)
526 ("ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM" #xFD8D)
527 ("ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM" #xFD8E)
528 ("ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM" #xFD8F)
529 ("ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM" #xFD92)
530 ("ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM" #xFD93)
531 ("ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM" #xFD94)
532 ("ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM" #xFD95)
533 ("ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM" #xFD96)
534 ("ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM" #xFD97)
535 ("ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM" #xFD98)
536 ("ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM" #xFD99)
537 ("ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM" #xFD9A)
538 ("ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM" #xFD9B)
539 ("ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM" #xFD9C)
540 ("ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM" #xFD9D)
541 ("ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM" #xFD9E)
542 ("ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM" #xFD9F)
543 ("ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM" #xFDA0)
544 ("ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM" #xFDA1)
545 ("ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM" #xFDA2)
546 ("ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM" #xFDA3)
547 ("ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM" #xFDA4)
548 ("ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM" #xFDA5)
549 ("ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM" #xFDA6)
550 ("ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM" #xFDA7)
551 ("ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM" #xFDA8)
552 ("ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM" #xFDA9)
553 ("ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM" #xFDAA)
554 ("ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM" #xFDAB)
555 ("ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM" #xFDAC)
556 ("ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM" #xFDAD)
557 ("ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM" #xFDAE)
558 ("ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM" #xFDAF)
559 ("ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM" #xFDB0)
560 ("ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM" #xFDB1)
561 ("ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM" #xFDB2)
562 ("ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM" #xFDB3)
563 ("ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM" #xFDB4)
564 ("ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM" #xFDB5)
565 ("ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM" #xFDB6)
566 ("ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM" #xFDB7)
567 ("ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM" #xFDB8)
568 ("ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM" #xFDB9)
569 ("ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM" #xFDBA)
570 ("ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM" #xFDBB)
571 ("ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM" #xFDBC)
572 ("ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM" #xFDBD)
573 ("ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM" #xFDBE)
574 ("ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM" #xFDBF)
575 ("ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM" #xFDC0)
576 ("ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM" #xFDC1)
577 ("ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM" #xFDC2)
578 ("ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM" #xFDC3)
579 ("ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM" #xFDC4)
580 ("ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM" #xFDC5)
581 ("ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM" #xFDC6)
582 ("ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM" #xFDC7)
583 ("ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM" #xFDF0)
584 ("ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM" #xFDF1)
585 ("ARABIC LIGATURE ALLAH ISOLATED FORM" #xFDF2)
586 ("ARABIC LIGATURE AKBAR ISOLATED FORM" #xFDF3)
587 ("ARABIC LIGATURE MOHAMMAD ISOLATED FORM" #xFDF4)
588 ("ARABIC LIGATURE SALAM ISOLATED FORM" #xFDF5)
589 ("ARABIC LIGATURE RASOUL ISOLATED FORM" #xFDF6)
590 ("ARABIC LIGATURE ALAYHE ISOLATED FORM" #xFDF7)
591 ("ARABIC LIGATURE WASALLAM ISOLATED FORM" #xFDF8)
592 ("ARABIC LIGATURE SALLA ISOLATED FORM" #xFDF9)
593 ("ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM" #xFDFA)
594 ("ARABIC LIGATURE JALLAJALALOUHOU" #xFDFB)
595 ("RIAL SIGN" #xFDFC)
596 ))
diff --git a/lisp/nxml/char-name/unicode/0FE00-0FE0F.el b/lisp/nxml/char-name/unicode/0FE00-0FE0F.el
new file mode 100644
index 00000000000..f1eb897599b
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/0FE00-0FE0F.el
@@ -0,0 +1,18 @@
1(nxml-define-char-name-set 'variation-selectors
2 '(("VARIATION SELECTOR-1" #xFE00)
3 ("VARIATION SELECTOR-2" #xFE01)
4 ("VARIATION SELECTOR-3" #xFE02)
5 ("VARIATION SELECTOR-4" #xFE03)
6 ("VARIATION SELECTOR-5" #xFE04)
7 ("VARIATION SELECTOR-6" #xFE05)
8 ("VARIATION SELECTOR-7" #xFE06)
9 ("VARIATION SELECTOR-8" #xFE07)
10 ("VARIATION SELECTOR-9" #xFE08)
11 ("VARIATION SELECTOR-10" #xFE09)
12 ("VARIATION SELECTOR-11" #xFE0A)
13 ("VARIATION SELECTOR-12" #xFE0B)
14 ("VARIATION SELECTOR-13" #xFE0C)
15 ("VARIATION SELECTOR-14" #xFE0D)
16 ("VARIATION SELECTOR-15" #xFE0E)
17 ("VARIATION SELECTOR-16" #xFE0F)
18 ))
diff --git a/lisp/nxml/char-name/unicode/0FE20-0FE2F.el b/lisp/nxml/char-name/unicode/0FE20-0FE2F.el
new file mode 100644
index 00000000000..2cc5ef2bb05
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/0FE20-0FE2F.el
@@ -0,0 +1,6 @@
1(nxml-define-char-name-set 'combining-half-marks
2 '(("COMBINING LIGATURE LEFT HALF" #xFE20)
3 ("COMBINING LIGATURE RIGHT HALF" #xFE21)
4 ("COMBINING DOUBLE TILDE LEFT HALF" #xFE22)
5 ("COMBINING DOUBLE TILDE RIGHT HALF" #xFE23)
6 ))
diff --git a/lisp/nxml/char-name/unicode/0FE30-0FE4F.el b/lisp/nxml/char-name/unicode/0FE30-0FE4F.el
new file mode 100644
index 00000000000..83893e4b936
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/0FE30-0FE4F.el
@@ -0,0 +1,32 @@
1(nxml-define-char-name-set 'cjk-compatibility-forms
2 '(("PRESENTATION FORM FOR VERTICAL TWO DOT LEADER" #xFE30)
3 ("PRESENTATION FORM FOR VERTICAL EM DASH" #xFE31)
4 ("PRESENTATION FORM FOR VERTICAL EN DASH" #xFE32)
5 ("PRESENTATION FORM FOR VERTICAL LOW LINE" #xFE33)
6 ("PRESENTATION FORM FOR VERTICAL WAVY LOW LINE" #xFE34)
7 ("PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS" #xFE35)
8 ("PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS" #xFE36)
9 ("PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET" #xFE37)
10 ("PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET" #xFE38)
11 ("PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET" #xFE39)
12 ("PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET" #xFE3A)
13 ("PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET" #xFE3B)
14 ("PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET" #xFE3C)
15 ("PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET" #xFE3D)
16 ("PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET" #xFE3E)
17 ("PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET" #xFE3F)
18 ("PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET" #xFE40)
19 ("PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET" #xFE41)
20 ("PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET" #xFE42)
21 ("PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET" #xFE43)
22 ("PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET" #xFE44)
23 ("SESAME DOT" #xFE45)
24 ("WHITE SESAME DOT" #xFE46)
25 ("DASHED OVERLINE" #xFE49)
26 ("CENTRELINE OVERLINE" #xFE4A)
27 ("WAVY OVERLINE" #xFE4B)
28 ("DOUBLE WAVY OVERLINE" #xFE4C)
29 ("DASHED LOW LINE" #xFE4D)
30 ("CENTRELINE LOW LINE" #xFE4E)
31 ("WAVY LOW LINE" #xFE4F)
32 ))
diff --git a/lisp/nxml/char-name/unicode/0FE50-0FE6F.el b/lisp/nxml/char-name/unicode/0FE50-0FE6F.el
new file mode 100644
index 00000000000..d94cc453f4f
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/0FE50-0FE6F.el
@@ -0,0 +1,28 @@
1(nxml-define-char-name-set 'small-form-variants
2 '(("SMALL COMMA" #xFE50)
3 ("SMALL IDEOGRAPHIC COMMA" #xFE51)
4 ("SMALL FULL STOP" #xFE52)
5 ("SMALL SEMICOLON" #xFE54)
6 ("SMALL COLON" #xFE55)
7 ("SMALL QUESTION MARK" #xFE56)
8 ("SMALL EXCLAMATION MARK" #xFE57)
9 ("SMALL EM DASH" #xFE58)
10 ("SMALL LEFT PARENTHESIS" #xFE59)
11 ("SMALL RIGHT PARENTHESIS" #xFE5A)
12 ("SMALL LEFT CURLY BRACKET" #xFE5B)
13 ("SMALL RIGHT CURLY BRACKET" #xFE5C)
14 ("SMALL LEFT TORTOISE SHELL BRACKET" #xFE5D)
15 ("SMALL RIGHT TORTOISE SHELL BRACKET" #xFE5E)
16 ("SMALL NUMBER SIGN" #xFE5F)
17 ("SMALL AMPERSAND" #xFE60)
18 ("SMALL ASTERISK" #xFE61)
19 ("SMALL PLUS SIGN" #xFE62)
20 ("SMALL HYPHEN-MINUS" #xFE63)
21 ("SMALL LESS-THAN SIGN" #xFE64)
22 ("SMALL GREATER-THAN SIGN" #xFE65)
23 ("SMALL EQUALS SIGN" #xFE66)
24 ("SMALL REVERSE SOLIDUS" #xFE68)
25 ("SMALL DOLLAR SIGN" #xFE69)
26 ("SMALL PERCENT SIGN" #xFE6A)
27 ("SMALL COMMERCIAL AT" #xFE6B)
28 ))
diff --git a/lisp/nxml/char-name/unicode/0FE70-0FEFF.el b/lisp/nxml/char-name/unicode/0FE70-0FEFF.el
new file mode 100644
index 00000000000..d0e54b64ec1
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/0FE70-0FEFF.el
@@ -0,0 +1,143 @@
1(nxml-define-char-name-set 'arabic-presentation-forms-b
2 '(("ARABIC FATHATAN ISOLATED FORM" #xFE70)
3 ("ARABIC TATWEEL WITH FATHATAN ABOVE" #xFE71)
4 ("ARABIC DAMMATAN ISOLATED FORM" #xFE72)
5 ("ARABIC TAIL FRAGMENT" #xFE73)
6 ("ARABIC KASRATAN ISOLATED FORM" #xFE74)
7 ("ARABIC FATHA ISOLATED FORM" #xFE76)
8 ("ARABIC FATHA MEDIAL FORM" #xFE77)
9 ("ARABIC DAMMA ISOLATED FORM" #xFE78)
10 ("ARABIC DAMMA MEDIAL FORM" #xFE79)
11 ("ARABIC KASRA ISOLATED FORM" #xFE7A)
12 ("ARABIC KASRA MEDIAL FORM" #xFE7B)
13 ("ARABIC SHADDA ISOLATED FORM" #xFE7C)
14 ("ARABIC SHADDA MEDIAL FORM" #xFE7D)
15 ("ARABIC SUKUN ISOLATED FORM" #xFE7E)
16 ("ARABIC SUKUN MEDIAL FORM" #xFE7F)
17 ("ARABIC LETTER HAMZA ISOLATED FORM" #xFE80)
18 ("ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM" #xFE81)
19 ("ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM" #xFE82)
20 ("ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM" #xFE83)
21 ("ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM" #xFE84)
22 ("ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM" #xFE85)
23 ("ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM" #xFE86)
24 ("ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM" #xFE87)
25 ("ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM" #xFE88)
26 ("ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM" #xFE89)
27 ("ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM" #xFE8A)
28 ("ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM" #xFE8B)
29 ("ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM" #xFE8C)
30 ("ARABIC LETTER ALEF ISOLATED FORM" #xFE8D)
31 ("ARABIC LETTER ALEF FINAL FORM" #xFE8E)
32 ("ARABIC LETTER BEH ISOLATED FORM" #xFE8F)
33 ("ARABIC LETTER BEH FINAL FORM" #xFE90)
34 ("ARABIC LETTER BEH INITIAL FORM" #xFE91)
35 ("ARABIC LETTER BEH MEDIAL FORM" #xFE92)
36 ("ARABIC LETTER TEH MARBUTA ISOLATED FORM" #xFE93)
37 ("ARABIC LETTER TEH MARBUTA FINAL FORM" #xFE94)
38 ("ARABIC LETTER TEH ISOLATED FORM" #xFE95)
39 ("ARABIC LETTER TEH FINAL FORM" #xFE96)
40 ("ARABIC LETTER TEH INITIAL FORM" #xFE97)
41 ("ARABIC LETTER TEH MEDIAL FORM" #xFE98)
42 ("ARABIC LETTER THEH ISOLATED FORM" #xFE99)
43 ("ARABIC LETTER THEH FINAL FORM" #xFE9A)
44 ("ARABIC LETTER THEH INITIAL FORM" #xFE9B)
45 ("ARABIC LETTER THEH MEDIAL FORM" #xFE9C)
46 ("ARABIC LETTER JEEM ISOLATED FORM" #xFE9D)
47 ("ARABIC LETTER JEEM FINAL FORM" #xFE9E)
48 ("ARABIC LETTER JEEM INITIAL FORM" #xFE9F)
49 ("ARABIC LETTER JEEM MEDIAL FORM" #xFEA0)
50 ("ARABIC LETTER HAH ISOLATED FORM" #xFEA1)
51 ("ARABIC LETTER HAH FINAL FORM" #xFEA2)
52 ("ARABIC LETTER HAH INITIAL FORM" #xFEA3)
53 ("ARABIC LETTER HAH MEDIAL FORM" #xFEA4)
54 ("ARABIC LETTER KHAH ISOLATED FORM" #xFEA5)
55 ("ARABIC LETTER KHAH FINAL FORM" #xFEA6)
56 ("ARABIC LETTER KHAH INITIAL FORM" #xFEA7)
57 ("ARABIC LETTER KHAH MEDIAL FORM" #xFEA8)
58 ("ARABIC LETTER DAL ISOLATED FORM" #xFEA9)
59 ("ARABIC LETTER DAL FINAL FORM" #xFEAA)
60 ("ARABIC LETTER THAL ISOLATED FORM" #xFEAB)
61 ("ARABIC LETTER THAL FINAL FORM" #xFEAC)
62 ("ARABIC LETTER REH ISOLATED FORM" #xFEAD)
63 ("ARABIC LETTER REH FINAL FORM" #xFEAE)
64 ("ARABIC LETTER ZAIN ISOLATED FORM" #xFEAF)
65 ("ARABIC LETTER ZAIN FINAL FORM" #xFEB0)
66 ("ARABIC LETTER SEEN ISOLATED FORM" #xFEB1)
67 ("ARABIC LETTER SEEN FINAL FORM" #xFEB2)
68 ("ARABIC LETTER SEEN INITIAL FORM" #xFEB3)
69 ("ARABIC LETTER SEEN MEDIAL FORM" #xFEB4)
70 ("ARABIC LETTER SHEEN ISOLATED FORM" #xFEB5)
71 ("ARABIC LETTER SHEEN FINAL FORM" #xFEB6)
72 ("ARABIC LETTER SHEEN INITIAL FORM" #xFEB7)
73 ("ARABIC LETTER SHEEN MEDIAL FORM" #xFEB8)
74 ("ARABIC LETTER SAD ISOLATED FORM" #xFEB9)
75 ("ARABIC LETTER SAD FINAL FORM" #xFEBA)
76 ("ARABIC LETTER SAD INITIAL FORM" #xFEBB)
77 ("ARABIC LETTER SAD MEDIAL FORM" #xFEBC)
78 ("ARABIC LETTER DAD ISOLATED FORM" #xFEBD)
79 ("ARABIC LETTER DAD FINAL FORM" #xFEBE)
80 ("ARABIC LETTER DAD INITIAL FORM" #xFEBF)
81 ("ARABIC LETTER DAD MEDIAL FORM" #xFEC0)
82 ("ARABIC LETTER TAH ISOLATED FORM" #xFEC1)
83 ("ARABIC LETTER TAH FINAL FORM" #xFEC2)
84 ("ARABIC LETTER TAH INITIAL FORM" #xFEC3)
85 ("ARABIC LETTER TAH MEDIAL FORM" #xFEC4)
86 ("ARABIC LETTER ZAH ISOLATED FORM" #xFEC5)
87 ("ARABIC LETTER ZAH FINAL FORM" #xFEC6)
88 ("ARABIC LETTER ZAH INITIAL FORM" #xFEC7)
89 ("ARABIC LETTER ZAH MEDIAL FORM" #xFEC8)
90 ("ARABIC LETTER AIN ISOLATED FORM" #xFEC9)
91 ("ARABIC LETTER AIN FINAL FORM" #xFECA)
92 ("ARABIC LETTER AIN INITIAL FORM" #xFECB)
93 ("ARABIC LETTER AIN MEDIAL FORM" #xFECC)
94 ("ARABIC LETTER GHAIN ISOLATED FORM" #xFECD)
95 ("ARABIC LETTER GHAIN FINAL FORM" #xFECE)
96 ("ARABIC LETTER GHAIN INITIAL FORM" #xFECF)
97 ("ARABIC LETTER GHAIN MEDIAL FORM" #xFED0)
98 ("ARABIC LETTER FEH ISOLATED FORM" #xFED1)
99 ("ARABIC LETTER FEH FINAL FORM" #xFED2)
100 ("ARABIC LETTER FEH INITIAL FORM" #xFED3)
101 ("ARABIC LETTER FEH MEDIAL FORM" #xFED4)
102 ("ARABIC LETTER QAF ISOLATED FORM" #xFED5)
103 ("ARABIC LETTER QAF FINAL FORM" #xFED6)
104 ("ARABIC LETTER QAF INITIAL FORM" #xFED7)
105 ("ARABIC LETTER QAF MEDIAL FORM" #xFED8)
106 ("ARABIC LETTER KAF ISOLATED FORM" #xFED9)
107 ("ARABIC LETTER KAF FINAL FORM" #xFEDA)
108 ("ARABIC LETTER KAF INITIAL FORM" #xFEDB)
109 ("ARABIC LETTER KAF MEDIAL FORM" #xFEDC)
110 ("ARABIC LETTER LAM ISOLATED FORM" #xFEDD)
111 ("ARABIC LETTER LAM FINAL FORM" #xFEDE)
112 ("ARABIC LETTER LAM INITIAL FORM" #xFEDF)
113 ("ARABIC LETTER LAM MEDIAL FORM" #xFEE0)
114 ("ARABIC LETTER MEEM ISOLATED FORM" #xFEE1)
115 ("ARABIC LETTER MEEM FINAL FORM" #xFEE2)
116 ("ARABIC LETTER MEEM INITIAL FORM" #xFEE3)
117 ("ARABIC LETTER MEEM MEDIAL FORM" #xFEE4)
118 ("ARABIC LETTER NOON ISOLATED FORM" #xFEE5)
119 ("ARABIC LETTER NOON FINAL FORM" #xFEE6)
120 ("ARABIC LETTER NOON INITIAL FORM" #xFEE7)
121 ("ARABIC LETTER NOON MEDIAL FORM" #xFEE8)
122 ("ARABIC LETTER HEH ISOLATED FORM" #xFEE9)
123 ("ARABIC LETTER HEH FINAL FORM" #xFEEA)
124 ("ARABIC LETTER HEH INITIAL FORM" #xFEEB)
125 ("ARABIC LETTER HEH MEDIAL FORM" #xFEEC)
126 ("ARABIC LETTER WAW ISOLATED FORM" #xFEED)
127 ("ARABIC LETTER WAW FINAL FORM" #xFEEE)
128 ("ARABIC LETTER ALEF MAKSURA ISOLATED FORM" #xFEEF)
129 ("ARABIC LETTER ALEF MAKSURA FINAL FORM" #xFEF0)
130 ("ARABIC LETTER YEH ISOLATED FORM" #xFEF1)
131 ("ARABIC LETTER YEH FINAL FORM" #xFEF2)
132 ("ARABIC LETTER YEH INITIAL FORM" #xFEF3)
133 ("ARABIC LETTER YEH MEDIAL FORM" #xFEF4)
134 ("ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM" #xFEF5)
135 ("ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM" #xFEF6)
136 ("ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM" #xFEF7)
137 ("ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM" #xFEF8)
138 ("ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM" #xFEF9)
139 ("ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM" #xFEFA)
140 ("ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM" #xFEFB)
141 ("ARABIC LIGATURE LAM WITH ALEF FINAL FORM" #xFEFC)
142 ("ZERO WIDTH NO-BREAK SPACE" #xFEFF)
143 ))
diff --git a/lisp/nxml/char-name/unicode/0FF00-0FFEF.el b/lisp/nxml/char-name/unicode/0FF00-0FFEF.el
new file mode 100644
index 00000000000..004f043c19b
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/0FF00-0FFEF.el
@@ -0,0 +1,227 @@
1(nxml-define-char-name-set 'halfwidth-and-fullwidth-forms
2 '(("FULLWIDTH EXCLAMATION MARK" #xFF01)
3 ("FULLWIDTH QUOTATION MARK" #xFF02)
4 ("FULLWIDTH NUMBER SIGN" #xFF03)
5 ("FULLWIDTH DOLLAR SIGN" #xFF04)
6 ("FULLWIDTH PERCENT SIGN" #xFF05)
7 ("FULLWIDTH AMPERSAND" #xFF06)
8 ("FULLWIDTH APOSTROPHE" #xFF07)
9 ("FULLWIDTH LEFT PARENTHESIS" #xFF08)
10 ("FULLWIDTH RIGHT PARENTHESIS" #xFF09)
11 ("FULLWIDTH ASTERISK" #xFF0A)
12 ("FULLWIDTH PLUS SIGN" #xFF0B)
13 ("FULLWIDTH COMMA" #xFF0C)
14 ("FULLWIDTH HYPHEN-MINUS" #xFF0D)
15 ("FULLWIDTH FULL STOP" #xFF0E)
16 ("FULLWIDTH SOLIDUS" #xFF0F)
17 ("FULLWIDTH DIGIT ZERO" #xFF10)
18 ("FULLWIDTH DIGIT ONE" #xFF11)
19 ("FULLWIDTH DIGIT TWO" #xFF12)
20 ("FULLWIDTH DIGIT THREE" #xFF13)
21 ("FULLWIDTH DIGIT FOUR" #xFF14)
22 ("FULLWIDTH DIGIT FIVE" #xFF15)
23 ("FULLWIDTH DIGIT SIX" #xFF16)
24 ("FULLWIDTH DIGIT SEVEN" #xFF17)
25 ("FULLWIDTH DIGIT EIGHT" #xFF18)
26 ("FULLWIDTH DIGIT NINE" #xFF19)
27 ("FULLWIDTH COLON" #xFF1A)
28 ("FULLWIDTH SEMICOLON" #xFF1B)
29 ("FULLWIDTH LESS-THAN SIGN" #xFF1C)
30 ("FULLWIDTH EQUALS SIGN" #xFF1D)
31 ("FULLWIDTH GREATER-THAN SIGN" #xFF1E)
32 ("FULLWIDTH QUESTION MARK" #xFF1F)
33 ("FULLWIDTH COMMERCIAL AT" #xFF20)
34 ("FULLWIDTH LATIN CAPITAL LETTER A" #xFF21)
35 ("FULLWIDTH LATIN CAPITAL LETTER B" #xFF22)
36 ("FULLWIDTH LATIN CAPITAL LETTER C" #xFF23)
37 ("FULLWIDTH LATIN CAPITAL LETTER D" #xFF24)
38 ("FULLWIDTH LATIN CAPITAL LETTER E" #xFF25)
39 ("FULLWIDTH LATIN CAPITAL LETTER F" #xFF26)
40 ("FULLWIDTH LATIN CAPITAL LETTER G" #xFF27)
41 ("FULLWIDTH LATIN CAPITAL LETTER H" #xFF28)
42 ("FULLWIDTH LATIN CAPITAL LETTER I" #xFF29)
43 ("FULLWIDTH LATIN CAPITAL LETTER J" #xFF2A)
44 ("FULLWIDTH LATIN CAPITAL LETTER K" #xFF2B)
45 ("FULLWIDTH LATIN CAPITAL LETTER L" #xFF2C)
46 ("FULLWIDTH LATIN CAPITAL LETTER M" #xFF2D)
47 ("FULLWIDTH LATIN CAPITAL LETTER N" #xFF2E)
48 ("FULLWIDTH LATIN CAPITAL LETTER O" #xFF2F)
49 ("FULLWIDTH LATIN CAPITAL LETTER P" #xFF30)
50 ("FULLWIDTH LATIN CAPITAL LETTER Q" #xFF31)
51 ("FULLWIDTH LATIN CAPITAL LETTER R" #xFF32)
52 ("FULLWIDTH LATIN CAPITAL LETTER S" #xFF33)
53 ("FULLWIDTH LATIN CAPITAL LETTER T" #xFF34)
54 ("FULLWIDTH LATIN CAPITAL LETTER U" #xFF35)
55 ("FULLWIDTH LATIN CAPITAL LETTER V" #xFF36)
56 ("FULLWIDTH LATIN CAPITAL LETTER W" #xFF37)
57 ("FULLWIDTH LATIN CAPITAL LETTER X" #xFF38)
58 ("FULLWIDTH LATIN CAPITAL LETTER Y" #xFF39)
59 ("FULLWIDTH LATIN CAPITAL LETTER Z" #xFF3A)
60 ("FULLWIDTH LEFT SQUARE BRACKET" #xFF3B)
61 ("FULLWIDTH REVERSE SOLIDUS" #xFF3C)
62 ("FULLWIDTH RIGHT SQUARE BRACKET" #xFF3D)
63 ("FULLWIDTH CIRCUMFLEX ACCENT" #xFF3E)
64 ("FULLWIDTH LOW LINE" #xFF3F)
65 ("FULLWIDTH GRAVE ACCENT" #xFF40)
66 ("FULLWIDTH LATIN SMALL LETTER A" #xFF41)
67 ("FULLWIDTH LATIN SMALL LETTER B" #xFF42)
68 ("FULLWIDTH LATIN SMALL LETTER C" #xFF43)
69 ("FULLWIDTH LATIN SMALL LETTER D" #xFF44)
70 ("FULLWIDTH LATIN SMALL LETTER E" #xFF45)
71 ("FULLWIDTH LATIN SMALL LETTER F" #xFF46)
72 ("FULLWIDTH LATIN SMALL LETTER G" #xFF47)
73 ("FULLWIDTH LATIN SMALL LETTER H" #xFF48)
74 ("FULLWIDTH LATIN SMALL LETTER I" #xFF49)
75 ("FULLWIDTH LATIN SMALL LETTER J" #xFF4A)
76 ("FULLWIDTH LATIN SMALL LETTER K" #xFF4B)
77 ("FULLWIDTH LATIN SMALL LETTER L" #xFF4C)
78 ("FULLWIDTH LATIN SMALL LETTER M" #xFF4D)
79 ("FULLWIDTH LATIN SMALL LETTER N" #xFF4E)
80 ("FULLWIDTH LATIN SMALL LETTER O" #xFF4F)
81 ("FULLWIDTH LATIN SMALL LETTER P" #xFF50)
82 ("FULLWIDTH LATIN SMALL LETTER Q" #xFF51)
83 ("FULLWIDTH LATIN SMALL LETTER R" #xFF52)
84 ("FULLWIDTH LATIN SMALL LETTER S" #xFF53)
85 ("FULLWIDTH LATIN SMALL LETTER T" #xFF54)
86 ("FULLWIDTH LATIN SMALL LETTER U" #xFF55)
87 ("FULLWIDTH LATIN SMALL LETTER V" #xFF56)
88 ("FULLWIDTH LATIN SMALL LETTER W" #xFF57)
89 ("FULLWIDTH LATIN SMALL LETTER X" #xFF58)
90 ("FULLWIDTH LATIN SMALL LETTER Y" #xFF59)
91 ("FULLWIDTH LATIN SMALL LETTER Z" #xFF5A)
92 ("FULLWIDTH LEFT CURLY BRACKET" #xFF5B)
93 ("FULLWIDTH VERTICAL LINE" #xFF5C)
94 ("FULLWIDTH RIGHT CURLY BRACKET" #xFF5D)
95 ("FULLWIDTH TILDE" #xFF5E)
96 ("FULLWIDTH LEFT WHITE PARENTHESIS" #xFF5F)
97 ("FULLWIDTH RIGHT WHITE PARENTHESIS" #xFF60)
98 ("HALFWIDTH IDEOGRAPHIC FULL STOP" #xFF61)
99 ("HALFWIDTH LEFT CORNER BRACKET" #xFF62)
100 ("HALFWIDTH RIGHT CORNER BRACKET" #xFF63)
101 ("HALFWIDTH IDEOGRAPHIC COMMA" #xFF64)
102 ("HALFWIDTH KATAKANA MIDDLE DOT" #xFF65)
103 ("HALFWIDTH KATAKANA LETTER WO" #xFF66)
104 ("HALFWIDTH KATAKANA LETTER SMALL A" #xFF67)
105 ("HALFWIDTH KATAKANA LETTER SMALL I" #xFF68)
106 ("HALFWIDTH KATAKANA LETTER SMALL U" #xFF69)
107 ("HALFWIDTH KATAKANA LETTER SMALL E" #xFF6A)
108 ("HALFWIDTH KATAKANA LETTER SMALL O" #xFF6B)
109 ("HALFWIDTH KATAKANA LETTER SMALL YA" #xFF6C)
110 ("HALFWIDTH KATAKANA LETTER SMALL YU" #xFF6D)
111 ("HALFWIDTH KATAKANA LETTER SMALL YO" #xFF6E)
112 ("HALFWIDTH KATAKANA LETTER SMALL TU" #xFF6F)
113 ("HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK" #xFF70)
114 ("HALFWIDTH KATAKANA LETTER A" #xFF71)
115 ("HALFWIDTH KATAKANA LETTER I" #xFF72)
116 ("HALFWIDTH KATAKANA LETTER U" #xFF73)
117 ("HALFWIDTH KATAKANA LETTER E" #xFF74)
118 ("HALFWIDTH KATAKANA LETTER O" #xFF75)
119 ("HALFWIDTH KATAKANA LETTER KA" #xFF76)
120 ("HALFWIDTH KATAKANA LETTER KI" #xFF77)
121 ("HALFWIDTH KATAKANA LETTER KU" #xFF78)
122 ("HALFWIDTH KATAKANA LETTER KE" #xFF79)
123 ("HALFWIDTH KATAKANA LETTER KO" #xFF7A)
124 ("HALFWIDTH KATAKANA LETTER SA" #xFF7B)
125 ("HALFWIDTH KATAKANA LETTER SI" #xFF7C)
126 ("HALFWIDTH KATAKANA LETTER SU" #xFF7D)
127 ("HALFWIDTH KATAKANA LETTER SE" #xFF7E)
128 ("HALFWIDTH KATAKANA LETTER SO" #xFF7F)
129 ("HALFWIDTH KATAKANA LETTER TA" #xFF80)
130 ("HALFWIDTH KATAKANA LETTER TI" #xFF81)
131 ("HALFWIDTH KATAKANA LETTER TU" #xFF82)
132 ("HALFWIDTH KATAKANA LETTER TE" #xFF83)
133 ("HALFWIDTH KATAKANA LETTER TO" #xFF84)
134 ("HALFWIDTH KATAKANA LETTER NA" #xFF85)
135 ("HALFWIDTH KATAKANA LETTER NI" #xFF86)
136 ("HALFWIDTH KATAKANA LETTER NU" #xFF87)
137 ("HALFWIDTH KATAKANA LETTER NE" #xFF88)
138 ("HALFWIDTH KATAKANA LETTER NO" #xFF89)
139 ("HALFWIDTH KATAKANA LETTER HA" #xFF8A)
140 ("HALFWIDTH KATAKANA LETTER HI" #xFF8B)
141 ("HALFWIDTH KATAKANA LETTER HU" #xFF8C)
142 ("HALFWIDTH KATAKANA LETTER HE" #xFF8D)
143 ("HALFWIDTH KATAKANA LETTER HO" #xFF8E)
144 ("HALFWIDTH KATAKANA LETTER MA" #xFF8F)
145 ("HALFWIDTH KATAKANA LETTER MI" #xFF90)
146 ("HALFWIDTH KATAKANA LETTER MU" #xFF91)
147 ("HALFWIDTH KATAKANA LETTER ME" #xFF92)
148 ("HALFWIDTH KATAKANA LETTER MO" #xFF93)
149 ("HALFWIDTH KATAKANA LETTER YA" #xFF94)
150 ("HALFWIDTH KATAKANA LETTER YU" #xFF95)
151 ("HALFWIDTH KATAKANA LETTER YO" #xFF96)
152 ("HALFWIDTH KATAKANA LETTER RA" #xFF97)
153 ("HALFWIDTH KATAKANA LETTER RI" #xFF98)
154 ("HALFWIDTH KATAKANA LETTER RU" #xFF99)
155 ("HALFWIDTH KATAKANA LETTER RE" #xFF9A)
156 ("HALFWIDTH KATAKANA LETTER RO" #xFF9B)
157 ("HALFWIDTH KATAKANA LETTER WA" #xFF9C)
158 ("HALFWIDTH KATAKANA LETTER N" #xFF9D)
159 ("HALFWIDTH KATAKANA VOICED SOUND MARK" #xFF9E)
160 ("HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK" #xFF9F)
161 ("HALFWIDTH HANGUL FILLER" #xFFA0)
162 ("HALFWIDTH HANGUL LETTER KIYEOK" #xFFA1)
163 ("HALFWIDTH HANGUL LETTER SSANGKIYEOK" #xFFA2)
164 ("HALFWIDTH HANGUL LETTER KIYEOK-SIOS" #xFFA3)
165 ("HALFWIDTH HANGUL LETTER NIEUN" #xFFA4)
166 ("HALFWIDTH HANGUL LETTER NIEUN-CIEUC" #xFFA5)
167 ("HALFWIDTH HANGUL LETTER NIEUN-HIEUH" #xFFA6)
168 ("HALFWIDTH HANGUL LETTER TIKEUT" #xFFA7)
169 ("HALFWIDTH HANGUL LETTER SSANGTIKEUT" #xFFA8)
170 ("HALFWIDTH HANGUL LETTER RIEUL" #xFFA9)
171 ("HALFWIDTH HANGUL LETTER RIEUL-KIYEOK" #xFFAA)
172 ("HALFWIDTH HANGUL LETTER RIEUL-MIEUM" #xFFAB)
173 ("HALFWIDTH HANGUL LETTER RIEUL-PIEUP" #xFFAC)
174 ("HALFWIDTH HANGUL LETTER RIEUL-SIOS" #xFFAD)
175 ("HALFWIDTH HANGUL LETTER RIEUL-THIEUTH" #xFFAE)
176 ("HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH" #xFFAF)
177 ("HALFWIDTH HANGUL LETTER RIEUL-HIEUH" #xFFB0)
178 ("HALFWIDTH HANGUL LETTER MIEUM" #xFFB1)
179 ("HALFWIDTH HANGUL LETTER PIEUP" #xFFB2)
180 ("HALFWIDTH HANGUL LETTER SSANGPIEUP" #xFFB3)
181 ("HALFWIDTH HANGUL LETTER PIEUP-SIOS" #xFFB4)
182 ("HALFWIDTH HANGUL LETTER SIOS" #xFFB5)
183 ("HALFWIDTH HANGUL LETTER SSANGSIOS" #xFFB6)
184 ("HALFWIDTH HANGUL LETTER IEUNG" #xFFB7)
185 ("HALFWIDTH HANGUL LETTER CIEUC" #xFFB8)
186 ("HALFWIDTH HANGUL LETTER SSANGCIEUC" #xFFB9)
187 ("HALFWIDTH HANGUL LETTER CHIEUCH" #xFFBA)
188 ("HALFWIDTH HANGUL LETTER KHIEUKH" #xFFBB)
189 ("HALFWIDTH HANGUL LETTER THIEUTH" #xFFBC)
190 ("HALFWIDTH HANGUL LETTER PHIEUPH" #xFFBD)
191 ("HALFWIDTH HANGUL LETTER HIEUH" #xFFBE)
192 ("HALFWIDTH HANGUL LETTER A" #xFFC2)
193 ("HALFWIDTH HANGUL LETTER AE" #xFFC3)
194 ("HALFWIDTH HANGUL LETTER YA" #xFFC4)
195 ("HALFWIDTH HANGUL LETTER YAE" #xFFC5)
196 ("HALFWIDTH HANGUL LETTER EO" #xFFC6)
197 ("HALFWIDTH HANGUL LETTER E" #xFFC7)
198 ("HALFWIDTH HANGUL LETTER YEO" #xFFCA)
199 ("HALFWIDTH HANGUL LETTER YE" #xFFCB)
200 ("HALFWIDTH HANGUL LETTER O" #xFFCC)
201 ("HALFWIDTH HANGUL LETTER WA" #xFFCD)
202 ("HALFWIDTH HANGUL LETTER WAE" #xFFCE)
203 ("HALFWIDTH HANGUL LETTER OE" #xFFCF)
204 ("HALFWIDTH HANGUL LETTER YO" #xFFD2)
205 ("HALFWIDTH HANGUL LETTER U" #xFFD3)
206 ("HALFWIDTH HANGUL LETTER WEO" #xFFD4)
207 ("HALFWIDTH HANGUL LETTER WE" #xFFD5)
208 ("HALFWIDTH HANGUL LETTER WI" #xFFD6)
209 ("HALFWIDTH HANGUL LETTER YU" #xFFD7)
210 ("HALFWIDTH HANGUL LETTER EU" #xFFDA)
211 ("HALFWIDTH HANGUL LETTER YI" #xFFDB)
212 ("HALFWIDTH HANGUL LETTER I" #xFFDC)
213 ("FULLWIDTH CENT SIGN" #xFFE0)
214 ("FULLWIDTH POUND SIGN" #xFFE1)
215 ("FULLWIDTH NOT SIGN" #xFFE2)
216 ("FULLWIDTH MACRON" #xFFE3)
217 ("FULLWIDTH BROKEN BAR" #xFFE4)
218 ("FULLWIDTH YEN SIGN" #xFFE5)
219 ("FULLWIDTH WON SIGN" #xFFE6)
220 ("HALFWIDTH FORMS LIGHT VERTICAL" #xFFE8)
221 ("HALFWIDTH LEFTWARDS ARROW" #xFFE9)
222 ("HALFWIDTH UPWARDS ARROW" #xFFEA)
223 ("HALFWIDTH RIGHTWARDS ARROW" #xFFEB)
224 ("HALFWIDTH DOWNWARDS ARROW" #xFFEC)
225 ("HALFWIDTH BLACK SQUARE" #xFFED)
226 ("HALFWIDTH WHITE CIRCLE" #xFFEE)
227 ))
diff --git a/lisp/nxml/char-name/unicode/0FFF0-0FFFF.el b/lisp/nxml/char-name/unicode/0FFF0-0FFFF.el
new file mode 100644
index 00000000000..f381a28e05a
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/0FFF0-0FFFF.el
@@ -0,0 +1,7 @@
1(nxml-define-char-name-set 'specials
2 '(("INTERLINEAR ANNOTATION ANCHOR" #xFFF9)
3 ("INTERLINEAR ANNOTATION SEPARATOR" #xFFFA)
4 ("INTERLINEAR ANNOTATION TERMINATOR" #xFFFB)
5 ("OBJECT REPLACEMENT CHARACTER" #xFFFC)
6 ("REPLACEMENT CHARACTER" #xFFFD)
7 ))
diff --git a/lisp/nxml/char-name/unicode/10300-1032F.el b/lisp/nxml/char-name/unicode/10300-1032F.el
new file mode 100644
index 00000000000..fbb5cb8f253
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/10300-1032F.el
@@ -0,0 +1,37 @@
1(nxml-define-char-name-set 'old-italic
2 '(("OLD ITALIC LETTER A" #x10300)
3 ("OLD ITALIC LETTER BE" #x10301)
4 ("OLD ITALIC LETTER KE" #x10302)
5 ("OLD ITALIC LETTER DE" #x10303)
6 ("OLD ITALIC LETTER E" #x10304)
7 ("OLD ITALIC LETTER VE" #x10305)
8 ("OLD ITALIC LETTER ZE" #x10306)
9 ("OLD ITALIC LETTER HE" #x10307)
10 ("OLD ITALIC LETTER THE" #x10308)
11 ("OLD ITALIC LETTER I" #x10309)
12 ("OLD ITALIC LETTER KA" #x1030A)
13 ("OLD ITALIC LETTER EL" #x1030B)
14 ("OLD ITALIC LETTER EM" #x1030C)
15 ("OLD ITALIC LETTER EN" #x1030D)
16 ("OLD ITALIC LETTER ESH" #x1030E)
17 ("OLD ITALIC LETTER O" #x1030F)
18 ("OLD ITALIC LETTER PE" #x10310)
19 ("OLD ITALIC LETTER SHE" #x10311)
20 ("OLD ITALIC LETTER KU" #x10312)
21 ("OLD ITALIC LETTER ER" #x10313)
22 ("OLD ITALIC LETTER ES" #x10314)
23 ("OLD ITALIC LETTER TE" #x10315)
24 ("OLD ITALIC LETTER U" #x10316)
25 ("OLD ITALIC LETTER EKS" #x10317)
26 ("OLD ITALIC LETTER PHE" #x10318)
27 ("OLD ITALIC LETTER KHE" #x10319)
28 ("OLD ITALIC LETTER EF" #x1031A)
29 ("OLD ITALIC LETTER ERS" #x1031B)
30 ("OLD ITALIC LETTER CHE" #x1031C)
31 ("OLD ITALIC LETTER II" #x1031D)
32 ("OLD ITALIC LETTER UU" #x1031E)
33 ("OLD ITALIC NUMERAL ONE" #x10320)
34 ("OLD ITALIC NUMERAL FIVE" #x10321)
35 ("OLD ITALIC NUMERAL TEN" #x10322)
36 ("OLD ITALIC NUMERAL FIFTY" #x10323)
37 ))
diff --git a/lisp/nxml/char-name/unicode/10330-1034F.el b/lisp/nxml/char-name/unicode/10330-1034F.el
new file mode 100644
index 00000000000..38ba2988a4c
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/10330-1034F.el
@@ -0,0 +1,29 @@
1(nxml-define-char-name-set 'gothic
2 '(("GOTHIC LETTER AHSA" #x10330)
3 ("GOTHIC LETTER BAIRKAN" #x10331)
4 ("GOTHIC LETTER GIBA" #x10332)
5 ("GOTHIC LETTER DAGS" #x10333)
6 ("GOTHIC LETTER AIHVUS" #x10334)
7 ("GOTHIC LETTER QAIRTHRA" #x10335)
8 ("GOTHIC LETTER IUJA" #x10336)
9 ("GOTHIC LETTER HAGL" #x10337)
10 ("GOTHIC LETTER THIUTH" #x10338)
11 ("GOTHIC LETTER EIS" #x10339)
12 ("GOTHIC LETTER KUSMA" #x1033A)
13 ("GOTHIC LETTER LAGUS" #x1033B)
14 ("GOTHIC LETTER MANNA" #x1033C)
15 ("GOTHIC LETTER NAUTHS" #x1033D)
16 ("GOTHIC LETTER JER" #x1033E)
17 ("GOTHIC LETTER URUS" #x1033F)
18 ("GOTHIC LETTER PAIRTHRA" #x10340)
19 ("GOTHIC LETTER NINETY" #x10341)
20 ("GOTHIC LETTER RAIDA" #x10342)
21 ("GOTHIC LETTER SAUIL" #x10343)
22 ("GOTHIC LETTER TEIWS" #x10344)
23 ("GOTHIC LETTER WINJA" #x10345)
24 ("GOTHIC LETTER FAIHU" #x10346)
25 ("GOTHIC LETTER IGGWS" #x10347)
26 ("GOTHIC LETTER HWAIR" #x10348)
27 ("GOTHIC LETTER OTHAL" #x10349)
28 ("GOTHIC LETTER NINE HUNDRED" #x1034A)
29 ))
diff --git a/lisp/nxml/char-name/unicode/10400-1044F.el b/lisp/nxml/char-name/unicode/10400-1044F.el
new file mode 100644
index 00000000000..1637cf666bf
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/10400-1044F.el
@@ -0,0 +1,78 @@
1(nxml-define-char-name-set 'deseret
2 '(("DESERET CAPITAL LETTER LONG I" #x10400)
3 ("DESERET CAPITAL LETTER LONG E" #x10401)
4 ("DESERET CAPITAL LETTER LONG A" #x10402)
5 ("DESERET CAPITAL LETTER LONG AH" #x10403)
6 ("DESERET CAPITAL LETTER LONG O" #x10404)
7 ("DESERET CAPITAL LETTER LONG OO" #x10405)
8 ("DESERET CAPITAL LETTER SHORT I" #x10406)
9 ("DESERET CAPITAL LETTER SHORT E" #x10407)
10 ("DESERET CAPITAL LETTER SHORT A" #x10408)
11 ("DESERET CAPITAL LETTER SHORT AH" #x10409)
12 ("DESERET CAPITAL LETTER SHORT O" #x1040A)
13 ("DESERET CAPITAL LETTER SHORT OO" #x1040B)
14 ("DESERET CAPITAL LETTER AY" #x1040C)
15 ("DESERET CAPITAL LETTER OW" #x1040D)
16 ("DESERET CAPITAL LETTER WU" #x1040E)
17 ("DESERET CAPITAL LETTER YEE" #x1040F)
18 ("DESERET CAPITAL LETTER H" #x10410)
19 ("DESERET CAPITAL LETTER PEE" #x10411)
20 ("DESERET CAPITAL LETTER BEE" #x10412)
21 ("DESERET CAPITAL LETTER TEE" #x10413)
22 ("DESERET CAPITAL LETTER DEE" #x10414)
23 ("DESERET CAPITAL LETTER CHEE" #x10415)
24 ("DESERET CAPITAL LETTER JEE" #x10416)
25 ("DESERET CAPITAL LETTER KAY" #x10417)
26 ("DESERET CAPITAL LETTER GAY" #x10418)
27 ("DESERET CAPITAL LETTER EF" #x10419)
28 ("DESERET CAPITAL LETTER VEE" #x1041A)
29 ("DESERET CAPITAL LETTER ETH" #x1041B)
30 ("DESERET CAPITAL LETTER THEE" #x1041C)
31 ("DESERET CAPITAL LETTER ES" #x1041D)
32 ("DESERET CAPITAL LETTER ZEE" #x1041E)
33 ("DESERET CAPITAL LETTER ESH" #x1041F)
34 ("DESERET CAPITAL LETTER ZHEE" #x10420)
35 ("DESERET CAPITAL LETTER ER" #x10421)
36 ("DESERET CAPITAL LETTER EL" #x10422)
37 ("DESERET CAPITAL LETTER EM" #x10423)
38 ("DESERET CAPITAL LETTER EN" #x10424)
39 ("DESERET CAPITAL LETTER ENG" #x10425)
40 ("DESERET SMALL LETTER LONG I" #x10428)
41 ("DESERET SMALL LETTER LONG E" #x10429)
42 ("DESERET SMALL LETTER LONG A" #x1042A)
43 ("DESERET SMALL LETTER LONG AH" #x1042B)
44 ("DESERET SMALL LETTER LONG O" #x1042C)
45 ("DESERET SMALL LETTER LONG OO" #x1042D)
46 ("DESERET SMALL LETTER SHORT I" #x1042E)
47 ("DESERET SMALL LETTER SHORT E" #x1042F)
48 ("DESERET SMALL LETTER SHORT A" #x10430)
49 ("DESERET SMALL LETTER SHORT AH" #x10431)
50 ("DESERET SMALL LETTER SHORT O" #x10432)
51 ("DESERET SMALL LETTER SHORT OO" #x10433)
52 ("DESERET SMALL LETTER AY" #x10434)
53 ("DESERET SMALL LETTER OW" #x10435)
54 ("DESERET SMALL LETTER WU" #x10436)
55 ("DESERET SMALL LETTER YEE" #x10437)
56 ("DESERET SMALL LETTER H" #x10438)
57 ("DESERET SMALL LETTER PEE" #x10439)
58 ("DESERET SMALL LETTER BEE" #x1043A)
59 ("DESERET SMALL LETTER TEE" #x1043B)
60 ("DESERET SMALL LETTER DEE" #x1043C)
61 ("DESERET SMALL LETTER CHEE" #x1043D)
62 ("DESERET SMALL LETTER JEE" #x1043E)
63 ("DESERET SMALL LETTER KAY" #x1043F)
64 ("DESERET SMALL LETTER GAY" #x10440)
65 ("DESERET SMALL LETTER EF" #x10441)
66 ("DESERET SMALL LETTER VEE" #x10442)
67 ("DESERET SMALL LETTER ETH" #x10443)
68 ("DESERET SMALL LETTER THEE" #x10444)
69 ("DESERET SMALL LETTER ES" #x10445)
70 ("DESERET SMALL LETTER ZEE" #x10446)
71 ("DESERET SMALL LETTER ESH" #x10447)
72 ("DESERET SMALL LETTER ZHEE" #x10448)
73 ("DESERET SMALL LETTER ER" #x10449)
74 ("DESERET SMALL LETTER EL" #x1044A)
75 ("DESERET SMALL LETTER EM" #x1044B)
76 ("DESERET SMALL LETTER EN" #x1044C)
77 ("DESERET SMALL LETTER ENG" #x1044D)
78 ))
diff --git a/lisp/nxml/char-name/unicode/1D000-1D0FF.el b/lisp/nxml/char-name/unicode/1D000-1D0FF.el
new file mode 100644
index 00000000000..f1a6f36dff7
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/1D000-1D0FF.el
@@ -0,0 +1,248 @@
1(nxml-define-char-name-set 'byzantine-musical-symbols
2 '(("BYZANTINE MUSICAL SYMBOL PSILI" #x1D000)
3 ("BYZANTINE MUSICAL SYMBOL DASEIA" #x1D001)
4 ("BYZANTINE MUSICAL SYMBOL PERISPOMENI" #x1D002)
5 ("BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON" #x1D003)
6 ("BYZANTINE MUSICAL SYMBOL OXEIA DIPLI" #x1D004)
7 ("BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON" #x1D005)
8 ("BYZANTINE MUSICAL SYMBOL VAREIA DIPLI" #x1D006)
9 ("BYZANTINE MUSICAL SYMBOL KATHISTI" #x1D007)
10 ("BYZANTINE MUSICAL SYMBOL SYRMATIKI" #x1D008)
11 ("BYZANTINE MUSICAL SYMBOL PARAKLITIKI" #x1D009)
12 ("BYZANTINE MUSICAL SYMBOL YPOKRISIS" #x1D00A)
13 ("BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI" #x1D00B)
14 ("BYZANTINE MUSICAL SYMBOL KREMASTI" #x1D00C)
15 ("BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON" #x1D00D)
16 ("BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON" #x1D00E)
17 ("BYZANTINE MUSICAL SYMBOL TELEIA" #x1D00F)
18 ("BYZANTINE MUSICAL SYMBOL KENTIMATA" #x1D010)
19 ("BYZANTINE MUSICAL SYMBOL APOSTROFOS" #x1D011)
20 ("BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI" #x1D012)
21 ("BYZANTINE MUSICAL SYMBOL SYNEVMA" #x1D013)
22 ("BYZANTINE MUSICAL SYMBOL THITA" #x1D014)
23 ("BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION" #x1D015)
24 ("BYZANTINE MUSICAL SYMBOL GORGON ARCHAION" #x1D016)
25 ("BYZANTINE MUSICAL SYMBOL PSILON" #x1D017)
26 ("BYZANTINE MUSICAL SYMBOL CHAMILON" #x1D018)
27 ("BYZANTINE MUSICAL SYMBOL VATHY" #x1D019)
28 ("BYZANTINE MUSICAL SYMBOL ISON ARCHAION" #x1D01A)
29 ("BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION" #x1D01B)
30 ("BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION" #x1D01C)
31 ("BYZANTINE MUSICAL SYMBOL SAXIMATA" #x1D01D)
32 ("BYZANTINE MUSICAL SYMBOL PARICHON" #x1D01E)
33 ("BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA" #x1D01F)
34 ("BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION" #x1D020)
35 ("BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION" #x1D021)
36 ("BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION" #x1D022)
37 ("BYZANTINE MUSICAL SYMBOL APOTHEMA" #x1D023)
38 ("BYZANTINE MUSICAL SYMBOL KLASMA" #x1D024)
39 ("BYZANTINE MUSICAL SYMBOL REVMA" #x1D025)
40 ("BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION" #x1D026)
41 ("BYZANTINE MUSICAL SYMBOL TINAGMA" #x1D027)
42 ("BYZANTINE MUSICAL SYMBOL ANATRICHISMA" #x1D028)
43 ("BYZANTINE MUSICAL SYMBOL SEISMA" #x1D029)
44 ("BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION" #x1D02A)
45 ("BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU" #x1D02B)
46 ("BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION" #x1D02C)
47 ("BYZANTINE MUSICAL SYMBOL THEMA" #x1D02D)
48 ("BYZANTINE MUSICAL SYMBOL LEMOI" #x1D02E)
49 ("BYZANTINE MUSICAL SYMBOL DYO" #x1D02F)
50 ("BYZANTINE MUSICAL SYMBOL TRIA" #x1D030)
51 ("BYZANTINE MUSICAL SYMBOL TESSERA" #x1D031)
52 ("BYZANTINE MUSICAL SYMBOL KRATIMATA" #x1D032)
53 ("BYZANTINE MUSICAL SYMBOL APESO EXO NEO" #x1D033)
54 ("BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION" #x1D034)
55 ("BYZANTINE MUSICAL SYMBOL IMIFTHORA" #x1D035)
56 ("BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION" #x1D036)
57 ("BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON" #x1D037)
58 ("BYZANTINE MUSICAL SYMBOL PELASTON" #x1D038)
59 ("BYZANTINE MUSICAL SYMBOL PSIFISTON" #x1D039)
60 ("BYZANTINE MUSICAL SYMBOL KONTEVMA" #x1D03A)
61 ("BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION" #x1D03B)
62 ("BYZANTINE MUSICAL SYMBOL RAPISMA" #x1D03C)
63 ("BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION" #x1D03D)
64 ("BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION" #x1D03E)
65 ("BYZANTINE MUSICAL SYMBOL ICHADIN" #x1D03F)
66 ("BYZANTINE MUSICAL SYMBOL NANA" #x1D040)
67 ("BYZANTINE MUSICAL SYMBOL PETASMA" #x1D041)
68 ("BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO" #x1D042)
69 ("BYZANTINE MUSICAL SYMBOL TROMIKON ALLO" #x1D043)
70 ("BYZANTINE MUSICAL SYMBOL STRAGGISMATA" #x1D044)
71 ("BYZANTINE MUSICAL SYMBOL GRONTHISMATA" #x1D045)
72 ("BYZANTINE MUSICAL SYMBOL ISON NEO" #x1D046)
73 ("BYZANTINE MUSICAL SYMBOL OLIGON NEO" #x1D047)
74 ("BYZANTINE MUSICAL SYMBOL OXEIA NEO" #x1D048)
75 ("BYZANTINE MUSICAL SYMBOL PETASTI" #x1D049)
76 ("BYZANTINE MUSICAL SYMBOL KOUFISMA" #x1D04A)
77 ("BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA" #x1D04B)
78 ("BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA" #x1D04C)
79 ("BYZANTINE MUSICAL SYMBOL PELASTON NEO" #x1D04D)
80 ("BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO" #x1D04E)
81 ("BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO" #x1D04F)
82 ("BYZANTINE MUSICAL SYMBOL YPSILI" #x1D050)
83 ("BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO" #x1D051)
84 ("BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO" #x1D052)
85 ("BYZANTINE MUSICAL SYMBOL YPORROI" #x1D053)
86 ("BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON" #x1D054)
87 ("BYZANTINE MUSICAL SYMBOL ELAFRON" #x1D055)
88 ("BYZANTINE MUSICAL SYMBOL CHAMILI" #x1D056)
89 ("BYZANTINE MUSICAL SYMBOL MIKRON ISON" #x1D057)
90 ("BYZANTINE MUSICAL SYMBOL VAREIA NEO" #x1D058)
91 ("BYZANTINE MUSICAL SYMBOL PIASMA NEO" #x1D059)
92 ("BYZANTINE MUSICAL SYMBOL PSIFISTON NEO" #x1D05A)
93 ("BYZANTINE MUSICAL SYMBOL OMALON" #x1D05B)
94 ("BYZANTINE MUSICAL SYMBOL ANTIKENOMA" #x1D05C)
95 ("BYZANTINE MUSICAL SYMBOL LYGISMA" #x1D05D)
96 ("BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO" #x1D05E)
97 ("BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO" #x1D05F)
98 ("BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA" #x1D060)
99 ("BYZANTINE MUSICAL SYMBOL KYLISMA" #x1D061)
100 ("BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA" #x1D062)
101 ("BYZANTINE MUSICAL SYMBOL TROMIKON NEO" #x1D063)
102 ("BYZANTINE MUSICAL SYMBOL EKSTREPTON" #x1D064)
103 ("BYZANTINE MUSICAL SYMBOL SYNAGMA NEO" #x1D065)
104 ("BYZANTINE MUSICAL SYMBOL SYRMA" #x1D066)
105 ("BYZANTINE MUSICAL SYMBOL CHOREVMA NEO" #x1D067)
106 ("BYZANTINE MUSICAL SYMBOL EPEGERMA" #x1D068)
107 ("BYZANTINE MUSICAL SYMBOL SEISMA NEO" #x1D069)
108 ("BYZANTINE MUSICAL SYMBOL XIRON KLASMA" #x1D06A)
109 ("BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON" #x1D06B)
110 ("BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA" #x1D06C)
111 ("BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA" #x1D06D)
112 ("BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA" #x1D06E)
113 ("BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA" #x1D06F)
114 ("BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA" #x1D070)
115 ("BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA" #x1D071)
116 ("BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON" #x1D072)
117 ("BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON" #x1D073)
118 ("BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON" #x1D074)
119 ("BYZANTINE MUSICAL SYMBOL OYRANISMA NEO" #x1D075)
120 ("BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO" #x1D076)
121 ("BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO" #x1D077)
122 ("BYZANTINE MUSICAL SYMBOL THEMA APLOUN" #x1D078)
123 ("BYZANTINE MUSICAL SYMBOL THES KAI APOTHES" #x1D079)
124 ("BYZANTINE MUSICAL SYMBOL KATAVASMA" #x1D07A)
125 ("BYZANTINE MUSICAL SYMBOL ENDOFONON" #x1D07B)
126 ("BYZANTINE MUSICAL SYMBOL YFEN KATO" #x1D07C)
127 ("BYZANTINE MUSICAL SYMBOL YFEN ANO" #x1D07D)
128 ("BYZANTINE MUSICAL SYMBOL STAVROS" #x1D07E)
129 ("BYZANTINE MUSICAL SYMBOL KLASMA ANO" #x1D07F)
130 ("BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION" #x1D080)
131 ("BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION" #x1D081)
132 ("BYZANTINE MUSICAL SYMBOL KRATIMA ALLO" #x1D082)
133 ("BYZANTINE MUSICAL SYMBOL KRATIMA NEO" #x1D083)
134 ("BYZANTINE MUSICAL SYMBOL APODERMA NEO" #x1D084)
135 ("BYZANTINE MUSICAL SYMBOL APLI" #x1D085)
136 ("BYZANTINE MUSICAL SYMBOL DIPLI" #x1D086)
137 ("BYZANTINE MUSICAL SYMBOL TRIPLI" #x1D087)
138 ("BYZANTINE MUSICAL SYMBOL TETRAPLI" #x1D088)
139 ("BYZANTINE MUSICAL SYMBOL KORONIS" #x1D089)
140 ("BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU" #x1D08A)
141 ("BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON" #x1D08B)
142 ("BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON" #x1D08C)
143 ("BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON" #x1D08D)
144 ("BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU" #x1D08E)
145 ("BYZANTINE MUSICAL SYMBOL GORGON NEO ANO" #x1D08F)
146 ("BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA" #x1D090)
147 ("BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA" #x1D091)
148 ("BYZANTINE MUSICAL SYMBOL DIGORGON" #x1D092)
149 ("BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO" #x1D093)
150 ("BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO" #x1D094)
151 ("BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA" #x1D095)
152 ("BYZANTINE MUSICAL SYMBOL TRIGORGON" #x1D096)
153 ("BYZANTINE MUSICAL SYMBOL ARGON" #x1D097)
154 ("BYZANTINE MUSICAL SYMBOL IMIDIARGON" #x1D098)
155 ("BYZANTINE MUSICAL SYMBOL DIARGON" #x1D099)
156 ("BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI" #x1D09A)
157 ("BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI" #x1D09B)
158 ("BYZANTINE MUSICAL SYMBOL AGOGI ARGI" #x1D09C)
159 ("BYZANTINE MUSICAL SYMBOL AGOGI METRIA" #x1D09D)
160 ("BYZANTINE MUSICAL SYMBOL AGOGI MESI" #x1D09E)
161 ("BYZANTINE MUSICAL SYMBOL AGOGI GORGI" #x1D09F)
162 ("BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI" #x1D0A0)
163 ("BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI" #x1D0A1)
164 ("BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS" #x1D0A2)
165 ("BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS" #x1D0A3)
166 ("BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS" #x1D0A4)
167 ("BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS" #x1D0A5)
168 ("BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS" #x1D0A6)
169 ("BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS" #x1D0A7)
170 ("BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS" #x1D0A8)
171 ("BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS" #x1D0A9)
172 ("BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS" #x1D0AA)
173 ("BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS" #x1D0AB)
174 ("BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS" #x1D0AC)
175 ("BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS" #x1D0AD)
176 ("BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS" #x1D0AE)
177 ("BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS" #x1D0AF)
178 ("BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS" #x1D0B0)
179 ("BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS" #x1D0B1)
180 ("BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS" #x1D0B2)
181 ("BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS" #x1D0B3)
182 ("BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN" #x1D0B4)
183 ("BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN" #x1D0B5)
184 ("BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU" #x1D0B6)
185 ("BYZANTINE MUSICAL SYMBOL IMIFONON" #x1D0B7)
186 ("BYZANTINE MUSICAL SYMBOL IMIFTHORON" #x1D0B8)
187 ("BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU" #x1D0B9)
188 ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA" #x1D0BA)
189 ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA" #x1D0BB)
190 ("BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS" #x1D0BC)
191 ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI" #x1D0BD)
192 ("BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI" #x1D0BE)
193 ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE" #x1D0BF)
194 ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO" #x1D0C0)
195 ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO" #x1D0C1)
196 ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO" #x1D0C2)
197 ("BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS" #x1D0C3)
198 ("BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS" #x1D0C4)
199 ("BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS" #x1D0C5)
200 ("BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI" #x1D0C6)
201 ("BYZANTINE MUSICAL SYMBOL FTHORA NENANO" #x1D0C7)
202 ("BYZANTINE MUSICAL SYMBOL CHROA ZYGOS" #x1D0C8)
203 ("BYZANTINE MUSICAL SYMBOL CHROA KLITON" #x1D0C9)
204 ("BYZANTINE MUSICAL SYMBOL CHROA SPATHI" #x1D0CA)
205 ("BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION" #x1D0CB)
206 ("BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA" #x1D0CC)
207 ("BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION" #x1D0CD)
208 ("BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION" #x1D0CE)
209 ("BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION" #x1D0CF)
210 ("BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA" #x1D0D0)
211 ("BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA" #x1D0D1)
212 ("BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA" #x1D0D2)
213 ("BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA" #x1D0D3)
214 ("BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA" #x1D0D4)
215 ("BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA" #x1D0D5)
216 ("BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA" #x1D0D6)
217 ("BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA" #x1D0D7)
218 ("BYZANTINE MUSICAL SYMBOL GENIKI DIESIS" #x1D0D8)
219 ("BYZANTINE MUSICAL SYMBOL GENIKI YFESIS" #x1D0D9)
220 ("BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI" #x1D0DA)
221 ("BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI" #x1D0DB)
222 ("BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI" #x1D0DC)
223 ("BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS" #x1D0DD)
224 ("BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS" #x1D0DE)
225 ("BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU" #x1D0DF)
226 ("BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU" #x1D0E0)
227 ("BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU" #x1D0E1)
228 ("BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS" #x1D0E2)
229 ("BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU" #x1D0E3)
230 ("BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU" #x1D0E4)
231 ("BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU" #x1D0E5)
232 ("BYZANTINE MUSICAL SYMBOL DIGRAMMA GG" #x1D0E6)
233 ("BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU" #x1D0E7)
234 ("BYZANTINE MUSICAL SYMBOL STIGMA" #x1D0E8)
235 ("BYZANTINE MUSICAL SYMBOL ARKTIKO PA" #x1D0E9)
236 ("BYZANTINE MUSICAL SYMBOL ARKTIKO VOU" #x1D0EA)
237 ("BYZANTINE MUSICAL SYMBOL ARKTIKO GA" #x1D0EB)
238 ("BYZANTINE MUSICAL SYMBOL ARKTIKO DI" #x1D0EC)
239 ("BYZANTINE MUSICAL SYMBOL ARKTIKO KE" #x1D0ED)
240 ("BYZANTINE MUSICAL SYMBOL ARKTIKO ZO" #x1D0EE)
241 ("BYZANTINE MUSICAL SYMBOL ARKTIKO NI" #x1D0EF)
242 ("BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO" #x1D0F0)
243 ("BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO" #x1D0F1)
244 ("BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO" #x1D0F2)
245 ("BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO" #x1D0F3)
246 ("BYZANTINE MUSICAL SYMBOL KLASMA KATO" #x1D0F4)
247 ("BYZANTINE MUSICAL SYMBOL GORGON NEO KATO" #x1D0F5)
248 ))
diff --git a/lisp/nxml/char-name/unicode/1D100-1D1FF.el b/lisp/nxml/char-name/unicode/1D100-1D1FF.el
new file mode 100644
index 00000000000..29803dd0a7d
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/1D100-1D1FF.el
@@ -0,0 +1,221 @@
1(nxml-define-char-name-set 'musical-symbols
2 '(("MUSICAL SYMBOL SINGLE BARLINE" #x1D100)
3 ("MUSICAL SYMBOL DOUBLE BARLINE" #x1D101)
4 ("MUSICAL SYMBOL FINAL BARLINE" #x1D102)
5 ("MUSICAL SYMBOL REVERSE FINAL BARLINE" #x1D103)
6 ("MUSICAL SYMBOL DASHED BARLINE" #x1D104)
7 ("MUSICAL SYMBOL SHORT BARLINE" #x1D105)
8 ("MUSICAL SYMBOL LEFT REPEAT SIGN" #x1D106)
9 ("MUSICAL SYMBOL RIGHT REPEAT SIGN" #x1D107)
10 ("MUSICAL SYMBOL REPEAT DOTS" #x1D108)
11 ("MUSICAL SYMBOL DAL SEGNO" #x1D109)
12 ("MUSICAL SYMBOL DA CAPO" #x1D10A)
13 ("MUSICAL SYMBOL SEGNO" #x1D10B)
14 ("MUSICAL SYMBOL CODA" #x1D10C)
15 ("MUSICAL SYMBOL REPEATED FIGURE-1" #x1D10D)
16 ("MUSICAL SYMBOL REPEATED FIGURE-2" #x1D10E)
17 ("MUSICAL SYMBOL REPEATED FIGURE-3" #x1D10F)
18 ("MUSICAL SYMBOL FERMATA" #x1D110)
19 ("MUSICAL SYMBOL FERMATA BELOW" #x1D111)
20 ("MUSICAL SYMBOL BREATH MARK" #x1D112)
21 ("MUSICAL SYMBOL CAESURA" #x1D113)
22 ("MUSICAL SYMBOL BRACE" #x1D114)
23 ("MUSICAL SYMBOL BRACKET" #x1D115)
24 ("MUSICAL SYMBOL ONE-LINE STAFF" #x1D116)
25 ("MUSICAL SYMBOL TWO-LINE STAFF" #x1D117)
26 ("MUSICAL SYMBOL THREE-LINE STAFF" #x1D118)
27 ("MUSICAL SYMBOL FOUR-LINE STAFF" #x1D119)
28 ("MUSICAL SYMBOL FIVE-LINE STAFF" #x1D11A)
29 ("MUSICAL SYMBOL SIX-LINE STAFF" #x1D11B)
30 ("MUSICAL SYMBOL SIX-STRING FRETBOARD" #x1D11C)
31 ("MUSICAL SYMBOL FOUR-STRING FRETBOARD" #x1D11D)
32 ("MUSICAL SYMBOL G CLEF" #x1D11E)
33 ("MUSICAL SYMBOL G CLEF OTTAVA ALTA" #x1D11F)
34 ("MUSICAL SYMBOL G CLEF OTTAVA BASSA" #x1D120)
35 ("MUSICAL SYMBOL C CLEF" #x1D121)
36 ("MUSICAL SYMBOL F CLEF" #x1D122)
37 ("MUSICAL SYMBOL F CLEF OTTAVA ALTA" #x1D123)
38 ("MUSICAL SYMBOL F CLEF OTTAVA BASSA" #x1D124)
39 ("MUSICAL SYMBOL DRUM CLEF-1" #x1D125)
40 ("MUSICAL SYMBOL DRUM CLEF-2" #x1D126)
41 ("MUSICAL SYMBOL DOUBLE SHARP" #x1D12A)
42 ("MUSICAL SYMBOL DOUBLE FLAT" #x1D12B)
43 ("MUSICAL SYMBOL FLAT UP" #x1D12C)
44 ("MUSICAL SYMBOL FLAT DOWN" #x1D12D)
45 ("MUSICAL SYMBOL NATURAL UP" #x1D12E)
46 ("MUSICAL SYMBOL NATURAL DOWN" #x1D12F)
47 ("MUSICAL SYMBOL SHARP UP" #x1D130)
48 ("MUSICAL SYMBOL SHARP DOWN" #x1D131)
49 ("MUSICAL SYMBOL QUARTER TONE SHARP" #x1D132)
50 ("MUSICAL SYMBOL QUARTER TONE FLAT" #x1D133)
51 ("MUSICAL SYMBOL COMMON TIME" #x1D134)
52 ("MUSICAL SYMBOL CUT TIME" #x1D135)
53 ("MUSICAL SYMBOL OTTAVA ALTA" #x1D136)
54 ("MUSICAL SYMBOL OTTAVA BASSA" #x1D137)
55 ("MUSICAL SYMBOL QUINDICESIMA ALTA" #x1D138)
56 ("MUSICAL SYMBOL QUINDICESIMA BASSA" #x1D139)
57 ("MUSICAL SYMBOL MULTI REST" #x1D13A)
58 ("MUSICAL SYMBOL WHOLE REST" #x1D13B)
59 ("MUSICAL SYMBOL HALF REST" #x1D13C)
60 ("MUSICAL SYMBOL QUARTER REST" #x1D13D)
61 ("MUSICAL SYMBOL EIGHTH REST" #x1D13E)
62 ("MUSICAL SYMBOL SIXTEENTH REST" #x1D13F)
63 ("MUSICAL SYMBOL THIRTY-SECOND REST" #x1D140)
64 ("MUSICAL SYMBOL SIXTY-FOURTH REST" #x1D141)
65 ("MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST" #x1D142)
66 ("MUSICAL SYMBOL X NOTEHEAD" #x1D143)
67 ("MUSICAL SYMBOL PLUS NOTEHEAD" #x1D144)
68 ("MUSICAL SYMBOL CIRCLE X NOTEHEAD" #x1D145)
69 ("MUSICAL SYMBOL SQUARE NOTEHEAD WHITE" #x1D146)
70 ("MUSICAL SYMBOL SQUARE NOTEHEAD BLACK" #x1D147)
71 ("MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE" #x1D148)
72 ("MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK" #x1D149)
73 ("MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE" #x1D14A)
74 ("MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK" #x1D14B)
75 ("MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE" #x1D14C)
76 ("MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK" #x1D14D)
77 ("MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE" #x1D14E)
78 ("MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK" #x1D14F)
79 ("MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE" #x1D150)
80 ("MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK" #x1D151)
81 ("MUSICAL SYMBOL MOON NOTEHEAD WHITE" #x1D152)
82 ("MUSICAL SYMBOL MOON NOTEHEAD BLACK" #x1D153)
83 ("MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE" #x1D154)
84 ("MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK" #x1D155)
85 ("MUSICAL SYMBOL PARENTHESIS NOTEHEAD" #x1D156)
86 ("MUSICAL SYMBOL VOID NOTEHEAD" #x1D157)
87 ("MUSICAL SYMBOL NOTEHEAD BLACK" #x1D158)
88 ("MUSICAL SYMBOL NULL NOTEHEAD" #x1D159)
89 ("MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE" #x1D15A)
90 ("MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK" #x1D15B)
91 ("MUSICAL SYMBOL BREVE" #x1D15C)
92 ("MUSICAL SYMBOL WHOLE NOTE" #x1D15D)
93 ("MUSICAL SYMBOL HALF NOTE" #x1D15E)
94 ("MUSICAL SYMBOL QUARTER NOTE" #x1D15F)
95 ("MUSICAL SYMBOL EIGHTH NOTE" #x1D160)
96 ("MUSICAL SYMBOL SIXTEENTH NOTE" #x1D161)
97 ("MUSICAL SYMBOL THIRTY-SECOND NOTE" #x1D162)
98 ("MUSICAL SYMBOL SIXTY-FOURTH NOTE" #x1D163)
99 ("MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE" #x1D164)
100 ("MUSICAL SYMBOL COMBINING STEM" #x1D165)
101 ("MUSICAL SYMBOL COMBINING SPRECHGESANG STEM" #x1D166)
102 ("MUSICAL SYMBOL COMBINING TREMOLO-1" #x1D167)
103 ("MUSICAL SYMBOL COMBINING TREMOLO-2" #x1D168)
104 ("MUSICAL SYMBOL COMBINING TREMOLO-3" #x1D169)
105 ("MUSICAL SYMBOL FINGERED TREMOLO-1" #x1D16A)
106 ("MUSICAL SYMBOL FINGERED TREMOLO-2" #x1D16B)
107 ("MUSICAL SYMBOL FINGERED TREMOLO-3" #x1D16C)
108 ("MUSICAL SYMBOL COMBINING AUGMENTATION DOT" #x1D16D)
109 ("MUSICAL SYMBOL COMBINING FLAG-1" #x1D16E)
110 ("MUSICAL SYMBOL COMBINING FLAG-2" #x1D16F)
111 ("MUSICAL SYMBOL COMBINING FLAG-3" #x1D170)
112 ("MUSICAL SYMBOL COMBINING FLAG-4" #x1D171)
113 ("MUSICAL SYMBOL COMBINING FLAG-5" #x1D172)
114 ("MUSICAL SYMBOL BEGIN BEAM" #x1D173)
115 ("MUSICAL SYMBOL END BEAM" #x1D174)
116 ("MUSICAL SYMBOL BEGIN TIE" #x1D175)
117 ("MUSICAL SYMBOL END TIE" #x1D176)
118 ("MUSICAL SYMBOL BEGIN SLUR" #x1D177)
119 ("MUSICAL SYMBOL END SLUR" #x1D178)
120 ("MUSICAL SYMBOL BEGIN PHRASE" #x1D179)
121 ("MUSICAL SYMBOL END PHRASE" #x1D17A)
122 ("MUSICAL SYMBOL COMBINING ACCENT" #x1D17B)
123 ("MUSICAL SYMBOL COMBINING STACCATO" #x1D17C)
124 ("MUSICAL SYMBOL COMBINING TENUTO" #x1D17D)
125 ("MUSICAL SYMBOL COMBINING STACCATISSIMO" #x1D17E)
126 ("MUSICAL SYMBOL COMBINING MARCATO" #x1D17F)
127 ("MUSICAL SYMBOL COMBINING MARCATO-STACCATO" #x1D180)
128 ("MUSICAL SYMBOL COMBINING ACCENT-STACCATO" #x1D181)
129 ("MUSICAL SYMBOL COMBINING LOURE" #x1D182)
130 ("MUSICAL SYMBOL ARPEGGIATO UP" #x1D183)
131 ("MUSICAL SYMBOL ARPEGGIATO DOWN" #x1D184)
132 ("MUSICAL SYMBOL COMBINING DOIT" #x1D185)
133 ("MUSICAL SYMBOL COMBINING RIP" #x1D186)
134 ("MUSICAL SYMBOL COMBINING FLIP" #x1D187)
135 ("MUSICAL SYMBOL COMBINING SMEAR" #x1D188)
136 ("MUSICAL SYMBOL COMBINING BEND" #x1D189)
137 ("MUSICAL SYMBOL COMBINING DOUBLE TONGUE" #x1D18A)
138 ("MUSICAL SYMBOL COMBINING TRIPLE TONGUE" #x1D18B)
139 ("MUSICAL SYMBOL RINFORZANDO" #x1D18C)
140 ("MUSICAL SYMBOL SUBITO" #x1D18D)
141 ("MUSICAL SYMBOL Z" #x1D18E)
142 ("MUSICAL SYMBOL PIANO" #x1D18F)
143 ("MUSICAL SYMBOL MEZZO" #x1D190)
144 ("MUSICAL SYMBOL FORTE" #x1D191)
145 ("MUSICAL SYMBOL CRESCENDO" #x1D192)
146 ("MUSICAL SYMBOL DECRESCENDO" #x1D193)
147 ("MUSICAL SYMBOL GRACE NOTE SLASH" #x1D194)
148 ("MUSICAL SYMBOL GRACE NOTE NO SLASH" #x1D195)
149 ("MUSICAL SYMBOL TR" #x1D196)
150 ("MUSICAL SYMBOL TURN" #x1D197)
151 ("MUSICAL SYMBOL INVERTED TURN" #x1D198)
152 ("MUSICAL SYMBOL TURN SLASH" #x1D199)
153 ("MUSICAL SYMBOL TURN UP" #x1D19A)
154 ("MUSICAL SYMBOL ORNAMENT STROKE-1" #x1D19B)
155 ("MUSICAL SYMBOL ORNAMENT STROKE-2" #x1D19C)
156 ("MUSICAL SYMBOL ORNAMENT STROKE-3" #x1D19D)
157 ("MUSICAL SYMBOL ORNAMENT STROKE-4" #x1D19E)
158 ("MUSICAL SYMBOL ORNAMENT STROKE-5" #x1D19F)
159 ("MUSICAL SYMBOL ORNAMENT STROKE-6" #x1D1A0)
160 ("MUSICAL SYMBOL ORNAMENT STROKE-7" #x1D1A1)
161 ("MUSICAL SYMBOL ORNAMENT STROKE-8" #x1D1A2)
162 ("MUSICAL SYMBOL ORNAMENT STROKE-9" #x1D1A3)
163 ("MUSICAL SYMBOL ORNAMENT STROKE-10" #x1D1A4)
164 ("MUSICAL SYMBOL ORNAMENT STROKE-11" #x1D1A5)
165 ("MUSICAL SYMBOL HAUPTSTIMME" #x1D1A6)
166 ("MUSICAL SYMBOL NEBENSTIMME" #x1D1A7)
167 ("MUSICAL SYMBOL END OF STIMME" #x1D1A8)
168 ("MUSICAL SYMBOL DEGREE SLASH" #x1D1A9)
169 ("MUSICAL SYMBOL COMBINING DOWN BOW" #x1D1AA)
170 ("MUSICAL SYMBOL COMBINING UP BOW" #x1D1AB)
171 ("MUSICAL SYMBOL COMBINING HARMONIC" #x1D1AC)
172 ("MUSICAL SYMBOL COMBINING SNAP PIZZICATO" #x1D1AD)
173 ("MUSICAL SYMBOL PEDAL MARK" #x1D1AE)
174 ("MUSICAL SYMBOL PEDAL UP MARK" #x1D1AF)
175 ("MUSICAL SYMBOL HALF PEDAL MARK" #x1D1B0)
176 ("MUSICAL SYMBOL GLISSANDO UP" #x1D1B1)
177 ("MUSICAL SYMBOL GLISSANDO DOWN" #x1D1B2)
178 ("MUSICAL SYMBOL WITH FINGERNAILS" #x1D1B3)
179 ("MUSICAL SYMBOL DAMP" #x1D1B4)
180 ("MUSICAL SYMBOL DAMP ALL" #x1D1B5)
181 ("MUSICAL SYMBOL MAXIMA" #x1D1B6)
182 ("MUSICAL SYMBOL LONGA" #x1D1B7)
183 ("MUSICAL SYMBOL BREVIS" #x1D1B8)
184 ("MUSICAL SYMBOL SEMIBREVIS WHITE" #x1D1B9)
185 ("MUSICAL SYMBOL SEMIBREVIS BLACK" #x1D1BA)
186 ("MUSICAL SYMBOL MINIMA" #x1D1BB)
187 ("MUSICAL SYMBOL MINIMA BLACK" #x1D1BC)
188 ("MUSICAL SYMBOL SEMIMINIMA WHITE" #x1D1BD)
189 ("MUSICAL SYMBOL SEMIMINIMA BLACK" #x1D1BE)
190 ("MUSICAL SYMBOL FUSA WHITE" #x1D1BF)
191 ("MUSICAL SYMBOL FUSA BLACK" #x1D1C0)
192 ("MUSICAL SYMBOL LONGA PERFECTA REST" #x1D1C1)
193 ("MUSICAL SYMBOL LONGA IMPERFECTA REST" #x1D1C2)
194 ("MUSICAL SYMBOL BREVIS REST" #x1D1C3)
195 ("MUSICAL SYMBOL SEMIBREVIS REST" #x1D1C4)
196 ("MUSICAL SYMBOL MINIMA REST" #x1D1C5)
197 ("MUSICAL SYMBOL SEMIMINIMA REST" #x1D1C6)
198 ("MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA" #x1D1C7)
199 ("MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA" #x1D1C8)
200 ("MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1" #x1D1C9)
201 ("MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA" #x1D1CA)
202 ("MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA" #x1D1CB)
203 ("MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1" #x1D1CC)
204 ("MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2" #x1D1CD)
205 ("MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3" #x1D1CE)
206 ("MUSICAL SYMBOL CROIX" #x1D1CF)
207 ("MUSICAL SYMBOL GREGORIAN C CLEF" #x1D1D0)
208 ("MUSICAL SYMBOL GREGORIAN F CLEF" #x1D1D1)
209 ("MUSICAL SYMBOL SQUARE B" #x1D1D2)
210 ("MUSICAL SYMBOL VIRGA" #x1D1D3)
211 ("MUSICAL SYMBOL PODATUS" #x1D1D4)
212 ("MUSICAL SYMBOL CLIVIS" #x1D1D5)
213 ("MUSICAL SYMBOL SCANDICUS" #x1D1D6)
214 ("MUSICAL SYMBOL CLIMACUS" #x1D1D7)
215 ("MUSICAL SYMBOL TORCULUS" #x1D1D8)
216 ("MUSICAL SYMBOL PORRECTUS" #x1D1D9)
217 ("MUSICAL SYMBOL PORRECTUS FLEXUS" #x1D1DA)
218 ("MUSICAL SYMBOL SCANDICUS FLEXUS" #x1D1DB)
219 ("MUSICAL SYMBOL TORCULUS RESUPINUS" #x1D1DC)
220 ("MUSICAL SYMBOL PES SUBPUNCTIS" #x1D1DD)
221 ))
diff --git a/lisp/nxml/char-name/unicode/1D400-1D7FF.el b/lisp/nxml/char-name/unicode/1D400-1D7FF.el
new file mode 100644
index 00000000000..98e8c2382cd
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/1D400-1D7FF.el
@@ -0,0 +1,993 @@
1(nxml-define-char-name-set 'mathematical-alphanumeric-symbols
2 '(("MATHEMATICAL BOLD CAPITAL A" #x1D400)
3 ("MATHEMATICAL BOLD CAPITAL B" #x1D401)
4 ("MATHEMATICAL BOLD CAPITAL C" #x1D402)
5 ("MATHEMATICAL BOLD CAPITAL D" #x1D403)
6 ("MATHEMATICAL BOLD CAPITAL E" #x1D404)
7 ("MATHEMATICAL BOLD CAPITAL F" #x1D405)
8 ("MATHEMATICAL BOLD CAPITAL G" #x1D406)
9 ("MATHEMATICAL BOLD CAPITAL H" #x1D407)
10 ("MATHEMATICAL BOLD CAPITAL I" #x1D408)
11 ("MATHEMATICAL BOLD CAPITAL J" #x1D409)
12 ("MATHEMATICAL BOLD CAPITAL K" #x1D40A)
13 ("MATHEMATICAL BOLD CAPITAL L" #x1D40B)
14 ("MATHEMATICAL BOLD CAPITAL M" #x1D40C)
15 ("MATHEMATICAL BOLD CAPITAL N" #x1D40D)
16 ("MATHEMATICAL BOLD CAPITAL O" #x1D40E)
17 ("MATHEMATICAL BOLD CAPITAL P" #x1D40F)
18 ("MATHEMATICAL BOLD CAPITAL Q" #x1D410)
19 ("MATHEMATICAL BOLD CAPITAL R" #x1D411)
20 ("MATHEMATICAL BOLD CAPITAL S" #x1D412)
21 ("MATHEMATICAL BOLD CAPITAL T" #x1D413)
22 ("MATHEMATICAL BOLD CAPITAL U" #x1D414)
23 ("MATHEMATICAL BOLD CAPITAL V" #x1D415)
24 ("MATHEMATICAL BOLD CAPITAL W" #x1D416)
25 ("MATHEMATICAL BOLD CAPITAL X" #x1D417)
26 ("MATHEMATICAL BOLD CAPITAL Y" #x1D418)
27 ("MATHEMATICAL BOLD CAPITAL Z" #x1D419)
28 ("MATHEMATICAL BOLD SMALL A" #x1D41A)
29 ("MATHEMATICAL BOLD SMALL B" #x1D41B)
30 ("MATHEMATICAL BOLD SMALL C" #x1D41C)
31 ("MATHEMATICAL BOLD SMALL D" #x1D41D)
32 ("MATHEMATICAL BOLD SMALL E" #x1D41E)
33 ("MATHEMATICAL BOLD SMALL F" #x1D41F)
34 ("MATHEMATICAL BOLD SMALL G" #x1D420)
35 ("MATHEMATICAL BOLD SMALL H" #x1D421)
36 ("MATHEMATICAL BOLD SMALL I" #x1D422)
37 ("MATHEMATICAL BOLD SMALL J" #x1D423)
38 ("MATHEMATICAL BOLD SMALL K" #x1D424)
39 ("MATHEMATICAL BOLD SMALL L" #x1D425)
40 ("MATHEMATICAL BOLD SMALL M" #x1D426)
41 ("MATHEMATICAL BOLD SMALL N" #x1D427)
42 ("MATHEMATICAL BOLD SMALL O" #x1D428)
43 ("MATHEMATICAL BOLD SMALL P" #x1D429)
44 ("MATHEMATICAL BOLD SMALL Q" #x1D42A)
45 ("MATHEMATICAL BOLD SMALL R" #x1D42B)
46 ("MATHEMATICAL BOLD SMALL S" #x1D42C)
47 ("MATHEMATICAL BOLD SMALL T" #x1D42D)
48 ("MATHEMATICAL BOLD SMALL U" #x1D42E)
49 ("MATHEMATICAL BOLD SMALL V" #x1D42F)
50 ("MATHEMATICAL BOLD SMALL W" #x1D430)
51 ("MATHEMATICAL BOLD SMALL X" #x1D431)
52 ("MATHEMATICAL BOLD SMALL Y" #x1D432)
53 ("MATHEMATICAL BOLD SMALL Z" #x1D433)
54 ("MATHEMATICAL ITALIC CAPITAL A" #x1D434)
55 ("MATHEMATICAL ITALIC CAPITAL B" #x1D435)
56 ("MATHEMATICAL ITALIC CAPITAL C" #x1D436)
57 ("MATHEMATICAL ITALIC CAPITAL D" #x1D437)
58 ("MATHEMATICAL ITALIC CAPITAL E" #x1D438)
59 ("MATHEMATICAL ITALIC CAPITAL F" #x1D439)
60 ("MATHEMATICAL ITALIC CAPITAL G" #x1D43A)
61 ("MATHEMATICAL ITALIC CAPITAL H" #x1D43B)
62 ("MATHEMATICAL ITALIC CAPITAL I" #x1D43C)
63 ("MATHEMATICAL ITALIC CAPITAL J" #x1D43D)
64 ("MATHEMATICAL ITALIC CAPITAL K" #x1D43E)
65 ("MATHEMATICAL ITALIC CAPITAL L" #x1D43F)
66 ("MATHEMATICAL ITALIC CAPITAL M" #x1D440)
67 ("MATHEMATICAL ITALIC CAPITAL N" #x1D441)
68 ("MATHEMATICAL ITALIC CAPITAL O" #x1D442)
69 ("MATHEMATICAL ITALIC CAPITAL P" #x1D443)
70 ("MATHEMATICAL ITALIC CAPITAL Q" #x1D444)
71 ("MATHEMATICAL ITALIC CAPITAL R" #x1D445)
72 ("MATHEMATICAL ITALIC CAPITAL S" #x1D446)
73 ("MATHEMATICAL ITALIC CAPITAL T" #x1D447)
74 ("MATHEMATICAL ITALIC CAPITAL U" #x1D448)
75 ("MATHEMATICAL ITALIC CAPITAL V" #x1D449)
76 ("MATHEMATICAL ITALIC CAPITAL W" #x1D44A)
77 ("MATHEMATICAL ITALIC CAPITAL X" #x1D44B)
78 ("MATHEMATICAL ITALIC CAPITAL Y" #x1D44C)
79 ("MATHEMATICAL ITALIC CAPITAL Z" #x1D44D)
80 ("MATHEMATICAL ITALIC SMALL A" #x1D44E)
81 ("MATHEMATICAL ITALIC SMALL B" #x1D44F)
82 ("MATHEMATICAL ITALIC SMALL C" #x1D450)
83 ("MATHEMATICAL ITALIC SMALL D" #x1D451)
84 ("MATHEMATICAL ITALIC SMALL E" #x1D452)
85 ("MATHEMATICAL ITALIC SMALL F" #x1D453)
86 ("MATHEMATICAL ITALIC SMALL G" #x1D454)
87 ("MATHEMATICAL ITALIC SMALL I" #x1D456)
88 ("MATHEMATICAL ITALIC SMALL J" #x1D457)
89 ("MATHEMATICAL ITALIC SMALL K" #x1D458)
90 ("MATHEMATICAL ITALIC SMALL L" #x1D459)
91 ("MATHEMATICAL ITALIC SMALL M" #x1D45A)
92 ("MATHEMATICAL ITALIC SMALL N" #x1D45B)
93 ("MATHEMATICAL ITALIC SMALL O" #x1D45C)
94 ("MATHEMATICAL ITALIC SMALL P" #x1D45D)
95 ("MATHEMATICAL ITALIC SMALL Q" #x1D45E)
96 ("MATHEMATICAL ITALIC SMALL R" #x1D45F)
97 ("MATHEMATICAL ITALIC SMALL S" #x1D460)
98 ("MATHEMATICAL ITALIC SMALL T" #x1D461)
99 ("MATHEMATICAL ITALIC SMALL U" #x1D462)
100 ("MATHEMATICAL ITALIC SMALL V" #x1D463)
101 ("MATHEMATICAL ITALIC SMALL W" #x1D464)
102 ("MATHEMATICAL ITALIC SMALL X" #x1D465)
103 ("MATHEMATICAL ITALIC SMALL Y" #x1D466)
104 ("MATHEMATICAL ITALIC SMALL Z" #x1D467)
105 ("MATHEMATICAL BOLD ITALIC CAPITAL A" #x1D468)
106 ("MATHEMATICAL BOLD ITALIC CAPITAL B" #x1D469)
107 ("MATHEMATICAL BOLD ITALIC CAPITAL C" #x1D46A)
108 ("MATHEMATICAL BOLD ITALIC CAPITAL D" #x1D46B)
109 ("MATHEMATICAL BOLD ITALIC CAPITAL E" #x1D46C)
110 ("MATHEMATICAL BOLD ITALIC CAPITAL F" #x1D46D)
111 ("MATHEMATICAL BOLD ITALIC CAPITAL G" #x1D46E)
112 ("MATHEMATICAL BOLD ITALIC CAPITAL H" #x1D46F)
113 ("MATHEMATICAL BOLD ITALIC CAPITAL I" #x1D470)
114 ("MATHEMATICAL BOLD ITALIC CAPITAL J" #x1D471)
115 ("MATHEMATICAL BOLD ITALIC CAPITAL K" #x1D472)
116 ("MATHEMATICAL BOLD ITALIC CAPITAL L" #x1D473)
117 ("MATHEMATICAL BOLD ITALIC CAPITAL M" #x1D474)
118 ("MATHEMATICAL BOLD ITALIC CAPITAL N" #x1D475)
119 ("MATHEMATICAL BOLD ITALIC CAPITAL O" #x1D476)
120 ("MATHEMATICAL BOLD ITALIC CAPITAL P" #x1D477)
121 ("MATHEMATICAL BOLD ITALIC CAPITAL Q" #x1D478)
122 ("MATHEMATICAL BOLD ITALIC CAPITAL R" #x1D479)
123 ("MATHEMATICAL BOLD ITALIC CAPITAL S" #x1D47A)
124 ("MATHEMATICAL BOLD ITALIC CAPITAL T" #x1D47B)
125 ("MATHEMATICAL BOLD ITALIC CAPITAL U" #x1D47C)
126 ("MATHEMATICAL BOLD ITALIC CAPITAL V" #x1D47D)
127 ("MATHEMATICAL BOLD ITALIC CAPITAL W" #x1D47E)
128 ("MATHEMATICAL BOLD ITALIC CAPITAL X" #x1D47F)
129 ("MATHEMATICAL BOLD ITALIC CAPITAL Y" #x1D480)
130 ("MATHEMATICAL BOLD ITALIC CAPITAL Z" #x1D481)
131 ("MATHEMATICAL BOLD ITALIC SMALL A" #x1D482)
132 ("MATHEMATICAL BOLD ITALIC SMALL B" #x1D483)
133 ("MATHEMATICAL BOLD ITALIC SMALL C" #x1D484)
134 ("MATHEMATICAL BOLD ITALIC SMALL D" #x1D485)
135 ("MATHEMATICAL BOLD ITALIC SMALL E" #x1D486)
136 ("MATHEMATICAL BOLD ITALIC SMALL F" #x1D487)
137 ("MATHEMATICAL BOLD ITALIC SMALL G" #x1D488)
138 ("MATHEMATICAL BOLD ITALIC SMALL H" #x1D489)
139 ("MATHEMATICAL BOLD ITALIC SMALL I" #x1D48A)
140 ("MATHEMATICAL BOLD ITALIC SMALL J" #x1D48B)
141 ("MATHEMATICAL BOLD ITALIC SMALL K" #x1D48C)
142 ("MATHEMATICAL BOLD ITALIC SMALL L" #x1D48D)
143 ("MATHEMATICAL BOLD ITALIC SMALL M" #x1D48E)
144 ("MATHEMATICAL BOLD ITALIC SMALL N" #x1D48F)
145 ("MATHEMATICAL BOLD ITALIC SMALL O" #x1D490)
146 ("MATHEMATICAL BOLD ITALIC SMALL P" #x1D491)
147 ("MATHEMATICAL BOLD ITALIC SMALL Q" #x1D492)
148 ("MATHEMATICAL BOLD ITALIC SMALL R" #x1D493)
149 ("MATHEMATICAL BOLD ITALIC SMALL S" #x1D494)
150 ("MATHEMATICAL BOLD ITALIC SMALL T" #x1D495)
151 ("MATHEMATICAL BOLD ITALIC SMALL U" #x1D496)
152 ("MATHEMATICAL BOLD ITALIC SMALL V" #x1D497)
153 ("MATHEMATICAL BOLD ITALIC SMALL W" #x1D498)
154 ("MATHEMATICAL BOLD ITALIC SMALL X" #x1D499)
155 ("MATHEMATICAL BOLD ITALIC SMALL Y" #x1D49A)
156 ("MATHEMATICAL BOLD ITALIC SMALL Z" #x1D49B)
157 ("MATHEMATICAL SCRIPT CAPITAL A" #x1D49C)
158 ("MATHEMATICAL SCRIPT CAPITAL C" #x1D49E)
159 ("MATHEMATICAL SCRIPT CAPITAL D" #x1D49F)
160 ("MATHEMATICAL SCRIPT CAPITAL G" #x1D4A2)
161 ("MATHEMATICAL SCRIPT CAPITAL J" #x1D4A5)
162 ("MATHEMATICAL SCRIPT CAPITAL K" #x1D4A6)
163 ("MATHEMATICAL SCRIPT CAPITAL N" #x1D4A9)
164 ("MATHEMATICAL SCRIPT CAPITAL O" #x1D4AA)
165 ("MATHEMATICAL SCRIPT CAPITAL P" #x1D4AB)
166 ("MATHEMATICAL SCRIPT CAPITAL Q" #x1D4AC)
167 ("MATHEMATICAL SCRIPT CAPITAL S" #x1D4AE)
168 ("MATHEMATICAL SCRIPT CAPITAL T" #x1D4AF)
169 ("MATHEMATICAL SCRIPT CAPITAL U" #x1D4B0)
170 ("MATHEMATICAL SCRIPT CAPITAL V" #x1D4B1)
171 ("MATHEMATICAL SCRIPT CAPITAL W" #x1D4B2)
172 ("MATHEMATICAL SCRIPT CAPITAL X" #x1D4B3)
173 ("MATHEMATICAL SCRIPT CAPITAL Y" #x1D4B4)
174 ("MATHEMATICAL SCRIPT CAPITAL Z" #x1D4B5)
175 ("MATHEMATICAL SCRIPT SMALL A" #x1D4B6)
176 ("MATHEMATICAL SCRIPT SMALL B" #x1D4B7)
177 ("MATHEMATICAL SCRIPT SMALL C" #x1D4B8)
178 ("MATHEMATICAL SCRIPT SMALL D" #x1D4B9)
179 ("MATHEMATICAL SCRIPT SMALL F" #x1D4BB)
180 ("MATHEMATICAL SCRIPT SMALL H" #x1D4BD)
181 ("MATHEMATICAL SCRIPT SMALL I" #x1D4BE)
182 ("MATHEMATICAL SCRIPT SMALL J" #x1D4BF)
183 ("MATHEMATICAL SCRIPT SMALL K" #x1D4C0)
184 ("MATHEMATICAL SCRIPT SMALL M" #x1D4C2)
185 ("MATHEMATICAL SCRIPT SMALL N" #x1D4C3)
186 ("MATHEMATICAL SCRIPT SMALL P" #x1D4C5)
187 ("MATHEMATICAL SCRIPT SMALL Q" #x1D4C6)
188 ("MATHEMATICAL SCRIPT SMALL R" #x1D4C7)
189 ("MATHEMATICAL SCRIPT SMALL S" #x1D4C8)
190 ("MATHEMATICAL SCRIPT SMALL T" #x1D4C9)
191 ("MATHEMATICAL SCRIPT SMALL U" #x1D4CA)
192 ("MATHEMATICAL SCRIPT SMALL V" #x1D4CB)
193 ("MATHEMATICAL SCRIPT SMALL W" #x1D4CC)
194 ("MATHEMATICAL SCRIPT SMALL X" #x1D4CD)
195 ("MATHEMATICAL SCRIPT SMALL Y" #x1D4CE)
196 ("MATHEMATICAL SCRIPT SMALL Z" #x1D4CF)
197 ("MATHEMATICAL BOLD SCRIPT CAPITAL A" #x1D4D0)
198 ("MATHEMATICAL BOLD SCRIPT CAPITAL B" #x1D4D1)
199 ("MATHEMATICAL BOLD SCRIPT CAPITAL C" #x1D4D2)
200 ("MATHEMATICAL BOLD SCRIPT CAPITAL D" #x1D4D3)
201 ("MATHEMATICAL BOLD SCRIPT CAPITAL E" #x1D4D4)
202 ("MATHEMATICAL BOLD SCRIPT CAPITAL F" #x1D4D5)
203 ("MATHEMATICAL BOLD SCRIPT CAPITAL G" #x1D4D6)
204 ("MATHEMATICAL BOLD SCRIPT CAPITAL H" #x1D4D7)
205 ("MATHEMATICAL BOLD SCRIPT CAPITAL I" #x1D4D8)
206 ("MATHEMATICAL BOLD SCRIPT CAPITAL J" #x1D4D9)
207 ("MATHEMATICAL BOLD SCRIPT CAPITAL K" #x1D4DA)
208 ("MATHEMATICAL BOLD SCRIPT CAPITAL L" #x1D4DB)
209 ("MATHEMATICAL BOLD SCRIPT CAPITAL M" #x1D4DC)
210 ("MATHEMATICAL BOLD SCRIPT CAPITAL N" #x1D4DD)
211 ("MATHEMATICAL BOLD SCRIPT CAPITAL O" #x1D4DE)
212 ("MATHEMATICAL BOLD SCRIPT CAPITAL P" #x1D4DF)
213 ("MATHEMATICAL BOLD SCRIPT CAPITAL Q" #x1D4E0)
214 ("MATHEMATICAL BOLD SCRIPT CAPITAL R" #x1D4E1)
215 ("MATHEMATICAL BOLD SCRIPT CAPITAL S" #x1D4E2)
216 ("MATHEMATICAL BOLD SCRIPT CAPITAL T" #x1D4E3)
217 ("MATHEMATICAL BOLD SCRIPT CAPITAL U" #x1D4E4)
218 ("MATHEMATICAL BOLD SCRIPT CAPITAL V" #x1D4E5)
219 ("MATHEMATICAL BOLD SCRIPT CAPITAL W" #x1D4E6)
220 ("MATHEMATICAL BOLD SCRIPT CAPITAL X" #x1D4E7)
221 ("MATHEMATICAL BOLD SCRIPT CAPITAL Y" #x1D4E8)
222 ("MATHEMATICAL BOLD SCRIPT CAPITAL Z" #x1D4E9)
223 ("MATHEMATICAL BOLD SCRIPT SMALL A" #x1D4EA)
224 ("MATHEMATICAL BOLD SCRIPT SMALL B" #x1D4EB)
225 ("MATHEMATICAL BOLD SCRIPT SMALL C" #x1D4EC)
226 ("MATHEMATICAL BOLD SCRIPT SMALL D" #x1D4ED)
227 ("MATHEMATICAL BOLD SCRIPT SMALL E" #x1D4EE)
228 ("MATHEMATICAL BOLD SCRIPT SMALL F" #x1D4EF)
229 ("MATHEMATICAL BOLD SCRIPT SMALL G" #x1D4F0)
230 ("MATHEMATICAL BOLD SCRIPT SMALL H" #x1D4F1)
231 ("MATHEMATICAL BOLD SCRIPT SMALL I" #x1D4F2)
232 ("MATHEMATICAL BOLD SCRIPT SMALL J" #x1D4F3)
233 ("MATHEMATICAL BOLD SCRIPT SMALL K" #x1D4F4)
234 ("MATHEMATICAL BOLD SCRIPT SMALL L" #x1D4F5)
235 ("MATHEMATICAL BOLD SCRIPT SMALL M" #x1D4F6)
236 ("MATHEMATICAL BOLD SCRIPT SMALL N" #x1D4F7)
237 ("MATHEMATICAL BOLD SCRIPT SMALL O" #x1D4F8)
238 ("MATHEMATICAL BOLD SCRIPT SMALL P" #x1D4F9)
239 ("MATHEMATICAL BOLD SCRIPT SMALL Q" #x1D4FA)
240 ("MATHEMATICAL BOLD SCRIPT SMALL R" #x1D4FB)
241 ("MATHEMATICAL BOLD SCRIPT SMALL S" #x1D4FC)
242 ("MATHEMATICAL BOLD SCRIPT SMALL T" #x1D4FD)
243 ("MATHEMATICAL BOLD SCRIPT SMALL U" #x1D4FE)
244 ("MATHEMATICAL BOLD SCRIPT SMALL V" #x1D4FF)
245 ("MATHEMATICAL BOLD SCRIPT SMALL W" #x1D500)
246 ("MATHEMATICAL BOLD SCRIPT SMALL X" #x1D501)
247 ("MATHEMATICAL BOLD SCRIPT SMALL Y" #x1D502)
248 ("MATHEMATICAL BOLD SCRIPT SMALL Z" #x1D503)
249 ("MATHEMATICAL FRAKTUR CAPITAL A" #x1D504)
250 ("MATHEMATICAL FRAKTUR CAPITAL B" #x1D505)
251 ("MATHEMATICAL FRAKTUR CAPITAL D" #x1D507)
252 ("MATHEMATICAL FRAKTUR CAPITAL E" #x1D508)
253 ("MATHEMATICAL FRAKTUR CAPITAL F" #x1D509)
254 ("MATHEMATICAL FRAKTUR CAPITAL G" #x1D50A)
255 ("MATHEMATICAL FRAKTUR CAPITAL J" #x1D50D)
256 ("MATHEMATICAL FRAKTUR CAPITAL K" #x1D50E)
257 ("MATHEMATICAL FRAKTUR CAPITAL L" #x1D50F)
258 ("MATHEMATICAL FRAKTUR CAPITAL M" #x1D510)
259 ("MATHEMATICAL FRAKTUR CAPITAL N" #x1D511)
260 ("MATHEMATICAL FRAKTUR CAPITAL O" #x1D512)
261 ("MATHEMATICAL FRAKTUR CAPITAL P" #x1D513)
262 ("MATHEMATICAL FRAKTUR CAPITAL Q" #x1D514)
263 ("MATHEMATICAL FRAKTUR CAPITAL S" #x1D516)
264 ("MATHEMATICAL FRAKTUR CAPITAL T" #x1D517)
265 ("MATHEMATICAL FRAKTUR CAPITAL U" #x1D518)
266 ("MATHEMATICAL FRAKTUR CAPITAL V" #x1D519)
267 ("MATHEMATICAL FRAKTUR CAPITAL W" #x1D51A)
268 ("MATHEMATICAL FRAKTUR CAPITAL X" #x1D51B)
269 ("MATHEMATICAL FRAKTUR CAPITAL Y" #x1D51C)
270 ("MATHEMATICAL FRAKTUR SMALL A" #x1D51E)
271 ("MATHEMATICAL FRAKTUR SMALL B" #x1D51F)
272 ("MATHEMATICAL FRAKTUR SMALL C" #x1D520)
273 ("MATHEMATICAL FRAKTUR SMALL D" #x1D521)
274 ("MATHEMATICAL FRAKTUR SMALL E" #x1D522)
275 ("MATHEMATICAL FRAKTUR SMALL F" #x1D523)
276 ("MATHEMATICAL FRAKTUR SMALL G" #x1D524)
277 ("MATHEMATICAL FRAKTUR SMALL H" #x1D525)
278 ("MATHEMATICAL FRAKTUR SMALL I" #x1D526)
279 ("MATHEMATICAL FRAKTUR SMALL J" #x1D527)
280 ("MATHEMATICAL FRAKTUR SMALL K" #x1D528)
281 ("MATHEMATICAL FRAKTUR SMALL L" #x1D529)
282 ("MATHEMATICAL FRAKTUR SMALL M" #x1D52A)
283 ("MATHEMATICAL FRAKTUR SMALL N" #x1D52B)
284 ("MATHEMATICAL FRAKTUR SMALL O" #x1D52C)
285 ("MATHEMATICAL FRAKTUR SMALL P" #x1D52D)
286 ("MATHEMATICAL FRAKTUR SMALL Q" #x1D52E)
287 ("MATHEMATICAL FRAKTUR SMALL R" #x1D52F)
288 ("MATHEMATICAL FRAKTUR SMALL S" #x1D530)
289 ("MATHEMATICAL FRAKTUR SMALL T" #x1D531)
290 ("MATHEMATICAL FRAKTUR SMALL U" #x1D532)
291 ("MATHEMATICAL FRAKTUR SMALL V" #x1D533)
292 ("MATHEMATICAL FRAKTUR SMALL W" #x1D534)
293 ("MATHEMATICAL FRAKTUR SMALL X" #x1D535)
294 ("MATHEMATICAL FRAKTUR SMALL Y" #x1D536)
295 ("MATHEMATICAL FRAKTUR SMALL Z" #x1D537)
296 ("MATHEMATICAL DOUBLE-STRUCK CAPITAL A" #x1D538)
297 ("MATHEMATICAL DOUBLE-STRUCK CAPITAL B" #x1D539)
298 ("MATHEMATICAL DOUBLE-STRUCK CAPITAL D" #x1D53B)
299 ("MATHEMATICAL DOUBLE-STRUCK CAPITAL E" #x1D53C)
300 ("MATHEMATICAL DOUBLE-STRUCK CAPITAL F" #x1D53D)
301 ("MATHEMATICAL DOUBLE-STRUCK CAPITAL G" #x1D53E)
302 ("MATHEMATICAL DOUBLE-STRUCK CAPITAL I" #x1D540)
303 ("MATHEMATICAL DOUBLE-STRUCK CAPITAL J" #x1D541)
304 ("MATHEMATICAL DOUBLE-STRUCK CAPITAL K" #x1D542)
305 ("MATHEMATICAL DOUBLE-STRUCK CAPITAL L" #x1D543)
306 ("MATHEMATICAL DOUBLE-STRUCK CAPITAL M" #x1D544)
307 ("MATHEMATICAL DOUBLE-STRUCK CAPITAL O" #x1D546)
308 ("MATHEMATICAL DOUBLE-STRUCK CAPITAL S" #x1D54A)
309 ("MATHEMATICAL DOUBLE-STRUCK CAPITAL T" #x1D54B)
310 ("MATHEMATICAL DOUBLE-STRUCK CAPITAL U" #x1D54C)
311 ("MATHEMATICAL DOUBLE-STRUCK CAPITAL V" #x1D54D)
312 ("MATHEMATICAL DOUBLE-STRUCK CAPITAL W" #x1D54E)
313 ("MATHEMATICAL DOUBLE-STRUCK CAPITAL X" #x1D54F)
314 ("MATHEMATICAL DOUBLE-STRUCK CAPITAL Y" #x1D550)
315 ("MATHEMATICAL DOUBLE-STRUCK SMALL A" #x1D552)
316 ("MATHEMATICAL DOUBLE-STRUCK SMALL B" #x1D553)
317 ("MATHEMATICAL DOUBLE-STRUCK SMALL C" #x1D554)
318 ("MATHEMATICAL DOUBLE-STRUCK SMALL D" #x1D555)
319 ("MATHEMATICAL DOUBLE-STRUCK SMALL E" #x1D556)
320 ("MATHEMATICAL DOUBLE-STRUCK SMALL F" #x1D557)
321 ("MATHEMATICAL DOUBLE-STRUCK SMALL G" #x1D558)
322 ("MATHEMATICAL DOUBLE-STRUCK SMALL H" #x1D559)
323 ("MATHEMATICAL DOUBLE-STRUCK SMALL I" #x1D55A)
324 ("MATHEMATICAL DOUBLE-STRUCK SMALL J" #x1D55B)
325 ("MATHEMATICAL DOUBLE-STRUCK SMALL K" #x1D55C)
326 ("MATHEMATICAL DOUBLE-STRUCK SMALL L" #x1D55D)
327 ("MATHEMATICAL DOUBLE-STRUCK SMALL M" #x1D55E)
328 ("MATHEMATICAL DOUBLE-STRUCK SMALL N" #x1D55F)
329 ("MATHEMATICAL DOUBLE-STRUCK SMALL O" #x1D560)
330 ("MATHEMATICAL DOUBLE-STRUCK SMALL P" #x1D561)
331 ("MATHEMATICAL DOUBLE-STRUCK SMALL Q" #x1D562)
332 ("MATHEMATICAL DOUBLE-STRUCK SMALL R" #x1D563)
333 ("MATHEMATICAL DOUBLE-STRUCK SMALL S" #x1D564)
334 ("MATHEMATICAL DOUBLE-STRUCK SMALL T" #x1D565)
335 ("MATHEMATICAL DOUBLE-STRUCK SMALL U" #x1D566)
336 ("MATHEMATICAL DOUBLE-STRUCK SMALL V" #x1D567)
337 ("MATHEMATICAL DOUBLE-STRUCK SMALL W" #x1D568)
338 ("MATHEMATICAL DOUBLE-STRUCK SMALL X" #x1D569)
339 ("MATHEMATICAL DOUBLE-STRUCK SMALL Y" #x1D56A)
340 ("MATHEMATICAL DOUBLE-STRUCK SMALL Z" #x1D56B)
341 ("MATHEMATICAL BOLD FRAKTUR CAPITAL A" #x1D56C)
342 ("MATHEMATICAL BOLD FRAKTUR CAPITAL B" #x1D56D)
343 ("MATHEMATICAL BOLD FRAKTUR CAPITAL C" #x1D56E)
344 ("MATHEMATICAL BOLD FRAKTUR CAPITAL D" #x1D56F)
345 ("MATHEMATICAL BOLD FRAKTUR CAPITAL E" #x1D570)
346 ("MATHEMATICAL BOLD FRAKTUR CAPITAL F" #x1D571)
347 ("MATHEMATICAL BOLD FRAKTUR CAPITAL G" #x1D572)
348 ("MATHEMATICAL BOLD FRAKTUR CAPITAL H" #x1D573)
349 ("MATHEMATICAL BOLD FRAKTUR CAPITAL I" #x1D574)
350 ("MATHEMATICAL BOLD FRAKTUR CAPITAL J" #x1D575)
351 ("MATHEMATICAL BOLD FRAKTUR CAPITAL K" #x1D576)
352 ("MATHEMATICAL BOLD FRAKTUR CAPITAL L" #x1D577)
353 ("MATHEMATICAL BOLD FRAKTUR CAPITAL M" #x1D578)
354 ("MATHEMATICAL BOLD FRAKTUR CAPITAL N" #x1D579)
355 ("MATHEMATICAL BOLD FRAKTUR CAPITAL O" #x1D57A)
356 ("MATHEMATICAL BOLD FRAKTUR CAPITAL P" #x1D57B)
357 ("MATHEMATICAL BOLD FRAKTUR CAPITAL Q" #x1D57C)
358 ("MATHEMATICAL BOLD FRAKTUR CAPITAL R" #x1D57D)
359 ("MATHEMATICAL BOLD FRAKTUR CAPITAL S" #x1D57E)
360 ("MATHEMATICAL BOLD FRAKTUR CAPITAL T" #x1D57F)
361 ("MATHEMATICAL BOLD FRAKTUR CAPITAL U" #x1D580)
362 ("MATHEMATICAL BOLD FRAKTUR CAPITAL V" #x1D581)
363 ("MATHEMATICAL BOLD FRAKTUR CAPITAL W" #x1D582)
364 ("MATHEMATICAL BOLD FRAKTUR CAPITAL X" #x1D583)
365 ("MATHEMATICAL BOLD FRAKTUR CAPITAL Y" #x1D584)
366 ("MATHEMATICAL BOLD FRAKTUR CAPITAL Z" #x1D585)
367 ("MATHEMATICAL BOLD FRAKTUR SMALL A" #x1D586)
368 ("MATHEMATICAL BOLD FRAKTUR SMALL B" #x1D587)
369 ("MATHEMATICAL BOLD FRAKTUR SMALL C" #x1D588)
370 ("MATHEMATICAL BOLD FRAKTUR SMALL D" #x1D589)
371 ("MATHEMATICAL BOLD FRAKTUR SMALL E" #x1D58A)
372 ("MATHEMATICAL BOLD FRAKTUR SMALL F" #x1D58B)
373 ("MATHEMATICAL BOLD FRAKTUR SMALL G" #x1D58C)
374 ("MATHEMATICAL BOLD FRAKTUR SMALL H" #x1D58D)
375 ("MATHEMATICAL BOLD FRAKTUR SMALL I" #x1D58E)
376 ("MATHEMATICAL BOLD FRAKTUR SMALL J" #x1D58F)
377 ("MATHEMATICAL BOLD FRAKTUR SMALL K" #x1D590)
378 ("MATHEMATICAL BOLD FRAKTUR SMALL L" #x1D591)
379 ("MATHEMATICAL BOLD FRAKTUR SMALL M" #x1D592)
380 ("MATHEMATICAL BOLD FRAKTUR SMALL N" #x1D593)
381 ("MATHEMATICAL BOLD FRAKTUR SMALL O" #x1D594)
382 ("MATHEMATICAL BOLD FRAKTUR SMALL P" #x1D595)
383 ("MATHEMATICAL BOLD FRAKTUR SMALL Q" #x1D596)
384 ("MATHEMATICAL BOLD FRAKTUR SMALL R" #x1D597)
385 ("MATHEMATICAL BOLD FRAKTUR SMALL S" #x1D598)
386 ("MATHEMATICAL BOLD FRAKTUR SMALL T" #x1D599)
387 ("MATHEMATICAL BOLD FRAKTUR SMALL U" #x1D59A)
388 ("MATHEMATICAL BOLD FRAKTUR SMALL V" #x1D59B)
389 ("MATHEMATICAL BOLD FRAKTUR SMALL W" #x1D59C)
390 ("MATHEMATICAL BOLD FRAKTUR SMALL X" #x1D59D)
391 ("MATHEMATICAL BOLD FRAKTUR SMALL Y" #x1D59E)
392 ("MATHEMATICAL BOLD FRAKTUR SMALL Z" #x1D59F)
393 ("MATHEMATICAL SANS-SERIF CAPITAL A" #x1D5A0)
394 ("MATHEMATICAL SANS-SERIF CAPITAL B" #x1D5A1)
395 ("MATHEMATICAL SANS-SERIF CAPITAL C" #x1D5A2)
396 ("MATHEMATICAL SANS-SERIF CAPITAL D" #x1D5A3)
397 ("MATHEMATICAL SANS-SERIF CAPITAL E" #x1D5A4)
398 ("MATHEMATICAL SANS-SERIF CAPITAL F" #x1D5A5)
399 ("MATHEMATICAL SANS-SERIF CAPITAL G" #x1D5A6)
400 ("MATHEMATICAL SANS-SERIF CAPITAL H" #x1D5A7)
401 ("MATHEMATICAL SANS-SERIF CAPITAL I" #x1D5A8)
402 ("MATHEMATICAL SANS-SERIF CAPITAL J" #x1D5A9)
403 ("MATHEMATICAL SANS-SERIF CAPITAL K" #x1D5AA)
404 ("MATHEMATICAL SANS-SERIF CAPITAL L" #x1D5AB)
405 ("MATHEMATICAL SANS-SERIF CAPITAL M" #x1D5AC)
406 ("MATHEMATICAL SANS-SERIF CAPITAL N" #x1D5AD)
407 ("MATHEMATICAL SANS-SERIF CAPITAL O" #x1D5AE)
408 ("MATHEMATICAL SANS-SERIF CAPITAL P" #x1D5AF)
409 ("MATHEMATICAL SANS-SERIF CAPITAL Q" #x1D5B0)
410 ("MATHEMATICAL SANS-SERIF CAPITAL R" #x1D5B1)
411 ("MATHEMATICAL SANS-SERIF CAPITAL S" #x1D5B2)
412 ("MATHEMATICAL SANS-SERIF CAPITAL T" #x1D5B3)
413 ("MATHEMATICAL SANS-SERIF CAPITAL U" #x1D5B4)
414 ("MATHEMATICAL SANS-SERIF CAPITAL V" #x1D5B5)
415 ("MATHEMATICAL SANS-SERIF CAPITAL W" #x1D5B6)
416 ("MATHEMATICAL SANS-SERIF CAPITAL X" #x1D5B7)
417 ("MATHEMATICAL SANS-SERIF CAPITAL Y" #x1D5B8)
418 ("MATHEMATICAL SANS-SERIF CAPITAL Z" #x1D5B9)
419 ("MATHEMATICAL SANS-SERIF SMALL A" #x1D5BA)
420 ("MATHEMATICAL SANS-SERIF SMALL B" #x1D5BB)
421 ("MATHEMATICAL SANS-SERIF SMALL C" #x1D5BC)
422 ("MATHEMATICAL SANS-SERIF SMALL D" #x1D5BD)
423 ("MATHEMATICAL SANS-SERIF SMALL E" #x1D5BE)
424 ("MATHEMATICAL SANS-SERIF SMALL F" #x1D5BF)
425 ("MATHEMATICAL SANS-SERIF SMALL G" #x1D5C0)
426 ("MATHEMATICAL SANS-SERIF SMALL H" #x1D5C1)
427 ("MATHEMATICAL SANS-SERIF SMALL I" #x1D5C2)
428 ("MATHEMATICAL SANS-SERIF SMALL J" #x1D5C3)
429 ("MATHEMATICAL SANS-SERIF SMALL K" #x1D5C4)
430 ("MATHEMATICAL SANS-SERIF SMALL L" #x1D5C5)
431 ("MATHEMATICAL SANS-SERIF SMALL M" #x1D5C6)
432 ("MATHEMATICAL SANS-SERIF SMALL N" #x1D5C7)
433 ("MATHEMATICAL SANS-SERIF SMALL O" #x1D5C8)
434 ("MATHEMATICAL SANS-SERIF SMALL P" #x1D5C9)
435 ("MATHEMATICAL SANS-SERIF SMALL Q" #x1D5CA)
436 ("MATHEMATICAL SANS-SERIF SMALL R" #x1D5CB)
437 ("MATHEMATICAL SANS-SERIF SMALL S" #x1D5CC)
438 ("MATHEMATICAL SANS-SERIF SMALL T" #x1D5CD)
439 ("MATHEMATICAL SANS-SERIF SMALL U" #x1D5CE)
440 ("MATHEMATICAL SANS-SERIF SMALL V" #x1D5CF)
441 ("MATHEMATICAL SANS-SERIF SMALL W" #x1D5D0)
442 ("MATHEMATICAL SANS-SERIF SMALL X" #x1D5D1)
443 ("MATHEMATICAL SANS-SERIF SMALL Y" #x1D5D2)
444 ("MATHEMATICAL SANS-SERIF SMALL Z" #x1D5D3)
445 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL A" #x1D5D4)
446 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL B" #x1D5D5)
447 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL C" #x1D5D6)
448 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL D" #x1D5D7)
449 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL E" #x1D5D8)
450 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL F" #x1D5D9)
451 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL G" #x1D5DA)
452 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL H" #x1D5DB)
453 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL I" #x1D5DC)
454 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL J" #x1D5DD)
455 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL K" #x1D5DE)
456 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL L" #x1D5DF)
457 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL M" #x1D5E0)
458 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL N" #x1D5E1)
459 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL O" #x1D5E2)
460 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL P" #x1D5E3)
461 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL Q" #x1D5E4)
462 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL R" #x1D5E5)
463 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL S" #x1D5E6)
464 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL T" #x1D5E7)
465 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL U" #x1D5E8)
466 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL V" #x1D5E9)
467 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL W" #x1D5EA)
468 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL X" #x1D5EB)
469 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL Y" #x1D5EC)
470 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL Z" #x1D5ED)
471 ("MATHEMATICAL SANS-SERIF BOLD SMALL A" #x1D5EE)
472 ("MATHEMATICAL SANS-SERIF BOLD SMALL B" #x1D5EF)
473 ("MATHEMATICAL SANS-SERIF BOLD SMALL C" #x1D5F0)
474 ("MATHEMATICAL SANS-SERIF BOLD SMALL D" #x1D5F1)
475 ("MATHEMATICAL SANS-SERIF BOLD SMALL E" #x1D5F2)
476 ("MATHEMATICAL SANS-SERIF BOLD SMALL F" #x1D5F3)
477 ("MATHEMATICAL SANS-SERIF BOLD SMALL G" #x1D5F4)
478 ("MATHEMATICAL SANS-SERIF BOLD SMALL H" #x1D5F5)
479 ("MATHEMATICAL SANS-SERIF BOLD SMALL I" #x1D5F6)
480 ("MATHEMATICAL SANS-SERIF BOLD SMALL J" #x1D5F7)
481 ("MATHEMATICAL SANS-SERIF BOLD SMALL K" #x1D5F8)
482 ("MATHEMATICAL SANS-SERIF BOLD SMALL L" #x1D5F9)
483 ("MATHEMATICAL SANS-SERIF BOLD SMALL M" #x1D5FA)
484 ("MATHEMATICAL SANS-SERIF BOLD SMALL N" #x1D5FB)
485 ("MATHEMATICAL SANS-SERIF BOLD SMALL O" #x1D5FC)
486 ("MATHEMATICAL SANS-SERIF BOLD SMALL P" #x1D5FD)
487 ("MATHEMATICAL SANS-SERIF BOLD SMALL Q" #x1D5FE)
488 ("MATHEMATICAL SANS-SERIF BOLD SMALL R" #x1D5FF)
489 ("MATHEMATICAL SANS-SERIF BOLD SMALL S" #x1D600)
490 ("MATHEMATICAL SANS-SERIF BOLD SMALL T" #x1D601)
491 ("MATHEMATICAL SANS-SERIF BOLD SMALL U" #x1D602)
492 ("MATHEMATICAL SANS-SERIF BOLD SMALL V" #x1D603)
493 ("MATHEMATICAL SANS-SERIF BOLD SMALL W" #x1D604)
494 ("MATHEMATICAL SANS-SERIF BOLD SMALL X" #x1D605)
495 ("MATHEMATICAL SANS-SERIF BOLD SMALL Y" #x1D606)
496 ("MATHEMATICAL SANS-SERIF BOLD SMALL Z" #x1D607)
497 ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL A" #x1D608)
498 ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL B" #x1D609)
499 ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL C" #x1D60A)
500 ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL D" #x1D60B)
501 ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL E" #x1D60C)
502 ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL F" #x1D60D)
503 ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL G" #x1D60E)
504 ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL H" #x1D60F)
505 ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL I" #x1D610)
506 ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL J" #x1D611)
507 ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL K" #x1D612)
508 ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL L" #x1D613)
509 ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL M" #x1D614)
510 ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL N" #x1D615)
511 ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL O" #x1D616)
512 ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL P" #x1D617)
513 ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q" #x1D618)
514 ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL R" #x1D619)
515 ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL S" #x1D61A)
516 ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL T" #x1D61B)
517 ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL U" #x1D61C)
518 ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL V" #x1D61D)
519 ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL W" #x1D61E)
520 ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL X" #x1D61F)
521 ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y" #x1D620)
522 ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z" #x1D621)
523 ("MATHEMATICAL SANS-SERIF ITALIC SMALL A" #x1D622)
524 ("MATHEMATICAL SANS-SERIF ITALIC SMALL B" #x1D623)
525 ("MATHEMATICAL SANS-SERIF ITALIC SMALL C" #x1D624)
526 ("MATHEMATICAL SANS-SERIF ITALIC SMALL D" #x1D625)
527 ("MATHEMATICAL SANS-SERIF ITALIC SMALL E" #x1D626)
528 ("MATHEMATICAL SANS-SERIF ITALIC SMALL F" #x1D627)
529 ("MATHEMATICAL SANS-SERIF ITALIC SMALL G" #x1D628)
530 ("MATHEMATICAL SANS-SERIF ITALIC SMALL H" #x1D629)
531 ("MATHEMATICAL SANS-SERIF ITALIC SMALL I" #x1D62A)
532 ("MATHEMATICAL SANS-SERIF ITALIC SMALL J" #x1D62B)
533 ("MATHEMATICAL SANS-SERIF ITALIC SMALL K" #x1D62C)
534 ("MATHEMATICAL SANS-SERIF ITALIC SMALL L" #x1D62D)
535 ("MATHEMATICAL SANS-SERIF ITALIC SMALL M" #x1D62E)
536 ("MATHEMATICAL SANS-SERIF ITALIC SMALL N" #x1D62F)
537 ("MATHEMATICAL SANS-SERIF ITALIC SMALL O" #x1D630)
538 ("MATHEMATICAL SANS-SERIF ITALIC SMALL P" #x1D631)
539 ("MATHEMATICAL SANS-SERIF ITALIC SMALL Q" #x1D632)
540 ("MATHEMATICAL SANS-SERIF ITALIC SMALL R" #x1D633)
541 ("MATHEMATICAL SANS-SERIF ITALIC SMALL S" #x1D634)
542 ("MATHEMATICAL SANS-SERIF ITALIC SMALL T" #x1D635)
543 ("MATHEMATICAL SANS-SERIF ITALIC SMALL U" #x1D636)
544 ("MATHEMATICAL SANS-SERIF ITALIC SMALL V" #x1D637)
545 ("MATHEMATICAL SANS-SERIF ITALIC SMALL W" #x1D638)
546 ("MATHEMATICAL SANS-SERIF ITALIC SMALL X" #x1D639)
547 ("MATHEMATICAL SANS-SERIF ITALIC SMALL Y" #x1D63A)
548 ("MATHEMATICAL SANS-SERIF ITALIC SMALL Z" #x1D63B)
549 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A" #x1D63C)
550 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B" #x1D63D)
551 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C" #x1D63E)
552 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D" #x1D63F)
553 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E" #x1D640)
554 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F" #x1D641)
555 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G" #x1D642)
556 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H" #x1D643)
557 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I" #x1D644)
558 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J" #x1D645)
559 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K" #x1D646)
560 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L" #x1D647)
561 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M" #x1D648)
562 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N" #x1D649)
563 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O" #x1D64A)
564 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P" #x1D64B)
565 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q" #x1D64C)
566 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R" #x1D64D)
567 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S" #x1D64E)
568 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T" #x1D64F)
569 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U" #x1D650)
570 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V" #x1D651)
571 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W" #x1D652)
572 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X" #x1D653)
573 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y" #x1D654)
574 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z" #x1D655)
575 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A" #x1D656)
576 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B" #x1D657)
577 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C" #x1D658)
578 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D" #x1D659)
579 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E" #x1D65A)
580 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F" #x1D65B)
581 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G" #x1D65C)
582 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H" #x1D65D)
583 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I" #x1D65E)
584 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J" #x1D65F)
585 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K" #x1D660)
586 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L" #x1D661)
587 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M" #x1D662)
588 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N" #x1D663)
589 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O" #x1D664)
590 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P" #x1D665)
591 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q" #x1D666)
592 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R" #x1D667)
593 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S" #x1D668)
594 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T" #x1D669)
595 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U" #x1D66A)
596 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V" #x1D66B)
597 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W" #x1D66C)
598 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X" #x1D66D)
599 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y" #x1D66E)
600 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z" #x1D66F)
601 ("MATHEMATICAL MONOSPACE CAPITAL A" #x1D670)
602 ("MATHEMATICAL MONOSPACE CAPITAL B" #x1D671)
603 ("MATHEMATICAL MONOSPACE CAPITAL C" #x1D672)
604 ("MATHEMATICAL MONOSPACE CAPITAL D" #x1D673)
605 ("MATHEMATICAL MONOSPACE CAPITAL E" #x1D674)
606 ("MATHEMATICAL MONOSPACE CAPITAL F" #x1D675)
607 ("MATHEMATICAL MONOSPACE CAPITAL G" #x1D676)
608 ("MATHEMATICAL MONOSPACE CAPITAL H" #x1D677)
609 ("MATHEMATICAL MONOSPACE CAPITAL I" #x1D678)
610 ("MATHEMATICAL MONOSPACE CAPITAL J" #x1D679)
611 ("MATHEMATICAL MONOSPACE CAPITAL K" #x1D67A)
612 ("MATHEMATICAL MONOSPACE CAPITAL L" #x1D67B)
613 ("MATHEMATICAL MONOSPACE CAPITAL M" #x1D67C)
614 ("MATHEMATICAL MONOSPACE CAPITAL N" #x1D67D)
615 ("MATHEMATICAL MONOSPACE CAPITAL O" #x1D67E)
616 ("MATHEMATICAL MONOSPACE CAPITAL P" #x1D67F)
617 ("MATHEMATICAL MONOSPACE CAPITAL Q" #x1D680)
618 ("MATHEMATICAL MONOSPACE CAPITAL R" #x1D681)
619 ("MATHEMATICAL MONOSPACE CAPITAL S" #x1D682)
620 ("MATHEMATICAL MONOSPACE CAPITAL T" #x1D683)
621 ("MATHEMATICAL MONOSPACE CAPITAL U" #x1D684)
622 ("MATHEMATICAL MONOSPACE CAPITAL V" #x1D685)
623 ("MATHEMATICAL MONOSPACE CAPITAL W" #x1D686)
624 ("MATHEMATICAL MONOSPACE CAPITAL X" #x1D687)
625 ("MATHEMATICAL MONOSPACE CAPITAL Y" #x1D688)
626 ("MATHEMATICAL MONOSPACE CAPITAL Z" #x1D689)
627 ("MATHEMATICAL MONOSPACE SMALL A" #x1D68A)
628 ("MATHEMATICAL MONOSPACE SMALL B" #x1D68B)
629 ("MATHEMATICAL MONOSPACE SMALL C" #x1D68C)
630 ("MATHEMATICAL MONOSPACE SMALL D" #x1D68D)
631 ("MATHEMATICAL MONOSPACE SMALL E" #x1D68E)
632 ("MATHEMATICAL MONOSPACE SMALL F" #x1D68F)
633 ("MATHEMATICAL MONOSPACE SMALL G" #x1D690)
634 ("MATHEMATICAL MONOSPACE SMALL H" #x1D691)
635 ("MATHEMATICAL MONOSPACE SMALL I" #x1D692)
636 ("MATHEMATICAL MONOSPACE SMALL J" #x1D693)
637 ("MATHEMATICAL MONOSPACE SMALL K" #x1D694)
638 ("MATHEMATICAL MONOSPACE SMALL L" #x1D695)
639 ("MATHEMATICAL MONOSPACE SMALL M" #x1D696)
640 ("MATHEMATICAL MONOSPACE SMALL N" #x1D697)
641 ("MATHEMATICAL MONOSPACE SMALL O" #x1D698)
642 ("MATHEMATICAL MONOSPACE SMALL P" #x1D699)
643 ("MATHEMATICAL MONOSPACE SMALL Q" #x1D69A)
644 ("MATHEMATICAL MONOSPACE SMALL R" #x1D69B)
645 ("MATHEMATICAL MONOSPACE SMALL S" #x1D69C)
646 ("MATHEMATICAL MONOSPACE SMALL T" #x1D69D)
647 ("MATHEMATICAL MONOSPACE SMALL U" #x1D69E)
648 ("MATHEMATICAL MONOSPACE SMALL V" #x1D69F)
649 ("MATHEMATICAL MONOSPACE SMALL W" #x1D6A0)
650 ("MATHEMATICAL MONOSPACE SMALL X" #x1D6A1)
651 ("MATHEMATICAL MONOSPACE SMALL Y" #x1D6A2)
652 ("MATHEMATICAL MONOSPACE SMALL Z" #x1D6A3)
653 ("MATHEMATICAL BOLD CAPITAL ALPHA" #x1D6A8)
654 ("MATHEMATICAL BOLD CAPITAL BETA" #x1D6A9)
655 ("MATHEMATICAL BOLD CAPITAL GAMMA" #x1D6AA)
656 ("MATHEMATICAL BOLD CAPITAL DELTA" #x1D6AB)
657 ("MATHEMATICAL BOLD CAPITAL EPSILON" #x1D6AC)
658 ("MATHEMATICAL BOLD CAPITAL ZETA" #x1D6AD)
659 ("MATHEMATICAL BOLD CAPITAL ETA" #x1D6AE)
660 ("MATHEMATICAL BOLD CAPITAL THETA" #x1D6AF)
661 ("MATHEMATICAL BOLD CAPITAL IOTA" #x1D6B0)
662 ("MATHEMATICAL BOLD CAPITAL KAPPA" #x1D6B1)
663 ("MATHEMATICAL BOLD CAPITAL LAMDA" #x1D6B2)
664 ("MATHEMATICAL BOLD CAPITAL MU" #x1D6B3)
665 ("MATHEMATICAL BOLD CAPITAL NU" #x1D6B4)
666 ("MATHEMATICAL BOLD CAPITAL XI" #x1D6B5)
667 ("MATHEMATICAL BOLD CAPITAL OMICRON" #x1D6B6)
668 ("MATHEMATICAL BOLD CAPITAL PI" #x1D6B7)
669 ("MATHEMATICAL BOLD CAPITAL RHO" #x1D6B8)
670 ("MATHEMATICAL BOLD CAPITAL THETA SYMBOL" #x1D6B9)
671 ("MATHEMATICAL BOLD CAPITAL SIGMA" #x1D6BA)
672 ("MATHEMATICAL BOLD CAPITAL TAU" #x1D6BB)
673 ("MATHEMATICAL BOLD CAPITAL UPSILON" #x1D6BC)
674 ("MATHEMATICAL BOLD CAPITAL PHI" #x1D6BD)
675 ("MATHEMATICAL BOLD CAPITAL CHI" #x1D6BE)
676 ("MATHEMATICAL BOLD CAPITAL PSI" #x1D6BF)
677 ("MATHEMATICAL BOLD CAPITAL OMEGA" #x1D6C0)
678 ("MATHEMATICAL BOLD NABLA" #x1D6C1)
679 ("MATHEMATICAL BOLD SMALL ALPHA" #x1D6C2)
680 ("MATHEMATICAL BOLD SMALL BETA" #x1D6C3)
681 ("MATHEMATICAL BOLD SMALL GAMMA" #x1D6C4)
682 ("MATHEMATICAL BOLD SMALL DELTA" #x1D6C5)
683 ("MATHEMATICAL BOLD SMALL EPSILON" #x1D6C6)
684 ("MATHEMATICAL BOLD SMALL ZETA" #x1D6C7)
685 ("MATHEMATICAL BOLD SMALL ETA" #x1D6C8)
686 ("MATHEMATICAL BOLD SMALL THETA" #x1D6C9)
687 ("MATHEMATICAL BOLD SMALL IOTA" #x1D6CA)
688 ("MATHEMATICAL BOLD SMALL KAPPA" #x1D6CB)
689 ("MATHEMATICAL BOLD SMALL LAMDA" #x1D6CC)
690 ("MATHEMATICAL BOLD SMALL MU" #x1D6CD)
691 ("MATHEMATICAL BOLD SMALL NU" #x1D6CE)
692 ("MATHEMATICAL BOLD SMALL XI" #x1D6CF)
693 ("MATHEMATICAL BOLD SMALL OMICRON" #x1D6D0)
694 ("MATHEMATICAL BOLD SMALL PI" #x1D6D1)
695 ("MATHEMATICAL BOLD SMALL RHO" #x1D6D2)
696 ("MATHEMATICAL BOLD SMALL FINAL SIGMA" #x1D6D3)
697 ("MATHEMATICAL BOLD SMALL SIGMA" #x1D6D4)
698 ("MATHEMATICAL BOLD SMALL TAU" #x1D6D5)
699 ("MATHEMATICAL BOLD SMALL UPSILON" #x1D6D6)
700 ("MATHEMATICAL BOLD SMALL PHI" #x1D6D7)
701 ("MATHEMATICAL BOLD SMALL CHI" #x1D6D8)
702 ("MATHEMATICAL BOLD SMALL PSI" #x1D6D9)
703 ("MATHEMATICAL BOLD SMALL OMEGA" #x1D6DA)
704 ("MATHEMATICAL BOLD PARTIAL DIFFERENTIAL" #x1D6DB)
705 ("MATHEMATICAL BOLD EPSILON SYMBOL" #x1D6DC)
706 ("MATHEMATICAL BOLD THETA SYMBOL" #x1D6DD)
707 ("MATHEMATICAL BOLD KAPPA SYMBOL" #x1D6DE)
708 ("MATHEMATICAL BOLD PHI SYMBOL" #x1D6DF)
709 ("MATHEMATICAL BOLD RHO SYMBOL" #x1D6E0)
710 ("MATHEMATICAL BOLD PI SYMBOL" #x1D6E1)
711 ("MATHEMATICAL ITALIC CAPITAL ALPHA" #x1D6E2)
712 ("MATHEMATICAL ITALIC CAPITAL BETA" #x1D6E3)
713 ("MATHEMATICAL ITALIC CAPITAL GAMMA" #x1D6E4)
714 ("MATHEMATICAL ITALIC CAPITAL DELTA" #x1D6E5)
715 ("MATHEMATICAL ITALIC CAPITAL EPSILON" #x1D6E6)
716 ("MATHEMATICAL ITALIC CAPITAL ZETA" #x1D6E7)
717 ("MATHEMATICAL ITALIC CAPITAL ETA" #x1D6E8)
718 ("MATHEMATICAL ITALIC CAPITAL THETA" #x1D6E9)
719 ("MATHEMATICAL ITALIC CAPITAL IOTA" #x1D6EA)
720 ("MATHEMATICAL ITALIC CAPITAL KAPPA" #x1D6EB)
721 ("MATHEMATICAL ITALIC CAPITAL LAMDA" #x1D6EC)
722 ("MATHEMATICAL ITALIC CAPITAL MU" #x1D6ED)
723 ("MATHEMATICAL ITALIC CAPITAL NU" #x1D6EE)
724 ("MATHEMATICAL ITALIC CAPITAL XI" #x1D6EF)
725 ("MATHEMATICAL ITALIC CAPITAL OMICRON" #x1D6F0)
726 ("MATHEMATICAL ITALIC CAPITAL PI" #x1D6F1)
727 ("MATHEMATICAL ITALIC CAPITAL RHO" #x1D6F2)
728 ("MATHEMATICAL ITALIC CAPITAL THETA SYMBOL" #x1D6F3)
729 ("MATHEMATICAL ITALIC CAPITAL SIGMA" #x1D6F4)
730 ("MATHEMATICAL ITALIC CAPITAL TAU" #x1D6F5)
731 ("MATHEMATICAL ITALIC CAPITAL UPSILON" #x1D6F6)
732 ("MATHEMATICAL ITALIC CAPITAL PHI" #x1D6F7)
733 ("MATHEMATICAL ITALIC CAPITAL CHI" #x1D6F8)
734 ("MATHEMATICAL ITALIC CAPITAL PSI" #x1D6F9)
735 ("MATHEMATICAL ITALIC CAPITAL OMEGA" #x1D6FA)
736 ("MATHEMATICAL ITALIC NABLA" #x1D6FB)
737 ("MATHEMATICAL ITALIC SMALL ALPHA" #x1D6FC)
738 ("MATHEMATICAL ITALIC SMALL BETA" #x1D6FD)
739 ("MATHEMATICAL ITALIC SMALL GAMMA" #x1D6FE)
740 ("MATHEMATICAL ITALIC SMALL DELTA" #x1D6FF)
741 ("MATHEMATICAL ITALIC SMALL EPSILON" #x1D700)
742 ("MATHEMATICAL ITALIC SMALL ZETA" #x1D701)
743 ("MATHEMATICAL ITALIC SMALL ETA" #x1D702)
744 ("MATHEMATICAL ITALIC SMALL THETA" #x1D703)
745 ("MATHEMATICAL ITALIC SMALL IOTA" #x1D704)
746 ("MATHEMATICAL ITALIC SMALL KAPPA" #x1D705)
747 ("MATHEMATICAL ITALIC SMALL LAMDA" #x1D706)
748 ("MATHEMATICAL ITALIC SMALL MU" #x1D707)
749 ("MATHEMATICAL ITALIC SMALL NU" #x1D708)
750 ("MATHEMATICAL ITALIC SMALL XI" #x1D709)
751 ("MATHEMATICAL ITALIC SMALL OMICRON" #x1D70A)
752 ("MATHEMATICAL ITALIC SMALL PI" #x1D70B)
753 ("MATHEMATICAL ITALIC SMALL RHO" #x1D70C)
754 ("MATHEMATICAL ITALIC SMALL FINAL SIGMA" #x1D70D)
755 ("MATHEMATICAL ITALIC SMALL SIGMA" #x1D70E)
756 ("MATHEMATICAL ITALIC SMALL TAU" #x1D70F)
757 ("MATHEMATICAL ITALIC SMALL UPSILON" #x1D710)
758 ("MATHEMATICAL ITALIC SMALL PHI" #x1D711)
759 ("MATHEMATICAL ITALIC SMALL CHI" #x1D712)
760 ("MATHEMATICAL ITALIC SMALL PSI" #x1D713)
761 ("MATHEMATICAL ITALIC SMALL OMEGA" #x1D714)
762 ("MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL" #x1D715)
763 ("MATHEMATICAL ITALIC EPSILON SYMBOL" #x1D716)
764 ("MATHEMATICAL ITALIC THETA SYMBOL" #x1D717)
765 ("MATHEMATICAL ITALIC KAPPA SYMBOL" #x1D718)
766 ("MATHEMATICAL ITALIC PHI SYMBOL" #x1D719)
767 ("MATHEMATICAL ITALIC RHO SYMBOL" #x1D71A)
768 ("MATHEMATICAL ITALIC PI SYMBOL" #x1D71B)
769 ("MATHEMATICAL BOLD ITALIC CAPITAL ALPHA" #x1D71C)
770 ("MATHEMATICAL BOLD ITALIC CAPITAL BETA" #x1D71D)
771 ("MATHEMATICAL BOLD ITALIC CAPITAL GAMMA" #x1D71E)
772 ("MATHEMATICAL BOLD ITALIC CAPITAL DELTA" #x1D71F)
773 ("MATHEMATICAL BOLD ITALIC CAPITAL EPSILON" #x1D720)
774 ("MATHEMATICAL BOLD ITALIC CAPITAL ZETA" #x1D721)
775 ("MATHEMATICAL BOLD ITALIC CAPITAL ETA" #x1D722)
776 ("MATHEMATICAL BOLD ITALIC CAPITAL THETA" #x1D723)
777 ("MATHEMATICAL BOLD ITALIC CAPITAL IOTA" #x1D724)
778 ("MATHEMATICAL BOLD ITALIC CAPITAL KAPPA" #x1D725)
779 ("MATHEMATICAL BOLD ITALIC CAPITAL LAMDA" #x1D726)
780 ("MATHEMATICAL BOLD ITALIC CAPITAL MU" #x1D727)
781 ("MATHEMATICAL BOLD ITALIC CAPITAL NU" #x1D728)
782 ("MATHEMATICAL BOLD ITALIC CAPITAL XI" #x1D729)
783 ("MATHEMATICAL BOLD ITALIC CAPITAL OMICRON" #x1D72A)
784 ("MATHEMATICAL BOLD ITALIC CAPITAL PI" #x1D72B)
785 ("MATHEMATICAL BOLD ITALIC CAPITAL RHO" #x1D72C)
786 ("MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL" #x1D72D)
787 ("MATHEMATICAL BOLD ITALIC CAPITAL SIGMA" #x1D72E)
788 ("MATHEMATICAL BOLD ITALIC CAPITAL TAU" #x1D72F)
789 ("MATHEMATICAL BOLD ITALIC CAPITAL UPSILON" #x1D730)
790 ("MATHEMATICAL BOLD ITALIC CAPITAL PHI" #x1D731)
791 ("MATHEMATICAL BOLD ITALIC CAPITAL CHI" #x1D732)
792 ("MATHEMATICAL BOLD ITALIC CAPITAL PSI" #x1D733)
793 ("MATHEMATICAL BOLD ITALIC CAPITAL OMEGA" #x1D734)
794 ("MATHEMATICAL BOLD ITALIC NABLA" #x1D735)
795 ("MATHEMATICAL BOLD ITALIC SMALL ALPHA" #x1D736)
796 ("MATHEMATICAL BOLD ITALIC SMALL BETA" #x1D737)
797 ("MATHEMATICAL BOLD ITALIC SMALL GAMMA" #x1D738)
798 ("MATHEMATICAL BOLD ITALIC SMALL DELTA" #x1D739)
799 ("MATHEMATICAL BOLD ITALIC SMALL EPSILON" #x1D73A)
800 ("MATHEMATICAL BOLD ITALIC SMALL ZETA" #x1D73B)
801 ("MATHEMATICAL BOLD ITALIC SMALL ETA" #x1D73C)
802 ("MATHEMATICAL BOLD ITALIC SMALL THETA" #x1D73D)
803 ("MATHEMATICAL BOLD ITALIC SMALL IOTA" #x1D73E)
804 ("MATHEMATICAL BOLD ITALIC SMALL KAPPA" #x1D73F)
805 ("MATHEMATICAL BOLD ITALIC SMALL LAMDA" #x1D740)
806 ("MATHEMATICAL BOLD ITALIC SMALL MU" #x1D741)
807 ("MATHEMATICAL BOLD ITALIC SMALL NU" #x1D742)
808 ("MATHEMATICAL BOLD ITALIC SMALL XI" #x1D743)
809 ("MATHEMATICAL BOLD ITALIC SMALL OMICRON" #x1D744)
810 ("MATHEMATICAL BOLD ITALIC SMALL PI" #x1D745)
811 ("MATHEMATICAL BOLD ITALIC SMALL RHO" #x1D746)
812 ("MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA" #x1D747)
813 ("MATHEMATICAL BOLD ITALIC SMALL SIGMA" #x1D748)
814 ("MATHEMATICAL BOLD ITALIC SMALL TAU" #x1D749)
815 ("MATHEMATICAL BOLD ITALIC SMALL UPSILON" #x1D74A)
816 ("MATHEMATICAL BOLD ITALIC SMALL PHI" #x1D74B)
817 ("MATHEMATICAL BOLD ITALIC SMALL CHI" #x1D74C)
818 ("MATHEMATICAL BOLD ITALIC SMALL PSI" #x1D74D)
819 ("MATHEMATICAL BOLD ITALIC SMALL OMEGA" #x1D74E)
820 ("MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL" #x1D74F)
821 ("MATHEMATICAL BOLD ITALIC EPSILON SYMBOL" #x1D750)
822 ("MATHEMATICAL BOLD ITALIC THETA SYMBOL" #x1D751)
823 ("MATHEMATICAL BOLD ITALIC KAPPA SYMBOL" #x1D752)
824 ("MATHEMATICAL BOLD ITALIC PHI SYMBOL" #x1D753)
825 ("MATHEMATICAL BOLD ITALIC RHO SYMBOL" #x1D754)
826 ("MATHEMATICAL BOLD ITALIC PI SYMBOL" #x1D755)
827 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA" #x1D756)
828 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA" #x1D757)
829 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA" #x1D758)
830 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA" #x1D759)
831 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON" #x1D75A)
832 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA" #x1D75B)
833 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA" #x1D75C)
834 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA" #x1D75D)
835 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA" #x1D75E)
836 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA" #x1D75F)
837 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA" #x1D760)
838 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL MU" #x1D761)
839 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL NU" #x1D762)
840 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL XI" #x1D763)
841 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON" #x1D764)
842 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL PI" #x1D765)
843 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO" #x1D766)
844 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL" #x1D767)
845 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA" #x1D768)
846 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU" #x1D769)
847 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON" #x1D76A)
848 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI" #x1D76B)
849 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI" #x1D76C)
850 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI" #x1D76D)
851 ("MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA" #x1D76E)
852 ("MATHEMATICAL SANS-SERIF BOLD NABLA" #x1D76F)
853 ("MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA" #x1D770)
854 ("MATHEMATICAL SANS-SERIF BOLD SMALL BETA" #x1D771)
855 ("MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA" #x1D772)
856 ("MATHEMATICAL SANS-SERIF BOLD SMALL DELTA" #x1D773)
857 ("MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON" #x1D774)
858 ("MATHEMATICAL SANS-SERIF BOLD SMALL ZETA" #x1D775)
859 ("MATHEMATICAL SANS-SERIF BOLD SMALL ETA" #x1D776)
860 ("MATHEMATICAL SANS-SERIF BOLD SMALL THETA" #x1D777)
861 ("MATHEMATICAL SANS-SERIF BOLD SMALL IOTA" #x1D778)
862 ("MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA" #x1D779)
863 ("MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA" #x1D77A)
864 ("MATHEMATICAL SANS-SERIF BOLD SMALL MU" #x1D77B)
865 ("MATHEMATICAL SANS-SERIF BOLD SMALL NU" #x1D77C)
866 ("MATHEMATICAL SANS-SERIF BOLD SMALL XI" #x1D77D)
867 ("MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON" #x1D77E)
868 ("MATHEMATICAL SANS-SERIF BOLD SMALL PI" #x1D77F)
869 ("MATHEMATICAL SANS-SERIF BOLD SMALL RHO" #x1D780)
870 ("MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA" #x1D781)
871 ("MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA" #x1D782)
872 ("MATHEMATICAL SANS-SERIF BOLD SMALL TAU" #x1D783)
873 ("MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON" #x1D784)
874 ("MATHEMATICAL SANS-SERIF BOLD SMALL PHI" #x1D785)
875 ("MATHEMATICAL SANS-SERIF BOLD SMALL CHI" #x1D786)
876 ("MATHEMATICAL SANS-SERIF BOLD SMALL PSI" #x1D787)
877 ("MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA" #x1D788)
878 ("MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL" #x1D789)
879 ("MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL" #x1D78A)
880 ("MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL" #x1D78B)
881 ("MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL" #x1D78C)
882 ("MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL" #x1D78D)
883 ("MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL" #x1D78E)
884 ("MATHEMATICAL SANS-SERIF BOLD PI SYMBOL" #x1D78F)
885 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA" #x1D790)
886 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA" #x1D791)
887 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA" #x1D792)
888 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA" #x1D793)
889 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON" #x1D794)
890 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA" #x1D795)
891 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA" #x1D796)
892 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA" #x1D797)
893 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA" #x1D798)
894 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA" #x1D799)
895 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA" #x1D79A)
896 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU" #x1D79B)
897 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU" #x1D79C)
898 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI" #x1D79D)
899 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON" #x1D79E)
900 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI" #x1D79F)
901 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO" #x1D7A0)
902 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL" #x1D7A1)
903 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA" #x1D7A2)
904 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU" #x1D7A3)
905 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON" #x1D7A4)
906 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI" #x1D7A5)
907 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI" #x1D7A6)
908 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI" #x1D7A7)
909 ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA" #x1D7A8)
910 ("MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA" #x1D7A9)
911 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA" #x1D7AA)
912 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA" #x1D7AB)
913 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA" #x1D7AC)
914 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA" #x1D7AD)
915 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON" #x1D7AE)
916 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA" #x1D7AF)
917 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA" #x1D7B0)
918 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA" #x1D7B1)
919 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA" #x1D7B2)
920 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA" #x1D7B3)
921 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA" #x1D7B4)
922 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU" #x1D7B5)
923 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU" #x1D7B6)
924 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI" #x1D7B7)
925 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON" #x1D7B8)
926 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI" #x1D7B9)
927 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO" #x1D7BA)
928 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA" #x1D7BB)
929 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA" #x1D7BC)
930 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU" #x1D7BD)
931 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON" #x1D7BE)
932 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI" #x1D7BF)
933 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI" #x1D7C0)
934 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI" #x1D7C1)
935 ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA" #x1D7C2)
936 ("MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL" #x1D7C3)
937 ("MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL" #x1D7C4)
938 ("MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL" #x1D7C5)
939 ("MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL" #x1D7C6)
940 ("MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL" #x1D7C7)
941 ("MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL" #x1D7C8)
942 ("MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL" #x1D7C9)
943 ("MATHEMATICAL BOLD DIGIT ZERO" #x1D7CE)
944 ("MATHEMATICAL BOLD DIGIT ONE" #x1D7CF)
945 ("MATHEMATICAL BOLD DIGIT TWO" #x1D7D0)
946 ("MATHEMATICAL BOLD DIGIT THREE" #x1D7D1)
947 ("MATHEMATICAL BOLD DIGIT FOUR" #x1D7D2)
948 ("MATHEMATICAL BOLD DIGIT FIVE" #x1D7D3)
949 ("MATHEMATICAL BOLD DIGIT SIX" #x1D7D4)
950 ("MATHEMATICAL BOLD DIGIT SEVEN" #x1D7D5)
951 ("MATHEMATICAL BOLD DIGIT EIGHT" #x1D7D6)
952 ("MATHEMATICAL BOLD DIGIT NINE" #x1D7D7)
953 ("MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO" #x1D7D8)
954 ("MATHEMATICAL DOUBLE-STRUCK DIGIT ONE" #x1D7D9)
955 ("MATHEMATICAL DOUBLE-STRUCK DIGIT TWO" #x1D7DA)
956 ("MATHEMATICAL DOUBLE-STRUCK DIGIT THREE" #x1D7DB)
957 ("MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR" #x1D7DC)
958 ("MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE" #x1D7DD)
959 ("MATHEMATICAL DOUBLE-STRUCK DIGIT SIX" #x1D7DE)
960 ("MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN" #x1D7DF)
961 ("MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT" #x1D7E0)
962 ("MATHEMATICAL DOUBLE-STRUCK DIGIT NINE" #x1D7E1)
963 ("MATHEMATICAL SANS-SERIF DIGIT ZERO" #x1D7E2)
964 ("MATHEMATICAL SANS-SERIF DIGIT ONE" #x1D7E3)
965 ("MATHEMATICAL SANS-SERIF DIGIT TWO" #x1D7E4)
966 ("MATHEMATICAL SANS-SERIF DIGIT THREE" #x1D7E5)
967 ("MATHEMATICAL SANS-SERIF DIGIT FOUR" #x1D7E6)
968 ("MATHEMATICAL SANS-SERIF DIGIT FIVE" #x1D7E7)
969 ("MATHEMATICAL SANS-SERIF DIGIT SIX" #x1D7E8)
970 ("MATHEMATICAL SANS-SERIF DIGIT SEVEN" #x1D7E9)
971 ("MATHEMATICAL SANS-SERIF DIGIT EIGHT" #x1D7EA)
972 ("MATHEMATICAL SANS-SERIF DIGIT NINE" #x1D7EB)
973 ("MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO" #x1D7EC)
974 ("MATHEMATICAL SANS-SERIF BOLD DIGIT ONE" #x1D7ED)
975 ("MATHEMATICAL SANS-SERIF BOLD DIGIT TWO" #x1D7EE)
976 ("MATHEMATICAL SANS-SERIF BOLD DIGIT THREE" #x1D7EF)
977 ("MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR" #x1D7F0)
978 ("MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE" #x1D7F1)
979 ("MATHEMATICAL SANS-SERIF BOLD DIGIT SIX" #x1D7F2)
980 ("MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN" #x1D7F3)
981 ("MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT" #x1D7F4)
982 ("MATHEMATICAL SANS-SERIF BOLD DIGIT NINE" #x1D7F5)
983 ("MATHEMATICAL MONOSPACE DIGIT ZERO" #x1D7F6)
984 ("MATHEMATICAL MONOSPACE DIGIT ONE" #x1D7F7)
985 ("MATHEMATICAL MONOSPACE DIGIT TWO" #x1D7F8)
986 ("MATHEMATICAL MONOSPACE DIGIT THREE" #x1D7F9)
987 ("MATHEMATICAL MONOSPACE DIGIT FOUR" #x1D7FA)
988 ("MATHEMATICAL MONOSPACE DIGIT FIVE" #x1D7FB)
989 ("MATHEMATICAL MONOSPACE DIGIT SIX" #x1D7FC)
990 ("MATHEMATICAL MONOSPACE DIGIT SEVEN" #x1D7FD)
991 ("MATHEMATICAL MONOSPACE DIGIT EIGHT" #x1D7FE)
992 ("MATHEMATICAL MONOSPACE DIGIT NINE" #x1D7FF)
993 ))
diff --git a/lisp/nxml/char-name/unicode/E0000-E007F.el b/lisp/nxml/char-name/unicode/E0000-E007F.el
new file mode 100644
index 00000000000..b4aeb1fd2b4
--- /dev/null
+++ b/lisp/nxml/char-name/unicode/E0000-E007F.el
@@ -0,0 +1,99 @@
1(nxml-define-char-name-set 'tags
2 '(("LANGUAGE TAG" #xE0001)
3 ("TAG SPACE" #xE0020)
4 ("TAG EXCLAMATION MARK" #xE0021)
5 ("TAG QUOTATION MARK" #xE0022)
6 ("TAG NUMBER SIGN" #xE0023)
7 ("TAG DOLLAR SIGN" #xE0024)
8 ("TAG PERCENT SIGN" #xE0025)
9 ("TAG AMPERSAND" #xE0026)
10 ("TAG APOSTROPHE" #xE0027)
11 ("TAG LEFT PARENTHESIS" #xE0028)
12 ("TAG RIGHT PARENTHESIS" #xE0029)
13 ("TAG ASTERISK" #xE002A)
14 ("TAG PLUS SIGN" #xE002B)
15 ("TAG COMMA" #xE002C)
16 ("TAG HYPHEN-MINUS" #xE002D)
17 ("TAG FULL STOP" #xE002E)
18 ("TAG SOLIDUS" #xE002F)
19 ("TAG DIGIT ZERO" #xE0030)
20 ("TAG DIGIT ONE" #xE0031)
21 ("TAG DIGIT TWO" #xE0032)
22 ("TAG DIGIT THREE" #xE0033)
23 ("TAG DIGIT FOUR" #xE0034)
24 ("TAG DIGIT FIVE" #xE0035)
25 ("TAG DIGIT SIX" #xE0036)
26 ("TAG DIGIT SEVEN" #xE0037)
27 ("TAG DIGIT EIGHT" #xE0038)
28 ("TAG DIGIT NINE" #xE0039)
29 ("TAG COLON" #xE003A)
30 ("TAG SEMICOLON" #xE003B)
31 ("TAG LESS-THAN SIGN" #xE003C)
32 ("TAG EQUALS SIGN" #xE003D)
33 ("TAG GREATER-THAN SIGN" #xE003E)
34 ("TAG QUESTION MARK" #xE003F)
35 ("TAG COMMERCIAL AT" #xE0040)
36 ("TAG LATIN CAPITAL LETTER A" #xE0041)
37 ("TAG LATIN CAPITAL LETTER B" #xE0042)
38 ("TAG LATIN CAPITAL LETTER C" #xE0043)
39 ("TAG LATIN CAPITAL LETTER D" #xE0044)
40 ("TAG LATIN CAPITAL LETTER E" #xE0045)
41 ("TAG LATIN CAPITAL LETTER F" #xE0046)
42 ("TAG LATIN CAPITAL LETTER G" #xE0047)
43 ("TAG LATIN CAPITAL LETTER H" #xE0048)
44 ("TAG LATIN CAPITAL LETTER I" #xE0049)
45 ("TAG LATIN CAPITAL LETTER J" #xE004A)
46 ("TAG LATIN CAPITAL LETTER K" #xE004B)
47 ("TAG LATIN CAPITAL LETTER L" #xE004C)
48 ("TAG LATIN CAPITAL LETTER M" #xE004D)
49 ("TAG LATIN CAPITAL LETTER N" #xE004E)
50 ("TAG LATIN CAPITAL LETTER O" #xE004F)
51 ("TAG LATIN CAPITAL LETTER P" #xE0050)
52 ("TAG LATIN CAPITAL LETTER Q" #xE0051)
53 ("TAG LATIN CAPITAL LETTER R" #xE0052)
54 ("TAG LATIN CAPITAL LETTER S" #xE0053)
55 ("TAG LATIN CAPITAL LETTER T" #xE0054)
56 ("TAG LATIN CAPITAL LETTER U" #xE0055)
57 ("TAG LATIN CAPITAL LETTER V" #xE0056)
58 ("TAG LATIN CAPITAL LETTER W" #xE0057)
59 ("TAG LATIN CAPITAL LETTER X" #xE0058)
60 ("TAG LATIN CAPITAL LETTER Y" #xE0059)
61 ("TAG LATIN CAPITAL LETTER Z" #xE005A)
62 ("TAG LEFT SQUARE BRACKET" #xE005B)
63 ("TAG REVERSE SOLIDUS" #xE005C)
64 ("TAG RIGHT SQUARE BRACKET" #xE005D)
65 ("TAG CIRCUMFLEX ACCENT" #xE005E)
66 ("TAG LOW LINE" #xE005F)
67 ("TAG GRAVE ACCENT" #xE0060)
68 ("TAG LATIN SMALL LETTER A" #xE0061)
69 ("TAG LATIN SMALL LETTER B" #xE0062)
70 ("TAG LATIN SMALL LETTER C" #xE0063)
71 ("TAG LATIN SMALL LETTER D" #xE0064)
72 ("TAG LATIN SMALL LETTER E" #xE0065)
73 ("TAG LATIN SMALL LETTER F" #xE0066)
74 ("TAG LATIN SMALL LETTER G" #xE0067)
75 ("TAG LATIN SMALL LETTER H" #xE0068)
76 ("TAG LATIN SMALL LETTER I" #xE0069)
77 ("TAG LATIN SMALL LETTER J" #xE006A)
78 ("TAG LATIN SMALL LETTER K" #xE006B)
79 ("TAG LATIN SMALL LETTER L" #xE006C)
80 ("TAG LATIN SMALL LETTER M" #xE006D)
81 ("TAG LATIN SMALL LETTER N" #xE006E)
82 ("TAG LATIN SMALL LETTER O" #xE006F)
83 ("TAG LATIN SMALL LETTER P" #xE0070)
84 ("TAG LATIN SMALL LETTER Q" #xE0071)
85 ("TAG LATIN SMALL LETTER R" #xE0072)
86 ("TAG LATIN SMALL LETTER S" #xE0073)
87 ("TAG LATIN SMALL LETTER T" #xE0074)
88 ("TAG LATIN SMALL LETTER U" #xE0075)
89 ("TAG LATIN SMALL LETTER V" #xE0076)
90 ("TAG LATIN SMALL LETTER W" #xE0077)
91 ("TAG LATIN SMALL LETTER X" #xE0078)
92 ("TAG LATIN SMALL LETTER Y" #xE0079)
93 ("TAG LATIN SMALL LETTER Z" #xE007A)
94 ("TAG LEFT CURLY BRACKET" #xE007B)
95 ("TAG VERTICAL LINE" #xE007C)
96 ("TAG RIGHT CURLY BRACKET" #xE007D)
97 ("TAG TILDE" #xE007E)
98 ("CANCEL TAG" #xE007F)
99 ))
diff --git a/lisp/nxml/nxml-enc.el b/lisp/nxml/nxml-enc.el
new file mode 100644
index 00000000000..ba75580301a
--- /dev/null
+++ b/lisp/nxml/nxml-enc.el
@@ -0,0 +1,167 @@
1;;; nxml-enc.el --- XML encoding auto-detection
2
3;; Copyright (C) 2003 Free Software Foundation, Inc.
4
5;; Author: James Clark
6;; Keywords: XML
7
8;; This program is free software; you can redistribute it and/or
9;; modify it under the terms of the GNU General Public License as
10;; published by the Free Software Foundation; either version 2 of
11;; the License, or (at your option) any later version.
12
13;; This program is distributed in the hope that it will be
14;; useful, but WITHOUT ANY WARRANTY; without even the implied
15;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16;; PURPOSE. See the GNU General Public License for more details.
17
18;; You should have received a copy of the GNU General Public
19;; License along with this program; if not, write to the Free
20;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21;; MA 02111-1307 USA
22
23;;; Commentary:
24
25;; User entry points are nxml-start-auto-coding and
26;; nxml-stop-auto-coding. This is separate from nxml-mode, because
27;; this cannot be autoloaded. It may use
28;; `xmltok-get-declared-encoding-position' which can be autoloaded.
29;; It's separate from rng-auto.el so it can be byte-compiled, and
30;; because it provides independent, useful functionality.
31
32;;; Code:
33
34(defvar nxml-file-name-ignore-case
35 (memq system-type '(vax-vms windows-nt)))
36
37(defvar nxml-cached-file-name-auto-coding-regexp nil)
38(defvar nxml-cached-auto-mode-alist nil)
39
40(defun nxml-file-name-auto-coding-regexp ()
41 "Return regexp for filenames for which XML auto-coding should be done."
42 (if (eq auto-mode-alist nxml-cached-auto-mode-alist)
43 nxml-cached-file-name-auto-coding-regexp
44 (let ((alist auto-mode-alist)
45 (case-fold-search nxml-file-name-ignore-case)
46 regexps)
47 (setq nxml-cached-auto-mode-alist alist)
48 (while alist
49 (when (eq (cdar alist) 'nxml-mode)
50 (setq regexps (cons (caar alist) regexps)))
51 (setq alist (cdr alist)))
52 (setq nxml-cached-file-name-auto-coding-regexp
53 (if (null (cdr regexps))
54 (car regexps)
55 (mapconcat (lambda (r)
56 (concat "\\(?:" r "\\)"))
57 regexps
58 "\\|"))))))
59
60(defvar nxml-non-xml-set-auto-coding-function nil
61 "The function that `set-auto-coding-function' should call for non-XML files.")
62(defun nxml-set-auto-coding (file-name size)
63 (if (let ((case-fold-search nxml-file-name-ignore-case)
64 (regexp (nxml-file-name-auto-coding-regexp)))
65 (and regexp
66 (string-match regexp file-name)))
67 (nxml-set-xml-coding file-name size)
68 (and nxml-non-xml-set-auto-coding-function
69 (funcall nxml-non-xml-set-auto-coding-function file-name size))))
70
71(defun nxml-set-xml-coding (file-name size)
72 "Function to use as `set-auto-coding-function' when file is known to be XML."
73 (nxml-detect-coding-system (+ (point) (min size 1024))))
74
75(defun nxml-detect-coding-system (limit)
76 (if (< limit (+ (point) 2))
77 (if (eq (char-after) 0) 'no-conversion 'utf-8)
78 (let ((first-two-chars (list (char-after)
79 (char-after (1+ (point))))))
80 (cond ((equal first-two-chars '(#xFE #xFF))
81 (and (coding-system-p 'utf-16-be) 'utf-16-be))
82 ((equal first-two-chars '(#xFF #xFE))
83 (and (coding-system-p 'utf-16-le) 'utf-16-le))
84 ((memq 0 first-two-chars)
85 ;; Certainly not well-formed XML;
86 ;; perhaps UTF-16 without BOM.
87 ;; In any case, we can't handle it.
88 ;; no-conversion gives the user a chance to fix it.
89 'no-conversion)
90 ;; There are other things we might try here in the future
91 ;; eg UTF-8 BOM, UTF-16 with no BOM
92 ;; translate to EBCDIC
93 (t
94 (let ((enc-pos (xmltok-get-declared-encoding-position limit)))
95 (cond ((consp enc-pos)
96 (or (nxml-mime-charset-coding-system
97 (buffer-substring-no-properties (car enc-pos)
98 (cdr enc-pos)))
99 ;; We have an encoding whose name we don't recognize.
100 ;; What to do?
101 ;; raw-text seems the best bet: since we got
102 ;; the XML decl it must be a superset of ASCII,
103 ;; so we don't need to go to no-conversion
104 'raw-text))
105 (enc-pos 'utf-8)
106 ;; invalid XML declaration
107 (t nil))))))))
108
109(defun nxml-mime-charset-coding-system (charset)
110 (let ((charset-sym (intern (downcase charset)))
111 (coding-systems (coding-system-list t))
112 coding-system ret)
113 (while (and coding-systems (not ret))
114 (setq coding-system (car coding-systems))
115 (if (eq (coding-system-get coding-system 'mime-charset)
116 charset-sym)
117 (setq ret coding-system)
118 (setq coding-systems (cdr coding-systems))))
119 ret))
120
121(defun nxml-start-auto-coding ()
122 "Do encoding auto-detection as specified in the XML standard.
123Applied to any files that `auto-mode-alist' says should be handled by
124`nxml-mode'."
125 (interactive)
126 (unless (eq set-auto-coding-function 'nxml-set-auto-coding)
127 (let ((inhibit-quit t))
128 (setq nxml-non-xml-set-auto-coding-function set-auto-coding-function)
129 (setq set-auto-coding-function 'nxml-set-auto-coding))))
130
131(defun nxml-stop-auto-coding ()
132 "Stop doing encoding auto-detection as specified in the XML standard."
133 (interactive)
134 (when (eq set-auto-coding-function 'nxml-set-auto-coding)
135 (let ((inhibit-quit t))
136 (setq set-auto-coding-function nxml-non-xml-set-auto-coding-function)
137 (setq nxml-non-xml-set-auto-coding-function nil))))
138
139(unless (coding-system-p 'us-ascii)
140 (make-coding-system
141 ;; Unicode Emacs uses ?- last time I looked
142 'us-ascii 2 ?-
143 "ISO 2022 based 7-bit encoding for ASCII (MIME:US-ASCII)"
144 '(ascii)
145 '((safe-charsets ascii)
146 (mime-charset . us-ascii))))
147
148;; Emacs 21.3.50 makes us-ascii an alias for iso-safe without
149;; giving it a mime-charset property.
150(unless (coding-system-get 'us-ascii 'mime-charset)
151 (coding-system-put 'us-ascii 'mime-charset 'us-ascii))
152
153;; Work around bug in Emacs 21.3
154
155(when (and (coding-system-p 'utf-16-le)
156 (eq (coding-system-get 'utf-16-le 'pre-write-conversion)
157 'utf-16-le-pre-write-conversion))
158 (coding-system-put 'utf-16-le 'pre-write-conversion nil))
159
160(when (and (coding-system-p 'utf-16-le)
161 (eq (coding-system-get 'utf-16-be 'pre-write-conversion)
162 'utf-16-be-pre-write-conversion))
163 (coding-system-put 'utf-16-be 'pre-write-conversion nil))
164
165(provide 'nxml-enc)
166
167;;; nxml-enc.el ends here
diff --git a/lisp/nxml/nxml-glyph.el b/lisp/nxml/nxml-glyph.el
new file mode 100644
index 00000000000..b5a70b2694b
--- /dev/null
+++ b/lisp/nxml/nxml-glyph.el
@@ -0,0 +1,418 @@
1;;; nxml-glyph.el --- glyph-handling for nxml-mode
2
3;; Copyright (C) 2003 Free Software Foundation, Inc.
4
5;; Author: James Clark
6;; Keywords: XML
7
8;; This program is free software; you can redistribute it and/or
9;; modify it under the terms of the GNU General Public License as
10;; published by the Free Software Foundation; either version 2 of
11;; the License, or (at your option) any later version.
12
13;; This program is distributed in the hope that it will be
14;; useful, but WITHOUT ANY WARRANTY; without even the implied
15;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16;; PURPOSE. See the GNU General Public License for more details.
17
18;; You should have received a copy of the GNU General Public
19;; License along with this program; if not, write to the Free
20;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21;; MA 02111-1307 USA
22
23;;; Commentary:
24
25;; The entry point to this file is `nxml-glyph-display-string'.
26;; The current implementation is heuristic due to a lack of
27;; Emacs primitives necessary to implement it properly. The user
28;; can tweak the heuristics using `nxml-glyph-set-hook'.
29
30;;; Code:
31
32(defconst nxml-ascii-glyph-set
33 [(#x0020 . #x007E)])
34
35(defconst nxml-latin1-glyph-set
36 [(#x0020 . #x007E)
37 (#x00A0 . #x00FF)])
38
39;; These were generated by using nxml-insert-target-repertoire-glyph-set
40;; on the TARGET[123] files in
41;; http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz
42
43(defconst nxml-misc-fixed-1-glyph-set
44 [(#x0020 . #x007E)
45 (#x00A0 . #x00FF)
46 (#x0100 . #x017F)
47 #x018F #x0192
48 (#x0218 . #x021B)
49 #x0259
50 (#x02C6 . #x02C7)
51 (#x02D8 . #x02DD)
52 (#x0374 . #x0375)
53 #x037A #x037E
54 (#x0384 . #x038A)
55 #x038C
56 (#x038E . #x03A1)
57 (#x03A3 . #x03CE)
58 (#x0401 . #x040C)
59 (#x040E . #x044F)
60 (#x0451 . #x045C)
61 (#x045E . #x045F)
62 (#x0490 . #x0491)
63 (#x05D0 . #x05EA)
64 (#x1E02 . #x1E03)
65 (#x1E0A . #x1E0B)
66 (#x1E1E . #x1E1F)
67 (#x1E40 . #x1E41)
68 (#x1E56 . #x1E57)
69 (#x1E60 . #x1E61)
70 (#x1E6A . #x1E6B)
71 (#x1E80 . #x1E85)
72 (#x1EF2 . #x1EF3)
73 (#x2010 . #x2022)
74 #x2026 #x2030
75 (#x2039 . #x203A)
76 #x20AC #x2116 #x2122 #x2126
77 (#x215B . #x215E)
78 (#x2190 . #x2193)
79 #x2260
80 (#x2264 . #x2265)
81 (#x23BA . #x23BD)
82 (#x2409 . #x240D)
83 #x2424 #x2500 #x2502 #x250C #x2510 #x2514 #x2518 #x251C #x2524 #x252C #x2534 #x253C #x2592 #x25C6 #x266A #xFFFD]
84 "Glyph set for TARGET1 glyph repertoire of misc-fixed-* font.
85This repertoire is supported for the bold and oblique fonts.")
86
87(defconst nxml-misc-fixed-2-glyph-set
88 [(#x0020 . #x007E)
89 (#x00A0 . #x00FF)
90 (#x0100 . #x017F)
91 #x018F #x0192
92 (#x01FA . #x01FF)
93 (#x0218 . #x021B)
94 #x0259
95 (#x02C6 . #x02C7)
96 #x02C9
97 (#x02D8 . #x02DD)
98 (#x0300 . #x0311)
99 (#x0374 . #x0375)
100 #x037A #x037E
101 (#x0384 . #x038A)
102 #x038C
103 (#x038E . #x03A1)
104 (#x03A3 . #x03CE)
105 #x03D1
106 (#x03D5 . #x03D6)
107 #x03F1
108 (#x0401 . #x040C)
109 (#x040E . #x044F)
110 (#x0451 . #x045C)
111 (#x045E . #x045F)
112 (#x0490 . #x0491)
113 (#x05D0 . #x05EA)
114 (#x1E02 . #x1E03)
115 (#x1E0A . #x1E0B)
116 (#x1E1E . #x1E1F)
117 (#x1E40 . #x1E41)
118 (#x1E56 . #x1E57)
119 (#x1E60 . #x1E61)
120 (#x1E6A . #x1E6B)
121 (#x1E80 . #x1E85)
122 (#x1EF2 . #x1EF3)
123 (#x2010 . #x2022)
124 #x2026 #x2030
125 (#x2032 . #x2034)
126 (#x2039 . #x203A)
127 #x203C #x203E #x2044
128 (#x2070 . #x2071)
129 (#x2074 . #x208E)
130 (#x20A3 . #x20A4)
131 #x20A7 #x20AC
132 (#x20D0 . #x20D7)
133 #x2102 #x2105 #x2113
134 (#x2115 . #x2116)
135 #x211A #x211D #x2122 #x2124 #x2126 #x212E
136 (#x215B . #x215E)
137 (#x2190 . #x2195)
138 (#x21A4 . #x21A8)
139 (#x21D0 . #x21D5)
140 (#x2200 . #x2209)
141 (#x220B . #x220C)
142 #x220F
143 (#x2211 . #x2213)
144 #x2215
145 (#x2218 . #x221A)
146 (#x221D . #x221F)
147 #x2221
148 (#x2224 . #x222B)
149 #x222E #x223C #x2243 #x2245
150 (#x2248 . #x2249)
151 #x2259
152 (#x225F . #x2262)
153 (#x2264 . #x2265)
154 (#x226A . #x226B)
155 (#x2282 . #x228B)
156 #x2295 #x2297
157 (#x22A4 . #x22A7)
158 (#x22C2 . #x22C3)
159 #x22C5 #x2300 #x2302
160 (#x2308 . #x230B)
161 #x2310
162 (#x2320 . #x2321)
163 (#x2329 . #x232A)
164 (#x23BA . #x23BD)
165 (#x2409 . #x240D)
166 #x2424 #x2500 #x2502 #x250C #x2510 #x2514 #x2518 #x251C #x2524 #x252C #x2534 #x253C
167 (#x254C . #x2573)
168 (#x2580 . #x25A1)
169 (#x25AA . #x25AC)
170 (#x25B2 . #x25B3)
171 #x25BA #x25BC #x25C4 #x25C6
172 (#x25CA . #x25CB)
173 #x25CF
174 (#x25D8 . #x25D9)
175 #x25E6
176 (#x263A . #x263C)
177 #x2640 #x2642 #x2660 #x2663
178 (#x2665 . #x2666)
179 (#x266A . #x266B)
180 (#xFB01 . #xFB02)
181 #xFFFD]
182 "Glyph set for TARGET2 glyph repertoire of the misc-fixed-* fonts.
183This repertoire is supported for the following fonts:
1845x7.bdf 5x8.bdf 6x9.bdf 6x10.bdf 6x12.bdf 7x13.bdf 7x14.bdf clR6x12.bdf")
185
186(defconst nxml-misc-fixed-3-glyph-set
187 [(#x0020 . #x007E)
188 (#x00A0 . #x00FF)
189 (#x0100 . #x01FF)
190 (#x0200 . #x0220)
191 (#x0222 . #x0233)
192 (#x0250 . #x02AD)
193 (#x02B0 . #x02EE)
194 (#x0300 . #x034F)
195 (#x0360 . #x036F)
196 (#x0374 . #x0375)
197 #x037A #x037E
198 (#x0384 . #x038A)
199 #x038C
200 (#x038E . #x03A1)
201 (#x03A3 . #x03CE)
202 (#x03D0 . #x03F6)
203 (#x0400 . #x0486)
204 (#x0488 . #x04CE)
205 (#x04D0 . #x04F5)
206 (#x04F8 . #x04F9)
207 (#x0500 . #x050F)
208 (#x0531 . #x0556)
209 (#x0559 . #x055F)
210 (#x0561 . #x0587)
211 (#x0589 . #x058A)
212 (#x05B0 . #x05B9)
213 (#x05BB . #x05C4)
214 (#x05D0 . #x05EA)
215 (#x05F0 . #x05F4)
216 (#x10D0 . #x10F8)
217 #x10FB
218 (#x1E00 . #x1E9B)
219 (#x1EA0 . #x1EF9)
220 (#x1F00 . #x1F15)
221 (#x1F18 . #x1F1D)
222 (#x1F20 . #x1F45)
223 (#x1F48 . #x1F4D)
224 (#x1F50 . #x1F57)
225 #x1F59 #x1F5B #x1F5D
226 (#x1F5F . #x1F7D)
227 (#x1F80 . #x1FB4)
228 (#x1FB6 . #x1FC4)
229 (#x1FC6 . #x1FD3)
230 (#x1FD6 . #x1FDB)
231 (#x1FDD . #x1FEF)
232 (#x1FF2 . #x1FF4)
233 (#x1FF6 . #x1FFE)
234 (#x2000 . #x200A)
235 (#x2010 . #x2027)
236 (#x202F . #x2052)
237 #x2057
238 (#x205F . #x2063)
239 (#x2070 . #x2071)
240 (#x2074 . #x208E)
241 (#x20A0 . #x20B1)
242 (#x20D0 . #x20EA)
243 (#x2100 . #x213A)
244 (#x213D . #x214B)
245 (#x2153 . #x2183)
246 (#x2190 . #x21FF)
247 (#x2200 . #x22FF)
248 (#x2300 . #x23CE)
249 (#x2400 . #x2426)
250 (#x2440 . #x244A)
251 (#x2500 . #x25FF)
252 (#x2600 . #x2613)
253 (#x2616 . #x2617)
254 (#x2619 . #x267D)
255 (#x2680 . #x2689)
256 (#x27E6 . #x27EB)
257 (#x27F5 . #x27FF)
258 (#x2A00 . #x2A06)
259 #x2A1D #x2A3F #x303F
260 (#xFB00 . #xFB06)
261 (#xFB13 . #xFB17)
262 (#xFB1D . #xFB36)
263 (#xFB38 . #xFB3C)
264 #xFB3E
265 (#xFB40 . #xFB41)
266 (#xFB43 . #xFB44)
267 (#xFB46 . #xFB4F)
268 (#xFE20 . #xFE23)
269 (#xFF61 . #xFF9F)
270 #xFFFD]
271 "Glyph set for TARGET3 glyph repertoire of the misc-fixed-* fonts.
272This repertoire is supported for the following fonts:
2736x13.bdf 8x13.bdf 9x15.bdf 9x18.bdf 10x20.bdf")
274
275(defconst nxml-wgl4-glyph-set
276 [(#x0020 . #x007E)
277 (#x00A0 . #x017F)
278 #x0192
279 (#x01FA . #x01FF)
280 (#x02C6 . #x02C7)
281 #x02C9
282 (#x02D8 . #x02DB)
283 #x02DD
284 (#x0384 . #x038A)
285 #x038C
286 (#x038E . #x03A1)
287 (#x03A3 . #x03CE)
288 (#x0401 . #x040C)
289 (#x040E . #x044F)
290 (#x0451 . #x045C)
291 (#x045E . #x045F)
292 (#x0490 . #x0491)
293 (#x1E80 . #x1E85)
294 (#x1EF2 . #x1EF3)
295 (#x2013 . #x2015)
296 (#x2017 . #x201E)
297 (#x2020 . #x2022)
298 #x2026 #x2030
299 (#x2032 . #x2033)
300 (#x2039 . #x203A)
301 #x203C #x203E #x2044 #x207F
302 (#x20A3 . #x20A4)
303 #x20A7 #x20AC #x2105 #x2113 #x2116 #x2122 #x2126 #x212E
304 (#x215B . #x215E)
305 (#x2190 . #x2195)
306 #x21A8 #x2202 #x2206 #x220F
307 (#x2211 . #x2212)
308 #x2215
309 (#x2219 . #x221A)
310 (#x221E . #x221F)
311 #x2229 #x222B #x2248
312 (#x2260 . #x2261)
313 (#x2264 . #x2265)
314 #x2302 #x2310
315 (#x2320 . #x2321)
316 #x2500 #x2502 #x250C #x2510 #x2514 #x2518 #x251C #x2524
317 #x252C #x2534 #x253C
318 (#x2550 . #x256C)
319 #x2580 #x2584 #x2588 #x258C
320 (#x2590 . #x2593)
321 (#x25A0 . #x25A1)
322 (#x25AA . #x25AC)
323 #x25B2 #x25BA #x25BC #x25C4
324 (#x25CA . #x25CB)
325 #x25CF
326 (#x25D8 . #x25D9)
327 #x25E6
328 (#x263A . #x263C)
329 #x2640 #x2642 #x2660 #x2663
330 (#x2665 . #x2666)
331 (#x266A . #x266B)
332 (#xFB01 . #xFB02)]
333 "Glyph set corresponding to Windows Glyph List 4.")
334
335(defvar nxml-glyph-set-hook nil
336 "*Hook for determining the set of glyphs in a face.
337The hook will receive a single argument FACE. If it can determine the
338set of glyphs representable by FACE, it must set the variable
339`nxml-glyph-set' and return non-nil. Otherwise, it must return
340nil. The hook will be run until success. The constants
341`nxml-ascii-glyph-set', `nxml-latin1-glyph-set',
342`nxml-misc-fixed-1-glyph-set', `nxml-misc-fixed-2-glyph-set',
343`nxml-misc-fixed-3-glyph-set' and `nxml-wgl4-glyph-set' are predefined
344for use by `nxml-glyph-set-hook'.")
345
346(defvar nxml-glyph-set nil
347 "Used by `nxml-glyph-set-hook' to return set of glyphs in a FACE.
348This should dynamically bound by any function that runs
349`nxml-glyph-set-hook'. The value must be either nil representing an
350empty set or a vector. Each member of the vector is either a single
351integer or a cons (FIRST . LAST) representing the range of integers
352from FIRST to LAST. An integer represents a glyph with that Unicode
353code-point. The vector must be ordered.")
354
355(defun nxml-x-set-glyph-set (face)
356 (setq nxml-glyph-set
357 (if (equal (face-attribute face :family) "misc-fixed")
358 nxml-misc-fixed-3-glyph-set
359 nxml-wgl4-glyph-set)))
360
361(defun nxml-w32-set-glyph-set (face)
362 (setq nxml-glyph-set nxml-wgl4-glyph-set))
363
364(defun nxml-window-system-set-glyph-set (face)
365 (setq nxml-glyph-set nxml-latin1-glyph-set))
366
367(defun nxml-terminal-set-glyph-set (face)
368 (setq nxml-glyph-set nxml-ascii-glyph-set))
369
370(add-hook 'nxml-glyph-set-hook
371 (or (cdr (assq window-system
372 '((x . nxml-x-set-glyph-set)
373 (w32 . nxml-w32-set-glyph-set)
374 (nil . nxml-terminal-set-glyph-set))))
375 'nxml-window-system-set-glyph-set)
376 t)
377
378;;;###autoload
379(defun nxml-glyph-display-string (n face)
380 "Return a string that can display a glyph for Unicode code-point N.
381FACE gives the face that will be used for displaying the string.
382Return nil if the face cannot display a glyph for N."
383 (let ((nxml-glyph-set nil))
384 (run-hook-with-args-until-success 'nxml-glyph-set-hook face)
385 (and nxml-glyph-set
386 (nxml-glyph-set-contains-p n nxml-glyph-set)
387 (let ((ch (decode-char 'ucs n)))
388 (and ch (string ch))))))
389
390(defun nxml-glyph-set-contains-p (n v)
391 (let ((start 0)
392 (end (length v))
393 found mid mid-val mid-start-val mid-end-val)
394 (while (> end start)
395 (setq mid (+ start
396 (/ (- end start) 2)))
397 (setq mid-val (aref v mid))
398 (if (consp mid-val)
399 (setq mid-start-val (car mid-val)
400 mid-end-val (cdr mid-val))
401 (setq mid-start-val mid-val
402 mid-end-val mid-val))
403 (cond ((and (<= mid-start-val n)
404 (<= n mid-end-val))
405 (setq found t)
406 (setq start end))
407 ((< n mid-start-val)
408 (setq end mid))
409 (t
410 (setq start
411 (if (eq start mid)
412 end
413 mid)))))
414 found))
415
416(provide 'nxml-glyph)
417
418;;; nxml-glyph.el ends here
diff --git a/lisp/nxml/nxml-maint.el b/lisp/nxml/nxml-maint.el
new file mode 100644
index 00000000000..015c0c7dadf
--- /dev/null
+++ b/lisp/nxml/nxml-maint.el
@@ -0,0 +1,106 @@
1;;; nxml-maint.el --- commands for maintainers of nxml-*.el
2
3;; Copyright (C) 2003 Free Software Foundation, Inc.
4
5;; Author: James Clark
6;; Keywords: XML
7
8;; This program is free software; you can redistribute it and/or
9;; modify it under the terms of the GNU General Public License as
10;; published by the Free Software Foundation; either version 2 of
11;; the License, or (at your option) any later version.
12
13;; This program is distributed in the hope that it will be
14;; useful, but WITHOUT ANY WARRANTY; without even the implied
15;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16;; PURPOSE. See the GNU General Public License for more details.
17
18;; You should have received a copy of the GNU General Public
19;; License along with this program; if not, write to the Free
20;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21;; MA 02111-1307 USA
22
23;;; Commentary:
24
25;;; Code:
26
27;;; Generating files with Unicode char names.
28
29(require 'nxml-uchnm)
30
31(defun nxml-create-unicode-char-name-sets (file)
32 "Generate files containing char names from Unicode standard."
33 (interactive "fUnicodeData file: ")
34 (mapcar (lambda (block)
35 (let ((nameset (nxml-unicode-block-char-name-set (nth 0 block))))
36 (save-excursion
37 (find-file (concat (get nameset 'nxml-char-name-set-file)
38 ".el"))
39 (erase-buffer)
40 (insert "(nxml-define-char-name-set '")
41 (prin1 nameset (current-buffer))
42 (insert "\n '())\n")
43 (goto-char (- (point) 3)))))
44 nxml-unicode-blocks)
45 (save-excursion
46 (find-file file)
47 (goto-char (point-min))
48 (let ((blocks nxml-unicode-blocks)
49 code name)
50 (while (re-search-forward "^\\([0-9A-F]+\\);\\([^<;][^;]*\\);"
51 nil
52 t)
53 (setq code (string-to-number (match-string 1) 16))
54 (setq name (match-string 2))
55 (while (and blocks
56 (> code (nth 2 (car blocks))))
57 (setq blocks (cdr blocks)))
58 (when (and (<= (nth 1 (car blocks)) code)
59 (<= code (nth 2 (car blocks))))
60 (save-excursion
61 (find-file (concat (get (nxml-unicode-block-char-name-set
62 (nth 0 (car blocks)))
63 'nxml-char-name-set-file)
64 ".el"))
65 (insert "(")
66 (prin1 name (current-buffer))
67 (insert (format " #x%04X)\n " code))))))))
68
69;;; Parsing target repertoire files from ucs-fonts.
70;; This is for converting the TARGET? files in
71;; http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz
72;; into a glyph set.
73
74(defun nxml-insert-target-repertoire-glyph-set (file var)
75 (interactive "fTarget file: \nSVariable name: ")
76 (let (lst head)
77 (save-excursion
78 (set-buffer (find-file-noselect file))
79 (goto-char (point-min))
80 (while (re-search-forward "^ *\\([a-FA-F0-9]\\{2\\}\\)[ \t]+" nil t)
81 (let ((row (match-string 1))
82 (eol (save-excursion (end-of-line) (point))))
83 (while (re-search-forward "\\([a-FA-F0-9]\\{2\\}\\)-\\([a-FA-F0-9]\\{2\\}\\)\\|\\([a-FA-F0-9]\\{2\\}\\)" eol t)
84 (setq lst
85 (cons (if (match-beginning 3)
86 (concat "#x" row (match-string 3))
87 (concat "(#x" row (match-string 1)
88 " . #x" row (match-string 2) ")"))
89 lst))))))
90 (setq lst (nreverse lst))
91 (insert (format "(defconst %s\n [" var))
92 (while lst
93 (setq head (car lst))
94 (setq lst (cdr lst))
95 (insert head)
96 (when (= (length head) 6)
97 (while (and lst (= (length (car lst)) 6))
98 (insert " ")
99 (insert (car lst))
100 (setq lst (cdr lst))))
101 (when lst (insert "\n ")))
102 (insert "])\n")))
103
104(provide 'nxml-maint)
105
106;;; nxml-maint.el ends here
diff --git a/lisp/nxml/nxml-mode.el b/lisp/nxml/nxml-mode.el
new file mode 100644
index 00000000000..821b40621f0
--- /dev/null
+++ b/lisp/nxml/nxml-mode.el
@@ -0,0 +1,2665 @@
1;;; nxml-mode.el --- a new XML mode
2
3;; Copyright (C) 2003, 2004 Free Software Foundation, Inc.
4
5;; Author: James Clark
6;; Keywords: XML
7
8;; This program is free software; you can redistribute it and/or
9;; modify it under the terms of the GNU General Public License as
10;; published by the Free Software Foundation; either version 2 of
11;; the License, or (at your option) any later version.
12
13;; This program is distributed in the hope that it will be
14;; useful, but WITHOUT ANY WARRANTY; without even the implied
15;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16;; PURPOSE. See the GNU General Public License for more details.
17
18;; You should have received a copy of the GNU General Public
19;; License along with this program; if not, write to the Free
20;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21;; MA 02111-1307 USA
22
23;;; Commentary:
24
25;; To use this include rng-auto.el in your .emacs.
26
27;; See nxml-rap.el for description of parsing strategy.
28
29;; The font locking here is independent of font-lock.el. We want to
30;; do more sophisticated handling of changes and we want to use the
31;; same xmltok rather than regexps for parsing so that we parse
32;; consistently and correctly.
33
34;;; Code:
35
36(when (featurep 'mucs)
37 (error "nxml-mode is not compatible with Mule-UCS"))
38
39(require 'xmltok)
40(require 'nxml-enc)
41(require 'nxml-glyph)
42(require 'nxml-util)
43(require 'nxml-rap)
44(require 'nxml-outln)
45
46;;; Customization
47
48(defgroup nxml nil
49 "New XML editing mode"
50 :group 'languages
51 :group 'wp)
52
53(defgroup nxml-highlighting-faces nil
54 "Faces for XML syntax highlighting."
55 :group 'nxml
56 :group 'font-lock-highlighting-faces)
57
58(defcustom nxml-syntax-highlight-flag t
59 "*Non-nil means nxml-mode should perform syntax highlighting."
60 :group 'nxml
61 :type 'boolean)
62
63(defcustom nxml-char-ref-display-glyph-flag t
64 "*Non-nil means display glyph following character reference.
65The glyph is displayed in `nxml-glyph-face'. The hook
66`nxml-glyph-set-hook' can be used to customize for which characters
67glyphs are displayed."
68 :group 'nxml
69 :type 'boolean)
70
71(defcustom nxml-mode-hook nil
72 "Hook run by command `nxml-mode'."
73 :group 'nxml
74 :type 'hook)
75
76(defcustom nxml-sexp-element-flag nil
77 "*Non-nil means sexp commands treat an element as a single expression."
78 :group 'nxml
79 :type 'boolean)
80
81(defcustom nxml-slash-auto-complete-flag nil
82 "*Non-nil means typing a slash automatically completes the end-tag.
83This is used by `nxml-electric-slash'."
84 :group 'nxml
85 :type 'boolean)
86
87(defcustom nxml-child-indent 2
88 "*Indentation for the children of an element relative to the start-tag.
89This only applies when the line or lines containing the start-tag contains
90nothing else other than that start-tag."
91 :group 'nxml
92 :type 'integer)
93
94(defcustom nxml-attribute-indent 4
95 "*Indentation for the attributes of an element relative to the start-tag.
96This only applies when the first attribute of a tag starts a line. In other
97cases, the first attribute on one line is indented the same as the first
98attribute on the previous line."
99 :group 'nxml
100 :type 'integer)
101
102(defvar nxml-fontify-chunk-size 500)
103
104(defcustom nxml-bind-meta-tab-to-complete-flag (not window-system)
105 "*Non-nil means bind M-TAB in `nxml-mode-map' to `nxml-complete'.
106C-return will be bound to `nxml-complete' in any case.
107M-TAB gets swallowed by many window systems/managers, and
108`documentation' will show M-TAB rather than C-return as the
109binding `rng-complete' when both are bound. So it's better
110to bind M-TAB only when it will work."
111 :group 'nxml
112 :set (lambda (sym flag)
113 (set-default sym flag)
114 (when (and (boundp 'nxml-mode-map) nxml-mode-map)
115 (define-key nxml-mode-map "\M-\t" (and flag 'nxml-complete))))
116 :type 'boolean)
117
118(defcustom nxml-prefer-utf-16-to-utf-8-flag nil
119 "*Non-nil means prefer UTF-16 to UTF-8 when saving a buffer.
120This is used only when a buffer does not contain an encoding declaration
121and when its current `buffer-file-coding-system' specifies neither UTF-16
122nor UTF-8."
123 :group 'nxml
124 :type 'boolean)
125
126(defcustom nxml-prefer-utf-16-little-to-big-endian-flag (eq system-type
127 'windows-nt)
128 "*Non-nil means prefer little-endian to big-endian byte-order for UTF-16.
129This is used only for saving a buffer; when reading the byte-order is
130auto-detected. It may be relevant both when there is no encoding declaration
131and when the encoding declaration specifies `UTF-16'."
132 :group 'nxml
133 :type 'boolean)
134
135(defcustom nxml-default-buffer-file-coding-system nil
136 "*Default value for `buffer-file-coding-system' for a buffer for a new file.
137Nil means use the default value of `buffer-file-coding-system' as normal.
138A buffer's `buffer-file-coding-system' affects what \\[nxml-insert-xml-declaration] inserts."
139 :group 'nxml
140 :type 'coding-system)
141
142(defcustom nxml-auto-insert-xml-declaration-flag nil
143 "*Non-nil means automatically insert an XML declaration in a new file.
144The XML declaration is inserted using `nxml-insert-xml-declaration'."
145 :group 'nxml
146 :type 'boolean)
147
148;; The following are the colors we use with a light background.
149;; The two blues have the same hue but contrasting saturation/value.
150;; The hue of the green is 120 degrees different from that of the
151;; blue. The red used for highlighting errors is 120 degrees
152;; different again. We use the light blue only for refs and
153;; delimiters, since these are short (long stretches in a light color
154;; would be too hard to read). The dark blue is closest to black
155;; (which we use by default for text), so we use it for attribute
156;; values, which are similar to text.
157
158(defconst nxml-light-blue-color "#9292C9") ; hue 240
159(defconst nxml-dark-blue-color "#3A3A7B") ; hue 240
160(defconst nxml-green-color "#257A25") ; hue 120
161
162;; Similar principles apply with a dark background. However,
163;; we switch green and blue, because darker blues are very hard to
164;; read (for me anyway) on a dark background.
165
166(defconst nxml-sky-blue-color "#ACACFC") ; hue 240
167(defconst nxml-dark-green-color "#00AD00") ; hue 120
168(defconst nxml-light-green-color "#70F170") ; hue 120
169
170(defface nxml-delimited-data-face
171 `((((class color) (background light)) (:foreground ,nxml-dark-blue-color))
172 (((class color) (background dark)) (:foreground ,nxml-light-green-color)))
173 "Face used to highlight data enclosed between delimiters.
174By default, this is inherited by `nxml-attribute-value-face'
175and `nxml-processing-instruction-content-face'."
176 :group 'nxml-highlighting-faces)
177
178(defface nxml-name-face
179 `((((class color) (background light)) (:foreground ,nxml-green-color))
180 (((class color) (background dark)) (:foreground ,nxml-sky-blue-color)))
181 "Face used to highlight various names.
182This includes element and attribute names, processing
183instruction targets and the CDATA keyword in a CDATA section.
184This is not used directly, but only via inheritance by other faces."
185 :group 'nxml-highlighting-faces)
186
187(defface nxml-ref-face
188 `((((class color) (background light)) (:foreground ,nxml-light-blue-color))
189 (((class color) (background dark)) (:foreground ,nxml-dark-green-color)))
190 "Face used to highlight character and entity references.
191This is not used directly, but only via inheritance by other faces."
192 :group 'nxml-highlighting-faces)
193
194(defface nxml-delimiter-face
195 `((((class color) (background light)) (:foreground ,nxml-light-blue-color))
196 (((class color) (background dark)) (:foreground ,nxml-dark-green-color))
197 (t (:bold t)))
198 "Face used to highlight delimiters.
199This is not used directly, but only via inheritance by other faces."
200 :group 'nxml-highlighting-faces)
201
202(defface nxml-text-face
203 nil
204 "Face used to highlight text."
205 :group 'nxml-highlighting-faces)
206
207(defface nxml-comment-content-face
208 '((t (:italic t)))
209 "Face used to highlight the content of comments."
210 :group 'nxml-highlighting-faces)
211
212(defface nxml-comment-delimiter-face
213 '((t (:inherit nxml-delimiter-face)))
214 "Face used for the delimiters of comments, i.e <!-- and -->."
215 :group 'nxml-highlighting-faces)
216
217(defface nxml-processing-instruction-delimiter-face
218 '((t (:inherit nxml-delimiter-face)))
219 "Face used for the delimiters of processing instructions, i.e <? and ?>."
220 :group 'nxml-highlighting-faces)
221
222(defface nxml-processing-instruction-target-face
223 '((t (:inherit nxml-name-face)))
224 "Face used for the target of processing instructions."
225 :group 'nxml-highlighting-faces)
226
227(defface nxml-processing-instruction-content-face
228 '((t (:inherit nxml-delimited-data-face)))
229 "Face used for the content of processing instructions."
230 :group 'nxml-highlighting-faces)
231
232(defface nxml-cdata-section-delimiter-face
233 '((t (:inherit nxml-delimiter-face)))
234 "Face used for the delimiters of CDATA sections, i.e <![, [, and ]]>."
235 :group 'nxml-highlighting-faces)
236
237(defface nxml-cdata-section-CDATA-face
238 '((t (:inherit nxml-name-face)))
239 "Face used for the CDATA keyword in CDATA sections."
240 :group 'nxml-highlighting-faces)
241
242(defface nxml-cdata-section-content-face
243 '((t (:inherit nxml-text-face)))
244 "Face used for the content of CDATA sections."
245 :group 'nxml-highlighting-faces)
246
247(defface nxml-char-ref-number-face
248 '((t (:inherit nxml-ref-face)))
249 "Face used for the number in character references.
250This includes ths `x' in hex references."
251 :group 'nxml-highlighting-faces)
252
253(defface nxml-char-ref-delimiter-face
254 '((t (:inherit nxml-ref-face)))
255 "Face used for the delimiters of character references, i.e &# and ;."
256 :group 'nxml-highlighting-faces)
257
258(defface nxml-entity-ref-name-face
259 '((t (:inherit nxml-ref-face)))
260 "Face used for the entity name in general entity references."
261 :group 'nxml-highlighting-faces)
262
263(defface nxml-entity-ref-delimiter-face
264 '((t (:inherit nxml-ref-face)))
265 "Face used for the delimiters of entity references, i.e & and ;."
266 :group 'nxml-highlighting-faces)
267
268(defface nxml-tag-delimiter-face
269 '((t (:inherit nxml-delimiter-face)))
270 "Face used for the angle brackets delimiting tags.
271`nxml-tag-slash-face' is used for slashes."
272 :group 'nxml-highlighting-faces)
273
274(defface nxml-tag-slash-face
275 '((t (:inherit nxml-name-face)))
276 "Face used for slashes in tags, both in end-tags and empty-elements."
277 :group 'nxml-highlighting-faces)
278
279(defface nxml-element-prefix-face
280 '((t (:inherit nxml-name-face)))
281 "Face used for the prefix of elements."
282 :group 'nxml-highlighting-faces)
283
284(defface nxml-element-colon-face
285 '((t (:inherit nxml-name-face)))
286 "Face used for the colon in element names."
287 :group 'nxml-highlighting-faces)
288
289(defface nxml-element-local-name-face
290 '((t (:inherit nxml-name-face)))
291 "Face used for the local name of elements."
292 :group 'nxml-highlighting-faces)
293
294(defface nxml-attribute-prefix-face
295 '((t (:inherit nxml-name-face)))
296 "Face used for the prefix of attributes."
297 :group 'nxml-highlighting-faces)
298
299(defface nxml-attribute-colon-face
300 '((t (:inherit nxml-name-face)))
301 "Face used for the colon in attribute names."
302 :group 'nxml-highlighting-faces)
303
304(defface nxml-attribute-local-name-face
305 '((t (:inherit nxml-name-face)))
306 "Face used for the local name of attributes."
307 :group 'nxml-highlighting-faces)
308
309(defface nxml-namespace-attribute-xmlns-face
310 '((t (:inherit nxml-name-face)))
311 "Face used for `xmlns' in namespace attributes."
312 :group 'nxml-highlighting-faces)
313
314(defface nxml-namespace-attribute-colon-face
315 '((t (:inherit nxml-name-face)))
316 "Face used for the colon in namespace attributes."
317 :group 'nxml-highlighting-faces)
318
319(defface nxml-namespace-attribute-prefix-face
320 '((t (:inherit nxml-name-face)))
321 "Face used for the prefix declared in namespace attributes."
322 :group 'nxml-highlighting-faces)
323
324(defface nxml-attribute-value-face
325 '((t (:inherit nxml-delimited-data-face)))
326 "Face used for the value of attributes."
327 :group 'nxml-highlighting-faces)
328
329(defface nxml-attribute-value-delimiter-face
330 '((t (:inherit nxml-delimiter-face)))
331 "Face used for the delimiters of attribute values."
332 :group 'nxml-highlighting-faces)
333
334(defface nxml-namespace-attribute-value-face
335 '((t (:inherit nxml-attribute-value-face)))
336 "Face used for the value of namespace attributes."
337 :group 'nxml-highlighting-faces)
338
339(defface nxml-namespace-attribute-value-delimiter-face
340 '((t (:inherit nxml-attribute-value-delimiter-face)))
341 "Face used for the delimiters of namespace attribute values."
342 :group 'nxml-highlighting-faces)
343
344(defface nxml-prolog-literal-delimiter-face
345 '((t (:inherit nxml-delimiter-face)))
346 "Face used for the delimiters of literals in the prolog."
347 :group 'nxml-highlighting-faces)
348
349(defface nxml-prolog-literal-content-face
350 '((t (:inherit nxml-delimited-data-face)))
351 "Face used for the content of literals in the prolog."
352 :group 'nxml-highlighting-faces)
353
354(defface nxml-prolog-keyword-face
355 '((t (:inherit nxml-name-face)))
356 "Face used for keywords in the prolog."
357 :group 'nxml-highlighting-faces)
358
359(defface nxml-markup-declaration-delimiter-face
360 '((t (:inherit nxml-delimiter-face)))
361 "Face used for the delimiters of markup declarations in the prolog.
362The delimiters are <! and >."
363 :group 'nxml-highlighting-faces)
364
365(defface nxml-hash-face
366 '((t (:inherit nxml-name-face)))
367 "Face used for # before a name in the prolog."
368 :group 'nxml-highlighting-faces)
369
370(defface nxml-glyph-face
371 '((((type x))
372 (:family
373 "misc-fixed"
374 :background
375 "light grey"
376 :foreground
377 "black"
378 :weight
379 normal
380 :slant
381 normal))
382 (t
383 (:background
384 "light grey"
385 :foreground
386 "black"
387 :weight
388 normal
389 :slant
390 normal)))
391 "Face used for glyph for char references."
392 :group 'nxml-highlighting-faces)
393
394;;; Global variables
395
396;; This is initialized in rng-auto.el.
397(defvar nxml-version nil
398 "*The version of nxml-mode that is being used.")
399
400(defvar nxml-prolog-regions nil
401 "List of regions in the prolog to be fontified.
402See the function `xmltok-forward-prolog' for more information.")
403(make-variable-buffer-local 'nxml-prolog-regions)
404
405(defvar nxml-last-fontify-end nil
406 "Position where fontification last ended.
407Nil if the buffer changed since the last fontification.")
408(make-variable-buffer-local 'nxml-last-fontify-end)
409
410(defvar nxml-degraded nil
411 "Non-nil if currently operating in degraded mode.
412Degraded mode is enabled when an internal error is encountered in the
413fontification or after-change functions.")
414(make-variable-buffer-local 'nxml-degraded)
415
416(defvar nxml-completion-hook nil
417 "Hook run by `nxml-complete'.
418This hook is run until success.")
419
420(defvar nxml-in-mixed-content-hook nil
421 "Hook to determine whether point is in mixed content.
422The hook is called without arguments. It should return nil if it is
423definitely not mixed; non-nil otherwise. The hook will be run until
424one of the functions returns nil.")
425
426(defvar nxml-mixed-scan-distance 4000
427 "Maximum distance from point to scan when checking for mixed content.")
428
429(defvar nxml-end-tag-indent-scan-distance 4000
430 "Maximum distance from point to scan backwards when indenting end-tag.")
431
432(defvar nxml-char-ref-extra-display t
433 "Non-nil means display extra information for character references.
434The extra information consists of a tooltip with the character name
435and, if `nxml-char-ref-display-glyph-flag' is non-nil, a glyph
436corresponding to the referenced character following the character
437reference.")
438(make-variable-buffer-local 'nxml-char-ref-extra-display)
439
440(defvar nxml-mode-map
441 (let ((map (make-sparse-keymap)))
442 (define-key map "\M-\C-u" 'nxml-backward-up-element)
443 (define-key map "\M-\C-d" 'nxml-down-element)
444 (define-key map "\M-\C-n" 'nxml-forward-element)
445 (define-key map "\M-\C-p" 'nxml-backward-element)
446 (define-key map "\M-{" 'nxml-backward-paragraph)
447 (define-key map "\M-}" 'nxml-forward-paragraph)
448 (define-key map "\M-h" 'nxml-mark-paragraph)
449 (define-key map "\C-c\C-f" 'nxml-finish-element)
450 (define-key map "\C-c\C-m" 'nxml-split-element)
451 (define-key map "\C-c\C-b" 'nxml-balanced-close-start-tag-block)
452 (define-key map "\C-c\C-i" 'nxml-balanced-close-start-tag-inline)
453 (define-key map "\C-c\C-x" 'nxml-insert-xml-declaration)
454 (define-key map "\C-c\C-d" 'nxml-dynamic-markup-word)
455 ;; u is for Unicode
456 (define-key map "\C-c\C-u" 'nxml-insert-named-char)
457 (define-key map "\C-c\C-o" nxml-outline-prefix-map)
458 (define-key map [S-mouse-2] 'nxml-mouse-hide-direct-text-content)
459 (define-key map "/" 'nxml-electric-slash)
460 (define-key map [C-return] 'nxml-complete)
461 (when nxml-bind-meta-tab-to-complete-flag
462 (define-key map "\M-\t" 'nxml-complete))
463 map)
464 "Keymap for nxml-mode.")
465
466(defsubst nxml-set-face (start end face)
467 (when (and face (< start end))
468 (put-text-property start end 'face face)))
469
470(defun nxml-clear-face (start end)
471 (remove-text-properties start end '(face nil))
472 (nxml-clear-char-ref-extra-display start end))
473
474(defsubst nxml-set-fontified (start end)
475 (put-text-property start end 'fontified t))
476
477(defsubst nxml-clear-fontified (start end)
478 (remove-text-properties start end '(fontified nil)))
479
480;;;###autoload
481(defun nxml-mode ()
482 ;; We use C-c C-i instead of \\[nxml-balanced-close-start-tag-inline]
483 ;; because Emacs turns C-c C-i into C-c TAB which is hard to type and
484 ;; not mnemonic.
485 "Major mode for editing XML.
486
487Syntax highlighting is performed unless the variable
488`nxml-syntax-highlight-flag' is nil.
489
490\\[nxml-finish-element] finishes the current element by inserting an end-tag.
491C-c C-i closes a start-tag with `>' and then inserts a balancing end-tag
492leaving point between the start-tag and end-tag.
493\\[nxml-balanced-close-start-tag-block] is similar but for block rather than inline elements:
494the start-tag, point, and end-tag are all left on separate lines.
495If `nxml-slash-auto-complete-flag' is non-nil, then inserting a `</'
496automatically inserts the rest of the end-tag.
497
498\\[nxml-complete] performs completion on the symbol preceding point.
499
500\\[nxml-dynamic-markup-word] uses the contents of the current buffer
501to choose a tag to put around the word preceding point.
502
503Sections of the document can be displayed in outline form. The
504variable `nxml-section-element-name-regexp' controls when an element
505is recognized as a section. The same key sequences that change
506visibility in outline mode are used except that they start with C-c C-o
507instead of C-c.
508
509Validation is provided by the related minor-mode `rng-validate-mode'.
510This also makes completion schema- and context- sensitive. Element
511names, attribute names, attribute values and namespace URIs can all be
512completed. By default, `rng-validate-mode' is automatically enabled by
513`rng-nxml-mode-init' which is normally added to `nxml-mode-hook'. You
514can toggle it using \\[rng-validate-mode].
515
516\\[indent-for-tab-command] indents the current line appropriately.
517This can be customized using the variable `nxml-child-indent'
518and the variable `nxml-attribute-indent'.
519
520\\[nxml-insert-named-char] inserts a character reference using
521the character's name (by default, the Unicode name). \\[universal-argument] \\[nxml-insert-named-char]
522inserts the character directly.
523
524The Emacs commands that normally operate on balanced expressions will
525operate on XML markup items. Thus \\[forward-sexp] will move forward
526across one markup item; \\[backward-sexp] will move backward across
527one markup item; \\[kill-sexp] will kill the following markup item;
528\\[mark-sexp] will mark the following markup item. By default, each
529tag each treated as a single markup item; to make the complete element
530be treated as a single markup item, set the variable
531`nxml-sexp-element-flag' to t. For more details, see the function
532`nxml-forward-balanced-item'.
533
534\\[nxml-backward-up-element] and \\[nxml-down-element] move up and down the element structure.
535
536Many aspects this mode can be customized using
537\\[customize-group] nxml RET."
538 (interactive)
539 (kill-all-local-variables)
540 (setq major-mode 'nxml-mode)
541 (setq mode-name "nXML")
542 ;; We'll determine the fill prefix ourselves
543 (make-local-variable 'adaptive-fill-mode)
544 (setq adaptive-fill-mode nil)
545 (make-local-variable 'forward-sexp-function)
546 (setq forward-sexp-function 'nxml-forward-balanced-item)
547 (make-local-variable 'indent-line-function)
548 (setq indent-line-function 'nxml-indent-line)
549 (make-local-variable 'fill-paragraph-function)
550 (setq fill-paragraph-function 'nxml-do-fill-paragraph)
551 ;; Comment support
552 ;; This doesn't seem to work too well;
553 ;; I think we should probably roll our own nxml-comment-dwim function.
554 (make-local-variable 'comment-indent-function)
555 (setq comment-indent-function 'nxml-indent-line)
556 (make-local-variable 'comment-start)
557 (setq comment-start "<!--")
558 (make-local-variable 'comment-start-skip)
559 (setq comment-start-skip "<!--[ \t\r\n]*")
560 (make-local-variable 'comment-end)
561 (setq comment-end "-->")
562 (make-local-variable 'comment-end-skip)
563 (setq comment-end-skip "[ \t\r\n]*-->")
564 (make-local-variable 'comment-line-break-function)
565 (setq comment-line-break-function 'nxml-newline-and-indent)
566 (use-local-map nxml-mode-map)
567 (save-excursion
568 (save-restriction
569 (widen)
570 (nxml-clear-dependent-regions (point-min) (point-max))
571 (setq nxml-scan-end (copy-marker (point-min) nil))
572 (nxml-with-unmodifying-text-property-changes
573 (when nxml-syntax-highlight-flag
574 (nxml-clear-fontified (point-min) (point-max)))
575 (nxml-clear-inside (point-min) (point-max))
576 (nxml-with-invisible-motion
577 (nxml-scan-prolog)))))
578 (when nxml-syntax-highlight-flag
579 (add-hook 'fontification-functions 'nxml-fontify nil t))
580 (add-hook 'after-change-functions 'nxml-after-change nil t)
581 (add-hook 'write-contents-hooks 'nxml-prepare-to-save)
582 (when (not (and (buffer-file-name) (file-exists-p (buffer-file-name))))
583 (when (and nxml-default-buffer-file-coding-system
584 (not (local-variable-p 'buffer-file-coding-system)))
585 (setq buffer-file-coding-system nxml-default-buffer-file-coding-system))
586 (when nxml-auto-insert-xml-declaration-flag
587 (nxml-insert-xml-declaration)))
588 (run-hooks 'nxml-mode-hook))
589
590(defun nxml-degrade (context err)
591 (message "Internal nXML mode error in %s (%s), degrading"
592 context
593 (error-message-string err))
594 (ding)
595 (setq nxml-degraded t)
596 (setq nxml-prolog-end 1)
597 (save-excursion
598 (save-restriction
599 (widen)
600 (nxml-with-unmodifying-text-property-changes
601 (nxml-clear-face (point-min) (point-max))
602 (nxml-set-fontified (point-min) (point-max))
603 (nxml-clear-inside (point-min) (point-max)))
604 (setq mode-name "nXML/degraded"))))
605
606;;; Change management
607
608(defun nxml-after-change (start end pre-change-length)
609 ;; Work around bug in insert-file-contents.
610 (when (> end (1+ (buffer-size)))
611 (setq start 1)
612 (setq end (1+ (buffer-size))))
613 (unless nxml-degraded
614 (condition-case err
615 (save-excursion
616 (save-restriction
617 (widen)
618 (save-match-data
619 (nxml-with-invisible-motion
620 (nxml-with-unmodifying-text-property-changes
621 (nxml-after-change1 start end pre-change-length))))))
622 (error
623 (nxml-degrade 'nxml-after-change err)))))
624
625(defun nxml-after-change1 (start end pre-change-length)
626 (setq nxml-last-fontify-end nil)
627 (let ((pre-change-end (+ start pre-change-length)))
628 (setq start
629 (nxml-adjust-start-for-dependent-regions start
630 end
631 pre-change-length))
632 (when (<= start
633 ;; Add 2 so as to include the < and following char
634 ;; that start the instance, since changing these
635 ;; can change where the prolog ends.
636 (+ nxml-prolog-end 2))
637 ;; end must be extended to at least the end of the old prolog
638 (when (< pre-change-end nxml-prolog-end)
639 (setq end
640 ;; don't let end get out of range even if pre-change-length
641 ;; is bogus
642 (min (point-max)
643 (+ end (- nxml-prolog-end pre-change-end)))))
644 (nxml-scan-prolog)))
645 (cond ((<= end nxml-prolog-end)
646 (setq end nxml-prolog-end)
647 (goto-char start)
648 ;; This is so that Emacs redisplay works
649 (setq start (line-beginning-position)))
650 ((and (<= start nxml-scan-end)
651 (> start (point-min))
652 (nxml-get-inside (1- start)))
653 ;; The closing delimiter might have been removed.
654 ;; So we may need to redisplay from the beginning
655 ;; of the token.
656 (goto-char (1- start))
657 (nxml-move-outside-backwards)
658 ;; This is so that Emacs redisplay works
659 (setq start (line-beginning-position))
660 (setq end (max (nxml-scan-after-change (point) end)
661 end)))
662 (t
663 (goto-char start)
664 ;; This is both for redisplay and to move back
665 ;; past any incomplete opening delimiters
666 (setq start (line-beginning-position))
667 (setq end (max (nxml-scan-after-change start end)
668 end))))
669 (when nxml-syntax-highlight-flag
670 (when (>= start end)
671 ;; Must clear at least one char so as to trigger redisplay.
672 (cond ((< start (point-max))
673 (setq end (1+ start)))
674 (t
675 (setq end (point-max))
676 (goto-char end)
677 (setq start (line-beginning-position)))))
678 (nxml-clear-fontified start end)))
679
680;;; Encodings
681
682(defun nxml-insert-xml-declaration ()
683 "Insert an XML declaration at the beginning of buffer.
684The XML declaration will declare an encoding depending on the buffer's
685`buffer-file-coding-system'."
686 (interactive "*")
687 (let ((coding-system
688 (if (and buffer-file-coding-system
689 (coding-system-p buffer-file-coding-system)
690 (coding-system-get buffer-file-coding-system
691 'mime-charset))
692 buffer-file-coding-system
693 (nxml-choose-utf-coding-system))))
694 (goto-char (point-min))
695 (insert (format "<?xml version=\"1.0\" encoding=\"%s\"?>\n"
696 (nxml-coding-system-name coding-system)))))
697
698(defun nxml-prepare-to-save ()
699 (unless (and (not enable-multibyte-characters)
700 (local-variable-p 'buffer-file-coding-system)
701 buffer-file-coding-system
702 (or (eq (coding-system-type buffer-file-coding-system) 5)
703 (eq buffer-file-coding-system 'no-conversion)))
704 (save-excursion
705 (setq buffer-file-coding-system (nxml-select-coding-system))))
706 ;; nil from a function in `write-contents-hooks' means
707 ;; to continue and write the file as normal
708 nil)
709
710(defun nxml-select-coding-system ()
711 (let* ((suitable-coding-systems
712 (find-coding-systems-region (point-min) (point-max)))
713 (enc-pos (progn
714 (goto-char (point-min))
715 (xmltok-get-declared-encoding-position)))
716 (enc-name
717 (and (consp enc-pos)
718 (buffer-substring-no-properties (car enc-pos)
719 (cdr enc-pos))))
720 (coding-system
721 (cond (enc-name
722 (if (string= (downcase enc-name) "utf-16")
723 (nxml-choose-utf-16-coding-system)
724 (nxml-mime-charset-coding-system enc-name)))
725 (enc-pos (nxml-choose-utf-coding-system)))))
726 ;; Make sure we have a coding-system
727 (unless coding-system
728 (setq coding-system
729 (and (not buffer-read-only)
730 (nxml-choose-suitable-coding-system
731 suitable-coding-systems)))
732 (let ((message
733 (if enc-name
734 (format "Unknown encoding %s" enc-name)
735 "XML declaration is not well-formed")))
736 (cond ((not coding-system)
737 (error "%s" message))
738 ((y-or-n-p
739 (concat message
740 ". "
741 (format (if enc-name
742 "Save with %s"
743 "Modify and save with encoding %s")
744 (nxml-coding-system-name coding-system))
745 " "))
746 (nxml-fix-encoding-declaration enc-pos coding-system))
747 (t (signal 'quit nil)))))
748 ;; Make sure it can encode all the characters in the buffer
749 (unless (or (memq (coding-system-base coding-system)
750 suitable-coding-systems)
751 (equal suitable-coding-systems '(undecided)))
752 (let ((message
753 (nxml-unsuitable-coding-system-message coding-system
754 enc-name)))
755 (setq coding-system
756 (and (not buffer-read-only)
757 (nxml-choose-suitable-coding-system
758 suitable-coding-systems)))
759 (cond ((not coding-system) (error "%s" message))
760 ((y-or-n-p (concat message
761 (format ". Save with %s "
762 (nxml-coding-system-name
763 coding-system))))
764 (nxml-fix-encoding-declaration enc-pos coding-system))
765 (t (signal 'quit nil)))))
766 ;; Merge the newline type of our existing encoding
767 (let ((current-eol-type
768 (coding-system-eol-type buffer-file-coding-system)))
769 (when (and current-eol-type (integerp current-eol-type))
770 (setq coding-system
771 (coding-system-change-eol-conversion coding-system
772 current-eol-type))))
773 coding-system))
774
775(defun nxml-unsuitable-coding-system-message (coding-system &optional enc-name)
776 (if (nxml-coding-system-unicode-p coding-system)
777 "Cannot translate some characters to Unicode"
778 (format "Cannot encode some characters with %s"
779 (or enc-name
780 (nxml-coding-system-name coding-system)))))
781
782(defconst nxml-utf-16-coding-systems (and (coding-system-p 'utf-16-be)
783 (coding-system-p 'utf-16-le)
784 '(utf-16-be utf-16-le)))
785
786(defconst nxml-utf-coding-systems (cons 'utf-8 nxml-utf-16-coding-systems))
787
788(defun nxml-coding-system-unicode-p (coding-system)
789 (nxml-coding-system-member (coding-system-base coding-system)
790 nxml-utf-coding-systems))
791
792(defun nxml-coding-system-name (coding-system)
793 (setq coding-system (coding-system-base coding-system))
794 (symbol-name
795 (if (nxml-coding-system-member coding-system nxml-utf-16-coding-systems)
796 'utf-16
797 (or (coding-system-get coding-system 'mime-charset)
798 coding-system))))
799
800(defun nxml-fix-encoding-declaration (enc-pos coding-system)
801 (let ((charset (nxml-coding-system-name coding-system)))
802 (cond ((consp enc-pos)
803 (delete-region (car enc-pos) (cdr enc-pos))
804 (goto-char (car enc-pos))
805 (insert charset))
806 ((integerp enc-pos)
807 (goto-char enc-pos)
808 (insert " encoding=\"" charset ?\"))
809 (t
810 (goto-char (point-min))
811 (insert "<?xml version=\"1.0\" encoding=\""
812 charset
813 "\"?>\n")
814 (when (and (not enc-pos)
815 (let ((case-fold-search t))
816 (looking-at xmltok-bad-xml-decl-regexp)))
817 (delete-region (point) (match-end 0)))))))
818
819(defun nxml-choose-suitable-coding-system (suitable-coding-systems)
820 (let (ret coding-system)
821 (if (and buffer-file-coding-system
822 (memq (coding-system-base buffer-file-coding-system)
823 suitable-coding-systems))
824 buffer-file-coding-system
825 (while (and suitable-coding-systems (not ret))
826 (setq coding-system (car suitable-coding-systems))
827 (if (coding-system-get coding-system 'mime-charset)
828 (setq ret coding-system)
829 (setq suitable-coding-systems (cdr suitable-coding-systems))))
830 ret)))
831
832(defun nxml-choose-utf-coding-system ()
833 (let ((cur (and (local-variable-p 'buffer-file-coding-system)
834 buffer-file-coding-system
835 (coding-system-base buffer-file-coding-system))))
836 (cond ((car (nxml-coding-system-member cur nxml-utf-coding-systems)))
837 ((and nxml-prefer-utf-16-to-utf-8-flag
838 (coding-system-p 'utf-16-le)
839 (coding-system-p 'utf-16-be))
840 (if nxml-prefer-utf-16-little-to-big-endian-flag
841 'utf-16-le
842 'utf-16-be))
843 (t 'utf-8))))
844
845(defun nxml-choose-utf-16-coding-system ()
846 (let ((cur (and (local-variable-p 'buffer-file-coding-system)
847 buffer-file-coding-system
848 (coding-system-base buffer-file-coding-system))))
849 (cond ((car (nxml-coding-system-member cur nxml-utf-16-coding-systems)))
850 (nxml-prefer-utf-16-little-to-big-endian-flag
851 (and (coding-system-p 'utf-16-le) 'utf-16-le))
852 (t (and (coding-system-p 'utf-16-be) 'utf-16-be)))))
853
854(defun nxml-coding-system-member (coding-system coding-systems)
855 (let (ret)
856 (while (and coding-systems (not ret))
857 (if (coding-system-equal coding-system
858 (car coding-systems))
859 (setq ret coding-systems)
860 (setq coding-systems (cdr coding-systems))))
861 ret))
862
863;;; Fontification
864
865(defun nxml-fontify (start)
866 (condition-case err
867 (save-excursion
868 (save-restriction
869 (widen)
870 (save-match-data
871 (nxml-with-invisible-motion
872 (nxml-with-unmodifying-text-property-changes
873 (if (or nxml-degraded
874 ;; just in case we get called in the wrong buffer
875 (not nxml-prolog-end))
876 (nxml-set-fontified start (point-max))
877 (nxml-fontify1 start)))))))
878 (error
879 (nxml-degrade 'nxml-fontify err))))
880
881(defun nxml-fontify1 (start)
882 (cond ((< start nxml-prolog-end)
883 (nxml-fontify-prolog)
884 (nxml-set-fontified (point-min)
885 nxml-prolog-end))
886 (t
887 (goto-char start)
888 (when (not (eq nxml-last-fontify-end start))
889 (when (not (equal (char-after) ?\<))
890 (search-backward "<" nxml-prolog-end t))
891 (nxml-ensure-scan-up-to-date)
892 (nxml-move-outside-backwards))
893 (let ((start (point)))
894 (nxml-do-fontify (min (point-max)
895 (+ start nxml-fontify-chunk-size)))
896 (setq nxml-last-fontify-end (point))
897 (nxml-set-fontified start nxml-last-fontify-end)))))
898
899(defun nxml-fontify-buffer ()
900 (interactive)
901 (save-excursion
902 (save-restriction
903 (widen)
904 (nxml-with-invisible-motion
905 (goto-char (point-min))
906 (nxml-with-unmodifying-text-property-changes
907 (nxml-fontify-prolog)
908 (goto-char nxml-prolog-end)
909 (nxml-do-fontify))))))
910
911(defun nxml-fontify-prolog ()
912 "Fontify the prolog.
913The buffer is assumed to be prepared for fontification.
914This does not set the fontified property, but it does clear
915faces appropriately."
916 (let ((regions nxml-prolog-regions))
917 (nxml-clear-face (point-min) nxml-prolog-end)
918 (while regions
919 (let ((region (car regions)))
920 (nxml-apply-fontify-rule (aref region 0)
921 (aref region 1)
922 (aref region 2)))
923 (setq regions (cdr regions)))))
924
925(defun nxml-do-fontify (&optional bound)
926 "Fontify at least as far as bound.
927Leave point after last fontified position."
928 (unless bound (setq bound (point-max)))
929 (let (xmltok-dependent-regions
930 xmltok-errors)
931 (while (and (< (point) bound)
932 (nxml-tokenize-forward))
933 (nxml-clear-face xmltok-start (point))
934 (nxml-apply-fontify-rule))))
935
936;; Vectors identify a substring of the token to be highlighted in some face.
937
938;; Token types returned by xmltok-forward.
939
940(put 'start-tag
941 'nxml-fontify-rule
942 '([nil 1 nxml-tag-delimiter-face]
943 [-1 nil nxml-tag-delimiter-face]
944 (element-qname . 1)
945 attributes))
946
947(put 'partial-start-tag
948 'nxml-fontify-rule
949 '([nil 1 nxml-tag-delimiter-face]
950 (element-qname . 1)
951 attributes))
952
953(put 'end-tag
954 'nxml-fontify-rule
955 '([nil 1 nxml-tag-delimiter-face]
956 [1 2 nxml-tag-slash-face]
957 [-1 nil nxml-tag-delimiter-face]
958 (element-qname . 2)))
959
960(put 'partial-end-tag
961 'nxml-fontify-rule
962 '([nil 1 nxml-tag-delimiter-face]
963 [1 2 nxml-tag-slash-face]
964 (element-qname . 2)))
965
966(put 'empty-element
967 'nxml-fontify-rule
968 '([nil 1 nxml-tag-delimiter-face]
969 [-2 -1 nxml-tag-slash-face]
970 [-1 nil nxml-tag-delimiter-face]
971 (element-qname . 1)
972 attributes))
973
974(put 'partial-empty-element
975 'nxml-fontify-rule
976 '([nil 1 nxml-tag-delimiter-face]
977 [-1 nil nxml-tag-slash-face]
978 (element-qname . 1)
979 attributes))
980
981(put 'char-ref
982 'nxml-fontify-rule
983 '([nil 2 nxml-char-ref-delimiter-face]
984 [2 -1 nxml-char-ref-number-face]
985 [-1 nil nxml-char-ref-delimiter-face]
986 char-ref))
987
988(put 'entity-ref
989 'nxml-fontify-rule
990 '([nil 1 nxml-entity-ref-delimiter-face]
991 [1 -1 nxml-entity-ref-name-face]
992 [-1 nil nxml-entity-ref-delimiter-face]))
993
994(put 'comment
995 'nxml-fontify-rule
996 '([nil 4 nxml-comment-delimiter-face]
997 [4 -3 nxml-comment-content-face]
998 [-3 nil nxml-comment-delimiter-face]))
999
1000(put 'processing-instruction
1001 'nxml-fontify-rule
1002 '([nil 2 nxml-processing-instruction-delimiter-face]
1003 [-2 nil nxml-processing-instruction-delimiter-face]
1004 processing-instruction-content))
1005
1006(put 'cdata-section
1007 'nxml-fontify-rule
1008 '([nil 3 nxml-cdata-section-delimiter-face] ; <![
1009 [3 8 nxml-cdata-section-CDATA-face] ; CDATA
1010 [8 9 nxml-cdata-section-delimiter-face] ; [
1011 [9 -3 nxml-cdata-section-content-face] ; ]]>
1012 [-3 nil nxml-cdata-section-delimiter-face]))
1013
1014(put 'data
1015 'nxml-fontify-rule
1016 '([nil nil nxml-text-face]))
1017
1018;; Prolog region types in list returned by xmltok-forward-prolog.
1019
1020(put 'xml-declaration
1021 'nxml-fontify-rule
1022 '([nil 2 nxml-processing-instruction-delimiter-face]
1023 [2 5 nxml-processing-instruction-target-face]
1024 [-2 nil nxml-processing-instruction-delimiter-face]))
1025
1026(put 'xml-declaration-attribute-name
1027 'nxml-fontify-rule
1028 '([nil nil nxml-attribute-local-name-face]))
1029
1030(put 'xml-declaration-attribute-value
1031 'nxml-fontify-rule
1032 '([nil 1 nxml-attribute-value-delimiter-face]
1033 [1 -1 nxml-attribute-value-face]
1034 [-1 nil nxml-attribute-value-delimiter-face]))
1035
1036(put 'processing-instruction-left
1037 'nxml-fontify-rule
1038 '([nil 2 nxml-processing-instruction-delimiter-face]
1039 [2 nil nxml-processing-instruction-target-face]))
1040
1041(put 'processing-instruction-right
1042 'nxml-fontify-rule
1043 '([nil -2 nxml-processing-instruction-content-face]
1044 [-2 nil nxml-processing-instruction-delimiter-face]))
1045
1046(put 'literal
1047 'nxml-fontify-rule
1048 '([nil 1 nxml-prolog-literal-delimiter-face]
1049 [1 -1 nxml-prolog-literal-content-face]
1050 [-1 nil nxml-prolog-literal-delimiter-face]))
1051
1052(put 'keyword
1053 'nxml-fontify-rule
1054 '([nil nil nxml-prolog-keyword-face]))
1055
1056(put 'markup-declaration-open
1057 'nxml-fontify-rule
1058 '([0 2 nxml-markup-declaration-delimiter-face]
1059 [2 nil nxml-prolog-keyword-face]))
1060
1061(put 'markup-declaration-close
1062 'nxml-fontify-rule
1063 '([nil nil nxml-markup-declaration-delimiter-face]))
1064
1065(put 'internal-subset-open
1066 'nxml-fontify-rule
1067 '([nil nil nxml-markup-declaration-delimiter-face]))
1068
1069(put 'internal-subset-close
1070 'nxml-fontify-rule
1071 '([nil 1 nxml-markup-declaration-delimiter-face]
1072 [-1 nil nxml-markup-declaration-delimiter-face]))
1073
1074(put 'hash-name
1075 'nxml-fontify-rule
1076 '([nil 1 nxml-hash-face]
1077 [1 nil nxml-prolog-keyword-face]))
1078
1079(defun nxml-apply-fontify-rule (&optional type start end)
1080 (let ((rule (get (or type xmltok-type) 'nxml-fontify-rule)))
1081 (unless start (setq start xmltok-start))
1082 (unless end (setq end (point)))
1083 (while rule
1084 (let* ((action (car rule)))
1085 (setq rule (cdr rule))
1086 (cond ((vectorp action)
1087 (nxml-set-face (let ((offset (aref action 0)))
1088 (cond ((not offset) start)
1089 ((< offset 0) (+ end offset))
1090 (t (+ start offset))))
1091 (let ((offset (aref action 1)))
1092 (cond ((not offset) end)
1093 ((< offset 0) (+ end offset))
1094 (t (+ start offset))))
1095 (aref action 2)))
1096 ((and (consp action)
1097 (eq (car action) 'element-qname))
1098 (when xmltok-name-end ; maybe nil in partial-end-tag case
1099 (nxml-fontify-qname (+ start (cdr action))
1100 xmltok-name-colon
1101 xmltok-name-end
1102 'nxml-element-prefix-face
1103 'nxml-element-colon-face
1104 'nxml-element-local-name-face)))
1105 ((eq action 'attributes)
1106 (nxml-fontify-attributes))
1107 ((eq action 'processing-instruction-content)
1108 (nxml-set-face (+ start 2)
1109 xmltok-name-end
1110 'nxml-processing-instruction-target-face)
1111 (nxml-set-face (save-excursion
1112 (goto-char xmltok-name-end)
1113 (skip-chars-forward " \t\r\n")
1114 (point))
1115 (- end 2)
1116 'nxml-processing-instruction-content-face))
1117 ((eq action 'char-ref)
1118 (nxml-char-ref-display-extra start
1119 end
1120 (xmltok-char-number start end)))
1121 (t (error "Invalid nxml-fontify-rule action %s" action)))))))
1122
1123(defun nxml-fontify-attributes ()
1124 (while xmltok-namespace-attributes
1125 (nxml-fontify-attribute (car xmltok-namespace-attributes)
1126 'namespace)
1127 (setq xmltok-namespace-attributes
1128 (cdr xmltok-namespace-attributes)))
1129 (while xmltok-attributes
1130 (nxml-fontify-attribute (car xmltok-attributes))
1131 (setq xmltok-attributes
1132 (cdr xmltok-attributes))))
1133
1134(defun nxml-fontify-attribute (att &optional namespace-declaration)
1135 (if namespace-declaration
1136 (nxml-fontify-qname (xmltok-attribute-name-start att)
1137 (xmltok-attribute-name-colon att)
1138 (xmltok-attribute-name-end att)
1139 'nxml-namespace-attribute-xmlns-face
1140 'nxml-namespace-attribute-colon-face
1141 'nxml-namespace-attribute-prefix-face
1142 'nxml-namespace-attribute-xmlns-face)
1143 (nxml-fontify-qname (xmltok-attribute-name-start att)
1144 (xmltok-attribute-name-colon att)
1145 (xmltok-attribute-name-end att)
1146 'nxml-attribute-prefix-face
1147 'nxml-attribute-colon-face
1148 'nxml-attribute-local-name-face))
1149 (let ((start (xmltok-attribute-value-start att))
1150 (end (xmltok-attribute-value-end att))
1151 (refs (xmltok-attribute-refs att))
1152 (delimiter-face (if namespace-declaration
1153 'nxml-namespace-attribute-value-delimiter-face
1154 'nxml-attribute-value-delimiter-face))
1155 (value-face (if namespace-declaration
1156 'nxml-namespace-attribute-value-face
1157 'nxml-attribute-value-face)))
1158 (when start
1159 (nxml-set-face (1- start) start delimiter-face)
1160 (nxml-set-face end (1+ end) delimiter-face)
1161 (while refs
1162 (let* ((ref (car refs))
1163 (ref-type (aref ref 0))
1164 (ref-start (aref ref 1))
1165 (ref-end (aref ref 2)))
1166 (nxml-set-face start ref-start value-face)
1167 (nxml-apply-fontify-rule ref-type ref-start ref-end)
1168 (setq start ref-end))
1169 (setq refs (cdr refs)))
1170 (nxml-set-face start end value-face))))
1171
1172(defun nxml-fontify-qname (start
1173 colon
1174 end
1175 prefix-face
1176 colon-face
1177 local-name-face
1178 &optional
1179 unprefixed-face)
1180 (cond (colon (nxml-set-face start colon prefix-face)
1181 (nxml-set-face colon (1+ colon) colon-face)
1182 (nxml-set-face (1+ colon) end local-name-face))
1183 (t (nxml-set-face start end (or unprefixed-face
1184 local-name-face)))))
1185
1186;;; Editing
1187
1188(defun nxml-electric-slash (arg)
1189 "Insert a slash.
1190
1191With a prefix ARG, do nothing other than insert the slash.
1192
1193Otherwise, if `nxml-slash-auto-complete-flag' is non-nil, insert the
1194rest of the end-tag or empty-element if the slash is potentially part
1195of an end-tag or the close of an empty-element.
1196
1197If the slash is part of an end-tag that is the first non-whitespace
1198on the line, reindent the line."
1199 (interactive "*P")
1200 (nxml-ensure-scan-up-to-date)
1201 (let* ((slash-pos (point))
1202 (end-tag-p (and (eq (char-before slash-pos) ?<)
1203 (not (nxml-get-inside slash-pos))))
1204 (at-indentation (save-excursion
1205 (back-to-indentation)
1206 (eq (point) (1- slash-pos)))))
1207 (self-insert-command (prefix-numeric-value arg))
1208 (unless arg
1209 (if nxml-slash-auto-complete-flag
1210 (if end-tag-p
1211 (condition-case err
1212 (let ((start-tag-end
1213 (nxml-scan-element-backward (1- slash-pos) t)))
1214 (when start-tag-end
1215 (insert (xmltok-start-tag-qname) ">")
1216 ;; copy the indentation of the start-tag
1217 (when (and at-indentation
1218 (save-excursion
1219 (goto-char xmltok-start)
1220 (back-to-indentation)
1221 (eq (point) xmltok-start)))
1222 (save-excursion
1223 (indent-line-to (save-excursion
1224 (goto-char xmltok-start)
1225 (current-column)))))))
1226 (nxml-scan-error nil))
1227 (when (and (eq (nxml-token-before) (point))
1228 (eq xmltok-type 'partial-empty-element))
1229 (insert ">")))
1230 (when (and end-tag-p at-indentation)
1231 (nxml-indent-line))))))
1232
1233(defun nxml-balanced-close-start-tag-block ()
1234 "Close the start-tag before point with `>' and insert a balancing end-tag.
1235Point is left between the start-tag and the end-tag.
1236If there is nothing but whitespace before the `<' that opens the
1237start-tag, then put point on a blank line, and put the end-tag on
1238another line aligned with the start-tag."
1239 (interactive "*")
1240 (nxml-balanced-close-start-tag 'block))
1241
1242(defun nxml-balanced-close-start-tag-inline ()
1243 "Close the start-tag before point with `>' and insert a balancing end-tag.
1244Point is left between the start-tag and the end-tag.
1245No extra whitespace is inserted."
1246 (interactive "*")
1247 (nxml-balanced-close-start-tag 'inline))
1248
1249(defun nxml-balanced-close-start-tag (block-or-inline)
1250 (let ((token-end (nxml-token-before))
1251 (pos (1+ (point))))
1252 (unless (or (eq xmltok-type 'partial-start-tag)
1253 (and (memq xmltok-type '(start-tag
1254 empty-element
1255 partial-empty-element))
1256 (>= token-end pos)))
1257 (error "Not in a start-tag"))
1258 (insert "></"
1259 (buffer-substring-no-properties (+ xmltok-start 1)
1260 (min xmltok-name-end (point)))
1261 ">")
1262 (if (eq block-or-inline 'inline)
1263 (goto-char pos)
1264 (goto-char xmltok-start)
1265 (back-to-indentation)
1266 (if (= (point) xmltok-start)
1267 (let ((indent (current-column)))
1268 (goto-char pos)
1269 (insert "\n")
1270 (indent-line-to indent)
1271 (goto-char pos)
1272 (insert "\n")
1273 (indent-line-to (+ nxml-child-indent indent)))
1274 (goto-char pos)))))
1275
1276(defun nxml-finish-element ()
1277 "Finish the current element by inserting an end-tag."
1278 (interactive "*")
1279 (nxml-finish-element-1 nil))
1280
1281(defvar nxml-last-split-position nil
1282 "Position where `nxml-split-element' split the current element.")
1283
1284(defun nxml-split-element ()
1285 "Split the current element by inserting an end-tag and a start-tag.
1286Point is left after the newly inserted start-tag. When repeated,
1287split immediately before the previously inserted start-tag and leave
1288point unchanged."
1289 (interactive "*")
1290 (setq nxml-last-split-position
1291 (if (and (eq last-command this-command)
1292 nxml-last-split-position)
1293 (save-excursion
1294 (goto-char nxml-last-split-position)
1295 (nxml-finish-element-1 t))
1296 (nxml-finish-element-1 t))))
1297
1298(defun nxml-finish-element-1 (startp)
1299 "Insert an end-tag for the current element and optionally a start-tag.
1300The start-tag is inserted if STARTP is non-nil. Return the position
1301of the inserted start-tag or nil if none was inserted."
1302 (interactive "*")
1303 (let* ((token-end (nxml-token-before))
1304 (start-tag-end
1305 (save-excursion
1306 (when (and (< (point) token-end)
1307 (memq xmltok-type
1308 '(cdata-section
1309 processing-instruction
1310 comment
1311 start-tag
1312 end-tag
1313 empty-element)))
1314 (error "Point is inside a %s"
1315 (nxml-token-type-friendly-name xmltok-type)))
1316 (nxml-scan-element-backward token-end t)))
1317 (starts-line
1318 (save-excursion
1319 (unless (eq xmltok-type 'start-tag)
1320 (error "No matching start-tag"))
1321 (goto-char xmltok-start)
1322 (back-to-indentation)
1323 (eq (point) xmltok-start)))
1324 (ends-line
1325 (save-excursion
1326 (goto-char start-tag-end)
1327 (looking-at "[ \t\r\n]*$")))
1328 (start-tag-indent (save-excursion
1329 (goto-char xmltok-start)
1330 (current-column)))
1331 (qname (xmltok-start-tag-qname))
1332 inserted-start-tag-pos)
1333 (when (and starts-line ends-line)
1334 ;; start-tag is on a line by itself
1335 ;; => put the end-tag on a line by itself
1336 (unless (<= (point)
1337 (save-excursion
1338 (back-to-indentation)
1339 (point)))
1340 (insert "\n"))
1341 (indent-line-to start-tag-indent))
1342 (insert "</" qname ">")
1343 (when startp
1344 (when starts-line
1345 (insert "\n")
1346 (indent-line-to start-tag-indent))
1347 (setq inserted-start-tag-pos (point))
1348 (insert "<" qname ">")
1349 (when (and starts-line ends-line)
1350 (insert "\n")
1351 (indent-line-to (save-excursion
1352 (goto-char xmltok-start)
1353 (forward-line 1)
1354 (back-to-indentation)
1355 (if (= (current-column)
1356 (+ start-tag-indent nxml-child-indent))
1357 (+ start-tag-indent nxml-child-indent)
1358 start-tag-indent)))))
1359 inserted-start-tag-pos))
1360
1361;;; Indentation
1362
1363(defun nxml-indent-line ()
1364 "Indent current line as XML."
1365 (let ((indent (nxml-compute-indent))
1366 (from-end (- (point-max) (point))))
1367 (when indent
1368 (beginning-of-line)
1369 (let ((bol (point)))
1370 (skip-chars-forward " \t")
1371 (delete-region bol (point)))
1372 (indent-to indent)
1373 (when (> (- (point-max) from-end) (point))
1374 (goto-char (- (point-max) from-end))))))
1375
1376(defun nxml-compute-indent ()
1377 "Return the indent for the line containing point."
1378 (or (nxml-compute-indent-from-matching-start-tag)
1379 (nxml-compute-indent-from-previous-line)))
1380
1381(defun nxml-compute-indent-from-matching-start-tag ()
1382 "Compute the indent for a line with an end-tag using the matching start-tag.
1383When the line containing point ends with an end-tag and does not start
1384in the middle of a token, return the indent of the line containing the
1385matching start-tag, if there is one and it occurs at the beginning of
1386its line. Otherwise return nil."
1387 (save-excursion
1388 (back-to-indentation)
1389 (let ((bol (point)))
1390 (let ((inhibit-field-text-motion t))
1391 (end-of-line))
1392 (skip-chars-backward " \t")
1393 (and (= (nxml-token-before) (point))
1394 (memq xmltok-type '(end-tag partial-end-tag))
1395 ;; start of line must not be inside a token
1396 (or (= xmltok-start bol)
1397 (save-excursion
1398 (goto-char bol)
1399 (nxml-token-after)
1400 (= xmltok-start bol))
1401 (eq xmltok-type 'data))
1402 (condition-case err
1403 (nxml-scan-element-backward
1404 (point)
1405 nil
1406 (- (point)
1407 nxml-end-tag-indent-scan-distance))
1408 (nxml-scan-error nil))
1409 (< xmltok-start bol)
1410 (progn
1411 (goto-char xmltok-start)
1412 (skip-chars-backward " \t")
1413 (bolp))
1414 (current-indentation)))))
1415
1416(defun nxml-compute-indent-from-previous-line ()
1417 "Compute the indent for a line using the indentation of a previous line."
1418 (save-excursion
1419 (end-of-line)
1420 (let ((eol (point))
1421 bol prev-bol ref
1422 before-context after-context)
1423 (back-to-indentation)
1424 (setq bol (point))
1425 (catch 'indent
1426 ;; Move backwards until the start of a non-blank line that is
1427 ;; not inside a token.
1428 (while (progn
1429 (when (= (forward-line -1) -1)
1430 (throw 'indent 0))
1431 (back-to-indentation)
1432 (if (looking-at "[ \t]*$")
1433 t
1434 (or prev-bol
1435 (setq prev-bol (point)))
1436 (nxml-token-after)
1437 (not (or (= xmltok-start (point))
1438 (eq xmltok-type 'data))))))
1439 (setq ref (point))
1440 ;; Now scan over tokens until the end of the line to be indented.
1441 ;; Determine the context before and after the beginning of the
1442 ;; line.
1443 (while (< (point) eol)
1444 (nxml-tokenize-forward)
1445 (cond ((<= bol xmltok-start)
1446 (setq after-context
1447 (nxml-merge-indent-context-type after-context)))
1448 ((and (<= (point) bol)
1449 (not (and (eq xmltok-type 'partial-start-tag)
1450 (= (point) bol))))
1451 (setq before-context
1452 (nxml-merge-indent-context-type before-context)))
1453 ((eq xmltok-type 'data)
1454 (setq before-context
1455 (nxml-merge-indent-context-type before-context))
1456 (setq after-context
1457 (nxml-merge-indent-context-type after-context)))
1458 ;; If in the middle of a token that looks inline,
1459 ;; then indent relative to the previous non-blank line
1460 ((eq (nxml-merge-indent-context-type before-context)
1461 'mixed)
1462 (goto-char prev-bol)
1463 (throw 'indent (current-column)))
1464 (t
1465 (throw 'indent
1466 (nxml-compute-indent-in-token bol))))
1467 (skip-chars-forward " \t\r\n"))
1468 (goto-char ref)
1469 (+ (current-column)
1470 (* nxml-child-indent
1471 (+ (if (eq before-context 'start-tag) 1 0)
1472 (if (eq after-context 'end-tag) -1 0))))))))
1473
1474(defun nxml-merge-indent-context-type (context)
1475 "Merge the indent context type CONTEXT with the token in `xmltok-type'.
1476Return the merged indent context type. An indent context type is
1477either nil or one of the symbols start-tag, end-tag, markup, comment,
1478mixed."
1479 (cond ((memq xmltok-type '(start-tag partial-start-tag))
1480 (if (memq context '(nil start-tag comment))
1481 'start-tag
1482 'mixed))
1483 ((memq xmltok-type '(end-tag partial-end-tag))
1484 (if (memq context '(nil end-tag comment))
1485 'end-tag
1486 'mixed))
1487 ((eq xmltok-type 'comment)
1488 (cond ((memq context '(start-tag end-tag comment))
1489 context)
1490 (context 'mixed)
1491 (t 'comment)))
1492 (context 'mixed)
1493 (t 'markup)))
1494
1495(defun nxml-compute-indent-in-token (pos)
1496 "Return the indent for a line that starts inside a token.
1497POS is the position of the first non-whitespace character of the line.
1498This expects the xmltok-* variables to be set up as by `xmltok-forward'."
1499 (cond ((memq xmltok-type '(start-tag
1500 partial-start-tag
1501 empty-element
1502 partial-empty-element))
1503 (nxml-compute-indent-in-start-tag pos))
1504 ((eq xmltok-type 'comment)
1505 (nxml-compute-indent-in-delimited-token pos "<!--" "-->"))
1506 ((eq xmltok-type 'cdata-section)
1507 (nxml-compute-indent-in-delimited-token pos "<![CDATA[" "]]>"))
1508 ((eq xmltok-type 'processing-instruction)
1509 (nxml-compute-indent-in-delimited-token pos "<?" "?>"))
1510 (t
1511 (goto-char pos)
1512 (if (and (= (forward-line -1) 0)
1513 (< xmltok-start (point)))
1514 (back-to-indentation)
1515 (goto-char xmltok-start))
1516 (current-column))))
1517
1518(defun nxml-compute-indent-in-start-tag (pos)
1519 "Return the indent for a line that starts inside a start-tag.
1520Also for a line that starts inside an empty element.
1521POS is the position of the first non-whitespace character of the line.
1522This expects the xmltok-* variables to be set up as by `xmltok-forward'."
1523 (let ((value-boundary (nxml-attribute-value-boundary pos))
1524 (off 0))
1525 (if value-boundary
1526 ;; inside an attribute value
1527 (let ((value-start (car value-boundary))
1528 (value-end (cdr value-boundary)))
1529 (goto-char pos)
1530 (forward-line -1)
1531 (if (< (point) value-start)
1532 (goto-char value-start)
1533 (back-to-indentation)))
1534 ;; outside an attribute value
1535 (goto-char pos)
1536 (while (and (= (forward-line -1) 0)
1537 (nxml-attribute-value-boundary (point))))
1538 (cond ((<= (point) xmltok-start)
1539 (goto-char xmltok-start)
1540 (setq off nxml-attribute-indent)
1541 (let ((atts (xmltok-merge-attributes)))
1542 (when atts
1543 (let* ((att (car atts))
1544 (start (xmltok-attribute-name-start att)))
1545 (when (< start pos)
1546 (goto-char start)
1547 (setq off 0))))))
1548 (t
1549 (back-to-indentation))))
1550 (+ (current-column) off)))
1551
1552(defun nxml-attribute-value-boundary (pos)
1553 "Return a pair (START . END) if POS is inside an attribute value.
1554Otherwise return nil. START and END are the positions of the start
1555and end of the attribute value containing POS. This expects the
1556xmltok-* variables to be set up as by `xmltok-forward'."
1557 (let ((atts (xmltok-merge-attributes))
1558 att value-start value-end value-boundary)
1559 (while atts
1560 (setq att (car atts))
1561 (setq value-start (xmltok-attribute-value-start att))
1562 (setq value-end (xmltok-attribute-value-end att))
1563 (cond ((and value-start (< pos value-start))
1564 (setq atts nil))
1565 ((and value-start value-end (<= pos value-end))
1566 (setq value-boundary (cons value-start value-end))
1567 (setq atts nil))
1568 (t (setq atts (cdr atts)))))
1569 value-boundary))
1570
1571(defun nxml-compute-indent-in-delimited-token (pos open-delim close-delim)
1572 "Return the indent for a line that starts inside a token with delimiters.
1573OPEN-DELIM and CLOSE-DELIM are strings giving the opening and closing
1574delimiters. POS is the position of the first non-whitespace character
1575of the line. This expects the xmltok-* variables to be set up as by
1576`xmltok-forward'."
1577 (cond ((let ((end (+ pos (length close-delim))))
1578 (and (<= end (point-max))
1579 (string= (buffer-substring-no-properties pos end)
1580 close-delim)))
1581 (goto-char xmltok-start))
1582 ((progn
1583 (goto-char pos)
1584 (forward-line -1)
1585 (<= (point) xmltok-start))
1586 (goto-char (+ xmltok-start (length open-delim)))
1587 (when (and (string= open-delim "<!--")
1588 (looking-at " "))
1589 (goto-char (1+ (point)))))
1590 (t (back-to-indentation)))
1591 (current-column))
1592
1593;;; Completion
1594
1595(defun nxml-complete ()
1596 "Perform completion on the symbol preceding point.
1597
1598Inserts as many characters as can be completed. However, if not even
1599one character can be completed, then a buffer with the possibilities
1600is popped up and the symbol is read from the minibuffer with
1601completion. If the symbol is complete, then any characters that must
1602follow the symbol are also inserted.
1603
1604The name space used for completion and what is treated as a symbol
1605depends on the context. The contexts in which completion is performed
1606depend on `nxml-completion-hook'."
1607 (interactive)
1608 (unless (run-hook-with-args-until-success 'nxml-completion-hook)
1609 ;; Eventually we will complete on entity names here.
1610 (ding)
1611 (message "Cannot complete in this context")))
1612
1613;;; Movement
1614
1615(defun nxml-forward-balanced-item (&optional arg)
1616 "Move forward across one balanced item.
1617With ARG, do it that many times. Negative arg -N means
1618move backward across N balanced expressions.
1619This is the equivalent of `forward-sexp' for XML.
1620
1621An element contains as items strings with no markup, tags, processing
1622instructions, comments, CDATA sections, entity references and
1623characters references. However, if the variable
1624`nxml-sexp-element-flag' is non-nil, then an element is treated as a
1625single markup item. A start-tag contains an element name followed by
1626one or more attributes. An end-tag contains just an element name. An
1627attribute value literals contains strings with no markup, entity
1628references and character references. A processing instruction
1629consists of a target and a content string. A comment or a CDATA
1630section contains a single string. An entity reference contains a
1631single name. A character reference contains a character number."
1632 (interactive "p")
1633 (or arg (setq arg 1))
1634 (cond ((> arg 0)
1635 (while (progn
1636 (nxml-forward-single-balanced-item)
1637 (> (setq arg (1- arg)) 0))))
1638 ((< arg 0)
1639 (while (progn
1640 (nxml-backward-single-balanced-item)
1641 (< (setq arg (1+ arg)) 0))))))
1642
1643(defun nxml-forward-single-balanced-item ()
1644 (condition-case err
1645 (goto-char (let ((end (nxml-token-after)))
1646 (save-excursion
1647 (while (eq xmltok-type 'space)
1648 (goto-char end)
1649 (setq end (nxml-token-after)))
1650 (cond ((/= (point) xmltok-start)
1651 (nxml-scan-forward-within end))
1652 ((and nxml-sexp-element-flag
1653 (eq xmltok-type 'start-tag))
1654 ;; can't ever return nil here
1655 (nxml-scan-element-forward xmltok-start))
1656 ((and nxml-sexp-element-flag
1657 (memq xmltok-type
1658 '(end-tag partial-end-tag)))
1659 (error "Already at end of element"))
1660 (t end)))))
1661 (nxml-scan-error
1662 (goto-char (cadr err))
1663 (apply 'error (cddr err)))))
1664
1665(defun nxml-backward-single-balanced-item ()
1666 (condition-case err
1667 (goto-char (let ((end (nxml-token-before)))
1668 (save-excursion
1669 (while (eq xmltok-type 'space)
1670 (goto-char xmltok-start)
1671 (setq end (nxml-token-before)))
1672 (cond ((/= (point) end)
1673 (nxml-scan-backward-within end))
1674 ((and nxml-sexp-element-flag
1675 (eq xmltok-type 'end-tag))
1676 ;; can't ever return nil here
1677 (nxml-scan-element-backward end)
1678 xmltok-start)
1679 ((and nxml-sexp-element-flag
1680 (eq xmltok-type 'start-tag))
1681 (error "Already at start of element"))
1682 (t xmltok-start)))))
1683 (nxml-scan-error
1684 (goto-char (cadr err))
1685 (apply 'error (cddr err)))))
1686
1687(defun nxml-scan-forward-within (end)
1688 (setq end (- end (nxml-end-delimiter-length xmltok-type)))
1689 (when (<= end (point))
1690 (error "Already at end of %s"
1691 (nxml-token-type-friendly-name xmltok-type)))
1692 (cond ((memq xmltok-type '(start-tag
1693 empty-element
1694 partial-start-tag
1695 partial-empty-element))
1696 (if (< (point) xmltok-name-end)
1697 xmltok-name-end
1698 (let ((att (nxml-find-following-attribute)))
1699 (cond ((not att) end)
1700 ((and (xmltok-attribute-value-start att)
1701 (<= (xmltok-attribute-value-start att)
1702 (point)))
1703 (nxml-scan-forward-in-attribute-value att))
1704 ((xmltok-attribute-value-end att)
1705 (1+ (xmltok-attribute-value-end att)))
1706 ((save-excursion
1707 (goto-char (xmltok-attribute-name-end att))
1708 (looking-at "[ \t\r\n]*="))
1709 (match-end 0))
1710 (t (xmltok-attribute-name-end att))))))
1711 ((and (eq xmltok-type 'processing-instruction)
1712 (< (point) xmltok-name-end))
1713 xmltok-name-end)
1714 (t end)))
1715
1716(defun nxml-scan-backward-within (end)
1717 (setq xmltok-start
1718 (+ xmltok-start
1719 (nxml-start-delimiter-length xmltok-type)))
1720 (when (<= (point) xmltok-start)
1721 (error "Already at start of %s"
1722 (nxml-token-type-friendly-name xmltok-type)))
1723 (cond ((memq xmltok-type '(start-tag
1724 empty-element
1725 partial-start-tag
1726 partial-empty-element))
1727 (let ((att (nxml-find-preceding-attribute)))
1728 (cond ((not att) xmltok-start)
1729 ((and (xmltok-attribute-value-start att)
1730 (<= (xmltok-attribute-value-start att)
1731 (point))
1732 (<= (point)
1733 (xmltok-attribute-value-end att)))
1734 (nxml-scan-backward-in-attribute-value att))
1735 (t (xmltok-attribute-name-start att)))))
1736 ((and (eq xmltok-type 'processing-instruction)
1737 (let ((content-start (save-excursion
1738 (goto-char xmltok-name-end)
1739 (skip-chars-forward " \r\t\n")
1740 (point))))
1741 (and (< content-start (point))
1742 content-start))))
1743 (t xmltok-start)))
1744
1745(defun nxml-scan-forward-in-attribute-value (att)
1746 (when (= (point) (xmltok-attribute-value-end att))
1747 (error "Already at end of attribute value"))
1748 (let ((refs (xmltok-attribute-refs att))
1749 ref)
1750 (while refs
1751 (setq ref (car refs))
1752 (if (< (point) (aref ref 2))
1753 (setq refs nil)
1754 (setq ref nil)
1755 (setq refs (cdr refs))))
1756 (cond ((not ref)
1757 (xmltok-attribute-value-end att))
1758 ((< (point) (aref ref 1))
1759 (aref ref 1))
1760 ((= (point) (aref ref 1))
1761 (aref ref 2))
1762 (t
1763 (let ((end (- (aref ref 2)
1764 (nxml-end-delimiter-length (aref ref 0)))))
1765 (if (< (point) end)
1766 end
1767 (error "Already at end of %s"
1768 (nxml-token-type-friendly-name (aref ref 0)))))))))
1769
1770(defun nxml-scan-backward-in-attribute-value (att)
1771 (when (= (point) (xmltok-attribute-value-start att))
1772 (error "Already at start of attribute value"))
1773 (let ((refs (reverse (xmltok-attribute-refs att)))
1774 ref)
1775 (while refs
1776 (setq ref (car refs))
1777 (if (< (aref ref 1) (point))
1778 (setq refs nil)
1779 (setq ref nil)
1780 (setq refs (cdr refs))))
1781 (cond ((not ref)
1782 (xmltok-attribute-value-start att))
1783 ((< (aref ref 2) (point))
1784 (aref ref 2))
1785 ((= (point) (aref ref 2))
1786 (aref ref 1))
1787 (t
1788 (let ((start (+ (aref ref 1)
1789 (nxml-start-delimiter-length (aref ref 0)))))
1790 (if (< start (point))
1791 start
1792 (error "Already at start of %s"
1793 (nxml-token-type-friendly-name (aref ref 0)))))))))
1794
1795(defun nxml-find-following-attribute ()
1796 (let ((ret nil)
1797 (atts (or xmltok-attributes xmltok-namespace-attributes))
1798 (more-atts (and xmltok-attributes xmltok-namespace-attributes)))
1799 (while atts
1800 (let* ((att (car atts))
1801 (name-start (xmltok-attribute-name-start att)))
1802 (cond ((and (<= name-start (point))
1803 (xmltok-attribute-value-end att)
1804 ;; <= because end is before quote
1805 (<= (point) (xmltok-attribute-value-end att)))
1806 (setq atts nil)
1807 (setq ret att))
1808 ((and (< (point) name-start)
1809 (or (not ret)
1810 (< name-start
1811 (xmltok-attribute-name-start ret))))
1812 (setq ret att))))
1813 (setq atts (cdr atts))
1814 (unless atts
1815 (setq atts more-atts)
1816 (setq more-atts nil)))
1817 ret))
1818
1819(defun nxml-find-preceding-attribute ()
1820 (let ((ret nil)
1821 (atts (or xmltok-attributes xmltok-namespace-attributes))
1822 (more-atts (and xmltok-attributes xmltok-namespace-attributes)))
1823 (while atts
1824 (let* ((att (car atts))
1825 (name-start (xmltok-attribute-name-start att)))
1826 (cond ((and (< name-start (point))
1827 (xmltok-attribute-value-end att)
1828 ;; <= because end is before quote
1829 (<= (point) (xmltok-attribute-value-end att)))
1830 (setq atts nil)
1831 (setq ret att))
1832 ((and (< name-start (point))
1833 (or (not ret)
1834 (< (xmltok-attribute-name-start ret)
1835 name-start)))
1836 (setq ret att))))
1837 (setq atts (cdr atts))
1838 (unless atts
1839 (setq atts more-atts)
1840 (setq more-atts nil)))
1841 ret))
1842
1843(defun nxml-up-element (&optional arg)
1844 (interactive "p")
1845 (or arg (setq arg 1))
1846 (if (< arg 0)
1847 (nxml-backward-up-element (- arg))
1848 (condition-case err
1849 (while (and (> arg 0)
1850 (< (point) (point-max)))
1851 (let ((token-end (nxml-token-after)))
1852 (goto-char (cond ((or (memq xmltok-type '(end-tag
1853 partial-end-tag))
1854 (and (memq xmltok-type
1855 '(empty-element
1856 partial-empty-element))
1857 (< xmltok-start (point))))
1858 token-end)
1859 ((nxml-scan-element-forward
1860 (if (and (eq xmltok-type 'start-tag)
1861 (= (point) xmltok-start))
1862 xmltok-start
1863 token-end)
1864 t))
1865 (t (error "No parent element")))))
1866 (setq arg (1- arg)))
1867 (nxml-scan-error
1868 (goto-char (cadr err))
1869 (apply 'error (cddr err))))))
1870
1871(defun nxml-backward-up-element (&optional arg)
1872 (interactive "p")
1873 (or arg (setq arg 1))
1874 (if (< arg 0)
1875 (nxml-up-element (- arg))
1876 (condition-case err
1877 (while (and (> arg 0)
1878 (< (point-min) (point)))
1879 (let ((token-end (nxml-token-before)))
1880 (goto-char (cond ((or (memq xmltok-type '(start-tag
1881 partial-start-tag))
1882 (and (memq xmltok-type
1883 '(empty-element
1884 partial-empty-element))
1885 (< (point) token-end)))
1886 xmltok-start)
1887 ((nxml-scan-element-backward
1888 (if (and (eq xmltok-type 'end-tag)
1889 (= (point) token-end))
1890 token-end
1891 xmltok-start)
1892 t)
1893 xmltok-start)
1894 (t (error "No parent element")))))
1895 (setq arg (1- arg)))
1896 (nxml-scan-error
1897 (goto-char (cadr err))
1898 (apply 'error (cddr err))))))
1899
1900(defun nxml-down-element (&optional arg)
1901 "Move forward down into the content of an element.
1902With ARG, do this that many times.
1903Negative ARG means move backward but still down."
1904 (interactive "p")
1905 (or arg (setq arg 1))
1906 (if (< arg 0)
1907 (nxml-backward-down-element (- arg))
1908 (while (> arg 0)
1909 (goto-char
1910 (let ((token-end (nxml-token-after)))
1911 (save-excursion
1912 (goto-char token-end)
1913 (while (progn
1914 (when (memq xmltok-type '(nil end-tag partial-end-tag))
1915 (error "No following start-tags in this element"))
1916 (not (memq xmltok-type '(start-tag partial-start-tag))))
1917 (nxml-tokenize-forward))
1918 (point))))
1919 (setq arg (1- arg)))))
1920
1921(defun nxml-backward-down-element (&optional arg)
1922 (interactive "p")
1923 (or arg (setq arg 1))
1924 (if (< arg 0)
1925 (nxml-down-element (- arg))
1926 (while (> arg 0)
1927 (goto-char
1928 (save-excursion
1929 (nxml-token-before)
1930 (goto-char xmltok-start)
1931 (while (progn
1932 (when (memq xmltok-type '(start-tag
1933 partial-start-tag
1934 prolog
1935 nil))
1936 (error "No preceding end-tags in this element"))
1937 (not (memq xmltok-type '(end-tag partial-end-tag))))
1938 (if (or (<= (point) nxml-prolog-end)
1939 (not (search-backward "<" nxml-prolog-end t)))
1940 (setq xmltok-type nil)
1941 (nxml-move-outside-backwards)
1942 (xmltok-forward)))
1943 xmltok-start))
1944 (setq arg (1- arg)))))
1945
1946(defun nxml-forward-element (&optional arg)
1947 "Move forward over one element.
1948With ARG, do it that many times.
1949Negative ARG means move backward."
1950 (interactive "p")
1951 (or arg (setq arg 1))
1952 (if (< arg 0)
1953 (nxml-backward-element (- arg))
1954 (condition-case err
1955 (while (and (> arg 0)
1956 (< (point) (point-max)))
1957 (goto-char
1958 (or (nxml-scan-element-forward (nxml-token-before))
1959 (error "No more elements")))
1960 (setq arg (1- arg)))
1961 (nxml-scan-error
1962 (goto-char (cadr err))
1963 (apply 'error (cddr err))))))
1964
1965(defun nxml-backward-element (&optional arg)
1966 "Move backward over one element.
1967With ARG, do it that many times.
1968Negative ARG means move forward."
1969 (interactive "p")
1970 (or arg (setq arg 1))
1971 (if (< arg 0)
1972 (nxml-forward-element (- arg))
1973 (condition-case err
1974 (while (and (> arg 0)
1975 (< (point-min) (point)))
1976 (goto-char
1977 (or (and (nxml-scan-element-backward (progn
1978 (nxml-token-after)
1979 xmltok-start))
1980 xmltok-start)
1981 (error "No preceding elements")))
1982 (setq arg (1- arg)))
1983 (nxml-scan-error
1984 (goto-char (cadr err))
1985 (apply 'error (cddr err))))))
1986
1987(defun nxml-mark-token-after ()
1988 (interactive)
1989 (push-mark (nxml-token-after) nil t)
1990 (goto-char xmltok-start)
1991 (message "Marked %s" xmltok-type))
1992
1993;;; Paragraphs
1994
1995(defun nxml-mark-paragraph ()
1996 "Put point at beginning of this paragraph, mark at end.
1997The paragraph marked is the one that contains point or follows point."
1998 (interactive)
1999 (nxml-forward-paragraph)
2000 (push-mark nil t t)
2001 (nxml-backward-paragraph))
2002
2003(defun nxml-forward-paragraph (&optional arg)
2004 (interactive "p")
2005 (or arg (setq arg 1))
2006 (cond ((< arg 0)
2007 (nxml-backward-paragraph (- arg)))
2008 ((> arg 0)
2009 (forward-line 0)
2010 (while (and (nxml-forward-single-paragraph)
2011 (> (setq arg (1- arg)) 0))))))
2012
2013(defun nxml-backward-paragraph (&optional arg)
2014 (interactive "p")
2015 (or arg (setq arg 1))
2016 (cond ((< arg 0)
2017 (nxml-forward-paragraph (- arg)))
2018 ((> arg 0)
2019 (unless (bolp)
2020 (let ((inhibit-field-text-motion t))
2021 (end-of-line)))
2022 (while (and (nxml-backward-single-paragraph)
2023 (> (setq arg (1- arg)) 0))))))
2024
2025(defun nxml-forward-single-paragraph ()
2026 "Move forward over a single paragraph.
2027Return nil at end of buffer, t otherwise."
2028 (let* ((token-end (nxml-token-after))
2029 (offset (- (point) xmltok-start))
2030 pos had-data)
2031 (goto-char token-end)
2032 (while (and (< (point) (point-max))
2033 (not (setq pos
2034 (nxml-paragraph-end-pos had-data offset))))
2035 (when (nxml-token-contains-data-p offset)
2036 (setq had-data t))
2037 (nxml-tokenize-forward)
2038 (setq offset 0))
2039 (when pos (goto-char pos))))
2040
2041(defun nxml-backward-single-paragraph ()
2042 "Move backward over a single paragraph.
2043Return nil at start of buffer, t otherwise."
2044 (let* ((token-end (nxml-token-before))
2045 (offset (- token-end (point)))
2046 (last-tag-pos xmltok-start)
2047 pos had-data last-data-pos)
2048 (goto-char token-end)
2049 (unless (setq pos (nxml-paragraph-start-pos nil offset))
2050 (setq had-data (nxml-token-contains-data-p nil offset))
2051 (goto-char xmltok-start)
2052 (while (and (not pos) (< (point-min) (point)))
2053 (cond ((search-backward "<" nxml-prolog-end t)
2054 (nxml-move-outside-backwards)
2055 (save-excursion
2056 (while (< (point) last-tag-pos)
2057 (xmltok-forward)
2058 (when (and (not had-data) (nxml-token-contains-data-p))
2059 (setq pos nil)
2060 (setq last-data-pos xmltok-start))
2061 (let ((tem (nxml-paragraph-start-pos had-data 0)))
2062 (when tem (setq pos tem)))))
2063 (when (and (not had-data) last-data-pos (not pos))
2064 (setq had-data t)
2065 (save-excursion
2066 (while (< (point) last-data-pos)
2067 (xmltok-forward))
2068 (let ((tem (nxml-paragraph-start-pos had-data 0)))
2069 (when tem (setq pos tem)))))
2070 (setq last-tag-pos (point)))
2071 (t (goto-char (point-min))))))
2072 (when pos (goto-char pos))))
2073
2074(defun nxml-token-contains-data-p (&optional start end)
2075 (setq start (+ xmltok-start (or start 0)))
2076 (setq end (- (point) (or end 0)))
2077 (when (eq xmltok-type 'cdata-section)
2078 (setq start (max start (+ xmltok-start 9)))
2079 (setq end (min end (- (point) 3))))
2080 (or (and (eq xmltok-type 'data)
2081 (eq start xmltok-start)
2082 (eq end (point)))
2083 (eq xmltok-type 'char-ref)
2084 (and (memq xmltok-type '(data cdata-section))
2085 (< start end)
2086 (save-excursion
2087 (goto-char start)
2088 (re-search-forward "[^ \t\r\n]" end t)))))
2089
2090(defun nxml-paragraph-end-pos (had-data offset)
2091 "Return the position of the paragraph end if contained in the current token.
2092Return nil if the current token does not contain the paragraph end.
2093Only characters after OFFSET from the start of the token are eligible.
2094HAD-DATA says whether there have been non-whitespace data characters yet."
2095 (cond ((not had-data)
2096 (cond ((memq xmltok-type '(data cdata-section))
2097 (save-excursion
2098 (let ((end (point)))
2099 (goto-char (+ xmltok-start
2100 (max (if (eq xmltok-type 'cdata-section)
2101 9
2102 0)
2103 offset)))
2104 (and (re-search-forward "[^ \t\r\n]" end t)
2105 (re-search-forward "^[ \t]*$" end t)
2106 (match-beginning 0)))))
2107 ((and (eq xmltok-type 'comment)
2108 (nxml-token-begins-line-p)
2109 (nxml-token-ends-line-p))
2110 (save-excursion
2111 (let ((end (point)))
2112 (goto-char (+ xmltok-start (max 4 offset)))
2113 (when (re-search-forward "[^ \t\r\n]" (- end 3) t)
2114 (if (re-search-forward "^[ \t]*$" end t)
2115 (match-beginning 0)
2116 (goto-char (- end 3))
2117 (skip-chars-backward " \t")
2118 (unless (bolp)
2119 (beginning-of-line 2))
2120 (point))))))))
2121 ((memq xmltok-type '(data space cdata-section))
2122 (save-excursion
2123 (let ((end (point)))
2124 (goto-char (+ xmltok-start offset))
2125 (and (re-search-forward "^[ \t]*$" end t)
2126 (match-beginning 0)))))
2127 ((and (memq xmltok-type '(start-tag
2128 end-tag
2129 empty-element
2130 comment
2131 processing-instruction
2132 entity-ref))
2133 (nxml-token-begins-line-p)
2134 (nxml-token-ends-line-p))
2135 (save-excursion
2136 (goto-char xmltok-start)
2137 (skip-chars-backward " \t")
2138 (point)))
2139 ((and (eq xmltok-type 'end-tag)
2140 (looking-at "[ \t]*$")
2141 (not (nxml-in-mixed-content-p t)))
2142 (save-excursion
2143 (or (search-forward "\n" nil t)
2144 (point-max))))))
2145
2146(defun nxml-paragraph-start-pos (had-data offset)
2147 "Return the position of the paragraph start if contained in the current token.
2148Return nil if the current token does not contain the paragraph start.
2149Only characters before OFFSET from the end of the token are eligible.
2150HAD-DATA says whether there have been non-whitespace data characters yet."
2151 (cond ((not had-data)
2152 (cond ((memq xmltok-type '(data cdata-section))
2153 (save-excursion
2154 (goto-char (- (point)
2155 (max (if (eq xmltok-type 'cdata-section)
2156 3
2157 0)
2158 offset)))
2159 (and (re-search-backward "[^ \t\r\n]" xmltok-start t)
2160 (re-search-backward "^[ \t]*$" xmltok-start t)
2161 (match-beginning 0))))
2162 ((and (eq xmltok-type 'comment)
2163 (nxml-token-ends-line-p)
2164 (nxml-token-begins-line-p))
2165 (save-excursion
2166 (goto-char (- (point) (max 3 offset)))
2167 (when (and (< (+ xmltok-start 4) (point))
2168 (re-search-backward "[^ \t\r\n]"
2169 (+ xmltok-start 4)
2170 t))
2171 (if (re-search-backward "^[ \t]*$" xmltok-start t)
2172 (match-beginning 0)
2173 (goto-char xmltok-start)
2174 (if (looking-at "<!--[ \t]*\n")
2175 (match-end 0)
2176 (skip-chars-backward " \t")
2177 (point))))))))
2178 ((memq xmltok-type '(data space cdata-section))
2179 (save-excursion
2180 (goto-char (- (point) offset))
2181 (and (re-search-backward "^[ \t]*$" xmltok-start t)
2182 (match-beginning 0))))
2183 ((and (memq xmltok-type '(start-tag
2184 end-tag
2185 empty-element
2186 comment
2187 processing-instruction
2188 entity-ref))
2189 (nxml-token-ends-line-p)
2190 (nxml-token-begins-line-p))
2191 (or (search-forward "\n" nil t)
2192 (point-max)))
2193 ((and (eq xmltok-type 'start-tag)
2194 (nxml-token-begins-line-p)
2195 (not (save-excursion
2196 (goto-char xmltok-start)
2197 (nxml-in-mixed-content-p nil))))
2198 (save-excursion
2199 (goto-char xmltok-start)
2200 (skip-chars-backward " \t")
2201 ;; include any blank line before
2202 (or (and (eq (char-before) ?\n)
2203 (save-excursion
2204 (goto-char (1- (point)))
2205 (skip-chars-backward " \t")
2206 (and (bolp) (point))))
2207 (point))))))
2208
2209(defun nxml-token-ends-line-p () (looking-at "[ \t]*$"))
2210
2211(defun nxml-token-begins-line-p ()
2212 (save-excursion
2213 (goto-char xmltok-start)
2214 (skip-chars-backward " \t")
2215 (bolp)))
2216
2217(defun nxml-in-mixed-content-p (endp)
2218 "Return non-nil if point is in mixed content.
2219Point must be after an end-tag or before a start-tag.
2220ENDP is t in the former case, nil in the latter."
2221 (let (matching-tag-pos)
2222 (cond ((not (run-hook-with-args-until-failure
2223 'nxml-in-mixed-content-hook))
2224 nil)
2225 ;; See if the matching tag does not start or end a line.
2226 ((condition-case err
2227 (progn
2228 (setq matching-tag-pos
2229 (xmltok-save
2230 (if endp
2231 (and (nxml-scan-element-backward (point))
2232 xmltok-start)
2233 (nxml-scan-element-forward (point)))))
2234 (and matching-tag-pos
2235 (save-excursion
2236 (goto-char matching-tag-pos)
2237 (not (if endp
2238 (progn
2239 (skip-chars-backward " \t")
2240 (bolp))
2241 (looking-at "[ \t]*$"))))))
2242 (nxml-scan-error nil))
2243 t)
2244 ;; See if there's data at the same level.
2245 ((let (start end)
2246 (if endp
2247 (setq start matching-tag-pos
2248 end (point))
2249 (setq start (point)
2250 end matching-tag-pos))
2251 (save-excursion
2252 (or (when start
2253 (goto-char start)
2254 (nxml-preceding-sibling-data-p))
2255 (when end
2256 (goto-char end)
2257 (nxml-following-sibling-data-p)))))
2258 t)
2259 ;; Otherwise, treat as not mixed
2260 (t nil))))
2261
2262(defun nxml-preceding-sibling-data-p ()
2263 "Return non-nil if there is a previous sibling that is data."
2264 (let ((lim (max (- (point) nxml-mixed-scan-distance)
2265 nxml-prolog-end))
2266 (level 0)
2267 found end)
2268 (xmltok-save
2269 (save-excursion
2270 (while (and (< lim (point))
2271 (>= level 0)
2272 (not found)
2273 (progn
2274 (setq end (point))
2275 (search-backward "<" lim t)))
2276 (nxml-move-outside-backwards)
2277 (save-excursion
2278 (xmltok-forward)
2279 (let ((prev-level level))
2280 (cond ((eq xmltok-type 'end-tag)
2281 (setq level (1+ level)))
2282 ((eq xmltok-type 'start-tag)
2283 (setq level (1- level))))
2284 (when (eq prev-level 0)
2285 (while (and (< (point) end) (not found))
2286 (xmltok-forward)
2287 (when (memq xmltok-type '(data cdata-section char-ref))
2288 (setq found t)))))))))
2289 found))
2290
2291(defun nxml-following-sibling-data-p ()
2292 (let ((lim (min (+ (point) nxml-mixed-scan-distance)
2293 (point-max)))
2294 (level 0)
2295 found)
2296 (xmltok-save
2297 (save-excursion
2298 (while (and (< (point) lim)
2299 (>= level 0)
2300 (nxml-tokenize-forward)
2301 (not found))
2302 (cond ((eq xmltok-type 'start-tag)
2303 (setq level (1+ level)))
2304 ((eq xmltok-type 'end-tag)
2305 (setq level (1- level)))
2306 ((and (eq level 0)
2307 (memq xmltok-type '(data cdata-section char-ref)))
2308 (setq found t))))))
2309 found))
2310
2311;;; Filling
2312
2313(defun nxml-do-fill-paragraph (arg)
2314 (let (fill-paragraph-function
2315 fill-prefix
2316 start end)
2317 (save-excursion
2318 (nxml-forward-paragraph)
2319 (setq end (point))
2320 (nxml-backward-paragraph)
2321 (skip-chars-forward " \t\r\n")
2322 (setq start (point))
2323 (beginning-of-line)
2324 (setq fill-prefix (buffer-substring-no-properties (point) start))
2325 (when (and (not (nxml-get-inside (point)))
2326 (looking-at "[ \t]*<!--"))
2327 (setq fill-prefix (concat fill-prefix " ")))
2328 (fill-region-as-paragraph start end arg))
2329 (skip-line-prefix fill-prefix)
2330 fill-prefix))
2331
2332(defun nxml-newline-and-indent (soft)
2333 (delete-horizontal-space)
2334 (if soft (insert-and-inherit ?\n) (newline 1))
2335 (nxml-indent-line))
2336
2337
2338;;; Dynamic markup
2339
2340(defvar nxml-dynamic-markup-prev-pos nil)
2341(defvar nxml-dynamic-markup-prev-lengths nil)
2342(defvar nxml-dynamic-markup-prev-found-marker nil)
2343(defvar nxml-dynamic-markup-prev-start-tags (make-hash-table :test 'equal))
2344
2345(defun nxml-dynamic-markup-word ()
2346 "Dynamically markup the word before point.
2347This attempts to find a tag to put around the word before point based
2348on the contents of the current buffer. The end-tag will be inserted at
2349point. The start-tag will be inserted at or before the beginning of
2350the word before point; the contents of the current buffer is used to
2351decide where.
2352
2353It works in a similar way to \\[dabbrev-expand]. It searches first
2354backwards from point, then forwards from point for an element whose
2355content is a string which matches the contents of the buffer before
2356point and which includes at least the word before point. It then
2357copies the start- and end-tags from that element and uses them to
2358surround the matching string before point.
2359
2360Repeating \\[nxml-dynamic-markup-word] immediately after successful
2361\\[nxml-dynamic-markup-word] removes the previously inserted markup
2362and attempts to find another possible way to do the markup."
2363 (interactive "*")
2364 (let (search-start-pos done)
2365 (if (and (integerp nxml-dynamic-markup-prev-pos)
2366 (= nxml-dynamic-markup-prev-pos (point))
2367 (eq last-command this-command)
2368 nxml-dynamic-markup-prev-lengths)
2369 (let* ((end-tag-open-pos
2370 (- nxml-dynamic-markup-prev-pos
2371 (nth 2 nxml-dynamic-markup-prev-lengths)))
2372 (start-tag-close-pos
2373 (- end-tag-open-pos
2374 (nth 1 nxml-dynamic-markup-prev-lengths)))
2375 (start-tag-open-pos
2376 (- start-tag-close-pos
2377 (nth 0 nxml-dynamic-markup-prev-lengths))))
2378 (delete-region end-tag-open-pos nxml-dynamic-markup-prev-pos)
2379 (delete-region start-tag-open-pos start-tag-close-pos)
2380 (setq search-start-pos
2381 (marker-position nxml-dynamic-markup-prev-found-marker)))
2382 (clrhash nxml-dynamic-markup-prev-start-tags))
2383 (setq nxml-dynamic-markup-prev-pos nil)
2384 (setq nxml-dynamic-markup-prev-lengths nil)
2385 (setq nxml-dynamic-markup-prev-found-marker nil)
2386 (goto-char
2387 (save-excursion
2388 (let* ((pos (point))
2389 (word (progn
2390 (backward-word 1)
2391 (unless (< (point) pos)
2392 (error "No word to markup"))
2393 (buffer-substring-no-properties (point) pos)))
2394 (search (concat word "</"))
2395 done)
2396 (when search-start-pos
2397 (goto-char search-start-pos))
2398 (while (and (not done)
2399 (or (and (< (point) pos)
2400 (or (search-backward search nil t)
2401 (progn (goto-char pos) nil)))
2402 (search-forward search nil t)))
2403 (goto-char (- (match-end 0) 2))
2404 (setq done (nxml-try-copy-markup pos)))
2405 (or done
2406 (error (if (zerop (hash-table-count
2407 nxml-dynamic-markup-prev-start-tags))
2408 "No possible markup found for `%s'"
2409 "No more markup possibilities found for `%s'")
2410 word)))))))
2411
2412(defun nxml-try-copy-markup (word-end-pos)
2413 (save-excursion
2414 (let ((end-tag-pos (point)))
2415 (when (and (not (nxml-get-inside end-tag-pos))
2416 (search-backward "<" nil t)
2417 (not (nxml-get-inside (point))))
2418 (xmltok-forward)
2419 (when (and (eq xmltok-type 'start-tag)
2420 (< (point) end-tag-pos))
2421 (let* ((start-tag-close-pos (point))
2422 (start-tag
2423 (buffer-substring-no-properties xmltok-start
2424 start-tag-close-pos))
2425 (words
2426 (nreverse
2427 (split-string
2428 (buffer-substring-no-properties start-tag-close-pos
2429 end-tag-pos)
2430 "[ \t\r\n]+"))))
2431 (goto-char word-end-pos)
2432 (while (and words
2433 (re-search-backward (concat
2434 (regexp-quote (car words))
2435 "\\=")
2436 nil
2437 t))
2438 (setq words (cdr words))
2439 (skip-chars-backward " \t\r\n"))
2440 (when (and (not words)
2441 (progn
2442 (skip-chars-forward " \t\r\n")
2443 (not (gethash (cons (point) start-tag)
2444 nxml-dynamic-markup-prev-start-tags)))
2445 (or (< end-tag-pos (point))
2446 (< word-end-pos xmltok-start)))
2447 (setq nxml-dynamic-markup-prev-found-marker
2448 (copy-marker end-tag-pos t))
2449 (puthash (cons (point) start-tag)
2450 t
2451 nxml-dynamic-markup-prev-start-tags)
2452 (setq nxml-dynamic-markup-prev-lengths
2453 (list (- start-tag-close-pos xmltok-start)
2454 (- word-end-pos (point))
2455 (+ (- xmltok-name-end xmltok-start) 2)))
2456 (let ((name (xmltok-start-tag-qname)))
2457 (insert start-tag)
2458 (goto-char (+ word-end-pos
2459 (- start-tag-close-pos xmltok-start)))
2460 (insert "</" name ">")
2461 (setq nxml-dynamic-markup-prev-pos (point))))))))))
2462
2463
2464;;; Character names
2465
2466(defvar nxml-char-name-ignore-case nil)
2467
2468(defvar nxml-char-name-alist nil
2469 "Alist of character names.
2470Each member of the list has the form (NAME CODE . NAMESET),
2471where NAME is a string naming a character, NAMESET is a symbol
2472identifying a set of names and CODE is an integer specifying the
2473Unicode scalar value of the named character.
2474The NAME will only be used for completion if NAMESET has
2475a non-nil `nxml-char-name-set-enabled' property.
2476If NAMESET does does not have `nxml-char-name-set-defined' property,
2477then it must have a `nxml-char-name-set-file' property and `load'
2478will be applied to the value of this property if the nameset
2479is enabled.")
2480
2481(defvar nxml-char-name-table (make-hash-table :test 'eq)
2482 "Hash table for mapping char codes to names.
2483Each key is a Unicode scalar value.
2484Each value is a list of pairs of the form (NAMESET . NAME),
2485where NAMESET is a symbol identifying a set of names,
2486and NAME is a string naming a character.")
2487
2488(defvar nxml-autoload-char-name-set-list nil
2489 "List of char namesets that can be autoloaded.")
2490
2491(defun nxml-enable-char-name-set (nameset)
2492 (put nameset 'nxml-char-name-set-enabled t))
2493
2494(defun nxml-disable-char-name-set (nameset)
2495 (put nameset 'nxml-char-name-set-enabled nil))
2496
2497(defun nxml-char-name-set-enabled-p (nameset)
2498 (get nameset 'nxml-char-name-set-enabled))
2499
2500(defun nxml-autoload-char-name-set (nameset file)
2501 (unless (memq nameset nxml-autoload-char-name-set-list)
2502 (setq nxml-autoload-char-name-set-list
2503 (cons nameset nxml-autoload-char-name-set-list)))
2504 (put nameset 'nxml-char-name-set-file file))
2505
2506(defun nxml-define-char-name-set (nameset alist)
2507 "Define a set of character names.
2508NAMESET is a symbol identifying the set.
2509Alist is a list where each member has the form (NAME CODE),
2510where NAME is a string naming a character and code
2511is an integer giving the Unicode scalar value of the character."
2512 (when (get nameset 'nxml-char-name-set-defined)
2513 (error "Nameset `%s' already defined" nameset))
2514 (let ((iter alist))
2515 (while iter
2516 (let* ((name-code (car iter))
2517 (name (car name-code))
2518 (code (cadr name-code)))
2519 (puthash code
2520 (cons (cons nameset name)
2521 (gethash code nxml-char-name-table))
2522 nxml-char-name-table))
2523 (setcdr (cdr (car iter)) nameset)
2524 (setq iter (cdr iter))))
2525 (setq nxml-char-name-alist
2526 (nconc alist nxml-char-name-alist))
2527 (put nameset 'nxml-char-name-set-defined t))
2528
2529(defun nxml-get-char-name (code)
2530 (mapcar 'nxml-maybe-load-char-name-set nxml-autoload-char-name-set-list)
2531 (let ((names (gethash code nxml-char-name-table))
2532 name)
2533 (while (and names (not name))
2534 (if (nxml-char-name-set-enabled-p (caar names))
2535 (setq name (cdar names))
2536 (setq names (cdr names))))
2537 name))
2538
2539(defvar nxml-named-char-history nil)
2540
2541(defun nxml-insert-named-char (arg)
2542 "Insert a character using its name.
2543The name is read from the minibuffer.
2544Normally, inserts the character as a numeric character reference.
2545With a prefix argument, inserts the character directly."
2546 (interactive "*P")
2547 (mapcar 'nxml-maybe-load-char-name-set nxml-autoload-char-name-set-list)
2548 (let ((name
2549 (let ((completion-ignore-case nxml-char-name-ignore-case))
2550 (completing-read "Character name: "
2551 nxml-char-name-alist
2552 (lambda (member)
2553 (get (cddr member) 'nxml-char-name-set-enabled))
2554 t
2555 nil
2556 'nxml-named-char-history)))
2557 (alist nxml-char-name-alist)
2558 elt code)
2559 (while (and alist (not code))
2560 (setq elt (assoc name alist))
2561 (if (get (cddr elt) 'nxml-char-name-set-enabled)
2562 (setq code (cadr elt))
2563 (setq alist (cdr (member elt alist)))))
2564 (when code
2565 (insert (if arg
2566 (or (decode-char 'ucs code)
2567 (error "Character %x is not supported by Emacs"
2568 code))
2569 (format "&#x%X;" code))))))
2570
2571(defun nxml-maybe-load-char-name-set (sym)
2572 (when (and (get sym 'nxml-char-name-set-enabled)
2573 (not (get sym 'nxml-char-name-set-defined))
2574 (stringp (get sym 'nxml-char-name-set-file)))
2575 (load (get sym 'nxml-char-name-set-file))))
2576
2577(defun nxml-toggle-char-ref-extra-display (arg)
2578 "*Toggle the display of extra information for character references."
2579 (interactive "P")
2580 (let ((new (if (null arg)
2581 (not nxml-char-ref-extra-display)
2582 (> (prefix-numeric-value arg) 0))))
2583 (when (not (eq new nxml-char-ref-extra-display))
2584 (setq nxml-char-ref-extra-display new)
2585 (save-excursion
2586 (save-restriction
2587 (widen)
2588 (if nxml-char-ref-extra-display
2589 (nxml-with-unmodifying-text-property-changes
2590 (nxml-clear-fontified (point-min) (point-max)))
2591 (nxml-clear-char-ref-extra-display (point-min) (point-max))))))))
2592
2593(put 'nxml-char-ref 'evaporate t)
2594
2595(defun nxml-char-ref-display-extra (start end n)
2596 (when nxml-char-ref-extra-display
2597 (let ((name (nxml-get-char-name n))
2598 (glyph-string (and nxml-char-ref-display-glyph-flag
2599 (nxml-glyph-display-string n 'nxml-glyph-face)))
2600 ov)
2601 (when (or name glyph-string)
2602 (setq ov (make-overlay start end nil t))
2603 (overlay-put ov 'category 'nxml-char-ref)
2604 (when name
2605 (overlay-put ov 'help-echo name))
2606 (when glyph-string
2607 (overlay-put ov
2608 'after-string
2609 (propertize glyph-string 'face 'nxml-glyph-face)))))))
2610
2611(defun nxml-clear-char-ref-extra-display (start end)
2612 (let ((ov (overlays-in start end)))
2613 (while ov
2614 (when (eq (overlay-get (car ov) 'category) 'nxml-char-ref)
2615 (delete-overlay (car ov)))
2616 (setq ov (cdr ov)))))
2617
2618;;; Versioning
2619
2620(defun nxml-version ()
2621 "Show the version of nXML mode that is being used."
2622 (interactive)
2623 (if nxml-version
2624 (message "nXML mode version %s" nxml-version)
2625 (message "nXML mode version unknown")))
2626
2627
2628(defun nxml-start-delimiter-length (type)
2629 (or (get type 'nxml-start-delimiter-length)
2630 0))
2631
2632(put 'cdata-section 'nxml-start-delimiter-length 9)
2633(put 'comment 'nxml-start-delimiter-length 4)
2634(put 'processing-instruction 'nxml-start-delimiter-length 2)
2635(put 'start-tag 'nxml-start-delimiter-length 1)
2636(put 'empty-element 'nxml-start-delimiter-length 1)
2637(put 'partial-empty-element 'nxml-start-delimiter-length 1)
2638(put 'entity-ref 'nxml-start-delimiter-length 1)
2639(put 'char-ref 'nxml-start-delimiter-length 2)
2640
2641(defun nxml-end-delimiter-length (type)
2642 (or (get type 'nxml-end-delimiter-length)
2643 0))
2644
2645(put 'cdata-section 'nxml-end-delimiter-length 3)
2646(put 'comment 'nxml-end-delimiter-length 3)
2647(put 'processing-instruction 'nxml-end-delimiter-length 2)
2648(put 'start-tag 'nxml-end-delimiter-length 1)
2649(put 'empty-element 'nxml-end-delimiter-length 2)
2650(put 'partial-empty-element 'nxml-end-delimiter-length 1)
2651(put 'entity-ref 'nxml-end-delimiter-length 1)
2652(put 'char-ref 'nxml-end-delimiter-length 1)
2653
2654(defun nxml-token-type-friendly-name (type)
2655 (or (get type 'nxml-friendly-name)
2656 (symbol-name type)))
2657
2658(put 'cdata-section 'nxml-friendly-name "CDATA section")
2659(put 'processing-instruction 'nxml-friendly-name "processing instruction")
2660(put 'entity-ref 'nxml-friendly-name "entity reference")
2661(put 'char-ref 'nxml-friendly-name "character reference")
2662
2663(provide 'nxml-mode)
2664
2665;;; nxml-mode.el ends here
diff --git a/lisp/nxml/nxml-ns.el b/lisp/nxml/nxml-ns.el
new file mode 100644
index 00000000000..6306d93713a
--- /dev/null
+++ b/lisp/nxml/nxml-ns.el
@@ -0,0 +1,148 @@
1;;; nxml-ns.el --- XML namespace processing
2
3;; Copyright (C) 2003 Free Software Foundation, Inc.
4
5;; Author: James Clark
6;; Keywords: XML
7
8;; This program is free software; you can redistribute it and/or
9;; modify it under the terms of the GNU General Public License as
10;; published by the Free Software Foundation; either version 2 of
11;; the License, or (at your option) any later version.
12
13;; This program is distributed in the hope that it will be
14;; useful, but WITHOUT ANY WARRANTY; without even the implied
15;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16;; PURPOSE. See the GNU General Public License for more details.
17
18;; You should have received a copy of the GNU General Public
19;; License along with this program; if not, write to the Free
20;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21;; MA 02111-1307 USA
22
23;;; Commentary:
24
25;; This file uses a prefix of `nxml-ns'.
26
27;;; Code:
28
29(require 'nxml-util)
30
31(defvar nxml-ns-state nil
32 "Contains the state of namespace processing. The state
33is never modified destructively and so can be saved and restored
34without copying.
35
36The value is a stack represented by a list. The list has length N + 1
37where N is the number of open elements. Each member of the list
38represents the bindings in effect for a particular element. Each
39member is itself a list whose car is the default namespace
40\(a symbol or nil) and whose cdr is an alist of (PREFIX . NS) pairs
41where PREFIX is a string (never nil) and NS is the namespace URI
42symbol.")
43
44(defconst nxml-ns-initial-state
45 (list (list nil (cons "xml" nxml-xml-namespace-uri)))
46 "A list to be used as the initial value of nxml-ns-state. This
47represents the state with no open elements and with the default
48namespace bindings (no default namespace and only the xml prefix bound).")
49
50(defsubst nxml-ns-state () nxml-ns-state)
51
52(defsubst nxml-ns-set-state (state)
53 (setq nxml-ns-state state))
54
55(defsubst nxml-ns-state-equal (state)
56 (equal nxml-ns-state state))
57
58(defmacro nxml-ns-save (&rest body)
59 `(let ((nxml-ns-state nxml-ns-initial-state))
60 ,@body))
61
62(put 'nxml-ns-save 'lisp-indent-function 0)
63(def-edebug-spec nxml-ns-save t)
64
65(defun nxml-ns-init ()
66 (setq nxml-ns-state nxml-ns-initial-state))
67
68(defun nxml-ns-push-state ()
69 "Change the state by starting a new element. Namespace declarations
70are inherited from the parent state."
71 (setq nxml-ns-state (cons (car nxml-ns-state) nxml-ns-state)))
72
73(defun nxml-ns-pop-state ()
74 "Change the state by ending an element. The behaviour is undefined
75if there is no open element."
76 (setq nxml-ns-state (cdr nxml-ns-state)))
77
78(defun nxml-ns-get-prefix (prefix)
79 "Return the symbol for namespace bound to PREFIX, or nil if PREFIX
80is unbound. PREFIX is a string, never nil."
81 (let ((binding (assoc prefix (cdar nxml-ns-state))))
82 (and binding (cdr binding))))
83
84(defun nxml-ns-set-prefix (prefix ns)
85 "Change the binding of PREFIX. PREFIX is a string (never nil). NS
86is a symbol (never nil). The change will be in effect until the end of
87the current element."
88 (setq nxml-ns-state
89 (let ((bindings (car nxml-ns-state)))
90 (cons (cons (car bindings)
91 (cons (cons prefix ns) (cdr bindings)))
92 (cdr nxml-ns-state)))))
93
94(defun nxml-ns-get-default ()
95 "Return the current default namespace as a symbol, or nil
96if there is no default namespace."
97 (caar nxml-ns-state))
98
99(defun nxml-ns-set-default (ns)
100 "Changes the current default namespace. The change
101will be in effect until the end of the current element.
102NS is a symbol or nil."
103 (setq nxml-ns-state
104 (cons (cons ns (cdar nxml-ns-state))
105 (cdr nxml-ns-state))))
106
107(defun nxml-ns-get-context ()
108 (car nxml-ns-state))
109
110(defun nxml-ns-prefixes-for (ns &optional attributep)
111 (let ((current (car nxml-ns-state))
112 prefixes)
113 (when (if attributep
114 (not ns)
115 (eq (car current) ns))
116 (setq prefixes '(nil)))
117 (setq current (cdr current))
118 (while (let ((binding (rassq ns current)))
119 (when binding
120 (when (eq (nxml-ns-get-prefix (car binding)) ns)
121 (add-to-list 'prefixes
122 (car binding)))
123 (setq current
124 (cdr (member binding current))))))
125 prefixes))
126
127(defun nxml-ns-prefix-for (ns)
128 (car (rassq ns (cdar nxml-ns-state))))
129
130(defun nxml-ns-changed-prefixes ()
131 (let ((old (cadr nxml-ns-state))
132 (new (car nxml-ns-state))
133 changed)
134 (if (eq old new)
135 nil
136 (unless (eq (car new) (car old))
137 (setq changed '(nil)))
138 (setq new (cdr new))
139 (setq old (cdr old))
140 (while (not (eq new old))
141 (setq changed
142 (cons (caar new) changed))
143 (setq new (cdr new))))
144 changed))
145
146(provide 'nxml-ns)
147
148;;; nxml-ns.el ends here
diff --git a/lisp/nxml/nxml-outln.el b/lisp/nxml/nxml-outln.el
new file mode 100644
index 00000000000..5bc39c86e83
--- /dev/null
+++ b/lisp/nxml/nxml-outln.el
@@ -0,0 +1,1040 @@
1;;; nxml-outln.el --- outline support for nXML mode
2
3;; Copyright (C) 2004 Free Software Foundation, Inc.
4
5;; Author: James Clark
6;; Keywords: XML
7
8;; This program is free software; you can redistribute it and/or
9;; modify it under the terms of the GNU General Public License as
10;; published by the Free Software Foundation; either version 2 of
11;; the License, or (at your option) any later version.
12
13;; This program is distributed in the hope that it will be
14;; useful, but WITHOUT ANY WARRANTY; without even the implied
15;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16;; PURPOSE. See the GNU General Public License for more details.
17
18;; You should have received a copy of the GNU General Public
19;; License along with this program; if not, write to the Free
20;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21;; MA 02111-1307 USA
22
23;;; Commentary:
24
25;; A section can be in one of three states
26;; 1. display normally; this displays each child section
27;; according to its state; anything not part of child sections is also
28;; displayed normally
29;; 2. display just the title specially; child sections are not displayed
30;; regardless of their state; anything not part of child sections is
31;; not displayed
32;; 3. display the title specially and display child sections
33;; according to their state; anything not part of the child section is
34;; not displayed
35;; The state of a section is determined by the value of the
36;; nxml-outline-state text property of the < character that starts
37;; the section.
38;; For state 1 the value is nil or absent.
39;; For state 2 it is the symbol hide-children.
40;; For state 3 it is t.
41;; The special display is achieved by using overlays. The overlays
42;; are computed from the nxml-outline-state property by
43;; `nxml-refresh-outline'. There overlays all have a category property
44;; with an nxml-outline-display property with value t.
45;;
46;; For a section to be recognized as such, the following conditions must
47;; be satisfied:
48;; - its start-tag must occur at the start of a line (possibly indented)
49;; - its local name must match `nxml-section-element-name-regexp'
50;; - it must have a heading element; a heading element is an
51;; element whose name matches `nxml-heading-element-name-regexp',
52;; and that occurs as, or as a descendant of, the first child element
53;; of the section
54;;
55;; XXX What happens if an nxml-outline-state property is attached to a
56;; character that doesn't start a section element?
57;;
58;; An outlined section (an section with a non-nil nxml-outline-state
59;; property) can be displayed in either single-line or multi-line
60;; form. Single-line form is used when the outline state is hide-children
61;; or there are no child sections; multi-line form is used otherwise.
62;; There are two flavors of single-line form: with children and without.
63;; The with-childen flavor is used when there are child sections.
64;; Single line with children looks like
65;; <+section>A section title...</>
66;; Single line without children looks like
67;; <-section>A section title...</>
68;; Multi line looks likes
69;; <-section>A section title...
70;; [child sections displayed here]
71;; </-section>
72;; The indent of an outlined section is computed relative to the
73;; outermost containing outlined element. The indent of the
74;; outermost containing element comes from the non-outlined
75;; indent of the section start-tag.
76
77;;; Code:
78
79(require 'xmltok)
80(require 'nxml-util)
81(require 'nxml-rap)
82
83(defcustom nxml-section-element-name-regexp
84 "article\\|\\(sub\\)*section\\|chapter\\|div\\|appendix\\|part\\|preface\\|reference\\|simplesect\\|bibliography\\|bibliodiv\\|glossary\\|glossdiv"
85 "*Regular expression matching the name of elements used as sections.
86An XML element is treated as a section if:
87
88- its local name (that is, the name without the prefix) matches
89this regexp;
90
91- either its first child element or a descendant of that first child
92element has a local name matching the variable
93`nxml-heading-element-name-regexp'; and
94
95- its start-tag occurs at the beginning of a line (possibly indented)."
96 :group 'nxml
97 :type 'regexp)
98
99(defcustom nxml-heading-element-name-regexp "title\\|head"
100 "*Regular expression matching the name of elements used as headings.
101An XML element is only recognized as a heading if it occurs as or
102within the first child of an element that is recognized as a section.
103See the variable `nxml-section-element-name-regexp' for more details."
104 :group 'nxml
105 :type 'regexp)
106
107(defcustom nxml-outline-child-indent 2
108 "*Indentation in an outline for child element relative to parent element."
109 :group 'nxml
110 :type 'integer)
111
112(defface nxml-heading-face
113 '((t (:weight bold)))
114 "Face used for the contents of abbreviated heading elements."
115 :group 'nxml-highlighting-faces)
116
117(defface nxml-outline-indicator-face
118 '((t (:inherit default)))
119 "Face used for `+' or `-' before element names in outlines."
120 :group 'nxml-highlighting-faces)
121
122(defface nxml-outline-active-indicator-face
123 '((t (:box t :inherit nxml-outline-indicator-face)))
124 "Face used for clickable `+' or `-' before element names in outlines."
125 :group 'nxml-highlighting-faces)
126
127(defface nxml-outline-ellipsis-face
128 '((t (:bold t :inherit default)))
129 "Face used for `...' in outlines."
130 :group 'nxml-highlighting-faces)
131
132(defvar nxml-heading-scan-distance 1000
133 "Maximum distance from section to scan for heading.")
134
135(defvar nxml-outline-prefix-map
136 (let ((map (make-sparse-keymap)))
137 (define-key map "\C-a" 'nxml-show-all)
138 (define-key map "\C-t" 'nxml-hide-all-text-content)
139 (define-key map "\C-r" 'nxml-refresh-outline)
140 (define-key map "\C-c" 'nxml-hide-direct-text-content)
141 (define-key map "\C-e" 'nxml-show-direct-text-content)
142 (define-key map "\C-d" 'nxml-hide-subheadings)
143 (define-key map "\C-s" 'nxml-show)
144 (define-key map "\C-k" 'nxml-show-subheadings)
145 (define-key map "\C-l" 'nxml-hide-text-content)
146 (define-key map "\C-i" 'nxml-show-direct-subheadings)
147 (define-key map "\C-o" 'nxml-hide-other)
148 map))
149
150;;; Commands for changing visibility
151
152(defun nxml-show-all ()
153 "Show all elements in the buffer normally."
154 (interactive)
155 (nxml-with-unmodifying-text-property-changes
156 (remove-text-properties (point-min)
157 (point-max)
158 '(nxml-outline-state nil)))
159 (nxml-outline-set-overlay nil (point-min) (point-max)))
160
161(defun nxml-hide-all-text-content ()
162 "Hide all text content in the buffer.
163Anything that is in a section but is not a heading will be hidden.
164The visibility of headings at any level will not be changed. See the
165variable `nxml-section-element-name-regexp' for more details on how to
166customize which elements are recognized as sections and headings."
167 (interactive)
168 (nxml-transform-buffer-outline '((nil . t))))
169
170(defun nxml-show-direct-text-content ()
171 "Show the text content that is directly part of the section containing point.
172Each subsection will be shown according to its individual state, which
173will not be changed. The section containing point is the innermost
174section that contains the character following point. See the variable
175`nxml-section-element-name-regexp' for more details on how to
176customize which elements are recognized as sections and headings."
177 (interactive)
178 (nxml-outline-pre-adjust-point)
179 (nxml-set-outline-state (nxml-section-start-position) nil)
180 (nxml-refresh-outline)
181 (nxml-outline-adjust-point))
182
183(defun nxml-show-direct-subheadings ()
184 "Show the immediate subheadings of the section containing point.
185The section containing point is the innermost section that contains
186the character following point. See the variable
187`nxml-section-element-name-regexp' for more details on how to
188customize which elements are recognized as sections and headings."
189 (interactive)
190 (let ((pos (nxml-section-start-position)))
191 (when (eq (nxml-get-outline-state pos) 'hide-children)
192 (nxml-set-outline-state pos t)))
193 (nxml-refresh-outline)
194 (nxml-outline-adjust-point))
195
196(defun nxml-hide-direct-text-content ()
197 "Hide the text content that is directly part of the section containing point.
198The heading of the section will remain visible. The state of
199subsections will not be changed. The section containing point is the
200innermost section that contains the character following point. See the
201variable `nxml-section-element-name-regexp' for more details on how to
202customize which elements are recognized as sections and headings."
203 (interactive)
204 (let ((pos (nxml-section-start-position)))
205 (when (null (nxml-get-outline-state pos))
206 (nxml-set-outline-state pos t)))
207 (nxml-refresh-outline)
208 (nxml-outline-adjust-point))
209
210(defun nxml-hide-subheadings ()
211 "Hide the subheadings that are part of the section containing point.
212The text content will also be hidden, leaving only the heading of the
213section itself visible. The state of the subsections will also be
214changed to hide their headings, so that \\[nxml-show-direct-text-content]
215would show only the heading of the subsections. The section containing
216point is the innermost section that contains the character following
217point. See the variable `nxml-section-element-name-regexp' for more
218details on how to customize which elements are recognized as sections
219and headings."
220 (interactive)
221 (nxml-transform-subtree-outline '((nil . hide-children)
222 (t . hide-children))))
223
224(defun nxml-show ()
225 "Show the section containing point normally, without hiding anything.
226This includes everything in the section at any level. The section
227containing point is the innermost section that contains the character
228following point. See the variable `nxml-section-element-name-regexp'
229for more details on how to customize which elements are recognized as
230sections and headings."
231 (interactive)
232 (nxml-transform-subtree-outline '((hide-children . nil)
233 (t . nil))))
234
235(defun nxml-hide-text-content ()
236 "Hide text content at all levels in the section containing point.
237The section containing point is the innermost section that contains
238the character following point. See the variable
239`nxml-section-element-name-regexp' for more details on how to
240customize which elements are recognized as sections and headings."
241 (interactive)
242 (nxml-transform-subtree-outline '((nil . t))))
243
244(defun nxml-show-subheadings ()
245 "Show the subheadings at all levels of the section containing point.
246The visibility of the text content at all levels in the section is not
247changed. The section containing point is the innermost section that
248contains the character following point. See the variable
249`nxml-section-element-name-regexp' for more details on how to
250customize which elements are recognized as sections and headings."
251 (interactive)
252 (nxml-transform-subtree-outline '((hide-children . t))))
253
254(defun nxml-hide-other ()
255 "Hide text content other than that directly in the section containing point.
256Hide headings other than those of ancestors of that section and their
257immediate subheadings. The section containing point is the innermost
258section that contains the character following point. See the variable
259`nxml-section-element-name-regexp' for more details on how to
260customize which elements are recognized as sections and headings."
261 (interactive)
262 (let ((nxml-outline-state-transform-exceptions nil))
263 (save-excursion
264 (while (and (condition-case err
265 (nxml-back-to-section-start)
266 (nxml-outline-error (nxml-report-outline-error
267 "Couldn't find containing section: %s"
268 err)))
269 (progn
270 (when (and nxml-outline-state-transform-exceptions
271 (null (nxml-get-outline-state (point))))
272 (nxml-set-outline-state (point) t))
273 (setq nxml-outline-state-transform-exceptions
274 (cons (point)
275 nxml-outline-state-transform-exceptions))
276 (< nxml-prolog-end (point))))
277 (goto-char (1- (point)))))
278 (nxml-transform-buffer-outline '((nil . hide-children)
279 (t . hide-children)))))
280
281;; These variables are dynamically bound. They are use to pass information to
282;; nxml-section-tag-transform-outline-state.
283
284(defvar nxml-outline-state-transform-exceptions nil)
285(defvar nxml-target-section-pos nil)
286(defvar nxml-depth-in-target-section nil)
287(defvar nxml-outline-state-transform-alist nil)
288
289(defun nxml-transform-buffer-outline (alist)
290 (let ((nxml-target-section-pos nil)
291 (nxml-depth-in-target-section 0)
292 (nxml-outline-state-transform-alist alist)
293 (nxml-outline-display-section-tag-function
294 'nxml-section-tag-transform-outline-state))
295 (nxml-refresh-outline))
296 (nxml-outline-adjust-point))
297
298(defun nxml-transform-subtree-outline (alist)
299 (let ((nxml-target-section-pos (nxml-section-start-position))
300 (nxml-depth-in-target-section nil)
301 (nxml-outline-state-transform-alist alist)
302 (nxml-outline-display-section-tag-function
303 'nxml-section-tag-transform-outline-state))
304 (nxml-refresh-outline))
305 (nxml-outline-adjust-point))
306
307(defun nxml-outline-pre-adjust-point ()
308 (cond ((and (< (point-min) (point))
309 (get-char-property (1- (point)) 'invisible)
310 (not (get-char-property (point) 'invisible))
311 (let ((str (or (get-char-property (point) 'before-string)
312 (get-char-property (point) 'display))))
313 (and (stringp str)
314 (>= (length str) 3)
315 (string= (substring str 0 3) "..."))))
316 ;; The ellipsis is a display property on a visible character
317 ;; following an invisible region. The position of the event
318 ;; will be the position before that character. We want to
319 ;; move point to the other side of the invisible region, i.e.
320 ;; following the last visible character before that invisible
321 ;; region.
322 (goto-char (previous-single-char-property-change (1- (point))
323 'invisible)))
324 ((and (< (point) (point-max))
325 (get-char-property (point) 'display)
326 (get-char-property (1+ (point)) 'invisible))
327 (goto-char (next-single-char-property-change (1+ (point))
328 'invisible)))
329 ((and (< (point) (point-max))
330 (get-char-property (point) 'invisible))
331 (goto-char (next-single-char-property-change (point)
332 'invisible)))))
333
334(defun nxml-outline-adjust-point ()
335 "Adjust point after showing or hiding elements."
336 (when (and (get-char-property (point) 'invisible)
337 (< (point-min) (point))
338 (get-char-property (1- (point)) 'invisible))
339 (goto-char (previous-single-char-property-change (point)
340 'invisible
341 nil
342 nxml-prolog-end))))
343
344(defun nxml-transform-outline-state (section-start-pos)
345 (let* ((old-state
346 (nxml-get-outline-state section-start-pos))
347 (change (assq old-state
348 nxml-outline-state-transform-alist)))
349 (when change
350 (nxml-set-outline-state section-start-pos
351 (cdr change)))))
352
353(defun nxml-section-tag-transform-outline-state (startp
354 section-start-pos
355 &optional
356 heading-start-pos)
357 (if (not startp)
358 (setq nxml-depth-in-target-section
359 (and nxml-depth-in-target-section
360 (> nxml-depth-in-target-section 0)
361 (1- nxml-depth-in-target-section)))
362 (cond (nxml-depth-in-target-section
363 (setq nxml-depth-in-target-section
364 (1+ nxml-depth-in-target-section)))
365 ((= section-start-pos nxml-target-section-pos)
366 (setq nxml-depth-in-target-section 0)))
367 (when (and nxml-depth-in-target-section
368 (not (member section-start-pos
369 nxml-outline-state-transform-exceptions)))
370 (nxml-transform-outline-state section-start-pos))))
371
372(defun nxml-get-outline-state (pos)
373 (get-text-property pos 'nxml-outline-state))
374
375(defun nxml-set-outline-state (pos state)
376 (nxml-with-unmodifying-text-property-changes
377 (if state
378 (put-text-property pos (1+ pos) 'nxml-outline-state state)
379 (remove-text-properties pos (1+ pos) '(nxml-outline-state nil)))))
380
381;;; Mouse interface
382
383(defun nxml-mouse-show-direct-text-content (event)
384 "Do the same as \\[nxml-show-direct-text-content] from a mouse click."
385 (interactive "e")
386 (and (nxml-mouse-set-point event)
387 (nxml-show-direct-text-content)))
388
389(defun nxml-mouse-hide-direct-text-content (event)
390 "Do the same as \\[nxml-hide-direct-text-content] from a mouse click."
391 (interactive "e")
392 (and (nxml-mouse-set-point event)
393 (nxml-hide-direct-text-content)))
394
395(defun nxml-mouse-hide-subheadings (event)
396 "Do the same as \\[nxml-hide-subheadings] from a mouse click."
397 (interactive "e")
398 (and (nxml-mouse-set-point event)
399 (nxml-hide-subheadings)))
400
401(defun nxml-mouse-show-direct-subheadings (event)
402 "Do the same as \\[nxml-show-direct-subheadings] from a mouse click."
403 (interactive "e")
404 (and (nxml-mouse-set-point event)
405 (nxml-show-direct-subheadings)))
406
407(defun nxml-mouse-set-point (event)
408 (mouse-set-point event)
409 (and nxml-prolog-end t))
410
411;; Display
412
413(defun nxml-refresh-outline ()
414 "Refresh the outline to correspond to the current XML element structure."
415 (interactive)
416 (save-excursion
417 (goto-char (point-min))
418 (kill-local-variable 'line-move-ignore-invisible)
419 (make-local-variable 'line-move-ignore-invisible)
420 (condition-case err
421 (nxml-outline-display-rest nil nil nil)
422 (nxml-outline-error
423 (nxml-report-outline-error "Cannot display outline: %s" err)))))
424
425(defvar nxml-outline-display-section-tag-function nil)
426
427(defun nxml-outline-display-rest (outline-state start-tag-indent tag-qnames)
428 "Display up to and including the end of the current element.
429OUTLINE-STATE can be nil, t, hide-children. START-TAG-INDENT is the
430indent of the start-tag of the current element, or nil if no
431containing element has a non-nil OUTLINE-STATE. TAG-QNAMES is a list
432of the qnames of the open elements. Point is after the title content.
433Leave point after the closing end-tag Return t if we had a
434non-transparent child section."
435 (let ((last-pos (point))
436 (transparent-depth 0)
437 ;; don't want ellipsis before root element
438 (had-children (not tag-qnames)))
439 (while
440 (cond ((not (nxml-section-tag-forward))
441 (if (null tag-qnames)
442 nil
443 (nxml-outline-error "missing end-tag %s"
444 (car tag-qnames))))
445 ;; section end-tag
446 ((nxml-token-end-tag-p)
447 (when nxml-outline-display-section-tag-function
448 (funcall nxml-outline-display-section-tag-function
449 nil
450 xmltok-start))
451 (let ((qname (xmltok-end-tag-qname)))
452 (unless tag-qnames
453 (nxml-outline-error "extra end-tag %s" qname))
454 (unless (string= (car tag-qnames) qname)
455 (nxml-outline-error "mismatched end-tag; expected %s, got %s"
456 (car tag-qnames)
457 qname)))
458 (cond ((> transparent-depth 0)
459 (setq transparent-depth (1- transparent-depth))
460 (setq tag-qnames (cdr tag-qnames))
461 t)
462 ((not outline-state)
463 (nxml-outline-set-overlay nil last-pos (point))
464 nil)
465 ((or (not had-children)
466 (eq outline-state 'hide-children))
467 (nxml-outline-display-single-line-end-tag last-pos)
468 nil)
469 (t
470 (nxml-outline-display-multi-line-end-tag last-pos
471 start-tag-indent)
472 nil)))
473 ;; section start-tag
474 (t
475 (let* ((qname (xmltok-start-tag-qname))
476 (section-start-pos xmltok-start)
477 (heading-start-pos
478 (and (or nxml-outline-display-section-tag-function
479 (not (eq outline-state 'had-children))
480 (not had-children))
481 (nxml-token-starts-line-p)
482 (nxml-heading-start-position))))
483 (when nxml-outline-display-section-tag-function
484 (funcall nxml-outline-display-section-tag-function
485 t
486 section-start-pos
487 heading-start-pos))
488 (setq tag-qnames (cons qname tag-qnames))
489 (if (or (not heading-start-pos)
490 (and (eq outline-state 'hide-children)
491 (setq had-children t)))
492 (setq transparent-depth (1+ transparent-depth))
493 (nxml-display-section last-pos
494 section-start-pos
495 heading-start-pos
496 start-tag-indent
497 outline-state
498 had-children
499 tag-qnames)
500 (setq had-children t)
501 (setq tag-qnames (cdr tag-qnames))
502 (setq last-pos (point))))
503 t)))
504 had-children))
505
506(defconst nxml-highlighted-less-than
507 (propertize "<" 'face 'nxml-tag-delimiter-face))
508
509(defconst nxml-highlighted-greater-than
510 (propertize ">" 'face 'nxml-tag-delimiter-face))
511
512(defconst nxml-highlighted-colon
513 (propertize ":" 'face 'nxml-element-colon-face))
514
515(defconst nxml-highlighted-slash
516 (propertize "/" 'face 'nxml-tag-slash-face))
517
518(defconst nxml-highlighted-ellipsis
519 (propertize "..." 'face 'nxml-outline-ellipsis-face))
520
521(defconst nxml-highlighted-empty-end-tag
522 (concat nxml-highlighted-ellipsis
523 nxml-highlighted-less-than
524 nxml-highlighted-slash
525 nxml-highlighted-greater-than))
526
527(defconst nxml-highlighted-inactive-minus
528 (propertize "-" 'face 'nxml-outline-indicator-face))
529
530(defconst nxml-highlighted-active-minus
531 (propertize "-" 'face 'nxml-outline-active-indicator-face))
532
533(defconst nxml-highlighted-active-plus
534 (propertize "+" 'face 'nxml-outline-active-indicator-face))
535
536(defun nxml-display-section (last-pos
537 section-start-pos
538 heading-start-pos
539 parent-indent
540 parent-outline-state
541 had-children
542 tag-qnames)
543 (let* ((section-start-pos-bol
544 (save-excursion
545 (goto-char section-start-pos)
546 (skip-chars-backward " \t")
547 (point)))
548 (outline-state (nxml-get-outline-state section-start-pos))
549 (newline-before-section-start-category
550 (cond ((and (not had-children) parent-outline-state)
551 'nxml-outline-display-ellipsis)
552 (outline-state 'nxml-outline-display-show)
553 (t nil))))
554 (nxml-outline-set-overlay (and parent-outline-state
555 'nxml-outline-display-hide)
556 last-pos
557 (1- section-start-pos-bol)
558 nil
559 t)
560 (if outline-state
561 (let* ((indent (if parent-indent
562 (+ parent-indent nxml-outline-child-indent)
563 (save-excursion
564 (goto-char section-start-pos)
565 (current-column))))
566 start-tag-overlay)
567 (nxml-outline-set-overlay newline-before-section-start-category
568 (1- section-start-pos-bol)
569 section-start-pos-bol
570 t)
571 (nxml-outline-set-overlay 'nxml-outline-display-hide
572 section-start-pos-bol
573 section-start-pos)
574 (setq start-tag-overlay
575 (nxml-outline-set-overlay 'nxml-outline-display-show
576 section-start-pos
577 (1+ section-start-pos)
578 t))
579 ;; line motion commands don't work right if start-tag-overlay
580 ;; covers multiple lines
581 (nxml-outline-set-overlay 'nxml-outline-display-hide
582 (1+ section-start-pos)
583 heading-start-pos)
584 (goto-char heading-start-pos)
585 (nxml-end-of-heading)
586 (nxml-outline-set-overlay 'nxml-outline-display-heading
587 heading-start-pos
588 (point))
589 (let* ((had-children
590 (nxml-outline-display-rest outline-state
591 indent
592 tag-qnames)))
593 (overlay-put start-tag-overlay
594 'display
595 (concat
596 ;; indent
597 (make-string indent ?\ )
598 ;; <
599 nxml-highlighted-less-than
600 ;; + or - indicator
601 (cond ((not had-children)
602 nxml-highlighted-inactive-minus)
603 ((eq outline-state 'hide-children)
604 (overlay-put start-tag-overlay
605 'category
606 'nxml-outline-display-hiding-tag)
607 nxml-highlighted-active-plus)
608 (t
609 (overlay-put start-tag-overlay
610 'category
611 'nxml-outline-display-showing-tag)
612 nxml-highlighted-active-minus))
613 ;; qname
614 (nxml-highlighted-qname (car tag-qnames))
615 ;; >
616 nxml-highlighted-greater-than))))
617 ;; outline-state nil
618 (goto-char heading-start-pos)
619 (nxml-end-of-heading)
620 (nxml-outline-set-overlay newline-before-section-start-category
621 (1- section-start-pos-bol)
622 (point)
623 t)
624 (nxml-outline-display-rest outline-state
625 (and parent-indent
626 (+ parent-indent
627 nxml-outline-child-indent))
628 tag-qnames))))
629
630(defun nxml-highlighted-qname (qname)
631 (let ((colon (string-match ":" qname)))
632 (if colon
633 (concat (propertize (substring qname 0 colon)
634 'face
635 'nxml-element-prefix-face)
636 nxml-highlighted-colon
637 (propertize (substring qname (1+ colon))
638 'face
639 'nxml-element-local-name-face))
640 (propertize qname
641 'face
642 'nxml-element-local-name-face))))
643
644(defun nxml-outline-display-single-line-end-tag (last-pos)
645 (nxml-outline-set-overlay 'nxml-outline-display-hide
646 last-pos
647 xmltok-start
648 nil
649 t)
650 (overlay-put (nxml-outline-set-overlay 'nxml-outline-display-show
651 xmltok-start
652 (point)
653 t)
654 'display
655 nxml-highlighted-empty-end-tag))
656
657(defun nxml-outline-display-multi-line-end-tag (last-pos start-tag-indent)
658 (let ((indentp (save-excursion
659 (goto-char last-pos)
660 (skip-chars-forward " \t")
661 (and (eq (char-after) ?\n)
662 (progn
663 (goto-char (1+ (point)))
664 (nxml-outline-set-overlay nil last-pos (point))
665 (setq last-pos (point))
666 (goto-char xmltok-start)
667 (beginning-of-line)
668 t))))
669 end-tag-overlay)
670 (nxml-outline-set-overlay 'nxml-outline-display-hide
671 last-pos
672 xmltok-start
673 nil
674 t)
675 (setq end-tag-overlay
676 (nxml-outline-set-overlay 'nxml-outline-display-showing-tag
677 xmltok-start
678 (point)
679 t))
680 (overlay-put end-tag-overlay
681 'display
682 (concat (if indentp
683 (make-string start-tag-indent ?\ )
684 "")
685 nxml-highlighted-less-than
686 nxml-highlighted-slash
687 nxml-highlighted-active-minus
688 (nxml-highlighted-qname (xmltok-end-tag-qname))
689 nxml-highlighted-greater-than))))
690
691(defvar nxml-outline-show-map
692 (let ((map (make-sparse-keymap)))
693 (define-key map "\C-m" 'nxml-show-direct-text-content)
694 (define-key map [mouse-2] 'nxml-mouse-show-direct-text-content)
695 map))
696
697(defvar nxml-outline-show-help "mouse-2: show")
698
699(put 'nxml-outline-display-show 'nxml-outline-display t)
700(put 'nxml-outline-display-show 'evaporate t)
701(put 'nxml-outline-display-show 'keymap nxml-outline-show-map)
702(put 'nxml-outline-display-show 'help-echo nxml-outline-show-help)
703
704(put 'nxml-outline-display-hide 'nxml-outline-display t)
705(put 'nxml-outline-display-hide 'evaporate t)
706(put 'nxml-outline-display-hide 'invisible t)
707(put 'nxml-outline-display-hide 'keymap nxml-outline-show-map)
708(put 'nxml-outline-display-hide 'help-echo nxml-outline-show-help)
709
710(put 'nxml-outline-display-ellipsis 'nxml-outline-display t)
711(put 'nxml-outline-display-ellipsis 'evaporate t)
712(put 'nxml-outline-display-ellipsis 'keymap nxml-outline-show-map)
713(put 'nxml-outline-display-ellipsis 'help-echo nxml-outline-show-help)
714(put 'nxml-outline-display-ellipsis 'before-string nxml-highlighted-ellipsis)
715
716(put 'nxml-outline-display-heading 'keymap nxml-outline-show-map)
717(put 'nxml-outline-display-heading 'help-echo nxml-outline-show-help)
718(put 'nxml-outline-display-heading 'nxml-outline-display t)
719(put 'nxml-outline-display-heading 'evaporate t)
720(put 'nxml-outline-display-heading 'face 'nxml-heading-face)
721
722(defvar nxml-outline-hiding-tag-map
723 (let ((map (make-sparse-keymap)))
724 (define-key map [mouse-1] 'nxml-mouse-show-direct-subheadings)
725 (define-key map [mouse-2] 'nxml-mouse-show-direct-text-content)
726 (define-key map "\C-m" 'nxml-show-direct-text-content)
727 map))
728
729(defvar nxml-outline-hiding-tag-help
730 "mouse-1: show subheadings, mouse-2: show text content")
731
732(put 'nxml-outline-display-hiding-tag 'nxml-outline-display t)
733(put 'nxml-outline-display-hiding-tag 'evaporate t)
734(put 'nxml-outline-display-hiding-tag 'keymap nxml-outline-hiding-tag-map)
735(put 'nxml-outline-display-hiding-tag 'help-echo nxml-outline-hiding-tag-help)
736
737(defvar nxml-outline-showing-tag-map
738 (let ((map (make-sparse-keymap)))
739 (define-key map [mouse-1] 'nxml-mouse-hide-subheadings)
740 (define-key map [mouse-2] 'nxml-mouse-show-direct-text-content)
741 (define-key map "\C-m" 'nxml-show-direct-text-content)
742 map))
743
744(defvar nxml-outline-showing-tag-help
745 "mouse-1: hide subheadings, mouse-2: show text content")
746
747(put 'nxml-outline-display-showing-tag 'nxml-outline-display t)
748(put 'nxml-outline-display-showing-tag 'evaporate t)
749(put 'nxml-outline-display-showing-tag 'keymap nxml-outline-showing-tag-map)
750(put 'nxml-outline-display-showing-tag
751 'help-echo
752 nxml-outline-showing-tag-help)
753
754(defun nxml-outline-set-overlay (category
755 start
756 end
757 &optional
758 front-advance
759 rear-advance)
760 "Replace any nxml-outline-display overlays between START and END.
761Overlays are removed if they overlay the region between START and END,
762and have a non-nil nxml-outline-display property (typically via their
763category). If CATEGORY is non-nil, they will be replaced with a new overlay
764with that category from START to END. If CATEGORY is nil, no new
765overlay will be created."
766 (when (< start end)
767 (let ((overlays (overlays-in start end))
768 overlay)
769 (while overlays
770 (setq overlay (car overlays))
771 (setq overlays (cdr overlays))
772 (when (overlay-get overlay 'nxml-outline-display)
773 (delete-overlay overlay))))
774 (and category
775 (let ((overlay (make-overlay start
776 end
777 nil
778 front-advance
779 rear-advance)))
780 (overlay-put overlay 'category category)
781 (setq line-move-ignore-invisible t)
782 overlay))))
783
784(defun nxml-end-of-heading ()
785 "Move from the start of the content of the heading to the end.
786Do not move past the end of the line."
787 (let ((pos (condition-case err
788 (and (nxml-scan-element-forward (point) t)
789 xmltok-start)
790 nil)))
791 (end-of-line)
792 (skip-chars-backward " \t")
793 (cond ((not pos)
794 (setq pos (nxml-token-before))
795 (when (eq xmltok-type 'end-tag)
796 (goto-char pos)))
797 ((< pos (point))
798 (goto-char pos)))
799 (skip-chars-backward " \t")
800 (point)))
801
802;;; Navigating section structure
803
804(defsubst nxml-token-start-tag-p ()
805 (or (eq xmltok-type 'start-tag)
806 (eq xmltok-type 'partial-start-tag)))
807
808(defsubst nxml-token-end-tag-p ()
809 (or (eq xmltok-type 'end-tag)
810 (eq xmltok-type 'partial-end-tag)))
811
812(defun nxml-token-starts-line-p ()
813 (save-excursion
814 (goto-char xmltok-start)
815 (skip-chars-backward " \t")
816 (bolp)))
817
818(defvar nxml-cached-section-tag-regexp nil)
819(defvar nxml-cached-section-element-name-regexp nil)
820
821(defsubst nxml-make-section-tag-regexp ()
822 (if (eq nxml-cached-section-element-name-regexp
823 nxml-section-element-name-regexp)
824 nxml-cached-section-tag-regexp
825 (nxml-make-section-tag-regexp-1)))
826
827(defun nxml-make-section-tag-regexp-1 ()
828 (setq nxml-cached-section-element-name-regexp nil)
829 (setq nxml-cached-section-tag-regexp
830 (concat "</?\\("
831 "\\(" xmltok-ncname-regexp ":\\)?"
832 nxml-section-element-name-regexp
833 "\\)[ \t\r\n>]"))
834 (setq nxml-cached-section-element-name-regexp
835 nxml-section-element-name-regexp)
836 nxml-cached-section-tag-regexp)
837
838(defun nxml-section-tag-forward ()
839 "Move forward past the first tag that is a section start- or end-tag.
840Return xmltok-type for tag.
841If no tag found, return nil and move to the end of the buffer."
842 (let ((case-fold-search nil)
843 (tag-regexp (nxml-make-section-tag-regexp))
844 match-end)
845 (when (< (point) nxml-prolog-end)
846 (goto-char nxml-prolog-end))
847 (while (cond ((not (re-search-forward tag-regexp nil 'move))
848 (setq xmltok-type nil)
849 nil)
850 ((progn
851 (goto-char (match-beginning 0))
852 (setq match-end (match-end 0))
853 (nxml-ensure-scan-up-to-date)
854 (let ((end (nxml-inside-end (point))))
855 (when end
856 (goto-char end)
857 t))))
858 ((progn
859 (xmltok-forward)
860 (and (memq xmltok-type '(start-tag
861 partial-start-tag
862 end-tag
863 partial-end-tag))
864 ;; just in case wildcard matched non-name chars
865 (= xmltok-name-end (1- match-end))))
866 nil)
867 (t))))
868 xmltok-type)
869
870(defun nxml-section-tag-backward ()
871 "Move backward to the end of a tag that is a section start- or end-tag.
872The position of the end of the tag must be <= point
873Point is at the end of the tag. `xmltok-start' is the start."
874 (let ((case-fold-search nil)
875 (start (point))
876 (tag-regexp (nxml-make-section-tag-regexp))
877 match-end)
878 (if (< (point) nxml-prolog-end)
879 (progn
880 (goto-char (point-min))
881 nil)
882 (while (cond ((not (re-search-backward tag-regexp
883 nxml-prolog-end
884 'move))
885 (setq xmltok-type nil)
886 (goto-char (point-min))
887 nil)
888 ((progn
889 (goto-char (match-beginning 0))
890 (setq match-end (match-end 0))
891 (nxml-ensure-scan-up-to-date)
892 (let ((pos (nxml-inside-start (point))))
893 (when pos
894 (goto-char (1- pos))
895 t))))
896 ((progn
897 (xmltok-forward)
898 (and (<= (point) start)
899 (memq xmltok-type '(start-tag
900 partial-start-tag
901 end-tag
902 partial-end-tag))
903 ;; just in case wildcard matched non-name chars
904 (= xmltok-name-end (1- match-end))))
905 nil)
906 (t (goto-char xmltok-start)
907 t)))
908 xmltok-type)))
909
910(defun nxml-section-start-position ()
911 "Return the position of the start of the section containing point.
912Signal an error on failure."
913 (condition-case err
914 (save-excursion (if (nxml-back-to-section-start)
915 (point)
916 (error "Not in section")))
917 (nxml-outline-error
918 (nxml-report-outline-error "Couldn't determine containing section: %s"
919 err))))
920
921(defun nxml-back-to-section-start (&optional invisible-ok)
922 "Try to move back to the start of the section containing point.
923The start of the section must be <= point.
924Only visible sections are included unless INVISIBLE-OK is non-nil.
925If found, return t. Otherwise move to point-min and return nil.
926If unbalanced section tags are found, signal an `nxml-outline-error'."
927 (when (or (nxml-after-section-start-tag)
928 (nxml-section-tag-backward))
929 (let (open-tags found)
930 (while (let (section-start-pos)
931 (setq section-start-pos xmltok-start)
932 (if (nxml-token-end-tag-p)
933 (setq open-tags (cons (xmltok-end-tag-qname)
934 open-tags))
935 (if (not open-tags)
936 (when (and (nxml-token-starts-line-p)
937 (or invisible-ok
938 (not (get-char-property section-start-pos
939 'invisible)))
940 (nxml-heading-start-position))
941 (setq found t))
942 (let ((qname (xmltok-start-tag-qname)))
943 (unless (string= (car open-tags) qname)
944 (nxml-outline-error "mismatched end-tag"))
945 (setq open-tags (cdr open-tags)))))
946 (goto-char section-start-pos)
947 (and (not found)
948 (nxml-section-tag-backward))))
949 found)))
950
951(defun nxml-after-section-start-tag ()
952 "If the character after point is in a section start-tag, move after it.
953Return the token type. Otherwise return nil.
954Set up variables like `xmltok-forward'."
955 (let ((pos (nxml-token-after))
956 (case-fold-search nil))
957 (when (and (memq xmltok-type '(start-tag partial-start-tag))
958 (save-excursion
959 (goto-char xmltok-start)
960 (looking-at (nxml-make-section-tag-regexp))))
961 (goto-char pos)
962 xmltok-type)))
963
964(defun nxml-heading-start-position ()
965 "Return the position of the start of the content of a heading element.
966Adjust the position to be after initial leading whitespace.
967Return nil if no heading element is found. Requires point to be
968immediately after the section's start-tag."
969 (let ((depth 0)
970 (heading-regexp (concat "\\`\\("
971 nxml-heading-element-name-regexp
972 "\\)\\'"))
973
974 (section-regexp (concat "\\`\\("
975 nxml-section-element-name-regexp
976 "\\)\\'"))
977 (start (point))
978 found)
979 (save-excursion
980 (while (and (xmltok-forward)
981 (cond ((memq xmltok-type '(end-tag partial-end-tag))
982 (and (not (string-match section-regexp
983 (xmltok-end-tag-local-name)))
984 (> depth 0)
985 (setq depth (1- depth))))
986 ;; XXX Not sure whether this is a good idea
987 ;;((eq xmltok-type 'empty-element)
988 ;; nil)
989 ((not (memq xmltok-type
990 '(start-tag partial-start-tag)))
991 t)
992 ((string-match section-regexp
993 (xmltok-start-tag-local-name))
994 nil)
995 ((string-match heading-regexp
996 (xmltok-start-tag-local-name))
997 (skip-chars-forward " \t\r\n")
998 (setq found (point))
999 nil)
1000 (t
1001 (setq depth (1+ depth))
1002 t))
1003 (<= (- (point) start) nxml-heading-scan-distance))))
1004 found))
1005
1006;;; Error handling
1007
1008(defun nxml-report-outline-error (msg err)
1009 (error msg (apply 'format (cdr err))))
1010
1011(defun nxml-outline-error (&rest args)
1012 (signal 'nxml-outline-error args))
1013
1014(put 'nxml-outline-error
1015 'error-conditions
1016 '(error nxml-error nxml-outline-error))
1017
1018(put 'nxml-outline-error
1019 'error-message
1020 "Cannot create outline of buffer that is not well-formed")
1021
1022;;; Debugging
1023
1024(defun nxml-debug-overlays ()
1025 (interactive)
1026 (let ((overlays (nreverse (overlays-in (point-min) (point-max))))
1027 overlay)
1028 (while overlays
1029 (setq overlay (car overlays))
1030 (setq overlays (cdr overlays))
1031 (when (overlay-get overlay 'nxml-outline-display)
1032 (message "overlay %s: %s...%s (%s)"
1033 (overlay-get overlay 'category)
1034 (overlay-start overlay)
1035 (overlay-end overlay)
1036 (overlay-get overlay 'display))))))
1037
1038(provide 'nxml-outln)
1039
1040;;; nxml-outln.el ends here
diff --git a/lisp/nxml/nxml-parse.el b/lisp/nxml/nxml-parse.el
new file mode 100644
index 00000000000..0e93f10103a
--- /dev/null
+++ b/lisp/nxml/nxml-parse.el
@@ -0,0 +1,320 @@
1;;; nxml-parse.el --- XML parser, sharing infrastructure with nxml-mode
2
3;; Copyright (C) 2003 Free Software Foundation, Inc.
4
5;; Author: James Clark
6;; Keywords: XML
7
8;; This program is free software; you can redistribute it and/or
9;; modify it under the terms of the GNU General Public License as
10;; published by the Free Software Foundation; either version 2 of
11;; the License, or (at your option) any later version.
12
13;; This program is distributed in the hope that it will be
14;; useful, but WITHOUT ANY WARRANTY; without even the implied
15;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16;; PURPOSE. See the GNU General Public License for more details.
17
18;; You should have received a copy of the GNU General Public
19;; License along with this program; if not, write to the Free
20;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21;; MA 02111-1307 USA
22
23;;; Commentary:
24
25;; Entry point is `nxml-parse-file'.
26
27;;; Code:
28
29(require 'nxml-util)
30(require 'xmltok)
31(require 'nxml-enc)
32(require 'nxml-ns)
33
34(defvar nxml-parse-file-name nil)
35
36(defvar nxml-validate-function nil
37 "Nil or a function to be called by `nxml-parse-file' to perform validation.
38The function will be called once for each start-tag or end-tag. The
39function is passed two arguments TEXT and START-TAG. For a start-tag,
40START-TAG is a list (NAME ATTRIBUTES) where NAME and ATTRIBUTES are in
41the same form as returned by `nxml-parse-file. For an end-tag,
42START-TAG is nil. TEXT is a string containing the text immediately
43preceding the tag, or nil if there was no such text. An empty element
44is treated as a start-tag followed by an end-tag.
45
46For a start-tag, the namespace state will be the state after
47processing the namespace declarations in the start-tag. For an
48end-tag, the namespace state will be the state before popping the
49namespace declarations for the corresponding start-tag.
50
51The function must return nil if no error is detected or a
52cons (MESSAGE . LOCATION) where MESSAGE is a string containing
53an error message and LOCATION indicates what caused the error
54as follows:
55
56- nil indicates the tag as whole caused it; this is always allowed;
57
58- text indicates the text caused it; this is allowed only if
59TEXT is non-nil;
60
61- tag-close indicates the close of the tag caused it; this is
62allowed only if START-TAG is non-nil;
63
64- (attribute-name . N) indicates that the name of the Nth attribute
65caused it; N counts from 0; this is allowed only if START-TAG is non-nil
66and N must be less than the number of attributes;
67
68- (attribute-value . N) indicates that the value of the Nth attribute
69caused it; N counts from 0; this is allowed only if START-TAG is non-nil
70and N must be less than the number of attributes.")
71
72(defun nxml-parse-file (file)
73 "Parse the XML document in FILE and return it as a list.
74An XML element is represented as a list (NAME ATTRIBUTES . CHILDREN).
75NAME is either a string, in the case where the name does not have a
76namespace, or a cons (NAMESPACE . LOCAL-NAME), where NAMESPACE is a
77symbol and LOCAL-NAME is a string, in the case where the name does
78have a namespace. NAMESPACE is a keyword whose name is `:URI', where
79URI is the namespace name. ATTRIBUTES is an alist of attributes where
80each attribute has the form (NAME . VALUE), where NAME has the same
81form as an element name, and VALUE is a string. A namespace
82declaration is represented as an attribute whose name is
83\(:http://www.w3.org/2000/xmlns/ . LOCAL-NAME). CHILDREN is a list
84containing strings and child elements; CHILDREN never contains two
85consecutive strings and never contains an empty string. Processing
86instructions and comments are not represented. The return value is a
87list representing the document element.
88
89If the XML document is not well-formed, an error having the condition
90`nxml-file-parse-error' will be signaled; the error data will be a
91list of the \(FILE POSITION MESSAGE), where POSITION is an integer
92specifying the position where the error was detected, and MESSAGE is a
93string describing the error.
94
95The current contents of FILE will be parsed even if there is a
96modified buffer currently visiting FILE.
97
98If the variable `nxml-validation-function' is non-nil, it will be
99called twice for each element, and any reported error will be signaled
100in the same way as well-formedness error."
101 (save-excursion
102 (set-buffer (nxml-parse-find-file file))
103 (unwind-protect
104 (let ((nxml-parse-file-name file))
105 (nxml-parse-instance))
106 (kill-buffer nil))))
107
108(defun nxml-parse-find-file (file)
109 (save-excursion
110 (set-buffer (get-buffer-create " *nXML Parse*"))
111 (erase-buffer)
112 (let ((set-auto-coding-function 'nxml-set-xml-coding))
113 (insert-file-contents file))
114 (current-buffer)))
115
116(defun nxml-parse-instance ()
117 (let (xmltok-dtd)
118 (xmltok-save
119 (xmltok-forward-prolog)
120 (nxml-check-xmltok-errors)
121 (nxml-ns-save
122 (nxml-parse-instance-1)))))
123
124(defun nxml-parse-instance-1 ()
125 (let* ((top (cons nil nil))
126 ;; tail is a cons cell, whose cdr is nil
127 ;; additional elements will destructively appended to tail
128 (tail top)
129 ;; stack of tails one for each open element
130 tail-stack
131 ;; list of QNames of open elements
132 open-element-tags
133 ;; list of strings buffering a text node, in reverse order
134 text
135 ;; position of beginning of first (in buffer) string in text
136 text-pos)
137 (while (xmltok-forward)
138 (nxml-check-xmltok-errors)
139 (cond ((memq xmltok-type '(start-tag end-tag empty-element))
140 (when text
141 (setq text (apply 'concat (nreverse text)))
142 (setcdr tail (cons text nil))
143 (setq tail (cdr tail)))
144 (when (not (eq xmltok-type 'end-tag))
145 (when (and (not open-element-tags)
146 (not (eq tail top)))
147 (nxml-parse-error nil "Multiple top-level elements"))
148 (setq open-element-tags
149 (cons (xmltok-start-tag-qname)
150 open-element-tags))
151 (nxml-ns-push-state)
152 (let ((tag (nxml-parse-start-tag)))
153 (nxml-validate-tag text text-pos tag)
154 (setq text nil)
155 (setcdr tail (cons tag nil))
156 (setq tail (cdr tail))
157 (setq tail-stack (cons tail tail-stack))
158 (setq tail (last tag))))
159 (when (not (eq xmltok-type 'start-tag))
160 (or (eq xmltok-type 'empty-element)
161 (equal (car open-element-tags)
162 (xmltok-end-tag-qname))
163 (if open-element-tags
164 (nxml-parse-error nil
165 "Unbalanced end-tag; expected </%s>"
166 (car open-element-tags))
167 (nxml-parse-error nil "Extra end-tag")))
168 (nxml-validate-tag text text-pos nil)
169 (setq text nil)
170 (nxml-ns-pop-state)
171 (setq open-element-tags (cdr open-element-tags))
172 (setq tail (car tail-stack))
173 (setq tail-stack (cdr tail-stack)))
174 (setq text-pos nil))
175 ((memq xmltok-type '(space data entity-ref char-ref cdata-section))
176 (cond (open-element-tags
177 (unless text-pos
178 (setq text-pos xmltok-start))
179 (setq text
180 (cons (nxml-current-text-string) text)))
181 ((not (eq xmltok-type 'space))
182 (nxml-parse-error
183 nil
184 "%s at top-level"
185 (cdr (assq xmltok-type
186 '((data . "Text characters")
187 (entity-ref . "Entity reference")
188 (char-ref . "Character reference")
189 (cdata-section . "CDATA section"))))))))))
190 (unless (cdr top)
191 (nxml-parse-error (point-max) "Missing document element"))
192 (cadr top)))
193
194(defun nxml-parse-start-tag ()
195 (let (parsed-attributes
196 parsed-namespace-attributes
197 atts att prefixes prefix ns value name)
198 (setq atts xmltok-namespace-attributes)
199 (while atts
200 (setq att (car atts))
201 (setq value (or (xmltok-attribute-value att)
202 (nxml-parse-error nil "Invalid attribute value")))
203 (setq ns (nxml-make-namespace value))
204 (setq prefix (and (xmltok-attribute-prefix att)
205 (xmltok-attribute-local-name att)))
206 (cond ((member prefix prefixes)
207 (nxml-parse-error nil "Duplicate namespace declaration"))
208 ((not prefix)
209 (nxml-ns-set-default ns))
210 (ns
211 (nxml-ns-set-prefix prefix ns))
212 (t (nxml-parse-error nil "Cannot undeclare namespace prefix")))
213 (setq prefixes (cons prefix prefixes))
214 (setq parsed-namespace-attributes
215 (cons (cons (nxml-make-name nxml-xmlns-namespace-uri
216 (xmltok-attribute-local-name att))
217 value)
218 parsed-namespace-attributes))
219 (setq atts (cdr atts)))
220 (setq name
221 (nxml-make-name
222 (let ((prefix (xmltok-start-tag-prefix)))
223 (if prefix
224 (or (nxml-ns-get-prefix prefix)
225 (nxml-parse-error (1+ xmltok-start)
226 "Prefix `%s' undeclared"
227 prefix))
228 (nxml-ns-get-default)))
229 (xmltok-start-tag-local-name)))
230 (setq atts xmltok-attributes)
231 (while atts
232 (setq att (car atts))
233 (setq ns
234 (let ((prefix (xmltok-attribute-prefix att)))
235 (and prefix
236 (or (nxml-ns-get-prefix prefix)
237 (nxml-parse-error (xmltok-attribute-name-start att)
238 "Prefix `%s' undeclared"
239 prefix)))))
240 (setq parsed-attributes
241 (let ((nm (nxml-make-name ns
242 (xmltok-attribute-local-name att))))
243 (when (assoc nm parsed-attributes)
244 (nxml-parse-error (xmltok-attribute-name-start att)
245 "Duplicate attribute"))
246 (cons (cons nm (or (xmltok-attribute-value att)
247 (nxml-parse-error nil "Invalid attribute value")))
248 parsed-attributes)))
249 (setq atts (cdr atts)))
250 ;; We want to end up with the attributes followed by the
251 ;; the namespace attributes in the same order as
252 ;; xmltok-attributes and xmltok-namespace-attributes respectively.
253 (when parsed-namespace-attributes
254 (setq parsed-attributes
255 (nconc parsed-namespace-attributes parsed-attributes)))
256 (list name (nreverse parsed-attributes))))
257
258(defun nxml-validate-tag (text text-pos tag)
259 (when nxml-validate-function
260 (let ((err (funcall nxml-validate-function text tag))
261 pos)
262 (when err
263 (setq pos (nxml-validate-error-position (cdr err)
264 (and text text-pos)
265 tag))
266 (or pos (error "Incorrect return value from %s"
267 nxml-validate-function))
268 (nxml-parse-error pos (car err))))))
269
270(defun nxml-validate-error-position (location text-pos tag)
271 (cond ((null location) xmltok-start)
272 ((eq location 'text) text-pos)
273 ((eq location 'tag-close)
274 (and tag (- (point) (if (eq xmltok-type 'empty-element ) 2 1))))
275 ((consp location)
276 (let ((att (nth (cdr location) xmltok-attributes)))
277 (when (not att)
278 (setq att (nth (- (cdr location) (length xmltok-attributes))
279 xmltok-namespace-attributes)))
280 (cond ((not att))
281 ((eq (car location) 'attribute-name)
282 (xmltok-attribute-name-start att))
283 ((eq (car location) 'attribute-value)
284 (xmltok-attribute-value-start att)))))))
285
286(defun nxml-make-name (ns local-name)
287 (if ns
288 (cons ns local-name)
289 local-name))
290
291(defun nxml-current-text-string ()
292 (cond ((memq xmltok-type '(space data))
293 (buffer-substring-no-properties xmltok-start
294 (point)))
295 ((eq xmltok-type 'cdata-section)
296 (buffer-substring-no-properties (+ xmltok-start 9)
297 (- (point) 3)))
298 ((memq xmltok-type '(char-ref entity-ref))
299 (unless xmltok-replacement
300 (nxml-parse-error nil
301 (if (eq xmltok-type 'char-ref)
302 "Reference to unsupported Unicode character"
303 "Unresolvable entity reference")))
304 xmltok-replacement)))
305
306(defun nxml-parse-error (position &rest args)
307 (nxml-signal-file-parse-error nxml-parse-file-name
308 (or position xmltok-start)
309 (apply 'format args)))
310
311(defun nxml-check-xmltok-errors ()
312 (when xmltok-errors
313 (let ((err (car (last xmltok-errors))))
314 (nxml-signal-file-parse-error nxml-parse-file-name
315 (xmltok-error-start err)
316 (xmltok-error-message err)))))
317
318(provide 'nxml-parse)
319
320;;; nxml-parse.el ends here
diff --git a/lisp/nxml/nxml-rap.el b/lisp/nxml/nxml-rap.el
new file mode 100644
index 00000000000..8b0c55e573e
--- /dev/null
+++ b/lisp/nxml/nxml-rap.el
@@ -0,0 +1,467 @@
1;;; nxml-rap.el --- low-level support for random access parsing for nXML mode
2
3;; Copyright (C) 2003, 2004 Free Software Foundation, Inc.
4
5;; Author: James Clark
6;; Keywords: XML
7
8;; This program is free software; you can redistribute it and/or
9;; modify it under the terms of the GNU General Public License as
10;; published by the Free Software Foundation; either version 2 of
11;; the License, or (at your option) any later version.
12
13;; This program is distributed in the hope that it will be
14;; useful, but WITHOUT ANY WARRANTY; without even the implied
15;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16;; PURPOSE. See the GNU General Public License for more details.
17
18;; You should have received a copy of the GNU General Public
19;; License along with this program; if not, write to the Free
20;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21;; MA 02111-1307 USA
22
23;;; Commentary:
24
25;; This uses xmltok.el to do XML parsing. The fundamental problem is
26;; how to handle changes. We don't want to maintain a complete parse
27;; tree. We also don't want to reparse from the start of the document
28;; on every keystroke. However, it is not possible in general to
29;; parse an XML document correctly starting at a random point in the
30;; middle. The main problems are comments, CDATA sections and
31;; processing instructions: these can all contain things that are
32;; indistinguishable from elements. Literals in the prolog are also a
33;; problem. Attribute value literals are not a problem because
34;; attribute value literals cannot contain less-than signs.
35;;
36;; Our strategy is to keep track of just the problematic things.
37;; Specifically, we keep track of all comments, CDATA sections and
38;; processing instructions in the instance. We do this by marking all
39;; except the first character of these with a non-nil nxml-inside text
40;; property. The value of the nxml-inside property is comment,
41;; cdata-section or processing-instruction. The first character does
42;; not have the nxml-inside property so we can find the beginning of
43;; the construct by looking for a change in a text property value
44;; (Emacs provides primitives for this). We use text properties
45;; rather than overlays, since the implementation of overlays doesn't
46;; look like it scales to large numbers of overlays in a buffer.
47;;
48;; We don't in fact track all these constructs, but only track them in
49;; some initial part of the instance. The variable `nxml-scan-end'
50;; contains the limit of where we have scanned up to for them.
51;;
52;; Thus to parse some random point in the file we first ensure that we
53;; have scanned up to that point. Then we search backwards for a
54;; <. Then we check whether the < has an nxml-inside property. If it
55;; does we go backwards to first character that does not have an
56;; nxml-inside property (this character must be a <). Then we start
57;; parsing forward from the < we have found.
58;;
59;; The prolog has to be parsed specially, so we also keep track of the
60;; end of the prolog in `nxml-prolog-end'. The prolog is reparsed on
61;; every change to the prolog. This won't work well if people try to
62;; edit huge internal subsets. Hopefully that will be rare.
63;;
64;; We keep track of the changes by adding to the buffer's
65;; after-change-functions hook. Scanning is also done as a
66;; prerequisite to fontification by adding to fontification-functions
67;; (in the same way as jit-lock). This means that scanning for these
68;; constructs had better be quick. Fortunately it is. Firstly, the
69;; typical proportion of comments, CDATA sections and processing
70;; instructions is small relative to other things. Secondly, to scan
71;; we just search for the regexp <[!?].
72;;
73;; One problem is unclosed comments, processing instructions and CDATA
74;; sections. Suppose, for example, we encounter a <!-- but there's no
75;; matching -->. This is not an unexpected situation if the user is
76;; creating a comment. It is not helpful to treat the whole of the
77;; file starting from the <!-- onwards as a single unclosed comment
78;; token. Instead we treat just the <!-- as a piece of not well-formed
79;; markup and continue. The problem is that if at some later stage a
80;; --> gets added to the buffer after the unclosed <!--, we will need
81;; to reparse the buffer starting from the <!--. We need to keep
82;; track of these reparse dependencies; they are called dependent
83;; regions in the code.
84
85;;; Code:
86
87(require 'xmltok)
88(require 'nxml-util)
89
90(defvar nxml-prolog-end nil
91 "Integer giving position following end of the prolog.")
92(make-variable-buffer-local 'nxml-prolog-end)
93
94(defvar nxml-scan-end nil
95 "Marker giving position up to which we have scanned.
96nxml-scan-end must be >= nxml-prolog-end. Furthermore, nxml-scan-end
97must not an inside position in the following sense. A position is
98inside if the following character is a part of, but not the first
99character of, a CDATA section, comment or processing instruction.
100Furthermore all positions >= nxml-prolog-end and < nxml-scan-end that
101are inside positions must have a non-nil nxml-inside property whose
102value is a symbol specifying what it is inside. Any characters with a
103non-nil fontified property must have position < nxml-scan-end and the
104correct face. Dependent regions must also be established for any
105unclosed constructs starting before nxml-scan-end.
106There must be no nxml-inside properties after nxml-scan-end.")
107(make-variable-buffer-local 'nxml-scan-end)
108
109(defsubst nxml-get-inside (pos)
110 (get-text-property pos 'nxml-inside))
111
112(defsubst nxml-clear-inside (start end)
113 (remove-text-properties start end '(nxml-inside nil)))
114
115(defsubst nxml-set-inside (start end type)
116 (put-text-property start end 'nxml-inside type))
117
118(defun nxml-inside-end (pos)
119 "Return the end of the inside region containing POS.
120Return nil if the character at POS is not inside."
121 (if (nxml-get-inside pos)
122 (or (next-single-property-change pos 'nxml-inside)
123 (point-max))
124 nil))
125
126(defun nxml-inside-start (pos)
127 "Return the start of the inside region containing POS.
128Return nil if the character at POS is not inside."
129 (if (nxml-get-inside pos)
130 (or (previous-single-property-change (1+ pos) 'nxml-inside)
131 (point-min))
132 nil))
133
134;;; Change management
135
136(defun nxml-scan-after-change (start end)
137 "Restore `nxml-scan-end' invariants after a change.
138The change happened between START and END.
139Return position after which lexical state is unchanged.
140END must be > nxml-prolog-end."
141 (if (>= start nxml-scan-end)
142 nxml-scan-end
143 (goto-char start)
144 (nxml-move-outside-backwards)
145 (setq start (point))
146 (let ((inside-remove-start start)
147 xmltok-errors
148 xmltok-dependent-regions)
149 (while (or (when (xmltok-forward-special (min end nxml-scan-end))
150 (when (memq xmltok-type
151 '(comment
152 cdata-section
153 processing-instruction))
154 (nxml-clear-inside inside-remove-start
155 (1+ xmltok-start))
156 (nxml-set-inside (1+ xmltok-start)
157 (point)
158 xmltok-type)
159 (setq inside-remove-start (point)))
160 (if (< (point) (min end nxml-scan-end))
161 t
162 (setq end (point))
163 nil))
164 ;; The end of the change was inside but is now outside.
165 ;; Imagine something really weird like
166 ;; <![CDATA[foo <!-- bar ]]> <![CDATA[ stuff --> <!-- ]]> -->
167 ;; and suppose we deleted "<![CDATA[f"
168 (let ((inside-end (nxml-inside-end end)))
169 (when inside-end
170 (setq end inside-end)
171 t))))
172 (nxml-clear-inside inside-remove-start end)
173 (nxml-clear-dependent-regions start end)
174 (nxml-mark-parse-dependent-regions))
175 (when (> end nxml-scan-end)
176 (set-marker nxml-scan-end end))
177 end))
178
179(defun nxml-scan-prolog ()
180 (goto-char (point-min))
181 (let (xmltok-dtd
182 xmltok-errors
183 xmltok-dependent-regions)
184 (setq nxml-prolog-regions (xmltok-forward-prolog))
185 (setq nxml-prolog-end (point))
186 (nxml-clear-inside (point-min) nxml-prolog-end)
187 (nxml-clear-dependent-regions (point-min) nxml-prolog-end)
188 (nxml-mark-parse-dependent-regions))
189 (when (< nxml-scan-end nxml-prolog-end)
190 (set-marker nxml-scan-end nxml-prolog-end)))
191
192
193;;; Dependent regions
194
195(defun nxml-adjust-start-for-dependent-regions (start end pre-change-length)
196 (let ((overlays (overlays-in (1- start) start))
197 (adjusted-start start))
198 (while overlays
199 (let* ((overlay (car overlays))
200 (ostart (overlay-start overlay)))
201 (when (and (eq (overlay-get overlay 'category) 'nxml-dependent)
202 (< ostart adjusted-start))
203 (let ((funargs (overlay-get overlay 'nxml-funargs)))
204 (when (apply (car funargs)
205 (append (list start
206 end
207 pre-change-length
208 ostart
209 (overlay-end overlay))
210 (cdr funargs)))
211 (setq adjusted-start ostart)))))
212 (setq overlays (cdr overlays)))
213 adjusted-start))
214
215(defun nxml-mark-parse-dependent-regions ()
216 (while xmltok-dependent-regions
217 (apply 'nxml-mark-parse-dependent-region
218 (car xmltok-dependent-regions))
219 (setq xmltok-dependent-regions
220 (cdr xmltok-dependent-regions))))
221
222(defun nxml-mark-parse-dependent-region (fun start end &rest args)
223 (let ((overlay (make-overlay start end nil t t)))
224 (overlay-put overlay 'category 'nxml-dependent)
225 (overlay-put overlay 'nxml-funargs (cons fun args))))
226
227(put 'nxml-dependent 'evaporate t)
228
229(defun nxml-clear-dependent-regions (start end)
230 (let ((overlays (overlays-in start end)))
231 (while overlays
232 (let* ((overlay (car overlays))
233 (category (overlay-get overlay 'category)))
234 (when (and (eq category 'nxml-dependent)
235 (<= start (overlay-start overlay)))
236 (delete-overlay overlay)))
237 (setq overlays (cdr overlays)))))
238
239;;; Random access parsing
240
241(defun nxml-token-after ()
242 "Return the position after the token containing the char after point.
243Sets up the variables `xmltok-type', `xmltok-start',
244`xmltok-name-end', `xmltok-name-colon', `xmltok-attributes',
245`xmltok-namespace-attributes' in the same was as does
246`xmltok-forward'. The prolog will be treated as a single token with
247type `prolog'."
248 (let ((pos (point)))
249 (if (< pos nxml-prolog-end)
250 (progn
251 (setq xmltok-type 'prolog
252 xmltok-start (point-min))
253 (min nxml-prolog-end (point-max)))
254 (nxml-ensure-scan-up-to-date)
255 (if (nxml-get-inside pos)
256 (save-excursion
257 (nxml-move-outside-backwards)
258 (xmltok-forward)
259 (point))
260 (save-excursion
261 (if (or (eq (char-after) ?<)
262 (search-backward "<"
263 (max (point-min) nxml-prolog-end)
264 t))
265 (nxml-move-outside-backwards)
266 (goto-char (if (<= (point-min) nxml-prolog-end)
267 nxml-prolog-end
268 (or (nxml-inside-end (point-min))
269 (point-min)))))
270 (while (and (nxml-tokenize-forward)
271 (<= (point) pos)))
272 (point))))))
273
274(defun nxml-token-before ()
275 "Return the position after the token containing the char before point.
276Sets variables like `nxml-token-after'."
277 (if (/= (point-min) (point))
278 (save-excursion
279 (goto-char (1- (point)))
280 (nxml-token-after))
281 (setq xmltok-start (point))
282 (setq xmltok-type nil)
283 (point)))
284
285(defun nxml-tokenize-forward ()
286 (let (xmltok-dependent-regions
287 xmltok-errors)
288 (when (and (xmltok-forward)
289 (> (point) nxml-scan-end))
290 (cond ((memq xmltok-type '(comment
291 cdata-section
292 processing-instruction))
293 (nxml-with-unmodifying-text-property-changes
294 (nxml-set-inside (1+ xmltok-start) (point) xmltok-type)))
295 (xmltok-dependent-regions
296 (nxml-mark-parse-dependent-regions)))
297 (set-marker nxml-scan-end (point)))
298 xmltok-type))
299
300(defun nxml-move-outside-backwards ()
301 "Move point to first character of the containing special thing.
302Leave point unmoved if it is not inside anything special."
303 (let ((start (nxml-inside-start (point))))
304 (when start
305 (goto-char (1- start))
306 (when (nxml-get-inside (point))
307 (error "Char before inside-start at %s had nxml-inside property %s"
308 (point)
309 (nxml-get-inside (point)))))))
310
311(defun nxml-ensure-scan-up-to-date ()
312 (let ((pos (point)))
313 (when (< nxml-scan-end pos)
314 (save-excursion
315 (goto-char nxml-scan-end)
316 (let (xmltok-errors
317 xmltok-dependent-regions)
318 (while (when (xmltok-forward-special pos)
319 (when (memq xmltok-type
320 '(comment
321 processing-instruction
322 cdata-section))
323 (nxml-with-unmodifying-text-property-changes
324 (nxml-set-inside (1+ xmltok-start)
325 (point)
326 xmltok-type)))
327 (if (< (point) pos)
328 t
329 (setq pos (point))
330 nil)))
331 (nxml-clear-dependent-regions nxml-scan-end pos)
332 (nxml-mark-parse-dependent-regions)
333 (set-marker nxml-scan-end pos))))))
334
335;;; Element scanning
336
337(defun nxml-scan-element-forward (from &optional up)
338 "Scan forward from FROM over a single balanced element.
339Point must between tokens. Return the position of the end of the tag
340that ends the element. `xmltok-start' will contain the position of the
341start of the tag. If UP is non-nil, then scan past end-tag of element
342containing point. If no element is found, return nil. If a
343well-formedness error prevents scanning, signal an nxml-scan-error.
344Point is not moved."
345 (let ((open-tags (and up t))
346 found)
347 (save-excursion
348 (goto-char from)
349 (while (cond ((not (nxml-tokenize-forward))
350 (when (consp open-tags)
351 (nxml-scan-error (cadr open-tags)
352 "Start-tag has no end-tag"))
353 nil)
354 ((eq xmltok-type 'start-tag)
355 (setq open-tags
356 (cons (xmltok-start-tag-qname)
357 (cons xmltok-start
358 open-tags)))
359 t)
360 ((eq xmltok-type 'end-tag)
361 (cond ((not open-tags) nil)
362 ((not (consp open-tags)) (setq found (point)) nil)
363 ((not (string= (car open-tags)
364 (xmltok-end-tag-qname)))
365 (nxml-scan-error (+ 2 xmltok-start)
366 "Mismatched end-tag; \
367expected `%s'"
368 (car open-tags)))
369 ((setq open-tags (cddr open-tags)) t)
370 (t (setq found (point)) nil)))
371 ((memq xmltok-type '(empty-element
372 partial-empty-element))
373 (if open-tags
374 t
375 (setq found (point))
376 nil))
377 ((eq xmltok-type 'partial-end-tag)
378 (cond ((not open-tags) nil)
379 ((not (consp open-tags)) (setq found (point)) nil)
380 ((setq open-tags (cddr open-tags)) t)
381 (t (setq found (point)) nil)))
382 ((eq xmltok-type 'partial-start-tag)
383 (nxml-scan-error xmltok-start
384 "Missing `>'"))
385 (t t))))
386 found))
387
388(defun nxml-scan-element-backward (from &optional up bound)
389 "Scan backward from FROM over a single balanced element.
390Point must between tokens. Return the position of the end of the tag
391that starts the element. `xmltok-start' will contain the position of
392the start of the tag. If UP is non-nil, then scan past start-tag of
393element containing point. If BOUND is non-nil, then don't scan back
394past BOUND. If no element is found, return nil. If a well-formedness
395error prevents scanning, signal an nxml-scan-error. Point is not
396moved."
397 (let ((open-tags (and up t))
398 token-end found)
399 (save-excursion
400 (goto-char from)
401 (while (cond ((or (< (point) nxml-prolog-end)
402 (not (search-backward "<"
403 (max (or bound 0)
404 nxml-prolog-end)
405 t)))
406 (when (and (consp open-tags) (not bound))
407 (nxml-scan-error (cadr open-tags)
408 "End-tag has no start-tag"))
409 nil)
410 ((progn
411 (nxml-move-outside-backwards)
412 (save-excursion
413 (nxml-tokenize-forward)
414 (setq token-end (point)))
415 (eq xmltok-type 'end-tag))
416 (setq open-tags
417 (cons (xmltok-end-tag-qname)
418 (cons xmltok-start open-tags)))
419 t)
420 ((eq xmltok-type 'start-tag)
421 (cond ((not open-tags) nil)
422 ((not (consp open-tags))
423 (setq found token-end)
424 nil)
425 ((and (car open-tags)
426 (not (string= (car open-tags)
427 (xmltok-start-tag-qname))))
428 (nxml-scan-error (1+ xmltok-start)
429 "Mismatched start-tag; \
430expected `%s'"
431 (car open-tags)))
432 ((setq open-tags (cddr open-tags)) t)
433 (t (setq found token-end) nil)))
434 ((memq xmltok-type '(empty-element
435 partial-empty-element))
436 (if open-tags
437 t
438 (setq found token-end)
439 nil))
440 ((eq xmltok-type 'partial-end-tag)
441 (setq open-tags
442 (cons nil (cons xmltok-start open-tags)))
443 t)
444 ((eq xmltok-type 'partial-start-tag)
445 ;; if we have only a partial-start-tag
446 ;; then it's unlikely that there's a matching
447 ;; end-tag, so it's probably not helpful
448 ;; to treat it as a complete start-tag
449 (nxml-scan-error xmltok-start
450 "Missing `>'"))
451 (t t))))
452 found))
453
454(defun nxml-scan-error (&rest args)
455 (signal 'nxml-scan-error args))
456
457(put 'nxml-scan-error
458 'error-conditions
459 '(error nxml-error nxml-scan-error))
460
461(put 'nxml-scan-error
462 'error-message
463 "Scan over element that is not well-formed")
464
465(provide 'nxml-rap)
466
467;;; nxml-rap.el ends here
diff --git a/lisp/nxml/nxml-uchnm.el b/lisp/nxml/nxml-uchnm.el
new file mode 100644
index 00000000000..fbb60745159
--- /dev/null
+++ b/lisp/nxml/nxml-uchnm.el
@@ -0,0 +1,257 @@
1;;; nxml-uchnm.el --- support for Unicode standard cha names in nxml-mode
2
3;; Copyright (C) 2003 Free Software Foundation, Inc.
4
5;; Author: James Clark
6;; Keywords: XML
7
8;; This program is free software; you can redistribute it and/or
9;; modify it under the terms of the GNU General Public License as
10;; published by the Free Software Foundation; either version 2 of
11;; the License, or (at your option) any later version.
12
13;; This program is distributed in the hope that it will be
14;; useful, but WITHOUT ANY WARRANTY; without even the implied
15;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16;; PURPOSE. See the GNU General Public License for more details.
17
18;; You should have received a copy of the GNU General Public
19;; License along with this program; if not, write to the Free
20;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21;; MA 02111-1307 USA
22
23;;; Commentary:
24
25;; This enables the use of the character names defined in the Unicode
26;; Standard. The use of the names can be controlled on a per-block
27;; basis, so as both to reduce memory usage and loading time,
28;; and to make completion work better.
29;; The main entry point is `nxml-enable-unicode-char-name-sets'. Typically,
30;; this is added to `nxml-mode-hook' (rng-auto.el does this already).
31;; To customize the blocks for which names are used
32
33;;; Code:
34
35(require 'nxml-mode)
36
37(defconst nxml-unicode-blocks
38 '(("Basic Latin" #x0000 #x007F)
39 ("Latin-1 Supplement" #x0080 #x00FF)
40 ("Latin Extended-A" #x0100 #x017F)
41 ("Latin Extended-B" #x0180 #x024F)
42 ("IPA Extensions" #x0250 #x02AF)
43 ("Spacing Modifier Letters" #x02B0 #x02FF)
44 ("Combining Diacritical Marks" #x0300 #x036F)
45 ("Greek and Coptic" #x0370 #x03FF)
46 ("Cyrillic" #x0400 #x04FF)
47 ("Cyrillic Supplementary" #x0500 #x052F)
48 ("Armenian" #x0530 #x058F)
49 ("Hebrew" #x0590 #x05FF)
50 ("Arabic" #x0600 #x06FF)
51 ("Syriac" #x0700 #x074F)
52 ("Thaana" #x0780 #x07BF)
53 ("Devanagari" #x0900 #x097F)
54 ("Bengali" #x0980 #x09FF)
55 ("Gurmukhi" #x0A00 #x0A7F)
56 ("Gujarati" #x0A80 #x0AFF)
57 ("Oriya" #x0B00 #x0B7F)
58 ("Tamil" #x0B80 #x0BFF)
59 ("Telugu" #x0C00 #x0C7F)
60 ("Kannada" #x0C80 #x0CFF)
61 ("Malayalam" #x0D00 #x0D7F)
62 ("Sinhala" #x0D80 #x0DFF)
63 ("Thai" #x0E00 #x0E7F)
64 ("Lao" #x0E80 #x0EFF)
65 ("Tibetan" #x0F00 #x0FFF)
66 ("Myanmar" #x1000 #x109F)
67 ("Georgian" #x10A0 #x10FF)
68 ("Hangul Jamo" #x1100 #x11FF)
69 ("Ethiopic" #x1200 #x137F)
70 ("Cherokee" #x13A0 #x13FF)
71 ("Unified Canadian Aboriginal Syllabics" #x1400 #x167F)
72 ("Ogham" #x1680 #x169F)
73 ("Runic" #x16A0 #x16FF)
74 ("Tagalog" #x1700 #x171F)
75 ("Hanunoo" #x1720 #x173F)
76 ("Buhid" #x1740 #x175F)
77 ("Tagbanwa" #x1760 #x177F)
78 ("Khmer" #x1780 #x17FF)
79 ("Mongolian" #x1800 #x18AF)
80 ("Latin Extended Additional" #x1E00 #x1EFF)
81 ("Greek Extended" #x1F00 #x1FFF)
82 ("General Punctuation" #x2000 #x206F)
83 ("Superscripts and Subscripts" #x2070 #x209F)
84 ("Currency Symbols" #x20A0 #x20CF)
85 ("Combining Diacritical Marks for Symbols" #x20D0 #x20FF)
86 ("Letterlike Symbols" #x2100 #x214F)
87 ("Number Forms" #x2150 #x218F)
88 ("Arrows" #x2190 #x21FF)
89 ("Mathematical Operators" #x2200 #x22FF)
90 ("Miscellaneous Technical" #x2300 #x23FF)
91 ("Control Pictures" #x2400 #x243F)
92 ("Optical Character Recognition" #x2440 #x245F)
93 ("Enclosed Alphanumerics" #x2460 #x24FF)
94 ("Box Drawing" #x2500 #x257F)
95 ("Block Elements" #x2580 #x259F)
96 ("Geometric Shapes" #x25A0 #x25FF)
97 ("Miscellaneous Symbols" #x2600 #x26FF)
98 ("Dingbats" #x2700 #x27BF)
99 ("Miscellaneous Mathematical Symbols-A" #x27C0 #x27EF)
100 ("Supplemental Arrows-A" #x27F0 #x27FF)
101 ("Braille Patterns" #x2800 #x28FF)
102 ("Supplemental Arrows-B" #x2900 #x297F)
103 ("Miscellaneous Mathematical Symbols-B" #x2980 #x29FF)
104 ("Supplemental Mathematical Operators" #x2A00 #x2AFF)
105 ("CJK Radicals Supplement" #x2E80 #x2EFF)
106 ("Kangxi Radicals" #x2F00 #x2FDF)
107 ("Ideographic Description Characters" #x2FF0 #x2FFF)
108 ("CJK Symbols and Punctuation" #x3000 #x303F)
109 ("Hiragana" #x3040 #x309F)
110 ("Katakana" #x30A0 #x30FF)
111 ("Bopomofo" #x3100 #x312F)
112 ("Hangul Compatibility Jamo" #x3130 #x318F)
113 ("Kanbun" #x3190 #x319F)
114 ("Bopomofo Extended" #x31A0 #x31BF)
115 ("Katakana Phonetic Extensions" #x31F0 #x31FF)
116 ("Enclosed CJK Letters and Months" #x3200 #x32FF)
117 ("CJK Compatibility" #x3300 #x33FF)
118 ("CJK Unified Ideographs Extension A" #x3400 #x4DBF)
119 ;;("CJK Unified Ideographs" #x4E00 #x9FFF)
120 ("Yi Syllables" #xA000 #xA48F)
121 ("Yi Radicals" #xA490 #xA4CF)
122 ;;("Hangul Syllables" #xAC00 #xD7AF)
123 ;;("High Surrogates" #xD800 #xDB7F)
124 ;;("High Private Use Surrogates" #xDB80 #xDBFF)
125 ;;("Low Surrogates" #xDC00 #xDFFF)
126 ;;("Private Use Area" #xE000 #xF8FF)
127 ;;("CJK Compatibility Ideographs" #xF900 #xFAFF)
128 ("Alphabetic Presentation Forms" #xFB00 #xFB4F)
129 ("Arabic Presentation Forms-A" #xFB50 #xFDFF)
130 ("Variation Selectors" #xFE00 #xFE0F)
131 ("Combining Half Marks" #xFE20 #xFE2F)
132 ("CJK Compatibility Forms" #xFE30 #xFE4F)
133 ("Small Form Variants" #xFE50 #xFE6F)
134 ("Arabic Presentation Forms-B" #xFE70 #xFEFF)
135 ("Halfwidth and Fullwidth Forms" #xFF00 #xFFEF)
136 ("Specials" #xFFF0 #xFFFF)
137 ("Old Italic" #x10300 #x1032F)
138 ("Gothic" #x10330 #x1034F)
139 ("Deseret" #x10400 #x1044F)
140 ("Byzantine Musical Symbols" #x1D000 #x1D0FF)
141 ("Musical Symbols" #x1D100 #x1D1FF)
142 ("Mathematical Alphanumeric Symbols" #x1D400 #x1D7FF)
143 ;;("CJK Unified Ideographs Extension B" #x20000 #x2A6DF)
144 ;;("CJK Compatibility Ideographs Supplement" #x2F800 #x2FA1F)
145 ("Tags" #xE0000 #xE007F)
146 ;;("Supplementary Private Use Area-A" #xF0000 #xFFFFF)
147 ;;("Supplementary Private Use Area-B" #x100000 #x10FFFF)
148 )
149 "List of Unicode blocks.
150For each block there is a list (NAME FIRST LAST), where
151NAME is a string giving the offical name of the block,
152FIRST is the first code-point and LAST is the last code-point.
153Blocks containing only characters with algorithmic names or no names
154are omitted.")
155
156(defun nxml-unicode-block-char-name-set (name)
157 "Return a symbol for a block whose offical Unicode name is NAME.
158The symbol is generated by downcasing and replacing each space
159by a hyphen."
160 (intern (replace-regexp-in-string " " "-" (downcase name))))
161
162;; This is intended to be a superset of the coverage
163;; of existing standard entity sets.
164(defvar nxml-enabled-unicode-blocks-default
165 '(basic-latin
166 latin-1-supplement
167 latin-extended-a
168 latin-extended-b
169 ipa-extensions
170 spacing-modifier-letters
171 combining-diacritical-marks
172 greek-and-coptic
173 cyrillic
174 general-punctuation
175 superscripts-and-subscripts
176 currency-symbols
177 combining-diacritical-marks-for-symbols
178 letterlike-symbols
179 number-forms
180 arrows
181 mathematical-operators
182 miscellaneous-technical
183 control-pictures
184 optical-character-recognition
185 enclosed-alphanumerics
186 box-drawing
187 block-elements
188 geometric-shapes
189 miscellaneous-symbols
190 dingbats
191 miscellaneous-mathematical-symbols-a
192 supplemental-arrows-a
193 supplemental-arrows-b
194 miscellaneous-mathematical-symbols-b
195 supplemental-mathematical-operators
196 cjk-symbols-and-punctuation
197 alphabetic-presentation-forms
198 variation-selectors
199 small-form-variants
200 specials
201 mathematical-alphanumeric-symbols)
202 "Default value for `nxml-enabled-unicode-blocks'.")
203
204(let ((dir (file-name-directory load-file-name)))
205 (mapcar (lambda (block)
206 (let ((sym (nxml-unicode-block-char-name-set (car block))))
207 (nxml-autoload-char-name-set
208 sym
209 (expand-file-name
210 (format "char-name/unicode/%05X-%05X"
211 (nth 1 block)
212 (nth 2 block))
213 dir))))
214 nxml-unicode-blocks))
215
216(defvar nxml-enable-unicode-char-name-sets-flag nil)
217
218(defcustom nxml-enabled-unicode-blocks nxml-enabled-unicode-blocks-default
219 "List of Unicode blocks for which Unicode character names are enabled.
220Each block is identified by a symbol derived from the name
221of the block by downcasing and replacing each space by a hyphen."
222 :set (lambda (sym value)
223 (set-default 'nxml-enabled-unicode-blocks value)
224 (when nxml-enable-unicode-char-name-sets-flag
225 (nxml-enable-unicode-char-name-sets-1)))
226 :type (cons 'set
227 (mapcar (lambda (block)
228 `(const :tag ,(format "%s (%04X-%04X)"
229 (nth 0 block)
230 (nth 1 block)
231 (nth 2 block))
232 ,(nxml-unicode-block-char-name-set
233 (nth 0 block))))
234 nxml-unicode-blocks)))
235
236;;;###autoload
237(defun nxml-enable-unicode-char-name-sets ()
238 "Enable the use of Unicode standard names for characters.
239The Unicode blocks for which names are enabled is controlled by
240the variable `nxml-enabled-unicode-blocks'."
241 (interactive)
242 (setq nxml-char-name-ignore-case t)
243 (setq nxml-enable-unicode-char-name-sets-flag t)
244 (nxml-enable-unicode-char-name-sets-1))
245
246(defun nxml-enable-unicode-char-name-sets-1 ()
247 (mapcar (lambda (block)
248 (nxml-disable-char-name-set
249 (nxml-unicode-block-char-name-set (car block))))
250 nxml-unicode-blocks)
251 (mapcar (lambda (nameset)
252 (nxml-enable-char-name-set nameset))
253 nxml-enabled-unicode-blocks))
254
255(provide 'nxml-uchnm)
256
257;;; nxml-uchnm.el ends here
diff --git a/lisp/nxml/nxml-util.el b/lisp/nxml/nxml-util.el
new file mode 100644
index 00000000000..070bdf8ea99
--- /dev/null
+++ b/lisp/nxml/nxml-util.el
@@ -0,0 +1,100 @@
1;;; nxml-util.el --- utility functions for nxml-*.el
2
3;; Copyright (C) 2003 Free Software Foundation, Inc.
4
5;; Author: James Clark
6;; Keywords: XML
7
8;; This program is free software; you can redistribute it and/or
9;; modify it under the terms of the GNU General Public License as
10;; published by the Free Software Foundation; either version 2 of
11;; the License, or (at your option) any later version.
12
13;; This program is distributed in the hope that it will be
14;; useful, but WITHOUT ANY WARRANTY; without even the implied
15;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16;; PURPOSE. See the GNU General Public License for more details.
17
18;; You should have received a copy of the GNU General Public
19;; License along with this program; if not, write to the Free
20;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21;; MA 02111-1307 USA
22
23;;; Commentary:
24
25;;; Code:
26
27(defun nxml-make-namespace (str)
28 "Return a symbol for the namespace URI STR.
29STR must be a string. If STR is the empty string, return nil.
30Otherwise, return the symbol whose name is STR prefixed with a colon."
31 (if (string-equal str "")
32 nil
33 (intern (concat ":" str))))
34
35(defun nxml-namespace-name (ns)
36 "Return the namespace URI corresponding to the symbol NS.
37This is the inverse of `nxml-make-namespace'."
38 (and ns (substring (symbol-name ns) 1)))
39
40(defconst nxml-xml-namespace-uri
41 (nxml-make-namespace "http://www.w3.org/XML/1998/namespace"))
42
43(defconst nxml-xmlns-namespace-uri
44 (nxml-make-namespace "http://www.w3.org/2000/xmlns/"))
45
46(defmacro nxml-with-unmodifying-text-property-changes (&rest body)
47 "Evaluate BODY without any text property changes modifying the buffer.
48Any text properties changes happen as usual but the changes are not treated as
49modifications to the buffer."
50 (let ((modified (make-symbol "modified")))
51 `(let ((,modified (buffer-modified-p))
52 (inhibit-read-only t)
53 (inhibit-modification-hooks t)
54 (buffer-undo-list t)
55 (deactivate-mark nil)
56 ;; Apparently these avoid file locking problems.
57 (buffer-file-name nil)
58 (buffer-file-truename nil))
59 (unwind-protect
60 (progn ,@body)
61 (unless ,modified
62 (restore-buffer-modified-p nil))))))
63
64(put 'nxml-with-unmodifying-text-property-changes 'lisp-indent-function 0)
65(def-edebug-spec nxml-with-unmodifying-text-property-changes t)
66
67(defmacro nxml-with-invisible-motion (&rest body)
68 "Evaluate body without calling any point motion hooks."
69 `(let ((inhibit-point-motion-hooks t))
70 ,@body))
71
72(put 'nxml-with-invisible-motion 'lisp-indent-function 0)
73(def-edebug-spec nxml-with-invisible-motion t)
74
75(defun nxml-display-file-parse-error (err)
76 (let* ((filename (nth 1 err))
77 (buffer (find-file-noselect filename))
78 (pos (nth 2 err))
79 (message (nth 3 err)))
80 (pop-to-buffer buffer)
81 ;; What's the right thing to do if the buffer's modified?
82 ;; The position in the saved file could be completely different.
83 (goto-char (if (buffer-modified-p) 1 pos))
84 (error "%s" message)))
85
86(defun nxml-signal-file-parse-error (file pos message &optional error-symbol)
87 (signal (or error-symbol 'nxml-file-parse-error)
88 (list file pos message)))
89
90(put 'nxml-file-parse-error
91 'error-conditions
92 '(error nxml-file-parse-error))
93
94(put 'nxml-parse-file-error
95 'error-message
96 "Error parsing file")
97
98(provide 'nxml-util)
99
100;;; nxml-util.el ends here
diff --git a/lisp/nxml/rng-auto.el b/lisp/nxml/rng-auto.el
new file mode 100644
index 00000000000..a0f95fc51a6
--- /dev/null
+++ b/lisp/nxml/rng-auto.el
@@ -0,0 +1,244 @@
1;;; rng-auto.el --- automatically extracted autoloads for RELAX NG
2
3;; Copyright (C) 2003 Free Software Foundation, Inc.
4
5;; Author: James Clark
6;; Keywords: XML, RelaxNG
7
8;; This program is free software; you can redistribute it and/or
9;; modify it under the terms of the GNU General Public License as
10;; published by the Free Software Foundation; either version 2 of
11;; the License, or (at your option) any later version.
12
13;; This program is distributed in the hope that it will be
14;; useful, but WITHOUT ANY WARRANTY; without even the implied
15;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16;; PURPOSE. See the GNU General Public License for more details.
17
18;; You should have received a copy of the GNU General Public
19;; License along with this program; if not, write to the Free
20;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21;; MA 02111-1307 USA
22
23(setq nxml-version "20041004")
24
25(when (featurep 'mucs)
26 (error "nxml-mode is not compatible with Mule-UCS"))
27
28(let* ((dir (file-name-directory load-file-name))
29 (schema-dir (file-name-as-directory
30 (expand-file-name "schemas" data-directory))))
31 (unless (member dir load-path)
32 (setq load-path (cons dir load-path)))
33 (setq rng-schema-locating-files-default
34 (list "schemas.xml"
35 (abbreviate-file-name
36 (expand-file-name "schemas.xml" schema-dir))))
37 (setq rng-schema-locating-file-schema-file
38 (expand-file-name "locate.rnc" schema-dir)))
39
40;; Users shouldn't edit this.
41;; Instead they should customize `rng-preferred-prefix-alist'.
42
43(setq rng-preferred-prefix-alist-default
44 ;; For XHTML and RELAX NG, prefer no prefix
45 '(("http://www.w3.org/1999/XSL/Transform" . "xsl")
46 ("http://www.w3.org/1999/02/22-rdf-syntax-ns#" . "rdf")))
47
48(add-hook 'nxml-mode-hook 'rng-nxml-mode-init)
49(add-hook 'nxml-mode-hook 'nxml-enable-unicode-char-name-sets)
50
51(setq rng-schema-loader-alist '(("rnc" . rng-c-load-schema)))
52
53(require 'nxml-enc)
54;; Install our own `set-auto-coding-function'.
55(nxml-start-auto-coding)
56
57
58;;;### (autoloads (nxml-glyph-display-string) "nxml-glyph" "nxml-glyph.el"
59;;;;;; (16278 18099))
60;;; Generated autoloads from nxml-glyph.el
61
62(autoload (quote nxml-glyph-display-string) "nxml-glyph" "\
63Return a string that can display a glyph for Unicode code-point N.
64FACE gives the face that will be used for displaying the string.
65Return nil if the face cannot display a glyph for N." nil nil)
66
67;;;***
68
69;;;### (autoloads (nxml-mode) "nxml-mode" "nxml-mode.el" (16702 54517))
70;;; Generated autoloads from nxml-mode.el
71
72(autoload (quote nxml-mode) "nxml-mode" "\
73Major mode for editing XML.
74
75Syntax highlighting is performed unless the variable
76`nxml-syntax-highlight-flag' is nil.
77
78\\[nxml-finish-element] finishes the current element by inserting an end-tag.
79C-c C-i closes a start-tag with `>' and then inserts a balancing end-tag
80leaving point between the start-tag and end-tag.
81\\[nxml-balanced-close-start-tag-block] is similar but for block rather than inline elements:
82the start-tag, point, and end-tag are all left on separate lines.
83If `nxml-slash-auto-complete-flag' is non-nil, then inserting a `</'
84automatically inserts the rest of the end-tag.
85
86\\[nxml-complete] performs completion on the symbol preceding point.
87
88\\[nxml-dynamic-markup-word] uses the contents of the current buffer
89to choose a tag to put around the word preceding point.
90
91Validation is provided by the related minor-mode `rng-validate-mode'.
92This also makes completion schema- and context- sensitive. Element
93names, attribute names, attribute values and namespace URIs can all be
94completed. By default, `rng-validate-mode' is automatically enabled by
95`rng-nxml-mode-init' which is normally added to `nxml-mode-hook'. You
96can toggle it using \\[rng-validate-mode].
97
98\\[indent-for-tab-command] indents the current line appropriately.
99This can be customized using the variable `nxml-child-indent'
100and the variable `nxml-attribute-indent'.
101
102\\[nxml-insert-named-char] inserts a character reference using
103the character's name (by default, the Unicode name). \\[universal-argument] \\[nxml-insert-named-char]
104inserts the character directly.
105
106The Emacs commands that normally operate on balanced expressions will
107operate on XML markup items. Thus \\[forward-sexp] will move forward
108across one markup item; \\[backward-sexp] will move backward across
109one markup item; \\[kill-sexp] will kill the following markup item;
110\\[mark-sexp] will mark the following markup item. By default, each
111tag each treated as a single markup item; to make the complete element
112be treated as a single markup item, set the variable
113`nxml-sexp-element-flag' to t. For more details, see the function
114`nxml-forward-balanced-item'.
115
116\\[nxml-backward-up-element] and \\[nxml-down-element] move up and
117down the element structure.
118
119Many aspects this mode can be customized using
120\\[customize-group] nxml RET." t nil)
121
122;;;***
123
124;;;### (autoloads (nxml-enable-unicode-char-name-sets) "nxml-uchnm"
125;;;;;; "nxml-uchnm.el" (16270 38352))
126;;; Generated autoloads from nxml-uchnm.el
127
128(autoload (quote nxml-enable-unicode-char-name-sets) "nxml-uchnm" "\
129Enable the use of Unicode standard names for characters.
130The Unicode blocks for which names are enabled is controlled by
131the variable `nxml-enabled-unicode-blocks'." t nil)
132
133;;;***
134
135;;;### (autoloads (rng-c-load-schema) "rng-cmpct" "rng-cmpct.el"
136;;;;;; (16280 36493))
137;;; Generated autoloads from rng-cmpct.el
138
139(autoload (quote rng-c-load-schema) "rng-cmpct" "\
140Load a schema in RELAX NG compact syntax from FILENAME.
141Return a pattern." nil nil)
142
143;;;***
144
145;;;### (autoloads (rng-write-version rng-format-manual rng-byte-compile-load
146;;;;;; rng-update-autoloads) "rng-maint" "rng-maint.el" (16279 23645))
147;;; Generated autoloads from rng-maint.el
148
149(autoload (quote rng-update-autoloads) "rng-maint" "\
150Update the autoloads in rng-auto.el." t nil)
151
152(autoload (quote rng-byte-compile-load) "rng-maint" "\
153Byte-compile and load all of the RELAX NG library in an appropriate order." t nil)
154
155(autoload (quote rng-format-manual) "rng-maint" "\
156Create manual.texi from manual.xml." t nil)
157
158(autoload (quote rng-write-version) "rng-maint" nil nil nil)
159
160;;;***
161
162;;;### (autoloads (rng-nxml-mode-init) "rng-nxml" "rng-nxml.el" (16294
163;;;;;; 8571))
164;;; Generated autoloads from rng-nxml.el
165
166(autoload (quote rng-nxml-mode-init) "rng-nxml" "\
167Initialize `nxml-mode' to take advantage of `rng-validate-mode'.
168This is typically called from `nxml-mode-hook'.
169Validation will be enabled if `rng-nxml-auto-validate-flag' is non-nil." t nil)
170
171;;;***
172
173;;;### (autoloads (rng-validate-mode) "rng-valid" "rng-valid.el"
174;;;;;; (16664 9855))
175;;; Generated autoloads from rng-valid.el
176
177(autoload (quote rng-validate-mode) "rng-valid" "\
178Minor mode performing continual validation against a RELAX NG schema.
179
180Checks whether the buffer is a well-formed XML 1.0 document,
181conforming to the XML Namespaces Recommendation and valid against a
182RELAX NG schema. The mode-line indicates whether it is or not. Any
183parts of the buffer that cause it not to be are considered errors and
184are highlighted with `rng-error-face'. A description of each error is
185available as a tooltip. \\[rng-next-error] goes to the next error
186after point. Clicking mouse-1 on the word `Invalid' in the mode-line
187goes to the first error in the buffer. If the buffer changes, then it
188will be automatically rechecked when Emacs becomes idle; the
189rechecking will be paused whenever there is input pending..
190
191By default, uses a vacuous schema that allows any well-formed XML
192document. A schema can be specified explictly using
193\\[rng-set-schema-file-and-validate], or implicitly based on the buffer's
194file name or on the root element name. In each case the schema must
195be a RELAX NG schema using the compact schema (such schemas
196conventionally have a suffix of `.rnc'). The variable
197`rng-schema-locating-files' specifies files containing rules
198to use for finding the schema." t nil)
199
200;;;***
201
202;;;### (autoloads (rng-xsd-compile) "rng-xsd" "rng-xsd.el" (16216
203;;;;;; 26672))
204;;; Generated autoloads from rng-xsd.el
205
206(put (quote http://www\.w3\.org/2001/XMLSchema-datatypes) (quote rng-dt-compile) (quote rng-xsd-compile))
207
208(autoload (quote rng-xsd-compile) "rng-xsd" "\
209Provides W3C XML Schema as a RELAX NG datatypes library. NAME is a
210symbol giving the local name of the datatype. PARAMS is a list of
211pairs (PARAM-NAME . PARAM-VALUE) where PARAM-NAME is a symbol giving
212the name of the parameter and PARAM-VALUE is a string giving its
213value. If NAME or PARAMS are invalid, it calls rng-dt-error passing
214it arguments in the same style as format; the value from rng-dt-error
215will be returned. Otherwise, it returns a list. The first member of
216the list is t if any string is a legal value for the datatype and nil
217otherwise. The second argument is a symbol; this symbol will be
218called as a function passing it a string followed by the remaining
219members of the list. The function must return an object representing
220the value of the datatype that was represented by the string, or nil
221if the string is not a representation of any value. The object
222returned can be any convenient non-nil value, provided that, if two
223strings represent the same value, the returned objects must be equal." nil nil)
224
225;;;***
226
227;;;### (autoloads (xmltok-get-declared-encoding-position) "xmltok"
228;;;;;; "xmltok.el" (16664 8418))
229;;; Generated autoloads from xmltok.el
230
231(autoload (quote xmltok-get-declared-encoding-position) "xmltok" "\
232Return the position of the encoding in the XML declaration at point.
233If there is a well-formed XML declaration starting at point and it
234contains an encoding declaration, then return (START . END)
235where START and END are the positions of the start and the end
236of the encoding name; if there is no encoding declaration return
237the position where and encoding declaration could be inserted.
238If there is XML that is not well-formed that looks like an XML declaration,
239return nil. Otherwise, return t.
240If LIMIT is non-nil, then do not consider characters beyond LIMIT." nil nil)
241
242;;;***
243
244;;; rng-auto.el ends here
diff --git a/lisp/nxml/rng-cmpct.el b/lisp/nxml/rng-cmpct.el
new file mode 100644
index 00000000000..29699b60122
--- /dev/null
+++ b/lisp/nxml/rng-cmpct.el
@@ -0,0 +1,937 @@
1;;; rng-cmpct.el --- parsing of RELAX NG Compact Syntax schemas
2
3;; Copyright (C) 2003 Free Software Foundation, Inc.
4
5;; Author: James Clark
6;; Keywords: XML, RelaxNG
7
8;; This program is free software; you can redistribute it and/or
9;; modify it under the terms of the GNU General Public License as
10;; published by the Free Software Foundation; either version 2 of
11;; the License, or (at your option) any later version.
12
13;; This program is distributed in the hope that it will be
14;; useful, but WITHOUT ANY WARRANTY; without even the implied
15;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16;; PURPOSE. See the GNU General Public License for more details.
17
18;; You should have received a copy of the GNU General Public
19;; License along with this program; if not, write to the Free
20;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21;; MA 02111-1307 USA
22
23;;; Commentary:
24
25;; This parses a RELAX NG Compact Syntax schema into the form
26;; specified in rng-pttrn.el.
27;;
28;; RELAX NG Compact Syntax is specified by
29;; http://relaxng.org/compact.html
30;;
31;; This file uses the prefix "rng-c-".
32
33;;; Code:
34
35(require 'nxml-util)
36(require 'rng-util)
37(require 'rng-uri)
38(require 'rng-pttrn)
39
40;;;###autoload
41(defun rng-c-load-schema (filename)
42 "Load a schema in RELAX NG compact syntax from FILENAME.
43Return a pattern."
44 (rng-c-parse-file filename))
45
46;;; Error handling
47
48(put 'rng-c-incorrect-schema
49 'error-conditions
50 '(error rng-error nxml-file-parse-error rng-c-incorrect-schema))
51
52(put 'rng-c-incorrect-schema
53 'error-message
54 "Incorrect schema")
55
56(defun rng-c-signal-incorrect-schema (filename pos message)
57 (nxml-signal-file-parse-error filename
58 pos
59 message
60 'rng-c-incorrect-schema))
61
62;;; Lexing
63
64(defconst rng-c-keywords
65 '("attribute"
66 "default"
67 "datatypes"
68 "div"
69 "element"
70 "empty"
71 "external"
72 "grammar"
73 "include"
74 "inherit"
75 "list"
76 "mixed"
77 "namespace"
78 "notAllowed"
79 "parent"
80 "start"
81 "string"
82 "text"
83 "token")
84 "List of strings that are keywords in the compact syntax.")
85
86(defconst rng-c-anchored-keyword-re
87 (concat "\\`\\(" (regexp-opt rng-c-keywords) "\\)\\'")
88 "Regular expression to match a keyword in the compact syntax.")
89
90(defvar rng-c-syntax-table nil
91 "Syntax table for parsing the compact syntax.")
92
93(if rng-c-syntax-table
94 ()
95 (setq rng-c-syntax-table (make-syntax-table))
96 (modify-syntax-entry ?# "<" rng-c-syntax-table)
97 (modify-syntax-entry ?\n ">" rng-c-syntax-table)
98 (modify-syntax-entry ?- "w" rng-c-syntax-table)
99 (modify-syntax-entry ?. "w" rng-c-syntax-table)
100 (modify-syntax-entry ?_ "w" rng-c-syntax-table)
101 (modify-syntax-entry ?: "_" rng-c-syntax-table))
102
103(defconst rng-c-literal-1-re
104 "'\\(''\\([^']\\|'[^']\\|''[^']\\)*''\\|[^'\n]*\\)'"
105 "Regular expression to match a single-quoted literal.")
106
107(defconst rng-c-literal-2-re
108 (replace-regexp-in-string "'" "\"" rng-c-literal-1-re)
109 "Regular expression to match a double-quoted literal.")
110
111(defconst rng-c-ncname-re "\\w+")
112
113(defconst rng-c-anchored-ncname-re
114 (concat "\\`" rng-c-ncname-re "\\'"))
115
116(defconst rng-c-token-re
117 (concat "[&|]=" "\\|"
118 "[][()|&,*+?{}~=-]" "\\|"
119 rng-c-literal-1-re "\\|"
120 rng-c-literal-2-re "\\|"
121 rng-c-ncname-re "\\(:\\(\\*\\|" rng-c-ncname-re "\\)\\)?" "\\|"
122 "\\\\" rng-c-ncname-re "\\|"
123 ">>")
124 "Regular expression to match a token in the compact syntax.")
125
126(defun rng-c-init-buffer ()
127 (setq case-fold-search nil) ; automatically becomes buffer-local when set
128 (set-buffer-multibyte t)
129 (set-syntax-table rng-c-syntax-table))
130
131(defvar rng-c-current-token nil)
132(make-variable-buffer-local 'rng-c-current-token)
133
134(defun rng-c-advance ()
135 (cond ((looking-at rng-c-token-re)
136 (setq rng-c-current-token (match-string 0))
137 (goto-char (match-end 0))
138 (forward-comment (point-max)))
139 ((= (point) (point-max))
140 (setq rng-c-current-token ""))
141 (t (rng-c-error "Invalid token"))))
142
143(defconst rng-c-anchored-datatype-name-re
144 (concat "\\`" rng-c-ncname-re ":" rng-c-ncname-re "\\'"))
145
146(defsubst rng-c-current-token-keyword-p ()
147 (string-match rng-c-anchored-keyword-re rng-c-current-token))
148
149(defsubst rng-c-current-token-prefixed-name-p ()
150 (string-match rng-c-anchored-datatype-name-re rng-c-current-token))
151
152(defsubst rng-c-current-token-literal-p ()
153 (string-match "\\`['\"]" rng-c-current-token))
154
155(defsubst rng-c-current-token-quoted-identifier-p ()
156 (string-match "\\`\\\\" rng-c-current-token))
157
158(defsubst rng-c-current-token-ncname-p ()
159 (string-match rng-c-anchored-ncname-re rng-c-current-token))
160
161(defsubst rng-c-current-token-ns-name-p ()
162 (let ((len (length rng-c-current-token)))
163 (and (> len 0)
164 (= (aref rng-c-current-token (- len 1)) ?*))))
165
166;;; Namespaces
167
168(defvar rng-c-inherit-namespace nil)
169
170(defvar rng-c-default-namespace nil)
171
172(defvar rng-c-default-namespace-declared nil)
173
174(defvar rng-c-namespace-decls nil
175 "Alist of namespace declarations.")
176
177(defconst rng-c-no-namespace nil)
178
179(defun rng-c-declare-standard-namespaces ()
180 (setq rng-c-namespace-decls
181 (cons (cons "xml" nxml-xml-namespace-uri)
182 rng-c-namespace-decls))
183 (when (and (not rng-c-default-namespace-declared)
184 rng-c-inherit-namespace)
185 (setq rng-c-default-namespace rng-c-inherit-namespace)))
186
187(defun rng-c-expand-name (prefixed-name)
188 (let ((i (string-match ":" prefixed-name)))
189 (rng-make-name (rng-c-lookup-prefix (substring prefixed-name
190 0
191 i))
192 (substring prefixed-name (+ i 1)))))
193
194(defun rng-c-lookup-prefix (prefix)
195 (let ((binding (assoc prefix rng-c-namespace-decls)))
196 (or binding (rng-c-error "Undefined prefix %s" prefix))
197 (cdr binding)))
198
199(defun rng-c-unqualified-namespace (attribute)
200 (if attribute
201 rng-c-no-namespace
202 rng-c-default-namespace))
203
204(defun rng-c-make-context ()
205 (cons rng-c-default-namespace rng-c-namespace-decls))
206
207;;; Datatypes
208
209(defconst rng-string-datatype
210 (rng-make-datatype rng-builtin-datatypes-uri "string"))
211
212(defconst rng-token-datatype
213 (rng-make-datatype rng-builtin-datatypes-uri "token"))
214
215(defvar rng-c-datatype-decls nil
216 "Alist of datatype declarations.
217Contains a list of pairs (PREFIX . URI) where PREFIX is a string
218and URI is a symbol.")
219
220(defun rng-c-declare-standard-datatypes ()
221 (setq rng-c-datatype-decls
222 (cons (cons "xsd" rng-xsd-datatypes-uri)
223 rng-c-datatype-decls)))
224
225(defun rng-c-lookup-datatype-prefix (prefix)
226 (let ((binding (assoc prefix rng-c-datatype-decls)))
227 (or binding (rng-c-error "Undefined prefix %s" prefix))
228 (cdr binding)))
229
230(defun rng-c-expand-datatype (prefixed-name)
231 (let ((i (string-match ":" prefixed-name)))
232 (rng-make-datatype
233 (rng-c-lookup-datatype-prefix (substring prefixed-name 0 i))
234 (substring prefixed-name (+ i 1)))))
235
236;;; Grammars
237
238(defvar rng-c-current-grammar nil)
239(defvar rng-c-parent-grammar nil)
240
241(defun rng-c-make-grammar ()
242 (make-hash-table :test 'equal))
243
244(defconst rng-c-about-override-slot 0)
245(defconst rng-c-about-combine-slot 1)
246
247(defun rng-c-lookup-create (name grammar)
248 "Return a def object for NAME. A def object is a pair
249\(ABOUT . REF) where REF is returned by `rng-make-ref'. ABOUT is a
250two-element vector [OVERRIDE COMBINE]. COMBINE is either nil, choice
251or interleave. OVERRIDE is either nil, require or t."
252 (let ((def (gethash name grammar)))
253 (if def
254 def
255 (progn
256 (setq def (cons (vector nil nil) (rng-make-ref name)))
257 (puthash name def grammar)
258 def))))
259
260(defun rng-c-make-ref (name)
261 (or rng-c-current-grammar
262 (rng-c-error "Reference not in a grammar"))
263 (cdr (rng-c-lookup-create name rng-c-current-grammar)))
264
265(defun rng-c-make-parent-ref (name)
266 (or rng-c-parent-grammar
267 (rng-c-error "Reference to non-existent parent grammar"))
268 (cdr (rng-c-lookup-create name rng-c-parent-grammar)))
269
270(defvar rng-c-overrides nil
271 "Contains a list of (NAME . DEF) pairs.")
272
273(defun rng-c-merge-combine (def combine name)
274 (let* ((about (car def))
275 (current-combine (aref about rng-c-about-combine-slot)))
276 (if combine
277 (if current-combine
278 (or (eq combine current-combine)
279 (rng-c-error "Inconsistent combine for %s" name))
280 (aset about rng-c-about-combine-slot combine))
281 current-combine)))
282
283(defun rng-c-prepare-define (name combine in-include)
284 (let* ((def (rng-c-lookup-create name rng-c-current-grammar))
285 (about (car def))
286 (overridden (aref about rng-c-about-override-slot)))
287 (and in-include
288 (setq rng-c-overrides (cons (cons name def) rng-c-overrides)))
289 (cond (overridden (and (eq overridden 'require)
290 (aset about rng-c-about-override-slot t))
291 nil)
292 (t (setq combine (rng-c-merge-combine def combine name))
293 (and (rng-ref-get (cdr def))
294 (not combine)
295 (rng-c-error "Duplicate definition of %s" name))
296 def))))
297
298(defun rng-c-start-include (overrides)
299 (mapcar (lambda (name-def)
300 (let* ((def (cdr name-def))
301 (about (car def))
302 (save (aref about rng-c-about-override-slot)))
303 (aset about rng-c-about-override-slot 'require)
304 (cons save name-def)))
305 overrides))
306
307(defun rng-c-end-include (overrides)
308 (mapcar (lambda (o)
309 (let* ((saved (car o))
310 (name-def (cdr o))
311 (name (car name-def))
312 (def (cdr name-def))
313 (about (car def)))
314 (and (eq (aref about rng-c-about-override-slot) 'require)
315 (rng-c-error "Definition of %s in include did not override definition in included file" name))
316 (aset about rng-c-about-override-slot saved)))
317 overrides))
318
319(defun rng-c-define (def value)
320 (and def
321 (let ((current-value (rng-ref-get (cdr def))))
322 (rng-ref-set (cdr def)
323 (if current-value
324 (if (eq (aref (car def) rng-c-about-combine-slot)
325 'choice)
326 (rng-make-choice (list current-value value))
327 (rng-make-interleave (list current-value value)))
328 value)))))
329
330(defun rng-c-finish-grammar ()
331 (maphash (lambda (key def)
332 (or (rng-ref-get (cdr def))
333 (rng-c-error "Reference to undefined pattern %s" key)))
334 rng-c-current-grammar)
335 (rng-ref-get (cdr (or (gethash 'start rng-c-current-grammar)
336 (rng-c-error "No definition of start")))))
337
338;;; Parsing
339
340(defvar rng-c-escape-positions nil)
341(make-variable-buffer-local 'rng-c-escape-positions)
342
343(defvar rng-c-file-name nil)
344(make-variable-buffer-local 'rng-c-file-name)
345
346(defvar rng-c-file-index nil)
347
348(defun rng-c-parse-file (filename &optional context)
349 (save-excursion
350 (set-buffer (get-buffer-create (rng-c-buffer-name context)))
351 (erase-buffer)
352 (rng-c-init-buffer)
353 (setq rng-c-file-name
354 (car (insert-file-contents filename)))
355 (setq rng-c-escape-positions nil)
356 (rng-c-process-escapes)
357 (rng-c-parse-top-level context)))
358
359(defun rng-c-buffer-name (context)
360 (concat " *RNC Input"
361 (if context
362 (concat "<"
363 (number-to-string (setq rng-c-file-index
364 (1+ rng-c-file-index)))
365 ">*")
366 (setq rng-c-file-index 1)
367 "*")))
368
369(defun rng-c-process-escapes ()
370 ;; Check for any nuls, since we will use nul chars
371 ;; for internal purposes.
372 (let ((pos (search-forward "\C-@" nil t)))
373 (and pos
374 (rng-c-error "Nul character found (binary file?)")))
375 (let ((offset 0))
376 (while (re-search-forward "\\\\x+{\\([0-9a-fA-F]+\\)}"
377 (point-max)
378 t)
379 (let* ((ch (decode-char 'ucs (string-to-number (match-string 1) 16))))
380 (if (and ch (> ch 0))
381 (let ((begin (match-beginning 0))
382 (end (match-end 0)))
383 (delete-region begin end)
384 ;; Represent an escaped newline by nul, so
385 ;; that we can distinguish it from a literal newline.
386 ;; We will translate it back into a real newline later.
387 (insert (if (eq ch ?\n) 0 ch))
388 (setq offset (+ offset (- end begin 1)))
389 (setq rng-c-escape-positions
390 (cons (cons (point) offset)
391 rng-c-escape-positions)))
392 (rng-c-error "Invalid character escape")))))
393 (goto-char 1))
394
395(defun rng-c-translate-position (pos)
396 (let ((tem rng-c-escape-positions))
397 (while (and tem
398 (> (caar tem) pos))
399 (setq tem (cdr tem)))
400 (if tem
401 (+ pos (cdar tem))
402 pos)))
403
404(defun rng-c-error (&rest args)
405 (rng-c-signal-incorrect-schema rng-c-file-name
406 (rng-c-translate-position (point))
407 (apply 'format args)))
408
409(defun rng-c-parse-top-level (context)
410 (let ((rng-c-namespace-decls nil)
411 (rng-c-default-namespace nil)
412 (rng-c-datatype-decls nil))
413 (goto-char (point-min))
414 (forward-comment (point-max))
415 (rng-c-advance)
416 (rng-c-parse-decls)
417 (let ((p (if (eq context 'include)
418 (if (rng-c-implicit-grammar-p)
419 (rng-c-parse-grammar-body "")
420 (rng-c-parse-included-grammar))
421 (if (rng-c-implicit-grammar-p)
422 (rng-c-parse-implicit-grammar)
423 (rng-c-parse-pattern)))))
424 (or (string-equal rng-c-current-token "")
425 (rng-c-error "Unexpected characters after pattern"))
426 p)))
427
428(defun rng-c-parse-included-grammar ()
429 (or (string-equal rng-c-current-token "grammar")
430 (rng-c-error "Included schema is not a grammar"))
431 (rng-c-advance)
432 (rng-c-expect "{")
433 (rng-c-parse-grammar-body "}"))
434
435(defun rng-c-implicit-grammar-p ()
436 (or (and (or (rng-c-current-token-prefixed-name-p)
437 (rng-c-current-token-quoted-identifier-p)
438 (and (rng-c-current-token-ncname-p)
439 (not (rng-c-current-token-keyword-p))))
440 (looking-at "\\["))
441 (and (string-equal rng-c-current-token "[")
442 (rng-c-parse-lead-annotation)
443 nil)
444 (member rng-c-current-token '("div" "include" ""))
445 (looking-at "[|&]?=")))
446
447(defun rng-c-parse-decls ()
448 (setq rng-c-default-namespace-declared nil)
449 (while (progn
450 (let ((binding
451 (assoc rng-c-current-token
452 '(("namespace" . rng-c-parse-namespace)
453 ("datatypes" . rng-c-parse-datatypes)
454 ("default" . rng-c-parse-default)))))
455 (if binding
456 (progn
457 (rng-c-advance)
458 (funcall (cdr binding))
459 t)
460 nil))))
461 (rng-c-declare-standard-datatypes)
462 (rng-c-declare-standard-namespaces))
463
464(defun rng-c-parse-datatypes ()
465 (let ((prefix (rng-c-parse-identifier-or-keyword)))
466 (or (not (assoc prefix rng-c-datatype-decls))
467 (rng-c-error "Duplicate datatypes declaration for prefix %s" prefix))
468 (rng-c-expect "=")
469 (setq rng-c-datatype-decls
470 (cons (cons prefix
471 (rng-make-datatypes-uri (rng-c-parse-literal)))
472 rng-c-datatype-decls))))
473
474(defun rng-c-parse-namespace ()
475 (rng-c-declare-namespace nil
476 (rng-c-parse-identifier-or-keyword)))
477
478(defun rng-c-parse-default ()
479 (rng-c-expect "namespace")
480 (rng-c-declare-namespace t
481 (if (string-equal rng-c-current-token "=")
482 nil
483 (rng-c-parse-identifier-or-keyword))))
484
485(defun rng-c-declare-namespace (declare-default prefix)
486 (rng-c-expect "=")
487 (let ((ns (cond ((string-equal rng-c-current-token "inherit")
488 (rng-c-advance)
489 rng-c-inherit-namespace)
490 (t
491 (nxml-make-namespace (rng-c-parse-literal))))))
492 (and prefix
493 (or (not (assoc prefix rng-c-namespace-decls))
494 (rng-c-error "Duplicate namespace declaration for prefix %s"
495 prefix))
496 (setq rng-c-namespace-decls
497 (cons (cons prefix ns) rng-c-namespace-decls)))
498 (and declare-default
499 (or (not rng-c-default-namespace-declared)
500 (rng-c-error "Duplicate default namespace declaration"))
501 (setq rng-c-default-namespace-declared t)
502 (setq rng-c-default-namespace ns))))
503
504(defun rng-c-parse-implicit-grammar ()
505 (let* ((rng-c-parent-grammar rng-c-current-grammar)
506 (rng-c-current-grammar (rng-c-make-grammar)))
507 (rng-c-parse-grammar-body "")
508 (rng-c-finish-grammar)))
509
510(defun rng-c-parse-grammar-body (close-token &optional in-include)
511 (while (not (string-equal rng-c-current-token close-token))
512 (cond ((rng-c-current-token-keyword-p)
513 (let ((kw (intern rng-c-current-token)))
514 (cond ((eq kw 'start)
515 (rng-c-parse-define 'start in-include))
516 ((eq kw 'div)
517 (rng-c-advance)
518 (rng-c-parse-div in-include))
519 ((eq kw 'include)
520 (and in-include
521 (rng-c-error "Nested include"))
522 (rng-c-advance)
523 (rng-c-parse-include))
524 (t (rng-c-error "Invalid grammar keyword")))))
525 ((rng-c-current-token-ncname-p)
526 (if (looking-at "\\[")
527 (rng-c-parse-annotation-element)
528 (rng-c-parse-define rng-c-current-token
529 in-include)))
530 ((rng-c-current-token-quoted-identifier-p)
531 (if (looking-at "\\[")
532 (rng-c-parse-annotation-element)
533 (rng-c-parse-define (substring rng-c-current-token 1)
534 in-include)))
535 ((rng-c-current-token-prefixed-name-p)
536 (rng-c-parse-annotation-element))
537 ((string-equal rng-c-current-token "[")
538 (rng-c-parse-lead-annotation)
539 (and (string-equal rng-c-current-token close-token)
540 (rng-c-error "Missing annotation subject"))
541 (and (looking-at "\\[")
542 (rng-c-error "Leading annotation applied to annotation")))
543 (t (rng-c-error "Invalid grammar content"))))
544 (or (string-equal rng-c-current-token "")
545 (rng-c-advance)))
546
547(defun rng-c-parse-div (in-include)
548 (rng-c-expect "{")
549 (rng-c-parse-grammar-body "}" in-include))
550
551(defun rng-c-parse-include ()
552 (let* ((filename (rng-c-expand-file (rng-c-parse-literal)))
553 (rng-c-inherit-namespace (rng-c-parse-opt-inherit))
554 overrides)
555 (cond ((string-equal rng-c-current-token "{")
556 (rng-c-advance)
557 (let ((rng-c-overrides nil))
558 (rng-c-parse-grammar-body "}" t)
559 (setq overrides rng-c-overrides))
560 (setq overrides (rng-c-start-include overrides))
561 (rng-c-parse-file filename 'include)
562 (rng-c-end-include overrides))
563 (t (rng-c-parse-file filename 'include)))))
564
565(defun rng-c-parse-define (name in-include)
566 (rng-c-advance)
567 (let ((assign (assoc rng-c-current-token
568 '(("=" . nil)
569 ("|=" . choice)
570 ("&=" . interleave)))))
571 (or assign
572 (rng-c-error "Expected assignment operator"))
573 (rng-c-advance)
574 (let ((ref (rng-c-prepare-define name (cdr assign) in-include)))
575 (rng-c-define ref (rng-c-parse-pattern)))))
576
577(defvar rng-c-had-except nil)
578
579(defun rng-c-parse-pattern ()
580 (let* ((rng-c-had-except nil)
581 (p (rng-c-parse-repeated))
582 (op (assoc rng-c-current-token
583 '(("|" . rng-make-choice)
584 ("," . rng-make-group)
585 ("&" . rng-make-interleave)))))
586 (if op
587 (if rng-c-had-except
588 (rng-c-error "Parentheses required around pattern using -")
589 (let* ((patterns (cons p nil))
590 (tail patterns)
591 (connector rng-c-current-token))
592 (while (progn
593 (rng-c-advance)
594 (let ((newcdr (cons (rng-c-parse-repeated) nil)))
595 (setcdr tail newcdr)
596 (setq tail newcdr))
597 (string-equal rng-c-current-token connector)))
598 (funcall (cdr op) patterns)))
599 p)))
600
601(defun rng-c-parse-repeated ()
602 (let ((p (rng-c-parse-follow-annotations
603 (rng-c-parse-primary)))
604 (op (assoc rng-c-current-token
605 '(("*" . rng-make-zero-or-more)
606 ("+" . rng-make-one-or-more)
607 ("?" . rng-make-optional)))))
608 (if op
609 (if rng-c-had-except
610 (rng-c-error "Parentheses required around pattern using -")
611 (rng-c-parse-follow-annotations
612 (progn
613 (rng-c-advance)
614 (funcall (cdr op) p))))
615 p)))
616
617(defun rng-c-parse-primary ()
618 "Parse a primary expression. The current token must be the first
619token of the expression. After parsing the current token should be
620token following the primary expression."
621 (cond ((rng-c-current-token-keyword-p)
622 (let ((parse-function (get (intern rng-c-current-token)
623 'rng-c-pattern)))
624 (or parse-function
625 (rng-c-error "Keyword %s does not introduce a pattern"
626 rng-c-current-token))
627 (rng-c-advance)
628 (funcall parse-function)))
629 ((rng-c-current-token-ncname-p)
630 (rng-c-advance-with (rng-c-make-ref rng-c-current-token)))
631 ((string-equal rng-c-current-token "(")
632 (rng-c-advance)
633 (let ((p (rng-c-parse-pattern)))
634 (rng-c-expect ")")
635 p))
636 ((rng-c-current-token-prefixed-name-p)
637 (let ((name (rng-c-expand-datatype rng-c-current-token)))
638 (rng-c-advance)
639 (rng-c-parse-data name)))
640 ((rng-c-current-token-literal-p)
641 (rng-make-value rng-token-datatype (rng-c-parse-literal) nil))
642 ((rng-c-current-token-quoted-identifier-p)
643 (rng-c-advance-with
644 (rng-c-make-ref (substring rng-c-current-token 1))))
645 ((string-equal rng-c-current-token "[")
646 (rng-c-parse-lead-annotation)
647 (rng-c-parse-primary))
648 (t (rng-c-error "Invalid pattern"))))
649
650(defun rng-c-parse-parent ()
651 (and (rng-c-current-token-keyword-p)
652 (rng-c-error "Keyword following parent was not quoted"
653 rng-c-current-token))
654 (rng-c-make-parent-ref (rng-c-parse-identifier-or-keyword)))
655
656(defun rng-c-parse-literal ()
657 (rng-c-fix-escaped-newlines
658 (apply 'concat (rng-c-parse-literal-segments))))
659
660(defun rng-c-parse-literal-segments ()
661 (let ((str (rng-c-parse-literal-segment)))
662 (cons str
663 (cond ((string-equal rng-c-current-token "~")
664 (rng-c-advance)
665 (rng-c-parse-literal-segments))
666 (t nil)))))
667
668(defun rng-c-parse-literal-segment ()
669 (or (rng-c-current-token-literal-p)
670 (rng-c-error "Expected a literal"))
671 (rng-c-advance-with
672 (let ((n (if (and (>= (length rng-c-current-token) 6)
673 (eq (aref rng-c-current-token 0)
674 (aref rng-c-current-token 1)))
675 3
676 1)))
677 (substring rng-c-current-token n (- n)))))
678
679(defun rng-c-fix-escaped-newlines (str)
680 (let ((pos 0))
681 (while (progn
682 (let ((n (string-match "\C-@" str pos)))
683 (and n
684 (aset str n ?\n)
685 (setq pos (1+ n)))))))
686 str)
687
688(defun rng-c-parse-identifier-or-keyword ()
689 (cond ((rng-c-current-token-ncname-p)
690 (rng-c-advance-with rng-c-current-token))
691 ((rng-c-current-token-quoted-identifier-p)
692 (rng-c-advance-with (substring rng-c-current-token 1)))
693 (t (rng-c-error "Expected identifier or keyword"))))
694
695(put 'string 'rng-c-pattern 'rng-c-parse-string)
696(put 'token 'rng-c-pattern 'rng-c-parse-token)
697(put 'element 'rng-c-pattern 'rng-c-parse-element)
698(put 'attribute 'rng-c-pattern 'rng-c-parse-attribute)
699(put 'list 'rng-c-pattern 'rng-c-parse-list)
700(put 'mixed 'rng-c-pattern 'rng-c-parse-mixed)
701(put 'text 'rng-c-pattern 'rng-c-parse-text)
702(put 'empty 'rng-c-pattern 'rng-c-parse-empty)
703(put 'notAllowed 'rng-c-pattern 'rng-c-parse-not-allowed)
704(put 'grammar 'rng-c-pattern 'rng-c-parse-grammar)
705(put 'parent 'rng-c-pattern 'rng-c-parse-parent)
706(put 'external 'rng-c-pattern 'rng-c-parse-external)
707
708(defun rng-c-parse-element ()
709 (let ((name-class (rng-c-parse-name-class nil)))
710 (rng-c-expect "{")
711 (let ((pattern (rng-c-parse-pattern)))
712 (rng-c-expect "}")
713 (rng-make-element name-class pattern))))
714
715(defun rng-c-parse-attribute ()
716 (let ((name-class (rng-c-parse-name-class 'attribute)))
717 (rng-c-expect "{")
718 (let ((pattern (rng-c-parse-pattern)))
719 (rng-c-expect "}")
720 (rng-make-attribute name-class pattern))))
721
722(defun rng-c-parse-name-class (attribute)
723 (let* ((rng-c-had-except nil)
724 (name-class
725 (rng-c-parse-follow-annotations
726 (rng-c-parse-primary-name-class attribute))))
727 (if (string-equal rng-c-current-token "|")
728 (let* ((name-classes (cons name-class nil))
729 (tail name-classes))
730 (or (not rng-c-had-except)
731 (rng-c-error "Parentheses required around name-class using - operator"))
732 (while (progn
733 (rng-c-advance)
734 (let ((newcdr
735 (cons (rng-c-parse-follow-annotations
736 (rng-c-parse-primary-name-class attribute))
737 nil)))
738 (setcdr tail newcdr)
739 (setq tail newcdr))
740 (string-equal rng-c-current-token "|")))
741 (rng-make-choice-name-class name-classes))
742 name-class)))
743
744(defun rng-c-parse-primary-name-class (attribute)
745 (cond ((rng-c-current-token-ncname-p)
746 (rng-c-advance-with
747 (rng-make-name-name-class
748 (rng-make-name (rng-c-unqualified-namespace attribute)
749 rng-c-current-token))))
750 ((rng-c-current-token-prefixed-name-p)
751 (rng-c-advance-with
752 (rng-make-name-name-class
753 (rng-c-expand-name rng-c-current-token))))
754 ((string-equal rng-c-current-token "*")
755 (let ((except (rng-c-parse-opt-except-name-class attribute)))
756 (if except
757 (rng-make-any-name-except-name-class except)
758 (rng-make-any-name-name-class))))
759 ((rng-c-current-token-ns-name-p)
760 (let* ((ns
761 (rng-c-lookup-prefix (substring rng-c-current-token
762 0
763 -2)))
764 (except (rng-c-parse-opt-except-name-class attribute)))
765 (if except
766 (rng-make-ns-name-except-name-class ns except)
767 (rng-make-ns-name-name-class ns))))
768 ((string-equal rng-c-current-token "(")
769 (rng-c-advance)
770 (let ((name-class (rng-c-parse-name-class attribute)))
771 (rng-c-expect ")")
772 name-class))
773 ((rng-c-current-token-quoted-identifier-p)
774 (rng-c-advance-with
775 (rng-make-name-name-class
776 (rng-make-name (rng-c-unqualified-namespace attribute)
777 (substring rng-c-current-token 1)))))
778 ((string-equal rng-c-current-token "[")
779 (rng-c-parse-lead-annotation)
780 (rng-c-parse-primary-name-class attribute))
781 (t (rng-c-error "Bad name class"))))
782
783(defun rng-c-parse-opt-except-name-class (attribute)
784 (rng-c-advance)
785 (and (string-equal rng-c-current-token "-")
786 (or (not rng-c-had-except)
787 (rng-c-error "Parentheses required around name-class using - operator"))
788 (setq rng-c-had-except t)
789 (progn
790 (rng-c-advance)
791 (rng-c-parse-primary-name-class attribute))))
792
793(defun rng-c-parse-mixed ()
794 (rng-c-expect "{")
795 (let ((pattern (rng-make-mixed (rng-c-parse-pattern))))
796 (rng-c-expect "}")
797 pattern))
798
799(defun rng-c-parse-list ()
800 (rng-c-expect "{")
801 (let ((pattern (rng-make-list (rng-c-parse-pattern))))
802 (rng-c-expect "}")
803 pattern))
804
805(defun rng-c-parse-text ()
806 (rng-make-text))
807
808(defun rng-c-parse-empty ()
809 (rng-make-empty))
810
811(defun rng-c-parse-not-allowed ()
812 (rng-make-not-allowed))
813
814(defun rng-c-parse-string ()
815 (rng-c-parse-data rng-string-datatype))
816
817(defun rng-c-parse-token ()
818 (rng-c-parse-data rng-token-datatype))
819
820(defun rng-c-parse-data (name)
821 (if (rng-c-current-token-literal-p)
822 (rng-make-value name
823 (rng-c-parse-literal)
824 (and (car name)
825 (rng-c-make-context)))
826 (let ((params (rng-c-parse-optional-params)))
827 (if (string-equal rng-c-current-token "-")
828 (progn
829 (if rng-c-had-except
830 (rng-c-error "Parentheses required around pattern using -")
831 (setq rng-c-had-except t))
832 (rng-c-advance)
833 (rng-make-data-except name
834 params
835 (rng-c-parse-primary)))
836 (rng-make-data name params)))))
837
838(defun rng-c-parse-optional-params ()
839 (and (string-equal rng-c-current-token "{")
840 (let* ((head (cons nil nil))
841 (tail head))
842 (rng-c-advance)
843 (while (not (string-equal rng-c-current-token "}"))
844 (and (string-equal rng-c-current-token "[")
845 (rng-c-parse-lead-annotation))
846 (let ((name (rng-c-parse-identifier-or-keyword)))
847 (rng-c-expect "=")
848 (let ((newcdr (cons (cons (intern name)
849 (rng-c-parse-literal))
850 nil)))
851 (setcdr tail newcdr)
852 (setq tail newcdr))))
853 (rng-c-advance)
854 (cdr head))))
855
856(defun rng-c-parse-external ()
857 (let* ((filename (rng-c-expand-file (rng-c-parse-literal)))
858 (rng-c-inherit-namespace (rng-c-parse-opt-inherit)))
859 (rng-c-parse-file filename 'external)))
860
861(defun rng-c-expand-file (uri)
862 (condition-case err
863 (rng-uri-file-name (rng-uri-resolve uri
864 (rng-file-name-uri rng-c-file-name)))
865 (rng-uri-error
866 (rng-c-error (cadr err)))))
867
868(defun rng-c-parse-opt-inherit ()
869 (cond ((string-equal rng-c-current-token "inherit")
870 (rng-c-advance)
871 (rng-c-expect "=")
872 (rng-c-lookup-prefix (rng-c-parse-identifier-or-keyword)))
873 (t rng-c-default-namespace)))
874
875(defun rng-c-parse-grammar ()
876 (rng-c-expect "{")
877 (let* ((rng-c-parent-grammar rng-c-current-grammar)
878 (rng-c-current-grammar (rng-c-make-grammar)))
879 (rng-c-parse-grammar-body "}")
880 (rng-c-finish-grammar)))
881
882(defun rng-c-parse-lead-annotation ()
883 (rng-c-parse-annotation-body)
884 (and (string-equal rng-c-current-token "[")
885 (rng-c-error "Multiple leading annotations")))
886
887(defun rng-c-parse-follow-annotations (obj)
888 (while (string-equal rng-c-current-token ">>")
889 (rng-c-advance)
890 (if (rng-c-current-token-prefixed-name-p)
891 (rng-c-advance)
892 (rng-c-parse-identifier-or-keyword))
893 (rng-c-parse-annotation-body t))
894 obj)
895
896(defun rng-c-parse-annotation-element ()
897 (rng-c-advance)
898 (rng-c-parse-annotation-body t))
899
900;; XXX need stricter checking of attribute names
901;; XXX don't allow attributes after text
902
903(defun rng-c-parse-annotation-body (&optional allow-text)
904 "Current token is [. Parse up to matching ]. Current token after
905parse is token following ]."
906 (or (string-equal rng-c-current-token "[")
907 (rng-c-error "Expected ["))
908 (rng-c-advance)
909 (while (not (string-equal rng-c-current-token "]"))
910 (cond ((rng-c-current-token-literal-p)
911 (or allow-text
912 (rng-c-error "Out of place text within annotation"))
913 (rng-c-parse-literal))
914 (t
915 (if (rng-c-current-token-prefixed-name-p)
916 (rng-c-advance)
917 (rng-c-parse-identifier-or-keyword))
918 (cond ((string-equal rng-c-current-token "[")
919 (rng-c-parse-annotation-body t))
920 ((string-equal rng-c-current-token "=")
921 (rng-c-advance)
922 (rng-c-parse-literal))
923 (t (rng-c-error "Expected = or ["))))))
924 (rng-c-advance))
925
926(defun rng-c-advance-with (pattern)
927 (rng-c-advance)
928 pattern)
929
930(defun rng-c-expect (str)
931 (or (string-equal rng-c-current-token str)
932 (rng-c-error "Expected `%s' but got `%s'" str rng-c-current-token))
933 (rng-c-advance))
934
935(provide 'rng-cmpct)
936
937;;; rng-cmpct.el
diff --git a/lisp/nxml/rng-dt.el b/lisp/nxml/rng-dt.el
new file mode 100644
index 00000000000..ba0689130ce
--- /dev/null
+++ b/lisp/nxml/rng-dt.el
@@ -0,0 +1,64 @@
1;;; rng-dt.el --- datatype library interface for RELAX NG
2
3;; Copyright (C) 2003 Free Software Foundation, Inc.
4
5;; Author: James Clark
6;; Keywords: XML, RelaxNG
7
8;; This program is free software; you can redistribute it and/or
9;; modify it under the terms of the GNU General Public License as
10;; published by the Free Software Foundation; either version 2 of
11;; the License, or (at your option) any later version.
12
13;; This program is distributed in the hope that it will be
14;; useful, but WITHOUT ANY WARRANTY; without even the implied
15;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16;; PURPOSE. See the GNU General Public License for more details.
17
18;; You should have received a copy of the GNU General Public
19;; License along with this program; if not, write to the Free
20;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21;; MA 02111-1307 USA
22
23;;; Commentary:
24
25;;; Code:
26
27(require 'rng-util)
28
29(defvar rng-dt-error-reporter nil)
30
31(defun rng-dt-error (string &rest objs)
32 (if rng-dt-error-reporter
33 (apply rng-dt-error-reporter (cons string objs))
34 nil))
35
36(defvar rng-dt-namespace-context-getter nil
37 "A list used by datatype libraries to expand names. The car of the
38list is a symbol which is the name of a function. This function is
39applied to the cdr of the list. The function must return a list whose
40car is the default namespace and whose cdr is an alist of (PREFIX
41. NAMESPACE) pairs, where PREFIX is a string and NAMESPACE is a
42symbol. This must be dynamically bound before calling a datatype
43library.")
44
45(defsubst rng-dt-make-value (dt str)
46 (apply (car dt) (cons str (cdr dt))))
47
48(defun rng-dt-builtin-compile (name params)
49 (cond ((eq name 'string)
50 (if (null params)
51 '(t identity)
52 (rng-dt-error "The string datatype does not take any parameters")))
53 ((eq name 'token)
54 (if (null params)
55 '(t rng-collapse-space)
56 (rng-dt-error "The token datatype does not take any parameters")))
57 (t
58 (rng-dt-error "There is no built-in datatype %s" name))))
59
60(put (rng-make-datatypes-uri "") 'rng-dt-compile 'rng-dt-builtin-compile)
61
62(provide 'rng-dt)
63
64;;; rng-dt.el ends here
diff --git a/lisp/nxml/rng-loc.el b/lisp/nxml/rng-loc.el
new file mode 100644
index 00000000000..b81bfe009f8
--- /dev/null
+++ b/lisp/nxml/rng-loc.el
@@ -0,0 +1,548 @@
1;;; rng-loc.el --- locate the schema to use for validation
2
3;; Copyright (C) 2003 Free Software Foundation, Inc.
4
5;; Author: James Clark
6;; Keywords: XML, RelaxNG
7
8;; This program is free software; you can redistribute it and/or
9;; modify it under the terms of the GNU General Public License as
10;; published by the Free Software Foundation; either version 2 of
11;; the License, or (at your option) any later version.
12
13;; This program is distributed in the hope that it will be
14;; useful, but WITHOUT ANY WARRANTY; without even the implied
15;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16;; PURPOSE. See the GNU General Public License for more details.
17
18;; You should have received a copy of the GNU General Public
19;; License along with this program; if not, write to the Free
20;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21;; MA 02111-1307 USA
22
23;;; Commentary:
24
25;;; Code:
26
27(require 'nxml-util)
28(require 'nxml-parse)
29(require 'rng-parse)
30(require 'rng-uri)
31(require 'rng-util)
32(require 'xmltok)
33
34(defvar rng-current-schema-file-name nil
35 "Filename of schema being used for current buffer.
36Nil if using a vacuous schema.")
37(make-variable-buffer-local 'rng-current-schema-file-name)
38
39(defvar rng-schema-locating-files-default nil
40 "Default value for variable `rng-schema-locating-files'.")
41
42(defvar rng-schema-locating-file-schema-file nil
43 "File containing schema for schema locating files.")
44
45(defvar rng-schema-locating-file-schema nil
46 "Schema for schema locating files or nil if not yet loaded.")
47
48(defcustom rng-schema-locating-files rng-schema-locating-files-default
49 "*List of schema locating files."
50 :type '(repeat file)
51 :group 'relax-ng)
52
53(defvar rng-schema-loader-alist nil
54 "Alist of schema extensions vs schema loader functions.")
55
56(defvar rng-cached-document-element nil)
57
58(defvar rng-document-type-history nil)
59
60(defun rng-set-document-type (type-id)
61 (interactive (list (rng-read-type-id)))
62 (condition-case err
63 (when (not (string= type-id ""))
64 (let ((schema-file (rng-locate-schema-file type-id)))
65 (unless schema-file
66 (error "Could not locate schema for type id `%s'" type-id))
67 (rng-set-schema-file-1 schema-file))
68 (rng-save-schema-location-1 t type-id)
69 (rng-what-schema))
70 (nxml-file-parse-error
71 (nxml-display-file-parse-error err))))
72
73(defun rng-read-type-id ()
74 (condition-case err
75 (let ((type-ids (rng-possible-type-ids))
76 (completion-ignore-case nil))
77 (completing-read "Document type id: "
78 (mapcar (lambda (x) (cons x nil))
79 type-ids)
80 nil
81 t
82 nil
83 'rng-document-type-history))
84 (nxml-file-parse-error
85 (nxml-display-file-parse-error err))))
86
87(defun rng-set-schema-file (filename)
88 "Set the schema for the current buffer to the schema in FILENAME.
89FILENAME must be the name of a file containing a schema.
90The extension of FILENAME is used to determine what kind of schema it
91is. The variable `rng-schema-loader-alist' maps from schema
92extensions to schema loader functions. The function
93`rng-c-load-schema' is the loader for RELAX NG compact syntax. The
94association is between the buffer and the schema: the association is
95lost when the buffer is killed."
96 (interactive "fSchema file: ")
97 (condition-case err
98 (progn
99 (rng-set-schema-file-1 filename)
100 (rng-save-schema-location-1 t))
101 (nxml-file-parse-error
102 (nxml-display-file-parse-error err))))
103
104(defun rng-set-vacuous-schema ()
105 "Set the schema for the current buffer to allow any well-formed XML."
106 (interactive)
107 (rng-set-schema-file-1 nil)
108 (rng-what-schema))
109
110(defun rng-set-schema-file-1 (filename)
111 (setq filename (and filename (expand-file-name filename)))
112 (setq rng-current-schema
113 (if filename
114 (rng-load-schema filename)
115 rng-any-element))
116 (setq rng-current-schema-file-name filename)
117 (run-hooks 'rng-schema-change-hook))
118
119(defun rng-load-schema (filename)
120 (let* ((extension (file-name-extension filename))
121 (loader (cdr (assoc extension rng-schema-loader-alist))))
122 (or loader
123 (if extension
124 (error "No schema loader available for file extension `%s'"
125 extension)
126 (error "No schema loader available for null file extension")))
127 (funcall loader filename)))
128
129(defun rng-what-schema ()
130 "Display a message saying what schema `rng-validate-mode' is using."
131 (interactive)
132 (if rng-current-schema-file-name
133 (message "Using schema %s"
134 (abbreviate-file-name rng-current-schema-file-name))
135 (message "Using vacuous schema")))
136
137(defun rng-auto-set-schema (&optional no-display-error)
138 "Set the schema for this buffer based on the buffer's contents and file-name."
139 (interactive)
140 (condition-case err
141 (progn
142 (rng-set-schema-file-1 (rng-locate-schema-file))
143 (rng-what-schema))
144 (nxml-file-parse-error
145 (if no-display-error
146 (error "%s at position %s in %s"
147 (nth 3 err)
148 (nth 2 err)
149 (abbreviate-file-name (nth 1 err)))
150 (nxml-display-file-parse-error err)))))
151
152(defun rng-locate-schema-file (&optional type-id)
153 "Return the file-name of the schema to use for the current buffer.
154Return nil if no schema could be located.
155If TYPE-ID is non-nil, then locate the schema for this TYPE-ID."
156 (let* ((rng-cached-document-element nil)
157 (schema
158 (if type-id
159 (cons type-id nil)
160 (rng-locate-schema-file-using rng-schema-locating-files)))
161 files type-ids)
162 (while (consp schema)
163 (setq files rng-schema-locating-files)
164 (setq type-id (car schema))
165 (setq schema nil)
166 (when (member type-id type-ids)
167 (error "Type-id loop for type-id `%s'" type-id))
168 (setq type-ids (cons type-id type-ids))
169 (while (and files (not schema))
170 (setq schema
171 (rng-locate-schema-file-from-type-id type-id
172 (car files)))
173 (setq files (cdr files))))
174 (and schema
175 (rng-uri-file-name schema))))
176
177(defun rng-possible-type-ids ()
178 "Return a list of the known type IDs."
179 (let ((files rng-schema-locating-files)
180 type-ids)
181 (while files
182 (setq type-ids (rng-possible-type-ids-using (car files) type-ids))
183 (setq files (cdr files)))
184 (rng-uniquify-equal (sort type-ids 'string<))))
185
186(defun rng-locate-schema-file-using (files)
187 "Locate a schema using the schema locating files FILES.
188FILES is a list of file-names.
189Return either a URI, a list (TYPE-ID) where TYPE-ID is a string
190or nil."
191 (let (rules
192 ;; List of types that override normal order-based
193 ;; priority, most important first
194 preferred-types
195 ;; Best result found so far; same form as return value.
196 best-so-far)
197 (while (and (progn
198 (while (and (not rules) files)
199 (setq rules (rng-get-parsed-schema-locating-file
200 (car files)))
201 (setq files (cdr files)))
202 rules)
203 (or (not best-so-far) preferred-types))
204 (let* ((rule (car rules))
205 (rule-type (car rule))
206 (rule-matcher (get rule-type 'rng-rule-matcher)))
207 (setq rules (cdr rules))
208 (cond (rule-matcher
209 (when (and (or (not best-so-far)
210 (memq rule-type preferred-types)))
211 (setq best-so-far
212 (funcall rule-matcher (cdr rule)))
213 preferred-types)
214 (setq preferred-types
215 (nbutlast preferred-types
216 (length (memq rule-type preferred-types)))))
217 ((eq rule-type 'applyFollowingRules)
218 (when (not best-so-far)
219 (let ((prefer (cdr (assq 'ruleType (cdr rule)))))
220 (when (and prefer
221 (not (memq (setq prefer (intern prefer))
222 preferred-types)))
223 (setq preferred-types
224 (nconc preferred-types (list prefer)))))))
225 ((eq rule-type 'include)
226 (let ((uri (cdr (assq 'rules (cdr rule)))))
227 (when uri
228 (setq rules
229 (append (rng-get-parsed-schema-locating-file
230 (rng-uri-file-name uri))
231 rules))))))))
232 best-so-far))
233
234(put 'documentElement 'rng-rule-matcher 'rng-match-document-element-rule)
235(put 'namespace 'rng-rule-matcher 'rng-match-namespace-rule)
236(put 'uri 'rng-rule-matcher 'rng-match-uri-rule)
237(put 'transformURI 'rng-rule-matcher 'rng-match-transform-uri-rule)
238(put 'default 'rng-rule-matcher 'rng-match-default-rule)
239
240(defun rng-match-document-element-rule (props)
241 (let ((document-element (rng-document-element))
242 (prefix (cdr (assq 'prefix props)))
243 (local-name (cdr (assq 'localName props))))
244 (and (or (not prefix)
245 (if (= (length prefix) 0)
246 (not (nth 1 document-element))
247 (string= prefix (nth 1 document-element))))
248 (or (not local-name)
249 (string= local-name
250 (nth 2 document-element)))
251 (rng-match-default-rule props))))
252
253(defun rng-match-namespace-rule (props)
254 (let ((document-element (rng-document-element))
255 (ns (cdr (assq 'ns props))))
256 (and document-element
257 ns
258 (eq (nth 0 document-element)
259 (if (string= ns "")
260 nil
261 (nxml-make-namespace ns)))
262 (rng-match-default-rule props))))
263
264(defun rng-document-element ()
265 "Return a list (NS PREFIX LOCAL-NAME).
266NS is t if the document has a non-nil, but not otherwise known namespace."
267 (or rng-cached-document-element
268 (setq rng-cached-document-element
269 (save-excursion
270 (save-restriction
271 (widen)
272 (goto-char (point-min))
273 (let (xmltok-dtd)
274 (xmltok-save
275 (xmltok-forward-prolog)
276 (xmltok-forward)
277 (when (memq xmltok-type '(start-tag
278 partial-start-tag
279 empty-element
280 partial-empty-element))
281 (list (rng-get-start-tag-namespace)
282 (xmltok-start-tag-prefix)
283 (xmltok-start-tag-local-name))))))))))
284
285(defun rng-get-start-tag-namespace ()
286 (let ((prefix (xmltok-start-tag-prefix))
287 namespace att value)
288 (while xmltok-namespace-attributes
289 (setq att (car xmltok-namespace-attributes))
290 (setq xmltok-namespace-attributes (cdr xmltok-namespace-attributes))
291 (when (if prefix
292 (and (xmltok-attribute-prefix att)
293 (string= (xmltok-attribute-local-name att)
294 prefix))
295 (not (xmltok-attribute-prefix att)))
296 (setq value (xmltok-attribute-value att))
297 (setq namespace (if value (nxml-make-namespace value) t))))
298 (if (and prefix (not namespace))
299 t
300 namespace)))
301
302(defun rng-match-transform-uri-rule (props)
303 (let ((from-pattern (cdr (assq 'fromPattern props)))
304 (to-pattern (cdr (assq 'toPattern props)))
305 (file-name (buffer-file-name)))
306 (and file-name
307 (setq file-name (expand-file-name file-name))
308 (rng-file-name-matches-uri-pattern-p file-name from-pattern)
309 (condition-case ()
310 (let ((new-file-name
311 (replace-match
312 (save-match-data
313 (rng-uri-pattern-file-name-replace-match to-pattern))
314 t
315 nil
316 file-name)))
317 (and (file-name-absolute-p new-file-name)
318 (file-exists-p new-file-name)
319 (rng-file-name-uri new-file-name)))
320 (rng-uri-error nil)))))
321
322(defun rng-match-uri-rule (props)
323 (let ((resource (cdr (assq 'resource props)))
324 (pattern (cdr (assq 'pattern props)))
325 (file-name (buffer-file-name)))
326 (and file-name
327 (setq file-name (expand-file-name file-name))
328 (cond (resource
329 (condition-case ()
330 (eq (compare-strings (rng-uri-file-name resource)
331 0
332 nil
333 (expand-file-name file-name)
334 0
335 nil
336 nxml-file-name-ignore-case)
337 t)
338 (rng-uri-error nil)))
339 (pattern
340 (rng-file-name-matches-uri-pattern-p file-name
341 pattern)))
342 (rng-match-default-rule props))))
343
344(defun rng-file-name-matches-uri-pattern-p (file-name pattern)
345 (condition-case ()
346 (and (let ((case-fold-search nxml-file-name-ignore-case))
347 (string-match (rng-uri-pattern-file-name-regexp pattern)
348 file-name))
349 t)
350 (rng-uri-error nil)))
351
352(defun rng-match-default-rule (props)
353 (or (cdr (assq 'uri props))
354 (let ((type-id (cdr (assq 'typeId props))))
355 (and type-id
356 (cons (rng-collapse-space type-id) nil)))))
357
358(defun rng-possible-type-ids-using (file type-ids)
359 (let ((rules (rng-get-parsed-schema-locating-file file))
360 rule)
361 (while rules
362 (setq rule (car rules))
363 (setq rules (cdr rules))
364 (cond ((eq (car rule) 'typeId)
365 (let ((id (cdr (assq 'id (cdr rule)))))
366 (when id
367 (setq type-ids
368 (cons (rng-collapse-space id)
369 type-ids)))))
370 ((eq (car rule) 'include)
371 (let ((uri (cdr (assq 'rules (cdr rule)))))
372 (when uri
373 (setq type-ids
374 (rng-possible-type-ids-using
375 (rng-get-parsed-schema-locating-file
376 (rng-uri-file-name uri))
377 type-ids)))))))
378 type-ids))
379
380(defun rng-locate-schema-file-from-type-id (type-id file)
381 "Locate the schema for type id TYPE-ID using schema locating file FILE.
382Return either a URI, a list (TYPE-ID) where TYPE-ID is a string
383or nil."
384 (let ((rules (rng-get-parsed-schema-locating-file file))
385 schema rule)
386 (while (and rules (not schema))
387 (setq rule (car rules))
388 (setq rules (cdr rules))
389 (cond ((and (eq (car rule) 'typeId)
390 (let ((id (assq 'id (cdr rule))))
391 (and id
392 (string= (rng-collapse-space (cdr id)) type-id))))
393 (setq schema (rng-match-default-rule (cdr rule))))
394 ((eq (car rule) 'include)
395 (let ((uri (cdr (assq 'rules (cdr rule)))))
396 (when uri
397 (setq schema
398 (rng-locate-schema-file-from-type-id
399 type-id
400 (rng-uri-file-name uri))))))))
401 schema))
402
403(defvar rng-schema-locating-file-alist nil)
404
405(defun rng-get-parsed-schema-locating-file (file)
406 "Return a list of rules for the schema locating file FILE."
407 (setq file (expand-file-name file))
408 (let ((cached (assoc file rng-schema-locating-file-alist))
409 (mtime (nth 5 (file-attributes file)))
410 parsed)
411 (cond ((not mtime)
412 (when cached
413 (setq rng-schema-locating-file-alist
414 (delq cached rng-schema-locating-file-alist)))
415 nil)
416 ((and cached (equal (nth 1 cached) mtime))
417 (nth 2 cached))
418 (t
419 (setq parsed (rng-parse-schema-locating-file file))
420 (if cached
421 (setcdr cached (list mtime parsed))
422 (setq rng-schema-locating-file-alist
423 (cons (list file mtime parsed)
424 rng-schema-locating-file-alist)))
425 parsed))))
426
427(defconst rng-locate-namespace-uri
428 (nxml-make-namespace "http://thaiopensource.com/ns/locating-rules/1.0"))
429
430(defun rng-parse-schema-locating-file (file)
431 "Return list of rules.
432Each rule has the form (TYPE (ATTR . VAL) ...), where
433TYPE is a symbol for the element name, ATTR is a symbol for the attribute
434and VAL is a string for the value.
435Attribute values representing URIs are made absolute and xml:base
436attributes are removed."
437 (when (and (not rng-schema-locating-file-schema)
438 rng-schema-locating-file-schema-file)
439 (setq rng-schema-locating-file-schema
440 (rng-load-schema rng-schema-locating-file-schema-file)))
441 (let* ((element
442 (if rng-schema-locating-file-schema
443 (rng-parse-validate-file rng-schema-locating-file-schema
444 file)
445 (nxml-parse-file file)))
446 (children (cddr element))
447 (base-uri (rng-file-name-uri file))
448 child name rules atts att props prop-name prop-value)
449 (when (equal (car element)
450 (cons rng-locate-namespace-uri "locatingRules"))
451 (while children
452 (setq child (car children))
453 (setq children (cdr children))
454 (when (consp child)
455 (setq name (car child))
456 (when (eq (car name) rng-locate-namespace-uri)
457 (setq atts (cadr child))
458 (setq props nil)
459 (while atts
460 (setq att (car atts))
461 (when (stringp (car att))
462 (setq prop-name (intern (car att)))
463 (setq prop-value (cdr att))
464 (when (memq prop-name '(uri rules resource))
465 (setq prop-value
466 (rng-uri-resolve prop-value base-uri)))
467 (setq props (cons (cons prop-name prop-value)
468 props)))
469 (setq atts (cdr atts)))
470 (setq rules
471 (cons (cons (intern (cdr name)) (nreverse props))
472 rules))))))
473 (nreverse rules)))
474
475(defun rng-save-schema-location ()
476 "Save the association between the buffer's file and the current schema.
477This ensures that the schema that is currently being used will be used
478if the file is edited in a future session. The association will be
479saved to the first writable file in `rng-schema-locating-files'."
480 (interactive)
481 (rng-save-schema-location-1 nil))
482
483(defun rng-save-schema-location-1 (prompt &optional type-id)
484 (unless (or rng-current-schema-file-name type-id)
485 (error "Buffer is using a vacuous schema"))
486 (let ((files rng-schema-locating-files)
487 (document-file-name (buffer-file-name))
488 (schema-file-name rng-current-schema-file-name)
489 file)
490 (while (and files (not file))
491 (if (file-writable-p (car files))
492 (setq file (expand-file-name (car files)))
493 (setq files (cdr files))))
494 (cond ((not file)
495 (if prompt
496 nil
497 (error "No writable schema locating file configured")))
498 ((not document-file-name)
499 (if prompt
500 nil
501 (error "Buffer does not have a filename")))
502 ((and prompt
503 (not (y-or-n-p (format "Save %s to %s "
504 (if type-id
505 "type identifier"
506 "schema location")
507 file)))))
508 (t
509 (save-excursion
510 (set-buffer (find-file-noselect file))
511 (let ((modified (buffer-modified-p)))
512 (if (> (buffer-size) 0)
513 (let (xmltok-dtd)
514 (goto-char (point-min))
515 (xmltok-save
516 (xmltok-forward-prolog)
517 (xmltok-forward)
518 (unless (eq xmltok-type 'start-tag)
519 (error "Locating file `%s' invalid" file))))
520 (insert "<?xml version=\"1.0\"?>\n"
521 "<locatingRules xmlns=\""
522 (nxml-namespace-name rng-locate-namespace-uri)
523 "\">")
524 (let ((pos (point)))
525 (insert "\n</locatingRules>\n")
526 (goto-char pos)))
527 (insert "\n")
528 (insert (let ((locating-file-uri (rng-file-name-uri file)))
529 (format "<uri resource=\"%s\" %s=\"%s\"/>"
530 (rng-escape-string
531 (rng-relative-uri
532 (rng-file-name-uri document-file-name)
533 locating-file-uri))
534 (if type-id "typeId" "uri")
535 (rng-escape-string
536 (or type-id
537 (rng-relative-uri
538 (rng-file-name-uri schema-file-name)
539 locating-file-uri))))))
540 (indent-according-to-mode)
541 (when (or (not modified)
542 (y-or-n-p (format "Save file %s "
543 (buffer-file-name))))
544 (save-buffer))))))))
545
546(provide 'rng-loc)
547
548;;; rng-loc.el ends here
diff --git a/lisp/nxml/rng-maint.el b/lisp/nxml/rng-maint.el
new file mode 100644
index 00000000000..ecf1ff1bc99
--- /dev/null
+++ b/lisp/nxml/rng-maint.el
@@ -0,0 +1,343 @@
1;;; rng-maint.el --- commands for RELAX NG maintainers
2
3;; Copyright (C) 2003 Free Software Foundation, Inc.
4
5;; Author: James Clark
6;; Keywords: XML, RelaxNG
7
8;; This program is free software; you can redistribute it and/or
9;; modify it under the terms of the GNU General Public License as
10;; published by the Free Software Foundation; either version 2 of
11;; the License, or (at your option) any later version.
12
13;; This program is distributed in the hope that it will be
14;; useful, but WITHOUT ANY WARRANTY; without even the implied
15;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16;; PURPOSE. See the GNU General Public License for more details.
17
18;; You should have received a copy of the GNU General Public
19;; License along with this program; if not, write to the Free
20;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21;; MA 02111-1307 USA
22
23;;; Commentary:
24
25;;; Code:
26
27(require 'xmltok)
28(require 'nxml-mode)
29(require 'texnfo-upd)
30
31(defvar rng-dir (file-name-directory load-file-name))
32
33(defconst rng-autoload-modules
34 '(xmltok
35 nxml-mode
36 nxml-uchnm
37 nxml-glyph
38 rng-cmpct
39 rng-maint
40 rng-valid
41 rng-xsd
42 rng-nxml))
43
44;;;###autoload
45(defun rng-update-autoloads ()
46 "Update the autoloads in rng-auto.el."
47 (interactive)
48 (let* ((generated-autoload-file (expand-file-name "rng-auto.el"
49 rng-dir)))
50 (mapcar (lambda (x)
51 (update-file-autoloads
52 (expand-file-name (concat (symbol-name x) ".el") rng-dir)))
53 rng-autoload-modules)))
54
55
56(defconst rng-compile-modules
57 '(xmltok
58 nxml-util
59 nxml-enc
60 nxml-glyph
61 nxml-rap
62 nxml-outln
63 nxml-mode
64 nxml-uchnm
65 nxml-ns
66 nxml-parse
67 nxml-maint
68 xsd-regexp
69 rng-util
70 rng-dt
71 rng-xsd
72 rng-uri
73 rng-pttrn
74 rng-cmpct
75 rng-match
76 rng-parse
77 rng-loc
78 rng-valid
79 rng-nxml
80 rng-maint))
81
82;;;###autoload
83(defun rng-byte-compile-load ()
84 "Byte-compile and load all of the RELAX NG library in an appropriate order."
85 (interactive)
86 (mapcar (lambda (x)
87 (byte-compile-file (expand-file-name (concat (symbol-name x) ".el")
88 rng-dir)
89 t))
90 rng-compile-modules))
91
92
93;;; Conversion from XML to texinfo.
94;; This is all a hack and is just enough to make the conversion work.
95;; It's not intended for public use.
96
97(defvar rng-manual-base "nxml-mode")
98(defvar rng-manual-xml (concat rng-manual-base ".xml"))
99(defvar rng-manual-texi (concat rng-manual-base ".texi"))
100(defvar rng-manual-info (concat rng-manual-base ".info"))
101
102;;;###autoload
103(defun rng-format-manual ()
104 "Create manual.texi from manual.xml."
105 (interactive)
106 (let ((xml-buf (find-file-noselect (expand-file-name rng-manual-xml
107 rng-dir)))
108 (texi-buf (find-file-noselect (expand-file-name rng-manual-texi
109 rng-dir))))
110 (save-excursion
111 (set-buffer texi-buf)
112 (erase-buffer)
113 (let ((standard-output texi-buf))
114 (princ (format "\\input texinfo @c -*- texinfo -*-\n\
115@c %%**start of header\n\
116@setfilename %s\n\
117@settitle \n\
118@c %%**end of header\n" rng-manual-info))
119 (set-buffer xml-buf)
120 (goto-char (point-min))
121 (xmltok-save
122 (xmltok-forward-prolog)
123 (rng-process-tokens))
124 (princ "\n@bye\n"))
125 (set-buffer texi-buf)
126 (rng-manual-fixup)
127 (texinfo-insert-node-lines (point-min) (point-max) t)
128 (texinfo-all-menus-update)
129 (save-buffer))))
130
131(defun rng-manual-fixup ()
132 (goto-char (point-min))
133 (search-forward "@top ")
134 (let ((pos (point)))
135 (search-forward "\n")
136 (let ((title (buffer-substring-no-properties pos (1- (point)))))
137 (goto-char (point-min))
138 (search-forward "@settitle ")
139 (insert title)
140 (search-forward "@node")
141 (goto-char (match-beginning 0))
142 (insert "@dircategory Emacs\n"
143 "@direntry\n* "
144 title
145 ": ("
146 rng-manual-info
147 ").\n@end direntry\n\n"))))
148
149(defvar rng-manual-inline-elements '(kbd key samp code var emph uref point))
150
151(defun rng-process-tokens ()
152 (let ((section-depth 0)
153 ;; stack of per-element space treatment
154 ;; t means keep, nil means discard, fill means no blank lines
155 (keep-space-stack (list nil))
156 (ignore-following-newline nil)
157 (want-blank-line nil)
158 name startp endp data keep-space-for-children)
159 (while (xmltok-forward)
160 (cond ((memq xmltok-type '(start-tag empty-element end-tag))
161 (setq startp (memq xmltok-type '(start-tag empty-element)))
162 (setq endp (memq xmltok-type '(end-tag empty-element)))
163 (setq name (intern (if startp
164 (xmltok-start-tag-qname)
165 (xmltok-end-tag-qname))))
166 (setq keep-space-for-children nil)
167 (setq ignore-following-newline nil)
168 (cond ((memq name rng-manual-inline-elements)
169 (when startp
170 (when want-blank-line
171 (rng-manual-output-force-blank-line)
172 (when (eq want-blank-line 'noindent)
173 (princ "@noindent\n"))
174 (setq want-blank-line nil))
175 (setq keep-space-for-children t)
176 (princ (format "@%s{" name)))
177 (when endp (princ "}")))
178 ((eq name 'ulist)
179 (when startp
180 (rng-manual-output-force-blank-line)
181 (setq want-blank-line nil)
182 (princ "@itemize @bullet\n"))
183 (when endp
184 (rng-manual-output-force-new-line)
185 (setq want-blank-line 'noindent)
186 (princ "@end itemize\n")))
187 ((eq name 'item)
188 (rng-manual-output-force-new-line)
189 (setq want-blank-line endp)
190 (when startp (princ "@item\n")))
191 ((memq name '(example display))
192 (when startp
193 (setq ignore-following-newline t)
194 (rng-manual-output-force-blank-line)
195 (setq want-blank-line nil)
196 (setq keep-space-for-children t)
197 (princ (format "@%s\n" name)))
198 (when endp
199 (rng-manual-output-force-new-line)
200 (setq want-blank-line 'noindent)
201 (princ (format "@end %s\n" name))))
202 ((eq name 'para)
203 (rng-manual-output-force-new-line)
204 (when startp
205 (when want-blank-line
206 (setq want-blank-line t))
207 (setq keep-space-for-children 'fill))
208 (when endp (setq want-blank-line t)))
209 ((eq name 'section)
210 (when startp
211 (rng-manual-output-force-blank-line)
212 (when (eq section-depth 0)
213 (princ "@node Top\n"))
214 (princ "@")
215 (princ (nth section-depth '(top
216 chapter
217 section
218 subsection
219 subsubsection)))
220 (princ " ")
221 (setq want-blank-line nil)
222 (setq section-depth (1+ section-depth)))
223 (when endp
224 (rng-manual-output-force-new-line)
225 (setq want-blank-line nil)
226 (setq section-depth (1- section-depth))))
227 ((eq name 'title)
228 (when startp
229 (setq keep-space-for-children 'fill))
230 (when endp
231 (setq want-blank-line t)
232 (princ "\n"))))
233 (when startp
234 (setq keep-space-stack (cons keep-space-for-children
235 keep-space-stack)))
236 (when endp
237 (setq keep-space-stack (cdr keep-space-stack))))
238 ((memq xmltok-type '(data
239 space
240 char-ref
241 entity-ref
242 cdata-section))
243 (setq data nil)
244 (cond ((memq xmltok-type '(data space))
245 (setq data (buffer-substring-no-properties xmltok-start
246 (point))))
247 ((and (memq xmltok-type '(char-ref entity-ref))
248 xmltok-replacement)
249 (setq data xmltok-replacement))
250 ((eq xmltok-type 'cdata-section)
251 (setq data
252 (buffer-substring-no-properties (+ xmltok-start 9)
253 (- (point) 3)))))
254 (when (and data (car keep-space-stack))
255 (setq data (replace-regexp-in-string "[@{}]"
256 "@\\&"
257 data
258 t))
259 (when ignore-following-newline
260 (setq data (replace-regexp-in-string "\\`\n" "" data t)))
261 (setq ignore-following-newline nil)
262;; (when (eq (car keep-space-stack) 'fill)
263;; (setq data (replace-regexp-in-string "\n" " " data t)))
264 (when (eq want-blank-line 'noindent)
265 (setq data (replace-regexp-in-string "\\`\n*" "" data t)))
266 (when (> (length data) 0)
267 (when want-blank-line
268 (rng-manual-output-force-blank-line)
269 (when (eq want-blank-line 'noindent)
270 (princ "@noindent\n"))
271 (setq want-blank-line nil))
272 (princ data))))
273 ))))
274
275(defun rng-manual-output-force-new-line ()
276 (save-excursion
277 (set-buffer standard-output)
278 (unless (eq (char-before) ?\n)
279 (insert ?\n))))
280
281(defun rng-manual-output-force-blank-line ()
282 (save-excursion
283 (set-buffer standard-output)
284 (if (eq (char-before) ?\n)
285 (unless (eq (char-before (1- (point))) ?\n)
286 (insert ?\n))
287 (insert "\n\n"))))
288
289;;; Versioning
290
291;;;###autoload
292(defun rng-write-version ()
293 (find-file "VERSION")
294 (erase-buffer)
295 (insert nxml-version "\n")
296 (save-buffer))
297
298;;; Timing
299
300(defun rng-time-to-float (time)
301 (+ (* (nth 0 time) 65536.0)
302 (nth 1 time)
303 (/ (nth 2 time) 1000000.0)))
304
305(defun rng-time-function (function &rest args)
306 (let* ((start (current-time))
307 (val (apply function args))
308 (end (current-time)))
309 (message "%s ran in %g seconds"
310 function
311 (- (rng-time-to-float end)
312 (rng-time-to-float start)))
313 val))
314
315(defun rng-time-tokenize-buffer ()
316 (interactive)
317 (rng-time-function 'rng-tokenize-buffer))
318
319(defun rng-tokenize-buffer ()
320 (save-excursion
321 (goto-char (point-min))
322 (xmltok-save
323 (xmltok-forward-prolog)
324 (while (xmltok-forward)))))
325
326(defun rng-time-validate-buffer ()
327 (interactive)
328 (rng-time-function 'rng-validate-buffer))
329
330(defun rng-validate-buffer ()
331 (save-restriction
332 (widen)
333 (nxml-with-unmodifying-text-property-changes
334 (rng-clear-cached-state (point-min) (point-max)))
335 ;; 1+ to clear empty overlays at (point-max)
336 (rng-clear-overlays (point-min) (1+ (point-max))))
337 (setq rng-validate-up-to-date-end 1)
338 (rng-clear-conditional-region)
339 (setq rng-error-count 0)
340 (while (rng-do-some-validation
341 (lambda () t))))
342
343;;; rng-maint.el ends here
diff --git a/lisp/nxml/rng-match.el b/lisp/nxml/rng-match.el
new file mode 100644
index 00000000000..d3692615549
--- /dev/null
+++ b/lisp/nxml/rng-match.el
@@ -0,0 +1,1739 @@
1;;; rng-match.el --- matching of RELAX NG patterns against XML events
2
3;; Copyright (C) 2003 Free Software Foundation, Inc.
4
5;; Author: James Clark
6;; Keywords: XML, RelaxNG
7
8;; This program is free software; you can redistribute it and/or
9;; modify it under the terms of the GNU General Public License as
10;; published by the Free Software Foundation; either version 2 of
11;; the License, or (at your option) any later version.
12
13;; This program is distributed in the hope that it will be
14;; useful, but WITHOUT ANY WARRANTY; without even the implied
15;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16;; PURPOSE. See the GNU General Public License for more details.
17
18;; You should have received a copy of the GNU General Public
19;; License along with this program; if not, write to the Free
20;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21;; MA 02111-1307 USA
22
23;;; Commentary:
24
25;; This uses the algorithm described in
26;; http://www.thaiopensource.com/relaxng/derivative.html
27;;
28;; The schema to be used is contained in the variable
29;; rng-current-schema. It has the form described in the file
30;; rng-pttrn.el.
31;;
32;;; Code:
33
34(require 'rng-pttrn)
35(require 'rng-util)
36(require 'rng-dt)
37
38(defvar rng-not-allowed-ipattern nil)
39(defvar rng-empty-ipattern nil)
40(defvar rng-text-ipattern nil)
41
42(defvar rng-compile-table nil)
43
44(defvar rng-being-compiled nil
45 "Contains a list of ref patterns currently being compiled.
46Used to detect illegal recursive references.")
47
48(defvar rng-ipattern-table nil)
49
50(defvar rng-last-ipattern-index nil)
51
52(defvar rng-match-state nil
53 "An ipattern representing the current state of validation.")
54
55;;; Inline functions
56
57(defsubst rng-update-match-state (new-state)
58 (if (and (eq new-state rng-not-allowed-ipattern)
59 (not (eq rng-match-state rng-not-allowed-ipattern)))
60 nil
61 (setq rng-match-state new-state)
62 t))
63
64;;; Interned patterns
65
66(eval-when-compile
67 (defun rng-ipattern-slot-accessor-name (slot-name)
68 (intern (concat "rng-ipattern-get-"
69 (symbol-name slot-name))))
70
71 (defun rng-ipattern-slot-setter-name (slot-name)
72 (intern (concat "rng-ipattern-set-"
73 (symbol-name slot-name)))))
74
75(defmacro rng-ipattern-defslot (slot-name index)
76 `(progn
77 (defsubst ,(rng-ipattern-slot-accessor-name slot-name) (ipattern)
78 (aref ipattern ,index))
79 (defsubst ,(rng-ipattern-slot-setter-name slot-name) (ipattern value)
80 (aset ipattern ,index value))))
81
82(rng-ipattern-defslot type 0)
83(rng-ipattern-defslot index 1)
84(rng-ipattern-defslot name-class 2)
85(rng-ipattern-defslot datatype 2)
86(rng-ipattern-defslot after 2)
87(rng-ipattern-defslot child 3)
88(rng-ipattern-defslot value-object 3)
89(rng-ipattern-defslot nullable 4)
90(rng-ipattern-defslot memo-text-typed 5)
91(rng-ipattern-defslot memo-map-start-tag-open-deriv 6)
92(rng-ipattern-defslot memo-map-start-attribute-deriv 7)
93(rng-ipattern-defslot memo-start-tag-close-deriv 8)
94(rng-ipattern-defslot memo-text-only-deriv 9)
95(rng-ipattern-defslot memo-mixed-text-deriv 10)
96(rng-ipattern-defslot memo-map-data-deriv 11)
97(rng-ipattern-defslot memo-end-tag-deriv 12)
98
99(defconst rng-memo-map-alist-max 10)
100
101(defsubst rng-memo-map-get (key mm)
102 "Return the value associated with KEY in memo-map MM."
103 (let ((found (assoc key mm)))
104 (if found
105 (cdr found)
106 (and mm
107 (let ((head (car mm)))
108 (and (hash-table-p head)
109 (gethash key head)))))))
110
111(defun rng-memo-map-add (key value mm &optional weakness)
112 "Associate KEY with VALUE in memo-map MM and return the new memo-map.
113The new memo-map may or may not be a different object from MM.
114
115Alists are better for small maps. Hash tables are better for large
116maps. A memo-map therefore starts off as an alist and switches to a
117hash table for large memo-maps. A memo-map is always a list. An empty
118memo-map is represented by nil. A large memo-map is represented by a
119list containing just a hash-table. A small memo map is represented by
120a list whose cdr is an alist and whose car is the number of entries in
121the alist. The complete memo-map can be passed to assoc without
122problems: assoc ignores any members that are not cons cells. There is
123therefore minimal overhead in successful lookups on small lists
124\(which is the most common case)."
125 (if (null mm)
126 (list 1 (cons key value))
127 (let ((head (car mm)))
128 (cond ((hash-table-p head)
129 (puthash key value head)
130 mm)
131 ((>= head rng-memo-map-alist-max)
132 (let ((ht (make-hash-table :test 'equal
133 :weakness weakness
134 :size (* 2 rng-memo-map-alist-max))))
135 (setq mm (cdr mm))
136 (while mm
137 (setq head (car mm))
138 (puthash (car head) (cdr head) ht)
139 (setq mm (cdr mm)))
140 (cons ht nil)))
141 (t (cons (1+ head)
142 (cons (cons key value)
143 (cdr mm))))))))
144
145(defsubst rng-make-ipattern (type index name-class child nullable)
146 (vector type index name-class child nullable
147 ;; 5 memo-text-typed
148 'unknown
149 ;; 6 memo-map-start-tag-open-deriv
150 nil
151 ;; 7 memo-map-start-attribute-deriv
152 nil
153 ;; 8 memo-start-tag-close-deriv
154 nil
155 ;; 9 memo-text-only-deriv
156 nil
157 ;; 10 memo-mixed-text-deriv
158 nil
159 ;; 11 memo-map-data-deriv
160 nil
161 ;; 12 memo-end-tag-deriv
162 nil))
163
164(defun rng-ipattern-maybe-init ()
165 (unless rng-ipattern-table
166 (setq rng-ipattern-table (make-hash-table :test 'equal))
167 (setq rng-last-ipattern-index -1)))
168
169(defun rng-ipattern-clear ()
170 (when rng-ipattern-table
171 (clrhash rng-ipattern-table))
172 (setq rng-last-ipattern-index -1))
173
174(defsubst rng-gen-ipattern-index ()
175 (setq rng-last-ipattern-index (1+ rng-last-ipattern-index)))
176
177(defun rng-put-ipattern (key type name-class child nullable)
178 (let ((ipattern
179 (rng-make-ipattern type
180 (rng-gen-ipattern-index)
181 name-class
182 child
183 nullable)))
184 (puthash key ipattern rng-ipattern-table)
185 ipattern))
186
187(defun rng-get-ipattern (key)
188 (gethash key rng-ipattern-table))
189
190(or rng-not-allowed-ipattern
191 (setq rng-not-allowed-ipattern
192 (rng-make-ipattern 'not-allowed -3 nil nil nil)))
193
194(or rng-empty-ipattern
195 (setq rng-empty-ipattern
196 (rng-make-ipattern 'empty -2 nil nil t)))
197
198(or rng-text-ipattern
199 (setq rng-text-ipattern
200 (rng-make-ipattern 'text -1 nil nil t)))
201
202(defconst rng-const-ipatterns
203 (list rng-not-allowed-ipattern
204 rng-empty-ipattern
205 rng-text-ipattern))
206
207(defun rng-intern-after (child after)
208 (if (eq child rng-not-allowed-ipattern)
209 rng-not-allowed-ipattern
210 (let ((key (list 'after
211 (rng-ipattern-get-index child)
212 (rng-ipattern-get-index after))))
213 (or (rng-get-ipattern key)
214 (rng-put-ipattern key
215 'after
216 after
217 child
218 nil)))))
219
220(defun rng-intern-attribute (name-class ipattern)
221 (if (eq ipattern rng-not-allowed-ipattern)
222 rng-not-allowed-ipattern
223 (let ((key (list 'attribute
224 name-class
225 (rng-ipattern-get-index ipattern))))
226 (or (rng-get-ipattern key)
227 (rng-put-ipattern key
228 'attribute
229 name-class
230 ipattern
231 nil)))))
232
233(defun rng-intern-data (dt matches-anything)
234 (let ((key (list 'data dt)))
235 (or (rng-get-ipattern key)
236 (let ((ipattern (rng-put-ipattern key
237 'data
238 dt
239 nil
240 matches-anything)))
241 (rng-ipattern-set-memo-text-typed ipattern
242 (not matches-anything))
243 ipattern))))
244
245(defun rng-intern-data-except (dt ipattern)
246 (let ((key (list 'data-except dt ipattern)))
247 (or (rng-get-ipattern key)
248 (rng-put-ipattern key
249 'data-except
250 dt
251 ipattern
252 nil))))
253
254(defun rng-intern-value (dt obj)
255 (let ((key (list 'value dt obj)))
256 (or (rng-get-ipattern key)
257 (rng-put-ipattern key
258 'value
259 dt
260 obj
261 nil))))
262
263(defun rng-intern-one-or-more (ipattern)
264 (or (rng-intern-one-or-more-shortcut ipattern)
265 (let ((key (cons 'one-or-more
266 (list (rng-ipattern-get-index ipattern)))))
267 (or (rng-get-ipattern key)
268 (rng-put-ipattern key
269 'one-or-more
270 nil
271 ipattern
272 (rng-ipattern-get-nullable ipattern))))))
273
274(defun rng-intern-one-or-more-shortcut (ipattern)
275 (cond ((eq ipattern rng-not-allowed-ipattern)
276 rng-not-allowed-ipattern)
277 ((eq ipattern rng-empty-ipattern)
278 rng-empty-ipattern)
279 ((eq (rng-ipattern-get-type ipattern) 'one-or-more)
280 ipattern)
281 (t nil)))
282
283(defun rng-intern-list (ipattern)
284 (if (eq ipattern rng-not-allowed-ipattern)
285 rng-not-allowed-ipattern
286 (let ((key (cons 'list
287 (list (rng-ipattern-get-index ipattern)))))
288 (or (rng-get-ipattern key)
289 (rng-put-ipattern key
290 'list
291 nil
292 ipattern
293 nil)))))
294
295(defun rng-intern-group (ipatterns)
296 "Return a ipattern for the list of group members in IPATTERNS."
297 (or (rng-intern-group-shortcut ipatterns)
298 (let* ((tem (rng-normalize-group-list ipatterns))
299 (normalized (cdr tem)))
300 (or (rng-intern-group-shortcut normalized)
301 (let ((key (cons 'group
302 (mapcar 'rng-ipattern-get-index normalized))))
303 (or (rng-get-ipattern key)
304 (rng-put-ipattern key
305 'group
306 nil
307 normalized
308 (car tem))))))))
309
310(defun rng-intern-group-shortcut (ipatterns)
311 "Try to shortcut interning a group list. If successful, return the
312interned pattern. Otherwise return nil."
313 (while (and ipatterns
314 (eq (car ipatterns) rng-empty-ipattern))
315 (setq ipatterns (cdr ipatterns)))
316 (if ipatterns
317 (let ((ret (car ipatterns)))
318 (if (eq ret rng-not-allowed-ipattern)
319 rng-not-allowed-ipattern
320 (setq ipatterns (cdr ipatterns))
321 (while (and ipatterns ret)
322 (let ((tem (car ipatterns)))
323 (cond ((eq tem rng-not-allowed-ipattern)
324 (setq ret tem)
325 (setq ipatterns nil))
326 ((eq tem rng-empty-ipattern)
327 (setq ipatterns (cdr ipatterns)))
328 (t
329 ;; Stop here rather than continuing
330 ;; looking for not-allowed patterns.
331 ;; We do a complete scan elsewhere.
332 (setq ret nil)))))
333 ret))
334 rng-empty-ipattern))
335
336(defun rng-normalize-group-list (ipatterns)
337 "Normalize a list containing members of a group.
338Expands nested groups, removes empty members, handles notAllowed.
339Returns a pair whose car says whether the list is nullable and whose
340cdr is the normalized list."
341 (let ((nullable t)
342 (result nil)
343 member)
344 (while ipatterns
345 (setq member (car ipatterns))
346 (setq ipatterns (cdr ipatterns))
347 (when nullable
348 (setq nullable (rng-ipattern-get-nullable member)))
349 (cond ((eq (rng-ipattern-get-type member) 'group)
350 (setq result
351 (nconc (reverse (rng-ipattern-get-child member))
352 result)))
353 ((eq member rng-not-allowed-ipattern)
354 (setq result (list rng-not-allowed-ipattern))
355 (setq ipatterns nil))
356 ((not (eq member rng-empty-ipattern))
357 (setq result (cons member result)))))
358 (cons nullable (nreverse result))))
359
360(defun rng-intern-interleave (ipatterns)
361 (or (rng-intern-group-shortcut ipatterns)
362 (let* ((tem (rng-normalize-interleave-list ipatterns))
363 (normalized (cdr tem)))
364 (or (rng-intern-group-shortcut normalized)
365 (let ((key (cons 'interleave
366 (mapcar 'rng-ipattern-get-index normalized))))
367 (or (rng-get-ipattern key)
368 (rng-put-ipattern key
369 'interleave
370 nil
371 normalized
372 (car tem))))))))
373
374(defun rng-normalize-interleave-list (ipatterns)
375 "Normalize a list containing members of an interleave.
376Expands nested groups, removes empty members, handles notAllowed.
377Returns a pair whose car says whether the list is nullable and whose
378cdr is the normalized list."
379 (let ((nullable t)
380 (result nil)
381 member)
382 (while ipatterns
383 (setq member (car ipatterns))
384 (setq ipatterns (cdr ipatterns))
385 (when nullable
386 (setq nullable (rng-ipattern-get-nullable member)))
387 (cond ((eq (rng-ipattern-get-type member) 'interleave)
388 (setq result
389 (append (rng-ipattern-get-child member)
390 result)))
391 ((eq member rng-not-allowed-ipattern)
392 (setq result (list rng-not-allowed-ipattern))
393 (setq ipatterns nil))
394 ((not (eq member rng-empty-ipattern))
395 (setq result (cons member result)))))
396 (cons nullable (sort result 'rng-compare-ipattern))))
397
398;; Would be cleaner if this didn't modify IPATTERNS.
399
400(defun rng-intern-choice (ipatterns)
401 "Return a choice ipattern for the list of choices in IPATTERNS.
402May alter IPATTERNS."
403 (or (rng-intern-choice-shortcut ipatterns)
404 (let* ((tem (rng-normalize-choice-list ipatterns))
405 (normalized (cdr tem)))
406 (or (rng-intern-choice-shortcut normalized)
407 (rng-intern-choice1 normalized (car tem))))))
408
409(defun rng-intern-optional (ipattern)
410 (cond ((rng-ipattern-get-nullable ipattern) ipattern)
411 ((eq ipattern rng-not-allowed-ipattern) rng-empty-ipattern)
412 (t (rng-intern-choice1
413 ;; This is sorted since the empty pattern
414 ;; is before everything except not allowed.
415 ;; It cannot have a duplicate empty pattern,
416 ;; since it is not nullable.
417 (cons rng-empty-ipattern
418 (if (eq (rng-ipattern-get-type ipattern) 'choice)
419 (rng-ipattern-get-child ipattern)
420 (list ipattern)))
421 t))))
422
423
424(defun rng-intern-choice1 (normalized nullable)
425 (let ((key (cons 'choice
426 (mapcar 'rng-ipattern-get-index normalized))))
427 (or (rng-get-ipattern key)
428 (rng-put-ipattern key
429 'choice
430 nil
431 normalized
432 nullable))))
433
434(defun rng-intern-choice-shortcut (ipatterns)
435 "Try to shortcut interning a choice list. If successful, return the
436interned pattern. Otherwise return nil."
437 (while (and ipatterns
438 (eq (car ipatterns)
439 rng-not-allowed-ipattern))
440 (setq ipatterns (cdr ipatterns)))
441 (if ipatterns
442 (let ((ret (car ipatterns)))
443 (setq ipatterns (cdr ipatterns))
444 (while (and ipatterns ret)
445 (or (eq (car ipatterns) rng-not-allowed-ipattern)
446 (eq (car ipatterns) ret)
447 (setq ret nil))
448 (setq ipatterns (cdr ipatterns)))
449 ret)
450 rng-not-allowed-ipattern))
451
452(defun rng-normalize-choice-list (ipatterns)
453 "Normalize a list of choices, expanding nested choices, removing
454not-allowed members, sorting by index and removing duplicates. Return
455a pair whose car says whether the list is nullable and whose cdr is
456the normalized list."
457 (let ((sorted t)
458 (nullable nil)
459 (head (cons nil ipatterns)))
460 (let ((tail head)
461 (final-tail nil)
462 (prev-index -100)
463 (cur ipatterns)
464 member)
465 ;; the cdr of tail is always cur
466 (while cur
467 (setq member (car cur))
468 (or nullable
469 (setq nullable (rng-ipattern-get-nullable member)))
470 (cond ((eq (rng-ipattern-get-type member) 'choice)
471 (setq final-tail
472 (append (rng-ipattern-get-child member)
473 final-tail))
474 (setq cur (cdr cur))
475 (setq sorted nil)
476 (setcdr tail cur))
477 ((eq member rng-not-allowed-ipattern)
478 (setq cur (cdr cur))
479 (setcdr tail cur))
480 (t
481 (if (and sorted
482 (let ((cur-index (rng-ipattern-get-index member)))
483 (if (>= prev-index cur-index)
484 (or (= prev-index cur-index) ; will remove it
485 (setq sorted nil)) ; won't remove it
486 (setq prev-index cur-index)
487 ;; won't remove it
488 nil)))
489 (progn
490 ;; remove it
491 (setq cur (cdr cur))
492 (setcdr tail cur))
493 ;; don't remove it
494 (setq tail cur)
495 (setq cur (cdr cur))))))
496 (setcdr tail final-tail))
497 (setq head (cdr head))
498 (cons nullable
499 (if sorted
500 head
501 (rng-uniquify-eq (sort head 'rng-compare-ipattern))))))
502
503(defun rng-compare-ipattern (p1 p2)
504 (< (rng-ipattern-get-index p1)
505 (rng-ipattern-get-index p2)))
506
507;;; Name classes
508
509(defsubst rng-name-class-contains (nc nm)
510 (if (consp nc)
511 (equal nm nc)
512 (rng-name-class-contains1 nc nm)))
513
514(defun rng-name-class-contains1 (nc nm)
515 (let ((type (aref nc 0)))
516 (cond ((eq type 'any-name) t)
517 ((eq type 'any-name-except)
518 (not (rng-name-class-contains (aref nc 1) nm)))
519 ((eq type 'ns-name)
520 (eq (car nm) (aref nc 1)))
521 ((eq type 'ns-name-except)
522 (and (eq (car nm) (aref nc 1))
523 (not (rng-name-class-contains (aref nc 2) nm))))
524 ((eq type 'choice)
525 (let ((choices (aref nc 1))
526 (ret nil))
527 (while choices
528 (if (rng-name-class-contains (car choices) nm)
529 (progn
530 (setq choices nil)
531 (setq ret t))
532 (setq choices (cdr choices))))
533 ret)))))
534
535(defun rng-name-class-possible-names (nc accum)
536 "Return a list of possible names that nameclass NC can match.
537
538Each possible name should be returned as a (NAMESPACE . LOCAL-NAME)
539pair, where NAMESPACE is a symbol or nil and LOCAL-NAME is a string.
540nil for NAMESPACE matches the absent namespace. ACCUM is a list of
541names which should be appended to the returned list. The returned list
542may contain duplicates."
543 (if (consp nc)
544 (cons nc accum)
545 (when (eq (aref nc 0) 'choice)
546 (let ((members (aref nc 1)) member)
547 (while members
548 (setq member (car members))
549 (setq accum
550 (if (consp member)
551 (cons member accum)
552 (rng-name-class-possible-names member
553 accum)))
554 (setq members (cdr members)))))
555 accum))
556
557;;; Debugging utilities
558
559(defun rng-ipattern-to-string (ipattern)
560 (let ((type (rng-ipattern-get-type ipattern)))
561 (cond ((eq type 'after)
562 (concat (rng-ipattern-to-string
563 (rng-ipattern-get-child ipattern))
564 " </> "
565 (rng-ipattern-to-string
566 (rng-ipattern-get-after ipattern))))
567 ((eq type 'element)
568 (concat "element "
569 (rng-name-class-to-string
570 (rng-ipattern-get-name-class ipattern))
571 ;; we can get cycles with elements so don't print it out
572 " {...}"))
573 ((eq type 'attribute)
574 (concat "attribute "
575 (rng-name-class-to-string
576 (rng-ipattern-get-name-class ipattern))
577 " { "
578 (rng-ipattern-to-string
579 (rng-ipattern-get-child ipattern))
580 " } "))
581 ((eq type 'empty) "empty")
582 ((eq type 'text) "text")
583 ((eq type 'not-allowed) "notAllowed")
584 ((eq type 'one-or-more)
585 (concat (rng-ipattern-to-string
586 (rng-ipattern-get-child ipattern))
587 "+"))
588 ((eq type 'choice)
589 (concat "("
590 (mapconcat 'rng-ipattern-to-string
591 (rng-ipattern-get-child ipattern)
592 " | ")
593 ")"))
594 ((eq type 'group)
595 (concat "("
596 (mapconcat 'rng-ipattern-to-string
597 (rng-ipattern-get-child ipattern)
598 ", ")
599 ")"))
600 ((eq type 'interleave)
601 (concat "("
602 (mapconcat 'rng-ipattern-to-string
603 (rng-ipattern-get-child ipattern)
604 " & ")
605 ")"))
606 (t (symbol-name type)))))
607
608(defun rng-name-class-to-string (nc)
609 (if (consp nc)
610 (cdr nc)
611 (let ((type (aref nc 0)))
612 (cond ((eq type 'choice)
613 (mapconcat 'rng-name-class-to-string
614 (aref nc 1)
615 "|"))
616 (t (concat (symbol-name type) "*"))))))
617
618
619;;; Compiling
620
621(defun rng-compile-maybe-init ()
622 (unless rng-compile-table
623 (setq rng-compile-table (make-hash-table :test 'eq))))
624
625(defun rng-compile-clear ()
626 (when rng-compile-table
627 (clrhash rng-compile-table)))
628
629(defun rng-compile (pattern)
630 (or (gethash pattern rng-compile-table)
631 (let ((ipattern (apply (get (car pattern) 'rng-compile)
632 (cdr pattern))))
633 (puthash pattern ipattern rng-compile-table)
634 ipattern)))
635
636(put 'empty 'rng-compile 'rng-compile-empty)
637(put 'text 'rng-compile 'rng-compile-text)
638(put 'not-allowed 'rng-compile 'rng-compile-not-allowed)
639(put 'element 'rng-compile 'rng-compile-element)
640(put 'attribute 'rng-compile 'rng-compile-attribute)
641(put 'choice 'rng-compile 'rng-compile-choice)
642(put 'optional 'rng-compile 'rng-compile-optional)
643(put 'group 'rng-compile 'rng-compile-group)
644(put 'interleave 'rng-compile 'rng-compile-interleave)
645(put 'ref 'rng-compile 'rng-compile-ref)
646(put 'one-or-more 'rng-compile 'rng-compile-one-or-more)
647(put 'zero-or-more 'rng-compile 'rng-compile-zero-or-more)
648(put 'mixed 'rng-compile 'rng-compile-mixed)
649(put 'data 'rng-compile 'rng-compile-data)
650(put 'data-except 'rng-compile 'rng-compile-data-except)
651(put 'value 'rng-compile 'rng-compile-value)
652(put 'list 'rng-compile 'rng-compile-list)
653
654(defun rng-compile-not-allowed () rng-not-allowed-ipattern)
655(defun rng-compile-empty () rng-empty-ipattern)
656(defun rng-compile-text () rng-text-ipattern)
657
658(defun rng-compile-element (name-class pattern)
659 ;; don't intern
660 (rng-make-ipattern 'element
661 (rng-gen-ipattern-index)
662 (rng-compile-name-class name-class)
663 pattern ; compile lazily
664 nil))
665
666(defun rng-element-get-child (element)
667 (let ((tem (rng-ipattern-get-child element)))
668 (if (vectorp tem)
669 tem
670 (rng-ipattern-set-child element (rng-compile tem)))))
671
672(defun rng-compile-attribute (name-class pattern)
673 (rng-intern-attribute (rng-compile-name-class name-class)
674 (rng-compile pattern)))
675
676(defun rng-compile-ref (pattern name)
677 (and (memq pattern rng-being-compiled)
678 (rng-compile-error "Reference loop on symbol %s" name))
679 (setq rng-being-compiled
680 (cons pattern rng-being-compiled))
681 (unwind-protect
682 (rng-compile pattern)
683 (setq rng-being-compiled
684 (cdr rng-being-compiled))))
685
686(defun rng-compile-one-or-more (pattern)
687 (rng-intern-one-or-more (rng-compile pattern)))
688
689(defun rng-compile-zero-or-more (pattern)
690 (rng-intern-optional
691 (rng-intern-one-or-more (rng-compile pattern))))
692
693(defun rng-compile-optional (pattern)
694 (rng-intern-optional (rng-compile pattern)))
695
696(defun rng-compile-mixed (pattern)
697 (rng-intern-interleave (cons rng-text-ipattern
698 (list (rng-compile pattern)))))
699
700(defun rng-compile-list (pattern)
701 (rng-intern-list (rng-compile pattern)))
702
703(defun rng-compile-choice (&rest patterns)
704 (rng-intern-choice (mapcar 'rng-compile patterns)))
705
706(defun rng-compile-group (&rest patterns)
707 (rng-intern-group (mapcar 'rng-compile patterns)))
708
709(defun rng-compile-interleave (&rest patterns)
710 (rng-intern-interleave (mapcar 'rng-compile patterns)))
711
712(defun rng-compile-dt (name params)
713 (let ((rng-dt-error-reporter 'rng-compile-error))
714 (funcall (let ((uri (car name)))
715 (or (get uri 'rng-dt-compile)
716 (rng-compile-error "Unknown datatype library %s" uri)))
717 (cdr name)
718 params)))
719
720(defun rng-compile-data (name params)
721 (let ((dt (rng-compile-dt name params)))
722 (rng-intern-data (cdr dt) (car dt))))
723
724(defun rng-compile-data-except (name params pattern)
725 (rng-intern-data-except (cdr (rng-compile-dt name params))
726 (rng-compile pattern)))
727
728(defun rng-compile-value (name str context)
729 (let* ((dt (cdr (rng-compile-dt name '())))
730 (rng-dt-namespace-context-getter (list 'identity context))
731 (obj (rng-dt-make-value dt str)))
732 (if obj
733 (rng-intern-value dt obj)
734 (rng-compile-error "Value %s is not a valid instance of the datatype %s"
735 str
736 name))))
737
738(defun rng-compile-name-class (nc)
739 (let ((type (car nc)))
740 (cond ((eq type 'name) (nth 1 nc))
741 ((eq type 'any-name) [any-name])
742 ((eq type 'any-name-except)
743 (vector 'any-name-except
744 (rng-compile-name-class (nth 1 nc))))
745 ((eq type 'ns-name)
746 (vector 'ns-name (nth 1 nc)))
747 ((eq type 'ns-name-except)
748 (vector 'ns-name-except
749 (nth 1 nc)
750 (rng-compile-name-class (nth 2 nc))))
751 ((eq type 'choice)
752 (vector 'choice
753 (mapcar 'rng-compile-name-class (cdr nc))))
754 (t (error "Bad name-class type %s" type)))))
755
756;;; Searching patterns
757
758;; We write this non-recursively to avoid hitting max-lisp-eval-depth
759;; on large schemas.
760
761(defun rng-map-element-attribute (function pattern accum &rest args)
762 (let ((searched (make-hash-table :test 'eq))
763 type todo patterns)
764 (while (progn
765 (setq type (car pattern))
766 (cond ((memq type '(element attribute))
767 (setq accum
768 (apply function
769 (cons pattern
770 (cons accum args))))
771 (setq pattern (nth 2 pattern)))
772 ((eq type 'ref)
773 (setq pattern (nth 1 pattern))
774 (if (gethash pattern searched)
775 (setq pattern nil)
776 (puthash pattern t searched)))
777 ((memq type '(choice group interleave))
778 (setq todo (cons (cdr pattern) todo))
779 (setq pattern nil))
780 ((memq type '(one-or-more
781 zero-or-more
782 optional
783 mixed))
784 (setq pattern (nth 1 pattern)))
785 (t (setq pattern nil)))
786 (cond (pattern)
787 (patterns
788 (setq pattern (car patterns))
789 (setq patterns (cdr patterns))
790 t)
791 (todo
792 (setq patterns (car todo))
793 (setq todo (cdr todo))
794 (setq pattern (car patterns))
795 (setq patterns (cdr patterns))
796 t))))
797 accum))
798
799(defun rng-find-element-content-pattern (pattern accum name)
800 (if (and (eq (car pattern) 'element)
801 (rng-search-name name (nth 1 pattern)))
802 (cons (rng-compile (nth 2 pattern)) accum)
803 accum))
804
805(defun rng-search-name (name nc)
806 (let ((type (car nc)))
807 (cond ((eq type 'name)
808 (equal (cadr nc) name))
809 ((eq type 'choice)
810 (let ((choices (cdr nc))
811 (found nil))
812 (while (and choices (not found))
813 (if (rng-search-name name (car choices))
814 (setq found t)
815 (setq choices (cdr choices))))
816 found))
817 (t nil))))
818
819(defun rng-find-name-class-uris (nc accum)
820 (let ((type (car nc)))
821 (cond ((eq type 'name)
822 (rng-accum-namespace-uri (car (nth 1 nc)) accum))
823 ((memq type '(ns-name ns-name-except))
824 (rng-accum-namespace-uri (nth 1 nc) accum))
825 ((eq type 'choice)
826 (let ((choices (cdr nc)))
827 (while choices
828 (setq accum
829 (rng-find-name-class-uris (car choices) accum))
830 (setq choices (cdr choices))))
831 accum)
832 (t accum))))
833
834(defun rng-accum-namespace-uri (ns accum)
835 (if (and ns (not (memq ns accum)))
836 (cons ns accum)
837 accum))
838
839;;; Derivatives
840
841(defun rng-ipattern-text-typed-p (ipattern)
842 (let ((memo (rng-ipattern-get-memo-text-typed ipattern)))
843 (if (eq memo 'unknown)
844 (rng-ipattern-set-memo-text-typed
845 ipattern
846 (rng-ipattern-compute-text-typed-p ipattern))
847 memo)))
848
849(defun rng-ipattern-compute-text-typed-p (ipattern)
850 (let ((type (rng-ipattern-get-type ipattern)))
851 (cond ((eq type 'choice)
852 (let ((cur (rng-ipattern-get-child ipattern))
853 (ret nil))
854 (while (and cur (not ret))
855 (if (rng-ipattern-text-typed-p (car cur))
856 (setq ret t)
857 (setq cur (cdr cur))))
858 ret))
859 ((eq type 'group)
860 (let ((cur (rng-ipattern-get-child ipattern))
861 (ret nil)
862 member)
863 (while (and cur (not ret))
864 (setq member (car cur))
865 (if (rng-ipattern-text-typed-p member)
866 (setq ret t))
867 (setq cur
868 (and (rng-ipattern-get-nullable member)
869 (cdr cur))))
870 ret))
871 ((eq type 'after)
872 (rng-ipattern-text-typed-p (rng-ipattern-get-child ipattern)))
873 (t (and (memq type '(value list data data-except)) t)))))
874
875(defun rng-start-tag-open-deriv (ipattern nm)
876 (or (rng-memo-map-get
877 nm
878 (rng-ipattern-get-memo-map-start-tag-open-deriv ipattern))
879 (rng-ipattern-memo-start-tag-open-deriv
880 ipattern
881 nm
882 (rng-compute-start-tag-open-deriv ipattern nm))))
883
884(defun rng-ipattern-memo-start-tag-open-deriv (ipattern nm deriv)
885 (or (memq ipattern rng-const-ipatterns)
886 (rng-ipattern-set-memo-map-start-tag-open-deriv
887 ipattern
888 (rng-memo-map-add nm
889 deriv
890 (rng-ipattern-get-memo-map-start-tag-open-deriv
891 ipattern))))
892 deriv)
893
894(defun rng-compute-start-tag-open-deriv (ipattern nm)
895 (let ((type (rng-ipattern-get-type ipattern)))
896 (cond ((eq type 'choice)
897 (rng-transform-choice `(lambda (p)
898 (rng-start-tag-open-deriv p ',nm))
899 ipattern))
900 ((eq type 'element)
901 (if (rng-name-class-contains
902 (rng-ipattern-get-name-class ipattern)
903 nm)
904 (rng-intern-after (rng-element-get-child ipattern)
905 rng-empty-ipattern)
906 rng-not-allowed-ipattern))
907 ((eq type 'group)
908 (rng-transform-group-nullable
909 `(lambda (p) (rng-start-tag-open-deriv p ',nm))
910 'rng-cons-group-after
911 ipattern))
912 ((eq type 'interleave)
913 (rng-transform-interleave-single
914 `(lambda (p) (rng-start-tag-open-deriv p ',nm))
915 'rng-subst-interleave-after
916 ipattern))
917 ((eq type 'one-or-more)
918 (rng-apply-after
919 `(lambda (p)
920 (rng-intern-group (list p ,(rng-intern-optional ipattern))))
921 (rng-start-tag-open-deriv (rng-ipattern-get-child ipattern)
922 nm)))
923 ((eq type 'after)
924 (rng-apply-after
925 `(lambda (p)
926 (rng-intern-after p
927 ,(rng-ipattern-get-after ipattern)))
928 (rng-start-tag-open-deriv (rng-ipattern-get-child ipattern)
929 nm)))
930 (t rng-not-allowed-ipattern))))
931
932(defun rng-start-attribute-deriv (ipattern nm)
933 (or (rng-memo-map-get
934 nm
935 (rng-ipattern-get-memo-map-start-attribute-deriv ipattern))
936 (rng-ipattern-memo-start-attribute-deriv
937 ipattern
938 nm
939 (rng-compute-start-attribute-deriv ipattern nm))))
940
941(defun rng-ipattern-memo-start-attribute-deriv (ipattern nm deriv)
942 (or (memq ipattern rng-const-ipatterns)
943 (rng-ipattern-set-memo-map-start-attribute-deriv
944 ipattern
945 (rng-memo-map-add
946 nm
947 deriv
948 (rng-ipattern-get-memo-map-start-attribute-deriv ipattern))))
949 deriv)
950
951(defun rng-compute-start-attribute-deriv (ipattern nm)
952 (let ((type (rng-ipattern-get-type ipattern)))
953 (cond ((eq type 'choice)
954 (rng-transform-choice `(lambda (p)
955 (rng-start-attribute-deriv p ',nm))
956 ipattern))
957 ((eq type 'attribute)
958 (if (rng-name-class-contains
959 (rng-ipattern-get-name-class ipattern)
960 nm)
961 (rng-intern-after (rng-ipattern-get-child ipattern)
962 rng-empty-ipattern)
963 rng-not-allowed-ipattern))
964 ((eq type 'group)
965 (rng-transform-interleave-single
966 `(lambda (p) (rng-start-attribute-deriv p ',nm))
967 'rng-subst-group-after
968 ipattern))
969 ((eq type 'interleave)
970 (rng-transform-interleave-single
971 `(lambda (p) (rng-start-attribute-deriv p ',nm))
972 'rng-subst-interleave-after
973 ipattern))
974 ((eq type 'one-or-more)
975 (rng-apply-after
976 `(lambda (p)
977 (rng-intern-group (list p ,(rng-intern-optional ipattern))))
978 (rng-start-attribute-deriv (rng-ipattern-get-child ipattern)
979 nm)))
980 ((eq type 'after)
981 (rng-apply-after
982 `(lambda (p)
983 (rng-intern-after p ,(rng-ipattern-get-after ipattern)))
984 (rng-start-attribute-deriv (rng-ipattern-get-child ipattern)
985 nm)))
986 (t rng-not-allowed-ipattern))))
987
988(defun rng-cons-group-after (x y)
989 (rng-apply-after `(lambda (p) (rng-intern-group (cons p ',y)))
990 x))
991
992(defun rng-subst-group-after (new old list)
993 (rng-apply-after `(lambda (p)
994 (rng-intern-group (rng-substq p ,old ',list)))
995 new))
996
997(defun rng-subst-interleave-after (new old list)
998 (rng-apply-after `(lambda (p)
999 (rng-intern-interleave (rng-substq p ,old ',list)))
1000 new))
1001
1002(defun rng-apply-after (f ipattern)
1003 (let ((type (rng-ipattern-get-type ipattern)))
1004 (cond ((eq type 'after)
1005 (rng-intern-after
1006 (rng-ipattern-get-child ipattern)
1007 (funcall f
1008 (rng-ipattern-get-after ipattern))))
1009 ((eq type 'choice)
1010 (rng-transform-choice `(lambda (x) (rng-apply-after ,f x))
1011 ipattern))
1012 (t rng-not-allowed-ipattern))))
1013
1014(defun rng-start-tag-close-deriv (ipattern)
1015 (or (rng-ipattern-get-memo-start-tag-close-deriv ipattern)
1016 (rng-ipattern-set-memo-start-tag-close-deriv
1017 ipattern
1018 (rng-compute-start-tag-close-deriv ipattern))))
1019
1020(defconst rng-transform-map
1021 '((choice . rng-transform-choice)
1022 (group . rng-transform-group)
1023 (interleave . rng-transform-interleave)
1024 (one-or-more . rng-transform-one-or-more)
1025 (after . rng-transform-after-child)))
1026
1027(defun rng-compute-start-tag-close-deriv (ipattern)
1028 (let* ((type (rng-ipattern-get-type ipattern)))
1029 (if (eq type 'attribute)
1030 rng-not-allowed-ipattern
1031 (let ((transform (assq type rng-transform-map)))
1032 (if transform
1033 (funcall (cdr transform)
1034 'rng-start-tag-close-deriv
1035 ipattern)
1036 ipattern)))))
1037
1038(defun rng-ignore-attributes-deriv (ipattern)
1039 (let* ((type (rng-ipattern-get-type ipattern)))
1040 (if (eq type 'attribute)
1041 rng-empty-ipattern
1042 (let ((transform (assq type rng-transform-map)))
1043 (if transform
1044 (funcall (cdr transform)
1045 'rng-ignore-attributes-deriv
1046 ipattern)
1047 ipattern)))))
1048
1049(defun rng-text-only-deriv (ipattern)
1050 (or (rng-ipattern-get-memo-text-only-deriv ipattern)
1051 (rng-ipattern-set-memo-text-only-deriv
1052 ipattern
1053 (rng-compute-text-only-deriv ipattern))))
1054
1055(defun rng-compute-text-only-deriv (ipattern)
1056 (let* ((type (rng-ipattern-get-type ipattern)))
1057 (if (eq type 'element)
1058 rng-not-allowed-ipattern
1059 (let ((transform (assq type
1060 '((choice . rng-transform-choice)
1061 (group . rng-transform-group)
1062 (interleave . rng-transform-interleave)
1063 (one-or-more . rng-transform-one-or-more)
1064 (after . rng-transform-after-child)))))
1065 (if transform
1066 (funcall (cdr transform)
1067 'rng-text-only-deriv
1068 ipattern)
1069 ipattern)))))
1070
1071(defun rng-mixed-text-deriv (ipattern)
1072 (or (rng-ipattern-get-memo-mixed-text-deriv ipattern)
1073 (rng-ipattern-set-memo-mixed-text-deriv
1074 ipattern
1075 (rng-compute-mixed-text-deriv ipattern))))
1076
1077(defun rng-compute-mixed-text-deriv (ipattern)
1078 (let ((type (rng-ipattern-get-type ipattern)))
1079 (cond ((eq type 'text) ipattern)
1080 ((eq type 'after)
1081 (rng-transform-after-child 'rng-mixed-text-deriv
1082 ipattern))
1083 ((eq type 'choice)
1084 (rng-transform-choice 'rng-mixed-text-deriv
1085 ipattern))
1086 ((eq type 'one-or-more)
1087 (rng-intern-group
1088 (list (rng-mixed-text-deriv
1089 (rng-ipattern-get-child ipattern))
1090 (rng-intern-optional ipattern))))
1091 ((eq type 'group)
1092 (rng-transform-group-nullable
1093 'rng-mixed-text-deriv
1094 (lambda (x y) (rng-intern-group (cons x y)))
1095 ipattern))
1096 ((eq type 'interleave)
1097 (rng-transform-interleave-single
1098 'rng-mixed-text-deriv
1099 (lambda (new old list) (rng-intern-interleave
1100 (rng-substq new old list)))
1101 ipattern))
1102 ((and (eq type 'data)
1103 (not (rng-ipattern-get-memo-text-typed ipattern)))
1104 ipattern)
1105 (t rng-not-allowed-ipattern))))
1106
1107(defun rng-end-tag-deriv (ipattern)
1108 (or (rng-ipattern-get-memo-end-tag-deriv ipattern)
1109 (rng-ipattern-set-memo-end-tag-deriv
1110 ipattern
1111 (rng-compute-end-tag-deriv ipattern))))
1112
1113(defun rng-compute-end-tag-deriv (ipattern)
1114 (let ((type (rng-ipattern-get-type ipattern)))
1115 (cond ((eq type 'choice)
1116 (rng-intern-choice
1117 (mapcar 'rng-end-tag-deriv
1118 (rng-ipattern-get-child ipattern))))
1119 ((eq type 'after)
1120 (if (rng-ipattern-get-nullable
1121 (rng-ipattern-get-child ipattern))
1122 (rng-ipattern-get-after ipattern)
1123 rng-not-allowed-ipattern))
1124 (t rng-not-allowed-ipattern))))
1125
1126(defun rng-data-deriv (ipattern value)
1127 (or (rng-memo-map-get value
1128 (rng-ipattern-get-memo-map-data-deriv ipattern))
1129 (and (rng-memo-map-get
1130 (cons value (rng-namespace-context-get-no-trace))
1131 (rng-ipattern-get-memo-map-data-deriv ipattern))
1132 (rng-memo-map-get
1133 (cons value (apply (car rng-dt-namespace-context-getter)
1134 (cdr rng-dt-namespace-context-getter)))
1135 (rng-ipattern-get-memo-map-data-deriv ipattern)))
1136 (let* ((used-context (vector nil))
1137 (rng-dt-namespace-context-getter
1138 (cons 'rng-namespace-context-tracer
1139 (cons used-context
1140 rng-dt-namespace-context-getter)))
1141 (deriv (rng-compute-data-deriv ipattern value)))
1142 (rng-ipattern-memo-data-deriv ipattern
1143 value
1144 (aref used-context 0)
1145 deriv))))
1146
1147(defun rng-namespace-context-tracer (used getter &rest args)
1148 (let ((context (apply getter args)))
1149 (aset used 0 context)
1150 context))
1151
1152(defun rng-namespace-context-get-no-trace ()
1153 (let ((tem rng-dt-namespace-context-getter))
1154 (while (and tem (eq (car tem) 'rng-namespace-context-tracer))
1155 (setq tem (cddr tem)))
1156 (apply (car tem) (cdr tem))))
1157
1158(defconst rng-memo-data-deriv-max-length 80
1159 "Don't memoize data-derivs for values longer than this.")
1160
1161(defun rng-ipattern-memo-data-deriv (ipattern value context deriv)
1162 (or (memq ipattern rng-const-ipatterns)
1163 (> (length value) rng-memo-data-deriv-max-length)
1164 (rng-ipattern-set-memo-map-data-deriv
1165 ipattern
1166 (rng-memo-map-add (if context (cons value context) value)
1167 deriv
1168 (rng-ipattern-get-memo-map-data-deriv ipattern)
1169 t)))
1170 deriv)
1171
1172(defun rng-compute-data-deriv (ipattern value)
1173 (let ((type (rng-ipattern-get-type ipattern)))
1174 (cond ((eq type 'text) ipattern)
1175 ((eq type 'choice)
1176 (rng-transform-choice `(lambda (p) (rng-data-deriv p ,value))
1177 ipattern))
1178 ((eq type 'group)
1179 (rng-transform-group-nullable
1180 `(lambda (p) (rng-data-deriv p ,value))
1181 (lambda (x y) (rng-intern-group (cons x y)))
1182 ipattern))
1183 ((eq type 'one-or-more)
1184 (rng-intern-group (list (rng-data-deriv
1185 (rng-ipattern-get-child ipattern)
1186 value)
1187 (rng-intern-optional ipattern))))
1188 ((eq type 'after)
1189 (let ((child (rng-ipattern-get-child ipattern)))
1190 (if (or (rng-ipattern-get-nullable
1191 (rng-data-deriv child value))
1192 (and (rng-ipattern-get-nullable child)
1193 (rng-blank-p value)))
1194 (rng-ipattern-get-after ipattern)
1195 rng-not-allowed-ipattern)))
1196 ((eq type 'data)
1197 (if (rng-dt-make-value (rng-ipattern-get-datatype ipattern)
1198 value)
1199 rng-empty-ipattern
1200 rng-not-allowed-ipattern))
1201 ((eq type 'data-except)
1202 (if (and (rng-dt-make-value (rng-ipattern-get-datatype ipattern)
1203 value)
1204 (not (rng-ipattern-get-nullable
1205 (rng-data-deriv
1206 (rng-ipattern-get-child ipattern)
1207 value))))
1208 rng-empty-ipattern
1209 rng-not-allowed-ipattern))
1210 ((eq type 'value)
1211 (if (equal (rng-dt-make-value (rng-ipattern-get-datatype ipattern)
1212 value)
1213 (rng-ipattern-get-value-object ipattern))
1214 rng-empty-ipattern
1215 rng-not-allowed-ipattern))
1216 ((eq type 'list)
1217 (let ((tokens (split-string value))
1218 (state (rng-ipattern-get-child ipattern)))
1219 (while (and tokens
1220 (not (eq state rng-not-allowed-ipattern)))
1221 (setq state (rng-data-deriv state (car tokens)))
1222 (setq tokens (cdr tokens)))
1223 (if (rng-ipattern-get-nullable state)
1224 rng-empty-ipattern
1225 rng-not-allowed-ipattern)))
1226 ;; don't think interleave can occur
1227 ;; since we do text-only-deriv first
1228 (t rng-not-allowed-ipattern))))
1229
1230(defun rng-transform-multi (f ipattern interner)
1231 (let* ((members (rng-ipattern-get-child ipattern))
1232 (transformed (mapcar f members)))
1233 (if (rng-members-eq members transformed)
1234 ipattern
1235 (funcall interner transformed))))
1236
1237(defun rng-transform-choice (f ipattern)
1238 (rng-transform-multi f ipattern 'rng-intern-choice))
1239
1240(defun rng-transform-group (f ipattern)
1241 (rng-transform-multi f ipattern 'rng-intern-group))
1242
1243(defun rng-transform-interleave (f ipattern)
1244 (rng-transform-multi f ipattern 'rng-intern-interleave))
1245
1246(defun rng-transform-one-or-more (f ipattern)
1247 (let* ((child (rng-ipattern-get-child ipattern))
1248 (transformed (funcall f child)))
1249 (if (eq child transformed)
1250 ipattern
1251 (rng-intern-one-or-more transformed))))
1252
1253(defun rng-transform-after-child (f ipattern)
1254 (let* ((child (rng-ipattern-get-child ipattern))
1255 (transformed (funcall f child)))
1256 (if (eq child transformed)
1257 ipattern
1258 (rng-intern-after transformed
1259 (rng-ipattern-get-after ipattern)))))
1260
1261(defun rng-transform-interleave-single (f subster ipattern)
1262 (let ((children (rng-ipattern-get-child ipattern))
1263 found)
1264 (while (and children (not found))
1265 (let* ((child (car children))
1266 (transformed (funcall f child)))
1267 (if (eq transformed rng-not-allowed-ipattern)
1268 (setq children (cdr children))
1269 (setq found
1270 (funcall subster
1271 transformed
1272 child
1273 (rng-ipattern-get-child ipattern))))))
1274 (or found
1275 rng-not-allowed-ipattern)))
1276
1277(defun rng-transform-group-nullable (f conser ipattern)
1278 "Given a group x1,...,xn,y1,...,yn where the xs are all
1279nullable and y1 isn't, return a choice
1280 (conser f(x1) x2,...,xm,y1,...,yn)
1281 |(conser f(x2) x3,...,xm,y1,...,yn)
1282 |...
1283 |(conser f(xm) y1,...,yn)
1284 |(conser f(y1) y2,...,yn)"
1285 (rng-intern-choice
1286 (rng-transform-group-nullable-gen-choices
1287 f
1288 conser
1289 (rng-ipattern-get-child ipattern))))
1290
1291(defun rng-transform-group-nullable-gen-choices (f conser members)
1292 (let ((head (car members))
1293 (tail (cdr members)))
1294 (if tail
1295 (cons (funcall conser (funcall f head) tail)
1296 (if (rng-ipattern-get-nullable head)
1297 (rng-transform-group-nullable-gen-choices f conser tail)
1298 nil))
1299 (list (funcall f head)))))
1300
1301(defun rng-members-eq (list1 list2)
1302 (while (and list1
1303 list2
1304 (eq (car list1) (car list2)))
1305 (setq list1 (cdr list1))
1306 (setq list2 (cdr list2)))
1307 (and (null list1) (null list2)))
1308
1309
1310(defun rng-ipattern-after (ipattern)
1311 (let ((type (rng-ipattern-get-type ipattern)))
1312 (cond ((eq type 'choice)
1313 (rng-transform-choice 'rng-ipattern-after ipattern))
1314 ((eq type 'after)
1315 (rng-ipattern-get-after ipattern))
1316 ((eq type 'not-allowed)
1317 ipattern)
1318 (t (error "Internal error in rng-ipattern-after: unexpected type %s" type)))))
1319
1320(defun rng-unknown-start-tag-open-deriv (ipattern)
1321 (rng-intern-after (rng-compile rng-any-content) ipattern))
1322
1323(defun rng-ipattern-optionalize-elements (ipattern)
1324 (let* ((type (rng-ipattern-get-type ipattern))
1325 (transform (assq type rng-transform-map)))
1326 (cond (transform
1327 (funcall (cdr transform)
1328 'rng-ipattern-optionalize-elements
1329 ipattern))
1330 ((eq type 'element)
1331 (rng-intern-optional ipattern))
1332 (t ipattern))))
1333
1334(defun rng-ipattern-empty-before-p (ipattern)
1335 (let ((type (rng-ipattern-get-type ipattern)))
1336 (cond ((eq type 'after)
1337 (eq (rng-ipattern-get-child ipattern) rng-empty-ipattern))
1338 ((eq type 'choice)
1339 (let ((members (rng-ipattern-get-child ipattern))
1340 (ret t))
1341 (while (and members ret)
1342 (or (rng-ipattern-empty-before-p (car members))
1343 (setq ret nil))
1344 (setq members (cdr members)))
1345 ret))
1346 (t nil))))
1347
1348(defun rng-ipattern-possible-start-tags (ipattern accum)
1349 (let ((type (rng-ipattern-get-type ipattern)))
1350 (cond ((eq type 'after)
1351 (rng-ipattern-possible-start-tags
1352 (rng-ipattern-get-child ipattern)
1353 accum))
1354 ((memq type '(choice interleave))
1355 (let ((members (rng-ipattern-get-child ipattern)))
1356 (while members
1357 (setq accum
1358 (rng-ipattern-possible-start-tags (car members)
1359 accum))
1360 (setq members (cdr members))))
1361 accum)
1362 ((eq type 'group)
1363 (let ((members (rng-ipattern-get-child ipattern)))
1364 (while members
1365 (setq accum
1366 (rng-ipattern-possible-start-tags (car members)
1367 accum))
1368 (setq members
1369 (and (rng-ipattern-get-nullable (car members))
1370 (cdr members)))))
1371 accum)
1372 ((eq type 'element)
1373 (if (eq (rng-element-get-child ipattern) rng-not-allowed-ipattern)
1374 accum
1375 (rng-name-class-possible-names
1376 (rng-ipattern-get-name-class ipattern)
1377 accum)))
1378 ((eq type 'one-or-more)
1379 (rng-ipattern-possible-start-tags
1380 (rng-ipattern-get-child ipattern)
1381 accum))
1382 (t accum))))
1383
1384(defun rng-ipattern-start-tag-possible-p (ipattern)
1385 (let ((type (rng-ipattern-get-type ipattern)))
1386 (cond ((memq type '(after one-or-more))
1387 (rng-ipattern-start-tag-possible-p
1388 (rng-ipattern-get-child ipattern)))
1389 ((memq type '(choice interleave))
1390 (let ((members (rng-ipattern-get-child ipattern))
1391 (possible nil))
1392 (while (and members (not possible))
1393 (setq possible
1394 (rng-ipattern-start-tag-possible-p (car members)))
1395 (setq members (cdr members)))
1396 possible))
1397 ((eq type 'group)
1398 (let ((members (rng-ipattern-get-child ipattern))
1399 (possible nil))
1400 (while (and members (not possible))
1401 (setq possible
1402 (rng-ipattern-start-tag-possible-p (car members)))
1403 (setq members
1404 (and (rng-ipattern-get-nullable (car members))
1405 (cdr members))))
1406 possible))
1407 ((eq type 'element)
1408 (not (eq (rng-element-get-child ipattern)
1409 rng-not-allowed-ipattern)))
1410 (t nil))))
1411
1412(defun rng-ipattern-possible-attributes (ipattern accum)
1413 (let ((type (rng-ipattern-get-type ipattern)))
1414 (cond ((eq type 'after)
1415 (rng-ipattern-possible-attributes (rng-ipattern-get-child ipattern)
1416 accum))
1417 ((memq type '(choice interleave group))
1418 (let ((members (rng-ipattern-get-child ipattern)))
1419 (while members
1420 (setq accum
1421 (rng-ipattern-possible-attributes (car members)
1422 accum))
1423 (setq members (cdr members))))
1424 accum)
1425 ((eq type 'attribute)
1426 (rng-name-class-possible-names
1427 (rng-ipattern-get-name-class ipattern)
1428 accum))
1429 ((eq type 'one-or-more)
1430 (rng-ipattern-possible-attributes
1431 (rng-ipattern-get-child ipattern)
1432 accum))
1433 (t accum))))
1434
1435(defun rng-ipattern-possible-values (ipattern accum)
1436 (let ((type (rng-ipattern-get-type ipattern)))
1437 (cond ((eq type 'after)
1438 (rng-ipattern-possible-values (rng-ipattern-get-child ipattern)
1439 accum))
1440 ((eq type 'choice)
1441 (let ((members (rng-ipattern-get-child ipattern)))
1442 (while members
1443 (setq accum
1444 (rng-ipattern-possible-values (car members)
1445 accum))
1446 (setq members (cdr members))))
1447 accum)
1448 ((eq type 'value)
1449 (let ((value-object (rng-ipattern-get-value-object ipattern)))
1450 (if (stringp value-object)
1451 (cons value-object accum)
1452 accum)))
1453 (t accum))))
1454
1455(defun rng-ipattern-required-element (ipattern)
1456 (let ((type (rng-ipattern-get-type ipattern)))
1457 (cond ((memq type '(after one-or-more))
1458 (rng-ipattern-required-element (rng-ipattern-get-child ipattern)))
1459 ((eq type 'choice)
1460 (let* ((members (rng-ipattern-get-child ipattern))
1461 (required (rng-ipattern-required-element (car members))))
1462 (while (and required
1463 (setq members (cdr members)))
1464 (unless (equal required
1465 (rng-ipattern-required-element (car members)))
1466 (setq required nil)))
1467 required))
1468 ((eq type 'group)
1469 (let ((members (rng-ipattern-get-child ipattern))
1470 required)
1471 (while (and (not (setq required
1472 (rng-ipattern-required-element
1473 (car members))))
1474 (rng-ipattern-get-nullable (car members))
1475 (setq members (cdr members))))
1476 required))
1477 ((eq type 'interleave)
1478 (let ((members (rng-ipattern-get-child ipattern))
1479 required)
1480 (while members
1481 (let ((tem (rng-ipattern-required-element (car members))))
1482 (cond ((not tem)
1483 (setq members (cdr members)))
1484 ((not required)
1485 (setq required tem)
1486 (setq members (cdr members)))
1487 ((equal required tem)
1488 (setq members (cdr members)))
1489 (t
1490 (setq required nil)
1491 (setq members nil)))))
1492 required))
1493 ((eq type 'element)
1494 (let ((nc (rng-ipattern-get-name-class ipattern)))
1495 (and (consp nc)
1496 (not (eq (rng-element-get-child ipattern)
1497 rng-not-allowed-ipattern))
1498 nc))))))
1499
1500(defun rng-ipattern-required-attributes (ipattern accum)
1501 (let ((type (rng-ipattern-get-type ipattern)))
1502 (cond ((eq type 'after)
1503 (rng-ipattern-required-attributes (rng-ipattern-get-child ipattern)
1504 accum))
1505 ((memq type '(interleave group))
1506 (let ((members (rng-ipattern-get-child ipattern)))
1507 (while members
1508 (setq accum
1509 (rng-ipattern-required-attributes (car members)
1510 accum))
1511 (setq members (cdr members))))
1512 accum)
1513 ((eq type 'choice)
1514 (let ((members (rng-ipattern-get-child ipattern))
1515 in-all in-this new-in-all)
1516 (setq in-all
1517 (rng-ipattern-required-attributes (car members)
1518 nil))
1519 (while (and in-all (setq members (cdr members)))
1520 (setq in-this
1521 (rng-ipattern-required-attributes (car members) nil))
1522 (setq new-in-all nil)
1523 (while in-this
1524 (when (member (car in-this) in-all)
1525 (setq new-in-all
1526 (cons (car in-this) new-in-all)))
1527 (setq in-this (cdr in-this)))
1528 (setq in-all new-in-all))
1529 (append in-all accum)))
1530 ((eq type 'attribute)
1531 (let ((nc (rng-ipattern-get-name-class ipattern)))
1532 (if (consp nc)
1533 (cons nc accum)
1534 accum)))
1535 ((eq type 'one-or-more)
1536 (rng-ipattern-required-attributes (rng-ipattern-get-child ipattern)
1537 accum))
1538 (t accum))))
1539
1540(defun rng-compile-error (&rest args)
1541 (signal 'rng-compile-error
1542 (list (apply 'format args))))
1543
1544(put 'rng-compile-error
1545 'error-conditions
1546 '(error rng-error rng-compile-error))
1547
1548(put 'rng-compile-error
1549 'error-message
1550 "Incorrect schema")
1551
1552
1553;;; External API
1554
1555(defsubst rng-match-state () rng-match-state)
1556
1557(defsubst rng-set-match-state (state)
1558 (setq rng-match-state state))
1559
1560(defsubst rng-match-state-equal (state)
1561 (eq state rng-match-state))
1562
1563(defun rng-schema-changed ()
1564 (rng-ipattern-clear)
1565 (rng-compile-clear))
1566
1567(defun rng-match-init-buffer ()
1568 (make-local-variable 'rng-compile-table)
1569 (make-local-variable 'rng-ipattern-table)
1570 (make-local-variable 'rng-last-ipattern-index))
1571
1572(defun rng-match-start-document ()
1573 (rng-ipattern-maybe-init)
1574 (rng-compile-maybe-init)
1575 (add-hook 'rng-schema-change-hook 'rng-schema-changed nil t)
1576 (setq rng-match-state (rng-compile rng-current-schema)))
1577
1578(defun rng-match-start-tag-open (name)
1579 (rng-update-match-state (rng-start-tag-open-deriv rng-match-state
1580 name)))
1581
1582(defun rng-match-attribute-name (name)
1583 (rng-update-match-state (rng-start-attribute-deriv rng-match-state
1584 name)))
1585
1586(defun rng-match-attribute-value (value)
1587 (rng-update-match-state (rng-data-deriv rng-match-state
1588 value)))
1589
1590(defun rng-match-element-value (value)
1591 (and (rng-update-match-state (rng-text-only-deriv rng-match-state))
1592 (rng-update-match-state (rng-data-deriv rng-match-state
1593 value))))
1594
1595(defun rng-match-start-tag-close ()
1596 (rng-update-match-state (rng-start-tag-close-deriv rng-match-state)))
1597
1598(defun rng-match-mixed-text ()
1599 (rng-update-match-state (rng-mixed-text-deriv rng-match-state)))
1600
1601(defun rng-match-end-tag ()
1602 (rng-update-match-state (rng-end-tag-deriv rng-match-state)))
1603
1604(defun rng-match-after ()
1605 (rng-update-match-state
1606 (rng-ipattern-after rng-match-state)))
1607
1608(defun rng-match-out-of-context-start-tag-open (name)
1609 (let* ((found (rng-map-element-attribute 'rng-find-element-content-pattern
1610 rng-current-schema
1611 nil
1612 name))
1613 (content-pattern (if found
1614 (rng-intern-choice found)
1615 rng-not-allowed-ipattern)))
1616 (rng-update-match-state
1617 (rng-intern-after content-pattern rng-match-state))))
1618
1619(defun rng-match-possible-namespace-uris ()
1620 "Return a list of all the namespace URIs used in the current schema.
1621The absent URI is not included, so the result is always list of symbols."
1622 (rng-map-element-attribute (lambda (pattern accum)
1623 (rng-find-name-class-uris (nth 1 pattern)
1624 accum))
1625 rng-current-schema
1626 nil))
1627
1628(defun rng-match-unknown-start-tag-open ()
1629 (rng-update-match-state
1630 (rng-unknown-start-tag-open-deriv rng-match-state)))
1631
1632(defun rng-match-optionalize-elements ()
1633 (rng-update-match-state
1634 (rng-ipattern-optionalize-elements rng-match-state)))
1635
1636(defun rng-match-ignore-attributes ()
1637 (rng-update-match-state
1638 (rng-ignore-attributes-deriv rng-match-state)))
1639
1640(defun rng-match-text-typed-p ()
1641 (rng-ipattern-text-typed-p rng-match-state))
1642
1643(defun rng-match-empty-content ()
1644 (if (rng-match-text-typed-p)
1645 (rng-match-element-value "")
1646 (rng-match-end-tag)))
1647
1648(defun rng-match-empty-before-p ()
1649 "Return non-nil if what can be matched before an end-tag is empty.
1650In other words, return non-nil if the pattern for what can be matched
1651for an end-tag is equivalent to empty."
1652 (rng-ipattern-empty-before-p rng-match-state))
1653
1654(defun rng-match-infer-start-tag-namespace (local-name)
1655 (let ((ncs (rng-ipattern-possible-start-tags rng-match-state nil))
1656 (nc nil)
1657 (ns nil))
1658 (while ncs
1659 (setq nc (car ncs))
1660 (if (and (equal (cdr nc) local-name)
1661 (symbolp (car nc)))
1662 (cond ((not ns)
1663 ;; first possible namespace
1664 (setq ns (car nc))
1665 (setq ncs (cdr ncs)))
1666 ((equal ns (car nc))
1667 ;; same as first namespace
1668 (setq ncs (cdr ncs)))
1669 (t
1670 ;; more than one possible namespace
1671 (setq ns nil)
1672 (setq ncs nil)))
1673 (setq ncs (cdr ncs))))
1674 ns))
1675
1676(defun rng-match-nullable-p ()
1677 (rng-ipattern-get-nullable rng-match-state))
1678
1679(defun rng-match-possible-start-tag-names ()
1680 "Return a list of possible names that would be valid for start-tags.
1681
1682Each possible name is returned as a (NAMESPACE . LOCAL-NAME) pair,
1683where NAMESPACE is a symbol or nil (meaning the absent namespace) and
1684LOCAL-NAME is a string. The returned list may contain duplicates."
1685 (rng-ipattern-possible-start-tags rng-match-state nil))
1686
1687;; This is no longer used. It might be useful so leave it in for now.
1688(defun rng-match-start-tag-possible-p ()
1689 "Return non-nil if a start-tag is possible."
1690 (rng-ipattern-start-tag-possible-p rng-match-state))
1691
1692(defun rng-match-possible-attribute-names ()
1693 "Return a list of possible names that would be valid for attributes.
1694
1695See the function `rng-match-possible-start-tag-names' for
1696more information."
1697 (rng-ipattern-possible-attributes rng-match-state nil))
1698
1699(defun rng-match-possible-value-strings ()
1700 "Return a list of strings that would be valid as content.
1701The list may contain duplicates. Typically, the list will not
1702be exhaustive."
1703 (rng-ipattern-possible-values rng-match-state nil))
1704
1705(defun rng-match-required-element-name ()
1706 "Return the name of an element which must occur, or nil if none."
1707 (rng-ipattern-required-element rng-match-state))
1708
1709(defun rng-match-required-attribute-names ()
1710 "Return a list of names of attributes which must all occur."
1711 (rng-ipattern-required-attributes rng-match-state nil))
1712
1713(defmacro rng-match-save (&rest body)
1714 (let ((state (make-symbol "state")))
1715 `(let ((,state rng-match-state))
1716 (unwind-protect
1717 (progn ,@body)
1718 (setq rng-match-state ,state)))))
1719
1720(put 'rng-match-save 'lisp-indent-function 0)
1721(def-edebug-spec rng-match-save t)
1722
1723(defmacro rng-match-with-schema (schema &rest body)
1724 `(let ((rng-current-schema ,schema)
1725 rng-match-state
1726 rng-compile-table
1727 rng-ipattern-table
1728 rng-last-ipattern-index)
1729 (rng-ipattern-maybe-init)
1730 (rng-compile-maybe-init)
1731 (setq rng-match-state (rng-compile rng-current-schema))
1732 ,@body))
1733
1734(put 'rng-match-with-schema 'lisp-indent-function 1)
1735(def-edebug-spec rng-match-with-schema t)
1736
1737(provide 'rng-match)
1738
1739;;; rng-match.el ends here
diff --git a/lisp/nxml/rng-nxml.el b/lisp/nxml/rng-nxml.el
new file mode 100644
index 00000000000..46867a62545
--- /dev/null
+++ b/lisp/nxml/rng-nxml.el
@@ -0,0 +1,591 @@
1;;; rng-nxml.el --- make nxml-mode take advantage of rng-validate-mode
2
3;; Copyright (C) 2003 Free Software Foundation, Inc.
4
5;; Author: James Clark
6;; Keywords: XML, RelaxNG
7
8;; This program is free software; you can redistribute it and/or
9;; modify it under the terms of the GNU General Public License as
10;; published by the Free Software Foundation; either version 2 of
11;; the License, or (at your option) any later version.
12
13;; This program is distributed in the hope that it will be
14;; useful, but WITHOUT ANY WARRANTY; without even the implied
15;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16;; PURPOSE. See the GNU General Public License for more details.
17
18;; You should have received a copy of the GNU General Public
19;; License along with this program; if not, write to the Free
20;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21;; MA 02111-1307 USA
22
23;;; Commentary:
24
25;;; Code:
26
27(require 'easymenu)
28(require 'xmltok)
29(require 'nxml-util)
30(require 'nxml-ns)
31(require 'rng-match)
32(require 'rng-util)
33(require 'rng-valid)
34(require 'nxml-mode)
35(require 'rng-loc)
36
37(defcustom rng-nxml-auto-validate-flag t
38 "*Non-nil means automatically turn on validation with nxml-mode."
39 :type 'boolean
40 :group 'relax-ng)
41
42(defvar rng-preferred-prefix-alist-default nil
43 "Default value for variable `rng-preferred-prefix-alist'.")
44
45(defcustom rng-preferred-prefix-alist rng-preferred-prefix-alist-default
46 "*Alist of namespaces vs preferred prefixes."
47 :type '(repeat (cons :tag "With"
48 (string :tag "this namespace URI")
49 (string :tag "use this prefix")))
50 :group 'relax-ng)
51
52(defvar rng-complete-end-tags-after-< t
53 "*Non-nil means immediately after < complete on end-tag names.
54Complete on start-tag names regardless.")
55
56(defvar rng-nxml-easy-menu
57 '("XML"
58 ["Show Outline Only" nxml-hide-all-text-content]
59 ["Show Everything" nxml-show-all]
60 "---"
61 ["Validation" rng-validate-mode
62 :style toggle
63 :selected rng-validate-mode]
64 "---"
65 ("Set Schema"
66 ["Automatically" rng-auto-set-schema]
67 ("For Document Type"
68 :filter (lambda (menu)
69 (mapcar (lambda (type-id)
70 (vector type-id
71 (list 'rng-set-document-type
72 type-id)))
73 (rng-possible-type-ids))))
74 ["Any Well-Formed XML" rng-set-vacuous-schema]
75 ["File..." rng-set-schema-file])
76 ["Show Schema Location" rng-what-schema]
77 ["Save Schema Location" rng-save-schema-location :help
78 "Save the location of the schema currently being used for this buffer"]
79 "---"
80 ["First Error" rng-first-error :active rng-validate-mode]
81 ["Next Error" rng-next-error :active rng-validate-mode]
82 "---"
83 ["Customize nXML" (customize-group 'nxml)]
84 "---"
85 ["Show nXML Version" nxml-version]))
86
87;;;###autoload
88(defun rng-nxml-mode-init ()
89 "Initialize `nxml-mode' to take advantage of `rng-validate-mode'.
90This is typically called from `nxml-mode-hook'.
91Validation will be enabled if `rng-nxml-auto-validate-flag' is non-nil."
92 (interactive)
93 (define-key nxml-mode-map "\C-c\C-v" 'rng-validate-mode)
94 (define-key nxml-mode-map "\C-c\C-s\C-w" 'rng-what-schema)
95 (define-key nxml-mode-map "\C-c\C-s\C-a" 'rng-auto-set-schema-and-validate)
96 (define-key nxml-mode-map "\C-c\C-s\C-f" 'rng-set-schema-file-and-validate)
97 (define-key nxml-mode-map "\C-c\C-s\C-l" 'rng-save-schema-location)
98 (define-key nxml-mode-map "\C-c\C-s\C-t" 'rng-set-document-type-and-validate)
99 (define-key nxml-mode-map "\C-c\C-n" 'rng-next-error)
100 (easy-menu-define rng-nxml-menu nxml-mode-map
101 "Menu for nxml-mode used with rng-validate-mode."
102 rng-nxml-easy-menu)
103 (setq mode-line-process
104 '(rng-validate-mode (:eval (rng-compute-mode-line-string))))
105 (cond (rng-nxml-auto-validate-flag
106 (rng-validate-mode 1)
107 (add-hook 'nxml-completion-hook 'rng-complete nil t)
108 (add-hook 'nxml-in-mixed-content-hook 'rng-in-mixed-content-p nil t))
109 (t
110 (rng-validate-mode 0)
111 (remove-hook 'nxml-completion-hook 'rng-complete t)
112 (remove-hook 'nxml-in-mixed-content-hook 'rng-in-mixed-content-p t))))
113
114(defvar rng-tag-history nil)
115(defvar rng-attribute-name-history nil)
116(defvar rng-attribute-value-history nil)
117
118(defvar rng-complete-target-names nil)
119(defvar rng-complete-name-attribute-flag nil)
120(defvar rng-complete-extra-strings nil)
121
122(defun rng-complete ()
123 "Complete the string before point using the current schema.
124Return non-nil if in a context it understands."
125 (interactive)
126 (and rng-validate-mode
127 (let ((lt-pos (save-excursion (search-backward "<" nil t)))
128 xmltok-dtd)
129 (and lt-pos
130 (= (rng-set-state-after lt-pos) lt-pos)
131 (or (rng-complete-tag lt-pos)
132 (rng-complete-end-tag lt-pos)
133 (rng-complete-attribute-name lt-pos)
134 (rng-complete-attribute-value lt-pos))))))
135
136(defconst rng-in-start-tag-name-regex
137 (replace-regexp-in-string
138 "w"
139 xmltok-ncname-regexp
140 "<\\(?:w\\(?::w?\\)?\\)?\\="
141 t
142 t))
143
144(defun rng-complete-tag (lt-pos)
145 (let (rng-complete-extra-strings)
146 (when (and (= lt-pos (1- (point)))
147 rng-complete-end-tags-after-<
148 rng-open-elements
149 (not (eq (car rng-open-elements) t))
150 (or rng-collecting-text
151 (rng-match-save
152 (rng-match-end-tag))))
153 (setq rng-complete-extra-strings
154 (cons (concat "/"
155 (if (caar rng-open-elements)
156 (concat (caar rng-open-elements)
157 ":"
158 (cdar rng-open-elements))
159 (cdar rng-open-elements)))
160 rng-complete-extra-strings)))
161 (when (save-excursion
162 (re-search-backward rng-in-start-tag-name-regex
163 lt-pos
164 t))
165 (and rng-collecting-text (rng-flush-text))
166 (let ((completion
167 (let ((rng-complete-target-names
168 (rng-match-possible-start-tag-names))
169 (rng-complete-name-attribute-flag nil))
170 (rng-complete-before-point (1+ lt-pos)
171 'rng-complete-qname-function
172 "Tag: "
173 nil
174 'rng-tag-history)))
175 name)
176 (when completion
177 (cond ((rng-qname-p completion)
178 (setq name (rng-expand-qname completion
179 t
180 'rng-start-tag-expand-recover))
181 (when (and name
182 (rng-match-start-tag-open name)
183 (or (not (rng-match-start-tag-close))
184 ;; need a namespace decl on the root element
185 (and (car name)
186 (not rng-open-elements))))
187 ;; attributes are required
188 (insert " ")))
189 ((member completion rng-complete-extra-strings)
190 (insert ">")))))
191 t)))
192
193(defconst rng-in-end-tag-name-regex
194 (replace-regexp-in-string
195 "w"
196 xmltok-ncname-regexp
197 "</\\(?:w\\(?::w?\\)?\\)?\\="
198 t
199 t))
200
201(defun rng-complete-end-tag (lt-pos)
202 (when (save-excursion
203 (re-search-backward rng-in-end-tag-name-regex
204 lt-pos
205 t))
206 (cond ((or (not rng-open-elements)
207 (eq (car rng-open-elements) t))
208 (message "No matching start-tag")
209 (ding))
210 (t
211 (let ((start-tag-name
212 (if (caar rng-open-elements)
213 (concat (caar rng-open-elements)
214 ":"
215 (cdar rng-open-elements))
216 (cdar rng-open-elements)))
217 (end-tag-name
218 (buffer-substring-no-properties (+ (match-beginning 0) 2)
219 (point))))
220 (cond ((or (> (length end-tag-name)
221 (length start-tag-name))
222 (not (string= (substring start-tag-name
223 0
224 (length end-tag-name))
225 end-tag-name)))
226 (message "Expected end-tag %s"
227 (rng-quote-string
228 (concat "</" start-tag-name ">")))
229 (ding))
230 (t
231 (delete-region (- (point) (length end-tag-name))
232 (point))
233 (insert start-tag-name ">")
234 (when (not (or rng-collecting-text
235 (rng-match-end-tag)))
236 (message "Element %s is incomplete"
237 (rng-quote-string start-tag-name))))))))
238 t))
239
240(defconst rng-in-attribute-regex
241 (replace-regexp-in-string
242 "w"
243 xmltok-ncname-regexp
244 "<w\\(?::w\\)?\
245\\(?:[ \t\r\n]+w\\(?::w\\)?[ \t\r\n]*=\
246[ \t\r\n]*\\(?:\"[^\"]*\"\\|'[^']*'\\)\\)*\
247[ \t\r\n]+\\(\\(?:w\\(?::w?\\)?\\)?\\)\\="
248 t
249 t))
250
251(defvar rng-undeclared-prefixes nil)
252
253(defun rng-complete-attribute-name (lt-pos)
254 (when (save-excursion
255 (re-search-backward rng-in-attribute-regex lt-pos t))
256 (let ((attribute-start (match-beginning 1))
257 rng-undeclared-prefixes)
258 (and (rng-adjust-state-for-attribute lt-pos
259 attribute-start)
260 (let ((rng-complete-target-names
261 (rng-match-possible-attribute-names))
262 (rng-complete-extra-strings
263 (mapcar (lambda (prefix)
264 (if prefix
265 (concat "xmlns:" prefix)
266 "xmlns"))
267 rng-undeclared-prefixes))
268 (rng-complete-name-attribute-flag t))
269 (rng-complete-before-point attribute-start
270 'rng-complete-qname-function
271 "Attribute: "
272 nil
273 'rng-attribute-name-history))
274 (insert "=\"")))
275 t))
276
277(defconst rng-in-attribute-value-regex
278 (replace-regexp-in-string
279 "w"
280 xmltok-ncname-regexp
281 "<w\\(?::w\\)?\
282\\(?:[ \t\r\n]+w\\(?::w\\)?[ \t\r\n]*=\
283[ \t\r\n]*\\(?:\"[^\"]*\"\\|'[^']*'\\)\\)*\
284[ \t\r\n]+\\(w\\(:w\\)?\\)[ \t\r\n]*=[ \t\r\n]*\
285\\(\"[^\"]*\\|'[^']*\\)\\="
286 t
287 t))
288
289(defun rng-complete-attribute-value (lt-pos)
290 (when (save-excursion
291 (re-search-backward rng-in-attribute-value-regex lt-pos t))
292 (let ((name-start (match-beginning 1))
293 (name-end (match-end 1))
294 (colon (match-beginning 2))
295 (value-start (1+ (match-beginning 3))))
296 (and (rng-adjust-state-for-attribute lt-pos
297 name-start)
298 (if (string= (buffer-substring-no-properties name-start
299 (or colon name-end))
300 "xmlns")
301 (rng-complete-before-point
302 value-start
303 (rng-strings-to-completion-alist
304 (rng-possible-namespace-uris
305 (and colon
306 (buffer-substring-no-properties (1+ colon) name-end))))
307 "Namespace URI: "
308 nil
309 'rng-namespace-uri-history)
310 (rng-adjust-state-for-attribute-value name-start
311 colon
312 name-end)
313 (rng-complete-before-point
314 value-start
315 (rng-strings-to-completion-alist
316 (rng-match-possible-value-strings))
317 "Value: "
318 nil
319 'rng-attribute-value-history))
320 (insert (char-before value-start))))
321 t))
322
323(defun rng-possible-namespace-uris (prefix)
324 (let ((ns (if prefix (nxml-ns-get-prefix prefix)
325 (nxml-ns-get-default))))
326 (if (and ns (memq prefix (nxml-ns-changed-prefixes)))
327 (list (nxml-namespace-name ns))
328 (mapcar 'nxml-namespace-name
329 (delq nxml-xml-namespace-uri
330 (rng-match-possible-namespace-uris))))))
331
332(defconst rng-qname-regexp
333 (concat "\\`"
334 xmltok-ncname-regexp
335 "\\(?:" ":" xmltok-ncname-regexp "\\)" "?" "\\'"))
336
337(defun rng-qname-p (string)
338 (and (string-match rng-qname-regexp string) t))
339
340(defun rng-expand-qname (qname &optional defaultp recover-fun)
341 (setq qname (rng-split-qname qname))
342 (let ((prefix (car qname)))
343 (if prefix
344 (let ((ns (nxml-ns-get-prefix qname)))
345 (cond (ns (cons ns (cdr qname)))
346 (recover-fun (funcall recover-fun prefix (cdr qname)))))
347 (cons (and defaultp (nxml-ns-get-default)) (cdr qname)))))
348
349(defun rng-start-tag-expand-recover (prefix local-name)
350 (let ((ns (rng-match-infer-start-tag-namespace local-name)))
351 (and ns
352 (cons ns local-name))))
353
354(defun rng-split-qname (qname)
355 (if (string-match ":" qname)
356 (cons (substring qname 0 (match-beginning 0))
357 (substring qname (match-end 0)))
358 (cons nil qname)))
359
360(defun rng-in-mixed-content-p ()
361 "Return non-nil if point is in mixed content.
362Return nil only if point is definitely not in mixed content.
363If unsure, return non-nil."
364 (if (eq rng-current-schema rng-any-element)
365 t
366 (rng-set-state-after)
367 (rng-match-mixed-text)))
368
369(defun rng-set-state-after (&optional pos)
370 "Set the state for after parsing the first token with endpoint >= POS.
371This does not change the xmltok state or point. However, it does
372set `xmltok-dtd'. Returns the position of the end of the token."
373 (unless pos (setq pos (point)))
374 (when (< rng-validate-up-to-date-end pos)
375 (message "Parsing...")
376 (while (and (rng-do-some-validation)
377 (< rng-validate-up-to-date-end pos))
378 ;; Display percentage validated.
379 (force-mode-line-update)
380 ;; Force redisplay but don't allow idle timers to run.
381 (let ((timer-idle-list nil))
382 (sit-for 0)))
383 (message "Parsing...done"))
384 (save-excursion
385 (save-restriction
386 (widen)
387 (nxml-with-invisible-motion
388 (if (= pos 1)
389 (rng-set-initial-state)
390 (let ((state (get-text-property (1- pos) 'rng-state)))
391 (cond (state
392 (rng-restore-state state)
393 (goto-char pos))
394 (t
395 (let ((start (previous-single-property-change pos
396 'rng-state)))
397 (cond (start
398 (rng-restore-state (get-text-property (1- start)
399 'rng-state))
400 (goto-char start))
401 (t (rng-set-initial-state))))))))
402 (xmltok-save
403 (if (= (point) 1)
404 (xmltok-forward-prolog)
405 (setq xmltok-dtd rng-dtd))
406 (cond ((and (< pos (point))
407 ;; This handles the case where the prolog ends
408 ;; with a < without any following name-start
409 ;; character. This will be treated by the parser
410 ;; as part of the prolog, but we want to treat
411 ;; it as the start of the instance.
412 (eq (char-after pos) ?<)
413 (<= (point)
414 (save-excursion
415 (goto-char (1+ pos))
416 (skip-chars-forward " \t\r\n")
417 (point))))
418 pos)
419 ((< (point) pos)
420 (let ((rng-dt-namespace-context-getter
421 '(nxml-ns-get-context))
422 (rng-parsing-for-state t))
423 (rng-forward pos))
424 (point))
425 (t pos)))))))
426
427(defun rng-adjust-state-for-attribute (lt-pos start)
428 (xmltok-save
429 (save-excursion
430 (goto-char lt-pos)
431 (when (memq (xmltok-forward)
432 '(start-tag
433 partial-start-tag
434 empty-element
435 partial-empty-element))
436 (when (< start (point))
437 (setq xmltok-namespace-attributes
438 (rng-prune-attribute-at start
439 xmltok-namespace-attributes))
440 (setq xmltok-attributes
441 (rng-prune-attribute-at start
442 xmltok-attributes)))
443 (let ((rng-parsing-for-state t)
444 (rng-dt-namespace-context-getter '(nxml-ns-get-context)))
445 (rng-process-start-tag 'stop)
446 (rng-find-undeclared-prefixes)
447 t)))))
448
449(defun rng-find-undeclared-prefixes ()
450 ;; Start with the newly effective namespace declarations.
451 ;; (Includes declarations added during recovery.)
452 (setq rng-undeclared-prefixes (nxml-ns-changed-prefixes))
453 (let ((iter xmltok-attributes)
454 (ns-state (nxml-ns-state))
455 att)
456 ;; Add namespace prefixes used in this tag,
457 ;; but not declared in the parent.
458 (nxml-ns-pop-state)
459 (while iter
460 (setq att (car iter))
461 (let ((prefix (xmltok-attribute-prefix att)))
462 (when (and prefix
463 (not (member prefix rng-undeclared-prefixes))
464 (not (nxml-ns-get-prefix prefix)))
465 (setq rng-undeclared-prefixes
466 (cons prefix rng-undeclared-prefixes))))
467 (setq iter (cdr iter)))
468 (nxml-ns-set-state ns-state)
469 ;; Remove namespace prefixes explicitly declared.
470 (setq iter xmltok-namespace-attributes)
471 (while iter
472 (setq att (car iter))
473 (setq rng-undeclared-prefixes
474 (delete (and (xmltok-attribute-prefix att)
475 (xmltok-attribute-local-name att))
476 rng-undeclared-prefixes))
477 (setq iter (cdr iter)))))
478
479(defun rng-prune-attribute-at (start atts)
480 (when atts
481 (let ((cur atts))
482 (while (if (eq (xmltok-attribute-name-start (car cur)) start)
483 (progn
484 (setq atts (delq (car cur) atts))
485 nil)
486 (setq cur (cdr cur)))))
487 atts))
488
489(defun rng-adjust-state-for-attribute-value (name-start
490 colon
491 name-end)
492 (let* ((prefix (if colon
493 (buffer-substring-no-properties name-start colon)
494 nil))
495 (local-name (buffer-substring-no-properties (if colon
496 (1+ colon)
497 name-start)
498 name-end))
499 (ns (and prefix (nxml-ns-get-prefix prefix))))
500 (and (or (not prefix) ns)
501 (rng-match-attribute-name (cons ns local-name)))))
502
503(defun rng-complete-qname-function (string predicate flag)
504 (let ((alist (mapcar (lambda (name) (cons name nil))
505 (rng-generate-qname-list string))))
506 (cond ((not flag)
507 (try-completion string alist predicate))
508 ((eq flag t)
509 (all-completions string alist predicate))
510 ((eq flag 'lambda)
511 (and (assoc string alist) t)))))
512
513(defun rng-generate-qname-list (&optional string)
514 (let ((forced-prefix (and string
515 (string-match ":" string)
516 (> (match-beginning 0) 0)
517 (substring string
518 0
519 (match-beginning 0))))
520 (namespaces (mapcar 'car rng-complete-target-names))
521 ns-prefixes-alist ns-prefixes iter ns prefer)
522 (while namespaces
523 (setq ns (car namespaces))
524 (when ns
525 (setq ns-prefixes-alist
526 (cons (cons ns (nxml-ns-prefixes-for
527 ns
528 rng-complete-name-attribute-flag))
529 ns-prefixes-alist)))
530 (setq namespaces (delq ns (cdr namespaces))))
531 (setq iter ns-prefixes-alist)
532 (while iter
533 (setq ns-prefixes (car iter))
534 (setq ns (car ns-prefixes))
535 (when (null (cdr ns-prefixes))
536 ;; No declared prefix for the namespace
537 (if forced-prefix
538 ;; If namespace non-nil and prefix undeclared,
539 ;; use forced prefix.
540 (when (and ns
541 (not (nxml-ns-get-prefix forced-prefix)))
542 (setcdr ns-prefixes (list forced-prefix)))
543 (setq prefer (rng-get-preferred-unused-prefix ns))
544 (when prefer
545 (setcdr ns-prefixes (list prefer)))
546 ;; Unless it's an attribute with a non-nil namespace,
547 ;; allow no prefix for this namespace.
548 (unless rng-complete-name-attribute-flag
549 (setcdr ns-prefixes (cons nil (cdr ns-prefixes))))))
550 (setq iter (cdr iter)))
551 (rng-uniquify-equal
552 (sort (apply 'append
553 (cons rng-complete-extra-strings
554 (mapcar (lambda (name)
555 (if (car name)
556 (mapcar (lambda (prefix)
557 (if prefix
558 (concat prefix
559 ":"
560 (cdr name))
561 (cdr name)))
562 (cdr (assoc (car name)
563 ns-prefixes-alist)))
564 (list (cdr name))))
565 rng-complete-target-names)))
566 'string<))))
567
568(defun rng-get-preferred-unused-prefix (ns)
569 (let ((ns-prefix (assoc (symbol-name ns) rng-preferred-prefix-alist))
570 iter prefix)
571 (when ns-prefix
572 (setq prefix (cdr ns-prefix))
573 (when (nxml-ns-get-prefix prefix)
574 ;; try to find an unused prefix
575 (setq iter (memq ns-prefix rng-preferred-prefix-alist))
576 (while (and iter
577 (setq ns-prefix (assoc ns iter)))
578 (if (nxml-ns-get-prefix (cdr ns-prefix))
579 (setq iter (memq ns-prefix iter))
580 (setq prefix (cdr ns-prefix))
581 nil))))
582 prefix))
583
584(defun rng-strings-to-completion-alist (strings)
585 (mapcar (lambda (s) (cons s s))
586 (rng-uniquify-equal (sort (mapcar 'rng-escape-string strings)
587 'string<))))
588
589(provide 'rng-nxml)
590
591;;; rng-nxml.el ends here
diff --git a/lisp/nxml/rng-parse.el b/lisp/nxml/rng-parse.el
new file mode 100644
index 00000000000..f4a0a4cc4c6
--- /dev/null
+++ b/lisp/nxml/rng-parse.el
@@ -0,0 +1,104 @@
1;;; rng-parse.el --- parse an XML file and validate it against a schema
2
3;; Copyright (C) 2003 Free Software Foundation, Inc.
4
5;; Author: James Clark
6;; Keywords: XML, RelaxNG
7
8;; This program is free software; you can redistribute it and/or
9;; modify it under the terms of the GNU General Public License as
10;; published by the Free Software Foundation; either version 2 of
11;; the License, or (at your option) any later version.
12
13;; This program is distributed in the hope that it will be
14;; useful, but WITHOUT ANY WARRANTY; without even the implied
15;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16;; PURPOSE. See the GNU General Public License for more details.
17
18;; You should have received a copy of the GNU General Public
19;; License along with this program; if not, write to the Free
20;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21;; MA 02111-1307 USA
22
23;;; Commentary:
24
25;; This combines the validation machinery in rng-match.el with the
26;; parser in nxml-parse.el by using the `nxml-validate-function' hook.
27
28;;; Code:
29
30(require 'nxml-parse)
31(require 'rng-match)
32(require 'rng-dt)
33
34(defvar rng-parse-prev-was-start-tag nil)
35
36(defun rng-parse-validate-file (schema file)
37 "Parse and validate the XML document in FILE and return it as a list.
38The returned list has the same form as that returned by
39`nxml-parse-file'. SCHEMA is a list representing the schema to use
40for validation, such as returned by the function `rng-c-load-schema'.
41If the XML document is invalid with respect to schema, an error will
42be signaled in the same way as when it is not well-formed."
43 (save-excursion
44 (set-buffer (nxml-parse-find-file file))
45 (unwind-protect
46 (let ((nxml-parse-file-name file)
47 (nxml-validate-function 'rng-parse-do-validate)
48 (rng-dt-namespace-context-getter '(nxml-ns-get-context))
49 rng-parse-prev-was-start-tag)
50 ;; We don't simply call nxml-parse-file, because
51 ;; we want to do rng-match-with-schema in the same
52 ;; buffer in which we will call the other rng-match-* functions.
53 (rng-match-with-schema schema
54 (nxml-parse-instance)))
55 (kill-buffer nil))))
56
57(defun rng-parse-do-validate (text start-tag)
58 (cond ((and (let ((tem rng-parse-prev-was-start-tag))
59 (setq rng-parse-prev-was-start-tag (and start-tag t))
60 tem)
61 (not start-tag)
62 (rng-match-text-typed-p))
63 (unless (rng-match-element-value (or text ""))
64 (cons "Invalid data" (and text 'text))))
65 ((and text
66 (not (rng-blank-p text))
67 (not (rng-match-mixed-text)))
68 (cons "Text not allowed" 'text))
69 ((not start-tag)
70 (unless (rng-match-end-tag)
71 (cons "Missing elements" nil)))
72 ((not (rng-match-start-tag-open
73 (rng-parse-to-match-name (car start-tag))))
74 (cons "Element not allowed" nil))
75 (t
76 (let ((atts (cadr start-tag))
77 (i 0)
78 att err)
79 (while (and atts (not err))
80 (setq att (car atts))
81 (when (not (and (consp (car att))
82 (eq (caar att) nxml-xmlns-namespace-uri)))
83 (setq err
84 (cond ((not (rng-match-attribute-name
85 (rng-parse-to-match-name (car att))))
86 (cons "Attribute not allowed"
87 (cons 'attribute-name i)))
88 ((not (rng-match-attribute-value (cdr att)))
89 (cons "Invalid attribute value"
90 (cons 'attribute-value i))))))
91 (setq atts (cdr atts))
92 (setq i (1+ i)))
93 (or err
94 (unless (rng-match-start-tag-close)
95 (cons "Missing attributes" 'tag-close)))))))
96
97(defun rng-parse-to-match-name (name)
98 (if (consp name)
99 name
100 (cons nil name)))
101
102(provide 'rng-parse)
103
104;;; rng-parse.el ends here
diff --git a/lisp/nxml/rng-pttrn.el b/lisp/nxml/rng-pttrn.el
new file mode 100644
index 00000000000..c3ae4c6812b
--- /dev/null
+++ b/lisp/nxml/rng-pttrn.el
@@ -0,0 +1,189 @@
1;;; rng-pttrn.el --- RELAX NG patterns
2
3;; Copyright (C) 2003 Free Software Foundation, Inc.
4
5;; Author: James Clark
6;; Keywords: XML, RelaxNG
7
8;; This program is free software; you can redistribute it and/or
9;; modify it under the terms of the GNU General Public License as
10;; published by the Free Software Foundation; either version 2 of
11;; the License, or (at your option) any later version.
12
13;; This program is distributed in the hope that it will be
14;; useful, but WITHOUT ANY WARRANTY; without even the implied
15;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16;; PURPOSE. See the GNU General Public License for more details.
17
18;; You should have received a copy of the GNU General Public
19;; License along with this program; if not, write to the Free
20;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21;; MA 02111-1307 USA
22
23;;; Commentary:
24
25;; pattern ::=
26;; (ref <pattern> <local-name>)
27;; | (choice <pattern> <pattern> ...)
28;; | (group <pattern> <pattern> ...)
29;; | (interleave <pattern> <pattern> ...)
30;; | (zero-or-more <pattern>)
31;; | (one-or-more <pattern>)
32;; | (optional <pattern>)
33;; | (mixed <pattern>)
34;; | (value <datatype> <string> <context>)
35;; | (data <datatype> <params>)
36;; | (data-except <datatype> <params> <pattern>)
37;; | (list <pattern>)
38;; | (element <name-class> <pattern>)
39;; | (attribute <name-class> <pattern>)
40;; | (text)
41;; | (empty)
42;; | (not-allowed)
43;;
44;; params ::=
45;; ((<param-name> . <param-value> ) ...)
46;; param-name ::= <symbol>
47;; param-value ::= <string>
48;;
49;; name-class ::=
50;; (name <name>)
51;; | (any-name)
52;; | (any-name-except <name-class>)
53;; | (ns-name <ns>)
54;; | (ns-name-except <ns> <name-class>)
55;; | (choice <name-class> <name-class> ...)
56;;
57;; name ::= (<ns> . <local-name>)
58;; ns ::= nil | <symbol>
59;; local-name ::= <string>
60;; datatype ::= (<datatype-uri> . <datatype-local-name>)
61;; datatype-uri ::= nil | <symbol>
62;; datatype-local-name ::= <symbol>
63
64;;; Code:
65
66(defvar rng-schema-change-hook nil
67 "Hook to be run after `rng-current-schema' changes.")
68
69(defvar rng-current-schema nil
70 "Pattern to be used as schema for the current buffer.")
71(make-variable-buffer-local 'rng-current-schema)
72
73(defun rng-make-ref (name)
74 (list 'ref nil name))
75
76(defun rng-ref-set (ref pattern)
77 (setcar (cdr ref) pattern))
78
79(defun rng-ref-get (ref) (cadr ref))
80
81(defun rng-make-choice (patterns)
82 (cons 'choice patterns))
83
84(defun rng-make-group (patterns)
85 (cons 'group patterns))
86
87(defun rng-make-interleave (patterns)
88 (cons 'interleave patterns))
89
90(defun rng-make-zero-or-more (pattern)
91 (list 'zero-or-more pattern))
92
93(defun rng-make-one-or-more (pattern)
94 (list 'one-or-more pattern))
95
96(defun rng-make-optional (pattern)
97 (list 'optional pattern))
98
99(defun rng-make-mixed (pattern)
100 (list 'mixed pattern))
101
102(defun rng-make-value (datatype str context)
103 (list 'value datatype str context))
104
105(defun rng-make-data (name params)
106 (list 'data name params))
107
108(defun rng-make-data-except (name params pattern)
109 (list 'data-except name params pattern))
110
111(defun rng-make-list (pattern)
112 (list 'list pattern))
113
114(defun rng-make-element (name-class pattern)
115 (list 'element name-class pattern))
116
117(defun rng-make-attribute (name-class pattern)
118 (list 'attribute name-class pattern))
119
120(defun rng-make-text ()
121 '(text))
122
123(defun rng-make-empty ()
124 '(empty))
125
126(defun rng-make-not-allowed ()
127 '(not-allowed))
128
129(defun rng-make-any-name-name-class ()
130 '(any-name))
131
132(defun rng-make-any-name-except-name-class (name-class)
133 (list 'any-name-except name-class))
134
135(defun rng-make-ns-name-name-class (ns)
136 (list 'ns-name ns))
137
138(defun rng-make-ns-name-except-name-class (ns name-class)
139 (list 'ns-name-except ns name-class))
140
141(defun rng-make-name-name-class (name)
142 (list 'name name))
143
144(defun rng-make-choice-name-class (name-classes)
145 (cons 'choice name-classes))
146
147(defconst rng-any-content
148 (let* ((ref (rng-make-ref "any-content"))
149 (pattern (rng-make-zero-or-more
150 (rng-make-choice
151 (list
152 (rng-make-text)
153 (rng-make-attribute (rng-make-any-name-name-class)
154 (rng-make-text))
155 (rng-make-element (rng-make-any-name-name-class)
156 ref))))))
157 (rng-ref-set ref pattern)
158 pattern)
159 "A pattern that matches the attributes and content of any element.")
160
161(defconst rng-any-element
162 (let* ((ref (rng-make-ref "any-element"))
163 (pattern
164 (rng-make-element
165 (rng-make-any-name-name-class)
166 (rng-make-zero-or-more
167 (rng-make-choice
168 (list
169 (rng-make-text)
170 (rng-make-attribute (rng-make-any-name-name-class)
171 (rng-make-text))
172 ref))))))
173 (rng-ref-set ref pattern)
174 pattern)
175 "A pattern that matches any element.")
176
177;;; Names
178
179(defun rng-make-name (ns local-name)
180 (cons ns local-name))
181
182;;; Datatypes
183
184(defun rng-make-datatype (uri local-name)
185 (cons uri (intern local-name)))
186
187(provide 'rng-pttrn)
188
189;;; rng-pttrn.el ends here
diff --git a/lisp/nxml/rng-uri.el b/lisp/nxml/rng-uri.el
new file mode 100644
index 00000000000..7ed8befc90e
--- /dev/null
+++ b/lisp/nxml/rng-uri.el
@@ -0,0 +1,355 @@
1;;; rng-uri.el --- URI parsing and manipulation
2
3;; Copyright (C) 2003 Free Software Foundation, Inc.
4
5;; Author: James Clark
6;; Keywords: XML
7
8;; This program is free software; you can redistribute it and/or
9;; modify it under the terms of the GNU General Public License as
10;; published by the Free Software Foundation; either version 2 of
11;; the License, or (at your option) any later version.
12
13;; This program is distributed in the hope that it will be
14;; useful, but WITHOUT ANY WARRANTY; without even the implied
15;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16;; PURPOSE. See the GNU General Public License for more details.
17
18;; You should have received a copy of the GNU General Public
19;; License along with this program; if not, write to the Free
20;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21;; MA 02111-1307 USA
22
23;;; Commentary:
24
25;;; Code:
26
27(defun rng-file-name-uri (f)
28 "Return a URI for the filename F.
29Multibyte characters are left as is. Use `rng-uri-escape-multibyte' to
30escape them using %HH."
31 (setq f (expand-file-name f))
32 (let ((url
33 (replace-regexp-in-string "[\000-\032\177<>#%\"{}|\\^[]`%?;]"
34 'rng-percent-encode
35 f)))
36 (concat "file:"
37 (if (and (> (length url) 0)
38 (= (aref url 0) ?/))
39 "//"
40 "///")
41 url)))
42
43(defun rng-uri-escape-multibyte (uri)
44 "Escape multibyte characters in URI."
45 (replace-regexp-in-string "[:nonascii:]"
46 'rng-percent-encode
47 (encode-coding-string uri 'utf-8)))
48
49(defun rng-percent-encode (str)
50 (apply 'concat
51 (mapcar (lambda (ch)
52 (format "%%%x%x" (/ ch 16) (% ch 16)))
53 (string-to-list str))))
54
55
56(defun rng-uri-file-name (uri)
57 "Return the filename represented by a URI.
58Signal an error if URI is not a valid file URL."
59 (rng-uri-file-name-1 uri nil))
60
61(defun rng-uri-pattern-file-name-regexp (pattern)
62 "Return a regexp for filenames represented by URIs that match PATTERN."
63 (rng-uri-file-name-1 pattern 'match))
64
65(defun rng-uri-pattern-file-name-replace-match (pattern)
66 (rng-uri-file-name-1 pattern 'replace))
67
68;; pattern is either nil or match or replace
69(defun rng-uri-file-name-1 (uri pattern)
70 (unless (string-match "\\`\\(?:[^%]\\|%[0-9a-fA-F]{2}\\)*\\'" uri)
71 (rng-uri-error "Bad escapes in URI `%s'" uri))
72 (setq uri (rng-uri-unescape-multibyte uri))
73 (let* ((components
74 (or (rng-uri-split uri)
75 (rng-uri-error "Cannot split URI `%s' into its components" uri)))
76 (scheme (nth 0 components))
77 (authority (nth 1 components))
78 (path (nth 2 components))
79 (absolutep (string-match "\\`/" path))
80 (query (nth 3 components))
81 (fragment-id (nth 4 components)))
82 (cond ((not scheme)
83 (unless pattern
84 (rng-uri-error "URI `%s' does not have a scheme" uri)))
85 ((not (string= (downcase scheme) "file"))
86 (rng-uri-error "URI `%s' does not use the `file:' scheme" uri)))
87 (when (not (member authority
88 (cons system-name '(nil "" "localhost"))))
89 (rng-uri-error "URI `%s' does not start with `file:///' or `file://localhost/'"
90 uri))
91 (when query
92 (rng-uri-error "`?' not escaped in file URI `%s'" uri))
93 (when fragment-id
94 (rng-uri-error "URI `%s' has a fragment identifier" uri))
95 (when (string-match ";" path)
96 (rng-uri-error "`;' not escaped in URI `%s'" uri))
97 (when (string-match "%2[fF]" path) ;; 2f is hex code of slash
98 (rng-uri-error "Escaped slash in URI `%s'" uri))
99 (when (and (eq system-type 'windows-nt)
100 absolutep
101 (file-name-absolute-p (substring path 1)))
102 (setq path (substring path 1)))
103 (when (and pattern (string-match "\\`\\./" path))
104 (setq path (substring path 2)))
105 (setq path
106 (cond ((eq pattern 'match)
107 (rng-uri-unescape-unibyte-match path))
108 ((eq pattern 'replace)
109 (rng-uri-unescape-unibyte-replace path 2))
110 (t
111 (rng-uri-unescape-unibyte path))))
112 (when (string-match "\000" path)
113 (rng-uri-error "URI `%s' has NUL character in path" uri))
114 (when (eq pattern 'match)
115 (setq path
116 (concat (if absolutep
117 "\\(\\)"
118 "\\(\\(?:[^/]*/\\)*\\)")
119 path)))
120 (cond ((eq pattern 'match)
121 (concat "\\`" path "\\'"))
122 ((and (eq pattern 'replace)
123 (not absolutep))
124 (concat "\\1" path))
125 (t path))))
126
127(defun rng-uri-error (&rest args)
128 (signal 'rng-uri-error (list (apply 'format args))))
129
130(put 'rng-uri-error 'error-conditions '(error rng-uri-error))
131(put 'rng-uri-error 'error-message "Invalid URI")
132
133(defun rng-uri-split (str)
134 (and (string-match "\\`\\(?:\\([^:/?#]+\\):\\)?\
135\\(?://\\([^/?#]*\\)\\)?\
136\\([^?#]*\\)\
137\\(?:\\?\\([^#]*\\)\\)?\
138\\(?:#\\(\\(?:.\\|\n\\)*\\)\\)?\\'"
139 str)
140 (list (match-string 1 str)
141 (match-string 2 str)
142 (match-string 3 str)
143 (match-string 4 str)
144 (match-string 5 str))))
145
146(defun rng-uri-join (scheme authority path &optional query fragment-id)
147 (when path
148 (let (parts)
149 (when fragment-id
150 (setq parts (list "#" fragment-id)))
151 (when query
152 (setq parts
153 (cons "?"
154 (cons query parts))))
155 (setq parts (cons path parts))
156 (when authority
157 (setq parts
158 (cons "//"
159 (cons authority parts))))
160 (when scheme
161 (setq parts
162 (cons scheme
163 (cons ":" parts))))
164 (apply 'concat parts))))
165
166(defun rng-uri-resolve (uri-ref base-uri)
167 "Resolve a possibly relative URI reference into absolute form.
168URI-REF is the URI reference to be resolved.
169BASE-URI is the base URI to use for resolving it.
170The algorithm is specified by RFC 2396.
171If there is some problem with URI-REF or BASE-URI, then
172URI-REF will be returned."
173 (let* ((components (rng-uri-split uri-ref))
174 (scheme (nth 0 components))
175 (authority (nth 1 components))
176 (path (nth 2 components))
177 (query (nth 3 components))
178 (fragment-id (nth 4 components))
179 (base-components (rng-uri-split base-uri)))
180 (if (or (not components)
181 scheme
182 (not base-components)
183 (not (nth 0 base-components)))
184 uri-ref
185 (setq scheme (nth 0 base-components))
186 (when (not authority)
187 (setq authority (nth 1 base-components))
188 (if (and (equal path "") (not query))
189 ;; Handle same document reference by returning
190 ;; same URI (RFC 2396bis does this too).
191 (setq path (nth 2 base-components)
192 query (nth 3 base-components))
193 (setq path (rng-resolve-path path (nth 2 base-components)))))
194 (rng-uri-join scheme
195 authority
196 path
197 query
198 fragment-id))))
199
200;; See RFC 2396 5.2, steps 5 and 6
201(defun rng-resolve-path (path base-path)
202 ;; Step 5
203 (if (or (string-match "\\`/" path)
204 (not (string-match "\\`/" base-path)))
205 path
206 ;; Step 6
207 ;; (a), (b)
208 (let ((segments (rng-split-path path))
209 (base-segments (rng-split-path base-path)))
210 (if (> (length base-segments) 1)
211 (setq segments (nconc (nbutlast base-segments)
212 segments))
213 (setcar segments
214 (concat (car base-segments) (car segments))))
215 ;; (d)
216 (let ((last-segment (last segments)))
217 (when (equal (car last-segment) ".")
218 (setcar last-segment "")))
219 ;; (c)
220 (setq segments (delete "." segments))
221 ;; (e)
222 (let (iter matched)
223 (while (progn
224 (setq matched nil)
225 (setq iter (cdr segments))
226 (while (and iter (not matched))
227 (if (or (not (equal (cadr iter) ".."))
228 (equal (car iter) ".."))
229 (setq iter (cdr iter))
230 (setcar iter nil)
231 (setcar (cdr iter)
232 ;; (f)
233 (if (cddr iter) nil ""))
234 (setq matched t)
235 (setq segments (delq nil segments))))
236 matched)))
237 (rng-join-path segments))))
238
239(defun rng-relative-uri (full base)
240 "Return a URI that relative to BASE is equivalent to FULL.
241The returned URI will be relative if possible.
242Both FULL and BASE must be absolute URIs."
243 (let* ((components (rng-uri-split full))
244 (scheme (nth 0 components))
245 (authority (nth 1 components))
246 (path (nth 2 components))
247 (query (nth 3 components))
248 (fragment-id (nth 4 components))
249 (base-components (rng-uri-split base)))
250 (if (and components
251 base-components
252 scheme
253 (equal scheme
254 (nth 0 base-components)))
255 (progn
256 (setq scheme nil)
257 (when (and authority
258 (equal authority
259 (nth 1 base-components)))
260 (setq authority nil)
261 (setq path (rng-relative-path path (nth 2 base-components))))
262 (rng-uri-join scheme authority path query fragment-id))
263 full)))
264
265(defun rng-relative-path (path base-path)
266 (let ((segments (rng-split-path path))
267 (base-segments (rng-split-path base-path)))
268 (when (> (length base-segments) 1)
269 (setq base-segments (nbutlast base-segments)))
270 (if (or (member "." segments)
271 (member ".." segments)
272 (member "." base-segments)
273 (member ".." base-segments))
274 path
275 (while (and segments
276 base-segments
277 (string= (car segments)
278 (car base-segments)))
279 (setq segments (cdr segments))
280 (setq base-segments (cdr base-segments)))
281 (while base-segments
282 (setq base-segments (cdr base-segments))
283 (setq segments (cons ".." segments)))
284 (when (equal (car segments) "")
285 (setq segments (cons "." segments)))
286 (rng-join-path segments))))
287
288(defun rng-split-path (path)
289 (let ((start 0)
290 segments)
291 (while (string-match "/" path start)
292 (setq segments (cons (substring path start (match-beginning 0))
293 segments))
294 (setq start (match-end 0)))
295 (nreverse (cons (substring path start) segments))))
296
297(defun rng-join-path (segments)
298 (and segments
299 (mapconcat 'identity segments "/")))
300
301(defun rng-uri-unescape-multibyte (str)
302 (replace-regexp-in-string "\\(?:%[89a-fA-F][0-9a-fA-F]\\)+"
303 'rng-multibyte-percent-decode
304 str))
305
306(defun rng-multibyte-percent-decode (str)
307 (decode-coding-string (apply 'string
308 (mapcar (lambda (h) (string-to-number h 16))
309 (split-string str "%")))
310 'utf-8))
311
312(defun rng-uri-unescape-unibyte (str)
313 (replace-regexp-in-string "%[0-7][0-9a-fA-F]"
314 (lambda (h)
315 (string-to-number (substring h 1) 16))
316 str
317 t
318 t))
319
320(defun rng-uri-unescape-unibyte-match (str)
321 (replace-regexp-in-string "%[0-7][0-9a-fA-F]\\|[^%]"
322 (lambda (match)
323 (if (string= match "*")
324 "\\([^/]*\\)"
325 (regexp-quote
326 (if (= (length match) 1)
327 match
328 (string-to-number (substring match 1)
329 16)))))
330 str
331 t
332 t))
333
334(defun rng-uri-unescape-unibyte-replace (str next-match-index)
335 (replace-regexp-in-string
336 "%[0-7][0-9a-fA-F]\\|[^%]"
337 (lambda (match)
338 (if (string= match "*")
339 (let ((n next-match-index))
340 (setq next-match-index (1+ n))
341 (format "\\%s" n))
342 (let ((ch (if (= (length match) 1)
343 (aref match 0)
344 (string-to-number (substring match 1)
345 16))))
346 (if (eq ch ?\\)
347 (string ?\\ ?\\)
348 (string ch)))))
349 str
350 t
351 t))
352
353(provide 'rng-uri)
354
355;;; rng-uri.el ends here
diff --git a/lisp/nxml/rng-util.el b/lisp/nxml/rng-util.el
new file mode 100644
index 00000000000..865da0ff70c
--- /dev/null
+++ b/lisp/nxml/rng-util.el
@@ -0,0 +1,172 @@
1;;; rng-util.el --- utility functions for RELAX NG library
2
3;; Copyright (C) 2003 Free Software Foundation, Inc.
4
5;; Author: James Clark
6;; Keywords: XML, RelaxNG
7
8;; This program is free software; you can redistribute it and/or
9;; modify it under the terms of the GNU General Public License as
10;; published by the Free Software Foundation; either version 2 of
11;; the License, or (at your option) any later version.
12
13;; This program is distributed in the hope that it will be
14;; useful, but WITHOUT ANY WARRANTY; without even the implied
15;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16;; PURPOSE. See the GNU General Public License for more details.
17
18;; You should have received a copy of the GNU General Public
19;; License along with this program; if not, write to the Free
20;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21;; MA 02111-1307 USA
22
23;;; Commentary:
24
25;;; Code:
26
27(defun rng-make-datatypes-uri (uri)
28 (if (string-equal uri "")
29 ;; The spec doesn't say to do this, but it's perfectly conformant
30 ;; and better than using nil, I think.
31 'http://relaxng.org/ns/structure/1.0
32 (intern uri)))
33
34(defconst rng-xsd-datatypes-uri
35 (rng-make-datatypes-uri "http://www.w3.org/2001/XMLSchema-datatypes"))
36
37(defconst rng-builtin-datatypes-uri (rng-make-datatypes-uri ""))
38
39(defun rng-uniquify-eq (list)
40 "Destructively remove any element from LIST that is eq to
41its predecessor."
42 (and list
43 (let ((head list))
44 (while (cdr head)
45 (if (eq (car head) (cadr head))
46 (setcdr head (cddr head)))
47 (setq head (cdr head)))
48 list)))
49
50(defun rng-uniquify-equal (list)
51 "Destructively remove any element from LIST that is equal to
52its predecessor."
53 (and list
54 (let ((head list))
55 (while (cdr head)
56 (if (equal (car head) (cadr head))
57 (setcdr head (cddr head)))
58 (setq head (cdr head)))
59 list)))
60
61(defun rng-blank-p (str) (string-match "\\`[ \t\n\r]*\\'" str))
62
63(defun rng-substq (new old list)
64 "Replace first member of LIST (if any) that is eq to OLD by NEW.
65LIST is not modified."
66 (cond ((null list) nil)
67 ((eq (car list) old)
68 (cons new (cdr list)))
69 (t
70 (let ((tail (cons (car list)
71 nil))
72 (rest (cdr list)))
73 (setq list tail)
74 (while rest
75 (let ((item (car rest)))
76 (setq rest (cdr rest))
77 (cond ((eq item old)
78 (setcdr tail
79 (cons new rest))
80 (setq rest nil))
81 (t
82 (setq tail
83 (setcdr tail
84 (cons item nil))))))))
85 list)))
86
87(defun rng-complete-before-point (start table prompt &optional predicate hist)
88 "Complete text between START and point.
89Replaces the text between START and point with a string chosen using a
90completion table and, when needed, input read from the user with the
91minibuffer.
92Returns the new string if either a complete and unique completion was
93determined automatically or input was read from the user. Otherwise,
94returns nil.
95TABLE is an alist, a symbol bound to a function or an obarray as with
96the function `completing-read'.
97PROMPT is the string to prompt with if user input is needed.
98PREDICATE is nil or a function as with `completing-read'.
99HIST, if non-nil, specifies a history list as with `completing-read'."
100 (let* ((orig (buffer-substring-no-properties start (point)))
101 (completion (try-completion orig table predicate)))
102 (cond ((not completion)
103 (if (string= orig "")
104 (message "No completions available")
105 (message "No completion for %s" (rng-quote-string orig)))
106 (ding)
107 nil)
108 ((eq completion t) orig)
109 ((not (string= completion orig))
110 (delete-region start (point))
111 (insert completion)
112 (cond ((not (rng-completion-exact-p completion table predicate))
113 (message "Incomplete")
114 nil)
115 ((eq (try-completion completion table predicate) t)
116 completion)
117 (t
118 (message "Complete but not unique")
119 nil)))
120 (t
121 (setq completion
122 (let ((saved-minibuffer-setup-hook
123 (default-value 'minibuffer-setup-hook)))
124 (add-hook 'minibuffer-setup-hook
125 'minibuffer-completion-help
126 t)
127 (unwind-protect
128 (completing-read prompt
129 table
130 predicate
131 nil
132 orig
133 hist)
134 (setq-default minibuffer-setup-hook
135 saved-minibuffer-setup-hook))))
136 (delete-region start (point))
137 (insert completion)
138 completion))))
139
140(defun rng-completion-exact-p (string table predicate)
141 (cond ((symbolp table)
142 (funcall table string predicate 'lambda))
143 ((vectorp table)
144 (intern-soft string table))
145 (t (assoc string table))))
146
147(defun rng-quote-string (s)
148 (concat "\"" s "\""))
149
150(defun rng-escape-string (s)
151 (replace-regexp-in-string "[&\"<>]"
152 (lambda (match)
153 (cdr (assoc match
154 '(("&" . "&amp;")
155 ("\"" . "&quot;")
156 (">" . "&gt;")
157 ("<" . "&lt;")))))
158 s
159 t))
160
161(defun rng-collapse-space (string)
162 (setq string
163 (replace-regexp-in-string "[ \t\r\n]+" " " string t t))
164 (when (string-match "\\` " string)
165 (setq string (substring string 1)))
166 (when (string-match " \\'" string)
167 (setq string (substring string 0 -1)))
168 string)
169
170(provide 'rng-util)
171
172;;; rng-util.el ends here
diff --git a/lisp/nxml/rng-valid.el b/lisp/nxml/rng-valid.el
new file mode 100644
index 00000000000..d5ecb3aae00
--- /dev/null
+++ b/lisp/nxml/rng-valid.el
@@ -0,0 +1,1467 @@
1;;; rng-valid.el --- real-time validation of XML using RELAX NG
2
3;; Copyright (C) 2003 Free Software Foundation, Inc.
4
5;; Author: James Clark
6;; Keywords: XML, RelaxNG
7
8;; This program is free software; you can redistribute it and/or
9;; modify it under the terms of the GNU General Public License as
10;; published by the Free Software Foundation; either version 2 of
11;; the License, or (at your option) any later version.
12
13;; This program is distributed in the hope that it will be
14;; useful, but WITHOUT ANY WARRANTY; without even the implied
15;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16;; PURPOSE. See the GNU General Public License for more details.
17
18;; You should have received a copy of the GNU General Public
19;; License along with this program; if not, write to the Free
20;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21;; MA 02111-1307 USA
22
23;;; Commentary:
24
25;; For usage information, see the documentation for rng-validate-mode.
26;;
27;; This file provides a minor mode that continually validates a buffer
28;; against a RELAX NG schema. The validation state is used to support
29;; schema-sensitive editing as well as validation. Validation is
30;; performed while Emacs is idle. XML parsing is done using
31;; xmltok.el. This file is responsible for checking that end-tags
32;; match their start-tags. Namespace processing is handled by
33;; nxml-ns.el. The RELAX NG Compact Syntax schema is parsed into
34;; internal form by rng-cmpct.el. This internal form is described by
35;; rng-pttrn.el. Validation of the document by matching against this
36;; internal form is done by rng-match.el. Handling of W3C XML Schema
37;; datatypes is delegated by rng-match.el to rng-xsd.el. The minor
38;; mode is intended to be used in conjunction with the nxml major
39;; mode, but does not have to be.
40;;
41;; The major responsibility of this file is to allow validation to
42;; happen incrementally. If a buffer has been validated and is then
43;; changed, we can often revalidate it without having to completely
44;; parse and validate it from start to end. As we parse and validate
45;; the buffer, we periodically cache the state. The state has three
46;; components: the stack of open elements, the namespace processing
47;; state and the RELAX NG validation state. The state is cached as the
48;; value of the rng-state text property on the closing greater-than of
49;; tags (but at intervals, not on every tag). We keep track of the
50;; position up to which cached state is known to be correct by adding
51;; a function to the buffer's after-change-functions. This is stored
52;; in the rng-validate-up-to-date-end variable. The first way in
53;; which we make validation incremental is obvious: we start
54;; validation from the first cached state before
55;; rng-validate-up-to-date-end.
56;;
57;; To make this work efficiently, we have to be able to copy the
58;; current parsing and validation state efficiently. We do this by
59;; minimizing destructive changes to the objects storing the state.
60;; When state is changed, we use the old state to create new objects
61;; representing the new state rather than destructively modifying the
62;; objects representing the old state. Copying the state is just a
63;; matter of making a list of three objects, one for each component of
64;; the state; the three objects themselves can be shared and do not
65;; need to be copied.
66;;
67;; There's one other idea that is used to make validation incremental.
68;; Suppose we have a buffer that's 4000 bytes long and suppose we
69;; validated it, caching state at positions 1000, 2000 and 3000. Now
70;; suppose we make a change at position 1500 inserting 100 characters.
71;; rng-validate-up-to-date-end will be changed to 1500. When Emacs
72;; becomes idle and we revalidate, validation will restart using the
73;; cached state at position 1000. However, we take advantage of the
74;; cached state beyond rng-validate-up-to-date-end as follows. When
75;; our validation reaches position 2100 (the current position of the
76;; character that was at 2000), we compare our current state with the
77;; cached state. If they are the same, then we can stop parsing
78;; immediately and set rng-validate-up-to-date-end to the end of the
79;; buffer: we already know that the state cached at position 3100 is
80;; correct. If they are not the same, then we have to continue
81;; parsing. After the change, but before revalidation, we call the
82;; region from 1600 to the end of the buffer "conditionally
83;; up-to-date".
84;;
85;; As well as the cached parsing and validation state, we also keep
86;; track of the errors in the file. Errors are stored as overlays
87;; with a category of rng-error. The number of such overlays in the
88;; buffer must always be equal to rng-error-count.
89
90;;; Code:
91
92(require 'xmltok)
93(require 'nxml-enc)
94(require 'nxml-util)
95(require 'nxml-ns)
96(require 'rng-match)
97(require 'rng-util)
98(require 'rng-loc)
99
100;;; Customizable variables
101
102(defgroup relax-ng nil
103 "Validation of XML using RELAX NG."
104 :group 'wp
105 :group 'nxml
106 :group 'languages)
107
108(defface rng-error-face '((t (:underline "red")))
109 "Face for highlighting XML errors."
110 :group 'relax-ng)
111
112(defcustom rng-state-cache-distance 2000
113 "*Distance in characters between each parsing and validation state cache."
114 :type 'integer
115 :group 'relax-ng)
116
117(defcustom rng-validate-chunk-size 8000
118 "*Number of characters in a RELAX NG validation chunk.
119A validation chunk will be the smallest chunk that is at least this
120size and ends with a tag. After validating a chunk, validation will
121continue only if Emacs is still idle."
122 :type 'integer
123 :group 'relax-ng)
124
125(defcustom rng-validate-delay 1.5
126 "*Time in seconds that Emacs must be idle before starting a full validation.
127A full validation continues until either validation is up to date
128or Emacs is no longer idle."
129 :type 'number
130 :group 'relax-ng)
131
132(defcustom rng-validate-quick-delay 0.3
133 "*Time in seconds that Emacs must be idle before starting a quick validation.
134A quick validation validates at most one chunk."
135 :type 'number
136 :group 'relax-ng)
137
138;; Global variables
139
140(defvar rng-validate-timer nil)
141(make-variable-buffer-local 'rng-validate-timer)
142;; ensure that we can cancel the timer even after a kill-all-local-variables
143(put 'rng-validate-timer 'permanent-local t)
144
145(defvar rng-validate-quick-timer nil)
146(make-variable-buffer-local 'rng-validate-quick-timer)
147;; ensure that we can cancel the timer even after a kill-all-local-variables
148(put 'rng-validate-quick-timer 'permanent-local t)
149
150(defvar rng-error-count nil
151 "Number of errors in the current buffer. Always equal to number of
152overlays with category rng-error.")
153(make-variable-buffer-local 'rng-error-count)
154
155(defvar rng-message-overlay nil
156 "Overlay in this buffer whose help-echo property was last printed.
157Nil if none.")
158(make-variable-buffer-local 'rng-message-overlay)
159
160(defvar rng-message-overlay-inhibit-point nil
161 "Position at which message from overlay should be inhibited.
162If point is equal to this and the error overlay around
163point is `rng-message-overlay', then the `help-echo' property
164of the error overlay should not be printed with `message'.")
165(make-variable-buffer-local 'rng-message-overlay-inhibit-point)
166
167(defvar rng-message-overlay-current nil
168 "Non-nil if `rng-message-overlay' is still the current message.")
169(make-variable-buffer-local 'rng-message-overlay-current)
170
171(defvar rng-open-elements nil
172 "Stack of names of open elements represented as a list.
173Each member of the list is either t or a (PREFIX . LOCAL-NAME) pair.
174\(PREFIX . LOCAL-NAME) is pushed for a start-tag; t is pushed
175for a mismatched end-tag.")
176
177(defvar rng-pending-contents nil
178 "Text content of current element that has yet to be processed.
179Value is a list of segments (VALUE START END) positions in reverse
180order. VALUE is a string or nil. If VALUE is nil, then the value is
181the string between START and END. A segment can also be nil
182indicating an unresolvable entity or character reference.")
183
184(defvar rng-collecting-text nil)
185
186(defvar rng-validate-up-to-date-end nil
187 "Last position where validation is known to be up to date.")
188(make-variable-buffer-local 'rng-validate-up-to-date-end)
189
190(defvar rng-conditional-up-to-date-start nil
191 "Marker for the start of the conditionally up-to-date region.
192Nil if there is no conditionally up-to-date region. The conditionally
193up-to-date region must be such that for any cached state S with
194position P in the conditionally up-to-date region, if at some point it
195is determined that S becomes correct for P, then all states with
196position >= P in the conditionally up to date region must also then be
197correct and all errors between P and the end of the region must then
198be correctly marked.")
199(make-variable-buffer-local 'rng-conditional-up-to-date-start)
200
201(defvar rng-conditional-up-to-date-end nil
202 "Marker for the end of the conditionally up-to-date region.
203Nil if there is no conditionally up-to-date region. See the variable
204`rng-conditional-up-to-date-start'.")
205(make-variable-buffer-local 'rng-conditional-up-to-date-end)
206
207(defvar rng-parsing-for-state nil
208 "Non-nil means we are currently parsing just to compute the state.
209Should be dynamically bound.")
210
211(defvar rng-validate-mode nil)
212(make-variable-buffer-local 'rng-validate-mode)
213
214(defvar rng-dtd nil)
215(make-variable-buffer-local 'rng-dtd)
216
217;;;###autoload
218(defun rng-validate-mode (&optional arg no-change-schema)
219 "Minor mode performing continual validation against a RELAX NG schema.
220
221Checks whether the buffer is a well-formed XML 1.0 document,
222conforming to the XML Namespaces Recommendation and valid against a
223RELAX NG schema. The mode-line indicates whether it is or not. Any
224parts of the buffer that cause it not to be are considered errors and
225are highlighted with `rng-error-face'. A description of each error is
226available as a tooltip. \\[rng-next-error] goes to the next error
227after point. Clicking mouse-1 on the word `Invalid' in the mode-line
228goes to the first error in the buffer. If the buffer changes, then it
229will be automatically rechecked when Emacs becomes idle; the
230rechecking will be paused whenever there is input pending..
231
232By default, uses a vacuous schema that allows any well-formed XML
233document. A schema can be specified explictly using
234\\[rng-set-schema-file-and-validate], or implicitly based on the buffer's
235file name or on the root element name. In each case the schema must
236be a RELAX NG schema using the compact schema \(such schemas
237conventionally have a suffix of `.rnc'). The variable
238`rng-schema-locating-files' specifies files containing rules
239to use for finding the schema."
240 (interactive "P")
241 (setq rng-validate-mode
242 (if (null arg)
243 (not rng-validate-mode)
244 (> (prefix-numeric-value arg) 0)))
245 (save-restriction
246 (widen)
247 (nxml-with-unmodifying-text-property-changes
248 (rng-clear-cached-state (point-min) (point-max)))
249 ;; 1+ to clear empty overlays at (point-max)
250 (rng-clear-overlays (point-min) (1+ (point-max))))
251 (setq rng-validate-up-to-date-end 1)
252 (rng-clear-conditional-region)
253 (setq rng-error-count 0)
254 ;; do this here to avoid infinite loop if we set the schema
255 (remove-hook 'rng-schema-change-hook 'rng-validate-clear t)
256 (cond (rng-validate-mode
257 (unwind-protect
258 (save-excursion
259 ;; An error can change the current buffer
260 (when (or (not rng-current-schema)
261 (and (eq rng-current-schema rng-any-element)
262 (not no-change-schema)))
263 (rng-auto-set-schema t)))
264 (unless rng-current-schema (rng-set-schema-file-1 nil))
265 (add-hook 'rng-schema-change-hook 'rng-validate-clear nil t)
266 (add-hook 'after-change-functions 'rng-after-change-function nil t)
267 (add-hook 'kill-buffer-hook 'rng-kill-timers nil t)
268 (add-hook 'echo-area-clear-hook 'rng-echo-area-clear-function nil t)
269 (add-hook 'post-command-hook 'rng-maybe-echo-error-at-point nil t)
270 (rng-match-init-buffer)
271 (rng-activate-timers)
272 ;; Start validating right away if the buffer is visible.
273 ;; If it's not visible, don't do this, because the user
274 ;; won't get any progress indication. When the user finds
275 ;; a new file, then the buffer won't be visible
276 ;; when this is invoked.
277 (when (get-buffer-window (current-buffer) 'visible)
278 (rng-validate-while-idle (current-buffer)))))
279 (t
280 (rng-cancel-timers)
281 (force-mode-line-update)
282 (remove-hook 'kill-buffer-hook 'rng-cancel-timers t)
283 (remove-hook 'post-command-hook 'rng-maybe-echo-error-at-point t)
284 (remove-hook 'echo-area-clear-hook 'rng-echo-area-clear-function t)
285 (remove-hook 'after-change-functions 'rng-after-change-function t))))
286
287(defun rng-set-schema-file-and-validate (filename)
288 "Sets the schema and turns on `rng-validate-mode' if not already on.
289The schema is set like `rng-set-schema'."
290 (interactive "fSchema file: ")
291 (rng-set-schema-file filename)
292 (or rng-validate-mode (rng-validate-mode)))
293
294(defun rng-set-document-type-and-validate (type-id)
295 (interactive (list (rng-read-type-id)))
296 (and (rng-set-document-type type-id)
297 (or rng-validate-mode (rng-validate-mode))))
298
299(defun rng-auto-set-schema-and-validate ()
300 "Set the schema for this buffer automatically and turn on `rng-validate-mode'.
301The schema is set like `rng-auto-set-schema'."
302 (interactive)
303 (rng-auto-set-schema)
304 (or rng-validate-mode (rng-validate-mode)))
305
306(defun rng-after-change-function (start end pre-change-len)
307 ;; Work around bug in insert-file-contents.
308 (when (> end (1+ (buffer-size)))
309 (setq start 1)
310 (setq end (1+ (buffer-size))))
311 (setq rng-message-overlay-inhibit-point nil)
312 (nxml-with-unmodifying-text-property-changes
313 (rng-clear-cached-state start end))
314 ;; rng-validate-up-to-date-end holds the position before the change
315 ;; Adjust it to reflect the change.
316 (if (< start rng-validate-up-to-date-end)
317 (setq rng-validate-up-to-date-end
318 (if (<= (+ start pre-change-len) rng-validate-up-to-date-end)
319 (+ rng-validate-up-to-date-end
320 (- end start pre-change-len))
321 start)))
322 ;; Adjust the conditional zone
323 (cond (rng-conditional-up-to-date-start
324 (when (< rng-conditional-up-to-date-start end)
325 (if (< end rng-conditional-up-to-date-end)
326 (set-marker rng-conditional-up-to-date-start end)
327 (rng-clear-conditional-region))))
328 ((< end rng-validate-up-to-date-end)
329 (setq rng-conditional-up-to-date-end
330 (copy-marker rng-validate-up-to-date-end nil))
331 (setq rng-conditional-up-to-date-start
332 (copy-marker end t))))
333 ;; Adjust rng-validate-up-to-date-end
334 (if (< start rng-validate-up-to-date-end)
335 (setq rng-validate-up-to-date-end start))
336 ;; Must make rng-validate-up-to-date-end < point-max
337 ;; (unless the buffer is empty).
338 ;; otherwise validate-prepare will say there's nothing to do.
339 ;; Don't use (point-max) because we may be narrowed.
340 (if (> rng-validate-up-to-date-end (buffer-size))
341 (setq rng-validate-up-to-date-end
342 (max 1 (1- rng-validate-up-to-date-end))))
343 ;; Arrange to revalidate
344 (rng-activate-timers)
345 ;; Need to do this after activating the timer
346 (force-mode-line-update))
347
348(defun rng-compute-mode-line-string ()
349 (cond (rng-validate-timer
350 (concat " Validated:"
351 (number-to-string
352 ;; Use floor rather than round because we want
353 ;; to show 99% rather than 100% for changes near
354 ;; the end.
355 (floor (if (eq (buffer-size) 0)
356 0.0
357 (/ (* (- rng-validate-up-to-date-end 1) 100.0)
358 (buffer-size)))))
359 "%%"))
360 ((> rng-error-count 0)
361 (concat " "
362 (propertize "Invalid"
363 'help-echo "mouse-1: go to first error"
364 'local-map (make-mode-line-mouse-map
365 'mouse-1
366 'rng-mouse-first-error))))
367 (t " Valid")))
368
369(defun rng-cancel-timers ()
370 (let ((inhibit-quit t))
371 (when rng-validate-timer
372 (cancel-timer rng-validate-timer)
373 (setq rng-validate-timer nil))
374 (when rng-validate-quick-timer
375 (cancel-timer rng-validate-quick-timer)
376 (setq rng-validate-quick-timer nil))))
377
378(defun rng-kill-timers ()
379 ;; rng-validate-timer and rng-validate-quick-timer have the
380 ;; permanent-local property, so that the timers can be
381 ;; cancelled even after changing mode.
382 ;; This function takes care of cancelling the timers and
383 ;; then killing the local variables.
384 (when (local-variable-p 'rng-validate-timer)
385 (when rng-validate-timer
386 (cancel-timer rng-validate-timer))
387 (kill-local-variable 'rng-validate-timer))
388 (when (local-variable-p 'rng-validate-quick-timer)
389 (when rng-validate-quick-timer
390 (cancel-timer rng-validate-quick-timer))
391 (kill-local-variable 'rng-validate-quick-timer)))
392
393(defun rng-activate-timers ()
394 (unless rng-validate-timer
395 (let ((inhibit-quit t))
396 (setq rng-validate-timer
397 (run-with-idle-timer rng-validate-delay
398 t
399 'rng-validate-while-idle
400 (current-buffer)))
401 (setq rng-validate-quick-timer
402 (run-with-idle-timer rng-validate-quick-delay
403 t
404 'rng-validate-quick-while-idle
405 (current-buffer))))))
406
407(defun rng-validate-clear ()
408 (rng-validate-mode 1 t))
409
410;; These two variables are dynamically bound and used
411;; to pass information between rng-validate-while-idle
412;; and rng-validate-while-idle-continue-p.
413
414(defvar rng-validate-display-point nil)
415(defvar rng-validate-display-modified-p nil)
416
417(defun rng-validate-while-idle-continue-p ()
418 ;; input-pending-p and sit-for run timers that are
419 ;; ripe. Binding timer-idle-list to nil prevents
420 ;; this. If we don't do this, then any ripe timers
421 ;; will get run, and we won't get any chance to
422 ;; validate until Emacs becomes idle again or until
423 ;; the other lower priority timers finish (which
424 ;; can take a very long time in the case of
425 ;; jit-lock).
426 (let ((timer-idle-list nil))
427 (and (not (input-pending-p))
428 ;; Fake rng-validate-up-to-date-end so that the mode line
429 ;; shows progress. Also use this to save point.
430 (let ((rng-validate-up-to-date-end (point)))
431 (goto-char rng-validate-display-point)
432 (when (not rng-validate-display-modified-p)
433 (restore-buffer-modified-p nil))
434 (force-mode-line-update)
435 (let ((continue (sit-for 0)))
436 (goto-char rng-validate-up-to-date-end)
437 continue)))))
438
439;; Calling rng-do-some-validation once with a continue-p function, as
440;; opposed to calling it repeatedly, helps on initial validation of a
441;; large buffer with lots of errors. The overlays for errors will all
442;; get added when rng-do-some-validation returns and won't slow the
443;; validation process down.
444
445(defun rng-validate-while-idle (buffer)
446 (with-current-buffer buffer
447 (if rng-validate-mode
448 (if (let ((rng-validate-display-point (point))
449 (rng-validate-display-modified-p (buffer-modified-p)))
450 (rng-do-some-validation 'rng-validate-while-idle-continue-p))
451 (force-mode-line-update)
452 (rng-validate-done))
453 ;; must have done kill-all-local-variables
454 (rng-kill-timers))))
455
456(defun rng-validate-quick-while-idle (buffer)
457 (with-current-buffer buffer
458 (if rng-validate-mode
459 (if (rng-do-some-validation)
460 (force-mode-line-update)
461 (rng-validate-done))
462 ;; must have done kill-all-local-variables
463 (rng-kill-timers))))
464
465(defun rng-validate-done ()
466 (when (or (not (current-message))
467 (rng-current-message-from-error-overlay-p))
468 (rng-error-overlay-message (or (rng-error-overlay-after (point))
469 (rng-error-overlay-after (1- (point))))))
470 (rng-cancel-timers)
471 (force-mode-line-update))
472
473(defun rng-do-some-validation (&optional continue-p-function)
474 "Do some validation work. Return t if more to do, nil otherwise."
475 (save-excursion
476 (save-restriction
477 (widen)
478 (nxml-with-invisible-motion
479 (condition-case err
480 (and (rng-validate-prepare)
481 (let ((rng-dt-namespace-context-getter '(nxml-ns-get-context)))
482 (nxml-with-unmodifying-text-property-changes
483 (rng-do-some-validation-1 continue-p-function))))
484 ;; errors signalled from a function run by an idle timer
485 ;; are ignored; if we don't catch them, validation
486 ;; will get mysteriously stuck at a single place
487 (rng-compile-error
488 (message "Incorrect schema. %s" (nth 1 err))
489 (rng-validate-mode 0)
490 nil)
491 (error
492 (message "Internal error in rng-validate-mode triggered at buffer position %d. %s"
493 (point)
494 (error-message-string err))
495 (rng-validate-mode 0)
496 nil))))))
497
498(defun rng-validate-prepare ()
499 "Prepare to do some validation, initializing point and the state.
500Return t if there is work to do, nil otherwise."
501 (cond ((= rng-validate-up-to-date-end (point-min))
502 (rng-set-initial-state)
503 t)
504 ((= rng-validate-up-to-date-end (point-max))
505 nil)
506 (t (let ((state (get-text-property (1- rng-validate-up-to-date-end)
507 'rng-state)))
508 (cond (state
509 (rng-restore-state state)
510 (goto-char rng-validate-up-to-date-end))
511 (t
512 (let ((pos (previous-single-property-change
513 rng-validate-up-to-date-end
514 'rng-state)))
515 (cond (pos
516 (rng-restore-state
517 (or (get-text-property (1- pos) 'rng-state)
518 (error "Internal error: state null")))
519 (goto-char pos))
520 (t (rng-set-initial-state))))))))))
521
522
523(defun rng-do-some-validation-1 (&optional continue-p-function)
524 (let ((limit (+ rng-validate-up-to-date-end
525 rng-validate-chunk-size))
526 (remove-start rng-validate-up-to-date-end)
527 (next-cache-point (+ (point) rng-state-cache-distance))
528 (continue t)
529 (xmltok-dtd rng-dtd)
530 have-remaining-chars
531 xmltok-type
532 xmltok-start
533 xmltok-name-colon
534 xmltok-name-end
535 xmltok-replacement
536 xmltok-attributes
537 xmltok-namespace-attributes
538 xmltok-dependent-regions
539 xmltok-errors)
540 (when (= (point) 1)
541 (let ((regions (xmltok-forward-prolog)))
542 (rng-clear-overlays 1 (point))
543 (while regions
544 (when (eq (aref (car regions) 0) 'encoding-name)
545 (rng-process-encoding-name (aref (car regions) 1)
546 (aref (car regions) 2)))
547 (setq regions (cdr regions))))
548 (unless (equal rng-dtd xmltok-dtd)
549 (rng-clear-conditional-region))
550 (setq rng-dtd xmltok-dtd))
551 (while continue
552 (setq have-remaining-chars (rng-forward))
553 (let ((pos (point)))
554 (setq continue
555 (and have-remaining-chars
556 (or (< pos limit)
557 (and continue-p-function
558 (funcall continue-p-function)
559 (setq limit (+ limit rng-validate-chunk-size))
560 t))))
561 (cond ((and rng-conditional-up-to-date-start
562 ;; > because we are getting the state from (1- pos)
563 (> pos rng-conditional-up-to-date-start)
564 (< pos rng-conditional-up-to-date-end)
565 (rng-state-matches-current (get-text-property (1- pos)
566 'rng-state)))
567 (when (< remove-start (1- pos))
568 (rng-clear-cached-state remove-start (1- pos)))
569 ;; sync up with cached validation state
570 (setq continue nil)
571 ;; do this before settting rng-validate-up-to-date-end
572 ;; in case we get a quit
573 (rng-mark-xmltok-errors)
574 (rng-mark-xmltok-dependent-regions)
575 (setq rng-validate-up-to-date-end
576 (marker-position rng-conditional-up-to-date-end))
577 (rng-clear-conditional-region)
578 (setq have-remaining-chars
579 (< rng-validate-up-to-date-end (point-max))))
580 ((or (>= pos next-cache-point)
581 (not continue))
582 (setq next-cache-point (+ pos rng-state-cache-distance))
583 (rng-clear-cached-state remove-start pos)
584 (when have-remaining-chars
585 (rng-cache-state (1- pos)))
586 (setq remove-start pos)
587 (unless continue
588 ;; if we have just blank chars skip to the end
589 (when have-remaining-chars
590 (skip-chars-forward " \t\r\n")
591 (when (= (point) (point-max))
592 (rng-clear-overlays pos (point))
593 (rng-clear-cached-state pos (point))
594 (setq have-remaining-chars nil)
595 (setq pos (point))))
596 (when (not have-remaining-chars)
597 (rng-process-end-document))
598 (rng-mark-xmltok-errors)
599 (rng-mark-xmltok-dependent-regions)
600 (setq rng-validate-up-to-date-end pos)
601 (when rng-conditional-up-to-date-end
602 (cond ((<= rng-conditional-up-to-date-end pos)
603 (rng-clear-conditional-region))
604 ((< rng-conditional-up-to-date-start pos)
605 (set-marker rng-conditional-up-to-date-start
606 pos)))))))))
607 have-remaining-chars))
608
609(defun rng-clear-conditional-region ()
610 (when rng-conditional-up-to-date-start
611 (set-marker rng-conditional-up-to-date-start nil)
612 (setq rng-conditional-up-to-date-start nil))
613 (when rng-conditional-up-to-date-end
614 (set-marker rng-conditional-up-to-date-end nil)
615 (setq rng-conditional-up-to-date-end nil)))
616
617(defun rng-clear-cached-state (start end)
618 "Clear cached state between START and END."
619 (remove-text-properties start end '(rng-state nil)))
620
621(defun rng-cache-state (pos)
622 "Save the current state in a text property on the character at pos."
623 (put-text-property pos
624 (1+ pos)
625 'rng-state
626 (rng-get-state)))
627
628(defun rng-state-matches-current (state)
629 (and state
630 (rng-match-state-equal (car state))
631 (nxml-ns-state-equal (nth 1 state))
632 (equal (nth 2 state) rng-open-elements)))
633
634(defun rng-get-state ()
635 (list (rng-match-state)
636 (nxml-ns-state)
637 rng-open-elements))
638
639(defun rng-restore-state (state)
640 (rng-set-match-state (car state))
641 (setq state (cdr state))
642 (nxml-ns-set-state (car state))
643 (setq rng-open-elements (cadr state))
644 (setq rng-pending-contents nil)
645 (setq rng-collecting-text (rng-match-text-typed-p)))
646
647(defun rng-set-initial-state ()
648 (nxml-ns-init)
649 (rng-match-start-document)
650 (setq rng-open-elements nil)
651 (setq rng-pending-contents nil)
652 (goto-char (point-min)))
653
654(defun rng-clear-overlays (beg end)
655 (unless rng-parsing-for-state
656 (let ((overlays (overlays-in beg end)))
657 (while overlays
658 (let* ((overlay (car overlays))
659 (category (overlay-get overlay 'category)))
660 (cond ((eq category 'rng-error)
661 (let ((inhibit-quit t))
662 (when (eq overlay rng-message-overlay)
663 (rng-error-overlay-message nil))
664 (delete-overlay overlay)
665 ;; rng-error-count could be nil
666 ;; if overlays left over from a previous use
667 ;; of rng-validate-mode that ended with a change of mode
668 (when rng-error-count
669 (setq rng-error-count (1- rng-error-count)))))
670 ((and (eq category 'rng-dependent)
671 (<= beg (overlay-start overlay)))
672 (delete-overlay overlay))))
673 (setq overlays (cdr overlays))))))
674
675;;; Dependent regions
676
677(defun rng-mark-xmltok-dependent-regions ()
678 (while xmltok-dependent-regions
679 (apply 'rng-mark-xmltok-dependent-region
680 (car xmltok-dependent-regions))
681 (setq xmltok-dependent-regions
682 (cdr xmltok-dependent-regions))))
683
684(defun rng-mark-xmltok-dependent-region (fun start end &rest args)
685 (let ((overlay (make-overlay start end nil t t)))
686 (overlay-put overlay 'category 'rng-dependent)
687 (overlay-put overlay 'rng-funargs (cons fun args))))
688
689(put 'rng-dependent 'evaporate t)
690(put 'rng-dependent 'modification-hooks '(rng-dependent-region-changed))
691(put 'rng-dependent 'insert-behind-hooks '(rng-dependent-region-changed))
692
693(defun rng-dependent-region-changed (overlay
694 after-p
695 change-start
696 change-end
697 &optional pre-change-length)
698 (when (and after-p
699 ;; Emacs sometimes appears to call deleted overlays
700 (overlay-start overlay)
701 (let ((funargs (overlay-get overlay 'rng-funargs)))
702 (save-match-data
703 (save-excursion
704 (save-restriction
705 (widen)
706 (apply (car funargs)
707 (append (list change-start
708 change-end
709 pre-change-length
710 (overlay-start overlay)
711 (overlay-end overlay))
712 (cdr funargs))))))))
713 (rng-after-change-function (overlay-start overlay)
714 change-end
715 (+ pre-change-length
716 (- (overlay-start overlay)
717 change-start)))
718 (delete-overlay overlay)))
719
720;;; Error state
721
722(defun rng-mark-xmltok-errors ()
723 (while xmltok-errors
724 (let ((err (car xmltok-errors)))
725 (rng-mark-not-well-formed (xmltok-error-message err)
726 (xmltok-error-start err)
727 (xmltok-error-end err)))
728 (setq xmltok-errors (cdr xmltok-errors))))
729
730(defun rng-mark-invalid (message beg end)
731 (rng-mark-error message beg end))
732
733(defun rng-mark-not-well-formed (message beg end)
734 ;; Don't try to validate further
735 ;;(rng-set-match-state rng-not-allowed-ipattern)
736 (rng-mark-error message beg end))
737
738(defun rng-mark-error (message beg end)
739 (unless rng-parsing-for-state
740 (let ((overlays (overlays-in beg end)))
741 (while (and overlays message)
742 (let ((o (car overlays)))
743 (when (and (eq (overlay-get o 'category) 'rng-error)
744 (= (overlay-start o) beg)
745 (= (overlay-end o) end))
746 (overlay-put o
747 'help-echo
748 (concat (overlay-get o 'help-echo)
749 "\n"
750 message))
751 (setq message nil)))
752 (setq overlays (cdr overlays))))
753 (when message
754 (let ((inhibit-quit t))
755 (setq rng-error-count (1+ rng-error-count))
756 (let ((overlay
757 (make-overlay beg end nil t
758 ;; Need to make the rear delimiter advance
759 ;; with the front delimiter when the overlay
760 ;; is empty, otherwise the front delimiter
761 ;; will move past the rear delimiter.
762 (= beg end))))
763 ;; Ensure when we have two overlapping messages, the help-echo
764 ;; of the one that starts first is shown
765 (overlay-put overlay 'priority beg)
766 (overlay-put overlay 'category 'rng-error)
767 (overlay-put overlay 'help-echo message))))))
768
769(put 'rng-error 'face 'rng-error-face)
770(put 'rng-error 'modification-hooks '(rng-error-modified))
771
772;; If we don't do this, then the front delimiter can move
773;; past the end delimiter.
774(defun rng-error-modified (overlay after-p beg end &optional pre-change-len)
775 (when (and after-p
776 (overlay-start overlay) ; check not deleted
777 (>= (overlay-start overlay)
778 (overlay-end overlay)))
779 (let ((inhibit-quit t))
780 (delete-overlay overlay)
781 (setq rng-error-count (1- rng-error-count)))))
782
783(defun rng-echo-area-clear-function ()
784 (setq rng-message-overlay-current nil))
785
786;;; Error navigation
787
788(defun rng-maybe-echo-error-at-point ()
789 (when (or (not (current-message))
790 (rng-current-message-from-error-overlay-p))
791 (rng-error-overlay-message (rng-error-overlay-after (point)))))
792
793(defun rng-error-overlay-after (pos)
794 (let ((overlays (overlays-in pos (1+ pos)))
795 (best nil))
796 (while overlays
797 (let ((overlay (car overlays)))
798 (when (and (eq (overlay-get overlay 'category)
799 'rng-error)
800 (or (not best)
801 (< (overlay-start best)
802 (overlay-start overlay))))
803 (setq best overlay)))
804 (setq overlays (cdr overlays)))
805 best))
806
807(defun rng-first-error ()
808 "Go to the first validation error.
809Turn on `rng-validate-mode' if it is not already on."
810 (interactive)
811 (or rng-validate-mode (rng-validate-mode))
812 (when (and (eq rng-validate-up-to-date-end 1)
813 (< rng-validate-up-to-date-end (point-max)))
814 (rng-do-some-validation))
815 (let ((err (rng-find-next-error-overlay (1- (point-min)))))
816 (if err
817 (rng-goto-error-overlay err)
818 (let ((pos (save-excursion
819 (goto-char (point-min))
820 (rng-next-error 1))))
821 (when pos
822 (goto-char pos))))))
823
824(defun rng-mouse-first-error (event)
825 "Go to the first validation error from a mouse click."
826 (interactive "e")
827 (select-window (posn-window (event-start event)))
828 (rng-first-error))
829
830(defun rng-next-error (arg)
831 "Go to the next validation error after point.
832Turn on `rng-validate-mode' if it is not already on.
833A prefix ARG specifies how many errors to move. A negative ARG
834moves backwards. Just \\[universal-argument] as a prefix
835means goto the first error."
836 (interactive "P")
837 (if (consp arg)
838 (rng-first-error)
839 (or rng-validate-mode (rng-validate-mode))
840 (setq arg (prefix-numeric-value arg))
841 (if (< arg 0)
842 (rng-previous-error-1 (- arg))
843 (rng-next-error-1 arg))))
844
845(defun rng-previous-error (arg)
846 "Go to the previous validation error before point.
847Turn on `rng-validate-mode' if it is not already on.
848A prefix ARG specifies how many errors to move. A negative ARG
849moves forwards. Just \\[universal-argument] as a prefix
850means goto the first error."
851 (interactive "P")
852 (if (consp arg)
853 (rng-first-error)
854 (or rng-validate-mode (rng-validate-mode))
855 (setq arg (prefix-numeric-value arg))
856 (if (< arg 0)
857 (rng-next-error-1 (- arg))
858 (rng-previous-error-1 arg))))
859
860(defun rng-next-error-1 (arg)
861 (let* ((pos (point))
862 err last-err)
863 (while (and (> arg 0)
864 (setq err (rng-find-next-error-overlay pos)))
865 (setq arg (1- arg))
866 (setq last-err err)
867 (setq pos (overlay-start err)))
868 (when (> arg 0)
869 (setq pos (max pos (1- rng-validate-up-to-date-end)))
870 (when (< rng-validate-up-to-date-end (point-max))
871 (message "Parsing...")
872 (while (let ((more-to-do (rng-do-some-validation)))
873 (while (and (> arg 0)
874 (setq err (rng-find-next-error-overlay pos)))
875 (setq arg (1- arg))
876 (setq last-err err)
877 (setq pos (overlay-start err)))
878 (when (and (> arg 0)
879 more-to-do
880 (< rng-validate-up-to-date-end (point-max)))
881 ;; Display percentage validated.
882 (force-mode-line-update)
883 ;; Force redisplay but don't allow idle timers to run.
884 (let ((timer-idle-list nil))
885 (sit-for 0))
886 (setq pos
887 (max pos (1- rng-validate-up-to-date-end)))
888 t)))))
889 (if last-err
890 (rng-goto-error-overlay last-err)
891 (message "No more errors")
892 nil)))
893
894(defun rng-previous-error-1 (arg)
895 (let* ((pos (point))
896 err last-err)
897 (while (and (> arg 0)
898 (setq err (rng-find-previous-error-overlay pos)))
899 (setq pos (overlay-start err))
900 (setq last-err err)
901 (setq arg (1- arg)))
902 (when (and (> arg 0)
903 (< rng-validate-up-to-date-end (min pos (point-max))))
904 (message "Parsing...")
905 (while (and (rng-do-some-validation)
906 (< rng-validate-up-to-date-end (min pos (point-max))))
907 (force-mode-line-update)
908 ;; Force redisplay but don't allow idle timers to run.
909 (let ((timer-idle-list nil))
910 (sit-for 0)))
911 (while (and (> arg 0)
912 (setq err (rng-find-previous-error-overlay pos)))
913 (setq pos (overlay-start err))
914 (setq last-err err)
915 (setq arg (1- arg))))
916 (if last-err
917 (rng-goto-error-overlay last-err)
918 (message "No previous errors")
919 nil)))
920
921(defun rng-goto-error-overlay (err)
922 "Goto the start of error overlay ERR and print its message."
923 (goto-char (overlay-start err))
924 (setq rng-message-overlay-inhibit-point nil)
925 (rng-error-overlay-message err))
926
927(defun rng-error-overlay-message (err)
928 (if err
929 (unless (or (and (eq rng-message-overlay-inhibit-point (point))
930 (eq rng-message-overlay err))
931 (= (point-max) 1))
932 (message "%s" (overlay-get err 'help-echo))
933 (setq rng-message-overlay-current t)
934 (setq rng-message-overlay-inhibit-point (point)))
935 (when (rng-current-message-from-error-overlay-p)
936 (message nil))
937 (setq rng-message-overlay-inhibit-point nil))
938 (setq rng-message-overlay err))
939
940(defun rng-current-message-from-error-overlay-p ()
941 (and rng-message-overlay-current
942 rng-message-overlay
943 (equal (overlay-get rng-message-overlay 'help-echo)
944 (current-message))))
945
946(defun rng-find-next-error-overlay (pos)
947 "Return the overlay for the next error starting after POS.
948Return nil if there is no such overlay or it is out of date.
949Do not do any additional validation."
950 (when rng-error-count
951 (let (done found overlays)
952 (while (not done)
953 (cond (overlays
954 (let ((overlay (car overlays)))
955 (setq overlays (cdr overlays))
956 (when (and (eq (overlay-get overlay 'category) 'rng-error)
957 ;; Is it the first?
958 (= (overlay-start overlay) pos)
959 ;; Is it up to date?
960 (<= (overlay-end overlay)
961 rng-validate-up-to-date-end))
962 (setq done t)
963 (setq found overlay))))
964 ((or (= pos (point-max))
965 (> (setq pos (next-overlay-change pos))
966 rng-validate-up-to-date-end))
967 (setq done t))
968 (t (setq overlays (overlays-in pos (1+ pos))))))
969 found)))
970
971(defun rng-find-previous-error-overlay (pos)
972 "Return the overlay for the last error starting before POS.
973Return nil if there is no such overlay or it is out of date.
974Do not do any additional validation."
975 (when (and rng-error-count
976 (<= pos rng-validate-up-to-date-end))
977 (let (done found overlays)
978 (while (not done)
979 (cond (overlays
980 (let ((overlay (car overlays)))
981 (setq overlays (cdr overlays))
982 (when (and (eq (overlay-get overlay 'category) 'rng-error)
983 ;; Is it the first?
984 (= (overlay-start overlay) pos))
985 (setq done t)
986 (setq found overlay))))
987 ((= pos (point-min))
988 (setq done t))
989 (t
990 (setq pos (previous-overlay-change pos))
991 (setq overlays (overlays-in pos (1+ pos))))))
992 found)))
993
994;;; Parsing
995
996(defun rng-forward (&optional limit)
997 "Move forward over one or more tokens updating the state.
998If LIMIT is nil, stop after tags.
999If LIMIT is non-nil, stop when end of last token parsed is >= LIMIT.
1000Return nil at end of buffer, t otherwise."
1001 (let (type)
1002 (while (progn
1003 (setq type (xmltok-forward))
1004 (rng-clear-overlays xmltok-start (point))
1005 (let ((continue
1006 (cond ((eq type 'start-tag)
1007 (rng-process-start-tag 'start-tag)
1008 nil)
1009 ((eq type 'end-tag)
1010 (rng-process-end-tag)
1011 nil)
1012 ((eq type 'empty-element)
1013 (rng-process-start-tag 'empty-element)
1014 nil)
1015 ((eq type 'space)
1016 (rng-process-text xmltok-start nil t)
1017 t)
1018 ((eq type 'data)
1019 (rng-process-text xmltok-start nil nil)
1020 t)
1021 ((memq type '(entity-ref char-ref))
1022 (cond (xmltok-replacement
1023 (rng-process-text xmltok-start
1024 nil
1025 'maybe
1026 xmltok-replacement))
1027 ((eq type 'char-ref)
1028 (rng-process-unknown-char))
1029 (t
1030 (rng-process-unknown-entity)))
1031 t)
1032 ((eq type 'cdata-section)
1033 (rng-process-text (+ xmltok-start 9) ; "<![CDATA["
1034 (- (point) 3) ; "]]>"
1035 'maybe)
1036 t)
1037 ((eq type 'partial-start-tag)
1038 (rng-process-start-tag 'partial-start-tag)
1039 t)
1040 ((eq type 'partial-empty-element)
1041 (rng-process-start-tag 'empty-element)
1042 t)
1043 ((eq type 'partial-end-tag)
1044 (rng-process-end-tag 'partial)
1045 t)
1046 (t type))))
1047 (if limit
1048 (< (point) limit)
1049 continue))))
1050 (and type t)))
1051
1052(defun rng-process-start-tag (tag-type)
1053 "TAG-TYPE is `start-tag' for a start-tag, `empty-element' for
1054an empty element. partial-empty-element should be passed
1055as empty-element."
1056 (and rng-collecting-text (rng-flush-text))
1057 (setq rng-collecting-text nil)
1058 (setq rng-pending-contents nil)
1059 (rng-process-namespaces)
1060 (let ((tag (rng-process-tag-name)))
1061 (rng-process-attributes)
1062 ;; set the state appropriately
1063 (cond ((eq tag-type 'empty-element)
1064 (rng-process-start-tag-close)
1065 ;; deal with missing content with empty element
1066 (when (not (rng-match-empty-content))
1067 (rng-match-after)
1068 (rng-mark-start-tag-close "Empty content not allowed"))
1069 (nxml-ns-pop-state))
1070 ((eq tag-type 'start-tag)
1071 (rng-process-start-tag-close)
1072 (setq rng-collecting-text (rng-match-text-typed-p))
1073 (rng-push-tag tag))
1074 ((eq tag-type 'partial-start-tag)
1075 (rng-process-start-tag-close)
1076 (rng-match-after)
1077 (nxml-ns-pop-state)))))
1078
1079(defun rng-process-namespaces ()
1080 (let ((nsatts xmltok-namespace-attributes)
1081 prefixes)
1082 (nxml-ns-push-state)
1083 (while nsatts
1084 (let* ((att (car nsatts))
1085 (value (xmltok-attribute-value att)))
1086 (when value
1087 (let ((ns (nxml-make-namespace value))
1088 (prefix (and (xmltok-attribute-prefix att)
1089 (xmltok-attribute-local-name att))))
1090 (cond ((member prefix prefixes)
1091 (rng-mark-invalid "Duplicate namespace declaration"
1092 (xmltok-attribute-name-start att)
1093 (xmltok-attribute-name-end att)))
1094 ((not prefix)
1095 (nxml-ns-set-default ns))
1096 (ns
1097 (nxml-ns-set-prefix prefix ns))
1098 (t
1099 ;; cannot have xmlns:foo=""
1100 (rng-mark-invalid "Namespace prefix cannot be undeclared"
1101 (1- (xmltok-attribute-value-start att))
1102 (1+ (xmltok-attribute-value-end att)))))
1103 (setq prefixes (cons prefix prefixes)))))
1104 (setq nsatts (cdr nsatts)))))
1105
1106(defun rng-process-tag-name ()
1107 (let* ((prefix (xmltok-start-tag-prefix))
1108 (local-name (xmltok-start-tag-local-name))
1109 (name
1110 (if prefix
1111 (let ((ns (nxml-ns-get-prefix prefix)))
1112 (cond (ns (cons ns local-name))
1113 ((and (setq ns
1114 (rng-match-infer-start-tag-namespace
1115 local-name))
1116 (rng-match-start-tag-open (cons ns local-name)))
1117 (nxml-ns-set-prefix prefix ns)
1118 (rng-mark-start-tag-close "Missing xmlns:%s=\"%s\""
1119 prefix
1120 (nxml-namespace-name ns))
1121 nil)
1122 (t
1123 (rng-recover-bad-element-prefix)
1124 nil)))
1125 (cons (nxml-ns-get-default) local-name))))
1126 (when (and name
1127 (not (rng-match-start-tag-open name)))
1128 (unless (and (not (car name))
1129 (let ((ns (rng-match-infer-start-tag-namespace (cdr name))))
1130 (and ns
1131 (rng-match-start-tag-open (cons ns local-name))
1132 (progn
1133 (nxml-ns-set-default ns)
1134 ;; XXX need to check we don't have xmlns=""
1135 (rng-mark-start-tag-close "Missing xmlns=\"%s\""
1136 (nxml-namespace-name ns))
1137 t))))
1138 (rng-recover-start-tag-open name)))
1139 (cons prefix local-name)))
1140
1141(defun rng-process-attributes ()
1142 (let ((atts xmltok-attributes)
1143 names)
1144 (while atts
1145 (let* ((att (car atts))
1146 (prefix (xmltok-attribute-prefix att))
1147 (local-name (xmltok-attribute-local-name att))
1148 (name
1149 (if prefix
1150 (let ((ns (nxml-ns-get-prefix prefix)))
1151 (and ns
1152 (cons ns local-name)))
1153 (cons nil local-name))))
1154 (cond ((not name)
1155 (rng-recover-bad-attribute-prefix att))
1156 ((member name names)
1157 (rng-recover-duplicate-attribute-name att))
1158 ((not (rng-match-attribute-name name))
1159 (rng-recover-attribute-name att))
1160 ((rng-match-text-typed-p)
1161 (let ((value (xmltok-attribute-value att)))
1162 (if value
1163 (or (rng-match-attribute-value value)
1164 (rng-recover-attribute-value att))
1165 (rng-match-after))))
1166 (t (or (rng-match-end-tag)
1167 (error "Internal error:\
1168 invalid on untyped attribute value"))))
1169 (setq names (cons name names)))
1170 (setq atts (cdr atts)))))
1171
1172(defun rng-process-start-tag-close ()
1173 ;; deal with missing attributes
1174 (unless (rng-match-start-tag-close)
1175 (rng-mark-start-tag-close (rng-missing-attributes-message))
1176 (rng-match-ignore-attributes)))
1177
1178(defun rng-mark-start-tag-close (&rest args)
1179 (when (not (eq xmltok-type 'partial-start-tag))
1180 (rng-mark-invalid (apply 'format args)
1181 (- (point)
1182 (if (eq xmltok-type 'empty-element)
1183 2
1184 1))
1185 (point))))
1186
1187(defun rng-recover-bad-element-prefix ()
1188 (rng-mark-invalid "Prefix not declared"
1189 (1+ xmltok-start)
1190 xmltok-name-colon)
1191 (rng-match-unknown-start-tag-open))
1192
1193(defun rng-recover-bad-attribute-prefix (att)
1194 (rng-mark-invalid "Prefix not declared"
1195 (xmltok-attribute-name-start att)
1196 (xmltok-attribute-name-colon att)))
1197
1198(defun rng-recover-duplicate-attribute-name (att)
1199 (rng-mark-invalid "Duplicate attribute"
1200 (xmltok-attribute-name-start att)
1201 (xmltok-attribute-name-end att)))
1202
1203(defun rng-recover-start-tag-open (name)
1204 (let ((required (rng-match-required-element-name)))
1205 (cond ((and required
1206 (rng-match-start-tag-open required)
1207 (rng-match-after)
1208 (rng-match-start-tag-open name))
1209 (rng-mark-invalid (concat "Missing element "
1210 (rng-quote-string
1211 (rng-name-to-string required)))
1212 xmltok-start
1213 (1+ xmltok-start)))
1214 ((and (rng-match-optionalize-elements)
1215 (rng-match-start-tag-open name))
1216 (rng-mark-invalid "Required elements missing"
1217 xmltok-start
1218 (1+ xmltok-start)))
1219 ((rng-match-out-of-context-start-tag-open name)
1220 (rng-mark-invalid "Element not allowed in this context"
1221 (1+ xmltok-start)
1222 xmltok-name-end))
1223 (t
1224 (rng-match-unknown-start-tag-open)
1225 (rng-mark-invalid "Unknown element"
1226 (1+ xmltok-start)
1227 xmltok-name-end)))))
1228
1229(defun rng-recover-attribute-value (att)
1230 (let ((start (xmltok-attribute-value-start att))
1231 (end (xmltok-attribute-value-end att)))
1232 (if (= start end)
1233 (rng-mark-invalid "Empty attribute value invalid" start (1+ end))
1234 (rng-mark-invalid "Attribute value invalid" start end)))
1235 (rng-match-after))
1236
1237(defun rng-recover-attribute-name (att)
1238 (rng-mark-invalid "Attribute not allowed"
1239 (xmltok-attribute-name-start att)
1240 (xmltok-attribute-name-end att)))
1241
1242(defun rng-missing-attributes-message ()
1243 (let ((required-attributes
1244 (rng-match-required-attribute-names)))
1245 (cond ((not required-attributes)
1246 "Required attributes missing")
1247 ((not (cdr required-attributes))
1248 (concat "Missing attribute "
1249 (rng-quote-string
1250 (rng-name-to-string (car required-attributes) t))))
1251 (t
1252 (concat "Missing attributes "
1253 (mapconcat (lambda (nm)
1254 (rng-quote-string
1255 (rng-name-to-string nm t)))
1256 required-attributes
1257 ", "))))))
1258
1259(defun rng-process-end-tag (&optional partial)
1260 (cond ((not rng-open-elements)
1261 (rng-mark-not-well-formed "Extra end-tag"
1262 xmltok-start
1263 (point)))
1264 ((or partial
1265 (equal (cons (xmltok-end-tag-prefix)
1266 (xmltok-end-tag-local-name))
1267 (car rng-open-elements)))
1268 (rng-end-element))
1269 (t (rng-recover-mismatched-end-tag))))
1270
1271(defun rng-end-element ()
1272 (if rng-collecting-text
1273 (let ((contents (rng-contents-string)))
1274 (cond ((not contents) (rng-match-after))
1275 ((not (rng-match-element-value contents))
1276 (let* ((region (rng-contents-region)))
1277 (if (not region)
1278 (rng-mark-invalid "Empty content not allowed"
1279 xmltok-start
1280 (+ xmltok-start 2))
1281 (rng-mark-invalid "Invalid data"
1282 (car region)
1283 (cdr region))))
1284 (rng-match-after)))
1285 (setq rng-collecting-text nil)
1286 (setq rng-pending-contents nil))
1287 (unless (rng-match-end-tag)
1288 (rng-mark-invalid (rng-missing-element-message)
1289 xmltok-start
1290 (+ xmltok-start 2))
1291 (rng-match-after)))
1292 (nxml-ns-pop-state)
1293 (when (eq (car rng-open-elements) t)
1294 (rng-pop-tag))
1295 (rng-pop-tag))
1296
1297(defun rng-missing-element-message ()
1298 (let ((element (rng-match-required-element-name)))
1299 (if element
1300 (concat "Missing element "
1301 (rng-quote-string (rng-name-to-string element)))
1302 "Required child elements missing")))
1303
1304(defun rng-recover-mismatched-end-tag ()
1305 (let* ((name (cons (xmltok-end-tag-prefix)
1306 (xmltok-end-tag-local-name))))
1307 (cond ((member name (cdr rng-open-elements))
1308 (let* ((suppress-error (eq (car rng-open-elements) t))
1309 missing top)
1310 (while (progn
1311 (setq top (car rng-open-elements))
1312 (rng-pop-tag)
1313 (unless (eq top t)
1314 (setq missing (cons top missing))
1315 (nxml-ns-pop-state)
1316 (rng-match-after))
1317 (not (equal top name))))
1318 (unless suppress-error
1319 (rng-mark-missing-end-tags (cdr missing)))))
1320 ((rng-match-empty-before-p)
1321 (rng-mark-mismatched-end-tag)
1322 (rng-end-element))
1323 (t (rng-mark-mismatched-end-tag)
1324 (setq rng-open-elements
1325 (cons t rng-open-elements))))))
1326
1327(defun rng-mark-missing-end-tags (missing)
1328 (rng-mark-not-well-formed
1329 (format "Missing end-tag%s %s"
1330 (if (null (cdr missing)) "" "s")
1331 (mapconcat (lambda (name)
1332 (rng-quote-string
1333 (if (car name)
1334 (concat (car name)
1335 ":"
1336 (cdr name))
1337 (cdr name))))
1338 missing
1339 ", "))
1340 xmltok-start
1341 (+ xmltok-start 2)))
1342
1343(defun rng-mark-mismatched-end-tag ()
1344 (rng-mark-not-well-formed "Mismatched end-tag"
1345 (+ xmltok-start 2)
1346 xmltok-name-end))
1347
1348(defun rng-push-tag (prefix-local-name)
1349 (setq rng-open-elements
1350 (cons prefix-local-name rng-open-elements)))
1351
1352(defun rng-pop-tag ()
1353 (setq rng-open-elements (cdr rng-open-elements)))
1354
1355(defun rng-contents-string ()
1356 (let ((contents rng-pending-contents))
1357 (cond ((not contents) "")
1358 ((memq nil contents) nil)
1359 ((not (cdr contents))
1360 (rng-segment-string (car contents)))
1361 (t (apply 'concat
1362 (nreverse (mapcar 'rng-segment-string
1363 contents)))))))
1364
1365(defun rng-segment-string (segment)
1366 (or (car segment)
1367 (apply 'buffer-substring-no-properties
1368 (cdr segment))))
1369
1370(defun rng-segment-blank-p (segment)
1371 (if (car segment)
1372 (rng-blank-p (car segment))
1373 (apply 'rng-region-blank-p
1374 (cdr segment))))
1375
1376(defun rng-contents-region ()
1377 (if (null rng-pending-contents)
1378 nil
1379 (let* ((contents rng-pending-contents)
1380 (head (cdar contents))
1381 (start (car head))
1382 (end (cadr head)))
1383 (while (setq contents (cdr contents))
1384 (setq start (car (cdar contents))))
1385 (cons start end))))
1386
1387(defun rng-process-text (start end whitespace &optional value)
1388 "Process characters between position START and END as text.
1389END nil means point. WHITESPACE t means known to be whitespace, nil
1390means known not to be, anything else means unknown whether whitespace
1391or not. END must not be nil if WHITESPACE is neither t nor nil.
1392VALUE is a string or nil; nil means the value is equal to the
1393string between START and END."
1394 (cond (rng-collecting-text
1395 (setq rng-pending-contents (cons (list value start (or end (point)))
1396 rng-pending-contents)))
1397 ((not (or (and whitespace
1398 (or (eq whitespace t)
1399 (if value
1400 (rng-blank-p value)
1401 (rng-region-blank-p start end))))
1402 (rng-match-mixed-text)))
1403 (rng-mark-invalid "Text not allowed" start (or end (point))))))
1404
1405(defun rng-process-unknown-char ()
1406 (when rng-collecting-text
1407 (setq rng-pending-contents
1408 (cons nil rng-pending-contents))))
1409
1410(defun rng-process-unknown-entity ()
1411 (rng-process-unknown-char)
1412 (rng-match-optionalize-elements))
1413
1414(defun rng-region-blank-p (beg end)
1415 (save-excursion
1416 (goto-char beg)
1417 (= (skip-chars-forward " \n\r\t" end)
1418 (- end beg))))
1419
1420(defun rng-flush-text ()
1421 (while rng-pending-contents
1422 (let ((segment (car rng-pending-contents)))
1423 (unless (or (rng-segment-blank-p segment)
1424 (rng-match-mixed-text))
1425 (let ((region (cdr segment)))
1426 (rng-mark-invalid "In this context text cannot be mixed with elements"
1427 (car region)
1428 (cadr region)))))
1429 (setq rng-pending-contents (cdr rng-pending-contents))))
1430
1431(defun rng-process-end-document ()
1432 ;; this is necessary to clear empty overlays at (point-max)
1433 (rng-clear-overlays (point) (point))
1434 (let ((start (save-excursion
1435 (skip-chars-backward " \t\r\n")
1436 (point))))
1437 (cond (rng-open-elements
1438 (unless (eq (car rng-open-elements) t)
1439 (rng-mark-not-well-formed "Missing end-tag"
1440 start
1441 (point))))
1442 ((not (rng-match-nullable-p))
1443 (rng-mark-not-well-formed "No document element"
1444 start
1445 (point))))))
1446
1447(defun rng-process-encoding-name (beg end)
1448 (unless (let ((charset (buffer-substring-no-properties beg end)))
1449 (or (nxml-mime-charset-coding-system charset)
1450 (string= (downcase charset) "utf-16")))
1451 (rng-mark-not-well-formed "Unsupported encoding" beg end)))
1452
1453(defun rng-name-to-string (name &optional attributep)
1454 (let ((ns (car name))
1455 (local-name (cdr name)))
1456 (if (or (not ns)
1457 (and (not attributep)
1458 (eq (nxml-ns-get-default) ns)))
1459 local-name
1460 (let ((prefix (nxml-ns-prefix-for ns)))
1461 (if prefix
1462 (concat prefix ":" local-name)
1463 (concat "{" (symbol-name ns) "}" local-name))))))
1464
1465(provide 'rng-valid)
1466
1467;;; rng-valid.el ends here
diff --git a/lisp/nxml/rng-xsd.el b/lisp/nxml/rng-xsd.el
new file mode 100644
index 00000000000..65091ef8795
--- /dev/null
+++ b/lisp/nxml/rng-xsd.el
@@ -0,0 +1,858 @@
1;;; rng-xsd.el --- W3C XML Schema datatypes library for RELAX NG
2
3;; Copyright (C) 2003 Free Software Foundation, Inc.
4
5;; Author: James Clark
6;; Keywords: XML, RelaxNG
7
8;; This program is free software; you can redistribute it and/or
9;; modify it under the terms of the GNU General Public License as
10;; published by the Free Software Foundation; either version 2 of
11;; the License, or (at your option) any later version.
12
13;; This program is distributed in the hope that it will be
14;; useful, but WITHOUT ANY WARRANTY; without even the implied
15;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16;; PURPOSE. See the GNU General Public License for more details.
17
18;; You should have received a copy of the GNU General Public
19;; License along with this program; if not, write to the Free
20;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21;; MA 02111-1307 USA
22
23;;; Commentary:
24
25;; The main entry point is `rng-xsd-compile'. The validator
26;; knows to use this for the datatype library with URI
27;; http://www.w3.org/2001/XMLSchema-datatypes because it
28;; is the value of the rng-dt-compile property on that URI
29;; as a symbol.
30;;
31;; W3C XML Schema Datatypes are specified by
32;; http://www.w3.org/TR/xmlschema-2/
33;; Guidelines for using them with RELAX NG are described in
34;; http://relaxng.org/xsd.html
35
36;;; Code:
37
38(require 'rng-dt)
39(require 'rng-util)
40(require 'xsd-regexp)
41
42;;;###autoload
43(put 'http://www.w3.org/2001/XMLSchema-datatypes
44 'rng-dt-compile
45 'rng-xsd-compile)
46
47;;;###autoload
48(defun rng-xsd-compile (name params)
49 "Provides W3C XML Schema as a RELAX NG datatypes library. NAME is a
50symbol giving the local name of the datatype. PARAMS is a list of
51pairs (PARAM-NAME . PARAM-VALUE) where PARAM-NAME is a symbol giving
52the name of the parameter and PARAM-VALUE is a string giving its
53value. If NAME or PARAMS are invalid, it calls rng-dt-error passing
54it arguments in the same style as format; the value from rng-dt-error
55will be returned. Otherwise, it returns a list. The first member of
56the list is t if any string is a legal value for the datatype and nil
57otherwise. The second argument is a symbol; this symbol will be
58called as a function passing it a string followed by the remaining
59members of the list. The function must return an object representing
60the value of the datatype that was represented by the string, or nil
61if the string is not a representation of any value. The object
62returned can be any convenient non-nil value, provided that, if two
63strings represent the same value, the returned objects must be equal."
64 (let ((convert (get name 'rng-xsd-convert)))
65 (if (not convert)
66 (rng-dt-error "There is no XSD datatype named %s" name)
67 (rng-xsd-compile1 name params convert))))
68
69;;; Parameters
70
71(defun rng-xsd-compile1 (name params convert)
72 (if (null params)
73 (cons (equal convert '(identity))
74 (cond ((eq name 'string) convert)
75 ((eq name 'normalizedString)
76 (cons 'rng-xsd-replace-space convert))
77 ((and (not (eq name 'string))
78 (or (memq 'identity convert)
79 (memq 'rng-xsd-convert-any-uri convert)
80 (memq 'rng-xsd-check-pattern convert)))
81 (cons 'rng-xsd-collapse-space convert))
82 (t convert)))
83 (let* ((param (car params))
84 (param-name (car param))
85 (param-value (cdr param)))
86 (cond ((memq param-name
87 '(minExclusive maxExclusive minInclusive maxInclusive))
88 (let ((limit (apply (car convert)
89 (cons param-value
90 (cdr convert))))
91 (less-than-fun (get name 'rng-xsd-less-than)))
92 (cond ((not limit)
93 (rng-dt-error "Minimum value %s is not valid"
94 param-value))
95 ((not less-than-fun)
96 (rng-dt-error "Values of type %s are not ordered"
97 param-name))
98 (t
99 (rng-xsd-compile1 name
100 (cdr params)
101 (cons (get param-name
102 'rng-xsd-check)
103 (cons less-than-fun
104 (cons limit convert))))))))
105 ((memq param-name '(length minLength maxLength))
106 (let ((limit (rng-xsd-string-to-non-negative-integer param-value))
107 (length-fun (get name 'rng-xsd-length)))
108 (cond ((not limit)
109 (rng-dt-error "Length %s is not valid" param-value))
110 ((not length-fun)
111 (rng-dt-error "Values of type %s do not have a length"
112 param-name))
113 (t
114 (rng-xsd-compile1 name
115 (cdr params)
116 (cons (get param-name
117 'rng-xsd-check)
118 (cons length-fun
119 (cons limit convert))))))))
120 ((memq param-name '(fractionDigits totalDigits))
121 (let ((n (rng-xsd-string-to-non-negative-integer param-value)))
122 (cond ((not n)
123 (rng-dt-error "Number of digits %s is not valid"
124 param-value))
125 (t
126 (rng-xsd-compile1 name
127 (cdr params)
128 (cons (get param-name
129 'rng-xsd-check)
130 (cons n convert)))))))
131 ((eq param-name 'pattern)
132 (condition-case err
133 (rng-xsd-compile1 name
134 (cdr params)
135 (cons 'rng-xsd-check-pattern
136 (cons (concat
137 "\\`"
138 (xsdre-translate param-value)
139 "\\'")
140 convert)))
141 (xsdre-invalid-regexp
142 (rng-dt-error "Invalid regular expression (%s)"
143 (nth 1 err)))))
144 ((memq param-name '(enumeration whiteSpace))
145 (rng-dt-error "Facet %s cannot be used in RELAX NG" param-name))
146 (t (rng-dt-error "Unknown facet %s" param-name))))))
147
148(defun rng-xsd-string-to-non-negative-integer (str)
149 (and (rng-xsd-convert-integer str)
150 (let ((n (string-to-number str)))
151 (and (integerp n)
152 (>= n 0)
153 n))))
154
155(defun rng-xsd-collapse-space (str convert &rest args)
156 (apply convert (cons (mapconcat 'identity (split-string str "[ \t\n\r]+")
157 " ")
158 args)))
159
160(defun rng-xsd-replace-space (str convert &rest args)
161 (apply convert
162 (cons (let ((i 0)
163 copied)
164 (while (and (setq i (string-match "[\r\n\t]" str i))
165 (or copied (setq copied (copy-sequence str)))
166 (aset copied i 32)
167 (setq i (1+ i))))
168 (or copied str))
169 args)))
170
171(put 'minExclusive 'rng-xsd-check 'rng-xsd-check-min-exclusive)
172(put 'minInclusive 'rng-xsd-check 'rng-xsd-check-min-inclusive)
173(put 'maxExclusive 'rng-xsd-check 'rng-xsd-check-max-exclusive)
174(put 'maxInclusive 'rng-xsd-check 'rng-xsd-check-max-inclusive)
175(put 'length 'rng-xsd-check 'rng-xsd-check-length)
176(put 'minLength 'rng-xsd-check 'rng-xsd-check-min-length)
177(put 'maxLength 'rng-xsd-check 'rng-xsd-check-max-length)
178(put 'fractionDigits 'rng-xsd-check 'rng-xsd-check-fraction-digits)
179(put 'totalDigits 'rng-xsd-check 'rng-xsd-check-total-digits)
180
181(defun rng-xsd-check-min-exclusive (str less-than-fun limit convert &rest args)
182 (let ((obj (apply convert (cons str args))))
183 (and obj
184 (funcall less-than-fun limit obj)
185 obj)))
186
187(defun rng-xsd-check-min-inclusive (str less-than-fun limit convert &rest args)
188 (let ((obj (apply convert (cons str args))))
189 (and obj
190 (or (funcall less-than-fun limit obj)
191 (equal limit obj))
192 obj)))
193
194(defun rng-xsd-check-max-exclusive (str less-than-fun limit convert &rest args)
195 (let ((obj (apply convert (cons str args))))
196 (and obj
197 (funcall less-than-fun obj limit)
198 obj)))
199
200(defun rng-xsd-check-max-inclusive (str less-than-fun limit convert &rest args)
201 (let ((obj (apply convert (cons str args))))
202 (and obj
203 (or (funcall less-than-fun obj limit)
204 (equal obj limit))
205 obj)))
206
207(defun rng-xsd-check-min-length (str length-fun limit convert &rest args)
208 (let ((obj (apply convert (cons str args))))
209 (and obj
210 (>= (funcall length-fun obj) limit)
211 obj)))
212
213(defun rng-xsd-check-max-length (str length-fun limit convert &rest args)
214 (let ((obj (apply convert (cons str args))))
215 (and obj
216 (<= (funcall length-fun obj) limit)
217 obj)))
218
219(defun rng-xsd-check-length (str length-fun len convert &rest args)
220 (let ((obj (apply convert (cons str args))))
221 (and obj
222 (= (funcall length-fun obj) len)
223 obj)))
224
225(defun rng-xsd-check-fraction-digits (str n convert &rest args)
226 (let ((obj (apply convert (cons str args))))
227 (and obj
228 (<= (length (aref obj 2)) n)
229 obj)))
230
231(defun rng-xsd-check-total-digits (str n convert &rest args)
232 (let ((obj (apply convert (cons str args))))
233 (and obj
234 (<= (+ (length (aref obj 1))
235 (length (aref obj 2)))
236 n)
237 obj)))
238
239(defun rng-xsd-check-pattern (str regexp convert &rest args)
240 (and (string-match regexp str)
241 (apply convert (cons str args))))
242
243
244(defun rng-xsd-convert-boolean (string)
245 (and (string-match "\\`[ \t\n\r]*\\(?:\\(true\\|1\\)\\|false\\|0\\)[ \t\n\r]*\\'" string)
246 (if (match-beginning 1) 'true 'false)))
247
248(defun rng-xsd-convert-decimal (string)
249 "Convert a string representing a decimal to an object representing
250its values. A decimal value is represented by a vector [SIGN
251INTEGER-DIGITS FRACTION-DIGITS] where SIGN is 1 or -1, INTEGER-DIGITS
252is a string containing zero or more digits, with no leading zero, and
253FRACTION-DIGITS is a string containing zero or more digits with no
254trailing digits. For example, -0021.0430 would be represented by [-1
255\"21\" \"043\"]."
256 (and (string-match "\\`[ \t\n\r]*\\([-+]\\)?\\(0*\\([1-9][0-9]*\\)?\\(\\.\\([0-9]*[1-9]\\)?0*\\)?\\)[ \t\n\r]*\\'" string)
257 (let ((digits (match-string 2 string)))
258 (and (not (string= digits "."))
259 (not (string= digits ""))))
260 (let ((integer-digits (match-string 3 string)))
261 (vector (if (and (equal (match-string 1 string) "-")
262 ;; Normalize -0 to 0
263 integer-digits)
264 -1
265 1)
266 (or integer-digits "")
267 (or (match-string 5 string) "")))))
268
269(defun rng-xsd-convert-integer (string)
270 (and (string-match "\\`[ \t\n\r]*\\([-+]\\)?\\(?:0*\\([1-9][0-9]*\\)\\|0+\\)[ \t\n\r]*\\'" string)
271 (let ((integer-digits (match-string 2 string)))
272 (vector (if (and (equal (match-string 1 string) "-")
273 ;; Normalize -0 to 0
274 integer-digits)
275 -1
276 1)
277 (or integer-digits "")
278 ""))))
279
280(defun rng-xsd-decimal< (n1 n2)
281 (< (rng-xsd-compare-decimal n1 n2) 0))
282
283(defun rng-xsd-compare-decimal (n1 n2)
284 "Return a < 0, 0, > 0 according as n1 < n2, n1 = n2 or n1 > n2."
285 (let* ((sign1 (aref n1 0))
286 (sign2 (aref n2 0))
287 (sign (- sign1 sign2)))
288 (if (= sign 0)
289 (* sign1
290 (let* ((int1 (aref n1 1))
291 (int2 (aref n2 1))
292 (len1 (length int1))
293 (len2 (length int2))
294 (lencmp (- len1 len2)))
295 (if (eq lencmp 0)
296 (if (string= int1 int2)
297 (rng-xsd-strcmp (aref n1 2) (aref n2 2))
298 (rng-xsd-strcmp int1 int2))
299 lencmp)))
300 sign)))
301
302(defconst rng-xsd-float-regexp
303 (concat "\\`[ \r\n\t]*\\(?:"
304 "\\("
305 "[-+]?\\(?:[0-9]+\\(?:\\.[0-9]*\\)?\\|\\.[0-9]+\\)"
306 "\\(?:[eE][-+]?[0-9]+\\)?"
307 "\\)"
308 "\\|\\(INF\\)"
309 "\\|\\(-INF\\)"
310 "\\|\\(NaN\\)"
311 "\\)[ \r\n\t]*\\'"))
312
313(defun rng-xsd-convert-float (string)
314 (cond ((not (string-match rng-xsd-float-regexp string)) nil)
315 ((match-beginning 1)
316 (float (string-to-number (match-string 1 string))))
317 ((match-beginning 2) 1.0e+INF)
318 ((match-beginning 3) -1.0e+INF)
319 ;; Don't use a NaN float because we want NaN to be equal to NaN
320 ((match-beginning 4) 'NaN)))
321
322(defun rng-xsd-float< (f1 f2)
323 (and (not (eq f1 'NaN))
324 (not (eq f2 'NaN))
325 (< f1 f2)))
326
327(defun rng-xsd-convert-token (string regexp)
328 (and (string-match regexp string)
329 (match-string 1 string)))
330
331(defun rng-xsd-convert-hex-binary (string)
332 (and (string-match "\\`[ \r\n\t]*\\(\\(?:[0-9A-Fa-f][0-9A-Fa-f]\\)*\\)[ \r\n\t]*\\'"
333 string)
334 (downcase (match-string 1 string))))
335
336(defun rng-xsd-hex-binary-length (obj)
337 (/ (length obj) 2))
338
339(defconst rng-xsd-base64-binary-regexp
340 (let ((S "[ \t\r\n]*")
341 (B04 "[AQgw]")
342 (B16 "[AEIMQUYcgkosw048]")
343 (B64 "[A-Za-z0-9+/]"))
344 (concat "\\`" S "\\(?:\\(?:" B64 S "\\)\\{4\\}\\)*"
345 "\\(?:" B64 S B64 S B16 S "=" S
346 "\\|" B64 S B04 S "=" S "=" S "\\)?\\'")))
347
348(defun rng-xsd-convert-base64-binary (string)
349 (and (string-match rng-xsd-base64-binary-regexp string)
350 (replace-regexp-in-string "[ \t\r\n]+" "" string t t)))
351
352(defun rng-xsd-base64-binary-length (obj)
353 (let ((n (* (/ (length obj) 4) 3)))
354 (if (and (> n 0)
355 (string= (substring obj -1) "="))
356 (- n (if (string= (substring obj -2) "==")
357 2
358 1))
359 n)))
360
361(defun rng-xsd-convert-any-uri (string)
362 (and (string-match "\\`\\(?:[^%]\\|%[0-9a-fA-F][0-9a-fA-F]\\)?*\\'" string)
363 (string-match "\\`[^#]*\\(?:#[^#]*\\)?\\'" string)
364 (string-match "\\`\\(?:[a-zA-Z][-+.A-Za-z0-9]*:.+\\|[^:]*\\(?:[#/?].*\\)?\\)\\'" string)
365 string))
366
367(defun rng-xsd-make-date-time-regexp (template)
368 "Returns a regular expression matching a ISO 8601 date/time. The
369template is a string with Y standing for years field, M standing for
370months, D standing for day of month, T standing for a literal T, t
371standing for time and - standing for a literal hyphen. A time zone is
372always allowed at the end. Regardless of the fields appearing in the
373template, the regular expression will have twelve groups matching the
374year sign, year, month, day of month, hours, minutes, integer seconds,
375fractional seconds (including leading period), time zone, time zone
376sign, time zone hours, time zone minutes."
377 (let ((i 0)
378 (len (length template))
379 (parts nil)
380 first last c)
381 (while (< i len)
382 (setq c (aref template i))
383 (setq parts
384 (cons (cond ((eq c ?Y)
385 (setq first 0)
386 (setq last 1)
387 "\\(-\\)?\\(\\(?:[1-9][0-9]*\\)?[0-9]\\{4\\}\\)")
388 ((eq c ?M)
389 (or first
390 (setq first 2))
391 (setq last 2)
392 "\\([0-9][0-9]\\)")
393 ((eq c ?D)
394 (or first
395 (setq first 3))
396 (setq last 3)
397 "\\([0-9][0-9]\\)")
398 ((eq c ?t)
399 (or first
400 (setq first 4))
401 (setq last 7)
402 "\\([0-9][0-9]\\):\\([0-9][0-9]\\):\\([0-9][0-9]\\)\\(\\.[0-9]*\\)?")
403 (t (string c)))
404 parts))
405 (setq i (1+ i)))
406 (while (< last 7)
407 (setq last (1+ last))
408 ;; Add dummy fields that can never much but keep the group
409 ;; numbers uniform.
410 (setq parts (cons "\\(\\'X\\)?" parts)))
411 (setq parts (cons "\\(Z\\|\\([-+]\\)\\([0-9][0-9]\\):\\([0-5][0-9]\\)\\)?[ \t\n\r]*\\'"
412 parts))
413 (setq parts (cons "\\`[ \t\n\r]*" (nreverse parts)))
414 (while (> first 0)
415 (setq first (1- first))
416 (setq parts (cons "\\(X\\)?" parts)))
417 (apply 'concat parts)))
418
419(defconst rng-xsd-seconds-per-day (* 24 60 60))
420(defconst rng-xsd-days-in-month [31 28 31 30 31 30 31 31 30 31 30 31])
421
422(defun rng-xsd-days-in-month (year month)
423 (if (and (= month 2) (rng-xsd-leap-year-p year))
424 29
425 (aref rng-xsd-days-in-month (1- month))))
426
427(defconst rng-xsd-months-to-days
428 (let ((v (make-vector 12 nil))
429 (total 0)
430 (i 0))
431 (while (< i 12)
432 (setq total (+ total (aref rng-xsd-days-in-month i)))
433 (aset v i total)
434 (setq i (1+ i)))
435 v))
436
437(defun rng-xsd-convert-date-time (string regexp)
438 "Converts an XML Schema date/time to a list. Returns nil if
439invalid. REGEXP is a regexp for parsing the date time as returned by
440`rng-xsd-make-date-time-regexp'. The list has 4 members (HAS-TIME-ZONE
441DAY SECOND SECOND-FRACTION), where HAS-TIME-ZONE is t or nil depending
442on whether a time zone was specified, DAY is an integer giving a day
443number (with Jan 1 1AD being day 1), SECOND is the second within that
444day, and SECOND-FRACTION is a float giving the fractional part of the
445second."
446 (and (string-match regexp string)
447 (let ((year-sign (match-string 1 string))
448 (year (match-string 2 string))
449 (month (match-string 3 string))
450 (day (match-string 4 string))
451 (hour (match-string 5 string))
452 (minute (match-string 6 string))
453 (second (match-string 7 string))
454 (second-fraction (match-string 8 string))
455 (has-time-zone (match-string 9 string))
456 (time-zone-sign (match-string 10 string))
457 (time-zone-hour (match-string 11 string))
458 (time-zone-minute (match-string 12 string)))
459 (setq year-sign (if year-sign -1 1))
460 (setq year
461 (if year
462 (* year-sign
463 (string-to-number year))
464 2000))
465 (setq month
466 (if month (string-to-number month) 1))
467 (setq day
468 (if day (string-to-number day) 1))
469 (setq hour
470 (if hour (string-to-number hour) 0))
471 (setq minute
472 (if minute (string-to-number minute) 0))
473 (setq second
474 (if second (string-to-number second) 0))
475 (setq second-fraction
476 (if second-fraction
477 (float (string-to-number second-fraction))
478 0.0))
479 (setq has-time-zone (and has-time-zone t))
480 (setq time-zone-sign
481 (if (equal time-zone-sign "-") -1 1))
482 (setq time-zone-hour
483 (if time-zone-hour (string-to-number time-zone-hour) 0))
484 (setq time-zone-minute
485 (if time-zone-minute (string-to-number time-zone-minute) 0))
486 (and (>= month 1)
487 (<= month 12)
488 (>= day 1)
489 (<= day (rng-xsd-days-in-month year month))
490 (<= hour 23)
491 (<= minute 59)
492 (<= second 60) ; leap second
493 (<= time-zone-hour 23)
494 (<= time-zone-minute 59)
495 (cons has-time-zone
496 (rng-xsd-add-seconds
497 (list (rng-xsd-date-to-days year month day)
498 (rng-xsd-time-to-seconds hour minute second)
499 second-fraction)
500 (* (rng-xsd-time-to-seconds time-zone-hour
501 time-zone-minute
502 0)
503 (- time-zone-sign))))))))
504
505(defun rng-xsd-leap-year-p (year)
506 (and (= (% year 4) 0)
507 (or (/= (% year 100) 0)
508 (= (% year 400) 0))))
509
510(defun rng-xsd-time-to-seconds (hour minute second)
511 (+ (* (+ (* hour 60)
512 minute)
513 60)
514 second))
515
516(defconst rng-xsd-max-tz (rng-xsd-time-to-seconds 14 0 0))
517
518(defun rng-xsd-date-time< (dt1 dt2)
519 (cond ((eq (car dt1) (car dt2))
520 (rng-xsd-number-list< (cdr dt1) (cdr dt2)))
521 ((car dt1)
522 (rng-xsd-number-list< (cdr dt1)
523 (rng-xsd-add-seconds (cdr dt2)
524 (- rng-xsd-max-tz))))
525 (t
526 (rng-xsd-number-list< (rng-xsd-add-seconds (cdr dt1)
527 rng-xsd-max-tz)
528 (cdr dt2)))))
529
530(defun rng-xsd-add-seconds (date offset)
531 (let ((day (nth 0 date))
532 (second (+ (nth 1 date) offset))
533 (fraction (nth 2 date)))
534 (cond ((< second 0)
535 (list (1- day)
536 (+ second rng-xsd-seconds-per-day)
537 fraction))
538 ((>= second rng-xsd-seconds-per-day)
539 (list (1+ day)
540 (- second rng-xsd-seconds-per-day)
541 fraction))
542 (t (list day second fraction)))))
543
544(defun rng-xsd-number-list< (numbers1 numbers2)
545 (while (and numbers1 (= (car numbers1) (car numbers2)))
546 (setq numbers1 (cdr numbers1))
547 (setq numbers2 (cdr numbers2)))
548 (and numbers1
549 (< (car numbers1) (car numbers2))))
550
551(defun rng-xsd-date-to-days (year month day)
552 "Return a unique day number where Jan 1 1 AD is day 1"
553 (if (> year 0) ; AD
554 (+ (rng-xsd-days-in-years (- year 1))
555 (rng-xsd-day-number-in-year year month day))
556 (- (+ (- (rng-xsd-days-in-years (- 3 year))
557 (rng-xsd-days-in-years 3))
558 (- (if (rng-xsd-leap-year-p year) 366 365)
559 (rng-xsd-day-number-in-year year month day))))))
560
561(defun rng-xsd-days-in-years (years)
562 "The number of days in YEARS years where the first year is 1AD."
563 (+ (* 365 years)
564 (/ years 4)
565 (- (/ years 100))
566 (/ years 400)))
567
568(defun rng-xsd-day-number-in-year (year month day)
569 (+ (if (= month 1)
570 0
571 (aref rng-xsd-months-to-days (- month 2)))
572 day
573 (if (and (> month 2)
574 (rng-xsd-leap-year-p year))
575 1
576 0)))
577
578(defconst rng-xsd-duration-regexp
579 "\\`[ \t\r\n]*\\(-\\)?P\
580\\([0-9]+Y\\)?\\([0-9]+M\\)?\\([0-9]+D\\)?\
581\\(?:T\\([0-9]+H\\)?\\([0-9]+M\\)?\
582\\(\\([0-9]+\\(?:\\.[0-9]*\\)?\\|\\.[0-9]+\\)S\\)?\\)?\
583[ \t\r\n]*\\'")
584
585
586(defun rng-xsd-convert-duration (string)
587 (and (string-match rng-xsd-duration-regexp string)
588 (let ((last (substring string -1)))
589 (not (or (string= last "P")
590 (string= last "T"))))
591 ;; years months days hours minutes seconds
592 (let ((v (make-vector 6 0))
593 (sign (if (match-beginning 1) -1 1))
594 (i 0))
595 (while (< i 6)
596 (let ((start (match-beginning (+ i 2))))
597 (when start
598 (aset v i (* sign
599 (string-to-number
600 (substring string
601 start
602 (1- (match-end (+ i 2)))))))))
603 (setq i (1+ i)))
604 ;; Force seconds to be float so that equal works properly.
605 (aset v 5 (float (aref v 5)))
606 v)))
607
608(defconst rng-xsd-min-seconds-per-month (* 28 rng-xsd-seconds-per-day))
609
610(defun rng-xsd-duration< (d1 d2)
611 (let* ((months1 (rng-xsd-duration-months d1))
612 (months2 (rng-xsd-duration-months d2))
613 (seconds1 (rng-xsd-duration-seconds d1))
614 (seconds2 (rng-xsd-duration-seconds d2)))
615 (cond ((< months1 months2)
616 (if (< (- seconds1 seconds2) rng-xsd-min-seconds-per-month)
617 t
618 (rng-xsd-months-seconds< months1 seconds1 months2 seconds2)))
619 ((> months1 months2)
620 (if (< (- seconds2 seconds1) rng-xsd-min-seconds-per-month)
621 nil
622 (rng-xsd-months-seconds< months1 seconds1 months2 seconds2)))
623 (t (< seconds1 seconds2)))))
624
625(defconst xsd-duration-reference-dates
626 '((1696 . 9) (1697 . 2) (1903 . 3) (1903 . 7)))
627
628(defun rng-xsd-months-seconds< (months1 seconds1 months2 seconds2)
629 (let ((ret t)
630 (ref-dates xsd-duration-reference-dates))
631 (while (let* ((ref-date (car ref-dates))
632 (ref-year (car ref-date))
633 (ref-month (cdr ref-date)))
634 (unless (< (+ (rng-xsd-month-seconds months1
635 ref-year
636 ref-month)
637 seconds1)
638 (+ (rng-xsd-month-seconds months2
639 ref-year
640 ref-month)
641 seconds2))
642 (setq ret nil))
643 (and ret
644 (setq ref-dates (cdr ref-dates)))))
645 ret))
646
647
648(defun rng-xsd-month-seconds (months ref-year ref-month)
649 "Return the seconds in a number of months starting on a reference date.
650Returns a floating point number."
651 (* (rng-xsd-month-days (abs months) ref-year ref-month)
652 (float rng-xsd-seconds-per-day)
653 (if (< months 0) -1.0 1.0)))
654
655(defconst rng-xsd-years-per-gregorian-cycle 400)
656(defconst rng-xsd-months-per-gregorian-cycle
657 (* rng-xsd-years-per-gregorian-cycle 12))
658(defconst rng-xsd-leap-years-per-gregorian-cycle (- 100 (- 4 1)))
659(defconst rng-xsd-days-per-gregorian-cycle
660 (+ (* 365 rng-xsd-years-per-gregorian-cycle)
661 rng-xsd-leap-years-per-gregorian-cycle))
662
663(defun rng-xsd-month-days (months ref-year ref-month)
664 "Return the days in a number of months starting on a reference date.
665MONTHS must be an integer >= 0."
666 (let ((days 0))
667 (setq months (mod months rng-xsd-months-per-gregorian-cycle))
668 ;; This may be rather slow, but it is highly unlikely
669 ;; ever to be used in real life.
670 (while (> months 0)
671 (setq days
672 (+ (rng-xsd-days-in-month ref-year ref-month)
673 days))
674 (setq ref-month
675 (if (eq ref-month 12)
676 (progn
677 (setq ref-year (1+ ref-year))
678 1)
679 (1+ ref-month)))
680 (setq months (1- months)))
681 (+ (* (/ months rng-xsd-months-per-gregorian-cycle)
682 rng-xsd-days-per-gregorian-cycle)
683 days)))
684
685(defun rng-xsd-duration-months (d)
686 (+ (* (aref d 0) 12)
687 (aref d 1)))
688
689(defun rng-xsd-duration-seconds (d)
690 (+ (* (+ (* (+ (* (aref d 2)
691 24.0)
692 (aref d 3))
693 60.0)
694 (aref d 4))
695 60.0)
696 (aref d 5)))
697
698(defun rng-xsd-convert-qname (string)
699 (and (string-match "\\`[ \r\n\t]*\\([_[:alpha:]][-._[:alnum:]]*\\(:[_[:alpha:]][-._[:alnum:]]*\\)?\\)[ \r\n\t]*\\'" string)
700 (let ((colon (match-beginning 2))
701 (context (apply (car rng-dt-namespace-context-getter)
702 (cdr rng-dt-namespace-context-getter))))
703 (if colon
704 (let* ((prefix (substring string
705 (match-beginning 1)
706 colon))
707 (binding (assoc prefix (cdr context))))
708 (and binding
709 (cons (cdr binding)
710 (substring string
711 (1+ colon)
712 (match-end 1)))))
713 (cons (car context)
714 (match-string 1 string))))))
715
716(defun rng-xsd-convert-list (string convert &rest args)
717 (let* ((tokens (split-string string "[ \t\n\r]+"))
718 (tem tokens))
719 (while tem
720 (let ((obj (apply convert
721 (cons (car tem) args))))
722 (cond (obj
723 (setcar tem obj)
724 (setq tem (cdr tem)))
725 (t
726 (setq tokens nil)
727 (setq tem nil)))))
728 ;; Fortuitously this returns nil if the list is empty
729 ;; which is what we want since the list types
730 ;; have to have one or more members.
731 tokens))
732
733(defun rng-xsd-strcmp (s1 s2)
734 (cond ((string= s1 s2) 0)
735 ((string< s1 s2) -1)
736 (t 1)))
737
738(put 'string 'rng-xsd-convert '(identity))
739(put 'string 'rng-xsd-length 'length)
740(put 'string 'rng-xsd-matches-anything t)
741
742(put 'normalizedString 'rng-xsd-convert '(identity))
743(put 'normalizedString 'rng-xsd-length 'length)
744(put 'normalizedString 'rng-xsd-matches-anything t)
745
746(put 'token 'rng-xsd-convert '(identity))
747(put 'token 'rng-xsd-length 'length)
748(put 'token 'rng-xsd-matches-anything t)
749
750(put 'hexBinary 'rng-xsd-convert '(rng-xsd-convert-hex-binary))
751(put 'hexBinary 'rng-xsd-length 'rng-xsd-hex-binary-length)
752
753(put 'base64Binary 'rng-xsd-convert '(rng-xsd-convert-base64-binary))
754(put 'base64Binary 'rng-xsd-length 'rng-xsd-base64-binary-length)
755
756(put 'boolean 'rng-xsd-convert '(rng-xsd-convert-boolean))
757
758(put 'float 'rng-xsd-convert '(rng-xsd-convert-float))
759(put 'float 'rng-xsd-less-than 'rng-xsd-float<)
760
761(put 'double 'rng-xsd-convert '(rng-xsd-convert-float))
762(put 'double 'rng-xsd-less-than 'rng-xsd-float<)
763
764(put 'decimal 'rng-xsd-convert '(rng-xsd-convert-decimal))
765(put 'decimal 'rng-xsd-less-than 'rng-xsd-decimal<)
766
767(put 'integer 'rng-xsd-convert '(rng-xsd-convert-integer))
768(put 'integer 'rng-xsd-less-than 'rng-xsd-decimal<)
769
770(defun rng-xsd-def-integer-type (name min max)
771 (put name 'rng-xsd-less-than 'rng-xsd-decimal<)
772 (put name
773 'rng-xsd-convert
774 (cdr (rng-xsd-compile 'integer
775 (append (and min `((minInclusive . ,min)))
776 (and max `((maxInclusive . ,max))))))))
777
778(defun rng-xsd-def-token-type (name regexp)
779 (put name 'rng-xsd-convert (list 'rng-xsd-convert-token
780 (concat "\\`[\r\n\t ]*\\("
781 regexp
782 "\\)[\r\n\t ]*\\'")))
783 (put name 'rng-xsd-length 'length))
784
785(rng-xsd-def-token-type 'NMTOKEN "[-.:_[:alnum:]]+")
786(rng-xsd-def-token-type 'Name "[:_[:alpha:]][-.:_[:alnum:]]*")
787(rng-xsd-def-token-type 'NCName "[_[:alpha:]][-._[:alnum:]]*")
788(rng-xsd-def-token-type 'language
789 "[a-zA-Z]\\{1,8\\}\\(?:-[a-zA-Z0-9]\\{1,8\\}\\)*")
790
791(put 'ENTITY 'rng-xsd-convert (get 'NCName 'rng-xsd-convert))
792(put 'ENTITY 'rng-xsd-length 'length)
793(put 'ID 'rng-xsd-convert (get 'NCName 'rng-xsd-convert))
794(put 'ID 'rng-xsd-length 'length)
795(put 'IDREF 'rng-xsd-convert (get 'NCName 'rng-xsd-convert))
796(put 'IDREF 'rng-xsd-length 'length)
797
798(defun rng-xsd-def-list-type (name member-name)
799 (put name 'rng-xsd-convert (cons 'rng-xsd-convert-list
800 (get member-name 'rng-xsd-convert)))
801 (put name 'rng-xsd-length 'length))
802
803(rng-xsd-def-list-type 'NMTOKENS 'NMTOKEN)
804(rng-xsd-def-list-type 'IDREFS 'IDREF)
805(rng-xsd-def-list-type 'ENTITIES 'ENTITY)
806
807(put 'anyURI 'rng-xsd-convert '(rng-xsd-convert-any-uri))
808(put 'anyURI 'rng-xsd-length 'length)
809
810(put 'QName 'rng-xsd-convert '(rng-xsd-convert-qname))
811(put 'NOTATION 'rng-xsd-convert '(rng-xsd-convert-qname))
812
813(defconst rng-xsd-long-max "9223372036854775807")
814(defconst rng-xsd-long-min "-9223372036854775808")
815(defconst rng-xsd-int-max "2147483647")
816(defconst rng-xsd-int-min "-2147483648")
817(defconst rng-xsd-short-max "32767")
818(defconst rng-xsd-short-min "-32768")
819(defconst rng-xsd-byte-max "127")
820(defconst rng-xsd-byte-min "-128")
821(defconst rng-xsd-unsigned-long-max "18446744073709551615")
822(defconst rng-xsd-unsigned-int-max "4294967295")
823(defconst rng-xsd-unsigned-short-max "65535")
824(defconst rng-xsd-unsigned-byte-max "255")
825
826(rng-xsd-def-integer-type 'nonNegativeInteger "0" nil)
827(rng-xsd-def-integer-type 'positiveInteger "1" nil)
828(rng-xsd-def-integer-type 'nonPositiveInteger nil "0")
829(rng-xsd-def-integer-type 'negativeInteger nil "-1")
830(rng-xsd-def-integer-type 'long rng-xsd-long-min rng-xsd-long-max)
831(rng-xsd-def-integer-type 'int rng-xsd-int-min rng-xsd-int-max)
832(rng-xsd-def-integer-type 'short rng-xsd-short-min rng-xsd-short-max)
833(rng-xsd-def-integer-type 'byte rng-xsd-byte-min rng-xsd-byte-max)
834(rng-xsd-def-integer-type 'unsignedLong "0" rng-xsd-unsigned-long-max)
835(rng-xsd-def-integer-type 'unsignedInt "0" rng-xsd-unsigned-int-max)
836(rng-xsd-def-integer-type 'unsignedShort "0" rng-xsd-unsigned-short-max)
837(rng-xsd-def-integer-type 'unsignedByte "0" rng-xsd-unsigned-byte-max)
838
839(defun rng-xsd-def-date-time-type (name template)
840 (put name 'rng-xsd-convert (list 'rng-xsd-convert-date-time
841 (rng-xsd-make-date-time-regexp template)))
842 (put name 'rng-xsd-less-than 'rng-xsd-date-time<))
843
844(rng-xsd-def-date-time-type 'dateTime "Y-M-DTt")
845(rng-xsd-def-date-time-type 'time "t")
846(rng-xsd-def-date-time-type 'date "Y-M-D")
847(rng-xsd-def-date-time-type 'gYearMonth "Y-M")
848(rng-xsd-def-date-time-type 'gYear "Y")
849(rng-xsd-def-date-time-type 'gMonthDay "--M-D")
850(rng-xsd-def-date-time-type 'gDay "---D")
851(rng-xsd-def-date-time-type 'gMonth "--M")
852
853(put 'duration 'rng-xsd-convert '(rng-xsd-convert-duration))
854(put 'duration 'rng-xsd-less-than 'rng-xsd-duration<)
855
856(provide 'rng-xsd)
857
858;;; rng-xsd.el ends here
diff --git a/lisp/nxml/subdirs.el b/lisp/nxml/subdirs.el
new file mode 100644
index 00000000000..4103b568b45
--- /dev/null
+++ b/lisp/nxml/subdirs.el
@@ -0,0 +1,8 @@
1;; -*- no-byte-compile: t -*-
2;; In load-path, after this directory should come
3;; certain of its subdirectories. Here we specify them.
4(normal-top-level-add-to-load-path '("char-name" ))
5;; Local Variables:
6;; version-control: never
7;; no-byte-compile: t
8;; End:
diff --git a/lisp/nxml/test.invalid.xml b/lisp/nxml/test.invalid.xml
new file mode 100644
index 00000000000..bdf6a2cb7ee
--- /dev/null
+++ b/lisp/nxml/test.invalid.xml
@@ -0,0 +1,8 @@
1<html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <title>An invalid document</title>
4 </head>
5 <body>
6 <p>This XHTML document is <span class="#foo">invalid</span>.</p>
7 </body>
8</html>
diff --git a/lisp/nxml/test.valid.xml b/lisp/nxml/test.valid.xml
new file mode 100644
index 00000000000..56a12800faa
--- /dev/null
+++ b/lisp/nxml/test.valid.xml
@@ -0,0 +1,8 @@
1<html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <title>A valid document</title>
4 </head>
5 <body>
6 <p>This is a valid, albeit boring, XHTML document.</p>
7 </body>
8</html>
diff --git a/lisp/nxml/xmltok.el b/lisp/nxml/xmltok.el
new file mode 100644
index 00000000000..ed381cd4cc9
--- /dev/null
+++ b/lisp/nxml/xmltok.el
@@ -0,0 +1,1925 @@
1;;; xmltok.el --- XML tokenization
2
3;; Copyright (C) 2003 Free Software Foundation, Inc.
4
5;; Author: James Clark
6;; Keywords: XML
7
8;; This program is free software; you can redistribute it and/or
9;; modify it under the terms of the GNU General Public License as
10;; published by the Free Software Foundation; either version 2 of
11;; the License, or (at your option) any later version.
12
13;; This program is distributed in the hope that it will be
14;; useful, but WITHOUT ANY WARRANTY; without even the implied
15;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16;; PURPOSE. See the GNU General Public License for more details.
17
18;; You should have received a copy of the GNU General Public
19;; License along with this program; if not, write to the Free
20;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21;; MA 02111-1307 USA
22
23;;; Commentary:
24
25;; This implements an XML 1.0 parser. It also implements the XML
26;; Namespaces Recommendation. It is designed to be conforming, but it
27;; works a bit differently from a normal XML parser. An XML document
28;; consists of the prolog and an instance. The prolog is parsed as a
29;; single unit using `xmltok-forward-prolog'. The instance is
30;; considered as a sequence of tokens, where a token is something like
31;; a start-tag, a comment, a chunk of data or a CDATA section. The
32;; tokenization of the instance is stateless: the tokenization of one
33;; part of the instance does not depend on tokenization of the
34;; preceding part of the instance. This allows the instance to be
35;; parsed incrementally. The main entry point is `xmltok-forward':
36;; this can be called at any point in the instance provided it is
37;; between tokens. The other entry point is `xmltok-forward-special'
38;; which skips over tokens other comments, processing instructions or
39;; CDATA sections (i.e. the constructs in an instance that can contain
40;; less than signs that don't start a token).
41;;
42;; This is a non-validating XML 1.0 processor. It does not resolve
43;; parameter entities (including the external DTD subset) and it does
44;; not resolve external general entities.
45;;
46;; It is non-conformant by design in the following respects.
47;;
48;; 1. It expects the client to detect aspects of well-formedness that
49;; are not internal to a single token, specifically checking that
50;; end-tags match start-tags and that the instance contains exactly
51;; one element.
52;;
53;; 2. It expects the client to detect duplicate attributes. Detection
54;; of duplicate attributes after expansion of namespace prefixes
55;; requires the namespace processing state. Detection of duplicate
56;; attributes before expansion of namespace prefixes does not, but is
57;; redundant given that the client will do detection of duplicate
58;; attributes after expansion of namespace prefixes.
59;;
60;; 3. It allows the client to recover from well-formedness errors.
61;; This is essential for use in applications where the document is
62;; being parsed during the editing process.
63;;
64;; 4. It does not support documents that do not conform to the lexical
65;; requirements of the XML Namespaces Recommendation (e.g. a document
66;; with a colon in an entity name).
67;;
68;; There are also a number of things that have not yet been
69;; implemented that make it non-conformant.
70;;
71;; 1. It does not implement default attributes. ATTLIST declarations
72;; are parsed, but no checking is done on the content of attribute
73;; value literals specifying default attribute values, and default
74;; attribute values are not reported to the client.
75;;
76;; 2. It does not implement internal entities containing elements. If
77;; an internal entity is referenced and parsing its replacement text
78;; yields one or more tags, then it will skip the reference and
79;; report this to the client.
80;;
81;; 3. It does not check the syntax of public identifiers in the DTD.
82;;
83;; 4. It allows some non-ASCII characters in certain situations where
84;; it should not. For example, it only enforces XML 1.0's
85;; restrictions on name characters strictly for ASCII characters. The
86;; problem here is XML's character model is based squarely on Unicode,
87;; whereas Emacs's is not (as of version 21). It is not clear what
88;; the right thing to do is.
89
90;;; Code:
91
92(defvar xmltok-type nil)
93(defvar xmltok-start nil)
94(defvar xmltok-name-colon nil)
95(defvar xmltok-name-end nil)
96(defvar xmltok-replacement nil
97 "String containing replacement for a character or entity reference.")
98
99(defvar xmltok-attributes nil
100 "List containing attributes of last scanned element.
101Each member of the list is a vector representing an attribute, which
102can be accessed using the functions `xmltok-attribute-name-start',
103`xmltok-attribute-name-colon', `xmltok-attribute-name-end',
104`xmltok-attribute-value-start', `xmltok-attribute-value-end',
105`xmltok-attribute-raw-normalized-value', `xmltok-attribute-refs'.")
106
107(defvar xmltok-namespace-attributes nil
108 "List containing namespace declarations of last scanned element.
109List has same format as `xmltok-attributes'.")
110
111(defvar xmltok-dtd nil
112 "Information about the DTD used by `xmltok-forward'.
113`xmltok-forward-prolog' sets this up.
114
115It consists of an alist of general entity names vs definitions. The
116first member of the alist is t if references to entities not in the
117alist are well-formed \(e.g. because there's an external subset that
118wasn't parsed).
119
120Each general entity name is a string. The definition is either nil, a
121symbol, a string, a cons cell. If the definition is nil, then it
122means that it's an internal entity but the result of parsing it is
123unknown. If it is a symbol, then the symbol is either `unparsed',
124meaning the entity is an unparsed entity, `external', meaning the
125entity is or references an external entity, `element', meaning the
126entity includes one or more elements, or `not-well-formed', meaning
127the replacement text is not well-formed. If the definition is a
128string, then the replacement text of the entity is that string; this
129happens only during the parsing of the prolog. If the definition is a
130cons cell \(ER . AR), then ER specifies the string that results from
131referencing the entity in element content and AR is either nil,
132meaning the replacement text included a <, or a string which is the
133normalized attribute value.")
134
135(defvar xmltok-dependent-regions nil
136 "List of descriptors of regions that a parsed token depends on.
137
138A token depends on a region if the region occurs after the token and a
139change in the region may require the token to be reparsed. This only
140happens with markup that is not well-formed. For example, if a <?
141occurs without a matching ?>, then the <? is returned as a
142not-well-formed token. However, this token is dependent on region
143from the end of the token to the end of the buffer: if this ever
144contains ?> then the buffer must be reparsed from the <?.
145
146A region descriptor is a list (FUN START END ARG ...), where FUN is a
147function to be called when the region changes, START and END are
148integers giving the start and end of the region, and ARG... are
149additional arguments to be passed to FUN. FUN will be called with 5
150arguments followed by the additional arguments if any: the position of
151the start of the changed area in the region, the position of the end
152of the changed area in the region, the length of the changed area
153before the change, the position of the start of the region, the
154position of the end of the region. FUN must return non-nil if the
155region needs reparsing. FUN will be called in a save-excursion with
156match-data saved.
157
158`xmltok-forward', `xmltok-forward-special' and `xmltok-forward-prolog'
159may add entries to the beginning of this list, but will not clear it.
160`xmltok-forward' and `xmltok-forward-special' will only add entries
161when returning tokens of type not-well-formed.")
162
163(defvar xmltok-errors nil
164 "List of errors detected by `xmltok-forward' and `xmltok-forward-prolog'.
165When `xmltok-forward' and `xmltok-forward-prolog' detect a
166well-formedness error, they will add an entry to the beginning of this
167list. Each entry is a vector [MESSAGE START END], where MESSAGE is a
168string giving the error message and START and END are integers
169indicating the position of the error.")
170
171(defmacro xmltok-save (&rest body)
172 `(let (xmltok-type
173 xmltok-start
174 xmltok-name-colon
175 xmltok-name-end
176 xmltok-replacement
177 xmltok-attributes
178 xmltok-namespace-attributes
179 xmltok-dependent-regions
180 xmltok-errors)
181 ,@body))
182
183(put 'xmltok-save 'lisp-indent-function 0)
184(def-edebug-spec xmltok-save t)
185
186(defsubst xmltok-attribute-name-start (att)
187 (aref att 0))
188
189(defsubst xmltok-attribute-name-colon (att)
190 (aref att 1))
191
192(defsubst xmltok-attribute-name-end (att)
193 (aref att 2))
194
195(defsubst xmltok-attribute-value-start (att)
196 (aref att 3))
197
198(defsubst xmltok-attribute-value-end (att)
199 (aref att 4))
200
201(defsubst xmltok-attribute-raw-normalized-value (att)
202 "Return an object representing the normalized value of ATT.
203This can t indicating that the normalized value is the same as the
204buffer substring from the start to the end of the value or nil
205indicating that the value is not well-formed or a string."
206 (aref att 5))
207
208(defsubst xmltok-attribute-refs (att)
209 "Return a list of the entity and character references in ATT.
210Each member is a vector [TYPE START END] where TYPE is either char-ref
211or entity-ref and START and END are integers giving the start and end
212of the reference. Nested entity references are not included in the list."
213 (aref att 6))
214
215(defun xmltok-attribute-prefix (att)
216 (let ((colon (xmltok-attribute-name-colon att)))
217 (and colon
218 (buffer-substring-no-properties (xmltok-attribute-name-start att)
219 colon))))
220
221(defun xmltok-attribute-local-name (att)
222 (let ((colon (xmltok-attribute-name-colon att)))
223 (buffer-substring-no-properties (if colon
224 (1+ colon)
225 (xmltok-attribute-name-start att))
226 (xmltok-attribute-name-end att))))
227
228(defun xmltok-attribute-value (att)
229 (let ((rnv (xmltok-attribute-raw-normalized-value att)))
230 (and rnv
231 (if (stringp rnv)
232 rnv
233 (buffer-substring-no-properties (xmltok-attribute-value-start att)
234 (xmltok-attribute-value-end att))))))
235
236(defun xmltok-start-tag-prefix ()
237 (and xmltok-name-colon
238 (buffer-substring-no-properties (1+ xmltok-start)
239 xmltok-name-colon)))
240
241(defun xmltok-start-tag-local-name ()
242 (buffer-substring-no-properties (1+ (or xmltok-name-colon
243 xmltok-start))
244 xmltok-name-end))
245
246(defun xmltok-end-tag-prefix ()
247 (and xmltok-name-colon
248 (buffer-substring-no-properties (+ 2 xmltok-start)
249 xmltok-name-colon)))
250
251(defun xmltok-end-tag-local-name ()
252 (buffer-substring-no-properties (if xmltok-name-colon
253 (1+ xmltok-name-colon)
254 (+ 2 xmltok-start))
255 xmltok-name-end))
256
257(defun xmltok-start-tag-qname ()
258 (buffer-substring-no-properties (+ xmltok-start 1) xmltok-name-end))
259
260(defun xmltok-end-tag-qname ()
261 (buffer-substring-no-properties (+ xmltok-start 2) xmltok-name-end))
262
263(defsubst xmltok-make-attribute (name-begin
264 name-colon
265 name-end
266 &optional
267 value-begin
268 value-end
269 raw-normalized-value)
270 "Make an attribute. RAW-NORMALIZED-VALUE is nil if the value is
271not well-formed, t if the normalized value is the string between
272VALUE-BEGIN and VALUE-END, otherwise a STRING giving the value."
273 (vector name-begin
274 name-colon
275 name-end
276 value-begin
277 value-end
278 raw-normalized-value
279 nil))
280
281(defsubst xmltok-error-message (err)
282 (aref err 0))
283
284(defsubst xmltok-error-start (err)
285 (aref err 1))
286
287(defsubst xmltok-error-end (err)
288 (aref err 2))
289
290(defsubst xmltok-make-error (message start end)
291 (vector message start end))
292
293(defun xmltok-add-error (message &optional start end)
294 (setq xmltok-errors
295 (cons (xmltok-make-error message
296 (or start xmltok-start)
297 (or end (point)))
298 xmltok-errors)))
299
300(defun xmltok-add-dependent (fun &optional start end &rest args)
301 (setq xmltok-dependent-regions
302 (cons (cons fun
303 (cons (or start xmltok-start)
304 (cons (or end (point-max))
305 args)))
306 xmltok-dependent-regions)))
307
308(defun xmltok-forward ()
309 (setq xmltok-start (point))
310 (let* ((case-fold-search nil)
311 (space-count (skip-chars-forward " \t\r\n"))
312 (ch (char-after)))
313 (cond ((eq ch ?\<)
314 (cond ((> space-count 0)
315 (setq xmltok-type 'space))
316 (t
317 (goto-char (1+ (point)))
318 (xmltok-scan-after-lt))))
319 ((eq ch ?\&)
320 (cond ((> space-count 0)
321 (setq xmltok-type 'space))
322 (t
323 (goto-char (1+ (point)))
324 (xmltok-scan-after-amp
325 (lambda (start end)
326 (xmltok-handle-entity start end))))))
327 ((re-search-forward "[<&]\\|\\(]]>\\)" nil t)
328 (cond ((not (match-beginning 1))
329 (goto-char (match-beginning 0))
330 ;; must have got a non-space char
331 (setq xmltok-type 'data))
332 ((= (match-beginning 1) xmltok-start)
333 (xmltok-add-error "Found `]]>' not closing a CDATA section")
334 (setq xmltok-type 'not-well-formed))
335 (t
336 (goto-char (match-beginning 0))
337 (setq xmltok-type
338 (if (= (point) (+ xmltok-start space-count))
339 'space
340 'data)))))
341 ((eq ch nil)
342 (setq xmltok-type
343 (if (> space-count 0)
344 'space
345 nil)))
346 (t
347 (goto-char (point-max))
348 (setq xmltok-type 'data)))))
349
350(defun xmltok-forward-special (bound)
351 "Scan forward past the first special token starting at or after point.
352Return nil if there is no special token that starts before BOUND.
353CDATA sections, processing instructions and comments (and indeed
354anything starting with < following by ? or !) count
355as special. Return the type of the token."
356 (when (re-search-forward "<[?!]" (1+ bound) t)
357 (setq xmltok-start (match-beginning 0))
358 (goto-char (1+ xmltok-start))
359 (let ((case-fold-search nil))
360 (xmltok-scan-after-lt))))
361
362(eval-when-compile
363
364 ;; A symbolic regexp is represented by a list whose CAR is the string
365 ;; containing the regexp and whose cdr is a list of symbolic names
366 ;; for the groups in the string.
367
368 ;; Construct a symbolic regexp from a regexp.
369 (defun xmltok-r (str)
370 (cons str nil))
371
372 ;; Concatenate zero of more regexps and symbolic regexps.
373 (defun xmltok+ (&rest args)
374 (let (strs names)
375 (while args
376 (let ((arg (car args)))
377 (if (stringp arg)
378 (setq strs (cons arg strs))
379 (setq strs (cons (car arg) strs))
380 (setq names (cons (cdr arg) names)))
381 (setq args (cdr args))))
382 (cons (apply 'concat (nreverse strs))
383 (apply 'append (nreverse names))))))
384
385(eval-when-compile
386 ;; Make a symbolic group named NAME from the regexp R.
387 ;; R may be a symbolic regexp or an ordinary regexp.
388 (defmacro xmltok-g (name &rest r)
389 (let ((sym (make-symbol "r")))
390 `(let ((,sym (xmltok+ ,@r)))
391 (if (stringp ,sym)
392 (cons (concat "\\(" ,sym "\\)") (cons ',name nil))
393 (cons (concat "\\(" (car ,sym) "\\)") (cons ',name (cdr ,sym)))))))
394
395 (defun xmltok-p (&rest r) (xmltok+ "\\(?:"
396 (apply 'xmltok+ r)
397 "\\)"))
398
399 ;; Get the group index of ELEM in a LIST of symbols.
400 (defun xmltok-get-index (elem list)
401 (or elem
402 (error "Missing group name"))
403 (let ((found nil)
404 (i 1))
405 (while list
406 (cond ((eq elem (car list))
407 (setq found i)
408 (setq list nil))
409 (t
410 (setq i (1+ i))
411 (setq list (cdr list)))))
412 (or found
413 (error "Bad group name %s" elem))))
414
415 ;; Define a macro SYM using a symbolic regexp R.
416 ;; SYM can be called in three ways:
417 ;; (SYM regexp)
418 ;; expands to the regexp in R
419 ;; (SYM start G)
420 ;; expands to
421 ;; (match-beginning N)
422 ;; where N is the group index of G in R.
423 ;; (SYM end G)
424 ;; expands to
425 ;; (match-end N)
426 ;; where N is the group index of G in R.
427 (defmacro xmltok-defregexp (sym r)
428 `(defalias ',sym
429 (let ((r ,r))
430 `(macro lambda (action &optional group-name)
431 (cond ((eq action 'regexp)
432 ,(car r))
433 ((or (eq action 'start) (eq action 'beginning))
434 (list 'match-beginning (xmltok-get-index group-name
435 ',(cdr r))))
436 ((eq action 'end)
437 (list 'match-end (xmltok-get-index group-name
438 ',(cdr r))))
439 ((eq action 'string)
440 (list 'match-string
441 (xmltok-get-index group-name ',(cdr r))))
442 ((eq action 'string-no-properties)
443 (list 'match-string-no-properties
444 (xmltok-get-index group-name ',(cdr r))))
445 (t (error "Invalid action: %s" action))))))))
446
447
448(eval-when-compile
449 (let* ((or "\\|")
450 (open "\\(?:")
451 (gopen "\\(")
452 (close "\\)")
453 (name-start-char "[_[:alpha:]]")
454 (name-continue-not-start-char "[-.[:digit:]]")
455 (name-continue-char "[-._[:alnum:]]")
456 (* "*")
457 (+ "+")
458 (opt "?")
459 (question "\\?")
460 (s "[ \r\t\n]")
461 (s+ (concat s +))
462 (s* (concat s *))
463 (ncname (concat name-start-char name-continue-char *))
464 (entity-ref
465 (xmltok+ (xmltok-g entity-name ncname)
466 (xmltok-g entity-ref-close ";") opt))
467 (decimal-ref
468 (xmltok+ (xmltok-g decimal "[0-9]" +)
469 (xmltok-g decimal-ref-close ";") opt))
470 (hex-ref
471 (xmltok+ "x" open
472 (xmltok-g hex "[0-9a-fA-F]" +)
473 (xmltok-g hex-ref-close ";") opt
474 close opt))
475 (char-ref
476 (xmltok+ (xmltok-g number-sign "#")
477 open decimal-ref or hex-ref close opt))
478 (start-tag-close
479 (xmltok+ open (xmltok-g start-tag-close s* ">")
480 or open (xmltok-g empty-tag-slash s* "/")
481 (xmltok-g empty-tag-close ">") opt close
482 or (xmltok-g start-tag-s s+)
483 close))
484 (start-tag
485 (xmltok+ (xmltok-g start-tag-name
486 ncname (xmltok-g start-tag-colon ":" ncname) opt)
487 start-tag-close opt))
488 (end-tag
489 (xmltok+ (xmltok-g end-tag-slash "/")
490 open (xmltok-g end-tag-name
491 ncname
492 (xmltok-g end-tag-colon ":" ncname) opt)
493 (xmltok-g end-tag-close s* ">") opt
494 close opt))
495 (comment
496 (xmltok+ (xmltok-g markup-declaration "!")
497 (xmltok-g comment-first-dash "-"
498 (xmltok-g comment-open "-") opt) opt))
499 (cdata-section
500 (xmltok+ "!"
501 (xmltok-g marked-section-open "\\[")
502 open "C"
503 open "D"
504 open "A"
505 open "T"
506 open "A"
507 (xmltok-g cdata-section-open "\\[" ) opt
508 close opt ; A
509 close opt ; T
510 close opt ; A
511 close opt ; D
512 close opt)) ; C
513 (processing-instruction
514 (xmltok-g processing-instruction-question question)))
515
516 (xmltok-defregexp xmltok-ncname (xmltok+ open ncname close))
517
518 (xmltok-defregexp xmltok-after-amp
519 (xmltok+ entity-ref or char-ref))
520 (xmltok-defregexp xmltok-after-lt
521 (xmltok+ start-tag
522 or end-tag
523 ;; cdata-section must come before comment
524 ;; because we treat <! as a comment
525 ;; and Emacs doesn't do fully greedy matching
526 ;; by default
527 or cdata-section
528 or comment
529 or processing-instruction))
530 (xmltok-defregexp
531 xmltok-attribute
532 (let* ((lit1
533 (xmltok+ "'"
534 "[^<'&\r\n\t]*"
535 (xmltok-g complex1 "[&\r\n\t][^<']*") opt
536 "'"))
537 (lit2 (cons (replace-regexp-in-string "'" "\"" (car lit1))
538 '(complex2)))
539 (literal (xmltok-g literal lit1 or lit2))
540 (name (xmltok+ open (xmltok-g xmlns "xmlns") or ncname close
541 (xmltok-g colon ":" ncname) opt)))
542 (xmltok+ (xmltok-g name name)
543 s* "="
544 ;; If the literal isn't followed by what it should be,
545 ;; then the closing delimiter is probably really the
546 ;; opening delimiter of another literal, so don't
547 ;; absorb the literal in this case.
548 open s* literal start-tag-close close opt)))
549 (xmltok-defregexp
550 xmltok-xml-declaration
551 (let* ((literal-content "[-._:a-zA-Z0-9]+")
552 (literal
553 (concat open "\"" literal-content "\""
554 or "'" literal-content "'" close))
555 (version-att
556 (xmltok+ open
557 s+ (xmltok-g version-name "version")
558 s* "="
559 s* (xmltok-g version-value literal)
560 close opt))
561 (encoding-att
562 (xmltok+ open
563 s+ (xmltok-g encoding-name "encoding")
564 s* "="
565 s* (xmltok-g encoding-value literal)
566 close opt))
567 (yes-no
568 (concat open "yes" or "no" close))
569 (standalone-att
570 (xmltok+ open
571 s+ (xmltok-g standalone-name "standalone")
572 s* "="
573 s* (xmltok-g standalone-value
574 "\"" yes-no "\"" or "'" yes-no "'")
575 close opt)))
576 (xmltok+ "<" question "xml"
577 version-att
578 encoding-att
579 standalone-att
580 s* question ">")))
581 (xmltok-defregexp
582 xmltok-prolog
583 (let* ((single-char (xmltok-g single-char "[[|,(\"'>]"))
584 (internal-subset-close (xmltok-g internal-subset-close
585 "][ \t\r\n]*>"))
586 (starts-with-close-paren
587 (xmltok-g close-paren
588 ")"
589 (xmltok-p
590 (xmltok-g close-paren-occur "[+?]")
591 or
592 (xmltok-g close-paren-star "\\*"))
593 opt))
594 (starts-with-percent
595 (xmltok-g percent
596 "%" (xmltok-g param-entity-ref
597 ncname
598 (xmltok-g param-entity-ref-close
599 ";") opt) opt))
600 (starts-with-nmtoken-not-name
601 (xmltok-g nmtoken
602 (xmltok-p name-continue-not-start-char or ":")
603 (xmltok-p name-continue-char or ":") *))
604 (nmtoken-after-colon
605 (xmltok+
606 (xmltok-p name-continue-not-start-char or ":")
607 (xmltok-p name-continue-char or ":") *
608 or
609 name-start-char
610 name-continue-char *
611 ":"
612 (xmltok-p name-continue-char or ":") *))
613 (after-ncname
614 (xmltok+ (xmltok-g ncname-nmtoken
615 ":" (xmltok-p nmtoken-after-colon))
616 or (xmltok-p (xmltok-g colon ":" ncname)
617 (xmltok-g colon-name-occur "[?+*]") opt)
618 or (xmltok-g ncname-occur "[?+*]")
619 or (xmltok-g ncname-colon ":")))
620 (starts-with-name
621 (xmltok-g name ncname (xmltok-p after-ncname) opt))
622 (starts-with-hash
623 (xmltok-g pound
624 "#" (xmltok-g hash-name ncname)))
625 (markup-declaration
626 (xmltok-g markup-declaration
627 "!" (xmltok-p (xmltok-g comment-first-dash "-"
628 (xmltok-g comment-open "-") opt)
629 or (xmltok-g named-markup-declaration
630 ncname)) opt))
631 (after-lt
632 (xmltok+ markup-declaration
633 or (xmltok-g processing-instruction-question
634 question)
635 or (xmltok-g instance-start
636 ncname)))
637 (starts-with-lt (xmltok-g less-than "<" (xmltok-p after-lt) opt)))
638 (xmltok+ starts-with-lt
639 or single-char
640 or starts-with-close-paren
641 or starts-with-percent
642 or starts-with-name
643 or starts-with-nmtoken-not-name
644 or starts-with-hash
645 or internal-subset-close)))))
646
647(defconst xmltok-ncname-regexp (xmltok-ncname regexp))
648
649(defun xmltok-scan-after-lt ()
650 (cond ((not (looking-at (xmltok-after-lt regexp)))
651 (xmltok-add-error "`<' that is not markup must be entered as `&lt;'")
652 (setq xmltok-type 'not-well-formed))
653 (t
654 (goto-char (match-end 0))
655 (cond ((xmltok-after-lt start start-tag-close)
656 (setq xmltok-name-end
657 (xmltok-after-lt end start-tag-name))
658 (setq xmltok-name-colon
659 (xmltok-after-lt start start-tag-colon))
660 (setq xmltok-attributes nil)
661 (setq xmltok-namespace-attributes nil)
662 (setq xmltok-type 'start-tag))
663 ((xmltok-after-lt start end-tag-close)
664 (setq xmltok-name-end
665 (xmltok-after-lt end end-tag-name))
666 (setq xmltok-name-colon
667 (xmltok-after-lt start end-tag-colon))
668 (setq xmltok-type 'end-tag))
669 ((xmltok-after-lt start start-tag-s)
670 (setq xmltok-name-end
671 (xmltok-after-lt end start-tag-name))
672 (setq xmltok-name-colon
673 (xmltok-after-lt start start-tag-colon))
674 (setq xmltok-namespace-attributes nil)
675 (setq xmltok-attributes nil)
676 (xmltok-scan-attributes)
677 xmltok-type)
678 ((xmltok-after-lt start empty-tag-close)
679 (setq xmltok-name-end
680 (xmltok-after-lt end start-tag-name))
681 (setq xmltok-name-colon
682 (xmltok-after-lt start start-tag-colon))
683 (setq xmltok-attributes nil)
684 (setq xmltok-namespace-attributes nil)
685 (setq xmltok-type 'empty-element))
686 ((xmltok-after-lt start cdata-section-open)
687 (setq xmltok-type
688 (if (search-forward "]]>" nil t)
689 'cdata-section
690 (xmltok-add-error "No closing ]]>")
691 (xmltok-add-dependent 'xmltok-unclosed-reparse-p
692 nil
693 nil
694 "]]>")
695 'not-well-formed)))
696 ((xmltok-after-lt start processing-instruction-question)
697 (xmltok-scan-after-processing-instruction-open))
698 ((xmltok-after-lt start comment-open)
699 (xmltok-scan-after-comment-open))
700 ((xmltok-after-lt start empty-tag-slash)
701 (setq xmltok-name-end
702 (xmltok-after-lt end start-tag-name))
703 (setq xmltok-name-colon
704 (xmltok-after-lt start start-tag-colon))
705 (setq xmltok-attributes nil)
706 (setq xmltok-namespace-attributes nil)
707 (xmltok-add-error "Expected `/>'" (1- (point)))
708 (setq xmltok-type 'partial-empty-element))
709 ((xmltok-after-lt start start-tag-name)
710 (xmltok-add-error "Missing `>'"
711 nil
712 (1+ xmltok-start))
713 (setq xmltok-name-end
714 (xmltok-after-lt end start-tag-name))
715 (setq xmltok-name-colon
716 (xmltok-after-lt start start-tag-colon))
717 (setq xmltok-namespace-attributes nil)
718 (setq xmltok-attributes nil)
719 (setq xmltok-type 'partial-start-tag))
720 ((xmltok-after-lt start end-tag-name)
721 (setq xmltok-name-end (xmltok-after-lt end end-tag-name))
722 (setq xmltok-name-colon
723 (xmltok-after-lt start end-tag-colon))
724 (cond ((and (not xmltok-name-colon)
725 (eq (char-after) ?:))
726 (goto-char (1+ (point)))
727 (xmltok-add-error "Expected name following `:'"
728 (1- (point))))
729 (t
730 (xmltok-add-error "Missing `>'"
731 nil
732 (1+ xmltok-start))))
733 (setq xmltok-type 'partial-end-tag))
734 ((xmltok-after-lt start end-tag-slash)
735 (xmltok-add-error "Expected name following `</'")
736 (setq xmltok-name-end nil)
737 (setq xmltok-name-colon nil)
738 (setq xmltok-type 'partial-end-tag))
739 ((xmltok-after-lt start marked-section-open)
740 (xmltok-add-error "Expected `CDATA[' after `<!['"
741 xmltok-start
742 (+ 3 xmltok-start))
743 (setq xmltok-type 'not-well-formed))
744 ((xmltok-after-lt start comment-first-dash)
745 (xmltok-add-error "Expected `-' after `<!-'"
746 xmltok-start
747 (+ 3 xmltok-start))
748 (setq xmltok-type 'not-well-formed))
749 ((xmltok-after-lt start markup-declaration)
750 (xmltok-add-error "Expected `[CDATA[' or `--' after `<!'"
751 xmltok-start
752 (+ 2 xmltok-start))
753 (setq xmltok-type 'not-well-formed))
754 (t
755 (xmltok-add-error "Not well-formed")
756 (setq xmltok-type 'not-well-formed))))))
757
758;; XXX This should be unified with
759;; xmltok-scan-prolog-after-processing-instruction-open
760;; XXX maybe should include rest of line (up to any <,>) in unclosed PI
761(defun xmltok-scan-after-processing-instruction-open ()
762 (cond ((not (search-forward "?>" nil t))
763 (xmltok-add-error "No closing ?>"
764 xmltok-start
765 (+ xmltok-start 2))
766 (xmltok-add-dependent 'xmltok-unclosed-reparse-p
767 nil
768 nil
769 "?>")
770 (setq xmltok-type 'not-well-formed))
771 (t
772 (cond ((not (save-excursion
773 (goto-char (+ 2 xmltok-start))
774 (and (looking-at (xmltok-ncname regexp))
775 (setq xmltok-name-end (match-end 0)))))
776 (setq xmltok-name-end (+ xmltok-start 2))
777 (xmltok-add-error "<? not followed by name"
778 (+ xmltok-start 2)
779 (+ xmltok-start 3)))
780 ((not (or (memq (char-after xmltok-name-end)
781 '(?\n ?\t ?\r ? ))
782 (= xmltok-name-end (- (point) 2))))
783 (xmltok-add-error "Target not followed by whitespace"
784 xmltok-name-end
785 (1+ xmltok-name-end)))
786 ((and (= xmltok-name-end (+ xmltok-start 5))
787 (save-excursion
788 (goto-char (+ xmltok-start 2))
789 (let ((case-fold-search t))
790 (looking-at "xml"))))
791 (xmltok-add-error "Processing instruction target is xml"
792 (+ xmltok-start 2)
793 (+ xmltok-start 5))))
794 (setq xmltok-type 'processing-instruction))))
795
796(defun xmltok-scan-after-comment-open ()
797 (setq xmltok-type
798 (cond ((not (search-forward "--" nil t))
799 (xmltok-add-error "No closing -->")
800 (xmltok-add-dependent 'xmltok-unclosed-reparse-p
801 nil
802 nil
803 ;; not --> because
804 ;; -- is not allowed
805 ;; in comments in XML
806 "--")
807 'not-well-formed)
808 ((eq (char-after) ?>)
809 (goto-char (1+ (point)))
810 'comment)
811 (t
812 (xmltok-add-dependent
813 'xmltok-semi-closed-reparse-p
814 nil
815 (point)
816 "--"
817 2)
818 ;; just include the <!-- in the token
819 (goto-char (+ xmltok-start 4))
820 ;; Need do this after the goto-char because
821 ;; marked error should just apply to <!--
822 (xmltok-add-error "First following `--' not followed by `>'")
823 'not-well-formed))))
824
825(defun xmltok-scan-attributes ()
826 (let ((recovering nil)
827 (atts-needing-normalization nil))
828 (while (cond ((or (looking-at (xmltok-attribute regexp))
829 ;; use non-greedy group
830 (when (looking-at (concat "[^<>\n]+?"
831 (xmltok-attribute regexp)))
832 (unless recovering
833 (xmltok-add-error "Malformed attribute"
834 (point)
835 (save-excursion
836 (goto-char (xmltok-attribute start
837 name))
838 (skip-chars-backward "\r\n\t ")
839 (point))))
840 t))
841 (setq recovering nil)
842 (goto-char (match-end 0))
843 (let ((att (xmltok-add-attribute)))
844 (when att
845 (setq atts-needing-normalization
846 (cons att atts-needing-normalization))))
847 (cond ((xmltok-attribute start start-tag-s) t)
848 ((xmltok-attribute start start-tag-close)
849 (setq xmltok-type 'start-tag)
850 nil)
851 ((xmltok-attribute start empty-tag-close)
852 (setq xmltok-type 'empty-element)
853 nil)
854 ((xmltok-attribute start empty-tag-slash)
855 (setq xmltok-type 'partial-empty-element)
856 (xmltok-add-error "Expected `/>'"
857 (1- (point)))
858 nil)
859 ((looking-at "[ \t\r\n]*[\"']")
860 (goto-char (match-end 0))
861 (xmltok-add-error "Missing closing delimiter"
862 (1- (point)))
863 (setq recovering t)
864 t)
865 ((looking-at "[ \t]*\\([^ \t\r\n\"'=<>/]+\\)[ \t\r\n/>]")
866 (goto-char (match-end 1))
867 (xmltok-add-error "Attribute value not quoted"
868 (match-beginning 1))
869 (setq recovering t)
870 t)
871 (t
872 (xmltok-add-error "Missing attribute value"
873 (1- (point)))
874 (setq recovering t)
875 t)))
876 ((looking-at "[^<>\n]*/>")
877 (let ((start (point)))
878 (goto-char (match-end 0))
879 (unless recovering
880 (xmltok-add-error "Malformed empty-element"
881 start
882 (- (point) 2))))
883 (setq xmltok-type 'empty-element)
884 nil)
885 ((looking-at "[^<>\n]*>")
886 (let ((start (point)))
887 (goto-char (match-end 0))
888 (unless recovering
889 (xmltok-add-error "Malformed start-tag"
890 start
891 (1- (point)))))
892 (setq xmltok-type 'start-tag)
893 nil)
894 (t
895 (when recovering
896 (skip-chars-forward "^<>\n"))
897 (xmltok-add-error "Missing `>'"
898 xmltok-start
899 (1+ xmltok-start))
900 (setq xmltok-type 'partial-start-tag)
901 nil)))
902 (while atts-needing-normalization
903 (xmltok-normalize-attribute (car atts-needing-normalization))
904 (setq atts-needing-normalization (cdr atts-needing-normalization))))
905 (setq xmltok-attributes
906 (nreverse xmltok-attributes))
907 (setq xmltok-namespace-attributes
908 (nreverse xmltok-namespace-attributes)))
909
910(defun xmltok-add-attribute ()
911 "Return the attribute if it needs normalizing, otherwise nil."
912 (let* ((needs-normalizing nil)
913 (att
914 (if (xmltok-attribute start literal)
915 (progn
916 (setq needs-normalizing
917 (or (xmltok-attribute start complex1)
918 (xmltok-attribute start complex2)))
919 (xmltok-make-attribute (xmltok-attribute start name)
920 (xmltok-attribute start colon)
921 (xmltok-attribute end name)
922 (1+ (xmltok-attribute start literal))
923 (1- (xmltok-attribute end literal))
924 (not needs-normalizing)))
925 (xmltok-make-attribute (xmltok-attribute start name)
926 (xmltok-attribute start colon)
927 (xmltok-attribute end name)))))
928 (if (xmltok-attribute start xmlns)
929 (setq xmltok-namespace-attributes
930 (cons att xmltok-namespace-attributes))
931 (setq xmltok-attributes
932 (cons att xmltok-attributes)))
933 (and needs-normalizing
934 att)))
935
936(defun xmltok-normalize-attribute (att)
937 (let ((end (xmltok-attribute-value-end att))
938 (well-formed t)
939 (value-parts nil)
940 (refs nil))
941 (save-excursion
942 (goto-char (xmltok-attribute-value-start att))
943 (while (progn
944 (let ((n (skip-chars-forward "^\r\t\n&" end)))
945 (when (> n 0)
946 (setq value-parts
947 (cons (buffer-substring-no-properties (- (point) n)
948 (point))
949 value-parts))))
950 (when (< (point) end)
951 (goto-char (1+ (point)))
952 (cond ((eq (char-before) ?\&)
953 (let ((xmltok-start (1- (point)))
954 xmltok-type xmltok-replacement)
955 (xmltok-scan-after-amp
956 (lambda (start end)
957 (xmltok-handle-entity start end t)))
958 (cond ((or (eq xmltok-type 'char-ref)
959 (eq xmltok-type 'entity-ref))
960 (setq refs
961 (cons (vector xmltok-type
962 xmltok-start
963 (point))
964 refs))
965 (if xmltok-replacement
966 (setq value-parts
967 (cons xmltok-replacement
968 value-parts))
969 (setq well-formed nil)))
970 (t (setq well-formed nil)))))
971 (t (setq value-parts
972 (cons " " value-parts)))))
973 (< (point) end))))
974 (when well-formed
975 (aset att 5 (apply 'concat (nreverse value-parts))))
976 (aset att 6 (nreverse refs))))
977
978(defun xmltok-scan-after-amp (entity-handler)
979 (cond ((not (looking-at (xmltok-after-amp regexp)))
980 (xmltok-add-error "`&' that is not markup must be entered as `&amp;'")
981 (setq xmltok-type 'not-well-formed))
982 (t
983 (goto-char (match-end 0))
984 (cond ((xmltok-after-amp start entity-ref-close)
985 (funcall entity-handler
986 (xmltok-after-amp start entity-name)
987 (xmltok-after-amp end entity-name))
988 (setq xmltok-type 'entity-ref))
989 ((xmltok-after-amp start decimal-ref-close)
990 (xmltok-scan-char-ref (xmltok-after-amp start decimal)
991 (xmltok-after-amp end decimal)
992 10))
993 ((xmltok-after-amp start hex-ref-close)
994 (xmltok-scan-char-ref (xmltok-after-amp start hex)
995 (xmltok-after-amp end hex)
996 16))
997 ((xmltok-after-amp start number-sign)
998 (xmltok-add-error "Missing character number")
999 (setq xmltok-type 'not-well-formed))
1000 (t
1001 (xmltok-add-error "Missing closing `;'")
1002 (setq xmltok-type 'not-well-formed))))))
1003
1004(defconst xmltok-entity-error-messages
1005 '((unparsed . "Referenced entity is unparsed")
1006 (not-well-formed . "Referenced entity is not well-formed")
1007 (external nil . "Referenced entity is external")
1008 (element nil . "Referenced entity contains <")))
1009
1010(defun xmltok-handle-entity (start end &optional attributep)
1011 (let* ((name (buffer-substring-no-properties start end))
1012 (name-def (assoc name xmltok-dtd))
1013 (def (cdr name-def)))
1014 (cond ((setq xmltok-replacement (and (consp def)
1015 (if attributep
1016 (cdr def)
1017 (car def)))))
1018 ((null name-def)
1019 (unless (eq (car xmltok-dtd) t)
1020 (xmltok-add-error "Referenced entity has not been defined"
1021 start
1022 end)))
1023 ((and attributep (consp def))
1024 (xmltok-add-error "Referenced entity contains <"
1025 start
1026 end))
1027 (t
1028 (let ((err (cdr (assq def xmltok-entity-error-messages))))
1029 (when (consp err)
1030 (setq err (if attributep (cdr err) (car err))))
1031 (when err
1032 (xmltok-add-error err start end)))))))
1033
1034(defun xmltok-scan-char-ref (start end base)
1035 (setq xmltok-replacement
1036 (let ((n (string-to-int (buffer-substring-no-properties start end)
1037 base)))
1038 (cond ((and (integerp n) (xmltok-valid-char-p n))
1039 (setq n (xmltok-unicode-to-char n))
1040 (and n (string n)))
1041 (t
1042 (xmltok-add-error "Invalid character code" start end)
1043 nil))))
1044 (setq xmltok-type 'char-ref))
1045
1046(defun xmltok-char-number (start end)
1047 (let* ((base (if (eq (char-after (+ start 2)) ?x)
1048 16
1049 10))
1050 (n (string-to-int
1051 (buffer-substring-no-properties (+ start (if (= base 16) 3 2))
1052 (1- end))
1053 base)))
1054 (and (integerp n)
1055 (xmltok-valid-char-p n)
1056 n)))
1057
1058(defun xmltok-unclosed-reparse-p (change-start
1059 change-end
1060 pre-change-length
1061 start
1062 end
1063 delimiter)
1064 (let ((len-1 (1- (length delimiter))))
1065 (goto-char (max start (- change-start len-1)))
1066 (search-forward delimiter (min end (+ change-end len-1)) t)))
1067
1068;; Handles a <!-- with the next -- not followed by >
1069
1070(defun xmltok-semi-closed-reparse-p (change-start
1071 change-end
1072 pre-change-length
1073 start
1074 end
1075 delimiter
1076 delimiter-length)
1077 (or (<= (- end delimiter-length) change-end)
1078 (xmltok-unclosed-reparse-p change-start
1079 change-end
1080 pre-change-length
1081 start
1082 end
1083 delimiter)))
1084
1085(defun xmltok-valid-char-p (n)
1086 "Return non-nil if n is the Unicode code of a valid XML character."
1087 (cond ((< n #x20) (memq n '(#xA #xD #x9)))
1088 ((< n #xD800) t)
1089 ((< n #xE000) nil)
1090 ((< n #xFFFE) t)
1091 (t (and (> n #xFFFF)
1092 (< n #x110000)))))
1093
1094(defun xmltok-unicode-to-char (n)
1095 "Return the character corresponding to Unicode scalar value N.
1096Return nil if unsupported in Emacs."
1097 (decode-char 'ucs n))
1098
1099;;; Prolog parsing
1100
1101(defvar xmltok-contains-doctype nil)
1102(defvar xmltok-doctype-external-subset-flag nil)
1103(defvar xmltok-internal-subset-start nil)
1104(defvar xmltok-had-param-entity-ref nil)
1105(defvar xmltok-prolog-regions nil)
1106(defvar xmltok-standalone nil
1107 "Non-nil if there was an XML declaration specifying standalone=\"yes\",")
1108(defvar xmltok-markup-declaration-doctype-flag nil)
1109
1110(defconst xmltok-predefined-entity-alist
1111 '(("lt" "<" . "<")
1112 ("gt" ">" . ">")
1113 ("amp" "&" . "&")
1114 ("apos" "'" . "'")
1115 ("quot" "\"" . "\"")))
1116
1117(defun xmltok-forward-prolog ()
1118 "Move forward to the end of the XML prolog.
1119
1120Returns a list of vectors [TYPE START END] where TYPE is a symbol and
1121START and END are integers giving the start and end of the region of
1122that type. TYPE can be one of xml-declaration,
1123xml-declaration-attribute-name, xml-declaration-attribute-value,
1124comment, processing-instruction-left, processing-instruction-right,
1125markup-declaration-open. markup-declaration-close,
1126internal-subset-open, internal-subset-close, hash-name, keyword,
1127literal, encoding-name.
1128Adds to `xmltok-errors' and `xmltok-dependent-regions' as appropriate."
1129 (let ((case-fold-search nil)
1130 xmltok-start
1131 xmltok-type
1132 xmltok-prolog-regions
1133 xmltok-contains-doctype
1134 xmltok-internal-subset-start
1135 xmltok-had-param-entity-ref
1136 xmltok-standalone
1137 xmltok-doctype-external-subset-flag
1138 xmltok-markup-declaration-doctype-flag)
1139 (setq xmltok-dtd xmltok-predefined-entity-alist)
1140 (xmltok-scan-xml-declaration)
1141 (xmltok-next-prolog-token)
1142 (while (condition-case err
1143 (when (xmltok-parse-prolog-item)
1144 (xmltok-next-prolog-token))
1145 (xmltok-markup-declaration-parse-error
1146 (xmltok-skip-markup-declaration))))
1147 (when xmltok-internal-subset-start
1148 (xmltok-add-error "No closing ]"
1149 (1- xmltok-internal-subset-start)
1150 xmltok-internal-subset-start))
1151 (xmltok-parse-entities)
1152 ;; XXX prune dependent-regions for those entirely in prolog
1153 (nreverse xmltok-prolog-regions)))
1154
1155(defconst xmltok-bad-xml-decl-regexp
1156 "[ \t\r\n]*<\\?xml\\(?:[ \t\r\n]\\|\\?>\\)")
1157
1158;;;###autoload
1159(defun xmltok-get-declared-encoding-position (&optional limit)
1160 "Return the position of the encoding in the XML declaration at point.
1161If there is a well-formed XML declaration starting at point and it
1162contains an encoding declaration, then return (START . END)
1163where START and END are the positions of the start and the end
1164of the encoding name; if there is no encoding declaration return
1165the position where and encoding declaration could be inserted.
1166If there is XML that is not well-formed that looks like an XML declaration,
1167return nil. Otherwise, return t.
1168If LIMIT is non-nil, then do not consider characters beyond LIMIT."
1169 (cond ((let ((case-fold-search nil))
1170 (and (looking-at (xmltok-xml-declaration regexp))
1171 (or (not limit) (<= (match-end 0) limit))))
1172 (let ((end (xmltok-xml-declaration end encoding-value)))
1173 (if end
1174 (cons (1+ (xmltok-xml-declaration start encoding-value))
1175 (1- end))
1176 (or (xmltok-xml-declaration end version-value)
1177 (+ (point) 5)))))
1178 ((not (let ((case-fold-search t))
1179 (looking-at xmltok-bad-xml-decl-regexp))))))
1180
1181(defun xmltok-scan-xml-declaration ()
1182 (when (looking-at (xmltok-xml-declaration regexp))
1183 (xmltok-add-prolog-region 'xml-declaration (point) (match-end 0))
1184 (goto-char (match-end 0))
1185 (when (xmltok-xml-declaration start version-name)
1186 (xmltok-add-prolog-region 'xml-declaration-attribute-name
1187 (xmltok-xml-declaration start version-name)
1188 (xmltok-xml-declaration end version-name))
1189 (let ((start (xmltok-xml-declaration start version-value))
1190 (end (xmltok-xml-declaration end version-value)))
1191 (xmltok-add-prolog-region 'xml-declaration-attribute-value
1192 start
1193 end)))
1194 ;; XXX need to check encoding name
1195 ;; Should start with letter, not contain colon
1196 (when (xmltok-xml-declaration start encoding-name)
1197 (xmltok-add-prolog-region 'xml-declaration-attribute-name
1198 (xmltok-xml-declaration start encoding-name)
1199 (xmltok-xml-declaration end encoding-name))
1200 (let ((start (xmltok-xml-declaration start encoding-value))
1201 (end (xmltok-xml-declaration end encoding-value)))
1202 (xmltok-add-prolog-region 'encoding-name
1203 (1+ start)
1204 (1- end))
1205 (xmltok-add-prolog-region 'xml-declaration-attribute-value
1206 start
1207 end)))
1208 (when (xmltok-xml-declaration start standalone-name)
1209 (xmltok-add-prolog-region 'xml-declaration-attribute-name
1210 (xmltok-xml-declaration start standalone-name)
1211 (xmltok-xml-declaration end standalone-name))
1212 (let ((start (xmltok-xml-declaration start standalone-value))
1213 (end (xmltok-xml-declaration end standalone-value)))
1214 (xmltok-add-prolog-region 'xml-declaration-attribute-value
1215 start
1216 end)
1217 (setq xmltok-standalone
1218 (string= (buffer-substring-no-properties (1+ start) (1- end))
1219 "yes"))))
1220 t))
1221
1222(defconst xmltok-markup-declaration-alist
1223 '(("ELEMENT" . xmltok-parse-element-declaration)
1224 ("ATTLIST" . xmltok-parse-attlist-declaration)
1225 ("ENTITY" . xmltok-parse-entity-declaration)
1226 ("NOTATION" . xmltok-parse-notation-declaration)))
1227
1228(defun xmltok-parse-prolog-item ()
1229 (cond ((eq xmltok-type 'comment)
1230 (xmltok-add-prolog-region 'comment
1231 xmltok-start
1232 (point))
1233 t)
1234 ((eq xmltok-type 'processing-instruction))
1235 ((eq xmltok-type 'named-markup-declaration)
1236 (setq xmltok-markup-declaration-doctype-flag nil)
1237 (xmltok-add-prolog-region 'markup-declaration-open
1238 xmltok-start
1239 (point))
1240 (let* ((name (buffer-substring-no-properties
1241 (+ xmltok-start 2)
1242 (point)))
1243 (fun (cdr (assoc name xmltok-markup-declaration-alist))))
1244 (cond (fun
1245 (unless xmltok-internal-subset-start
1246 (xmltok-add-error
1247 "Declaration allowed only in internal subset"))
1248 (funcall fun))
1249 ((string= name "DOCTYPE")
1250 (xmltok-parse-doctype))
1251 (t
1252 (xmltok-add-error "Unknown markup declaration"
1253 (+ xmltok-start 2))
1254 (xmltok-next-prolog-token)
1255 (xmltok-markup-declaration-parse-error))))
1256 t)
1257 ((or (eq xmltok-type 'end-prolog)
1258 (not xmltok-type))
1259 nil)
1260 ((eq xmltok-type 'internal-subset-close)
1261 (xmltok-add-prolog-region 'internal-subset-close
1262 xmltok-start
1263 (1+ xmltok-start))
1264 (xmltok-add-prolog-region 'markup-declaration-close
1265 (1- (point))
1266 (point))
1267 (if xmltok-internal-subset-start
1268 (setq xmltok-internal-subset-start nil)
1269 (xmltok-add-error "]> outside internal subset"))
1270 t)
1271 ((eq xmltok-type 'param-entity-ref)
1272 (if xmltok-internal-subset-start
1273 (setq xmltok-had-param-entity-ref t)
1274 (xmltok-add-error "Parameter entity reference outside document type declaration"))
1275 t)
1276 ;; If we don't do this, we can get thousands of errors when
1277 ;; a plain text file is parsed.
1278 ((not xmltok-internal-subset-start)
1279 (when (let ((err (car xmltok-errors)))
1280 (or (not err)
1281 (<= (xmltok-error-end err) xmltok-start)))
1282 (goto-char xmltok-start))
1283 nil)
1284 ((eq xmltok-type 'not-well-formed) t)
1285 (t
1286 (xmltok-add-error "Token allowed only inside markup declaration")
1287 t)))
1288
1289(defun xmltok-parse-doctype ()
1290 (setq xmltok-markup-declaration-doctype-flag t)
1291 (xmltok-next-prolog-token)
1292 (when xmltok-internal-subset-start
1293 (xmltok-add-error "DOCTYPE declaration not allowed in internal subset")
1294 (xmltok-markup-declaration-parse-error))
1295 (when xmltok-contains-doctype
1296 (xmltok-add-error "Duplicate DOCTYPE declaration")
1297 (xmltok-markup-declaration-parse-error))
1298 (setq xmltok-contains-doctype t)
1299 (xmltok-require-token 'name 'prefixed-name)
1300 (xmltok-require-next-token "SYSTEM" "PUBLIC" ?\[ ?>)
1301 (cond ((eq xmltok-type ?\[)
1302 (setq xmltok-internal-subset-start (point)))
1303 ((eq xmltok-type ?>))
1304 (t
1305 (setq xmltok-doctype-external-subset-flag t)
1306 (xmltok-parse-external-id)
1307 (xmltok-require-token ?\[ ?>)
1308 (when (eq xmltok-type ?\[)
1309 (setq xmltok-internal-subset-start (point))))))
1310
1311(defun xmltok-parse-attlist-declaration ()
1312 (xmltok-require-next-token 'prefixed-name 'name)
1313 (while (progn
1314 (xmltok-require-next-token ?> 'name 'prefixed-name)
1315 (if (eq xmltok-type ?>)
1316 nil
1317 (xmltok-require-next-token ?\(
1318 "CDATA"
1319 "ID"
1320 "IDREF"
1321 "IDREFS"
1322 "ENTITY"
1323 "ENTITIES"
1324 "NMTOKEN"
1325 "NMTOKENS"
1326 "NOTATION")
1327 (cond ((eq xmltok-type ?\()
1328 (xmltok-parse-nmtoken-group))
1329 ((string= (xmltok-current-token-string)
1330 "NOTATION")
1331 (xmltok-require-next-token ?\()
1332 (xmltok-parse-nmtoken-group)))
1333 (xmltok-require-next-token "#IMPLIED"
1334 "#REQUIRED"
1335 "#FIXED"
1336 'literal)
1337 (when (string= (xmltok-current-token-string) "#FIXED")
1338 (xmltok-require-next-token 'literal))
1339 t))))
1340
1341(defun xmltok-parse-nmtoken-group ()
1342 (while (progn
1343 (xmltok-require-next-token 'nmtoken 'prefixed-name 'name)
1344 (xmltok-require-next-token ?| ?\))
1345 (eq xmltok-type ?|))))
1346
1347(defun xmltok-parse-element-declaration ()
1348 (xmltok-require-next-token 'name 'prefixed-name)
1349 (xmltok-require-next-token "EMPTY" "ANY" ?\()
1350 (when (eq xmltok-type ?\()
1351 (xmltok-require-next-token "#PCDATA"
1352 'name
1353 'prefixed-name
1354 'name-occur
1355 ?\()
1356 (cond ((eq xmltok-type 'hash-name)
1357 (xmltok-require-next-token ?| ?\) 'close-paren-star)
1358 (while (eq xmltok-type ?|)
1359 (xmltok-require-next-token 'name 'prefixed-name)
1360 (xmltok-require-next-token 'close-paren-star ?|)))
1361 (t (xmltok-parse-model-group))))
1362 (xmltok-require-next-token ?>))
1363
1364(defun xmltok-parse-model-group ()
1365 (xmltok-parse-model-group-member)
1366 (xmltok-require-next-token ?|
1367 ?,
1368 ?\)
1369 'close-paren-star
1370 'close-paren-occur)
1371 (when (memq xmltok-type '(?, ?|))
1372 (let ((connector xmltok-type))
1373 (while (progn
1374 (xmltok-next-prolog-token)
1375 (xmltok-parse-model-group-member)
1376 (xmltok-require-next-token connector
1377 ?\)
1378 'close-paren-star
1379 'close-paren-occur)
1380 (eq xmltok-type connector))))))
1381
1382(defun xmltok-parse-model-group-member ()
1383 (xmltok-require-token 'name
1384 'prefixed-name
1385 'name-occur
1386 ?\()
1387 (when (eq xmltok-type ?\()
1388 (xmltok-next-prolog-token)
1389 (xmltok-parse-model-group)))
1390
1391(defun xmltok-parse-entity-declaration ()
1392 (let (paramp name)
1393 (xmltok-require-next-token 'name ?%)
1394 (when (eq xmltok-type ?%)
1395 (setq paramp t)
1396 (xmltok-require-next-token 'name))
1397 (setq name (xmltok-current-token-string))
1398 (xmltok-require-next-token 'literal "SYSTEM" "PUBLIC")
1399 (cond ((eq xmltok-type 'literal)
1400 (let ((replacement (xmltok-parse-entity-value)))
1401 (unless paramp
1402 (xmltok-define-entity name replacement)))
1403 (xmltok-require-next-token ?>))
1404 (t
1405 (xmltok-parse-external-id)
1406 (if paramp
1407 (xmltok-require-token ?>)
1408 (xmltok-require-token ?> "NDATA")
1409 (if (eq xmltok-type ?>)
1410 (xmltok-define-entity name 'external)
1411 (xmltok-require-next-token 'name)
1412 (xmltok-require-next-token ?>)
1413 (xmltok-define-entity name 'unparsed)))))))
1414
1415(defun xmltok-define-entity (name value)
1416 (when (and (or (not xmltok-had-param-entity-ref)
1417 xmltok-standalone)
1418 (not (assoc name xmltok-dtd)))
1419 (setq xmltok-dtd
1420 (cons (cons name value) xmltok-dtd))))
1421
1422(defun xmltok-parse-entity-value ()
1423 (let ((lim (1- (point)))
1424 (well-formed t)
1425 value-parts
1426 start)
1427 (save-excursion
1428 (goto-char (1+ xmltok-start))
1429 (setq start (point))
1430 (while (progn
1431 (skip-chars-forward "^%&" lim)
1432 (when (< (point) lim)
1433 (goto-char (1+ (point)))
1434 (cond ((eq (char-before) ?%)
1435 (xmltok-add-error "Parameter entity references are not allowed in the internal subset"
1436 (1- (point))
1437 (point))
1438 (setq well-formed nil))
1439 (t
1440 (let ((xmltok-start (1- (point)))
1441 xmltok-type xmltok-replacement)
1442 (xmltok-scan-after-amp (lambda (start end)))
1443 (cond ((eq xmltok-type 'char-ref)
1444 (setq value-parts
1445 (cons (buffer-substring-no-properties
1446 start
1447 xmltok-start)
1448 value-parts))
1449 (setq value-parts
1450 (cons xmltok-replacement
1451 value-parts))
1452 (setq start (point)))
1453 ((eq xmltok-type 'not-well-formed)
1454 (setq well-formed nil))))))
1455 t))))
1456 (if (not well-formed)
1457 nil
1458 (apply 'concat
1459 (nreverse (cons (buffer-substring-no-properties start lim)
1460 value-parts))))))
1461
1462(defun xmltok-parse-notation-declaration ()
1463 (xmltok-require-next-token 'name)
1464 (xmltok-require-next-token "SYSTEM" "PUBLIC")
1465 (let ((publicp (string= (xmltok-current-token-string) "PUBLIC")))
1466 (xmltok-require-next-token 'literal)
1467 (cond (publicp
1468 (xmltok-require-next-token 'literal ?>)
1469 (unless (eq xmltok-type ?>)
1470 (xmltok-require-next-token ?>)))
1471 (t (xmltok-require-next-token ?>)))))
1472
1473(defun xmltok-parse-external-id ()
1474 (xmltok-require-token "SYSTEM" "PUBLIC")
1475 (let ((publicp (string= (xmltok-current-token-string) "PUBLIC")))
1476 (xmltok-require-next-token 'literal)
1477 (when publicp
1478 (xmltok-require-next-token 'literal)))
1479 (xmltok-next-prolog-token))
1480
1481(defun xmltok-require-next-token (&rest types)
1482 (xmltok-next-prolog-token)
1483 (apply 'xmltok-require-token types))
1484
1485(defun xmltok-require-token (&rest types)
1486 ;; XXX Generate a more helpful error message
1487 (while (and (not (let ((type (car types)))
1488 (if (stringp (car types))
1489 (string= (xmltok-current-token-string) type)
1490 (eq type xmltok-type))))
1491 (setq types (cdr types))))
1492 (unless types
1493 (when (and xmltok-type
1494 (not (eq xmltok-type 'not-well-formed)))
1495 (xmltok-add-error "Unexpected token"))
1496 (xmltok-markup-declaration-parse-error))
1497 (let ((region-type (xmltok-prolog-region-type (car types))))
1498 (when region-type
1499 (xmltok-add-prolog-region region-type
1500 xmltok-start
1501 (point)))))
1502
1503(defun xmltok-current-token-string ()
1504 (buffer-substring-no-properties xmltok-start (point)))
1505
1506(put 'xmltok-markup-declaration-parse-error
1507 'error-conditions
1508 '(error xmltok-markup-declaration-parse-error))
1509
1510(put 'xmltok-markup-declaration-parse-error
1511 'error-message
1512 "Syntax error in markup declaration")
1513
1514(defun xmltok-markup-declaration-parse-error ()
1515 (signal 'xmltok-markup-declaration-parse-error nil))
1516
1517(defun xmltok-skip-markup-declaration ()
1518 (while (cond ((eq xmltok-type ?>)
1519 (xmltok-next-prolog-token)
1520 nil)
1521 ((and xmltok-markup-declaration-doctype-flag
1522 (eq xmltok-type ?\[))
1523 (setq xmltok-internal-subset-start (point))
1524 (xmltok-next-prolog-token)
1525 nil)
1526 ((memq xmltok-type '(nil
1527 end-prolog
1528 named-markup-declaration
1529 comment
1530 processing-instruction))
1531 nil)
1532 ((and xmltok-internal-subset-start
1533 (eq xmltok-type 'internal-subset-close))
1534 nil)
1535 (t (xmltok-next-prolog-token) t)))
1536 xmltok-type)
1537
1538(defun xmltok-prolog-region-type (required)
1539 (cond ((cdr (assq xmltok-type
1540 '((literal . literal)
1541 (?> . markup-declaration-close)
1542 (?\[ . internal-subset-open)
1543 (hash-name . hash-name)))))
1544 ((and (stringp required) (eq xmltok-type 'name))
1545 'keyword)))
1546
1547;; Return new token type.
1548
1549(defun xmltok-next-prolog-token ()
1550 (skip-chars-forward " \t\r\n")
1551 (setq xmltok-start (point))
1552 (cond ((not (and (looking-at (xmltok-prolog regexp))
1553 (goto-char (match-end 0))))
1554 (let ((ch (char-after)))
1555 (cond (ch
1556 (goto-char (1+ (point)))
1557 (xmltok-add-error "Illegal char in prolog")
1558 (setq xmltok-type 'not-well-formed))
1559 (t (setq xmltok-type nil)))))
1560 ((or (xmltok-prolog start ncname-occur)
1561 (xmltok-prolog start colon-name-occur))
1562 (setq xmltok-name-end (1- (point)))
1563 (setq xmltok-name-colon (xmltok-prolog start colon))
1564 (setq xmltok-type 'name-occur))
1565 ((xmltok-prolog start colon)
1566 (setq xmltok-name-end (point))
1567 (setq xmltok-name-colon (xmltok-prolog start colon))
1568 (unless (looking-at "[ \t\r\n>),|[%]")
1569 (xmltok-add-error "Missing space after name"))
1570 (setq xmltok-type 'prefixed-name))
1571 ((or (xmltok-prolog start ncname-nmtoken)
1572 (xmltok-prolog start ncname-colon))
1573 (unless (looking-at "[ \t\r\n>),|[%]")
1574 (xmltok-add-error "Missing space after name token"))
1575 (setq xmltok-type 'nmtoken))
1576 ((xmltok-prolog start name)
1577 (setq xmltok-name-end (point))
1578 (setq xmltok-name-colon nil)
1579 (unless (looking-at "[ \t\r\n>),|[%]")
1580 (xmltok-add-error "Missing space after name"))
1581 (setq xmltok-type 'name))
1582 ((xmltok-prolog start hash-name)
1583 (setq xmltok-name-end (point))
1584 (unless (looking-at "[ \t\r\n>)|%]")
1585 (xmltok-add-error "Missing space after name"))
1586 (setq xmltok-type 'hash-name))
1587 ((xmltok-prolog start processing-instruction-question)
1588 (xmltok-scan-prolog-after-processing-instruction-open))
1589 ((xmltok-prolog start comment-open)
1590 ;; XXX if not-well-formed, ignore some stuff
1591 (xmltok-scan-after-comment-open))
1592 ((xmltok-prolog start named-markup-declaration)
1593 (setq xmltok-type 'named-markup-declaration))
1594 ((xmltok-prolog start instance-start)
1595 (goto-char xmltok-start)
1596 (setq xmltok-type 'end-prolog))
1597 ((xmltok-prolog start close-paren-star)
1598 (setq xmltok-type 'close-paren-star))
1599 ((xmltok-prolog start close-paren-occur)
1600 (setq xmltok-type 'close-paren-occur))
1601 ((xmltok-prolog start close-paren)
1602 (unless (looking-at "[ \t\r\n>,|)]")
1603 (xmltok-add-error "Missing space after )"))
1604 (setq xmltok-type ?\)))
1605 ((xmltok-prolog start single-char)
1606 (let ((ch (char-before)))
1607 (cond ((memq ch '(?\" ?\'))
1608 (xmltok-scan-prolog-literal))
1609 (t (setq xmltok-type ch)))))
1610 ((xmltok-prolog start percent)
1611 (cond ((xmltok-prolog start param-entity-ref-close)
1612 (setq xmltok-name-end (1- (point)))
1613 (setq xmltok-type 'param-entity-ref))
1614 ((xmltok-prolog start param-entity-ref)
1615 (xmltok-add-error "Missing ;")
1616 (setq xmltok-name-end (point))
1617 (setq xmltok-type 'param-entity-ref))
1618 ((looking-at "[ \t\r\n%]")
1619 (setq xmltok-type ?%))
1620 (t
1621 (xmltok-add-error "Expected name after %")
1622 (setq xmltok-type 'not-well-formed))))
1623 ((xmltok-prolog start nmtoken)
1624 (unless (looking-at "[ \t\r\n>),|[%]")
1625 (xmltok-add-error "Missing space after name token"))
1626 (setq xmltok-type 'nmtoken))
1627 ((xmltok-prolog start internal-subset-close)
1628 (setq xmltok-type 'internal-subset-close))
1629 ((xmltok-prolog start pound)
1630 (xmltok-add-error "Expected name after #")
1631 (setq xmltok-type 'not-well-formed))
1632 ((xmltok-prolog start markup-declaration)
1633 (xmltok-add-error "Expected name or -- after <!")
1634 (setq xmltok-type 'not-well-formed))
1635 ((xmltok-prolog start comment-first-dash)
1636 (xmltok-add-error "Expected <!--")
1637 (setq xmltok-type 'not-well-formed))
1638 ((xmltok-prolog start less-than)
1639 (xmltok-add-error "Incomplete markup")
1640 (setq xmltok-type 'not-well-formed))
1641 (t (error "Unhandled token in prolog %s"
1642 (match-string-no-properties 0)))))
1643
1644(defun xmltok-scan-prolog-literal ()
1645 (let* ((delim (string (char-before)))
1646 (safe-end (save-excursion
1647 (skip-chars-forward (concat "^<>[]" delim))
1648 (point)))
1649 (end (save-excursion
1650 (goto-char safe-end)
1651 (search-forward delim nil t))))
1652 (or (cond ((not end)
1653 (xmltok-add-dependent 'xmltok-unclosed-reparse-p
1654 nil
1655 nil
1656 delim)
1657 nil)
1658 ((save-excursion
1659 (goto-char end)
1660 (looking-at "[ \t\r\n>%[]"))
1661 (goto-char end)
1662 (setq xmltok-type 'literal))
1663 ((eq (1+ safe-end) end)
1664 (goto-char end)
1665 (xmltok-add-error (format "Missing space after %s" delim)
1666 safe-end)
1667 (setq xmltok-type 'literal))
1668 (t
1669 (xmltok-add-dependent 'xmltok-semi-closed-reparse-p
1670 xmltok-start
1671 (1+ end)
1672 delim
1673 1)
1674 nil))
1675 (progn
1676 (xmltok-add-error (format "Missing closing %s" delim))
1677 (goto-char safe-end)
1678 (skip-chars-backward " \t\r\n")
1679 (setq xmltok-type 'not-well-formed)))))
1680
1681(defun xmltok-scan-prolog-after-processing-instruction-open ()
1682 (cond ((not (search-forward "?>" nil t))
1683 (xmltok-add-error "No closing ?>"
1684 xmltok-start
1685 (+ xmltok-start 2))
1686 (xmltok-add-dependent 'xmltok-unclosed-reparse-p
1687 nil
1688 nil
1689 "?>")
1690 (setq xmltok-type 'not-well-formed))
1691 (t
1692 (let* ((end (point))
1693 (target
1694 (save-excursion
1695 (goto-char (+ xmltok-start 2))
1696 (and (looking-at (xmltok-ncname regexp))
1697 (or (memq (char-after (match-end 0))
1698 '(?\n ?\t ?\r ? ))
1699 (= (match-end 0) (- end 2)))
1700 (match-string-no-properties 0)))))
1701 (cond ((not target)
1702 (xmltok-add-error "\
1703Processing instruction does not start with a name"
1704 (+ xmltok-start 2)
1705 (+ xmltok-start 3)))
1706 ((not (and (= (length target) 3)
1707 (let ((case-fold-search t))
1708 (string-match "xml" target)))))
1709 ((= xmltok-start 1)
1710 (xmltok-add-error "Invalid XML declaration"
1711 xmltok-start
1712 (point)))
1713 ((save-excursion
1714 (goto-char xmltok-start)
1715 (looking-at (xmltok-xml-declaration regexp)))
1716 (xmltok-add-error "XML declaration not at beginning of file"
1717 xmltok-start
1718 (point)))
1719 (t
1720 (xmltok-add-error "Processing instruction has target of xml"
1721 (+ xmltok-start 2)
1722 (+ xmltok-start 5))))
1723 (xmltok-add-prolog-region 'processing-instruction-left
1724 xmltok-start
1725 (+ xmltok-start
1726 2
1727 (if target
1728 (length target)
1729 0)))
1730 (xmltok-add-prolog-region 'processing-instruction-right
1731 (if target
1732 (save-excursion
1733 (goto-char (+ xmltok-start
1734 (length target)
1735 2))
1736 (skip-chars-forward " \t\r\n")
1737 (point))
1738 (+ xmltok-start 2))
1739 (point)))
1740 (setq xmltok-type 'processing-instruction))))
1741
1742(defun xmltok-parse-entities ()
1743 (let ((todo xmltok-dtd))
1744 (when (and (or xmltok-had-param-entity-ref
1745 xmltok-doctype-external-subset-flag)
1746 (not xmltok-standalone))
1747 (setq xmltok-dtd (cons t xmltok-dtd)))
1748 (while todo
1749 (xmltok-parse-entity (car todo))
1750 (setq todo (cdr todo)))))
1751
1752(defun xmltok-parse-entity (name-def)
1753 (let ((def (cdr name-def))
1754 ;; in case its value is buffer local
1755 (xmltok-dtd xmltok-dtd)
1756 buf)
1757 (when (stringp def)
1758 (if (string-match "\\`[^&<\t\r\n]*\\'" def)
1759 (setcdr name-def (cons def def))
1760 (setcdr name-def 'not-well-formed) ; avoid infinite expansion loops
1761 (setq buf (get-buffer-create
1762 (format " *Entity %s*" (car name-def))))
1763 (save-excursion
1764 (set-buffer buf)
1765 (erase-buffer)
1766 (insert def)
1767 (goto-char (point-min))
1768 (setcdr name-def
1769 (xmltok-parse-entity-replacement)))
1770 (kill-buffer buf)))))
1771
1772(defun xmltok-parse-entity-replacement ()
1773 (let ((def (cons "" "")))
1774 (while (let* ((start (point))
1775 (found (re-search-forward "[<&\t\r\n]\\|]]>" nil t))
1776 (ch (and found (char-before)))
1777 (str (buffer-substring-no-properties
1778 start
1779 (if found
1780 (match-beginning 0)
1781 (point-max)))))
1782 (setq def
1783 (xmltok-append-entity-def def
1784 (cons str str)))
1785 (cond ((not found) nil)
1786 ((eq ch ?>)
1787 (setq def 'not-well-formed)
1788 nil)
1789 ((eq ch ?<)
1790 (xmltok-save
1791 (setq xmltok-start (1- (point)))
1792 (xmltok-scan-after-lt)
1793 (setq def
1794 (xmltok-append-entity-def
1795 def
1796 (cond ((memq xmltok-type
1797 '(start-tag
1798 end-tag
1799 empty-element))
1800 'element)
1801 ((memq xmltok-type
1802 '(comment
1803 processing-instruction))
1804 (cons "" nil))
1805 ((eq xmltok-type
1806 'cdata-section)
1807 (cons (buffer-substring-no-properties
1808 (+ xmltok-start 9)
1809 (- (point) 3))
1810 nil))
1811 (t 'not-well-formed)))))
1812 t)
1813 ((eq ch ?&)
1814 (let ((xmltok-start (1- (point)))
1815 xmltok-type
1816 xmltok-replacement
1817 xmltok-errors)
1818 (xmltok-scan-after-amp 'xmltok-handle-nested-entity)
1819 (cond ((eq xmltok-type 'entity-ref)
1820 (setq def
1821 (xmltok-append-entity-def
1822 def
1823 xmltok-replacement)))
1824 ((eq xmltok-type 'char-ref)
1825 (setq def
1826 (xmltok-append-entity-def
1827 def
1828 (if xmltok-replacement
1829 (cons xmltok-replacement
1830 xmltok-replacement)
1831 (and xmltok-errors 'not-well-formed)))))
1832 (t
1833 (setq def 'not-well-formed))))
1834 t)
1835 (t
1836 (setq def
1837 (xmltok-append-entity-def
1838 def
1839 (cons (match-string-no-properties 0)
1840 " ")))
1841 t))))
1842 def))
1843
1844(defun xmltok-handle-nested-entity (start end)
1845 (let* ((name-def (assoc (buffer-substring-no-properties start end)
1846 xmltok-dtd))
1847 (def (cdr name-def)))
1848 (when (stringp def)
1849 (xmltok-parse-entity name-def)
1850 (setq def (cdr name-def)))
1851 (setq xmltok-replacement
1852 (cond ((null name-def)
1853 (if (eq (car xmltok-dtd) t)
1854 nil
1855 'not-well-formed))
1856 ((eq def 'unparsed) 'not-well-formed)
1857 (t def)))))
1858
1859(defun xmltok-append-entity-def (d1 d2)
1860 (cond ((consp d1)
1861 (if (consp d2)
1862 (cons (concat (car d1) (car d2))
1863 (and (cdr d1)
1864 (cdr d2)
1865 (concat (cdr d1) (cdr d2))))
1866 d2))
1867 ((consp d2) d1)
1868 (t
1869 (let ((defs '(not-well-formed external element)))
1870 (while (not (or (eq (car defs) d1)
1871 (eq (car defs) d2)))
1872 (setq defs (cdr defs)))
1873 (car defs)))))
1874
1875(defun xmltok-add-prolog-region (type start end)
1876 (setq xmltok-prolog-regions
1877 (cons (vector type start end)
1878 xmltok-prolog-regions)))
1879
1880(defun xmltok-merge-attributes ()
1881 "Return a list merging `xmltok-attributes' and 'xmltok-namespace-attributes'.
1882The members of the merged list are in order of occurrence in the
1883document. The list may share list structure with `xmltok-attributes'
1884and `xmltok-namespace-attributes'."
1885 (cond ((not xmltok-namespace-attributes)
1886 xmltok-attributes)
1887 ((not xmltok-attributes)
1888 xmltok-namespace-attributes)
1889 (t
1890 (let ((atts1 xmltok-attributes)
1891 (atts2 xmltok-namespace-attributes)
1892 merged)
1893 (while (and atts1 atts2)
1894 (cond ((< (xmltok-attribute-name-start (car atts1))
1895 (xmltok-attribute-name-start (car atts2)))
1896 (setq merged (cons (car atts1) merged))
1897 (setq atts1 (cdr atts1)))
1898 (t
1899 (setq merged (cons (car atts2) merged))
1900 (setq atts2 (cdr atts2)))))
1901 (setq merged (nreverse merged))
1902 (cond (atts1 (setq merged (nconc merged atts1)))
1903 (atts2 (setq merged (nconc merged atts2))))
1904 merged))))
1905
1906;;; Testing
1907
1908(defun xmltok-forward-test ()
1909 (interactive)
1910 (if (xmltok-forward)
1911 (message "Scanned %s" xmltok-type)
1912 (message "Scanned nothing")))
1913
1914(defun xmltok-next-prolog-token-test ()
1915 (interactive)
1916 (if (xmltok-next-prolog-token)
1917 (message "Scanned %s"
1918 (if (integerp xmltok-type)
1919 (string xmltok-type)
1920 xmltok-type))
1921 (message "Scanned end of file")))
1922
1923(provide 'xmltok)
1924
1925;;; xmltok.el ends here
diff --git a/lisp/nxml/xsd-regexp.el b/lisp/nxml/xsd-regexp.el
new file mode 100644
index 00000000000..3f12c5576a6
--- /dev/null
+++ b/lisp/nxml/xsd-regexp.el
@@ -0,0 +1,2121 @@
1;;; xsd-regexp.el --- translate W3C XML Schema regexps to Emacs regexps
2
3;; Copyright (C) 2003 Free Software Foundation, Inc.
4
5;; Author: James Clark
6;; Keywords: XML, regexp
7
8;; This program is free software; you can redistribute it and/or
9;; modify it under the terms of the GNU General Public License as
10;; published by the Free Software Foundation; either version 2 of
11;; the License, or (at your option) any later version.
12
13;; This program is distributed in the hope that it will be
14;; useful, but WITHOUT ANY WARRANTY; without even the implied
15;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16;; PURPOSE. See the GNU General Public License for more details.
17
18;; You should have received a copy of the GNU General Public
19;; License along with this program; if not, write to the Free
20;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21;; MA 02111-1307 USA
22
23;;; Commentary:
24
25;; This handles the regular expressions in the syntax defined by:
26;; W3C XML Schema Part 2: Datatypes
27;; <http://www.w3.org/TR/xmlschema-2/#regexs>
28;;
29;; The main entry point is `xsdre-translate'.
30;;
31;; The features of XSD regexps that make this non-trivial are:
32;;
33;; - \p{PROP} escape for matching characters that have various
34;; Unicode-defined properties
35;; - character class subtraction:, e.g. [\p{L}-[abc]] matches
36;; any character in the L category other than a, b and c.
37;;
38;; We compute the set of Unicode characters denoted by each XSD
39;; char-class as a list of ranges. The regexp generated for a
40;; single escape can be large (several thousand characters).
41;;
42;; XSD has non-traditional rules about when characters must be
43;; and can be quoted with \. These are quite different from
44;; the Emacs rules.
45;;
46;; The semantics of XSD regexps are defined in terms of Unicode.
47;; Non-Unicode characters are not allowed in regular expressions and
48;; will not match against the generated regular expressions. A
49;; Unicode character means a character in one of the Mule charsets
50;; ascii, latin-iso8859-1, mule-unicode-0100-24ff,
51;; mule-unicode-2500-33ff, mule-unicode-e000-ffff, eight-bit-control
52;; or a character translateable to such a character (i.e a character
53;; for which `encode-char' will return non-nil).
54;;
55;; Using unify-8859-on-decoding-mode is probably a good idea here
56;; (and generally with XML and other Unicode-oriented formats).
57;;
58;; Unfortunately, this means that this package is currently useless
59;; for CJK characters, since there's no mule-unicode charset for the
60;; CJK ranges of Unicode. We should devise a workaround for this
61;; until the fabled Unicode version of Emacs makes an appearance.
62
63;;; Code:
64
65(defun xsdre-translate (regexp)
66 "Translate a W3C XML Schema Datatypes regexp to an Emacs regexp.
67Returns a string. REGEXP is a string. If REGEXP is not a valid XSD
68regexp, signal an `xsdre-invalid-regexp' condition."
69 (xsdre-from-symbolic
70 (xsdre-to-symbolic regexp)))
71
72(defvar xsdre-test-history nil)
73
74(defun xsdre-test-regexp ()
75 (interactive)
76 (while
77 (let* ((str (read-from-minibuffer "Regexp: "
78 nil
79 nil
80 nil
81 'xsdre-test-history))
82 (symbolic
83 (xsdre-to-symbolic str)))
84 (with-output-to-temp-buffer "*XSD Regexp Test*"
85 (princ "XSD regexp: ")
86 (princ str)
87 (princ "\n")
88 (princ "Symbolic: ")
89 (princ "\n")
90 (pp symbolic)
91 (princ "\n")
92 (princ "Emacs regexp: ")
93 (princ (xsdre-from-symbolic symbolic)))
94 t)))
95
96;;; Range lists
97
98(defsubst xsdre-make-range (first last)
99 "Return a representation of a range of integers.
100If the range contains a single integer, it is represented by that integer.
101Otherwise, it is represented by a (FIRST . LAST) pair."
102 (if (= first last)
103 first
104 (cons first last)))
105
106(defsubst xsdre-range-first (r)
107 "Return the first integer in a range."
108 (if (consp r) (car r) r))
109
110(defsubst xsdre-range-last (r)
111 "Return the last integer in a range."
112 (if (consp r) (cdr r) r))
113
114(defun xsdre-make-range-list (list)
115 "Make a range-list from a list of ranges.
116A range-list represents a set of integers by a list of ranges in a
117canonical form, in which ranges are in increasing order, and adjacent
118ranges are merged wherever possible."
119 (when list
120 (setq list
121 (sort list 'xsdre-range-less-than))
122 (let* ((next (cdr list))
123 (tail list)
124 (head (car list))
125 (first (xsdre-range-first head))
126 (last (xsdre-range-last head)))
127 (while next
128 (setq head (car next))
129 (when (> (xsdre-range-last head) last)
130 (if (<= (xsdre-range-first head) (1+ last))
131 (setq last (xsdre-range-last head))
132 (setcar tail (xsdre-make-range first last))
133 (setcdr tail next)
134 (setq tail next)
135 (setq first (xsdre-range-first head))
136 (setq last (xsdre-range-last head))))
137 (setq next (cdr next)))
138 (setcar tail (xsdre-make-range first last))
139 (setcdr tail nil)
140 list)))
141
142
143(defun xsdre-range-list-union (range-lists)
144 "Return a range-list the union of a list of range-lists."
145 (xsdre-make-range-list (apply 'append range-lists)))
146
147(defun xsdre-range-list-difference (orig subtract)
148 "Return a range-list for the difference of two range-lists."
149 (when orig
150 (let (new head next first last)
151 (while orig
152 (setq head (car orig))
153 (setq first (xsdre-range-first head))
154 (setq last (xsdre-range-last head))
155 (while (and subtract
156 (< (xsdre-range-last (car subtract)) first))
157 (setq subtract (cdr subtract)))
158 (while (and subtract
159 (<= first last)
160 (<= (xsdre-range-first (car subtract)) last))
161 (when (< first (xsdre-range-first (car subtract)))
162 (setq new
163 (cons (xsdre-make-range
164 first
165 (1- (xsdre-range-first (car subtract))))
166 new)))
167 (if (< (xsdre-range-last (car subtract)) last)
168 (progn
169 (setq first (1+ (xsdre-range-last (car subtract))))
170 (setq subtract (cdr subtract)))
171 (setq first (1+ last))))
172 (when (<= first last)
173 (setq new (cons (xsdre-make-range first last) new)))
174 (setq orig (cdr orig)))
175 (nreverse new))))
176
177(defun xsdre-range-less-than (r1 r2)
178 "Return non-nil if range R1 is less than range R2."
179 (or (< (xsdre-range-first r1) (xsdre-range-first r2))
180 (and (= (xsdre-range-first r1) (xsdre-range-first r2))
181 (< (xsdre-range-last r1) (xsdre-range-last r2)))))
182
183(defun xsdre-check-range-list (range-list)
184 "Check that range-list is a range-list.
185Signal an error if it is not."
186 (let ((last nil))
187 (while range-list
188 (unless (consp range-list)
189 (error "Range list not a list"))
190 (let ((head (car range-list)))
191 (unless (or (integerp head)
192 (and (consp head)
193 (integerp (car head))
194 (integerp (cdr head))))
195 (error "Bad range %s" head))
196 (when (and last
197 (not (< (1+ last) (xsdre-range-first head))))
198 (error "Ranges not strictly increasing"))
199 (setq last (xsdre-range-last head)))
200 (setq range-list (cdr range-list))))
201 t)
202
203;;; Compiling symbolic regexps to Emacs regexps
204
205(defun xsdre-from-symbolic (re)
206 "Return an Emacs regexp for the symbolic regexp RE."
207 (apply 'concat
208 (nreverse (xsdre-compile-regexp re nil))))
209
210(defun xsdre-compile-regexp (re accum)
211 "Return a Emacs regular expression for the symbolic regexp RE.
212Returns a list of strings whose head is the regexp for RE
213and whose tail is ACCUM."
214 (cond ((not (consp re))
215 (xsdre-compile-char-class re accum))
216 ((eq (car re) 'choice)
217 (setq accum (cons "\\(?:" accum))
218 (let ((choices (cdr re)))
219 (while choices
220 (setq accum
221 (xsdre-compile-regexp (car choices)
222 accum))
223 (setq choices (cdr choices))
224 (when choices
225 (setq accum
226 (cons "\\|" accum)))))
227 (cons "\\)" accum))
228 ((eq (car re) 'sequence)
229 (let ((members (cdr re)))
230 (while members
231 (setq accum (xsdre-compile-regexp (car members)
232 accum))
233 (setq members (cdr members))))
234 accum)
235 ((eq (car re) 'repeat)
236 (let* ((sub (nth 1 re))
237 (lower (nth 2 re))
238 (upper (nth 3 re))
239 (need-paren (and (consp sub)
240 (eq (car sub) 'sequence))))
241 (when need-paren
242 (setq accum (cons "\\(?:" accum)))
243 (setq accum
244 (xsdre-compile-regexp sub accum))
245 (when need-paren
246 (setq accum (cons "\\)" accum)))
247 (cond ((not upper)
248 (cond ((eq lower 0)
249 (cons "*" accum))
250 ((eq lower 1)
251 (cons "+" accum))
252 (t
253 (cons (concat "\\{"
254 (number-to-string lower)
255 ",\\}")
256 accum))))
257 ((eq lower upper)
258 (cons (concat "\\{"
259 (number-to-string lower)
260 "\\}")
261 accum))
262 ((and (eq lower 0) (eq upper 1))
263 (cons "?" accum))
264 (t
265 (cons (concat "\\{"
266 (number-to-string lower)
267 ","
268 (number-to-string upper)
269 "\\}")
270 accum)))))
271 (t (xsdre-compile-char-class re accum))))
272
273(defun xsdre-compile-char-class (cc accum)
274 "Return a Emacs regular expression for the symbolic character class CC.
275Returns a list of strings whose head is the regexp for CC
276and whose tail is ACCUM."
277 (cons (if (integerp cc)
278 (xsdre-compile-single-char cc)
279 (let ((ranges (xsdre-range-list-mule-intersection
280 (xsdre-char-class-to-range-list cc))))
281 (cond ((null ranges) "\001-\000")
282 ((and (null (cdr ranges))
283 (= (xsdre-range-first (car ranges))
284 (xsdre-range-last (car ranges))))
285 (xsdre-compile-single-char
286 (xsdre-range-first (car ranges))))
287 (t (xsdre-range-list-to-char-alternative ranges)))))
288 accum))
289
290(defun xsdre-compile-single-char (ch)
291 (if (memq ch '(?. ?* ?+ ?? ?\[ ?\] ?^ ?$ ?\\))
292 (string ?\\ ch)
293 (string (decode-char 'ucs ch))))
294
295(defun xsdre-char-class-to-range-list (cc)
296 "Return a range-list for a symbolic char-class."
297 (cond ((integerp cc) (list cc))
298 ((symbolp cc)
299 (or (get cc 'xsdre-ranges)
300 (xsdre-char-class-to-range-list (get cc 'xsdre-char-class))))
301 ((integerp (car cc))
302 (if (= (car cc) (cdr cc))
303 (car cc)
304 cc))
305 ((eq (car cc) 'union)
306 (xsdre-range-list-union (mapcar 'xsdre-char-class-to-range-list
307 (cdr cc))))
308 ((eq (car cc) 'difference)
309 (xsdre-range-list-difference
310 (xsdre-char-class-to-range-list (nth 1 cc))
311 (xsdre-char-class-to-range-list (nth 2 cc))))
312 ((eq (car cc) 'range)
313 (list (xsdre-make-range (nth 1 cc) (nth 2 cc))))
314 (t (error "Internal error in XSD regexp compilation: \
315unknown char-class %s" cc))))
316
317(defconst xsdre-mule-char-set-ranges
318 '((0 . 127)
319 (128 . 159)
320 (160 . 255)
321 (#x0100 . #x24ff)
322 (#x2500 . #x33ff)
323 (#xe000 . #xffff))
324 "List of ranges for the Mule character sets containing Unicode characters.")
325
326(defun xsdre-range-list-mule-intersection (range-list)
327 "Return the intersection of RANGE-LIST with the mule-supported ranges.
328Also split ranges so that no range spans more that one mule charset."
329 (when range-list
330 (let* ((char-set-ranges (cdr xsdre-mule-char-set-ranges))
331 (mule-ranges nil)
332 (char-set-first (caar xsdre-mule-char-set-ranges))
333 (char-set-last (cdar xsdre-mule-char-set-ranges))
334 (range (car range-list))
335 (first (xsdre-range-first range))
336 (last (xsdre-range-last range)))
337 (setq range-list (cdr range-list))
338 (while (progn
339 (cond ((> first last)
340 (if (null range-list)
341 nil
342 (setq range (car range-list))
343 (setq first (xsdre-range-first range))
344 (setq last (xsdre-range-last range))
345 (setq range-list (cdr range-list))
346 t))
347 ((< char-set-last first)
348 (if (null char-set-ranges)
349 nil
350 (setq char-set-first (caar char-set-ranges))
351 (setq char-set-last (cdar char-set-ranges))
352 (setq char-set-ranges (cdr char-set-ranges))
353 t))
354 ((< first char-set-first)
355 (setq first char-set-first))
356 ;; Now we know that
357 ;; first <= last
358 ;; first <= char-set-last
359 ;; first >= char-set-first
360 ((<= last char-set-last)
361 (setq mule-ranges
362 (cons (xsdre-make-range first last)
363 mule-ranges))
364 (setq first (1+ last))
365 t)
366 (t
367 (setq mule-ranges
368 (cons (xsdre-make-range first char-set-last)
369 mule-ranges))
370 (setq first (1+ char-set-last))
371 t))))
372 (nreverse mule-ranges))))
373
374(defun xsdre-range-list-to-char-alternative (range-list)
375 "Return a char alternative for a range-list.
376RANGE-LIST must contain more than integer.
377The char alternative is a string containing an Emacs regexp
378consisting of a single char alternative delimited with []."
379 (let (range caret close-bracket hyphen chars first last)
380 (while range-list
381 (setq range (car range-list))
382 (setq first (xsdre-range-first range))
383 (setq last (xsdre-range-last range))
384 (while (and (cond ((eq first ?^)
385 (setq caret t)
386 (setq first (1+ first)))
387 ((eq first ?-)
388 (setq hyphen t)
389 (setq first (1+ first)))
390 ((eq first ?\])
391 (setq close-bracket t)
392 (setq first (1+ first))))
393 (<= first last)))
394 (when (<= first last)
395 (setq chars
396 (cons first chars))
397 (when (< first last)
398 (setq chars
399 (if (and (eq last (1+ first))
400 (not (eq last ?-)))
401 (cons last chars)
402 (cons last (cons ?- chars))))))
403 (setq range-list (cdr range-list)))
404 (setq chars
405 (mapcar (lambda (c)
406 (decode-char 'ucs c))
407 chars))
408 (when caret
409 (setq chars (cons ?^ chars)))
410 (when hyphen
411 (setq chars (cons ?- chars)))
412 (setq chars (cons ?\] chars))
413 (setq chars (nreverse chars))
414 (when close-bracket
415 (setq chars (cons ?\] chars)))
416 (when (equal chars '(?^ ?- ?\]))
417 (setq chars '(?- ?^ ?\])))
418 (setq chars (cons ?\[ chars))
419 (apply 'string chars)))
420
421;;; Parsing
422
423(defvar xsdre-current-regexp nil
424 "List of characters remaining to be parsed. Dynamically bound.")
425
426(defun xsdre-to-symbolic (str)
427 "Convert a W3C XML Schema datatypes regexp to a symbolic form.
428
429The symbolic form has the following structure:
430
431REGEXP ::=
432 (sequence REGEXP ...)
433 | (choice REGEXP ...)
434 | (repeat REGEXP MIN MAX)
435 | CHAR-CLASS
436
437CHAR-CLASS ::=
438 CHAR
439 | SYMBOLIC-CHAR-CLASS
440 | RANGE
441 | (union CHAR-CLASS ...)
442 | (difference CHAR-CLASS CHAR-CLASS)
443
444RANGE ::= (range LOWER UPPER)
445
446MIN ::= INTEGER
447MAX ::= INTEGER | nil
448CHAR ::= UNICODE
449LOWER ::= UNICODE
450UPPER ::= UNICODE
451SYMBOLIC-CHAR-CLASS ::= SYMBOL
452
453where UNICODE is a integer specifying a Unicode code-point and
454SYMBOLIC-CHAR-CLASS is a symbol which has either a `xsdre-char-class'
455property whose value is a CHAR-CLASS, or a `xsdre-ranges' property
456whose value is a range-list."
457 (let ((xsdre-current-regexp (string-to-list str)))
458 (condition-case err
459 (let ((symbolic (xsdre-parse-regexp)))
460 (if xsdre-current-regexp
461 (xsdre-parse-error "Unexpected %c" (car xsdre-current-regexp))
462 symbolic))
463 (xsdre-parse-error
464 (signal 'xsdre-invalid-regexp
465 (list (apply 'format (cdr err))
466 (- (length str)
467 (length xsdre-current-regexp))))))))
468
469(put 'xsdre-invalid-regexp
470 'error-conditions
471 '(error xsdre-invalid-regexp))
472
473(put 'xsdre-invalid-regexp
474 'error-message
475 "Invalid W3C XML Schema Datatypes regular expression")
476
477(defun xsdre-parse-regexp ()
478 (let ((branches nil))
479 (while (progn
480 (setq branches (cons (xsdre-parse-branch) branches))
481 (when (eq (car xsdre-current-regexp) ?|)
482 (xsdre-advance)
483 t)))
484 (if (null (cdr branches))
485 (car branches)
486 (cons 'choice (nreverse branches)))))
487
488(defun xsdre-parse-branch ()
489 (let (items)
490 (while (let ((item (xsdre-try-parse-atom)))
491 (when item
492 (let ((quantifier (xsdre-try-parse-quantifier)))
493 (when quantifier
494 (setq item
495 (list 'repeat
496 item
497 (car quantifier)
498 (cdr quantifier)))))
499 (setq items (cons item items)))))
500 (cond ((null items) '(sequence))
501 ((null (cdr items)) (car items))
502 (t (cons 'sequence (nreverse items))))))
503
504(defun xsdre-try-parse-quantifier ()
505 (let ((ch (car xsdre-current-regexp)))
506 (cond ((eq ch ?*) (xsdre-advance) '(0 . nil))
507 ((eq ch ?+) (xsdre-advance) '(1 . nil))
508 ((eq ch ??) (xsdre-advance) '(0 . 1))
509 ((eq ch ?{)
510 (xsdre-advance)
511 (let ((lower (xsdre-parse-bound)))
512 (setq ch (car xsdre-current-regexp))
513 (cond ((eq ch ?})
514 (xsdre-advance)
515 (cons lower lower))
516 ((eq ch ?,)
517 (xsdre-advance)
518 (cond ((eq (car xsdre-current-regexp) ?})
519 (xsdre-advance)
520 (cons lower nil))
521 (t
522 (let ((upper (xsdre-parse-bound)))
523 (xsdre-expect ?})
524 (cons lower upper)))))
525 (t (xsdre-parse-error "Expected , or }")))))
526 (t nil))))
527
528(defun xsdre-parse-bound ()
529 (let ((n 0))
530 (while (progn
531 (let* ((ch (car xsdre-current-regexp))
532 (digit (memq ch '(?9 ?8 ?7 ?6 ?5 ?4 ?3 ?2 ?1 ?0))))
533 (unless digit
534 (xsdre-parse-error "Expected a digit"))
535 (setq n (+ (* n 10)
536 (length (cdr digit)))))
537 (xsdre-advance)
538 (not (memq (car xsdre-current-regexp) '(?} ?,)))))
539 n))
540
541
542(defun xsdre-try-parse-atom ()
543 (let ((ch (car xsdre-current-regexp)))
544 (cond ((memq ch '(nil ?? ?* ?+ ?\) ?\{ ?\} ?| ?\])) nil)
545 ((eq ch ?\\)
546 (xsdre-advance)
547 (xsdre-parse-escape))
548 ((eq ch ?\()
549 (xsdre-advance)
550 (let ((ret (xsdre-parse-regexp)))
551 (xsdre-expect ?\))
552 ret))
553 ((eq ch ?\[)
554 (xsdre-parse-char-class))
555 ((eq ch ?.)
556 (xsdre-advance)
557 'dot)
558 (t
559 (let ((uc (encode-char ch 'ucs)))
560 (unless uc
561 (xsdre-parse-error "%c is not a Unicode character" ch))
562 (xsdre-advance) uc)))))
563
564(defun xsdre-parse-char-class ()
565 (xsdre-advance)
566 (let (compl members ret)
567 (when (eq (car xsdre-current-regexp) ?^)
568 (setq compl t)
569 (xsdre-advance))
570 (while (let ((member (xsdre-parse-char-class-member))
571 uc1 uc2)
572 (cond ((eq (car xsdre-current-regexp) ?\-)
573 (xsdre-advance)
574 (cond ((eq (car xsdre-current-regexp) ?\[)
575 (setq members (cons member members))
576 nil)
577 ((not (integerp member))
578 (xsdre-parse-error "Lower bound is not a single character"))
579 ((not (setq uc1
580 (encode-char member 'ucs)))
581 (xsdre-parse-error "Lower bound %c is not a Unicode character"
582 member))
583 (t
584 (let ((upper (xsdre-parse-char-class-member)))
585 (unless (integerp upper)
586 (xsdre-parse-error "Upper bound is not a single character"))
587 (unless (setq uc2
588 (encode-char upper 'ucs))
589 (xsdre-parse-error "Upper bound %c is not a Unicode character" upper))
590 (setq members
591 (cons (list 'range uc1 uc2)
592 members)))
593 (not (eq (car xsdre-current-regexp) ?\])))))
594 (t (setq members (cons member members))
595 (not (eq (car xsdre-current-regexp) ?\]))))))
596 (setq members (nreverse members))
597 (if (null (cdr members))
598 (setq ret (car members))
599 (setq ret (cons 'union members)))
600 (when compl
601 (setq ret (list 'difference 'any ret)))
602 (when (eq (car xsdre-current-regexp) ?\[)
603 (setq ret
604 (list 'difference ret (xsdre-parse-char-class))))
605 (xsdre-expect ?\])
606 ret))
607
608(defun xsdre-parse-char-class-member ()
609 (let ((ch (car xsdre-current-regexp)))
610 (cond ((null ch)
611 (xsdre-parse-error "Expected ]"))
612 ((eq ch ?\\)
613 (xsdre-advance)
614 (xsdre-parse-escape))
615 ((memq ch '(?\[ ?\] ?-))
616 (xsdre-parse-error "%c must be quoted in a character class" ch))
617 (t (xsdre-advance) ch))))
618
619(defconst xsdre-single-escape
620 '((?s . space)
621 (?i . name-initial)
622 (?c . name-continue)
623 (?d . digit)
624 (?w . word)))
625
626(defun xsdre-parse-escape ()
627 (let ((ch (car xsdre-current-regexp)))
628 (xsdre-advance)
629 (cond ((memq ch '(?\\ ?| ?. ?- ?^ ?* ?+ ?( ?) ?{ ?} ?[ ?])) ch)
630 ((eq ch ?r) ?\r)
631 ((eq ch ?n) ?\n)
632 ((eq ch ?t) ?\t)
633 ((cdr (assq ch xsdre-single-escape)))
634 ((let ((positive
635 (cdr (assq (downcase ch) xsdre-single-escape))))
636 (and positive
637 (list 'difference 'any positive))))
638 ((eq ch ?p) (xsdre-parse-prop))
639 ((eq ch ?P) (list 'difference 'any (xsdre-parse-prop)))
640 (t (if ch
641 (xsdre-parse-error "Missing char after \\")
642 (xsdre-parse-error "Bad escape %c" ch))))))
643
644(defun xsdre-parse-prop ()
645 (xsdre-expect ?{)
646 (let ((name nil))
647 (while (not (eq (car xsdre-current-regexp) ?\}))
648 (unless xsdre-current-regexp
649 (xsdre-parse-error "Expected ?"))
650 (setq name (cons (car xsdre-current-regexp)
651 name))
652 (xsdre-advance))
653 (xsdre-advance)
654 (setq name (nreverse name))
655 (cond ((null name) (xsdre-parse-error "Empty property name"))
656 ((null (cdr name))
657 (let ((category (intern (string (car name)))))
658 (unless (get category 'xsdre-unicode-category)
659 (xsdre-parse-error "%s is not a category" category))
660 category))
661 ((null (cddr name))
662 (let ((category (intern (string (car name) (cadr name)))))
663 (unless (get category 'xsdre-unicode-category)
664 (xsdre-parse-error "%s is not a category" category))
665 category))
666 ((not (and (eq (car name) ?I)
667 (eq (cadr name) ?s)))
668 (xsdre-parse-error "Block name does not start with Is"))
669 (t
670 (let ((block (intern (apply 'string (cddr name)))))
671 (unless (get block 'xsdre-unicode-block)
672 (xsdre-parse-error "%s is not a block name" block))
673 block)))))
674
675(defun xsdre-expect (ch)
676 (if (eq (car xsdre-current-regexp) ch)
677 (xsdre-advance)
678 (xsdre-parse-error "Expected %c" ch)))
679
680(defun xsdre-advance ()
681 (setq xsdre-current-regexp
682 (cdr xsdre-current-regexp)))
683
684(defun xsdre-parse-error (&rest args)
685 (signal 'xsdre-parse-error args))
686
687;; This error condition is used only internally.
688
689(put 'xsdre-parse-error
690 'error-conditions
691 '(error xsdre-parse-error))
692
693(put 'xsdre-parse-error
694 'error-message
695 "Internal error in parsing XSD regexp")
696
697;;; Character class data
698
699(put 'dot 'xsdre-char-class '(difference any (union #xA #xD)))
700(put 'digit 'xsdre-char-class 'Nd)
701(put 'word 'xsdre-char-class '(difference any (union P Z C)))
702(put 'space 'xsdre-char-class '(union #x9 #xA #xD #x20))
703(put 'any 'xsdre-ranges '((#x0 . #x10FFFF)))
704
705(defconst xsdre-gen-categories
706 '(Lu Ll Lt Lm Lo Mn Mc Me Nd Nl No Pc Pd
707 Ps Pe Pi Pf Po Zs Zl Zp Sm Sc Sk So Cc Cf Co))
708
709(defun xsdre-gen-categories (file)
710 "Use a UnicodeData file to generate code to initialize Unicode categories.
711Code is inserted into the current buffer."
712 (interactive "fUnicodeData file: ")
713 (save-excursion
714 (set-buffer (find-file-noselect file))
715 (goto-char (point-min))
716 (mapcar (lambda (x) (put x 'xsdre-ranges nil)) xsdre-gen-categories)
717 (while (re-search-forward "^\\([0-9A-Fa-f]*\\);[^;]*;\\([A-Z][a-z]\\);"
718 nil
719 t)
720 (let* ((sym (intern (match-string-no-properties 2)))
721 (code (string-to-number (match-string-no-properties 1)
722 16))
723 (ranges (get sym 'xsdre-ranges))
724 (last-range (car ranges))
725 (forced-range (string= (buffer-substring-no-properties
726 (- (match-beginning 2) 6)
727 (1- (match-beginning 2)))
728 "Last>")))
729 (cond ((and (integerp last-range)
730 (or forced-range
731 (eq code (1+ last-range))))
732 (put sym
733 'xsdre-ranges
734 (cons (cons last-range code)
735 (cdr ranges))))
736 ((and (consp last-range)
737 (or forced-range
738 (eq code (1+ (cdr last-range)))))
739 (put sym
740 'xsdre-ranges
741 (cons (cons (car last-range) code)
742 (cdr ranges))))
743 (t
744 (put sym 'xsdre-ranges (cons code ranges))))))
745 (mapcar (lambda (x)
746 (put x
747 'xsdre-ranges
748 (nreverse (get x 'xsdre-ranges)))
749 nil)
750 xsdre-gen-categories))
751 (mapcar (lambda (x)
752 (let ((start (point)))
753 (pp (list 'xsdre-def-primitive-category
754 (list 'quote x)
755 (list 'quote (get x 'xsdre-ranges)))
756 (current-buffer))
757 (save-excursion
758 (goto-char start)
759 (down-list 2)
760 (while (condition-case err
761 (progn
762 (forward-sexp)
763 t)
764 (error nil))
765 (when (and (< 70 (current-column))
766 (not (looking-at ")")))
767 (insert "\n")
768 (lisp-indent-line))))))
769 xsdre-gen-categories))
770
771(defun xsdre-def-primitive-category (sym ranges)
772 (put sym 'xsdre-ranges ranges)
773 (put sym 'xsdre-unicode-category t))
774
775;;; Blocks
776
777(defun xsdre-def-block (sym ranges)
778 (put sym 'xsdre-ranges ranges)
779 (put sym 'xsdre-unicode-block t))
780
781(xsdre-def-block 'BasicLatin '((#x0000 . #x007F)))
782(xsdre-def-block 'Latin-1Supplement '((#x0080 . #x00FF)))
783(xsdre-def-block 'LatinExtended-A '((#x0100 . #x017F)))
784(xsdre-def-block 'LatinExtended-B '((#x0180 . #x024F)))
785(xsdre-def-block 'IPAExtensions '((#x0250 . #x02AF)))
786(xsdre-def-block 'SpacingModifierLetters '((#x02B0 . #x02FF)))
787(xsdre-def-block 'CombiningDiacriticalMarks '((#x0300 . #x036F)))
788(xsdre-def-block 'Greek '((#x0370 . #x03FF)))
789(xsdre-def-block 'Cyrillic '((#x0400 . #x04FF)))
790(xsdre-def-block 'Armenian '((#x0530 . #x058F)))
791(xsdre-def-block 'Hebrew '((#x0590 . #x05FF)))
792(xsdre-def-block 'Arabic '((#x0600 . #x06FF)))
793(xsdre-def-block 'Syriac '((#x0700 . #x074F)))
794(xsdre-def-block 'Thaana '((#x0780 . #x07BF)))
795(xsdre-def-block 'Devanagari '((#x0900 . #x097F)))
796(xsdre-def-block 'Bengali '((#x0980 . #x09FF)))
797(xsdre-def-block 'Gurmukhi '((#x0A00 . #x0A7F)))
798(xsdre-def-block 'Gujarati '((#x0A80 . #x0AFF)))
799(xsdre-def-block 'Oriya '((#x0B00 . #x0B7F)))
800(xsdre-def-block 'Tamil '((#x0B80 . #x0BFF)))
801(xsdre-def-block 'Telugu '((#x0C00 . #x0C7F)))
802(xsdre-def-block 'Kannada '((#x0C80 . #x0CFF)))
803(xsdre-def-block 'Malayalam '((#x0D00 . #x0D7F)))
804(xsdre-def-block 'Sinhala '((#x0D80 . #x0DFF)))
805(xsdre-def-block 'Thai '((#x0E00 . #x0E7F)))
806(xsdre-def-block 'Lao '((#x0E80 . #x0EFF)))
807(xsdre-def-block 'Tibetan '((#x0F00 . #x0FFF)))
808(xsdre-def-block 'Myanmar '((#x1000 . #x109F)))
809(xsdre-def-block 'Georgian '((#x10A0 . #x10FF)))
810(xsdre-def-block 'HangulJamo '((#x1100 . #x11FF)))
811(xsdre-def-block 'Ethiopic '((#x1200 . #x137F)))
812(xsdre-def-block 'Cherokee '((#x13A0 . #x13FF)))
813(xsdre-def-block 'UnifiedCanadianAboriginalSyllabics '((#x1400 . #x167F)))
814(xsdre-def-block 'Ogham '((#x1680 . #x169F)))
815(xsdre-def-block 'Runic '((#x16A0 . #x16FF)))
816(xsdre-def-block 'Khmer '((#x1780 . #x17FF)))
817(xsdre-def-block 'Mongolian '((#x1800 . #x18AF)))
818(xsdre-def-block 'LatinExtendedAdditional '((#x1E00 . #x1EFF)))
819(xsdre-def-block 'GreekExtended '((#x1F00 . #x1FFF)))
820(xsdre-def-block 'GeneralPunctuation '((#x2000 . #x206F)))
821(xsdre-def-block 'SuperscriptsandSubscripts '((#x2070 . #x209F)))
822(xsdre-def-block 'CurrencySymbols '((#x20A0 . #x20CF)))
823(xsdre-def-block 'CombiningMarksforSymbols '((#x20D0 . #x20FF)))
824(xsdre-def-block 'LetterlikeSymbols '((#x2100 . #x214F)))
825(xsdre-def-block 'NumberForms '((#x2150 . #x218F)))
826(xsdre-def-block 'Arrows '((#x2190 . #x21FF)))
827(xsdre-def-block 'MathematicalOperators '((#x2200 . #x22FF)))
828(xsdre-def-block 'MiscellaneousTechnical '((#x2300 . #x23FF)))
829(xsdre-def-block 'ControlPictures '((#x2400 . #x243F)))
830(xsdre-def-block 'OpticalCharacterRecognition '((#x2440 . #x245F)))
831(xsdre-def-block 'EnclosedAlphanumerics '((#x2460 . #x24FF)))
832(xsdre-def-block 'BoxDrawing '((#x2500 . #x257F)))
833(xsdre-def-block 'BlockElements '((#x2580 . #x259F)))
834(xsdre-def-block 'GeometricShapes '((#x25A0 . #x25FF)))
835(xsdre-def-block 'MiscellaneousSymbols '((#x2600 . #x26FF)))
836(xsdre-def-block 'Dingbats '((#x2700 . #x27BF)))
837(xsdre-def-block 'BraillePatterns '((#x2800 . #x28FF)))
838(xsdre-def-block 'CJKRadicalsSupplement '((#x2E80 . #x2EFF)))
839(xsdre-def-block 'KangxiRadicals '((#x2F00 . #x2FDF)))
840(xsdre-def-block 'IdeographicDescriptionCharacters '((#x2FF0 . #x2FFF)))
841(xsdre-def-block 'CJKSymbolsandPunctuation '((#x3000 . #x303F)))
842(xsdre-def-block 'Hiragana '((#x3040 . #x309F)))
843(xsdre-def-block 'Katakana '((#x30A0 . #x30FF)))
844(xsdre-def-block 'Bopomofo '((#x3100 . #x312F)))
845(xsdre-def-block 'HangulCompatibilityJamo '((#x3130 . #x318F)))
846(xsdre-def-block 'Kanbun '((#x3190 . #x319F)))
847(xsdre-def-block 'BopomofoExtended '((#x31A0 . #x31BF)))
848(xsdre-def-block 'EnclosedCJKLettersandMonths '((#x3200 . #x32FF)))
849(xsdre-def-block 'CJKCompatibility '((#x3300 . #x33FF)))
850(xsdre-def-block 'CJKUnifiedIdeographsExtensionA '((#x3400 . #x4DB5)))
851(xsdre-def-block 'CJKUnifiedIdeographs '((#x4E00 . #x9FFF)))
852(xsdre-def-block 'YiSyllables '((#xA000 . #xA48F)))
853(xsdre-def-block 'YiRadicals '((#xA490 . #xA4CF)))
854(xsdre-def-block 'HangulSyllables '((#xAC00 . #xD7A3)))
855;;(xsdre-def-block 'HighSurrogates '((#xD800 . #xDB7F)))
856;;(xsdre-def-block 'HighPrivateUseSurrogates '((#xDB80 . #xDBFF)))
857;;(xsdre-def-block 'LowSurrogates '((#xDC00 . #xDFFF)))
858(xsdre-def-block 'CJKCompatibilityIdeographs '((#xF900 . #xFAFF)))
859(xsdre-def-block 'AlphabeticPresentationForms '((#xFB00 . #xFB4F)))
860(xsdre-def-block 'ArabicPresentationForms-A '((#xFB50 . #xFDFF)))
861(xsdre-def-block 'CombiningHalfMarks '((#xFE20 . #xFE2F)))
862(xsdre-def-block 'CJKCompatibilityForms '((#xFE30 . #xFE4F)))
863(xsdre-def-block 'SmallFormVariants '((#xFE50 . #xFE6F)))
864(xsdre-def-block 'ArabicPresentationForms-B '((#xFE70 . #xFEFE)))
865(xsdre-def-block 'Specials '((#xFEFF . #xFEFF)))
866(xsdre-def-block 'HalfwidthandFullwidthForms '((#xFF00 . #xFFEF)))
867(xsdre-def-block 'Specials '((#xFFF0 . #xFFFD)))
868(xsdre-def-block 'OldItalic '((#x10300 . #x1032F)))
869(xsdre-def-block 'Gothic '((#x10330 . #x1034F)))
870(xsdre-def-block 'Deseret '((#x10400 . #x1044F)))
871(xsdre-def-block 'ByzantineMusicalSymbols '((#x1D000 . #x1D0FF)))
872(xsdre-def-block 'MusicalSymbols '((#x1D100 . #x1D1FF)))
873(xsdre-def-block 'MathematicalAlphanumericSymbols '((#x1D400 . #x1D7FF)))
874(xsdre-def-block 'CJKUnifiedIdeographsExtensionB '((#x20000 . #x2A6D6)))
875(xsdre-def-block 'CJKCompatibilityIdeographsSupplement '((#x2F800 . #x2FA1F)))
876(xsdre-def-block 'Tags '((#xE0000 . #xE007F)))
877(xsdre-def-block 'PrivateUse '((#xE000 . #xF8FF)
878 (#xF0000 . #xFFFFD)
879 (#x100000 . #x10FFFD)))
880
881;;; Categories
882
883;;; Derived categories
884
885(defun xsdre-def-derived-category (sym char-class)
886 (put sym 'xsdre-char-class char-class)
887 (put sym 'xsdre-unicode-category t))
888
889(xsdre-def-derived-category 'L '(union Lu Ll Lt Lm Lo))
890(xsdre-def-derived-category 'M '(union Mn Mc Me))
891(xsdre-def-derived-category 'N '(union Nd Nl No))
892(xsdre-def-derived-category 'P '(union Pc Pd Ps Pe Pi Pf Po))
893(xsdre-def-derived-category 'Z '(union Zs Zl Zp))
894(xsdre-def-derived-category 'S '(union Sm Sc Sk So))
895(xsdre-def-derived-category 'C '(union Cc Cf Co Cn))
896(xsdre-def-derived-category 'Cn '(difference any
897 (union L M N P Z S Cc Cf Co)))
898
899(xsdre-def-primitive-category
900 'name-initial
901 '(#x003a
902 (#x0041 . #x005a)
903 #x005f
904 (#x0061 . #x007a)
905 (#x00c0 . #x00d6)
906 (#x00d8 . #x00f6)
907 (#x00f8 . #x0131)
908 (#x0134 . #x013e)
909 (#x0141 . #x0148)
910 (#x014a . #x017e)
911 (#x0180 . #x01c3)
912 (#x01cd . #x01f0)
913 (#x01f4 . #x01f5)
914 (#x01fa . #x0217)
915 (#x0250 . #x02a8)
916 (#x02bb . #x02c1)
917 #x0386
918 (#x0388 . #x038a)
919 #x038c
920 (#x038e . #x03a1)
921 (#x03a3 . #x03ce)
922 (#x03d0 . #x03d6)
923 #x03da
924 #x03dc
925 #x03de
926 #x03e0
927 (#x03e2 . #x03f3)
928 (#x0401 . #x040c)
929 (#x040e . #x044f)
930 (#x0451 . #x045c)
931 (#x045e . #x0481)
932 (#x0490 . #x04c4)
933 (#x04c7 . #x04c8)
934 (#x04cb . #x04cc)
935 (#x04d0 . #x04eb)
936 (#x04ee . #x04f5)
937 (#x04f8 . #x04f9)
938 (#x0531 . #x0556)
939 #x0559
940 (#x0561 . #x0586)
941 (#x05d0 . #x05ea)
942 (#x05f0 . #x05f2)
943 (#x0621 . #x063a)
944 (#x0641 . #x064a)
945 (#x0671 . #x06b7)
946 (#x06ba . #x06be)
947 (#x06c0 . #x06ce)
948 (#x06d0 . #x06d3)
949 #x06d5
950 (#x06e5 . #x06e6)
951 (#x0905 . #x0939)
952 #x093d
953 (#x0958 . #x0961)
954 (#x0985 . #x098c)
955 (#x098f . #x0990)
956 (#x0993 . #x09a8)
957 (#x09aa . #x09b0)
958 #x09b2
959 (#x09b6 . #x09b9)
960 (#x09dc . #x09dd)
961 (#x09df . #x09e1)
962 (#x09f0 . #x09f1)
963 (#x0a05 . #x0a0a)
964 (#x0a0f . #x0a10)
965 (#x0a13 . #x0a28)
966 (#x0a2a . #x0a30)
967 (#x0a32 . #x0a33)
968 (#x0a35 . #x0a36)
969 (#x0a38 . #x0a39)
970 (#x0a59 . #x0a5c)
971 #x0a5e
972 (#x0a72 . #x0a74)
973 (#x0a85 . #x0a8b)
974 #x0a8d
975 (#x0a8f . #x0a91)
976 (#x0a93 . #x0aa8)
977 (#x0aaa . #x0ab0)
978 (#x0ab2 . #x0ab3)
979 (#x0ab5 . #x0ab9)
980 #x0abd
981 #x0ae0
982 (#x0b05 . #x0b0c)
983 (#x0b0f . #x0b10)
984 (#x0b13 . #x0b28)
985 (#x0b2a . #x0b30)
986 (#x0b32 . #x0b33)
987 (#x0b36 . #x0b39)
988 #x0b3d
989 (#x0b5c . #x0b5d)
990 (#x0b5f . #x0b61)
991 (#x0b85 . #x0b8a)
992 (#x0b8e . #x0b90)
993 (#x0b92 . #x0b95)
994 (#x0b99 . #x0b9a)
995 #x0b9c
996 (#x0b9e . #x0b9f)
997 (#x0ba3 . #x0ba4)
998 (#x0ba8 . #x0baa)
999 (#x0bae . #x0bb5)
1000 (#x0bb7 . #x0bb9)
1001 (#x0c05 . #x0c0c)
1002 (#x0c0e . #x0c10)
1003 (#x0c12 . #x0c28)
1004 (#x0c2a . #x0c33)
1005 (#x0c35 . #x0c39)
1006 (#x0c60 . #x0c61)
1007 (#x0c85 . #x0c8c)
1008 (#x0c8e . #x0c90)
1009 (#x0c92 . #x0ca8)
1010 (#x0caa . #x0cb3)
1011 (#x0cb5 . #x0cb9)
1012 #x0cde
1013 (#x0ce0 . #x0ce1)
1014 (#x0d05 . #x0d0c)
1015 (#x0d0e . #x0d10)
1016 (#x0d12 . #x0d28)
1017 (#x0d2a . #x0d39)
1018 (#x0d60 . #x0d61)
1019 (#x0e01 . #x0e2e)
1020 #x0e30
1021 (#x0e32 . #x0e33)
1022 (#x0e40 . #x0e45)
1023 (#x0e81 . #x0e82)
1024 #x0e84
1025 (#x0e87 . #x0e88)
1026 #x0e8a
1027 #x0e8d
1028 (#x0e94 . #x0e97)
1029 (#x0e99 . #x0e9f)
1030 (#x0ea1 . #x0ea3)
1031 #x0ea5
1032 #x0ea7
1033 (#x0eaa . #x0eab)
1034 (#x0ead . #x0eae)
1035 #x0eb0
1036 (#x0eb2 . #x0eb3)
1037 #x0ebd
1038 (#x0ec0 . #x0ec4)
1039 (#x0f40 . #x0f47)
1040 (#x0f49 . #x0f69)
1041 (#x10a0 . #x10c5)
1042 (#x10d0 . #x10f6)
1043 #x1100
1044 (#x1102 . #x1103)
1045 (#x1105 . #x1107)
1046 #x1109
1047 (#x110b . #x110c)
1048 (#x110e . #x1112)
1049 #x113c
1050 #x113e
1051 #x1140
1052 #x114c
1053 #x114e
1054 #x1150
1055 (#x1154 . #x1155)
1056 #x1159
1057 (#x115f . #x1161)
1058 #x1163
1059 #x1165
1060 #x1167
1061 #x1169
1062 (#x116d . #x116e)
1063 (#x1172 . #x1173)
1064 #x1175
1065 #x119e
1066 #x11a8
1067 #x11ab
1068 (#x11ae . #x11af)
1069 (#x11b7 . #x11b8)
1070 #x11ba
1071 (#x11bc . #x11c2)
1072 #x11eb
1073 #x11f0
1074 #x11f9
1075 (#x1e00 . #x1e9b)
1076 (#x1ea0 . #x1ef9)
1077 (#x1f00 . #x1f15)
1078 (#x1f18 . #x1f1d)
1079 (#x1f20 . #x1f45)
1080 (#x1f48 . #x1f4d)
1081 (#x1f50 . #x1f57)
1082 #x1f59
1083 #x1f5b
1084 #x1f5d
1085 (#x1f5f . #x1f7d)
1086 (#x1f80 . #x1fb4)
1087 (#x1fb6 . #x1fbc)
1088 #x1fbe
1089 (#x1fc2 . #x1fc4)
1090 (#x1fc6 . #x1fcc)
1091 (#x1fd0 . #x1fd3)
1092 (#x1fd6 . #x1fdb)
1093 (#x1fe0 . #x1fec)
1094 (#x1ff2 . #x1ff4)
1095 (#x1ff6 . #x1ffc)
1096 #x2126
1097 (#x212a . #x212b)
1098 #x212e
1099 (#x2180 . #x2182)
1100 #x3007
1101 (#x3021 . #x3029)
1102 (#x3041 . #x3094)
1103 (#x30a1 . #x30fa)
1104 (#x3105 . #x312c)
1105 (#x4e00 . #x9fa5)
1106 (#xac00 . #xd7a3)))
1107
1108(xsdre-def-derived-category 'name-continue '(union name-initial
1109 name-continue-not-initial))
1110
1111(xsdre-def-primitive-category
1112 'name-continue-not-initial
1113 '((#x002d . #x002e)
1114 (#x0030 . #x0039)
1115 #x00b7
1116 (#x02d0 . #x02d1)
1117 (#x0300 . #x0345)
1118 (#x0360 . #x0361)
1119 #x0387
1120 (#x0483 . #x0486)
1121 (#x0591 . #x05a1)
1122 (#x05a3 . #x05b9)
1123 (#x05bb . #x05bd)
1124 #x05bf
1125 (#x05c1 . #x05c2)
1126 #x05c4
1127 #x0640
1128 (#x064b . #x0652)
1129 (#x0660 . #x0669)
1130 #x0670
1131 (#x06d6 . #x06dc)
1132 (#x06dd . #x06df)
1133 (#x06e0 . #x06e4)
1134 (#x06e7 . #x06e8)
1135 (#x06ea . #x06ed)
1136 (#x06f0 . #x06f9)
1137 (#x0901 . #x0903)
1138 #x093c
1139 (#x093e . #x094c)
1140 #x094d
1141 (#x0951 . #x0954)
1142 (#x0962 . #x0963)
1143 (#x0966 . #x096f)
1144 (#x0981 . #x0983)
1145 #x09bc
1146 (#x09be . #x09bf)
1147 (#x09c0 . #x09c4)
1148 (#x09c7 . #x09c8)
1149 (#x09cb . #x09cd)
1150 #x09d7
1151 (#x09e2 . #x09e3)
1152 (#x09e6 . #x09ef)
1153 #x0a02
1154 #x0a3c
1155 (#x0a3e . #x0a42)
1156 (#x0a47 . #x0a48)
1157 (#x0a4b . #x0a4d)
1158 (#x0a66 . #x0a6f)
1159 (#x0a70 . #x0a71)
1160 (#x0a81 . #x0a83)
1161 #x0abc
1162 (#x0abe . #x0ac5)
1163 (#x0ac7 . #x0ac9)
1164 (#x0acb . #x0acd)
1165 (#x0ae6 . #x0aef)
1166 (#x0b01 . #x0b03)
1167 #x0b3c
1168 (#x0b3e . #x0b43)
1169 (#x0b47 . #x0b48)
1170 (#x0b4b . #x0b4d)
1171 (#x0b56 . #x0b57)
1172 (#x0b66 . #x0b6f)
1173 (#x0b82 . #x0b83)
1174 (#x0bbe . #x0bc2)
1175 (#x0bc6 . #x0bc8)
1176 (#x0bca . #x0bcd)
1177 #x0bd7
1178 (#x0be7 . #x0bef)
1179 (#x0c01 . #x0c03)
1180 (#x0c3e . #x0c44)
1181 (#x0c46 . #x0c48)
1182 (#x0c4a . #x0c4d)
1183 (#x0c55 . #x0c56)
1184 (#x0c66 . #x0c6f)
1185 (#x0c82 . #x0c83)
1186 (#x0cbe . #x0cc4)
1187 (#x0cc6 . #x0cc8)
1188 (#x0cca . #x0ccd)
1189 (#x0cd5 . #x0cd6)
1190 (#x0ce6 . #x0cef)
1191 (#x0d02 . #x0d03)
1192 (#x0d3e . #x0d43)
1193 (#x0d46 . #x0d48)
1194 (#x0d4a . #x0d4d)
1195 #x0d57
1196 (#x0d66 . #x0d6f)
1197 #x0e31
1198 (#x0e34 . #x0e3a)
1199 (#x0e46 . #x0e4e)
1200 (#x0e50 . #x0e59)
1201 #x0eb1
1202 (#x0eb4 . #x0eb9)
1203 (#x0ebb . #x0ebc)
1204 #x0ec6
1205 (#x0ec8 . #x0ecd)
1206 (#x0ed0 . #x0ed9)
1207 (#x0f18 . #x0f19)
1208 (#x0f20 . #x0f29)
1209 #x0f35
1210 #x0f37
1211 #x0f39
1212 (#x0f3e . #x0f3f)
1213 (#x0f71 . #x0f84)
1214 (#x0f86 . #x0f8b)
1215 (#x0f90 . #x0f95)
1216 #x0f97
1217 (#x0f99 . #x0fad)
1218 (#x0fb1 . #x0fb7)
1219 #x0fb9
1220 (#x20d0 . #x20dc)
1221 #x20e1
1222 #x3005
1223 (#x302a . #x302f)
1224 (#x3031 . #x3035)
1225 #x3099
1226 #x309a
1227 (#x309d . #x309e)
1228 (#x30fc . #x30fe)))
1229
1230;;; Auto-generated section.
1231
1232;; The rest of the file was auto-generated by doing M-x xsdre-gen-categories
1233;; on UnicodeData-3.1.0.txt available from
1234;; http://www.unicode.org/Public/3.1-Update/UnicodeData-3.1.0.txt
1235
1236(xsdre-def-primitive-category 'Lu
1237 '((65 . 90)
1238 (192 . 214)
1239 (216 . 222)
1240 256 258 260 262 264 266 268 270 272 274 276
1241 278 280 282 284 286 288 290 292 294 296 298
1242 300 302 304 306 308 310 313 315 317 319 321
1243 323 325 327 330 332 334 336 338 340 342 344
1244 346 348 350 352 354 356 358 360 362 364 366
1245 368 370 372 374
1246 (376 . 377)
1247 379 381
1248 (385 . 386)
1249 388
1250 (390 . 391)
1251 (393 . 395)
1252 (398 . 401)
1253 (403 . 404)
1254 (406 . 408)
1255 (412 . 413)
1256 (415 . 416)
1257 418 420
1258 (422 . 423)
1259 425 428
1260 (430 . 431)
1261 (433 . 435)
1262 437
1263 (439 . 440)
1264 444 452 455 458 461 463 465 467 469 471 473
1265 475 478 480 482 484 486 488 490 492 494 497
1266 500
1267 (502 . 504)
1268 506 508 510 512 514 516 518 520 522 524 526
1269 528 530 532 534 536 538 540 542 546 548 550
1270 552 554 556 558 560 562 902
1271 (904 . 906)
1272 908
1273 (910 . 911)
1274 (913 . 929)
1275 (931 . 939)
1276 (978 . 980)
1277 986 988 990 992 994 996 998 1000 1002 1004
1278 1006 1012
1279 (1024 . 1071)
1280 1120 1122 1124 1126 1128 1130 1132 1134 1136
1281 1138 1140 1142 1144 1146 1148 1150 1152 1164
1282 1166 1168 1170 1172 1174 1176 1178 1180 1182
1283 1184 1186 1188 1190 1192 1194 1196 1198 1200
1284 1202 1204 1206 1208 1210 1212 1214
1285 (1216 . 1217)
1286 1219 1223 1227 1232 1234 1236 1238 1240 1242
1287 1244 1246 1248 1250 1252 1254 1256 1258 1260
1288 1262 1264 1266 1268 1272
1289 (1329 . 1366)
1290 (4256 . 4293)
1291 7680 7682 7684 7686 7688 7690 7692 7694 7696
1292 7698 7700 7702 7704 7706 7708 7710 7712 7714
1293 7716 7718 7720 7722 7724 7726 7728 7730 7732
1294 7734 7736 7738 7740 7742 7744 7746 7748 7750
1295 7752 7754 7756 7758 7760 7762 7764 7766 7768
1296 7770 7772 7774 7776 7778 7780 7782 7784 7786
1297 7788 7790 7792 7794 7796 7798 7800 7802 7804
1298 7806 7808 7810 7812 7814 7816 7818 7820 7822
1299 7824 7826 7828 7840 7842 7844 7846 7848 7850
1300 7852 7854 7856 7858 7860 7862 7864 7866 7868
1301 7870 7872 7874 7876 7878 7880 7882 7884 7886
1302 7888 7890 7892 7894 7896 7898 7900 7902 7904
1303 7906 7908 7910 7912 7914 7916 7918 7920 7922
1304 7924 7926 7928
1305 (7944 . 7951)
1306 (7960 . 7965)
1307 (7976 . 7983)
1308 (7992 . 7999)
1309 (8008 . 8013)
1310 8025 8027 8029 8031
1311 (8040 . 8047)
1312 (8120 . 8123)
1313 (8136 . 8139)
1314 (8152 . 8155)
1315 (8168 . 8172)
1316 (8184 . 8187)
1317 8450 8455
1318 (8459 . 8461)
1319 (8464 . 8466)
1320 8469
1321 (8473 . 8477)
1322 8484 8486 8488
1323 (8490 . 8493)
1324 (8496 . 8497)
1325 8499
1326 (65313 . 65338)
1327 (66560 . 66597)
1328 (119808 . 119833)
1329 (119860 . 119885)
1330 (119912 . 119937)
1331 119964
1332 (119966 . 119967)
1333 119970
1334 (119973 . 119974)
1335 (119977 . 119980)
1336 (119982 . 119989)
1337 (120016 . 120041)
1338 (120068 . 120069)
1339 (120071 . 120074)
1340 (120077 . 120084)
1341 (120086 . 120092)
1342 (120120 . 120121)
1343 (120123 . 120126)
1344 (120128 . 120132)
1345 120134
1346 (120138 . 120144)
1347 (120172 . 120197)
1348 (120224 . 120249)
1349 (120276 . 120301)
1350 (120328 . 120353)
1351 (120380 . 120405)
1352 (120432 . 120457)
1353 (120488 . 120512)
1354 (120546 . 120570)
1355 (120604 . 120628)
1356 (120662 . 120686)
1357 (120720 . 120744)))
1358(xsdre-def-primitive-category 'Ll
1359 '((97 . 122)
1360 170 181 186
1361 (223 . 246)
1362 (248 . 255)
1363 257 259 261 263 265 267 269 271 273 275 277
1364 279 281 283 285 287 289 291 293 295 297 299
1365 301 303 305 307 309
1366 (311 . 312)
1367 314 316 318 320 322 324 326
1368 (328 . 329)
1369 331 333 335 337 339 341 343 345 347 349 351
1370 353 355 357 359 361 363 365 367 369 371 373
1371 375 378 380
1372 (382 . 384)
1373 387 389 392
1374 (396 . 397)
1375 402 405
1376 (409 . 411)
1377 414 417 419 421 424
1378 (426 . 427)
1379 429 432 436 438
1380 (441 . 442)
1381 (445 . 447)
1382 454 457 460 462 464 466 468 470 472 474
1383 (476 . 477)
1384 479 481 483 485 487 489 491 493
1385 (495 . 496)
1386 499 501 505 507 509 511 513 515 517 519 521
1387 523 525 527 529 531 533 535 537 539 541 543
1388 547 549 551 553 555 557 559 561 563
1389 (592 . 685)
1390 912
1391 (940 . 974)
1392 (976 . 977)
1393 (981 . 983)
1394 987 989 991 993 995 997 999 1001 1003 1005
1395
1396 (1007 . 1011)
1397 1013
1398 (1072 . 1119)
1399 1121 1123 1125 1127 1129 1131 1133 1135 1137
1400 1139 1141 1143 1145 1147 1149 1151 1153 1165
1401 1167 1169 1171 1173 1175 1177 1179 1181 1183
1402 1185 1187 1189 1191 1193 1195 1197 1199 1201
1403 1203 1205 1207 1209 1211 1213 1215 1218 1220
1404 1224 1228 1233 1235 1237 1239 1241 1243 1245
1405 1247 1249 1251 1253 1255 1257 1259 1261 1263
1406 1265 1267 1269 1273
1407 (1377 . 1415)
1408 7681 7683 7685 7687 7689 7691 7693 7695 7697
1409 7699 7701 7703 7705 7707 7709 7711 7713 7715
1410 7717 7719 7721 7723 7725 7727 7729 7731 7733
1411 7735 7737 7739 7741 7743 7745 7747 7749 7751
1412 7753 7755 7757 7759 7761 7763 7765 7767 7769
1413 7771 7773 7775 7777 7779 7781 7783 7785 7787
1414 7789 7791 7793 7795 7797 7799 7801 7803 7805
1415 7807 7809 7811 7813 7815 7817 7819 7821 7823
1416 7825 7827
1417 (7829 . 7835)
1418 7841 7843 7845 7847 7849 7851 7853 7855 7857
1419 7859 7861 7863 7865 7867 7869 7871 7873 7875
1420 7877 7879 7881 7883 7885 7887 7889 7891 7893
1421 7895 7897 7899 7901 7903 7905 7907 7909 7911
1422 7913 7915 7917 7919 7921 7923 7925 7927 7929
1423
1424 (7936 . 7943)
1425 (7952 . 7957)
1426 (7968 . 7975)
1427 (7984 . 7991)
1428 (8000 . 8005)
1429 (8016 . 8023)
1430 (8032 . 8039)
1431 (8048 . 8061)
1432 (8064 . 8071)
1433 (8080 . 8087)
1434 (8096 . 8103)
1435 (8112 . 8116)
1436 (8118 . 8119)
1437 8126
1438 (8130 . 8132)
1439 (8134 . 8135)
1440 (8144 . 8147)
1441 (8150 . 8151)
1442 (8160 . 8167)
1443 (8178 . 8180)
1444 (8182 . 8183)
1445 8319 8458
1446 (8462 . 8463)
1447 8467 8495 8500 8505
1448 (64256 . 64262)
1449 (64275 . 64279)
1450 (65345 . 65370)
1451 (66600 . 66637)
1452 (119834 . 119859)
1453 (119886 . 119892)
1454 (119894 . 119911)
1455 (119938 . 119963)
1456 (119990 . 119993)
1457 119995
1458 (119997 . 120000)
1459 (120002 . 120003)
1460 (120005 . 120015)
1461 (120042 . 120067)
1462 (120094 . 120119)
1463 (120146 . 120171)
1464 (120198 . 120223)
1465 (120250 . 120275)
1466 (120302 . 120327)
1467 (120354 . 120379)
1468 (120406 . 120431)
1469 (120458 . 120483)
1470 (120514 . 120538)
1471 (120540 . 120545)
1472 (120572 . 120596)
1473 (120598 . 120603)
1474 (120630 . 120654)
1475 (120656 . 120661)
1476 (120688 . 120712)
1477 (120714 . 120719)
1478 (120746 . 120770)
1479 (120772 . 120777)))
1480(xsdre-def-primitive-category 'Lt
1481 '(453 456 459 498
1482 (8072 . 8079)
1483 (8088 . 8095)
1484 (8104 . 8111)
1485 8124 8140 8188))
1486(xsdre-def-primitive-category 'Lm
1487 '((688 . 696)
1488 (699 . 705)
1489 (720 . 721)
1490 (736 . 740)
1491 750 890 1369 1600
1492 (1765 . 1766)
1493 3654 3782 6211 12293
1494 (12337 . 12341)
1495 (12445 . 12446)
1496 (12540 . 12542)
1497 65392
1498 (65438 . 65439)))
1499(xsdre-def-primitive-category 'Lo
1500 '(443
1501 (448 . 451)
1502 (1488 . 1514)
1503 (1520 . 1522)
1504 (1569 . 1594)
1505 (1601 . 1610)
1506 (1649 . 1747)
1507 1749
1508 (1786 . 1788)
1509 1808
1510 (1810 . 1836)
1511 (1920 . 1957)
1512 (2309 . 2361)
1513 2365 2384
1514 (2392 . 2401)
1515 (2437 . 2444)
1516 (2447 . 2448)
1517 (2451 . 2472)
1518 (2474 . 2480)
1519 2482
1520 (2486 . 2489)
1521 (2524 . 2525)
1522 (2527 . 2529)
1523 (2544 . 2545)
1524 (2565 . 2570)
1525 (2575 . 2576)
1526 (2579 . 2600)
1527 (2602 . 2608)
1528 (2610 . 2611)
1529 (2613 . 2614)
1530 (2616 . 2617)
1531 (2649 . 2652)
1532 2654
1533 (2674 . 2676)
1534 (2693 . 2699)
1535 2701
1536 (2703 . 2705)
1537 (2707 . 2728)
1538 (2730 . 2736)
1539 (2738 . 2739)
1540 (2741 . 2745)
1541 2749 2768 2784
1542 (2821 . 2828)
1543 (2831 . 2832)
1544 (2835 . 2856)
1545 (2858 . 2864)
1546 (2866 . 2867)
1547 (2870 . 2873)
1548 2877
1549 (2908 . 2909)
1550 (2911 . 2913)
1551 (2949 . 2954)
1552 (2958 . 2960)
1553 (2962 . 2965)
1554 (2969 . 2970)
1555 2972
1556 (2974 . 2975)
1557 (2979 . 2980)
1558 (2984 . 2986)
1559 (2990 . 2997)
1560 (2999 . 3001)
1561 (3077 . 3084)
1562 (3086 . 3088)
1563 (3090 . 3112)
1564 (3114 . 3123)
1565 (3125 . 3129)
1566 (3168 . 3169)
1567 (3205 . 3212)
1568 (3214 . 3216)
1569 (3218 . 3240)
1570 (3242 . 3251)
1571 (3253 . 3257)
1572 3294
1573 (3296 . 3297)
1574 (3333 . 3340)
1575 (3342 . 3344)
1576 (3346 . 3368)
1577 (3370 . 3385)
1578 (3424 . 3425)
1579 (3461 . 3478)
1580 (3482 . 3505)
1581 (3507 . 3515)
1582 3517
1583 (3520 . 3526)
1584 (3585 . 3632)
1585 (3634 . 3635)
1586 (3648 . 3653)
1587 (3713 . 3714)
1588 3716
1589 (3719 . 3720)
1590 3722 3725
1591 (3732 . 3735)
1592 (3737 . 3743)
1593 (3745 . 3747)
1594 3749 3751
1595 (3754 . 3755)
1596 (3757 . 3760)
1597 (3762 . 3763)
1598 3773
1599 (3776 . 3780)
1600 (3804 . 3805)
1601 3840
1602 (3904 . 3911)
1603 (3913 . 3946)
1604 (3976 . 3979)
1605 (4096 . 4129)
1606 (4131 . 4135)
1607 (4137 . 4138)
1608 (4176 . 4181)
1609 (4304 . 4342)
1610 (4352 . 4441)
1611 (4447 . 4514)
1612 (4520 . 4601)
1613 (4608 . 4614)
1614 (4616 . 4678)
1615 4680
1616 (4682 . 4685)
1617 (4688 . 4694)
1618 4696
1619 (4698 . 4701)
1620 (4704 . 4742)
1621 4744
1622 (4746 . 4749)
1623 (4752 . 4782)
1624 4784
1625 (4786 . 4789)
1626 (4792 . 4798)
1627 4800
1628 (4802 . 4805)
1629 (4808 . 4814)
1630 (4816 . 4822)
1631 (4824 . 4846)
1632 (4848 . 4878)
1633 4880
1634 (4882 . 4885)
1635 (4888 . 4894)
1636 (4896 . 4934)
1637 (4936 . 4954)
1638 (5024 . 5108)
1639 (5121 . 5740)
1640 (5743 . 5750)
1641 (5761 . 5786)
1642 (5792 . 5866)
1643 (6016 . 6067)
1644 (6176 . 6210)
1645 (6212 . 6263)
1646 (6272 . 6312)
1647 (8501 . 8504)
1648 12294
1649 (12353 . 12436)
1650 (12449 . 12538)
1651 (12549 . 12588)
1652 (12593 . 12686)
1653 (12704 . 12727)
1654 (13312 . 19893)
1655 (19968 . 40869)
1656 (40960 . 42124)
1657 (44032 . 55203)
1658 (63744 . 64045)
1659 64285
1660 (64287 . 64296)
1661 (64298 . 64310)
1662 (64312 . 64316)
1663 64318
1664 (64320 . 64321)
1665 (64323 . 64324)
1666 (64326 . 64433)
1667 (64467 . 64829)
1668 (64848 . 64911)
1669 (64914 . 64967)
1670 (65008 . 65019)
1671 (65136 . 65138)
1672 65140
1673 (65142 . 65276)
1674 (65382 . 65391)
1675 (65393 . 65437)
1676 (65440 . 65470)
1677 (65474 . 65479)
1678 (65482 . 65487)
1679 (65490 . 65495)
1680 (65498 . 65500)
1681 (66304 . 66334)
1682 (66352 . 66377)
1683 (131072 . 173782)
1684 (194560 . 195101)))
1685(xsdre-def-primitive-category 'Mn
1686 '((768 . 846)
1687 (864 . 866)
1688 (1155 . 1158)
1689 (1425 . 1441)
1690 (1443 . 1465)
1691 (1467 . 1469)
1692 1471
1693 (1473 . 1474)
1694 1476
1695 (1611 . 1621)
1696 1648
1697 (1750 . 1756)
1698 (1759 . 1764)
1699 (1767 . 1768)
1700 (1770 . 1773)
1701 1809
1702 (1840 . 1866)
1703 (1958 . 1968)
1704 (2305 . 2306)
1705 2364
1706 (2369 . 2376)
1707 2381
1708 (2385 . 2388)
1709 (2402 . 2403)
1710 2433 2492
1711 (2497 . 2500)
1712 2509
1713 (2530 . 2531)
1714 2562 2620
1715 (2625 . 2626)
1716 (2631 . 2632)
1717 (2635 . 2637)
1718 (2672 . 2673)
1719 (2689 . 2690)
1720 2748
1721 (2753 . 2757)
1722 (2759 . 2760)
1723 2765 2817 2876 2879
1724 (2881 . 2883)
1725 2893 2902 2946 3008 3021
1726 (3134 . 3136)
1727 (3142 . 3144)
1728 (3146 . 3149)
1729 (3157 . 3158)
1730 3263 3270
1731 (3276 . 3277)
1732 (3393 . 3395)
1733 3405 3530
1734 (3538 . 3540)
1735 3542 3633
1736 (3636 . 3642)
1737 (3655 . 3662)
1738 3761
1739 (3764 . 3769)
1740 (3771 . 3772)
1741 (3784 . 3789)
1742 (3864 . 3865)
1743 3893 3895 3897
1744 (3953 . 3966)
1745 (3968 . 3972)
1746 (3974 . 3975)
1747 (3984 . 3991)
1748 (3993 . 4028)
1749 4038
1750 (4141 . 4144)
1751 4146
1752 (4150 . 4151)
1753 4153
1754 (4184 . 4185)
1755 (6071 . 6077)
1756 6086
1757 (6089 . 6099)
1758 6313
1759 (8400 . 8412)
1760 8417
1761 (12330 . 12335)
1762 (12441 . 12442)
1763 64286
1764 (65056 . 65059)
1765 (119143 . 119145)
1766 (119163 . 119170)
1767 (119173 . 119179)
1768 (119210 . 119213)))
1769(xsdre-def-primitive-category 'Mc
1770 '(2307
1771 (2366 . 2368)
1772 (2377 . 2380)
1773 (2434 . 2435)
1774 (2494 . 2496)
1775 (2503 . 2504)
1776 (2507 . 2508)
1777 2519
1778 (2622 . 2624)
1779 2691
1780 (2750 . 2752)
1781 2761
1782 (2763 . 2764)
1783 (2818 . 2819)
1784 2878 2880
1785 (2887 . 2888)
1786 (2891 . 2892)
1787 2903 2947
1788 (3006 . 3007)
1789 (3009 . 3010)
1790 (3014 . 3016)
1791 (3018 . 3020)
1792 3031
1793 (3073 . 3075)
1794 (3137 . 3140)
1795 (3202 . 3203)
1796 3262
1797 (3264 . 3268)
1798 (3271 . 3272)
1799 (3274 . 3275)
1800 (3285 . 3286)
1801 (3330 . 3331)
1802 (3390 . 3392)
1803 (3398 . 3400)
1804 (3402 . 3404)
1805 3415
1806 (3458 . 3459)
1807 (3535 . 3537)
1808 (3544 . 3551)
1809 (3570 . 3571)
1810 (3902 . 3903)
1811 3967 4140 4145 4152
1812 (4182 . 4183)
1813 (6068 . 6070)
1814 (6078 . 6085)
1815 (6087 . 6088)
1816 (119141 . 119142)
1817 (119149 . 119154)))
1818(xsdre-def-primitive-category 'Me
1819 '((1160 . 1161)
1820 (1757 . 1758)
1821 (8413 . 8416)
1822 (8418 . 8419)))
1823(xsdre-def-primitive-category 'Nd
1824 '((48 . 57)
1825 (1632 . 1641)
1826 (1776 . 1785)
1827 (2406 . 2415)
1828 (2534 . 2543)
1829 (2662 . 2671)
1830 (2790 . 2799)
1831 (2918 . 2927)
1832 (3047 . 3055)
1833 (3174 . 3183)
1834 (3302 . 3311)
1835 (3430 . 3439)
1836 (3664 . 3673)
1837 (3792 . 3801)
1838 (3872 . 3881)
1839 (4160 . 4169)
1840 (4969 . 4977)
1841 (6112 . 6121)
1842 (6160 . 6169)
1843 (65296 . 65305)
1844 (120782 . 120831)))
1845(xsdre-def-primitive-category 'Nl
1846 '((5870 . 5872)
1847 (8544 . 8579)
1848 12295
1849 (12321 . 12329)
1850 (12344 . 12346)
1851 66378))
1852(xsdre-def-primitive-category 'No
1853 '((178 . 179)
1854 185
1855 (188 . 190)
1856 (2548 . 2553)
1857 (3056 . 3058)
1858 (3882 . 3891)
1859 (4978 . 4988)
1860 8304
1861 (8308 . 8313)
1862 (8320 . 8329)
1863 (8531 . 8543)
1864 (9312 . 9371)
1865 9450
1866 (10102 . 10131)
1867 (12690 . 12693)
1868 (12832 . 12841)
1869 (12928 . 12937)
1870 (66336 . 66339)))
1871(xsdre-def-primitive-category 'Pc
1872 '(95
1873 (8255 . 8256)
1874 12539
1875 (65075 . 65076)
1876 (65101 . 65103)
1877 65343 65381))
1878(xsdre-def-primitive-category 'Pd
1879 '(45 173 1418 6150
1880 (8208 . 8213)
1881 12316 12336
1882 (65073 . 65074)
1883 65112 65123 65293))
1884(xsdre-def-primitive-category 'Ps
1885 '(40 91 123 3898 3900 5787 8218 8222 8261 8317
1886 8333 9001 12296 12298 12300 12302 12304
1887 12308 12310 12312 12314 12317 64830 65077
1888 65079 65081 65083 65085 65087 65089 65091
1889 65113 65115 65117 65288 65339 65371 65378))
1890(xsdre-def-primitive-category 'Pe
1891 '(41 93 125 3899 3901 5788 8262 8318 8334 9002
1892 12297 12299 12301 12303 12305 12309 12311
1893 12313 12315
1894 (12318 . 12319)
1895 64831 65078 65080 65082 65084 65086 65088
1896 65090 65092 65114 65116 65118 65289 65341
1897 65373 65379))
1898(xsdre-def-primitive-category 'Pi
1899 '(171 8216
1900 (8219 . 8220)
1901 8223 8249))
1902(xsdre-def-primitive-category 'Pf
1903 '(187 8217 8221 8250))
1904(xsdre-def-primitive-category 'Po
1905 '((33 . 35)
1906 (37 . 39)
1907 42 44
1908 (46 . 47)
1909 (58 . 59)
1910 (63 . 64)
1911 92 161 183 191 894 903
1912 (1370 . 1375)
1913 1417 1470 1472 1475
1914 (1523 . 1524)
1915 1548 1563 1567
1916 (1642 . 1645)
1917 1748
1918 (1792 . 1805)
1919 (2404 . 2405)
1920 2416 3572 3663
1921 (3674 . 3675)
1922 (3844 . 3858)
1923 3973
1924 (4170 . 4175)
1925 4347
1926 (4961 . 4968)
1927 (5741 . 5742)
1928 (5867 . 5869)
1929 (6100 . 6106)
1930 6108
1931 (6144 . 6149)
1932 (6151 . 6154)
1933 (8214 . 8215)
1934 (8224 . 8231)
1935 (8240 . 8248)
1936 (8251 . 8254)
1937 (8257 . 8259)
1938 (8264 . 8269)
1939 (12289 . 12291)
1940 65072
1941 (65097 . 65100)
1942 (65104 . 65106)
1943 (65108 . 65111)
1944 (65119 . 65121)
1945 65128
1946 (65130 . 65131)
1947 (65281 . 65283)
1948 (65285 . 65287)
1949 65290 65292
1950 (65294 . 65295)
1951 (65306 . 65307)
1952 (65311 . 65312)
1953 65340 65377 65380))
1954(xsdre-def-primitive-category 'Zs
1955 '(32 160 5760
1956 (8192 . 8203)
1957 8239 12288))
1958(xsdre-def-primitive-category 'Zl
1959 '(8232))
1960(xsdre-def-primitive-category 'Zp
1961 '(8233))
1962(xsdre-def-primitive-category 'Sm
1963 '(43
1964 (60 . 62)
1965 124 126 172 177 215 247 8260
1966 (8314 . 8316)
1967 (8330 . 8332)
1968 (8592 . 8596)
1969 (8602 . 8603)
1970 8608 8611 8614 8622
1971 (8654 . 8655)
1972 8658 8660
1973 (8704 . 8945)
1974 (8968 . 8971)
1975 (8992 . 8993)
1976 9655 9665 9839 64297 65122
1977 (65124 . 65126)
1978 65291
1979 (65308 . 65310)
1980 65372 65374 65506
1981 (65513 . 65516)
1982 120513 120539 120571 120597 120629 120655
1983 120687 120713 120745 120771))
1984(xsdre-def-primitive-category 'Sc
1985 '(36
1986 (162 . 165)
1987 (2546 . 2547)
1988 3647 6107
1989 (8352 . 8367)
1990 65129 65284
1991 (65504 . 65505)
1992 (65509 . 65510)))
1993(xsdre-def-primitive-category 'Sk
1994 '(94 96 168 175 180 184
1995 (697 . 698)
1996 (706 . 719)
1997 (722 . 735)
1998 (741 . 749)
1999 (884 . 885)
2000 (900 . 901)
2001 8125
2002 (8127 . 8129)
2003 (8141 . 8143)
2004 (8157 . 8159)
2005 (8173 . 8175)
2006 (8189 . 8190)
2007 (12443 . 12444)
2008 65342 65344 65507))
2009(xsdre-def-primitive-category 'So
2010 '((166 . 167)
2011 169 174 176 182 1154 1769
2012 (1789 . 1790)
2013 2554 2928
2014 (3841 . 3843)
2015 (3859 . 3863)
2016 (3866 . 3871)
2017 3892 3894 3896
2018 (4030 . 4037)
2019 (4039 . 4044)
2020 4047
2021 (8448 . 8449)
2022 (8451 . 8454)
2023 (8456 . 8457)
2024 8468
2025 (8470 . 8472)
2026 (8478 . 8483)
2027 8485 8487 8489 8494 8498 8506
2028 (8597 . 8601)
2029 (8604 . 8607)
2030 (8609 . 8610)
2031 (8612 . 8613)
2032 (8615 . 8621)
2033 (8623 . 8653)
2034 (8656 . 8657)
2035 8659
2036 (8661 . 8691)
2037 (8960 . 8967)
2038 (8972 . 8991)
2039 (8994 . 9000)
2040 (9003 . 9083)
2041 (9085 . 9114)
2042 (9216 . 9254)
2043 (9280 . 9290)
2044 (9372 . 9449)
2045 (9472 . 9621)
2046 (9632 . 9654)
2047 (9656 . 9664)
2048 (9666 . 9719)
2049 (9728 . 9747)
2050 (9753 . 9838)
2051 (9840 . 9841)
2052 (9985 . 9988)
2053 (9990 . 9993)
2054 (9996 . 10023)
2055 (10025 . 10059)
2056 10061
2057 (10063 . 10066)
2058 10070
2059 (10072 . 10078)
2060 (10081 . 10087)
2061 10132
2062 (10136 . 10159)
2063 (10161 . 10174)
2064 (10240 . 10495)
2065 (11904 . 11929)
2066 (11931 . 12019)
2067 (12032 . 12245)
2068 (12272 . 12283)
2069 12292
2070 (12306 . 12307)
2071 12320
2072 (12342 . 12343)
2073 (12350 . 12351)
2074 (12688 . 12689)
2075 (12694 . 12703)
2076 (12800 . 12828)
2077 (12842 . 12867)
2078 (12896 . 12923)
2079 12927
2080 (12938 . 12976)
2081 (12992 . 13003)
2082 (13008 . 13054)
2083 (13056 . 13174)
2084 (13179 . 13277)
2085 (13280 . 13310)
2086 (42128 . 42145)
2087 (42148 . 42163)
2088 (42165 . 42176)
2089 (42178 . 42180)
2090 42182 65508 65512
2091 (65517 . 65518)
2092 (65532 . 65533)
2093 (118784 . 119029)
2094 (119040 . 119078)
2095 (119082 . 119140)
2096 (119146 . 119148)
2097 (119171 . 119172)
2098 (119180 . 119209)
2099 (119214 . 119261)))
2100(xsdre-def-primitive-category 'Cc
2101 '((0 . 31)
2102 (127 . 159)))
2103(xsdre-def-primitive-category 'Cf
2104 '(1807
2105 (6155 . 6158)
2106 (8204 . 8207)
2107 (8234 . 8238)
2108 (8298 . 8303)
2109 65279
2110 (65529 . 65531)
2111 (119155 . 119162)
2112 917505
2113 (917536 . 917631)))
2114(xsdre-def-primitive-category 'Co
2115 '((57344 . 63743)
2116 (983040 . 1048573)
2117 (1048576 . 1114109)))
2118
2119(provide 'xsd-regexp)
2120
2121;;; xsd-regexp.el ends here