diff options
| author | Mark A. Hershberger | 2007-11-23 06:58:00 +0000 |
|---|---|---|
| committer | Mark A. Hershberger | 2007-11-23 06:58:00 +0000 |
| commit | 8cd39fb3c4cf47d2464f00eaa69c587e17dd11cc (patch) | |
| tree | 7bcd47a7dcbbad100dd3e8f8a7e08b48353c58a8 /lisp/nxml | |
| parent | f7cf8b2009b0bc2526d50c3455f737a543122dd4 (diff) | |
| download | emacs-8cd39fb3c4cf47d2464f00eaa69c587e17dd11cc.tar.gz emacs-8cd39fb3c4cf47d2464f00eaa69c587e17dd11cc.zip | |
Initial merge of nxml
Diffstat (limited to 'lisp/nxml')
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 @@ | |||
| 1 | EXTRA=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 | |||
| 5 | SRC=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 | |||
| 11 | ELC=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 | |||
| 17 | FILESTOCLEAN=stamp-byte-compile $(ELC) VERSION TAGS \ | ||
| 18 | nxml-mode.texi nxml-mode.info dir | ||
| 19 | |||
| 20 | EMACS=emacs | ||
| 21 | ETAGS=etags | ||
| 22 | MAKEINFO=makeinfo | ||
| 23 | INSTALL-INFO=install-info | ||
| 24 | PACKAGE=nxml-mode | ||
| 25 | |||
| 26 | stamp-byte-compile: $(SRC) | ||
| 27 | -rm -f $(ELC) | ||
| 28 | $(EMACS) -batch -l rng-auto.el -f rng-byte-compile-load | ||
| 29 | touch $(@) | ||
| 30 | |||
| 31 | all: stamp-byte-compile nxml-mode.info | ||
| 32 | |||
| 33 | dir: nxml-mode.info | ||
| 34 | rm -f $@ | ||
| 35 | $(INSTALL-INFO) $< $@ | ||
| 36 | |||
| 37 | info: nxml-mode.info | ||
| 38 | |||
| 39 | nxml-mode.info: nxml-mode.texi | ||
| 40 | $(MAKEINFO) $< | ||
| 41 | |||
| 42 | nxml-mode.texi: nxml-mode.xml | ||
| 43 | $(EMACS) -batch -l rng-auto.el -f rng-format-manual | ||
| 44 | |||
| 45 | VERSION: stamp-byte-compile rng-auto.el | ||
| 46 | $(EMACS) -batch -l rng-auto.el -f rng-write-version | ||
| 47 | |||
| 48 | TAGS: $(SRC) | ||
| 49 | $(ETAGS) $(SRC) | ||
| 50 | |||
| 51 | dist: 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 | |||
| 77 | clean: | ||
| 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 @@ | |||
| 1 | 20041004 | ||
| 2 | -------- | ||
| 3 | |||
| 4 | Support for outlining has been added. See the manual for more details. | ||
| 5 | |||
| 6 | C-u C-c C-n goes to the first error. | ||
| 7 | |||
| 8 | 20040910 | ||
| 9 | -------- | ||
| 10 | |||
| 11 | C-c RET splits the current element as in PSGML. | ||
| 12 | |||
| 13 | 20040908 | ||
| 14 | -------- | ||
| 15 | |||
| 16 | Indentation has been rewritten. Indentation of attribute names and | ||
| 17 | values should work better. The default value of | ||
| 18 | `nxml-attribute-indent' has been changed to 4. | ||
| 19 | |||
| 20 | Syntax highlighting with a dark background should now work. | ||
| 21 | |||
| 22 | 20040726 | ||
| 23 | -------- | ||
| 24 | |||
| 25 | The attribute pathSuffix on the uri element in schema locating files | ||
| 26 | has been replaced by a more general pattern attribute. The | ||
| 27 | transformURI element now has required fromPattern and toPattern | ||
| 28 | attributes. | ||
| 29 | |||
| 30 | The schema related bindings have been changed to use C-c C-s as a prefix | ||
| 31 | as 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 | |||
| 39 | There's now an XML menu on the menu-bar. | ||
| 40 | |||
| 41 | 20031031 | ||
| 42 | -------- | ||
| 43 | |||
| 44 | C-c C-d "dynamically" chooses a tag to put around the word before | ||
| 45 | point, rather like M-/. | ||
| 46 | |||
| 47 | The mechanism for locating the schema has changed completely. The new | ||
| 48 | mechanism is described in the manual. Any existing customizations of | ||
| 49 | `rng-auto-element-alist' or `rng-auto-file-name-alist' will no longer | ||
| 50 | be effective. | ||
| 51 | |||
| 52 | C-c C-a is now bound to rng-auto-set-schema. | ||
| 53 | |||
| 54 | 20031018 | ||
| 55 | -------- | ||
| 56 | |||
| 57 | Unicode names can be used to insert characters with the new command | ||
| 58 | C-c C-u. Normally, this inserts a character reference. With a prefix | ||
| 59 | arg (i.e. C-u C-c C-u), it inserts the character directly. You can | ||
| 60 | customize `nxml-enabled-unicode-blocks' to control what Unicode blocks | ||
| 61 | are used for completing names. | ||
| 62 | |||
| 63 | Extra information is displayed for character references. The Unicode | ||
| 64 | name is displayed in a tooltip. A glyph for the referenced character | ||
| 65 | is displayed in a distinguished face following the character | ||
| 66 | reference; 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 | ||
| 69 | of extra information for character references for a particular buffer. | ||
| 70 | This can be used if the display of extra information is causing | ||
| 71 | performance problems. nXML mode tries to figure out which glyphs can | ||
| 72 | be displayed. Unfortunately Emacs doesn't provide the primitives | ||
| 73 | necessary to do this properly, so nXML mode has to guess and will | ||
| 74 | sometimes guess wrong. The hook `nxml-glyph-set-hook' can be used to | ||
| 75 | change nXML mode's guess. | ||
| 76 | |||
| 77 | New command C-c C-w says what schema is being used. | ||
| 78 | |||
| 79 | C-c C-s now turns on validation if it is not already on. | ||
| 80 | |||
| 81 | 20030928 | ||
| 82 | -------- | ||
| 83 | |||
| 84 | M-q has been implemented so that it works reasonably with XML. Other | ||
| 85 | paragraph-related commands (M-{, M-}, M-h) have also been implemented. | ||
| 86 | |||
| 87 | New command M-x rng-auto-set-schema to set the schema based on the | ||
| 88 | buffer's current contents and file-name. This is called automatically | ||
| 89 | when rng-validate-mode is first enabled. | ||
| 90 | |||
| 91 | There's now a C-M-d to go with C-M-u. C-M-d moves forward down into | ||
| 92 | the content of an element. C-M-n and C-M-p move to the next or | ||
| 93 | previous element. | ||
| 94 | |||
| 95 | By default, the sexp commands (C-M-f, C-M-b, C-M-k, C-M-SPC) operate | ||
| 96 | on tags rather than elements. To restore the old behaviour, | ||
| 97 | customize nxml-sexp-element-flag. | ||
| 98 | |||
| 99 | The file TUTORIAL has been replaced by nxml-mode.info; this is in info | ||
| 100 | format and can be read using Emacs. The source is maintained in a | ||
| 101 | simple, ad-hoc XML format. | ||
| 102 | |||
| 103 | 20030915 | ||
| 104 | -------- | ||
| 105 | |||
| 106 | XML encodings should now work properly. When saving a buffer, | ||
| 107 | nxml-mode arranges to use the encoding declared in the XML | ||
| 108 | declaration. If there is no encoding declared, then nxml-mode will | ||
| 109 | use 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 | ||
| 112 | cannot encode all the characters in the buffer, nxml-mode will | ||
| 113 | complain and give the user an opportunity to use an encoding that can. | ||
| 114 | |||
| 115 | A new command C-c C-x inserts an XML declaration. | ||
| 116 | |||
| 117 | The option `nxml-auto-insert-xml-declaration-flag' automatically | ||
| 118 | inserts an XML declaration in new files. | ||
| 119 | |||
| 120 | The `nxml-default-buffer-file-coding-system' option allows a different | ||
| 121 | default buffer-file-coding-system for nXML mode buffers. This affects | ||
| 122 | what XML declaration is inserted. | ||
| 123 | |||
| 124 | Encoding names in XML declarations are now validated by | ||
| 125 | rng-validate-mode. | ||
| 126 | |||
| 127 | RDF/XML schema was updated to version in 05 September 2003 WD. | ||
| 128 | |||
| 129 | 20030912 | ||
| 130 | -------- | ||
| 131 | |||
| 132 | The tutorial has a new section on inserting end-tags. | ||
| 133 | |||
| 134 | By default </ no longer automatically inserts the rest of the end-tag. | ||
| 135 | You can do | ||
| 136 | |||
| 137 | M-x customize-variable RET nxml-slash-auto-complete-flag RET | ||
| 138 | |||
| 139 | and then follow the instructions displayed in the buffer to get the | ||
| 140 | old behaviour. | ||
| 141 | |||
| 142 | Completion after </ will complete the rest of the end-tag. Completion | ||
| 143 | after < will include the end-tag in the possibilities if allowed by | ||
| 144 | the schema. | ||
| 145 | |||
| 146 | You can use C-c C-i instead of > to close the start-tag of an | ||
| 147 | inline-level element. After inserting the >, it will insert the | ||
| 148 | end-tag and leave point before the end-tag. The `i' is supposed to be | ||
| 149 | mnemonic for `inline'. C-c C-b is similar, but for block elements: the | ||
| 150 | start-tag, point and the end-tag will all be on separate lines. | ||
| 151 | |||
| 152 | The binding for inserting an end-tag has changed from C-c / to C-c C-f | ||
| 153 | to comply with Emacs guidelines about what keys major modes should | ||
| 154 | bind. The `f' is supposed to be mnemonic for `finish'. | ||
| 155 | |||
| 156 | Completion always puts point after all the characters it inserts. It | ||
| 157 | doesn't insert a `>' after completing a start-tag name. | ||
| 158 | |||
| 159 | Completion no longer completes CDATA section and comment delimiters. | ||
| 160 | |||
| 161 | The nxml-start-auto-coding command enables auto-detection of a file's | ||
| 162 | encoding as specified in the XML Recommendation for files that use | ||
| 163 | nxml-mode; rng-auto.el calls this. | ||
| 164 | |||
| 165 | 20030906 | ||
| 166 | -------- | ||
| 167 | |||
| 168 | Validation messages applicable to point are displayed automatically. | ||
| 169 | |||
| 170 | Completion can deal with prefixes that haven't yet been declared. | ||
| 171 | |||
| 172 | rng-preferred-prefix-alist variable added. | ||
| 173 | |||
| 174 | Namespace URIs can be completed. | ||
| 175 | |||
| 176 | xmlns and xmlns:* attributes can be completed. | ||
| 177 | |||
| 178 | CDATA section and comment delimiters can be completed. | ||
| 179 | |||
| 180 | Each kind of completion has its own history. | ||
| 181 | |||
| 182 | Completion function moved to nxml-mode; uses a hook to allow | ||
| 183 | schema-sensitive completion. Completion function bound to C-return. | ||
| 184 | Also bound to M-TAB as before, unless | ||
| 185 | nxml-bind-meta-tab-to-complete-flag is nil. When there is a window | ||
| 186 | system, nxml-bind-meta-tab-to-complete-flag is nil by default, This | ||
| 187 | avoid problems with M-TAB, which is not passed through by several | ||
| 188 | window systems/managers. | ||
| 189 | |||
| 190 | TUTORIAL file added. | ||
| 191 | |||
| 192 | NEWS file added. | ||
| 193 | |||
| 194 | Bug fixes. | ||
| 195 | |||
| 196 | 20030901 | ||
| 197 | -------- | ||
| 198 | |||
| 199 | Initial 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 @@ | |||
| 1 | This is a new major mode for GNU Emacs for editing XML documents. It | ||
| 2 | supports editing well-formed XML documents and also provides | ||
| 3 | schema-sensitive editing of XML documents using RELAX NG Compact | ||
| 4 | Syntax. | ||
| 5 | |||
| 6 | To use this, you need GNU Emacs version 21.x, preferably 21.3. GNU | ||
| 7 | Emacs version 20 will not work properly, nor will XEmacs. | ||
| 8 | |||
| 9 | To get started, do | ||
| 10 | |||
| 11 | M-x load-file <RET> rng-auto.el <RET> | ||
| 12 | |||
| 13 | This defines the necessary autoloads. Now, visit a file containing | ||
| 14 | an XML document, and do | ||
| 15 | |||
| 16 | M-x nxml-mode | ||
| 17 | |||
| 18 | Now do | ||
| 19 | |||
| 20 | C-h m | ||
| 21 | |||
| 22 | for information on how to use nxml-mode. | ||
| 23 | |||
| 24 | The beginnings of a manual are in nxml-mode.info. You can read this | ||
| 25 | using | ||
| 26 | |||
| 27 | C-u M-x info RET nxml-mode.info RET | ||
| 28 | |||
| 29 | It's also installed as an entry at the end of the top-level info | ||
| 30 | directory. So you can read it with C-h i as usual. | ||
| 31 | |||
| 32 | You can use test.valid.xml and test.invalid.xml as examples of valid | ||
| 33 | and invalid XML documents. | ||
| 34 | |||
| 35 | To get things automatically loaded each time you start Emacs, add | ||
| 36 | |||
| 37 | (load "~/nxml-mode-200YMMDD/rng-auto.el") | ||
| 38 | |||
| 39 | to your .emacs, where ~/nxml-mode-200YMMDD is the directory containing | ||
| 40 | the .elc files. Note that rng-auto.el does not load all of the | ||
| 41 | nxml-mode code; it merely sets things up so that all the features of | ||
| 42 | nxml-mode will be autoloaded properly. You should not try to autoload | ||
| 43 | rng-auto.el itself. | ||
| 44 | |||
| 45 | To use nxml-mode automatically for files with an extension of xml, | ||
| 46 | xsl, rng or xhtml, add | ||
| 47 | |||
| 48 | (setq auto-mode-alist | ||
| 49 | (cons '("\\.\\(xml\\|xsl\\|rng\\|xhtml\\)\\'" . nxml-mode) | ||
| 50 | auto-mode-alist)) | ||
| 51 | |||
| 52 | to your .emacs. | ||
| 53 | |||
| 54 | If you edit XML using iso-8859-N encodings other than iso-8859-1 and | ||
| 55 | you are running Emacs 21.3 or later, then I recommend enabling | ||
| 56 | unify-8859-on-decoding-mode, by adding | ||
| 57 | |||
| 58 | (unify-8859-on-decoding-mode) | ||
| 59 | |||
| 60 | to you .emacs. | ||
| 61 | |||
| 62 | To get validation and schema-sensitive editing, you need a RELAX NG | ||
| 63 | Compact Syntax (RNC) schema for you document. The schema directory | ||
| 64 | includes some schemas for popular document types. | ||
| 65 | |||
| 66 | For more on RELAX NG, see | ||
| 67 | |||
| 68 | http://relaxng.org | ||
| 69 | |||
| 70 | For a tutorial on RELAX NG Compact Syntax, see | ||
| 71 | |||
| 72 | http://relaxng.org/compact-tutorial.html | ||
| 73 | |||
| 74 | For automatically creating RNC schemas, I recommend my Trang program: | ||
| 75 | |||
| 76 | http://www.thaiopensource.com/relaxng/trang.html | ||
| 77 | |||
| 78 | You 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 | |||
| 86 | To convert a RELAX NG XML syntax (.rng) schema to a RNC schema, you | ||
| 87 | can also use the XSLT stylesheet from | ||
| 88 | |||
| 89 | http://www.pantor.com/download.html | ||
| 90 | |||
| 91 | To convert a W3C XML Schema to an RNC schema, you need first to | ||
| 92 | convert it to RELAX NG XML syntax using Sun's RELAX NG converter tool | ||
| 93 | rngconv (built on top of MSV). See | ||
| 94 | |||
| 95 | https://msv.dev.java.net/ | ||
| 96 | |||
| 97 | The file NEWS describes recent changes. | ||
| 98 | |||
| 99 | Please use the list | ||
| 100 | |||
| 101 | http://groups.yahoo.com/group/emacs-nxml-mode/ | ||
| 102 | |||
| 103 | for bug reports, discussion. I will announce all new versions there. | ||
| 104 | |||
| 105 | James Clark | ||
| 106 | http://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 | ||
| 4 | attributes and child elements. When there's a choice of elements | ||
| 5 | possible, we could insert a comment, and put an overlay on that | ||
| 6 | comment that makes it behave like a button with a pop-up menu to | ||
| 7 | select the appropriate choice. | ||
| 8 | |||
| 9 | ** Command to tag a region. With a schema should complete using legal | ||
| 10 | tags, but should work without a schema as well. | ||
| 11 | |||
| 12 | ** Provide a way to conveniently rename an element. With a schema should | ||
| 13 | complete 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 | ||
| 30 | name of heading element rather than depth of section nesting). | ||
| 31 | |||
| 32 | ** Recognize root element as a section provided it has a title, even | ||
| 33 | if it doesn't match section-element-name-regex. | ||
| 34 | |||
| 35 | ** Support for incremental search automatically making hidden text | ||
| 36 | visible. | ||
| 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 | ||
| 43 | or 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 | ||
| 49 | ellipsis. | ||
| 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? | ||
| 58 | Necessary 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 | ||
| 73 | schema if there is currently none? Or should it at least give a hint | ||
| 74 | to the user how to specify a non-vacuous schema? | ||
| 75 | |||
| 76 | ** Support for adding new schemas to schema-locating files. Add | ||
| 77 | documentElement 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 | ||
| 92 | rng-preferred-prefix-alist. | ||
| 93 | |||
| 94 | ** Inserting document element with vacuous schema should complete using | ||
| 95 | document elements declared in schema locating files, and set schema | ||
| 96 | appropriately. | ||
| 97 | |||
| 98 | ** Add a ruleType attribute to the <include> element? | ||
| 99 | |||
| 100 | ** Allow processing instruction in prolog to contain the compact syntax | ||
| 101 | schema 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 | ||
| 106 | file. | ||
| 107 | |||
| 108 | ** Command to reload current schema. | ||
| 109 | |||
| 110 | * Schema-sensitive features | ||
| 111 | |||
| 112 | ** Should filter dynamic markup possibilities using schema validity, by | ||
| 113 | adding hook to nxml-mode. | ||
| 114 | |||
| 115 | ** Dynamic markup word should (at least optionally) be able to look in | ||
| 116 | other 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 | ||
| 125 | more 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 | ||
| 130 | the region is not balanced). Suggestions based on error messages. | ||
| 131 | |||
| 132 | ** Have configurable list of namespace URIs so that we can provide | ||
| 133 | namespace URI completion on extension elements or with schema-less | ||
| 134 | documents. | ||
| 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 | ||
| 143 | some 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 | ||
| 148 | end-tag. Is this a bug or a feature? | ||
| 149 | |||
| 150 | ** After completing start-tag, ensure we don't get unhelpful message | ||
| 151 | from validation | ||
| 152 | |||
| 153 | ** Syntax table for completion. | ||
| 154 | |||
| 155 | ** Should complete start-tag name with a space if namespace attributes | ||
| 156 | are required. | ||
| 157 | |||
| 158 | ** When completing start-tag name with no prefix and it doesn't match | ||
| 159 | should try to infer namespace from local name. | ||
| 160 | |||
| 161 | ** Should completion pay attention to characters after point? If so, | ||
| 162 | how? | ||
| 163 | |||
| 164 | ** When completing start-tag name, add required atts if only one required | ||
| 165 | attribute. | ||
| 166 | |||
| 167 | ** When completing attribute name, add attribute value if only one value | ||
| 168 | is possible. | ||
| 169 | |||
| 170 | ** After attribute-value completion, insert space after close delimiter | ||
| 171 | if 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 | ||
| 176 | completion without having to type < first. | ||
| 177 | |||
| 178 | ** When immediately after start-tag name, and name is valid and not | ||
| 179 | prefix of any other name, should C-return complete on attribute names? | ||
| 180 | |||
| 181 | ** When completing attributes, more consistent to ignore all attributes | ||
| 182 | after point. | ||
| 183 | |||
| 184 | ** Inserting attribute value completions needs to be sensitive to what | ||
| 185 | delimiter 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 | ||
| 190 | mentioned 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. | ||
| 205 | Need to check that context is one in which character references are | ||
| 206 | allowed. xmltok prolog parsing will need to distinguish parameter | ||
| 207 | literals from other kinds of literal. | ||
| 208 | |||
| 209 | ** Provide a comment command to bind to M-; that works better than the | ||
| 210 | normal one. | ||
| 211 | |||
| 212 | ** Make indenting in a multi-line comment work. | ||
| 213 | |||
| 214 | ** Structure view. Separate buffer displaying element tree. Be able to | ||
| 215 | navigate from structure view to document and vice-versa. | ||
| 216 | |||
| 217 | ** Flash matching >. | ||
| 218 | |||
| 219 | ** Smart selection command that selects increasingly large syntactically | ||
| 220 | coherent chunks of XML. If point is in an attribute value, first | ||
| 221 | select complete value; then if command is repeated, select value plus | ||
| 222 | delimiters, then select attribute name as well, then complete | ||
| 223 | start-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 | ||
| 238 | space 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), | ||
| 253 | unless-standalone (unless standalone="yes" in XML declaration). | ||
| 254 | |||
| 255 | ** When a file is currently being edited, there should be an option to | ||
| 256 | use 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. | ||
| 261 | Perhaps provide a way to force ignoring undefined entities; maybe turn | ||
| 262 | this on automatically with <?xml encoding=""?> (with no version | ||
| 263 | pseudo-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 | ||
| 280 | spec. But also need to allow encodings other than UTF-8/16 to support | ||
| 281 | CJK 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 | ||
| 292 | problems. | ||
| 293 | |||
| 294 | ** Cache schemas. Need to have list of files and mtimes. | ||
| 295 | |||
| 296 | ** Make it possible to reduce rng-validate-chunk-size significantly, | ||
| 297 | perhaps to 500 bytes, without bad performance impact: don't do | ||
| 298 | redisplay on every chunk; pass continue functions on other uses of | ||
| 299 | rng-do-some-validation. | ||
| 300 | |||
| 301 | ** Cache after first tag. | ||
| 302 | |||
| 303 | ** Introduce a new name class that is a choice between names (so that | ||
| 304 | we 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 | ||
| 309 | errors using text properties. This implies we cannot incrementally | ||
| 310 | keep track of the number of errors, in order to determine validity. | ||
| 311 | Instead, when validation completes, scan for any characters with an | ||
| 312 | error text property; this seems to be fast enough even with large | ||
| 313 | buffers. Problem with error at end of buffer, where there's no | ||
| 314 | character; need special variable for this. Need to merge face from | ||
| 315 | font-lock with the error face: use :inherit attribute with list of two | ||
| 316 | faces. 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 | ||
| 325 | well-formed | ||
| 326 | |||
| 327 | ** Try to recover from a bad start-tag by popping an open element if | ||
| 328 | there was a mismatched end-tag unaccounted for. | ||
| 329 | |||
| 330 | ** Try to recover from a bad start-tag open on the hypothesis that there | ||
| 331 | was 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 | ||
| 346 | waiting for everything to be completely up to date. | ||
| 347 | |||
| 348 | ** When narrowed, Valid or Invalid status should probably consider only | ||
| 349 | validity 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 | ||
| 366 | use for external parsed entities. At least forbid standalone | ||
| 367 | without 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 | ||
| 380 | xmltok-. Change nxml-t-type to nxml-t-token-type, nxml-t-start to | ||
| 381 | nxml-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 | ||
| 386 | elements | ||
| 387 | |||
| 388 | ** In rng-valid, instead of using modification-hooks and | ||
| 389 | insert-behind-hooks on dependent overlays, use same technique as | ||
| 390 | nxml-mode. | ||
| 391 | |||
| 392 | ** Port to XEmacs. Issues include: Unicode (XEmacs seems to be based on | ||
| 393 | Mule-UCS); overlays/text properties vs extents; absence of | ||
| 394 | fontification-functions hook. | ||
| 395 | |||
| 396 | * Fontification | ||
| 397 | |||
| 398 | ** Allow face to depend on element qname, attribute qname, attribute | ||
| 399 | value. Use list with pairs of (R . F), where R specifies regexps and | ||
| 400 | F specifies faces. How can this list be made to depend on the | ||
| 401 | document 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 | ||
| 414 | constraints 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 | ||
| 425 | where it is detected? In particular, for a missing closing ">" we | ||
| 426 | will need to display it at the beginning of the following token. At | ||
| 427 | the moment, when we parse the following token the error overlay will | ||
| 428 | get 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 | ||
| 433 | have different ends. | ||
| 434 | |||
| 435 | ** How to handle surrogates? One possibility is to be compatible with | ||
| 436 | utf8.e: represent as sequence of 4 chars. But utf-16 is incompatible | ||
| 437 | with 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 | ||
| 441 | an end-tag.) | ||
| 442 | |||
| 443 | ** Seems to be a bug with Emacs, where a mouse movement that causes | ||
| 444 | help-echo text to appear counts as pending input but does not cause | ||
| 445 | idle 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 | ||
| 460 | systems for HTML/XML files automatically." | ||
| 461 | |||
| 462 | ** Take advantage of the pointer text property. | ||
| 463 | |||
| 464 | ** Leverage char-displayable-p. | ||
| 465 | |||
| 466 | Local variables: | ||
| 467 | mode: outline | ||
| 468 | end: | ||
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. | ||
| 123 | Applied 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. | ||
| 85 | This 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. | ||
| 183 | This repertoire is supported for the following fonts: | ||
| 184 | 5x7.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. | ||
| 272 | This repertoire is supported for the following fonts: | ||
| 273 | 6x13.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. | ||
| 337 | The hook will receive a single argument FACE. If it can determine the | ||
| 338 | set of glyphs representable by FACE, it must set the variable | ||
| 339 | `nxml-glyph-set' and return non-nil. Otherwise, it must return | ||
| 340 | nil. 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 | ||
| 344 | for 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. | ||
| 348 | This should dynamically bound by any function that runs | ||
| 349 | `nxml-glyph-set-hook'. The value must be either nil representing an | ||
| 350 | empty set or a vector. Each member of the vector is either a single | ||
| 351 | integer or a cons (FIRST . LAST) representing the range of integers | ||
| 352 | from FIRST to LAST. An integer represents a glyph with that Unicode | ||
| 353 | code-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. | ||
| 381 | FACE gives the face that will be used for displaying the string. | ||
| 382 | Return 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. | ||
| 65 | The glyph is displayed in `nxml-glyph-face'. The hook | ||
| 66 | `nxml-glyph-set-hook' can be used to customize for which characters | ||
| 67 | glyphs 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. | ||
| 83 | This 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. | ||
| 89 | This only applies when the line or lines containing the start-tag contains | ||
| 90 | nothing 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. | ||
| 96 | This only applies when the first attribute of a tag starts a line. In other | ||
| 97 | cases, the first attribute on one line is indented the same as the first | ||
| 98 | attribute 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'. | ||
| 106 | C-return will be bound to `nxml-complete' in any case. | ||
| 107 | M-TAB gets swallowed by many window systems/managers, and | ||
| 108 | `documentation' will show M-TAB rather than C-return as the | ||
| 109 | binding `rng-complete' when both are bound. So it's better | ||
| 110 | to 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. | ||
| 120 | This is used only when a buffer does not contain an encoding declaration | ||
| 121 | and when its current `buffer-file-coding-system' specifies neither UTF-16 | ||
| 122 | nor 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. | ||
| 129 | This is used only for saving a buffer; when reading the byte-order is | ||
| 130 | auto-detected. It may be relevant both when there is no encoding declaration | ||
| 131 | and 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. | ||
| 137 | Nil means use the default value of `buffer-file-coding-system' as normal. | ||
| 138 | A 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. | ||
| 144 | The 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. | ||
| 174 | By default, this is inherited by `nxml-attribute-value-face' | ||
| 175 | and `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. | ||
| 182 | This includes element and attribute names, processing | ||
| 183 | instruction targets and the CDATA keyword in a CDATA section. | ||
| 184 | This 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. | ||
| 191 | This 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. | ||
| 199 | This 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. | ||
| 250 | This 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. | ||
| 362 | The 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. | ||
| 402 | See 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. | ||
| 407 | Nil 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. | ||
| 412 | Degraded mode is enabled when an internal error is encountered in the | ||
| 413 | fontification or after-change functions.") | ||
| 414 | (make-variable-buffer-local 'nxml-degraded) | ||
| 415 | |||
| 416 | (defvar nxml-completion-hook nil | ||
| 417 | "Hook run by `nxml-complete'. | ||
| 418 | This hook is run until success.") | ||
| 419 | |||
| 420 | (defvar nxml-in-mixed-content-hook nil | ||
| 421 | "Hook to determine whether point is in mixed content. | ||
| 422 | The hook is called without arguments. It should return nil if it is | ||
| 423 | definitely not mixed; non-nil otherwise. The hook will be run until | ||
| 424 | one 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. | ||
| 434 | The extra information consists of a tooltip with the character name | ||
| 435 | and, if `nxml-char-ref-display-glyph-flag' is non-nil, a glyph | ||
| 436 | corresponding to the referenced character following the character | ||
| 437 | reference.") | ||
| 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 | |||
| 487 | Syntax 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. | ||
| 491 | C-c C-i closes a start-tag with `>' and then inserts a balancing end-tag | ||
| 492 | leaving point between the start-tag and end-tag. | ||
| 493 | \\[nxml-balanced-close-start-tag-block] is similar but for block rather than inline elements: | ||
| 494 | the start-tag, point, and end-tag are all left on separate lines. | ||
| 495 | If `nxml-slash-auto-complete-flag' is non-nil, then inserting a `</' | ||
| 496 | automatically 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 | ||
| 501 | to choose a tag to put around the word preceding point. | ||
| 502 | |||
| 503 | Sections of the document can be displayed in outline form. The | ||
| 504 | variable `nxml-section-element-name-regexp' controls when an element | ||
| 505 | is recognized as a section. The same key sequences that change | ||
| 506 | visibility in outline mode are used except that they start with C-c C-o | ||
| 507 | instead of C-c. | ||
| 508 | |||
| 509 | Validation is provided by the related minor-mode `rng-validate-mode'. | ||
| 510 | This also makes completion schema- and context- sensitive. Element | ||
| 511 | names, attribute names, attribute values and namespace URIs can all be | ||
| 512 | completed. By default, `rng-validate-mode' is automatically enabled by | ||
| 513 | `rng-nxml-mode-init' which is normally added to `nxml-mode-hook'. You | ||
| 514 | can toggle it using \\[rng-validate-mode]. | ||
| 515 | |||
| 516 | \\[indent-for-tab-command] indents the current line appropriately. | ||
| 517 | This can be customized using the variable `nxml-child-indent' | ||
| 518 | and the variable `nxml-attribute-indent'. | ||
| 519 | |||
| 520 | \\[nxml-insert-named-char] inserts a character reference using | ||
| 521 | the character's name (by default, the Unicode name). \\[universal-argument] \\[nxml-insert-named-char] | ||
| 522 | inserts the character directly. | ||
| 523 | |||
| 524 | The Emacs commands that normally operate on balanced expressions will | ||
| 525 | operate on XML markup items. Thus \\[forward-sexp] will move forward | ||
| 526 | across one markup item; \\[backward-sexp] will move backward across | ||
| 527 | one markup item; \\[kill-sexp] will kill the following markup item; | ||
| 528 | \\[mark-sexp] will mark the following markup item. By default, each | ||
| 529 | tag each treated as a single markup item; to make the complete element | ||
| 530 | be 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 | |||
| 536 | Many 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. | ||
| 684 | The 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. | ||
| 913 | The buffer is assumed to be prepared for fontification. | ||
| 914 | This does not set the fontified property, but it does clear | ||
| 915 | faces 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. | ||
| 927 | Leave 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 | |||
| 1191 | With a prefix ARG, do nothing other than insert the slash. | ||
| 1192 | |||
| 1193 | Otherwise, if `nxml-slash-auto-complete-flag' is non-nil, insert the | ||
| 1194 | rest of the end-tag or empty-element if the slash is potentially part | ||
| 1195 | of an end-tag or the close of an empty-element. | ||
| 1196 | |||
| 1197 | If the slash is part of an end-tag that is the first non-whitespace | ||
| 1198 | on 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. | ||
| 1235 | Point is left between the start-tag and the end-tag. | ||
| 1236 | If there is nothing but whitespace before the `<' that opens the | ||
| 1237 | start-tag, then put point on a blank line, and put the end-tag on | ||
| 1238 | another 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. | ||
| 1244 | Point is left between the start-tag and the end-tag. | ||
| 1245 | No 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. | ||
| 1286 | Point is left after the newly inserted start-tag. When repeated, | ||
| 1287 | split immediately before the previously inserted start-tag and leave | ||
| 1288 | point 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. | ||
| 1300 | The start-tag is inserted if STARTP is non-nil. Return the position | ||
| 1301 | of 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. | ||
| 1383 | When the line containing point ends with an end-tag and does not start | ||
| 1384 | in the middle of a token, return the indent of the line containing the | ||
| 1385 | matching start-tag, if there is one and it occurs at the beginning of | ||
| 1386 | its 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'. | ||
| 1476 | Return the merged indent context type. An indent context type is | ||
| 1477 | either nil or one of the symbols start-tag, end-tag, markup, comment, | ||
| 1478 | mixed." | ||
| 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. | ||
| 1497 | POS is the position of the first non-whitespace character of the line. | ||
| 1498 | This 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. | ||
| 1520 | Also for a line that starts inside an empty element. | ||
| 1521 | POS is the position of the first non-whitespace character of the line. | ||
| 1522 | This 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. | ||
| 1554 | Otherwise return nil. START and END are the positions of the start | ||
| 1555 | and end of the attribute value containing POS. This expects the | ||
| 1556 | xmltok-* 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. | ||
| 1573 | OPEN-DELIM and CLOSE-DELIM are strings giving the opening and closing | ||
| 1574 | delimiters. POS is the position of the first non-whitespace character | ||
| 1575 | of 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 | |||
| 1598 | Inserts as many characters as can be completed. However, if not even | ||
| 1599 | one character can be completed, then a buffer with the possibilities | ||
| 1600 | is popped up and the symbol is read from the minibuffer with | ||
| 1601 | completion. If the symbol is complete, then any characters that must | ||
| 1602 | follow the symbol are also inserted. | ||
| 1603 | |||
| 1604 | The name space used for completion and what is treated as a symbol | ||
| 1605 | depends on the context. The contexts in which completion is performed | ||
| 1606 | depend 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. | ||
| 1617 | With ARG, do it that many times. Negative arg -N means | ||
| 1618 | move backward across N balanced expressions. | ||
| 1619 | This is the equivalent of `forward-sexp' for XML. | ||
| 1620 | |||
| 1621 | An element contains as items strings with no markup, tags, processing | ||
| 1622 | instructions, comments, CDATA sections, entity references and | ||
| 1623 | characters references. However, if the variable | ||
| 1624 | `nxml-sexp-element-flag' is non-nil, then an element is treated as a | ||
| 1625 | single markup item. A start-tag contains an element name followed by | ||
| 1626 | one or more attributes. An end-tag contains just an element name. An | ||
| 1627 | attribute value literals contains strings with no markup, entity | ||
| 1628 | references and character references. A processing instruction | ||
| 1629 | consists of a target and a content string. A comment or a CDATA | ||
| 1630 | section contains a single string. An entity reference contains a | ||
| 1631 | single 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. | ||
| 1902 | With ARG, do this that many times. | ||
| 1903 | Negative 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. | ||
| 1948 | With ARG, do it that many times. | ||
| 1949 | Negative 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. | ||
| 1967 | With ARG, do it that many times. | ||
| 1968 | Negative 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. | ||
| 1997 | The 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. | ||
| 2027 | Return 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. | ||
| 2043 | Return 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. | ||
| 2092 | Return nil if the current token does not contain the paragraph end. | ||
| 2093 | Only characters after OFFSET from the start of the token are eligible. | ||
| 2094 | HAD-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. | ||
| 2148 | Return nil if the current token does not contain the paragraph start. | ||
| 2149 | Only characters before OFFSET from the end of the token are eligible. | ||
| 2150 | HAD-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. | ||
| 2219 | Point must be after an end-tag or before a start-tag. | ||
| 2220 | ENDP 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. | ||
| 2347 | This attempts to find a tag to put around the word before point based | ||
| 2348 | on the contents of the current buffer. The end-tag will be inserted at | ||
| 2349 | point. The start-tag will be inserted at or before the beginning of | ||
| 2350 | the word before point; the contents of the current buffer is used to | ||
| 2351 | decide where. | ||
| 2352 | |||
| 2353 | It works in a similar way to \\[dabbrev-expand]. It searches first | ||
| 2354 | backwards from point, then forwards from point for an element whose | ||
| 2355 | content is a string which matches the contents of the buffer before | ||
| 2356 | point and which includes at least the word before point. It then | ||
| 2357 | copies the start- and end-tags from that element and uses them to | ||
| 2358 | surround the matching string before point. | ||
| 2359 | |||
| 2360 | Repeating \\[nxml-dynamic-markup-word] immediately after successful | ||
| 2361 | \\[nxml-dynamic-markup-word] removes the previously inserted markup | ||
| 2362 | and 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. | ||
| 2470 | Each member of the list has the form (NAME CODE . NAMESET), | ||
| 2471 | where NAME is a string naming a character, NAMESET is a symbol | ||
| 2472 | identifying a set of names and CODE is an integer specifying the | ||
| 2473 | Unicode scalar value of the named character. | ||
| 2474 | The NAME will only be used for completion if NAMESET has | ||
| 2475 | a non-nil `nxml-char-name-set-enabled' property. | ||
| 2476 | If NAMESET does does not have `nxml-char-name-set-defined' property, | ||
| 2477 | then it must have a `nxml-char-name-set-file' property and `load' | ||
| 2478 | will be applied to the value of this property if the nameset | ||
| 2479 | is enabled.") | ||
| 2480 | |||
| 2481 | (defvar nxml-char-name-table (make-hash-table :test 'eq) | ||
| 2482 | "Hash table for mapping char codes to names. | ||
| 2483 | Each key is a Unicode scalar value. | ||
| 2484 | Each value is a list of pairs of the form (NAMESET . NAME), | ||
| 2485 | where NAMESET is a symbol identifying a set of names, | ||
| 2486 | and 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. | ||
| 2508 | NAMESET is a symbol identifying the set. | ||
| 2509 | Alist is a list where each member has the form (NAME CODE), | ||
| 2510 | where NAME is a string naming a character and code | ||
| 2511 | is 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. | ||
| 2543 | The name is read from the minibuffer. | ||
| 2544 | Normally, inserts the character as a numeric character reference. | ||
| 2545 | With 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 | ||
| 33 | is never modified destructively and so can be saved and restored | ||
| 34 | without copying. | ||
| 35 | |||
| 36 | The value is a stack represented by a list. The list has length N + 1 | ||
| 37 | where N is the number of open elements. Each member of the list | ||
| 38 | represents the bindings in effect for a particular element. Each | ||
| 39 | member 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 | ||
| 41 | where PREFIX is a string (never nil) and NS is the namespace URI | ||
| 42 | symbol.") | ||
| 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 | ||
| 47 | represents the state with no open elements and with the default | ||
| 48 | namespace 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 | ||
| 70 | are 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 | ||
| 75 | if 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 | ||
| 80 | is 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 | ||
| 86 | is a symbol (never nil). The change will be in effect until the end of | ||
| 87 | the 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 | ||
| 96 | if 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 | ||
| 101 | will be in effect until the end of the current element. | ||
| 102 | NS 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. | ||
| 86 | An XML element is treated as a section if: | ||
| 87 | |||
| 88 | - its local name (that is, the name without the prefix) matches | ||
| 89 | this regexp; | ||
| 90 | |||
| 91 | - either its first child element or a descendant of that first child | ||
| 92 | element 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. | ||
| 101 | An XML element is only recognized as a heading if it occurs as or | ||
| 102 | within the first child of an element that is recognized as a section. | ||
| 103 | See 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. | ||
| 163 | Anything that is in a section but is not a heading will be hidden. | ||
| 164 | The visibility of headings at any level will not be changed. See the | ||
| 165 | variable `nxml-section-element-name-regexp' for more details on how to | ||
| 166 | customize 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. | ||
| 172 | Each subsection will be shown according to its individual state, which | ||
| 173 | will not be changed. The section containing point is the innermost | ||
| 174 | section that contains the character following point. See the variable | ||
| 175 | `nxml-section-element-name-regexp' for more details on how to | ||
| 176 | customize 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. | ||
| 185 | The section containing point is the innermost section that contains | ||
| 186 | the character following point. See the variable | ||
| 187 | `nxml-section-element-name-regexp' for more details on how to | ||
| 188 | customize 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. | ||
| 198 | The heading of the section will remain visible. The state of | ||
| 199 | subsections will not be changed. The section containing point is the | ||
| 200 | innermost section that contains the character following point. See the | ||
| 201 | variable `nxml-section-element-name-regexp' for more details on how to | ||
| 202 | customize 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. | ||
| 212 | The text content will also be hidden, leaving only the heading of the | ||
| 213 | section itself visible. The state of the subsections will also be | ||
| 214 | changed to hide their headings, so that \\[nxml-show-direct-text-content] | ||
| 215 | would show only the heading of the subsections. The section containing | ||
| 216 | point is the innermost section that contains the character following | ||
| 217 | point. See the variable `nxml-section-element-name-regexp' for more | ||
| 218 | details on how to customize which elements are recognized as sections | ||
| 219 | and 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. | ||
| 226 | This includes everything in the section at any level. The section | ||
| 227 | containing point is the innermost section that contains the character | ||
| 228 | following point. See the variable `nxml-section-element-name-regexp' | ||
| 229 | for more details on how to customize which elements are recognized as | ||
| 230 | sections 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. | ||
| 237 | The section containing point is the innermost section that contains | ||
| 238 | the character following point. See the variable | ||
| 239 | `nxml-section-element-name-regexp' for more details on how to | ||
| 240 | customize 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. | ||
| 246 | The visibility of the text content at all levels in the section is not | ||
| 247 | changed. The section containing point is the innermost section that | ||
| 248 | contains the character following point. See the variable | ||
| 249 | `nxml-section-element-name-regexp' for more details on how to | ||
| 250 | customize 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. | ||
| 256 | Hide headings other than those of ancestors of that section and their | ||
| 257 | immediate subheadings. The section containing point is the innermost | ||
| 258 | section that contains the character following point. See the variable | ||
| 259 | `nxml-section-element-name-regexp' for more details on how to | ||
| 260 | customize 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. | ||
| 429 | OUTLINE-STATE can be nil, t, hide-children. START-TAG-INDENT is the | ||
| 430 | indent of the start-tag of the current element, or nil if no | ||
| 431 | containing element has a non-nil OUTLINE-STATE. TAG-QNAMES is a list | ||
| 432 | of the qnames of the open elements. Point is after the title content. | ||
| 433 | Leave point after the closing end-tag Return t if we had a | ||
| 434 | non-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. | ||
| 761 | Overlays are removed if they overlay the region between START and END, | ||
| 762 | and have a non-nil nxml-outline-display property (typically via their | ||
| 763 | category). If CATEGORY is non-nil, they will be replaced with a new overlay | ||
| 764 | with that category from START to END. If CATEGORY is nil, no new | ||
| 765 | overlay 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. | ||
| 786 | Do 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. | ||
| 840 | Return xmltok-type for tag. | ||
| 841 | If 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. | ||
| 872 | The position of the end of the tag must be <= point | ||
| 873 | Point 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. | ||
| 912 | Signal 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. | ||
| 923 | The start of the section must be <= point. | ||
| 924 | Only visible sections are included unless INVISIBLE-OK is non-nil. | ||
| 925 | If found, return t. Otherwise move to point-min and return nil. | ||
| 926 | If 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. | ||
| 953 | Return the token type. Otherwise return nil. | ||
| 954 | Set 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. | ||
| 966 | Adjust the position to be after initial leading whitespace. | ||
| 967 | Return nil if no heading element is found. Requires point to be | ||
| 968 | immediately 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. | ||
| 38 | The function will be called once for each start-tag or end-tag. The | ||
| 39 | function is passed two arguments TEXT and START-TAG. For a start-tag, | ||
| 40 | START-TAG is a list (NAME ATTRIBUTES) where NAME and ATTRIBUTES are in | ||
| 41 | the same form as returned by `nxml-parse-file. For an end-tag, | ||
| 42 | START-TAG is nil. TEXT is a string containing the text immediately | ||
| 43 | preceding the tag, or nil if there was no such text. An empty element | ||
| 44 | is treated as a start-tag followed by an end-tag. | ||
| 45 | |||
| 46 | For a start-tag, the namespace state will be the state after | ||
| 47 | processing the namespace declarations in the start-tag. For an | ||
| 48 | end-tag, the namespace state will be the state before popping the | ||
| 49 | namespace declarations for the corresponding start-tag. | ||
| 50 | |||
| 51 | The function must return nil if no error is detected or a | ||
| 52 | cons (MESSAGE . LOCATION) where MESSAGE is a string containing | ||
| 53 | an error message and LOCATION indicates what caused the error | ||
| 54 | as 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 | ||
| 59 | TEXT is non-nil; | ||
| 60 | |||
| 61 | - tag-close indicates the close of the tag caused it; this is | ||
| 62 | allowed only if START-TAG is non-nil; | ||
| 63 | |||
| 64 | - (attribute-name . N) indicates that the name of the Nth attribute | ||
| 65 | caused it; N counts from 0; this is allowed only if START-TAG is non-nil | ||
| 66 | and N must be less than the number of attributes; | ||
| 67 | |||
| 68 | - (attribute-value . N) indicates that the value of the Nth attribute | ||
| 69 | caused it; N counts from 0; this is allowed only if START-TAG is non-nil | ||
| 70 | and 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. | ||
| 74 | An XML element is represented as a list (NAME ATTRIBUTES . CHILDREN). | ||
| 75 | NAME is either a string, in the case where the name does not have a | ||
| 76 | namespace, or a cons (NAMESPACE . LOCAL-NAME), where NAMESPACE is a | ||
| 77 | symbol and LOCAL-NAME is a string, in the case where the name does | ||
| 78 | have a namespace. NAMESPACE is a keyword whose name is `:URI', where | ||
| 79 | URI is the namespace name. ATTRIBUTES is an alist of attributes where | ||
| 80 | each attribute has the form (NAME . VALUE), where NAME has the same | ||
| 81 | form as an element name, and VALUE is a string. A namespace | ||
| 82 | declaration is represented as an attribute whose name is | ||
| 83 | \(:http://www.w3.org/2000/xmlns/ . LOCAL-NAME). CHILDREN is a list | ||
| 84 | containing strings and child elements; CHILDREN never contains two | ||
| 85 | consecutive strings and never contains an empty string. Processing | ||
| 86 | instructions and comments are not represented. The return value is a | ||
| 87 | list representing the document element. | ||
| 88 | |||
| 89 | If 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 | ||
| 91 | list of the \(FILE POSITION MESSAGE), where POSITION is an integer | ||
| 92 | specifying the position where the error was detected, and MESSAGE is a | ||
| 93 | string describing the error. | ||
| 94 | |||
| 95 | The current contents of FILE will be parsed even if there is a | ||
| 96 | modified buffer currently visiting FILE. | ||
| 97 | |||
| 98 | If the variable `nxml-validation-function' is non-nil, it will be | ||
| 99 | called twice for each element, and any reported error will be signaled | ||
| 100 | in 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. | ||
| 96 | nxml-scan-end must be >= nxml-prolog-end. Furthermore, nxml-scan-end | ||
| 97 | must not an inside position in the following sense. A position is | ||
| 98 | inside if the following character is a part of, but not the first | ||
| 99 | character of, a CDATA section, comment or processing instruction. | ||
| 100 | Furthermore all positions >= nxml-prolog-end and < nxml-scan-end that | ||
| 101 | are inside positions must have a non-nil nxml-inside property whose | ||
| 102 | value is a symbol specifying what it is inside. Any characters with a | ||
| 103 | non-nil fontified property must have position < nxml-scan-end and the | ||
| 104 | correct face. Dependent regions must also be established for any | ||
| 105 | unclosed constructs starting before nxml-scan-end. | ||
| 106 | There 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. | ||
| 120 | Return 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. | ||
| 128 | Return 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. | ||
| 138 | The change happened between START and END. | ||
| 139 | Return position after which lexical state is unchanged. | ||
| 140 | END 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. | ||
| 243 | Sets 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 | ||
| 247 | type `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. | ||
| 276 | Sets 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. | ||
| 302 | Leave 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. | ||
| 339 | Point must between tokens. Return the position of the end of the tag | ||
| 340 | that ends the element. `xmltok-start' will contain the position of the | ||
| 341 | start of the tag. If UP is non-nil, then scan past end-tag of element | ||
| 342 | containing point. If no element is found, return nil. If a | ||
| 343 | well-formedness error prevents scanning, signal an nxml-scan-error. | ||
| 344 | Point 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; \ | ||
| 367 | expected `%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. | ||
| 390 | Point must between tokens. Return the position of the end of the tag | ||
| 391 | that starts the element. `xmltok-start' will contain the position of | ||
| 392 | the start of the tag. If UP is non-nil, then scan past start-tag of | ||
| 393 | element containing point. If BOUND is non-nil, then don't scan back | ||
| 394 | past BOUND. If no element is found, return nil. If a well-formedness | ||
| 395 | error prevents scanning, signal an nxml-scan-error. Point is not | ||
| 396 | moved." | ||
| 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; \ | ||
| 430 | expected `%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. | ||
| 150 | For each block there is a list (NAME FIRST LAST), where | ||
| 151 | NAME is a string giving the offical name of the block, | ||
| 152 | FIRST is the first code-point and LAST is the last code-point. | ||
| 153 | Blocks containing only characters with algorithmic names or no names | ||
| 154 | are omitted.") | ||
| 155 | |||
| 156 | (defun nxml-unicode-block-char-name-set (name) | ||
| 157 | "Return a symbol for a block whose offical Unicode name is NAME. | ||
| 158 | The symbol is generated by downcasing and replacing each space | ||
| 159 | by 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. | ||
| 220 | Each block is identified by a symbol derived from the name | ||
| 221 | of 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. | ||
| 239 | The Unicode blocks for which names are enabled is controlled by | ||
| 240 | the 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. | ||
| 29 | STR must be a string. If STR is the empty string, return nil. | ||
| 30 | Otherwise, 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. | ||
| 37 | This 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. | ||
| 48 | Any text properties changes happen as usual but the changes are not treated as | ||
| 49 | modifications 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" "\ | ||
| 63 | Return a string that can display a glyph for Unicode code-point N. | ||
| 64 | FACE gives the face that will be used for displaying the string. | ||
| 65 | Return 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" "\ | ||
| 73 | Major mode for editing XML. | ||
| 74 | |||
| 75 | Syntax 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. | ||
| 79 | C-c C-i closes a start-tag with `>' and then inserts a balancing end-tag | ||
| 80 | leaving point between the start-tag and end-tag. | ||
| 81 | \\[nxml-balanced-close-start-tag-block] is similar but for block rather than inline elements: | ||
| 82 | the start-tag, point, and end-tag are all left on separate lines. | ||
| 83 | If `nxml-slash-auto-complete-flag' is non-nil, then inserting a `</' | ||
| 84 | automatically 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 | ||
| 89 | to choose a tag to put around the word preceding point. | ||
| 90 | |||
| 91 | Validation is provided by the related minor-mode `rng-validate-mode'. | ||
| 92 | This also makes completion schema- and context- sensitive. Element | ||
| 93 | names, attribute names, attribute values and namespace URIs can all be | ||
| 94 | completed. By default, `rng-validate-mode' is automatically enabled by | ||
| 95 | `rng-nxml-mode-init' which is normally added to `nxml-mode-hook'. You | ||
| 96 | can toggle it using \\[rng-validate-mode]. | ||
| 97 | |||
| 98 | \\[indent-for-tab-command] indents the current line appropriately. | ||
| 99 | This can be customized using the variable `nxml-child-indent' | ||
| 100 | and the variable `nxml-attribute-indent'. | ||
| 101 | |||
| 102 | \\[nxml-insert-named-char] inserts a character reference using | ||
| 103 | the character's name (by default, the Unicode name). \\[universal-argument] \\[nxml-insert-named-char] | ||
| 104 | inserts the character directly. | ||
| 105 | |||
| 106 | The Emacs commands that normally operate on balanced expressions will | ||
| 107 | operate on XML markup items. Thus \\[forward-sexp] will move forward | ||
| 108 | across one markup item; \\[backward-sexp] will move backward across | ||
| 109 | one markup item; \\[kill-sexp] will kill the following markup item; | ||
| 110 | \\[mark-sexp] will mark the following markup item. By default, each | ||
| 111 | tag each treated as a single markup item; to make the complete element | ||
| 112 | be 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 | ||
| 117 | down the element structure. | ||
| 118 | |||
| 119 | Many 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" "\ | ||
| 129 | Enable the use of Unicode standard names for characters. | ||
| 130 | The Unicode blocks for which names are enabled is controlled by | ||
| 131 | the 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" "\ | ||
| 140 | Load a schema in RELAX NG compact syntax from FILENAME. | ||
| 141 | Return 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" "\ | ||
| 150 | Update the autoloads in rng-auto.el." t nil) | ||
| 151 | |||
| 152 | (autoload (quote rng-byte-compile-load) "rng-maint" "\ | ||
| 153 | Byte-compile and load all of the RELAX NG library in an appropriate order." t nil) | ||
| 154 | |||
| 155 | (autoload (quote rng-format-manual) "rng-maint" "\ | ||
| 156 | Create 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" "\ | ||
| 167 | Initialize `nxml-mode' to take advantage of `rng-validate-mode'. | ||
| 168 | This is typically called from `nxml-mode-hook'. | ||
| 169 | Validation 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" "\ | ||
| 178 | Minor mode performing continual validation against a RELAX NG schema. | ||
| 179 | |||
| 180 | Checks whether the buffer is a well-formed XML 1.0 document, | ||
| 181 | conforming to the XML Namespaces Recommendation and valid against a | ||
| 182 | RELAX NG schema. The mode-line indicates whether it is or not. Any | ||
| 183 | parts of the buffer that cause it not to be are considered errors and | ||
| 184 | are highlighted with `rng-error-face'. A description of each error is | ||
| 185 | available as a tooltip. \\[rng-next-error] goes to the next error | ||
| 186 | after point. Clicking mouse-1 on the word `Invalid' in the mode-line | ||
| 187 | goes to the first error in the buffer. If the buffer changes, then it | ||
| 188 | will be automatically rechecked when Emacs becomes idle; the | ||
| 189 | rechecking will be paused whenever there is input pending.. | ||
| 190 | |||
| 191 | By default, uses a vacuous schema that allows any well-formed XML | ||
| 192 | document. A schema can be specified explictly using | ||
| 193 | \\[rng-set-schema-file-and-validate], or implicitly based on the buffer's | ||
| 194 | file name or on the root element name. In each case the schema must | ||
| 195 | be a RELAX NG schema using the compact schema (such schemas | ||
| 196 | conventionally have a suffix of `.rnc'). The variable | ||
| 197 | `rng-schema-locating-files' specifies files containing rules | ||
| 198 | to 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" "\ | ||
| 209 | Provides W3C XML Schema as a RELAX NG datatypes library. NAME is a | ||
| 210 | symbol giving the local name of the datatype. PARAMS is a list of | ||
| 211 | pairs (PARAM-NAME . PARAM-VALUE) where PARAM-NAME is a symbol giving | ||
| 212 | the name of the parameter and PARAM-VALUE is a string giving its | ||
| 213 | value. If NAME or PARAMS are invalid, it calls rng-dt-error passing | ||
| 214 | it arguments in the same style as format; the value from rng-dt-error | ||
| 215 | will be returned. Otherwise, it returns a list. The first member of | ||
| 216 | the list is t if any string is a legal value for the datatype and nil | ||
| 217 | otherwise. The second argument is a symbol; this symbol will be | ||
| 218 | called as a function passing it a string followed by the remaining | ||
| 219 | members of the list. The function must return an object representing | ||
| 220 | the value of the datatype that was represented by the string, or nil | ||
| 221 | if the string is not a representation of any value. The object | ||
| 222 | returned can be any convenient non-nil value, provided that, if two | ||
| 223 | strings 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" "\ | ||
| 232 | Return the position of the encoding in the XML declaration at point. | ||
| 233 | If there is a well-formed XML declaration starting at point and it | ||
| 234 | contains an encoding declaration, then return (START . END) | ||
| 235 | where START and END are the positions of the start and the end | ||
| 236 | of the encoding name; if there is no encoding declaration return | ||
| 237 | the position where and encoding declaration could be inserted. | ||
| 238 | If there is XML that is not well-formed that looks like an XML declaration, | ||
| 239 | return nil. Otherwise, return t. | ||
| 240 | If 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. | ||
| 43 | Return 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. | ||
| 217 | Contains a list of pairs (PREFIX . URI) where PREFIX is a string | ||
| 218 | and 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 | ||
| 250 | two-element vector [OVERRIDE COMBINE]. COMBINE is either nil, choice | ||
| 251 | or 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 | ||
| 619 | token of the expression. After parsing the current token should be | ||
| 620 | token 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 | ||
| 905 | parse 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 | ||
| 38 | list is a symbol which is the name of a function. This function is | ||
| 39 | applied to the cdr of the list. The function must return a list whose | ||
| 40 | car is the default namespace and whose cdr is an alist of (PREFIX | ||
| 41 | . NAMESPACE) pairs, where PREFIX is a string and NAMESPACE is a | ||
| 42 | symbol. This must be dynamically bound before calling a datatype | ||
| 43 | library.") | ||
| 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. | ||
| 36 | Nil 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. | ||
| 89 | FILENAME must be the name of a file containing a schema. | ||
| 90 | The extension of FILENAME is used to determine what kind of schema it | ||
| 91 | is. The variable `rng-schema-loader-alist' maps from schema | ||
| 92 | extensions to schema loader functions. The function | ||
| 93 | `rng-c-load-schema' is the loader for RELAX NG compact syntax. The | ||
| 94 | association is between the buffer and the schema: the association is | ||
| 95 | lost 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. | ||
| 154 | Return nil if no schema could be located. | ||
| 155 | If 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. | ||
| 188 | FILES is a list of file-names. | ||
| 189 | Return either a URI, a list (TYPE-ID) where TYPE-ID is a string | ||
| 190 | or 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). | ||
| 266 | NS 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. | ||
| 382 | Return either a URI, a list (TYPE-ID) where TYPE-ID is a string | ||
| 383 | or 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. | ||
| 432 | Each rule has the form (TYPE (ATTR . VAL) ...), where | ||
| 433 | TYPE is a symbol for the element name, ATTR is a symbol for the attribute | ||
| 434 | and VAL is a string for the value. | ||
| 435 | Attribute values representing URIs are made absolute and xml:base | ||
| 436 | attributes 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. | ||
| 477 | This ensures that the schema that is currently being used will be used | ||
| 478 | if the file is edited in a future session. The association will be | ||
| 479 | saved 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. | ||
| 46 | Used 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. | ||
| 113 | The new memo-map may or may not be a different object from MM. | ||
| 114 | |||
| 115 | Alists are better for small maps. Hash tables are better for large | ||
| 116 | maps. A memo-map therefore starts off as an alist and switches to a | ||
| 117 | hash table for large memo-maps. A memo-map is always a list. An empty | ||
| 118 | memo-map is represented by nil. A large memo-map is represented by a | ||
| 119 | list containing just a hash-table. A small memo map is represented by | ||
| 120 | a list whose cdr is an alist and whose car is the number of entries in | ||
| 121 | the alist. The complete memo-map can be passed to assoc without | ||
| 122 | problems: assoc ignores any members that are not cons cells. There is | ||
| 123 | therefore 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 | ||
| 312 | interned 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. | ||
| 338 | Expands nested groups, removes empty members, handles notAllowed. | ||
| 339 | Returns a pair whose car says whether the list is nullable and whose | ||
| 340 | cdr 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. | ||
| 376 | Expands nested groups, removes empty members, handles notAllowed. | ||
| 377 | Returns a pair whose car says whether the list is nullable and whose | ||
| 378 | cdr 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. | ||
| 402 | May 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 | ||
| 436 | interned 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 | ||
| 454 | not-allowed members, sorting by index and removing duplicates. Return | ||
| 455 | a pair whose car says whether the list is nullable and whose cdr is | ||
| 456 | the 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 | |||
| 538 | Each possible name should be returned as a (NAMESPACE . LOCAL-NAME) | ||
| 539 | pair, where NAMESPACE is a symbol or nil and LOCAL-NAME is a string. | ||
| 540 | nil for NAMESPACE matches the absent namespace. ACCUM is a list of | ||
| 541 | names which should be appended to the returned list. The returned list | ||
| 542 | may 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 | ||
| 1279 | nullable 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. | ||
| 1621 | The 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. | ||
| 1650 | In other words, return non-nil if the pattern for what can be matched | ||
| 1651 | for 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 | |||
| 1682 | Each possible name is returned as a (NAMESPACE . LOCAL-NAME) pair, | ||
| 1683 | where NAMESPACE is a symbol or nil (meaning the absent namespace) and | ||
| 1684 | LOCAL-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 | |||
| 1695 | See the function `rng-match-possible-start-tag-names' for | ||
| 1696 | more 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. | ||
| 1701 | The list may contain duplicates. Typically, the list will not | ||
| 1702 | be 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. | ||
| 54 | Complete 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'. | ||
| 90 | This is typically called from `nxml-mode-hook'. | ||
| 91 | Validation 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. | ||
| 124 | Return 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. | ||
| 362 | Return nil only if point is definitely not in mixed content. | ||
| 363 | If 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. | ||
| 371 | This does not change the xmltok state or point. However, it does | ||
| 372 | set `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. | ||
| 38 | The returned list has the same form as that returned by | ||
| 39 | `nxml-parse-file'. SCHEMA is a list representing the schema to use | ||
| 40 | for validation, such as returned by the function `rng-c-load-schema'. | ||
| 41 | If the XML document is invalid with respect to schema, an error will | ||
| 42 | be 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. | ||
| 29 | Multibyte characters are left as is. Use `rng-uri-escape-multibyte' to | ||
| 30 | escape 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. | ||
| 58 | Signal 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. | ||
| 168 | URI-REF is the URI reference to be resolved. | ||
| 169 | BASE-URI is the base URI to use for resolving it. | ||
| 170 | The algorithm is specified by RFC 2396. | ||
| 171 | If there is some problem with URI-REF or BASE-URI, then | ||
| 172 | URI-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. | ||
| 241 | The returned URI will be relative if possible. | ||
| 242 | Both 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 | ||
| 41 | its 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 | ||
| 52 | its 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. | ||
| 65 | LIST 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. | ||
| 89 | Replaces the text between START and point with a string chosen using a | ||
| 90 | completion table and, when needed, input read from the user with the | ||
| 91 | minibuffer. | ||
| 92 | Returns the new string if either a complete and unique completion was | ||
| 93 | determined automatically or input was read from the user. Otherwise, | ||
| 94 | returns nil. | ||
| 95 | TABLE is an alist, a symbol bound to a function or an obarray as with | ||
| 96 | the function `completing-read'. | ||
| 97 | PROMPT is the string to prompt with if user input is needed. | ||
| 98 | PREDICATE is nil or a function as with `completing-read'. | ||
| 99 | HIST, 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 | '(("&" . "&") | ||
| 155 | ("\"" . """) | ||
| 156 | (">" . ">") | ||
| 157 | ("<" . "<"))))) | ||
| 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. | ||
| 119 | A validation chunk will be the smallest chunk that is at least this | ||
| 120 | size and ends with a tag. After validating a chunk, validation will | ||
| 121 | continue 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. | ||
| 127 | A full validation continues until either validation is up to date | ||
| 128 | or 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. | ||
| 134 | A 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 | ||
| 152 | overlays 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. | ||
| 157 | Nil 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. | ||
| 162 | If point is equal to this and the error overlay around | ||
| 163 | point is `rng-message-overlay', then the `help-echo' property | ||
| 164 | of 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. | ||
| 173 | Each 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 | ||
| 175 | for a mismatched end-tag.") | ||
| 176 | |||
| 177 | (defvar rng-pending-contents nil | ||
| 178 | "Text content of current element that has yet to be processed. | ||
| 179 | Value is a list of segments (VALUE START END) positions in reverse | ||
| 180 | order. VALUE is a string or nil. If VALUE is nil, then the value is | ||
| 181 | the string between START and END. A segment can also be nil | ||
| 182 | indicating 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. | ||
| 192 | Nil if there is no conditionally up-to-date region. The conditionally | ||
| 193 | up-to-date region must be such that for any cached state S with | ||
| 194 | position P in the conditionally up-to-date region, if at some point it | ||
| 195 | is determined that S becomes correct for P, then all states with | ||
| 196 | position >= P in the conditionally up to date region must also then be | ||
| 197 | correct and all errors between P and the end of the region must then | ||
| 198 | be 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. | ||
| 203 | Nil 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. | ||
| 209 | Should 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 | |||
| 221 | Checks whether the buffer is a well-formed XML 1.0 document, | ||
| 222 | conforming to the XML Namespaces Recommendation and valid against a | ||
| 223 | RELAX NG schema. The mode-line indicates whether it is or not. Any | ||
| 224 | parts of the buffer that cause it not to be are considered errors and | ||
| 225 | are highlighted with `rng-error-face'. A description of each error is | ||
| 226 | available as a tooltip. \\[rng-next-error] goes to the next error | ||
| 227 | after point. Clicking mouse-1 on the word `Invalid' in the mode-line | ||
| 228 | goes to the first error in the buffer. If the buffer changes, then it | ||
| 229 | will be automatically rechecked when Emacs becomes idle; the | ||
| 230 | rechecking will be paused whenever there is input pending.. | ||
| 231 | |||
| 232 | By default, uses a vacuous schema that allows any well-formed XML | ||
| 233 | document. A schema can be specified explictly using | ||
| 234 | \\[rng-set-schema-file-and-validate], or implicitly based on the buffer's | ||
| 235 | file name or on the root element name. In each case the schema must | ||
| 236 | be a RELAX NG schema using the compact schema \(such schemas | ||
| 237 | conventionally have a suffix of `.rnc'). The variable | ||
| 238 | `rng-schema-locating-files' specifies files containing rules | ||
| 239 | to 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. | ||
| 289 | The 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'. | ||
| 301 | The 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. | ||
| 500 | Return 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. | ||
| 809 | Turn 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. | ||
| 832 | Turn on `rng-validate-mode' if it is not already on. | ||
| 833 | A prefix ARG specifies how many errors to move. A negative ARG | ||
| 834 | moves backwards. Just \\[universal-argument] as a prefix | ||
| 835 | means 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. | ||
| 847 | Turn on `rng-validate-mode' if it is not already on. | ||
| 848 | A prefix ARG specifies how many errors to move. A negative ARG | ||
| 849 | moves forwards. Just \\[universal-argument] as a prefix | ||
| 850 | means 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. | ||
| 948 | Return nil if there is no such overlay or it is out of date. | ||
| 949 | Do 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. | ||
| 973 | Return nil if there is no such overlay or it is out of date. | ||
| 974 | Do 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. | ||
| 998 | If LIMIT is nil, stop after tags. | ||
| 999 | If LIMIT is non-nil, stop when end of last token parsed is >= LIMIT. | ||
| 1000 | Return 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 | ||
| 1054 | an empty element. partial-empty-element should be passed | ||
| 1055 | as 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. | ||
| 1389 | END nil means point. WHITESPACE t means known to be whitespace, nil | ||
| 1390 | means known not to be, anything else means unknown whether whitespace | ||
| 1391 | or not. END must not be nil if WHITESPACE is neither t nor nil. | ||
| 1392 | VALUE is a string or nil; nil means the value is equal to the | ||
| 1393 | string 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 | ||
| 50 | symbol giving the local name of the datatype. PARAMS is a list of | ||
| 51 | pairs (PARAM-NAME . PARAM-VALUE) where PARAM-NAME is a symbol giving | ||
| 52 | the name of the parameter and PARAM-VALUE is a string giving its | ||
| 53 | value. If NAME or PARAMS are invalid, it calls rng-dt-error passing | ||
| 54 | it arguments in the same style as format; the value from rng-dt-error | ||
| 55 | will be returned. Otherwise, it returns a list. The first member of | ||
| 56 | the list is t if any string is a legal value for the datatype and nil | ||
| 57 | otherwise. The second argument is a symbol; this symbol will be | ||
| 58 | called as a function passing it a string followed by the remaining | ||
| 59 | members of the list. The function must return an object representing | ||
| 60 | the value of the datatype that was represented by the string, or nil | ||
| 61 | if the string is not a representation of any value. The object | ||
| 62 | returned can be any convenient non-nil value, provided that, if two | ||
| 63 | strings 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 | ||
| 250 | its values. A decimal value is represented by a vector [SIGN | ||
| 251 | INTEGER-DIGITS FRACTION-DIGITS] where SIGN is 1 or -1, INTEGER-DIGITS | ||
| 252 | is a string containing zero or more digits, with no leading zero, and | ||
| 253 | FRACTION-DIGITS is a string containing zero or more digits with no | ||
| 254 | trailing 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 | ||
| 369 | template is a string with Y standing for years field, M standing for | ||
| 370 | months, D standing for day of month, T standing for a literal T, t | ||
| 371 | standing for time and - standing for a literal hyphen. A time zone is | ||
| 372 | always allowed at the end. Regardless of the fields appearing in the | ||
| 373 | template, the regular expression will have twelve groups matching the | ||
| 374 | year sign, year, month, day of month, hours, minutes, integer seconds, | ||
| 375 | fractional seconds (including leading period), time zone, time zone | ||
| 376 | sign, 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 | ||
| 439 | invalid. 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 | ||
| 441 | DAY SECOND SECOND-FRACTION), where HAS-TIME-ZONE is t or nil depending | ||
| 442 | on whether a time zone was specified, DAY is an integer giving a day | ||
| 443 | number (with Jan 1 1AD being day 1), SECOND is the second within that | ||
| 444 | day, and SECOND-FRACTION is a float giving the fractional part of the | ||
| 445 | second." | ||
| 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. | ||
| 650 | Returns 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. | ||
| 665 | MONTHS 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. | ||
| 101 | Each member of the list is a vector representing an attribute, which | ||
| 102 | can 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. | ||
| 109 | List 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 | |||
| 115 | It consists of an alist of general entity names vs definitions. The | ||
| 116 | first member of the alist is t if references to entities not in the | ||
| 117 | alist are well-formed \(e.g. because there's an external subset that | ||
| 118 | wasn't parsed). | ||
| 119 | |||
| 120 | Each general entity name is a string. The definition is either nil, a | ||
| 121 | symbol, a string, a cons cell. If the definition is nil, then it | ||
| 122 | means that it's an internal entity but the result of parsing it is | ||
| 123 | unknown. If it is a symbol, then the symbol is either `unparsed', | ||
| 124 | meaning the entity is an unparsed entity, `external', meaning the | ||
| 125 | entity is or references an external entity, `element', meaning the | ||
| 126 | entity includes one or more elements, or `not-well-formed', meaning | ||
| 127 | the replacement text is not well-formed. If the definition is a | ||
| 128 | string, then the replacement text of the entity is that string; this | ||
| 129 | happens only during the parsing of the prolog. If the definition is a | ||
| 130 | cons cell \(ER . AR), then ER specifies the string that results from | ||
| 131 | referencing the entity in element content and AR is either nil, | ||
| 132 | meaning the replacement text included a <, or a string which is the | ||
| 133 | normalized attribute value.") | ||
| 134 | |||
| 135 | (defvar xmltok-dependent-regions nil | ||
| 136 | "List of descriptors of regions that a parsed token depends on. | ||
| 137 | |||
| 138 | A token depends on a region if the region occurs after the token and a | ||
| 139 | change in the region may require the token to be reparsed. This only | ||
| 140 | happens with markup that is not well-formed. For example, if a <? | ||
| 141 | occurs without a matching ?>, then the <? is returned as a | ||
| 142 | not-well-formed token. However, this token is dependent on region | ||
| 143 | from the end of the token to the end of the buffer: if this ever | ||
| 144 | contains ?> then the buffer must be reparsed from the <?. | ||
| 145 | |||
| 146 | A region descriptor is a list (FUN START END ARG ...), where FUN is a | ||
| 147 | function to be called when the region changes, START and END are | ||
| 148 | integers giving the start and end of the region, and ARG... are | ||
| 149 | additional arguments to be passed to FUN. FUN will be called with 5 | ||
| 150 | arguments followed by the additional arguments if any: the position of | ||
| 151 | the start of the changed area in the region, the position of the end | ||
| 152 | of the changed area in the region, the length of the changed area | ||
| 153 | before the change, the position of the start of the region, the | ||
| 154 | position of the end of the region. FUN must return non-nil if the | ||
| 155 | region needs reparsing. FUN will be called in a save-excursion with | ||
| 156 | match-data saved. | ||
| 157 | |||
| 158 | `xmltok-forward', `xmltok-forward-special' and `xmltok-forward-prolog' | ||
| 159 | may add entries to the beginning of this list, but will not clear it. | ||
| 160 | `xmltok-forward' and `xmltok-forward-special' will only add entries | ||
| 161 | when 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'. | ||
| 165 | When `xmltok-forward' and `xmltok-forward-prolog' detect a | ||
| 166 | well-formedness error, they will add an entry to the beginning of this | ||
| 167 | list. Each entry is a vector [MESSAGE START END], where MESSAGE is a | ||
| 168 | string giving the error message and START and END are integers | ||
| 169 | indicating 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. | ||
| 203 | This can t indicating that the normalized value is the same as the | ||
| 204 | buffer substring from the start to the end of the value or nil | ||
| 205 | indicating 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. | ||
| 210 | Each member is a vector [TYPE START END] where TYPE is either char-ref | ||
| 211 | or entity-ref and START and END are integers giving the start and end | ||
| 212 | of 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 | ||
| 271 | not well-formed, t if the normalized value is the string between | ||
| 272 | VALUE-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. | ||
| 352 | Return nil if there is no special token that starts before BOUND. | ||
| 353 | CDATA sections, processing instructions and comments (and indeed | ||
| 354 | anything starting with < following by ? or !) count | ||
| 355 | as 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 `<'") | ||
| 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 `&'") | ||
| 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. | ||
| 1096 | Return 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 | |||
| 1120 | Returns a list of vectors [TYPE START END] where TYPE is a symbol and | ||
| 1121 | START and END are integers giving the start and end of the region of | ||
| 1122 | that type. TYPE can be one of xml-declaration, | ||
| 1123 | xml-declaration-attribute-name, xml-declaration-attribute-value, | ||
| 1124 | comment, processing-instruction-left, processing-instruction-right, | ||
| 1125 | markup-declaration-open. markup-declaration-close, | ||
| 1126 | internal-subset-open, internal-subset-close, hash-name, keyword, | ||
| 1127 | literal, encoding-name. | ||
| 1128 | Adds 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. | ||
| 1161 | If there is a well-formed XML declaration starting at point and it | ||
| 1162 | contains an encoding declaration, then return (START . END) | ||
| 1163 | where START and END are the positions of the start and the end | ||
| 1164 | of the encoding name; if there is no encoding declaration return | ||
| 1165 | the position where and encoding declaration could be inserted. | ||
| 1166 | If there is XML that is not well-formed that looks like an XML declaration, | ||
| 1167 | return nil. Otherwise, return t. | ||
| 1168 | If 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 "\ | ||
| 1703 | Processing 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'. | ||
| 1882 | The members of the merged list are in order of occurrence in the | ||
| 1883 | document. The list may share list structure with `xmltok-attributes' | ||
| 1884 | and `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. | ||
| 67 | Returns a string. REGEXP is a string. If REGEXP is not a valid XSD | ||
| 68 | regexp, 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. | ||
| 100 | If the range contains a single integer, it is represented by that integer. | ||
| 101 | Otherwise, 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. | ||
| 116 | A range-list represents a set of integers by a list of ranges in a | ||
| 117 | canonical form, in which ranges are in increasing order, and adjacent | ||
| 118 | ranges 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. | ||
| 185 | Signal 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. | ||
| 212 | Returns a list of strings whose head is the regexp for RE | ||
| 213 | and 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. | ||
| 275 | Returns a list of strings whose head is the regexp for CC | ||
| 276 | and 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: \ | ||
| 315 | unknown 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. | ||
| 328 | Also 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. | ||
| 376 | RANGE-LIST must contain more than integer. | ||
| 377 | The char alternative is a string containing an Emacs regexp | ||
| 378 | consisting 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 | |||
| 429 | The symbolic form has the following structure: | ||
| 430 | |||
| 431 | REGEXP ::= | ||
| 432 | (sequence REGEXP ...) | ||
| 433 | | (choice REGEXP ...) | ||
| 434 | | (repeat REGEXP MIN MAX) | ||
| 435 | | CHAR-CLASS | ||
| 436 | |||
| 437 | CHAR-CLASS ::= | ||
| 438 | CHAR | ||
| 439 | | SYMBOLIC-CHAR-CLASS | ||
| 440 | | RANGE | ||
| 441 | | (union CHAR-CLASS ...) | ||
| 442 | | (difference CHAR-CLASS CHAR-CLASS) | ||
| 443 | |||
| 444 | RANGE ::= (range LOWER UPPER) | ||
| 445 | |||
| 446 | MIN ::= INTEGER | ||
| 447 | MAX ::= INTEGER | nil | ||
| 448 | CHAR ::= UNICODE | ||
| 449 | LOWER ::= UNICODE | ||
| 450 | UPPER ::= UNICODE | ||
| 451 | SYMBOLIC-CHAR-CLASS ::= SYMBOL | ||
| 452 | |||
| 453 | where UNICODE is a integer specifying a Unicode code-point and | ||
| 454 | SYMBOLIC-CHAR-CLASS is a symbol which has either a `xsdre-char-class' | ||
| 455 | property whose value is a CHAR-CLASS, or a `xsdre-ranges' property | ||
| 456 | whose 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. | ||
| 711 | Code 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 | ||