Mercurial > emacs
changeset 86361:38f93f3d00a2
Initial merge of nxml
line wrap: on
line diff
--- a/doc/emacs/ChangeLog Fri Nov 23 04:17:56 2007 +0000 +++ b/doc/emacs/ChangeLog Fri Nov 23 06:58:00 2007 +0000 @@ -1,3 +1,7 @@ +2007-11-23 Mark A. Hershberger <mah@everybody.org> + + * nxml-mode.texi: Initial merge of nxml. + 2007-11-18 Richard Stallman <rms@gnu.org> * flymake.texi (Example -- Configuring a tool called directly):
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/emacs/nxml-mode.texi Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,834 @@ +\input texinfo @c -*- texinfo -*- +@c %**start of header +@setfilename nxml-mode.info +@settitle nXML Mode +@c %**end of header + +@dircategory Emacs +@direntry +* nXML Mode: (nxml-mode.info). +@end direntry + +@node Top +@top nXML Mode + +This manual documents nxml-mode, an Emacs major mode for editing +XML with RELAX NG support. This manual is not yet complete. + +@menu +* Completion:: +* Inserting end-tags:: +* Paragraphs:: +* Outlining:: +* Locating a schema:: +* DTDs:: +* Limitations:: +@end menu + +@node Completion +@chapter Completion + +Apart from real-time validation, the most important feature that +nxml-mode provides for assisting in document creation is "completion". +Completion assists the user in inserting characters at point, based on +knowledge of the schema and on the contents of the buffer before +point. + +The traditional GNU Emacs key combination for completion in a +buffer is @kbd{M-@key{TAB}}. However, many window systems +and window managers use this key combination themselves (typically for +switching between windows) and do not pass it to applications. It's +hard to find key combinations in GNU Emacs that are both easy to type +and not taken by something else. @kbd{C-@key{RET}} (i.e. +pressing the Enter or Return key, while the Ctrl key is held down) is +available. It won't be available on a traditional terminal (because +it is indistinguishable from Return), but it will work with a window +system. Therefore we adopt the following solution by default: use +@kbd{C-@key{RET}} when there's a window system and +@kbd{M-@key{TAB}} when there's not. In the following, I +will assume that a window system is being used and will therefore +refer to @kbd{C-@key{RET}}. + +Completion works by examining the symbol preceding point. This +is the symbol to be completed. The symbol to be completed may be the +empty. Completion considers what symbols starting with the symbol to +be completed would be valid replacements for the symbol to be +completed, given the schema and the contents of the buffer before +point. These symbols are the possible completions. An example may +make this clearer. Suppose the buffer looks like this (where @point{} +indicates point): + +@example +<html xmlns="http://www.w3.org/1999/xhtml"> +<h@point{} +@end example + +@noindent +and the schema is XHTML. In this context, the symbol to be completed +is @samp{h}. The possible completions consist of just +@samp{head}. Another example, is + +@example +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<@point{} +@end example + +@noindent +In this case, the symbol to be completed is empty, and the possible +completions are @samp{base}, @samp{isindex}, +@samp{link}, @samp{meta}, @samp{script}, +@samp{style}, @samp{title}. Another example is: + +@example +<html xmlns="@point{} +@end example + +@noindent +In this case, the symbol to be completed is empty, and the possible +completions are just @samp{http://www.w3.org/1999/xhtml}. + +When you type @kbd{C-@key{RET}}, what happens depends +on what the set of possible completions are. + +@itemize @bullet +@item +If the set of completions is empty, nothing +happens. +@item +If there is one possible completion, then that completion is +inserted, together with any following characters that are +required. For example, in this case: + +@example +<html xmlns="http://www.w3.org/1999/xhtml"> +<@point{} +@end example + +@noindent +@kbd{C-@key{RET}} will yield + +@example +<html xmlns="http://www.w3.org/1999/xhtml"> +<head@point{} +@end example +@item +If there is more than one possible completion, but all +possible completions share a common non-empty prefix, then that prefix +is inserted. For example, suppose the buffer is: + +@example +<html x@point{} +@end example + +@noindent +The symbol to be completed is @samp{x}. The possible completions +are @samp{xmlns} and @samp{xml:lang}. These share a +common prefix of @samp{xml}. Thus, @kbd{C-@key{RET}} +will yield: + +@example +<html xml@point{} +@end example + +@noindent +Typically, you would do @kbd{C-@key{RET}} again, which would +have the result described in the next item. +@item +If there is more than one possible completion, but the +possible completions do not share a non-empty prefix, then Emacs will +prompt you to input the symbol in the minibuffer, initializing the +minibuffer with the symbol to be completed, and popping up a buffer +showing the possible completions. You can now input the symbol to be +inserted. The symbol you input will be inserted in the buffer instead +of the symbol to be completed. Emacs will then insert any required +characters after the symbol. For example, if it contains: + +@example +<html xml@point{} +@end example + +@noindent +Emacs will prompt you in the minibuffer with + +@example +Attribute: xml@point{} +@end example + +@noindent +and the buffer showing possible completions will contain + +@example +Possible completions are: +xml:lang xmlns +@end example + +@noindent +If you input @kbd{xmlns}, the result will be: + +@example +<html xmlns="@point{} +@end example + +@noindent +(If you do @kbd{C-@key{RET}} again, the namespace URI will +be inserted. Should that happen automatically?) +@end itemize + +@node Inserting end-tags +@chapter Inserting end-tags + +The main redundancy in XML syntax is end-tags. nxml-mode provides +several ways to make it easier to enter end-tags. You can use all of +these without a schema. + +You can use @kbd{C-@key{RET}} after @samp{</} +to complete the rest of the end-tag. + +@kbd{C-c C-f} inserts an end-tag for the element containing +point. This command is useful when you want to input the start-tag, +then input the content and finally input the end-tag. The @samp{f} +is mnemonic for finish. + +If you want to keep tags balanced and input the end-tag at the +same time as the start-tag, before inputting the content, then you can +use @kbd{C-c C-i}. This inserts a @samp{>}, then inserts +the end-tag and leaves point before the end-tag. @kbd{C-c C-b} +is similar but more convenient for block-level elements: it puts the +start-tag, point and the end-tag on successive lines, appropriately +indented. The @samp{i} is mnemonic for inline and the +@samp{b} is mnemonic for block. + +Finally, you can customize nxml-mode so that @kbd{/} +automatically inserts the rest of the end-tag when it occurs after +@samp{<}, by doing + +@display +@kbd{M-x customize-variable @key{RET} nxml-slash-auto-complete-flag @key{RET}} +@end display + +@noindent +and then following the instructions in the displayed buffer. + +@node Paragraphs +@chapter Paragraphs + +Emacs has several commands that operate on paragraphs, most +notably @kbd{M-q}. nXML mode redefines these to work in a way +that is useful for XML. The exact rules that are used to find the +beginning and end of a paragraph are complicated; they are designed +mainly to ensure that @kbd{M-q} does the right thing. + +A paragraph consists of one or more complete, consecutive lines. +A group of lines is not considered a paragraph unless it contains some +non-whitespace characters between tags or inside comments. A blank +line separates paragraphs. A single tag on a line by itself also +separates paragraphs. More precisely, if one tag together with any +leading and trailing whitespace completely occupy one or more lines, +then those lines will not be included in any paragraph. + +A start-tag at the beginning of the line (possibly indented) may +be treated as starting a paragraph. Similarly, an end-tag at the end +of the line may be treated as ending a paragraph. The following rules +are used to determine whether such a tag is in fact treated as a +paragraph boundary: + +@itemize @bullet +@item +If the schema does not allow text at that point, then it +is a paragraph boundary. +@item +If the end-tag corresponding to the start-tag is not at +the end of its line, or the start-tag corresponding to the end-tag is +not at the beginning of its line, then it is not a paragraph +boundary. For example, in + +@example +<p>This is a paragraph with an +<emph>emphasized</emph> phrase. +@end example + +@noindent +the @samp{<emph>} start-tag would not be considered as +starting a paragraph, because its corresponding end-tag is not at the +end of the line. +@item +If there is text that is a sibling in element tree, then +it is not a paragraph boundary. For example, in + +@example +<p>This is a paragraph with an +<emph>emphasized phrase that takes one source line</emph> +@end example + +@noindent +the @samp{<emph>} start-tag would not be considered as +starting a paragraph, even though its end-tag is at the end of its +line, because there the text @samp{This is a paragraph with an} +is a sibling of the @samp{emph} element. +@item +Otherwise, it is a paragraph boundary. +@end itemize + +@node Outlining +@chapter Outlining + +nXML mode allows you to display all or part of a buffer as an +outline, in a similar way to Emacs' outline mode. An outline in nXML +mode is based on recognizing two kinds of element: sections and +headings. There is one heading for every section and one section for +every heading. A section contains its heading as or within its first +child element. A section also contains its subordinate sections (its +subsections). The text content of a section consists of anything in a +section that is neither a subsection nor a heading. + +Note that this is a different model from that used by XHTML. +nXML mode's outline support will not be useful for XHTML unless you +adopt a convention of adding a @code{div} to enclose each +section, rather than having sections implicitly delimited by different +@code{h@var{n}} elements. This limitation may be removed +in a future version. + +The variable @code{nxml-section-element-name-regexp} gives +a regexp for the local names (i.e. the part of the name following any +prefix) of section elements. The variable +@code{nxml-heading-element-name-regexp} gives a regexp for the +local names of heading elements. For an element to be recognized +as a section + +@itemize @bullet +@item +its start-tag must occur at the beginning of a line +(possibly indented); +@item +its local name must match +@code{nxml-section-element-name-regexp}; +@item +either its first child element or a descendant of that +first child element must have a local name that matches +@code{nxml-heading-element-name-regexp}; the first such element +is treated as the section's heading. +@end itemize + +@noindent +You can customize these variables using @kbd{M-x +customize-variable}. + +There are three possible outline states for a section: + +@itemize @bullet +@item +normal, showing everything, including its heading, text +content and subsections; each subsection is displayed according to the +state of that subsection; +@item +showing just its heading, with both its text content and +its subsections hidden; all subsections are hidden regardless of their +state; +@item +showing its heading and its subsections, with its text +content hidden; each subsection is displayed according to the state of +that subsection. +@end itemize + +In the last two states, where the text content is hidden, the +heading is displayed specially, in an abbreviated form. An element +like this: + +@example +<section> +<title>Food</title> +<para>There are many kinds of food.</para> +</section> +@end example + +@noindent +would be displayed on a single line like this: + +@example +<-section>Food...</> +@end example + +@noindent +If there are hidden subsections, then a @code{+} will be used +instead of a @code{-} like this: + +@example +<+section>Food...</> +@end example + +@noindent +If there are non-hidden subsections, then the section will instead be +displayed like this: + +@example +<-section>Food... + <-section>Delicious Food...</> + <-section>Distasteful Food...</> +</-section> +@end example + +@noindent +The heading is always displayed with an indent that corresponds to its +depth in the outline, even it is not actually indented in the buffer. +The variable @code{nxml-outline-child-indent} controls how much +a subheading is indented with respect to its parent heading when the +heading is being displayed specially. + +Commands to change the outline state of sections are bound to +key sequences that start with @kbd{C-c C-o} (@kbd{o} is +mnemonic for outline). The third and final key has been chosen to be +consistent with outline mode. In the following descriptions +current section means the section containing point, or, more precisely, +the innermost section containing the character immediately following +point. + +@itemize @bullet +@item +@kbd{C-c C-o C-a} shows all sections in the buffer +normally. +@item +@kbd{C-c C-o C-t} hides the text content +of all sections in the buffer. +@item +@kbd{C-c C-o C-c} hides the text content +of the current section. +@item +@kbd{C-c C-o C-e} shows the text content +of the current section. +@item +@kbd{C-c C-o C-d} hides the text content +and subsections of the current section. +@item +@kbd{C-c C-o C-s} shows the current section +and all its direct and indirect subsections normally. +@item +@kbd{C-c C-o C-k} shows the headings of the +direct and indirect subsections of the current section. +@item +@kbd{C-c C-o C-l} hides the text content of the +current section and of its direct and indirect +subsections. +@item +@kbd{C-c C-o C-i} shows the headings of the +direct subsections of the current section. +@item +@kbd{C-c C-o C-o} hides as much as possible without +hiding the current section's text content; the headings of ancestor +sections of the current section and their child section sections will +not be hidden. +@end itemize + +When a heading is displayed specially, you can use +@key{RET} in that heading to show the text content of the section +in the same way as @kbd{C-c C-o C-e}. + +You can also use the mouse to change the outline state: +@kbd{S-mouse-2} hides the text content of a section in the same +way as@kbd{C-c C-o C-c}; @kbd{mouse-2} on a specially +displayed heading shows the text content of the section in the same +way as @kbd{C-c C-o C-e}; @kbd{mouse-1} on a specially +displayed start-tag toggles the display of subheadings on and +off. + +The outline state for each section is stored with the first +character of the section (as a text property). Every command that +changes the outline state of any section updates the display of the +buffer so that each section is displayed correctly according to its +outline state. If the section structure is subsequently changed, then +it is possible for the display to no longer correctly reflect the +stored outline state. @kbd{C-c C-o C-r} can be used to refresh +the display so it is correct again. + +@node Locating a schema +@chapter Locating a schema + +nXML mode has a configurable set of rules to locate a schema for +the file being edited. The rules are contained in one or more schema +locating files, which are XML documents. + +The variable @samp{rng-schema-locating-files} specifies +the list of the file-names of schema locating files that nXML mode +should use. The order of the list is significant: when file +@var{x} occurs in the list before file @var{y} then rules +from file @var{x} have precedence over rules from file +@var{y}. A filename specified in +@samp{rng-schema-locating-files} may be relative. If so, it will +be resolved relative to the document for which a schema is being +located. It is not an error if relative file-names in +@samp{rng-schema-locating-files} do not not exist. You can use +@kbd{M-x customize-variable @key{RET} rng-schema-locating-files +@key{RET}} to customize the list of schema locating +files. + +By default, @samp{rng-schema-locating-files} list has two +members: @samp{schemas.xml}, and +@samp{@var{dist-dir}/schema/schemas.xml} where +@samp{@var{dist-dir}} is the directory containing the nXML +distribution. The first member will cause nXML mode to use a file +@samp{schemas.xml} in the same directory as the document being +edited if such a file exist. The second member contains rules for the +schemas that are included with the nXML distribution. + +@menu +* Commands for locating a schema:: +* Schema locating files:: +@end menu + +@node Commands for locating a schema +@section Commands for locating a schema + +The command @kbd{C-c C-s C-w} will tell you what schema +is currently being used. + +The rules for locating a schema are applied automatically when +you visit a file in nXML mode. However, if you have just created a new +file and the schema cannot be inferred from the file-name, then this +will not locate the right schema. In this case, you should insert the +start-tag of the root element and then use the command @kbd{C-c +C-a}, which reapplies the rules based on the current content of +the document. It is usually not necessary to insert the complete +start-tag; often just @samp{<@var{name}} is +enough. + +If you want to use a schema that has not yet been added to the +schema locating files, you can use the command @kbd{C-c C-s C-f} +to manually select the file contaiing the schema for the document in +current buffer. Emacs will read the file-name of the schema from the +minibuffer. After reading the file-name, Emacs will ask whether you +wish to add a rule to a schema locating file that persistently +associates the document with the selected schema. The rule will be +added to the first file in the list specified +@samp{rng-schema-locating-files}; it will create the file if +necessary, but will not create a directory. If the variable +@samp{rng-schema-locating-files} has not been customized, this +means that the rule will be added to the file @samp{schemas.xml} +in the same directory as the document being edited. + +The command @kbd{C-c C-s C-t} allows you to select a schema by +specifying an identifier for the type of the document. The schema +locating files determine the available type identifiers and what +schema is used for each type identifier. This is useful when it is +impossible to infer the right schema from either the file-name or the +content of the document, even though the schema is already in the +schema locating file. A situation in which this can occur is when +there are multiple variants of a schema where all valid documents have +the same document element. For example, XHTML has Strict and +Transitional variants. In a situation like this, a schema locating file +can define a type identifier for each variant. As with @kbd{C-c +C-s C-f}, Emacs will ask whether you wish to add a rule to a schema +locating file that persistently associates the document with the +specified type identifier. + +The command @kbd{C-c C-s C-l} adds a rule to a schema +locating file that persistently associates the document with +the schema that is currently being used. + +@node Schema locating files +@section Schema locating files + +Each schema locating file specifies a list of rules. The rules +from each file are appended in order. To locate a schema each rule is +applied in turn until a rule matches. The first matching rule is then +used to determine the schema. + +Schema locating files are designed to be useful for other +applications that need to locate a schema for a document. In fact, +there is nothing specific to locating schemas in the design; it could +equally well be used for locating a stylesheet. + +@menu +* Schema locating file syntax basics:: +* Using the document's URI to locate a schema:: +* Using the document element to locate a schema:: +* Using type identifiers in schema locating files:: +* Using multiple schema locating files:: +@end menu + +@node Schema locating file syntax basics +@subsection Schema locating file syntax basics + +There is a schema for schema locating files in the file +@samp{locate.rnc} in the schema directory. Schema locating +files must be valid with respect to this schema. + +The document element of a schema locating file must be +@samp{locatingRules} and the namespace URI must be +@samp{http://thaiopensource.com/ns/locating-rules/1.0}. The +children of the document element specify rules. The order of the +children is the same as the order of the rules. Here's a complete +example of a schema locating file: + +@example +<?xml version="1.0"?> +<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0"> + <namespace ns="http://www.w3.org/1999/xhtml" uri="xhtml.rnc"/> + <documentElement localName="book" uri="docbook.rnc"/> +</locatingRules> +@end example + +@noindent +This says to use the schema @samp{xhtml.rnc} for a document with +namespace @samp{http://www.w3.org/1999/xhtml}, and to use the +schema @samp{docbook.rnc} for a document whose local name is +@samp{book}. If the document element had both a namespace URI +of @samp{http://www.w3.org/1999/xhtml} and a local name of +@samp{book}, then the matching rule that comes first will be +used and so the schema @samp{xhtml.rnc} would be used. There is +no precedence between different types of rule; the first matching rule +of any type is used. + +As usual with XML-related technologies, resources are identified +by URIs. The @samp{uri} attribute identifies the schema by +specifying the URI. The URI may be relative. If so, it is resolved +relative to the URI of the schema locating file that contains +attribute. This means that if the value of @samp{uri} attribute +does not contain a @samp{/}, then it will refer to a filename in +the same directory as the schema locating file. + +@node Using the document's URI to locate a schema +@subsection Using the document's URI to locate a schema + +A @samp{uri} rule locates a schema based on the URI of the +document. The @samp{uri} attribute specifies the URI of the +schema. The @samp{resource} attribute can be used to specify +the schema for a particular document. For example, + +@example +<uri resource="spec.xml" uri="docbook.rnc"/> +@end example + +@noindent +specifies that that the schema for @samp{spec.xml} is +@samp{docbook.rnc}. + +The @samp{pattern} attribute can be used instead of the +@samp{resource} attribute to specify the schema for any document +whose URI matches a pattern. The pattern has the same syntax as an +absolute or relative URI except that the path component of the URI can +use a @samp{*} character to stand for zero or more characters +within a path segment (i.e. any character other @samp{/}). +Typically, the URI pattern looks like a relative URI, but, whereas a +relative URI in the @samp{resource} attribute is resolved into a +particular absolute URI using the base URI of the schema locating +file, a relative URI pattern matches if it matches some number of +complete path segments of the document's URI ending with the last path +segment of the document's URI. For example, + +@example +<uri pattern="*.xsl" uri="xslt.rnc"/> +@end example + +@noindent +specifies that the schema for documents with a URI whose path ends +with @samp{.xsl} is @samp{xslt.rnc}. + +A @samp{transformURI} rule locates a schema by +transforming the URI of the document. The @samp{fromPattern} +attribute specifies a URI pattern with the same meaning as the +@samp{pattern} attribute of the @samp{uri} element. The +@samp{toPattern} attribute is a URI pattern that is used to +generate the URI of the schema. Each @samp{*} in the +@samp{toPattern} is replaced by the string that matched the +corresponding @samp{*} in the @samp{fromPattern}. The +resulting string is appended to the initial part of the document's URI +that was not explicitly matched by the @samp{fromPattern}. The +rule matches only if the transformed URI identifies an existing +resource. For example, the rule + +@example +<transformURI fromPattern="*.xml" toPattern="*.rnc"/> +@end example + +@noindent +would transform the URI @samp{file:///home/jjc/docs/spec.xml} +into the URI @samp{file:///home/jjc/docs/spec.rnc}. Thus, this +rule specifies that to locate a schema for a document +@samp{@var{foo}.xml}, Emacs should test whether a file +@samp{@var{foo}.rnc} exists in the same directory as +@samp{@var{foo}.xml}, and, if so, should use it as the +schema. + +@node Using the document element to locate a schema +@subsection Using the document element to locate a schema + +A @samp{documentElement} rule locates a schema based on +the local name and prefix of the document element. For example, a rule + +@example +<documentElement prefix="xsl" localName="stylesheet" uri="xslt.rnc"/> +@end example + +@noindent +specifies that when the name of the document element is +@samp{xsl:stylesheet}, then @samp{xslt.rnc} should be used +as the schema. Either the @samp{prefix} or +@samp{localName} attribute may be omitted to allow any prefix or +local name. + +A @samp{namespace} rule locates a schema based on the +namespace URI of the document element. For example, a rule + +@example +<namespace ns="http://www.w3.org/1999/XSL/Transform" uri="xslt.rnc"/> +@end example + +@noindent +specifies that when the namespace URI of the document is +@samp{http://www.w3.org/1999/XSL/Transform}, then +@samp{xslt.rnc} should be used as the schema. + +@node Using type identifiers in schema locating files +@subsection Using type identifiers in schema locating files + +Type identifiers allow a level of indirection in locating the +schema for a document. Instead of associating the document directly +with a schema URI, the document is associated with a type identifier, +which is in turn associated with a schema URI. nXML mode does not +constrain the format of type identifiers. They can be simply strings +without any formal structure or they can be public identifiers or +URIs. Note that these type identifiers have nothing to do with the +DOCTYPE declaration. When comparing type identifiers, whitespace is +normalized in the same way as with the @samp{xsd:token} +datatype: leading and trailing whitespace is stripped; other sequences +of whitespace are normalized to a single space character. + +Each of the rules described in previous sections that uses a +@samp{uri} attribute to specify a schema, can instead use a +@samp{typeId} attribute to specify a type identifier. The type +identifier can be associated with a URI using a @samp{typeId} +element. For example, + +@example +<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0"> + <namespace ns="http://www.w3.org/1999/xhtml" typeId="XHTML"/> + <typeId id="XHTML" typeId="XHTML Strict"/> + <typeId id="XHTML Strict" uri="xhtml-strict.rnc"/> + <typeId id="XHTML Transitional" uri="xhtml-transitional.rnc"/> +</locatingRules> +@end example + +@noindent +declares three type identifiers @samp{XHTML} (representing the +default variant of XHTML to be used), @samp{XHTML Strict} and +@samp{XHTML Transitional}. Such a schema locating file would +use @samp{xhtml-strict.rnc} for a document whose namespace is +@samp{http://www.w3.org/1999/xhtml}. But it is considerably +more flexible than a schema locating file that simply specified + +@example +<namespace ns="http://www.w3.org/1999/xhtml" uri="xhtml-strict.rnc"/> +@end example + +@noindent +A user can easily use @kbd{C-c C-s C-t} to select between XHTML +Strict and XHTML Transitional. Also, a user can easily add a catalog + +@example +<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0"> + <typeId id="XHTML" typeId="XHTML Transitional"/> +</locatingRules> +@end example + +@noindent +that makes the default variant of XHTML be XHTML Transitional. + +@node Using multiple schema locating files +@subsection Using multiple schema locating files + +The @samp{include} element includes rules from another +schema locating file. The behavior is exactly as if the rules from +that file were included in place of the @samp{include} element. +Relative URIs are resolved into absolute URIs before the inclusion is +performed. For example, + +@example +<include rules="../rules.xml"/> +@end example + +@noindent +includes the rules from @samp{rules.xml}. + +The process of locating a schema takes as input a list of schema +locating files. The rules in all these files and in the files they +include are resolved into a single list of rules, which are applied +strictly in order. Sometimes this order is not what is needed. +For example, suppose you have two schema locating files, a private +file + +@example +<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0"> + <namespace ns="http://www.w3.org/1999/xhtml" uri="xhtml.rnc"/> +</locatingRules> +@end example + +@noindent +followed by a public file + +@example +<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0"> + <transformURI pathSuffix=".xml" replacePathSuffix=".rnc"/> + <namespace ns="http://www.w3.org/1999/XSL/Transform" typeId="XSLT"/> +</locatingRules> +@end example + +@noindent +The effect of these two files is that the XHTML @samp{namespace} +rule takes precedence over the @samp{transformURI} rule, which +is almost certainly not what is needed. This can be solved by adding +an @samp{applyFollowingRules} to the private file. + +@example +<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0"> + <applyFollowingRules ruleType="transformURI"/> + <namespace ns="http://www.w3.org/1999/xhtml" uri="xhtml.rnc"/> +</locatingRules> +@end example + +@node DTDs +@chapter DTDs + +nxml-mode is designed to support the creation of standalone XML +documents that do not depend on a DTD. Although it is common practice +to insert a DOCTYPE declaration referencing an external DTD, this has +undesirable side-effects. It means that the document is no longer +self-contained. It also means that different XML parsers may interpret +the document in different ways, since the XML Recommendation does not +require XML parsers to read the DTD. With DTDs, it was impractical to +get validation without using an external DTD or reference to an +parameter entity. With RELAX NG and other schema languages, you can +simulataneously get the benefits of validation and standalone XML +documents. Therefore, I recommend that you do not reference an +external DOCTYPE in your XML documents. + +One problem is entities for characters. Typically, as well as +providing validation, DTDs also provide a set of character entities +for documents to use. Schemas cannot provide this functionality, +because schema validation happens after XML parsing. The recommended +solution is to either use the Unicode characters directly, or, if this +is impractical, use character references. nXML mode supports this by +providing commands for entering characters and character references +using the Unicode names, and can display the glyph corresponding to a +character reference. + +@node Limitations +@chapter Limitations + +nXML mode has some limitations: + +@itemize @bullet +@item +DTD support is limited. Internal parsed general entities declared +in the internal subset are supported provided they do not contain +elements. Other usage of DTDs is ignored. +@item +The restrictions on RELAX NG schemas in section 7 of the RELAX NG +specification are not enforced. +@item +Unicode support has problems. This stems mostly from the fact that +the XML (and RELAX NG) character model is based squarely on Unicode, +whereas the Emacs character model is not. Emacs 22 is slated to have +full Unicode support, which should improve the situation here. +@end itemize + +@bye
--- a/etc/ChangeLog Fri Nov 23 04:17:56 2007 +0000 +++ b/etc/ChangeLog Fri Nov 23 06:58:00 2007 +0000 @@ -1,3 +1,7 @@ +2007-11-23 Mark A. Hershberger <mah@everybody.org> + + * schema: Initial merge of nxml. + 2007-11-22 Francesco Potort,Al(B <pot@gnu.org> * NEWS: etags: the --members option is now the default.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/calstbl.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,184 @@ +# This file was generated automatically by Trang, and then manually +# edited to add back definitions for overridden parameter entities and +# undefined elements, specifically: bodyatt, secur, paracon, +# tbl.table.mdl, tbl.entry.mdl, caution, graphic, legend, note, para, +# title, warning. This makes the semantics of this module as close as +# possible to the original DTD and also allows this schema to be used +# independently of DocBook. + +# ...................................................................... + +# DocBook CALS Table Model V4.2 ........................................ + +# File calstblx.mod .................................................... + +# Copyright 1992-2002 HaL Computer Systems, Inc., +# O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software +# Corporation, Norman Walsh, Sun Microsystems, Inc., and the +# Organization for the Advancement of Structured Information +# Standards (OASIS). +# +# This DTD is based on the CALS Table Model +# PUBLIC "-//USA-DOD//DTD Table Model 951010//EN" +# +# $Id: calstbl.rnc,v 1.2 2003/08/30 06:04:02 jjc Exp $ +# +# Permission to use, copy, modify and distribute the DocBook DTD +# and its accompanying documentation for any purpose and without fee +# is hereby granted in perpetuity, provided that the above copyright +# notice and this paragraph appear in all copies. The copyright +# holders make no representation about the suitability of the DTD for +# any purpose. It is provided "as is" without expressed or implied +# warranty. +# +# If you modify the DocBook DTD in any way, except for declaring and +# referencing additional sets of general entities and declaring +# additional notations, label your DTD as a variant of DocBook. See +# the maintenance documentation for more information. +# +# Please direct all questions, bug reports, or suggestions for +# changes to the docbook@lists.oasis-open.org mailing list. For more +# information, see http://www.oasis-open.org/docbook/. + +# ...................................................................... + +# This module contains the definitions for the CALS Table Model +# converted to XML. + +# These definitions are not directly related to the table model, but are +# used in the default CALS table model and are usually defined elsewhere +# (and prior to the inclusion of this table module) in a CALS DTD. + +bodyatt = empty +secur = empty + +# no if zero(s), +# yes if any other digits value + +yesorno = string +titles = title? +# default for use in entry content +paracon = text + +# The parameter entities as defined below provide the CALS table model +# as published (as part of the Example DTD) in MIL-HDBK-28001. +# +# These following declarations provide the CALS-compliant default definitions +# for these entities. However, these entities can and should be redefined +# (by giving the appropriate parameter entity declaration(s) prior to the +# reference to this Table Model declaration set entity) to fit the needs +# of the current application. +tbl.table-titles.mdl = titles +tbl.table-main.mdl = tgroup+ | graphic+ +tbl.table.mdl = tbl.table-titles.mdl | tbl.table-main.mdl +tbl.table.att = + attribute tabstyle { text }?, + attribute tocentry { yesorno }?, + attribute shortentry { yesorno }?, + attribute orient { "port" | "land" }?, + attribute pgwide { yesorno }? +tbl.tgroup.mdl = colspec*, spanspec*, thead?, tfoot?, tbody +tbl.tgroup.att = attribute tgroupstyle { text }? +tbl.hdft.mdl = colspec*, row+ +tbl.row.mdl = (entry | entrytbl)+ +tbl.entrytbl.mdl = colspec*, spanspec*, thead?, tbody +tbl.entry.mdl = paracon | para | warning | caution | note | legend +# ===== Element and attribute declarations follow. ===== +start = table +table = element table { table.attlist, tbl.table.mdl } +table.attlist &= + attribute frame { + "top" | "bottom" | "topbot" | "all" | "sides" | "none" + }?, + attribute colsep { yesorno }?, + attribute rowsep { yesorno }?, + tbl.table.att, + bodyatt, + secur +tgroup = element tgroup { tgroup.attlist, tbl.tgroup.mdl } +tgroup.attlist &= + attribute cols { text }, + tbl.tgroup.att, + attribute colsep { yesorno }?, + attribute rowsep { yesorno }?, + attribute align { "left" | "right" | "center" | "justify" | "char" }?, + attribute char { text }?, + attribute charoff { text }?, + secur +colspec = element colspec { colspec.attlist, empty } +colspec.attlist &= + attribute colnum { text }?, + attribute colname { text }?, + attribute colwidth { text }?, + attribute colsep { yesorno }?, + attribute rowsep { yesorno }?, + attribute align { "left" | "right" | "center" | "justify" | "char" }?, + attribute char { text }?, + attribute charoff { text }? +spanspec = element spanspec { spanspec.attlist, empty } +spanspec.attlist &= + attribute namest { text }, + attribute nameend { text }, + attribute spanname { text }, + attribute colsep { yesorno }?, + attribute rowsep { yesorno }?, + attribute align { "left" | "right" | "center" | "justify" | "char" }?, + attribute char { text }?, + attribute charoff { text }? +thead = element thead { thead.attlist, tbl.hdft.mdl } +thead.attlist &= + attribute valign { "top" | "middle" | "bottom" }?, + secur +tfoot = element tfoot { tfoot.attlist, tbl.hdft.mdl } +tfoot.attlist &= + attribute valign { "top" | "middle" | "bottom" }?, + secur +tbody = element tbody { tbody.attlist, row+ } +tbody.attlist &= + attribute valign { "top" | "middle" | "bottom" }?, + secur +row = element row { row.attlist, tbl.row.mdl } +row.attlist &= + attribute rowsep { yesorno }?, + attribute valign { "top" | "middle" | "bottom" }?, + secur +entrytbl = element entrytbl { entrytbl.attlist, tbl.entrytbl.mdl } +entrytbl.attlist &= + attribute cols { text }, + tbl.tgroup.att, + attribute colname { text }?, + attribute spanname { text }?, + attribute namest { text }?, + attribute nameend { text }?, + attribute colsep { yesorno }?, + attribute rowsep { yesorno }?, + attribute align { "left" | "right" | "center" | "justify" | "char" }?, + attribute char { text }?, + attribute charoff { text }?, + secur +entry = element entry { entry.attlist, tbl.entry.mdl* } +entry.attlist &= + attribute colname { text }?, + attribute namest { text }?, + attribute nameend { text }?, + attribute spanname { text }?, + attribute morerows { text }?, + attribute colsep { yesorno }?, + attribute rowsep { yesorno }?, + attribute align { "left" | "right" | "center" | "justify" | "char" }?, + attribute char { text }?, + attribute charoff { text }?, + attribute rotate { yesorno }?, + attribute valign { "top" | "middle" | "bottom" }?, + secur +caution |= notAllowed +graphic |= notAllowed +legend |= notAllowed +note |= notAllowed +para |= notAllowed +title |= notAllowed +warning |= notAllowed + +# End of DocBook CALS Table Model V4.2 ................................. + +# ......................................................................
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/dbcalstbl.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,25 @@ +# Definitions specific to the CALS Table Model. + +# Reference CALS Table Model +include "calstbl.rnc" { + # Override definition of start + start |= notAllowed + # Add label and role attributes to table and informaltable + bodyatt = label.attrib + # Add common attributes to Table, TGroup, TBody, THead, TFoot, Row, + # EntryTbl, and Entry (and InformalTable element). + secur = common.attrib, tables.role.attrib + # Content model for Table. + tbl.table.mdl = + blockinfo?, + formalobject.title.content, + ndxterm.class*, + textobject*, + (graphic+ | mediaobject+ | tgroup+) + # Allow either objects or inlines; beware of REs between elements. + tbl.entry.mdl = para.char.mix | tabentry.mix +} + +common.table.attribs = bodyatt, secur + +# end of table.module
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/dbdyntbl.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,116 @@ +# This is an alternative to dbsoextbl.rnc and dbcalstbl.rnc that +# allows the table model to be selected dynamically based on the +# definitions of cals.table.module and exchange.table.module. +# +# To use this copy, docbook.rnc to docbook-dyntbl.rnc replacing +# "dbcalstbl.rnc" by "dbdyntbl.rnc". Then, you can override the +# choice of table model by doing +# +# include "docbook-dyntbl.rnc" { +# cals.table.model = IGNORE +# exchange.table.model = INCLUDE +# } + +INCLUDE = empty +IGNORE = notAllowed +cals.table.module = INCLUDE +exchange.table.module = IGNORE + +# Add common attributes and the Label attribute to Table and +# InformalTable. +bodyatt = common.attrib, label.attrib, tables.role.attrib + +# Content model for Table. +tbl.table.mdl = + blockinfo?, + formalobject.title.content, + ndxterm.class*, + textobject*, + (graphic+ | mediaobject+ | tgroup+) + +table = cals.table | exchange.table + +cals.table = + cals.table.module, + grammar { + # Reference CALS Table Model + include "calstbl.rnc" { + # Add label and role attributes to table and informaltable + bodyatt = parent label.attrib + # Add common attributes to Table, TGroup, TBody, THead, TFoot, Row, + # EntryTbl, and Entry (and InformalTable element). + secur = parent common.attrib, parent tables.role.attrib + tbl.table.mdl = parent tbl.table.mdl + } + } + +exchange.table = + exchange.table.module, + grammar { + # Reference OASIS Exchange Table Model + include "soextbl.rnc" { + # Add common attributes and the Label attribute to Table and + # InformalTable. + bodyatt = parent bodyatt + tbl.table.mdl = parent tbl.table.mdl + } + } + +tgroup = cals.tgroup | exchange.tgroup + +cals.tgroup = + cals.table.module, + grammar { + # Reference CALS Table Model + include "calstbl.rnc" { + start = tgroup + # Add label and role attributes to table and informaltable + bodyatt = parent label.attrib + # Add common attributes to Table, TGroup, TBody, THead, TFoot, Row, + # EntryTbl, and Entry (and InformalTable element). + secur = parent common.attrib, parent tables.role.attrib + # Allow either objects or inlines; beware of REs between elements. + tbl.entry.mdl = parent para.char.mix | parent tabentry.mix + } + } + +exchange.tgroup = + exchange.table.module, + grammar { + # Reference OASIS Exchange Table Model + include "soextbl.rnc" { + start = tgroup + bodyatt = parent bodyatt + # Add common attributes to TGroup, ColSpec, TBody, THead, Row, Entry + tbl.tgroup.att = parent common.attrib + tbl.colspec.att = parent common.attrib + tbl.tbody.att = parent common.attrib + tbl.thead.att = parent common.attrib + tbl.row.att = parent common.attrib + tbl.entry.att = parent common.attrib + # Allow either objects or inlines; beware of REs between elements. + tbl.entry.mdl = (parent para.char.mix | parent tabentry.mix)* + } + } + +tbl.table.att = cals.tbl.table.att | exchange.tbl.table.att + +cals.tbl.table.att = + cals.table.module, + grammar { + include "calstbl.rnc" { + start = tbl.table.att + } + } + +exchange.tbl.table.att = + exchange.table.module, + grammar { + include "soextbl.rnc" { + start = tbl.table.att + } + } + +common.table.attribs = bodyatt + +# end of table.module
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/dbhier.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,1467 @@ +# ...................................................................... + +# DocBook document hierarchy module V4.2 ............................... + +# File dbhierx.mod ..................................................... + +# Copyright 1992-2002 HaL Computer Systems, Inc., +# O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software +# Corporation, Norman Walsh, Sun Microsystems, Inc., and the +# Organization for the Advancement of Structured Information +# Standards (OASIS). +# +# $Id: dbhier.rnc,v 1.1 2003/08/30 04:19:27 jjc Exp $ +# +# Permission to use, copy, modify and distribute the DocBook DTD +# and its accompanying documentation for any purpose and without fee +# is hereby granted in perpetuity, provided that the above copyright +# notice and this paragraph appear in all copies. The copyright +# holders make no representation about the suitability of the DTD for +# any purpose. It is provided "as is" without expressed or implied +# warranty. +# +# If you modify the DocBook DTD in any way, except for declaring and +# referencing additional sets of general entities and declaring +# additional notations, label your DTD as a variant of DocBook. See +# the maintenance documentation for more information. +# +# Please direct all questions, bug reports, or suggestions for +# changes to the docbook@lists.oasis-open.org mailing list. For more +# information, see http://www.oasis-open.org/docbook/. + +# ...................................................................... + +# This module contains the definitions for the overall document +# hierarchies of DocBook documents. It covers computer documentation +# manuals and manual fragments, as well as reference entries (such as +# man pages) and technical journals or anthologies containing +# articles. +# +# This module depends on the DocBook information pool module. All +# elements and entities referenced but not defined here are assumed +# to be defined in the information pool module. +# +# In DTD driver files referring to this module, please use an entity +# declaration that uses the public identifier shown below: +# +# <!ENTITY % dbhier PUBLIC +# "-//OASIS//ELEMENTS DocBook Document Hierarchy V4.2//EN" +# "dbhierx.mod"> +# %dbhier; +# +# See the documentation for detailed information on the parameter +# entity and module scheme used in DocBook, customizing DocBook and +# planning for interchange, and changes made since the last release +# of DocBook. + +# ...................................................................... + +# Entities for module inclusions ....................................... + +# ...................................................................... + +# Entities for element classes ......................................... + +local.appendix.class = notAllowed +appendix.class = appendix | local.appendix.class +local.article.class = notAllowed +article.class = article | local.article.class +local.book.class = notAllowed +book.class = book | local.book.class +local.chapter.class = notAllowed +chapter.class = chapter | local.chapter.class +local.index.class = notAllowed +index.class = index | setindex | local.index.class +local.refentry.class = notAllowed +refentry.class = refentry | local.refentry.class +local.section.class = notAllowed +section.class = section | local.section.class +local.nav.class = notAllowed +nav.class = + toc | lot | index | glossary | bibliography | local.nav.class +# Redeclaration placeholder ............................................ + +# For redeclaring entities that are declared after this point while +# retaining their references to the entities that are declared before +# this point + +# ...................................................................... + +# Entities for element mixtures ........................................ + +# The DocBook TC may produce an official forms module for DocBook. + +# This PE provides the hook by which it can be inserted into the DTD. +forms.hook = notAllowed +local.divcomponent.mix = notAllowed +divcomponent.mix = + list.class + | admon.class + | linespecific.class + | synop.class + | para.class + | informal.class + | formal.class + | compound.class + | genobj.class + | descobj.class + | ndxterm.class + | beginpage + | forms.hook + | local.divcomponent.mix +local.refcomponent.mix = notAllowed +refcomponent.mix = + list.class + | admon.class + | linespecific.class + | synop.class + | para.class + | informal.class + | formal.class + | compound.class + | genobj.class + | descobj.class + | ndxterm.class + | beginpage + | local.refcomponent.mix +local.indexdivcomponent.mix = notAllowed +indexdivcomponent.mix = + itemizedlist + | orderedlist + | variablelist + | simplelist + | linespecific.class + | synop.class + | para.class + | informal.class + | anchor + | remark + | link.char.class + | beginpage + | local.indexdivcomponent.mix +local.refname.char.mix = notAllowed +refname.char.mix = text | tech.char.class | local.refname.char.mix +local.partcontent.mix = notAllowed +partcontent.mix = + appendix.class + | chapter.class + | nav.class + | article.class + | preface + | refentry.class + | reference + | local.partcontent.mix +local.refinline.char.mix = notAllowed +refinline.char.mix = + text + | xref.char.class + | gen.char.class + | link.char.class + | tech.char.class + | base.char.class + | docinfo.char.class + | other.char.class + | ndxterm.class + | beginpage + | local.refinline.char.mix +local.refclass.char.mix = notAllowed +refclass.char.mix = text | application | local.refclass.char.mix +# Redeclaration placeholder 2 .......................................... + +# For redeclaring entities that are declared after this point while +# retaining their references to the entities that are declared before +# this point + +# ...................................................................... + +# Entities for content models .......................................... +div.title.content = title, subtitle?, titleabbrev? +bookcomponent.title.content = title, subtitle?, titleabbrev? +sect.title.content = title, subtitle?, titleabbrev? +refsect.title.content = title, subtitle?, titleabbrev? +bookcomponent.content = + (divcomponent.mix+, + (sect1* | refentry.class* | simplesect* | section.class*)) + | (sect1+ | refentry.class+ | simplesect+ | section.class+) +# ...................................................................... + +# Set and SetInfo ...................................................... +local.set.attrib = empty +set.role.attrib = role.attrib +set = + element set { + set.attlist, + div.title.content?, + setinfo?, + toc?, + book.class+, + setindex? + } +# end of set.element + +# FPI: SGML formal public identifier +set.attlist &= + attribute fpi { text }?, + status.attrib, + common.attrib, + set.role.attrib, + local.set.attrib +# end of set.attlist + +# end of set.module +local.setinfo.attrib = empty +setinfo.role.attrib = role.attrib +setinfo = element setinfo { setinfo.attlist, info.class+ } +# end of setinfo.element + +# Contents: IDs of the ToC, Books, and SetIndex that comprise +# the set, in the order of their appearance +setinfo.attlist &= + attribute contents { xsd:IDREFS }?, + common.attrib, + setinfo.role.attrib, + local.setinfo.attrib +# end of setinfo.attlist + +# end of setinfo.module + +# end of set.content.module + +# ...................................................................... + +# Book and BookInfo .................................................... +local.book.attrib = empty +book.role.attrib = role.attrib +book = + element book { + book.attlist, + div.title.content?, + bookinfo?, + (dedication + | toc + | lot + | glossary + | bibliography + | preface + | chapter.class + | reference + | part + | article.class + | appendix.class + | index.class + | colophon)* + } +# end of book.element + +# FPI: SGML formal public identifier +book.attlist &= + attribute fpi { text }?, + label.attrib, + status.attrib, + common.attrib, + book.role.attrib, + local.book.attrib +# end of book.attlist + +# end of book.module +local.bookinfo.attrib = empty +bookinfo.role.attrib = role.attrib +bookinfo = element bookinfo { bookinfo.attlist, info.class+ } +# end of bookinfo.element + +# Contents: IDs of the ToC, LoTs, Prefaces, Parts, Chapters, +# Appendixes, References, GLossary, Bibliography, and indexes +# comprising the Book, in the order of their appearance +bookinfo.attlist &= + attribute contents { xsd:IDREFS }?, + common.attrib, + bookinfo.role.attrib, + local.bookinfo.attrib +# end of bookinfo.attlist + +# end of bookinfo.module + +# end of book.content.module + +# ...................................................................... + +# Dedication, ToC, and LoT ............................................. +local.dedication.attrib = empty +dedication.role.attrib = role.attrib +dedication = + element dedication { + dedication.attlist, sect.title.content?, legalnotice.mix+ + } +# end of dedication.element +dedication.attlist &= + status.attrib, + common.attrib, + dedication.role.attrib, + local.dedication.attrib +# end of dedication.attlist + +# end of dedication.module +local.colophon.attrib = empty +colophon.role.attrib = role.attrib +colophon = + element colophon { + colophon.attlist, sect.title.content?, textobject.mix+ + } +# end of colophon.element +colophon.attlist &= + status.attrib, + common.attrib, + colophon.role.attrib, + local.colophon.attrib +# end of colophon.attlist + +# end of colophon.module +local.toc.attrib = empty +toc.role.attrib = role.attrib +toc = + element toc { + toc.attlist, + beginpage?, + bookcomponent.title.content?, + tocfront*, + (tocpart | tocchap)*, + tocback* + } +# end of toc.element +toc.attlist &= + pagenum.attrib, common.attrib, toc.role.attrib, local.toc.attrib +# end of toc.attlist + +# end of toc.module +local.tocfront.attrib = empty +tocfront.role.attrib = role.attrib +tocfront = element tocfront { tocfront.attlist, para.char.mix* } +# end of tocfront.element + +# to element that this entry represents +tocfront.attlist &= + label.attrib, + linkend.attrib, + pagenum.attrib, + common.attrib, + tocfront.role.attrib, + local.tocfront.attrib +# end of tocfront.attlist + +# end of tocfront.module +local.tocentry.attrib = empty +tocentry.role.attrib = role.attrib +tocentry = element tocentry { tocentry.attlist, para.char.mix* } +# end of tocentry.element + +# to element that this entry represents +tocentry.attlist &= + linkend.attrib, + pagenum.attrib, + common.attrib, + tocentry.role.attrib, + local.tocentry.attrib +# end of tocentry.attlist + +# end of tocentry.module +local.tocpart.attrib = empty +tocpart.role.attrib = role.attrib +tocpart = element tocpart { tocpart.attlist, tocentry+, tocchap* } +# end of tocpart.element +tocpart.attlist &= + common.attrib, tocpart.role.attrib, local.tocpart.attrib +# end of tocpart.attlist + +# end of tocpart.module +local.tocchap.attrib = empty +tocchap.role.attrib = role.attrib +tocchap = element tocchap { tocchap.attlist, tocentry+, toclevel1* } +# end of tocchap.element +tocchap.attlist &= + label.attrib, common.attrib, tocchap.role.attrib, local.tocchap.attrib +# end of tocchap.attlist + +# end of tocchap.module +local.toclevel1.attrib = empty +toclevel1.role.attrib = role.attrib +toclevel1 = + element toclevel1 { toclevel1.attlist, tocentry+, toclevel2* } +# end of toclevel1.element +toclevel1.attlist &= + common.attrib, toclevel1.role.attrib, local.toclevel1.attrib +# end of toclevel1.attlist + +# end of toclevel1.module +local.toclevel2.attrib = empty +toclevel2.role.attrib = role.attrib +toclevel2 = + element toclevel2 { toclevel2.attlist, tocentry+, toclevel3* } +# end of toclevel2.element +toclevel2.attlist &= + common.attrib, toclevel2.role.attrib, local.toclevel2.attrib +# end of toclevel2.attlist + +# end of toclevel2.module +local.toclevel3.attrib = empty +toclevel3.role.attrib = role.attrib +toclevel3 = + element toclevel3 { toclevel3.attlist, tocentry+, toclevel4* } +# end of toclevel3.element +toclevel3.attlist &= + common.attrib, toclevel3.role.attrib, local.toclevel3.attrib +# end of toclevel3.attlist + +# end of toclevel3.module +local.toclevel4.attrib = empty +toclevel4.role.attrib = role.attrib +toclevel4 = + element toclevel4 { toclevel4.attlist, tocentry+, toclevel5* } +# end of toclevel4.element +toclevel4.attlist &= + common.attrib, toclevel4.role.attrib, local.toclevel4.attrib +# end of toclevel4.attlist + +# end of toclevel4.module +local.toclevel5.attrib = empty +toclevel5.role.attrib = role.attrib +toclevel5 = element toclevel5 { toclevel5.attlist, tocentry+ } +# end of toclevel5.element +toclevel5.attlist &= + common.attrib, toclevel5.role.attrib, local.toclevel5.attrib +# end of toclevel5.attlist + +# end of toclevel5.module +local.tocback.attrib = empty +tocback.role.attrib = role.attrib +tocback = element tocback { tocback.attlist, para.char.mix* } +# end of tocback.element + +# to element that this entry represents +tocback.attlist &= + label.attrib, + linkend.attrib, + pagenum.attrib, + common.attrib, + tocback.role.attrib, + local.tocback.attrib +# end of tocback.attlist + +# end of tocback.module + +# end of toc.content.module +local.lot.attrib = empty +lot.role.attrib = role.attrib +lot = + element lot { + lot.attlist, beginpage?, bookcomponent.title.content?, lotentry* + } +# end of lot.element +lot.attlist &= + label.attrib, common.attrib, lot.role.attrib, local.lot.attrib +# end of lot.attlist + +# end of lot.module +local.lotentry.attrib = empty +lotentry.role.attrib = role.attrib +lotentry = element lotentry { lotentry.attlist, para.char.mix* } +# end of lotentry.element + +# SrcCredit: Information about the source of the entry, +# as for a list of illustrations + +# linkend: to element that this entry represents +lotentry.attlist &= + linkend.attrib, + pagenum.attrib, + attribute srccredit { text }?, + common.attrib, + lotentry.role.attrib, + local.lotentry.attrib +# end of lotentry.attlist + +# end of lotentry.module + +# end of lot.content.module + +# ...................................................................... + +# Appendix, Chapter, Part, Preface, Reference, PartIntro ............... +local.appendix.attrib = empty +appendix.role.attrib = role.attrib +appendix = + element appendix { + appendix.attlist, + beginpage?, + appendixinfo?, + bookcomponent.title.content, + nav.class*, + tocchap?, + bookcomponent.content, + nav.class* + } +# end of appendix.element +appendix.attlist &= + label.attrib, + status.attrib, + common.attrib, + appendix.role.attrib, + local.appendix.attrib +# end of appendix.attlist + +# end of appendix.module +local.chapter.attrib = empty +chapter.role.attrib = role.attrib +chapter = + element chapter { + chapter.attlist, + beginpage?, + chapterinfo?, + bookcomponent.title.content, + nav.class*, + tocchap?, + bookcomponent.content, + nav.class* + } +# end of chapter.element +chapter.attlist &= + label.attrib, + status.attrib, + common.attrib, + chapter.role.attrib, + local.chapter.attrib +# end of chapter.attlist + +# end of chapter.module + +# Note that Part was to have its content model reduced in V4.2. This +# change will not be made after all. +local.part.attrib = empty +part.role.attrib = role.attrib +part = + element part { + part.attlist, + beginpage?, + partinfo?, + bookcomponent.title.content, + partintro?, + partcontent.mix+ + } +# end of part.element +part.attlist &= + label.attrib, + status.attrib, + common.attrib, + part.role.attrib, + local.part.attrib +# end of part.attlist + +# ELEMENT PartIntro (defined below) + +# end of part.module +local.preface.attrib = empty +preface.role.attrib = role.attrib +preface = + element preface { + preface.attlist, + beginpage?, + prefaceinfo?, + bookcomponent.title.content, + nav.class*, + tocchap?, + bookcomponent.content, + nav.class* + } +# end of preface.element +preface.attlist &= + status.attrib, + common.attrib, + preface.role.attrib, + local.preface.attrib +# end of preface.attlist + +# end of preface.module +local.reference.attrib = empty +reference.role.attrib = role.attrib +reference = + element reference { + reference.attlist, + beginpage?, + referenceinfo?, + bookcomponent.title.content, + partintro?, + refentry.class+ + } +# end of reference.element +reference.attlist &= + label.attrib, + status.attrib, + common.attrib, + reference.role.attrib, + local.reference.attrib +# end of reference.attlist + +# ELEMENT PartIntro (defined below) + +# end of reference.module +local.partintro.attrib = empty +partintro.role.attrib = role.attrib +partintro = + element partintro { + partintro.attlist, div.title.content?, bookcomponent.content + } +# end of partintro.element +partintro.attlist &= + label.attrib, + common.attrib, + partintro.role.attrib, + local.partintro.attrib +# end of partintro.attlist + +# end of partintro.module + +# ...................................................................... + +# Other Info elements .................................................. +local.appendixinfo.attrib = empty +appendixinfo.role.attrib = role.attrib +appendixinfo = + element appendixinfo { appendixinfo.attlist, info.class+ } +# end of appendixinfo.element +appendixinfo.attlist &= + common.attrib, appendixinfo.role.attrib, local.appendixinfo.attrib +# end of appendixinfo.attlist + +# end of appendixinfo.module +local.bibliographyinfo.attrib = empty +bibliographyinfo.role.attrib = role.attrib +bibliographyinfo = + element bibliographyinfo { bibliographyinfo.attlist, info.class+ } +# end of bibliographyinfo.element +bibliographyinfo.attlist &= + common.attrib, + bibliographyinfo.role.attrib, + local.bibliographyinfo.attrib +# end of bibliographyinfo.attlist + +# end of bibliographyinfo.module +local.chapterinfo.attrib = empty +chapterinfo.role.attrib = role.attrib +chapterinfo = element chapterinfo { chapterinfo.attlist, info.class+ } +# end of chapterinfo.element +chapterinfo.attlist &= + common.attrib, chapterinfo.role.attrib, local.chapterinfo.attrib +# end of chapterinfo.attlist + +# end of chapterinfo.module +local.glossaryinfo.attrib = empty +glossaryinfo.role.attrib = role.attrib +glossaryinfo = + element glossaryinfo { glossaryinfo.attlist, info.class+ } +# end of glossaryinfo.element +glossaryinfo.attlist &= + common.attrib, glossaryinfo.role.attrib, local.glossaryinfo.attrib +# end of glossaryinfo.attlist + +# end of glossaryinfo.module +local.indexinfo.attrib = empty +indexinfo.role.attrib = role.attrib +indexinfo = element indexinfo { indexinfo.attlist, info.class+ } +# end of indexinfo.element +indexinfo.attlist &= + common.attrib, indexinfo.role.attrib, local.indexinfo.attrib +# end of indexinfo.attlist + +# end of indexinfo.module +local.setindexinfo.attrib = empty +setindexinfo.role.attrib = role.attrib +setindexinfo = + element setindexinfo { setindexinfo.attlist, info.class+ } +# end of setindexinfo.element +setindexinfo.attlist &= + common.attrib, setindexinfo.role.attrib, local.setindexinfo.attrib +# end of setindexinfo.attlist + +# end of setindexinfo.module +local.partinfo.attrib = empty +partinfo.role.attrib = role.attrib +partinfo = element partinfo { partinfo.attlist, info.class+ } +# end of partinfo.element +partinfo.attlist &= + common.attrib, partinfo.role.attrib, local.partinfo.attrib +# end of partinfo.attlist + +# end of partinfo.module +local.prefaceinfo.attrib = empty +prefaceinfo.role.attrib = role.attrib +prefaceinfo = element prefaceinfo { prefaceinfo.attlist, info.class+ } +# end of prefaceinfo.element +prefaceinfo.attlist &= + common.attrib, prefaceinfo.role.attrib, local.prefaceinfo.attrib +# end of prefaceinfo.attlist + +# end of prefaceinfo.module +local.refentryinfo.attrib = empty +refentryinfo.role.attrib = role.attrib +refentryinfo = + element refentryinfo { refentryinfo.attlist, info.class+ } +# end of refentryinfo.element +refentryinfo.attlist &= + common.attrib, refentryinfo.role.attrib, local.refentryinfo.attrib +# end of refentryinfo.attlist + +# end of refentryinfo.module +local.refsectioninfo.attrib = empty +refsectioninfo.role.attrib = role.attrib +refsectioninfo = + element refsectioninfo { refsectioninfo.attlist, info.class+ } +# end of refsectioninfo.element +refsectioninfo.attlist &= + common.attrib, refsectioninfo.role.attrib, local.refsectioninfo.attrib +# end of refsectioninfo.attlist + +# end of refsectioninfo.module +local.refsect1info.attrib = empty +refsect1info.role.attrib = role.attrib +refsect1info = + element refsect1info { refsect1info.attlist, info.class+ } +# end of refsect1info.element +refsect1info.attlist &= + common.attrib, refsect1info.role.attrib, local.refsect1info.attrib +# end of refsect1info.attlist + +# end of refsect1info.module +local.refsect2info.attrib = empty +refsect2info.role.attrib = role.attrib +refsect2info = + element refsect2info { refsect2info.attlist, info.class+ } +# end of refsect2info.element +refsect2info.attlist &= + common.attrib, refsect2info.role.attrib, local.refsect2info.attrib +# end of refsect2info.attlist + +# end of refsect2info.module +local.refsect3info.attrib = empty +refsect3info.role.attrib = role.attrib +refsect3info = + element refsect3info { refsect3info.attlist, info.class+ } +# end of refsect3info.element +refsect3info.attlist &= + common.attrib, refsect3info.role.attrib, local.refsect3info.attrib +# end of refsect3info.attlist + +# end of refsect3info.module +local.refsynopsisdivinfo.attrib = empty +refsynopsisdivinfo.role.attrib = role.attrib +refsynopsisdivinfo = + element refsynopsisdivinfo { refsynopsisdivinfo.attlist, info.class+ } +# end of refsynopsisdivinfo.element +refsynopsisdivinfo.attlist &= + common.attrib, + refsynopsisdivinfo.role.attrib, + local.refsynopsisdivinfo.attrib +# end of refsynopsisdivinfo.attlist + +# end of refsynopsisdivinfo.module +local.referenceinfo.attrib = empty +referenceinfo.role.attrib = role.attrib +referenceinfo = + element referenceinfo { referenceinfo.attlist, info.class+ } +# end of referenceinfo.element +referenceinfo.attlist &= + common.attrib, referenceinfo.role.attrib, local.referenceinfo.attrib +# end of referenceinfo.attlist + +# end of referenceinfo.module +local.sect1info.attrib = empty +sect1info.role.attrib = role.attrib +sect1info = element sect1info { sect1info.attlist, info.class+ } +# end of sect1info.element +sect1info.attlist &= + common.attrib, sect1info.role.attrib, local.sect1info.attrib +# end of sect1info.attlist +local.sect2info.attrib = empty +sect2info.role.attrib = role.attrib +sect2info = element sect2info { sect2info.attlist, info.class+ } +# end of sect2info.element +sect2info.attlist &= + common.attrib, sect2info.role.attrib, local.sect2info.attrib +# end of sect2info.attlist +local.sect3info.attrib = empty +sect3info.role.attrib = role.attrib +sect3info = element sect3info { sect3info.attlist, info.class+ } +# end of sect3info.element +sect3info.attlist &= + common.attrib, sect3info.role.attrib, local.sect3info.attrib +# end of sect3info.attlist +local.sect4info.attrib = empty +sect4info.role.attrib = role.attrib +sect4info = element sect4info { sect4info.attlist, info.class+ } +# end of sect4info.element +sect4info.attlist &= + common.attrib, sect4info.role.attrib, local.sect4info.attrib +# end of sect4info.attlist +local.sect5info.attrib = empty +sect5info.role.attrib = role.attrib +sect5info = element sect5info { sect5info.attlist, info.class+ } +# end of sect5info.element +sect5info.attlist &= + common.attrib, sect5info.role.attrib, local.sect5info.attrib +# end of sect5info.attlist + +# ...................................................................... + +# Section (parallel to Sect*) ......................................... +local.section.attrib = empty +section.role.attrib = role.attrib +section = + element section { + section.attlist, + sectioninfo?, + sect.title.content, + nav.class*, + ((divcomponent.mix+, + (refentry.class* | section.class* | simplesect*)) + | refentry.class+ + | section.class+ + | simplesect+), + nav.class* + } +# end of section.element +section.attlist &= + label.attrib, + status.attrib, + common.attrib, + section.role.attrib, + local.section.attrib +# end of section.attlist + +# end of section.module +sectioninfo.role.attrib = role.attrib +local.sectioninfo.attrib = empty +sectioninfo = element sectioninfo { sectioninfo.attlist, info.class+ } +# end of sectioninfo.element +sectioninfo.attlist &= + common.attrib, sectioninfo.role.attrib, local.sectioninfo.attrib +# end of sectioninfo.attlist + +# end of sectioninfo.module + +# end of section.content.module + +# ...................................................................... + +# Sect1, Sect2, Sect3, Sect4, Sect5 .................................... +local.sect1.attrib = empty +sect1.role.attrib = role.attrib +sect1 = + element sect1 { + sect1.attlist, + sect1info?, + sect.title.content, + nav.class*, + ((divcomponent.mix+, (refentry.class* | sect2* | simplesect*)) + | refentry.class+ + | sect2+ + | simplesect+), + nav.class* + } +# end of sect1.element + +# Renderas: Indicates the format in which the heading should +# appear +sect1.attlist &= + attribute renderas { "sect2" | "sect3" | "sect4" | "sect5" }?, + label.attrib, + status.attrib, + common.attrib, + sect1.role.attrib, + local.sect1.attrib +# end of sect1.attlist + +# end of sect1.module +local.sect2.attrib = empty +sect2.role.attrib = role.attrib +sect2 = + element sect2 { + sect2.attlist, + sect2info?, + sect.title.content, + nav.class*, + ((divcomponent.mix+, (refentry.class* | sect3* | simplesect*)) + | refentry.class+ + | sect3+ + | simplesect+), + nav.class* + } +# end of sect2.element + +# Renderas: Indicates the format in which the heading should +# appear +sect2.attlist &= + attribute renderas { "sect1" | "sect3" | "sect4" | "sect5" }?, + label.attrib, + status.attrib, + common.attrib, + sect2.role.attrib, + local.sect2.attrib +# end of sect2.attlist + +# end of sect2.module +local.sect3.attrib = empty +sect3.role.attrib = role.attrib +sect3 = + element sect3 { + sect3.attlist, + sect3info?, + sect.title.content, + nav.class*, + ((divcomponent.mix+, (refentry.class* | sect4* | simplesect*)) + | refentry.class+ + | sect4+ + | simplesect+), + nav.class* + } +# end of sect3.element + +# Renderas: Indicates the format in which the heading should +# appear +sect3.attlist &= + attribute renderas { "sect1" | "sect2" | "sect4" | "sect5" }?, + label.attrib, + status.attrib, + common.attrib, + sect3.role.attrib, + local.sect3.attrib +# end of sect3.attlist + +# end of sect3.module +local.sect4.attrib = empty +sect4.role.attrib = role.attrib +sect4 = + element sect4 { + sect4.attlist, + sect4info?, + sect.title.content, + nav.class*, + ((divcomponent.mix+, (refentry.class* | sect5* | simplesect*)) + | refentry.class+ + | sect5+ + | simplesect+), + nav.class* + } +# end of sect4.element + +# Renderas: Indicates the format in which the heading should +# appear +sect4.attlist &= + attribute renderas { "sect1" | "sect2" | "sect3" | "sect5" }?, + label.attrib, + status.attrib, + common.attrib, + sect4.role.attrib, + local.sect4.attrib +# end of sect4.attlist + +# end of sect4.module +local.sect5.attrib = empty +sect5.role.attrib = role.attrib +sect5 = + element sect5 { + sect5.attlist, + sect5info?, + sect.title.content, + nav.class*, + ((divcomponent.mix+, (refentry.class* | simplesect*)) + | refentry.class+ + | simplesect+), + nav.class* + } +# end of sect5.element + +# Renderas: Indicates the format in which the heading should +# appear +sect5.attlist &= + attribute renderas { "sect1" | "sect2" | "sect3" | "sect4" }?, + label.attrib, + status.attrib, + common.attrib, + sect5.role.attrib, + local.sect5.attrib +# end of sect5.attlist + +# end of sect5.module +local.simplesect.attrib = empty +simplesect.role.attrib = role.attrib +simplesect = + element simplesect { + simplesect.attlist, sect.title.content, divcomponent.mix+ + } +# end of simplesect.element +simplesect.attlist &= + common.attrib, simplesect.role.attrib, local.simplesect.attrib +# end of simplesect.attlist + +# end of simplesect.module + +# ...................................................................... + +# Bibliography ......................................................... +local.bibliography.attrib = empty +bibliography.role.attrib = role.attrib +bibliography = + element bibliography { + bibliography.attlist, + bibliographyinfo?, + bookcomponent.title.content?, + component.mix*, + (bibliodiv+ | (biblioentry | bibliomixed)+) + } +# end of bibliography.element +bibliography.attlist &= + status.attrib, + common.attrib, + bibliography.role.attrib, + local.bibliography.attrib +# end of bibliography.attlist + +# end of bibliography.module +local.bibliodiv.attrib = empty +bibliodiv.role.attrib = role.attrib +bibliodiv = + element bibliodiv { + bibliodiv.attlist, + sect.title.content?, + component.mix*, + (biblioentry | bibliomixed)+ + } +# end of bibliodiv.element +bibliodiv.attlist &= + status.attrib, + common.attrib, + bibliodiv.role.attrib, + local.bibliodiv.attrib +# end of bibliodiv.attlist + +# end of bibliodiv.module + +# end of bibliography.content.module + +# ...................................................................... + +# Glossary ............................................................. +local.glossary.attrib = empty +glossary.role.attrib = role.attrib +glossary = + element glossary { + glossary.attlist, + glossaryinfo?, + bookcomponent.title.content?, + component.mix*, + (glossdiv+ | glossentry+), + bibliography? + } +# end of glossary.element +glossary.attlist &= + status.attrib, + common.attrib, + glossary.role.attrib, + local.glossary.attrib +# end of glossary.attlist + +# end of glossary.module +local.glossdiv.attrib = empty +glossdiv.role.attrib = role.attrib +glossdiv = + element glossdiv { + glossdiv.attlist, sect.title.content, component.mix*, glossentry+ + } +# end of glossdiv.element +glossdiv.attlist &= + status.attrib, + common.attrib, + glossdiv.role.attrib, + local.glossdiv.attrib +# end of glossdiv.attlist + +# end of glossdiv.module + +# end of glossary.content.module + +# ...................................................................... + +# Index and SetIndex ................................................... +local.indexes.attrib = empty +indexes.role.attrib = role.attrib +index = + element index { + index.attlist, + indexinfo?, + bookcomponent.title.content?, + component.mix*, + (indexdiv* | indexentry*) + } +# end of index.element +index.attlist &= + common.attrib, indexes.role.attrib, local.indexes.attrib +# end of index.attlist +setindex = + element setindex { + setindex.attlist, + setindexinfo?, + bookcomponent.title.content?, + component.mix*, + (indexdiv* | indexentry*) + } +# end of setindex.element +setindex.attlist &= + common.attrib, indexes.role.attrib, local.indexes.attrib +# end of setindex.attlist + +# end of indexes.module + +# SegmentedList in this content is useful for marking up permuted +# indices. +local.indexdiv.attrib = empty +indexdiv.role.attrib = role.attrib +indexdiv = + element indexdiv { + indexdiv.attlist, + sect.title.content?, + (indexdivcomponent.mix*, (indexentry+ | segmentedlist)) + } +# end of indexdiv.element +indexdiv.attlist &= + common.attrib, indexdiv.role.attrib, local.indexdiv.attrib +# end of indexdiv.attlist + +# end of indexdiv.module + +# Index entries appear in the index, not the text. +local.indexentry.attrib = empty +indexentry.role.attrib = role.attrib +indexentry = + element indexentry { + indexentry.attlist, + primaryie, + (seeie | seealsoie)*, + (secondaryie, (seeie | seealsoie | tertiaryie)*)* + } +# end of indexentry.element +indexentry.attlist &= + common.attrib, indexentry.role.attrib, local.indexentry.attrib +# end of indexentry.attlist + +# end of indexentry.module +local.primsecterie.attrib = empty +primsecterie.role.attrib = role.attrib +primaryie = element primaryie { primaryie.attlist, ndxterm.char.mix* } +# end of primaryie.element + +# to IndexTerms that these entries represent +primaryie.attlist &= + linkends.attrib, + common.attrib, + primsecterie.role.attrib, + local.primsecterie.attrib +# end of primaryie.attlist +secondaryie = + element secondaryie { secondaryie.attlist, ndxterm.char.mix* } +# end of secondaryie.element + +# to IndexTerms that these entries represent +secondaryie.attlist &= + linkends.attrib, + common.attrib, + primsecterie.role.attrib, + local.primsecterie.attrib +# end of secondaryie.attlist +tertiaryie = + element tertiaryie { tertiaryie.attlist, ndxterm.char.mix* } +# end of tertiaryie.element + +# to IndexTerms that these entries represent +tertiaryie.attlist &= + linkends.attrib, + common.attrib, + primsecterie.role.attrib, + local.primsecterie.attrib +# end of tertiaryie.attlist + +# end of primsecterie.module +local.seeie.attrib = empty +seeie.role.attrib = role.attrib +seeie = element seeie { seeie.attlist, ndxterm.char.mix* } +# end of seeie.element + +# to IndexEntry to look up +seeie.attlist &= + linkend.attrib, common.attrib, seeie.role.attrib, local.seeie.attrib +# end of seeie.attlist + +# end of seeie.module +local.seealsoie.attrib = empty +seealsoie.role.attrib = role.attrib +seealsoie = element seealsoie { seealsoie.attlist, ndxterm.char.mix* } +# end of seealsoie.element + +# to related IndexEntries +seealsoie.attlist &= + linkends.attrib, + common.attrib, + seealsoie.role.attrib, + local.seealsoie.attrib +# end of seealsoie.attlist + +# end of seealsoie.module + +# end of index.content.module + +# ...................................................................... + +# RefEntry ............................................................. +local.refentry.attrib = empty +refentry.role.attrib = role.attrib +refentry = + element refentry { + refentry.attlist, + beginpage?, + ndxterm.class*, + refentryinfo?, + refmeta?, + (remark | link.char.class)*, + refnamediv, + refsynopsisdiv?, + (refsect1+ | refsection+) + } +# end of refentry.element +refentry.attlist &= + status.attrib, + common.attrib, + refentry.role.attrib, + local.refentry.attrib +# end of refentry.attlist + +# end of refentry.module +local.refmeta.attrib = empty +refmeta.role.attrib = role.attrib +refmeta = + element refmeta { + refmeta.attlist, + ndxterm.class*, + refentrytitle, + manvolnum?, + refmiscinfo*, + ndxterm.class* + } +# end of refmeta.element +refmeta.attlist &= + common.attrib, refmeta.role.attrib, local.refmeta.attrib +# end of refmeta.attlist + +# end of refmeta.module +local.refmiscinfo.attrib = empty +refmiscinfo.role.attrib = role.attrib +refmiscinfo = + element refmiscinfo { refmiscinfo.attlist, docinfo.char.mix* } +# end of refmiscinfo.element + +# Class: Freely assignable parameter; no default +refmiscinfo.attlist &= + attribute class { text }?, + common.attrib, + refmiscinfo.role.attrib, + local.refmiscinfo.attrib +# end of refmiscinfo.attlist + +# end of refmiscinfo.module +local.refnamediv.attrib = empty +refnamediv.role.attrib = role.attrib +refnamediv = + element refnamediv { + refnamediv.attlist, + refdescriptor?, + refname+, + refpurpose, + refclass*, + (remark | link.char.class)* + } +# end of refnamediv.element +refnamediv.attlist &= + common.attrib, refnamediv.role.attrib, local.refnamediv.attrib +# end of refnamediv.attlist + +# end of refnamediv.module +local.refdescriptor.attrib = empty +refdescriptor.role.attrib = role.attrib +refdescriptor = + element refdescriptor { refdescriptor.attlist, refname.char.mix* } +# end of refdescriptor.element +refdescriptor.attlist &= + common.attrib, refdescriptor.role.attrib, local.refdescriptor.attrib +# end of refdescriptor.attlist + +# end of refdescriptor.module +local.refname.attrib = empty +refname.role.attrib = role.attrib +refname = element refname { refname.attlist, refname.char.mix* } +# end of refname.element +refname.attlist &= + common.attrib, refname.role.attrib, local.refname.attrib +# end of refname.attlist + +# end of refname.module +local.refpurpose.attrib = empty +refpurpose.role.attrib = role.attrib +refpurpose = + element refpurpose { refpurpose.attlist, refinline.char.mix* } +# end of refpurpose.element +refpurpose.attlist &= + common.attrib, refpurpose.role.attrib, local.refpurpose.attrib +# end of refpurpose.attlist + +# end of refpurpose.module +local.refclass.attrib = empty +refclass.role.attrib = role.attrib +refclass = element refclass { refclass.attlist, refclass.char.mix* } +# end of refclass.element +refclass.attlist &= + common.attrib, refclass.role.attrib, local.refclass.attrib +# end of refclass.attlist + +# end of refclass.module +local.refsynopsisdiv.attrib = empty +refsynopsisdiv.role.attrib = role.attrib +refsynopsisdiv = + element refsynopsisdiv { + refsynopsisdiv.attlist, + refsynopsisdivinfo?, + refsect.title.content?, + ((refcomponent.mix+, refsect2*) | refsect2+) + } +# end of refsynopsisdiv.element +refsynopsisdiv.attlist &= + common.attrib, refsynopsisdiv.role.attrib, local.refsynopsisdiv.attrib +# end of refsynopsisdiv.attlist + +# end of refsynopsisdiv.module +local.refsection.attrib = empty +refsection.role.attrib = role.attrib +refsection = + element refsection { + refsection.attlist, + refsectioninfo?, + refsect.title.content, + ((refcomponent.mix+, refsection*) | refsection+) + } +# end of refsection.element +refsection.attlist &= + status.attrib, + common.attrib, + refsection.role.attrib, + local.refsection.attrib +# end of refsection.attlist + +# end of refsection.module +local.refsect1.attrib = empty +refsect1.role.attrib = role.attrib +refsect1 = + element refsect1 { + refsect1.attlist, + refsect1info?, + refsect.title.content, + ((refcomponent.mix+, refsect2*) | refsect2+) + } +# end of refsect1.element +refsect1.attlist &= + status.attrib, + common.attrib, + refsect1.role.attrib, + local.refsect1.attrib +# end of refsect1.attlist + +# end of refsect1.module +local.refsect2.attrib = empty +refsect2.role.attrib = role.attrib +refsect2 = + element refsect2 { + refsect2.attlist, + refsect2info?, + refsect.title.content, + ((refcomponent.mix+, refsect3*) | refsect3+) + } +# end of refsect2.element +refsect2.attlist &= + status.attrib, + common.attrib, + refsect2.role.attrib, + local.refsect2.attrib +# end of refsect2.attlist + +# end of refsect2.module +local.refsect3.attrib = empty +refsect3.role.attrib = role.attrib +refsect3 = + element refsect3 { + refsect3.attlist, + refsect3info?, + refsect.title.content, + refcomponent.mix+ + } +# end of refsect3.element +refsect3.attlist &= + status.attrib, + common.attrib, + refsect3.role.attrib, + local.refsect3.attrib +# end of refsect3.attlist + +# end of refsect3.module + +# end of refentry.content.module + +# ...................................................................... + +# Article .............................................................. + +# An Article is a chapter-level, stand-alone document that is often, +# but need not be, collected into a Book. +local.article.attrib = empty +article.role.attrib = role.attrib +article = + element article { + article.attlist, + div.title.content?, + articleinfo?, + tocchap?, + lot*, + bookcomponent.content, + (nav.class | appendix.class | ackno)* + } +# end of article.element + +# Class: Indicates the type of a particular article; +# all articles have the same structure and general purpose. +# No default. + +# ParentBook: ID of the enclosing Book +article.attlist &= + attribute class { + "journalarticle" + | "productsheet" + | "whitepaper" + | "techreport" + | "specification" + | "faq" + }?, + attribute parentbook { xsd:IDREF }?, + status.attrib, + common.attrib, + article.role.attrib, + local.article.attrib +# end of article.attlist + +# end of article.module + +# End of DocBook document hierarchy module V4.2 ........................ + +# ......................................................................
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/dbnotn.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,84 @@ +# ...................................................................... + +# DocBook notations module V4.2 ........................................ + +# File dbnotnx.mod ..................................................... + +# Copyright 1992-2002 HaL Computer Systems, Inc., +# O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software +# Corporation, Norman Walsh, Sun Microsystems, Inc., and the +# Organization for the Advancement of Structured Information +# Standards (OASIS). +# +# $Id: dbnotn.rnc,v 1.1 2003/08/30 04:19:27 jjc Exp $ +# +# Permission to use, copy, modify and distribute the DocBook DTD +# and its accompanying documentation for any purpose and without fee +# is hereby granted in perpetuity, provided that the above copyright +# notice and this paragraph appear in all copies. The copyright +# holders make no representation about the suitability of the DTD for +# any purpose. It is provided "as is" without expressed or implied +# warranty. +# +# If you modify the DocBook DTD in any way, except for declaring and +# referencing additional sets of general entities and declaring +# additional notations, label your DTD as a variant of DocBook. See +# the maintenance documentation for more information. +# +# Please direct all questions, bug reports, or suggestions for +# changes to the docbook@lists.oasis-open.org mailing list. For more +# information, see http://www.oasis-open.org/docbook/. + +# ...................................................................... + +# This module contains the entity declarations for the standard ISO +# entity sets used by DocBook. +# +# In DTD driver files referring to this module, please use an entity +# declaration that uses the public identifier shown below: +# +# <!ENTITY % dbnotn PUBLIC +# "-//OASIS//ENTITIES DocBook Notations V4.2//EN" +# "dbnotnx.mod"> +# %dbnotn; +# +# See the documentation for detailed information on the parameter +# entity and module scheme used in DocBook, customizing DocBook and +# planning for interchange, and changes made since the last release +# of DocBook. + +local.notation.class = notAllowed +notation.class = + "BMP" + | "CGM-CHAR" + | "CGM-BINARY" + | "CGM-CLEAR" + | "DITROFF" + | "DVI" + | "EPS" + | "EQN" + | "FAX" + | "GIF" + | "GIF87a" + | "GIF89a" + | "JPG" + | "JPEG" + | "IGES" + | "PCX" + | "PIC" + | "PNG" + | "PS" + | "SGML" + | "TBL" + | "TEX" + | "TIFF" + | "WMF" + | "WPG" + | "SVG" + | "linespecific" + | local.notation.class +# WordPerfect Graphic format + +# End of DocBook notations module V4.2 ................................. + +# ......................................................................
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/dbpool.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,5083 @@ +# This file was generated automatically by Trang. The table model +# dependent definitions have been moved into separate files. + +# ...................................................................... + +# DocBook XML information pool module V4.2 ............................. + +# File dbpoolx.mod ..................................................... + +# Copyright 1992-2002 HaL Computer Systems, Inc., +# O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software +# Corporation, Norman Walsh, Sun Microsystems, Inc., and the +# Organization for the Advancement of Structured Information +# Standards (OASIS). +# +# $Id: dbpool.rnc,v 1.4 2003/08/30 07:48:31 jjc Exp $ +# +# Permission to use, copy, modify and distribute the DocBook XML DTD +# and its accompanying documentation for any purpose and without fee +# is hereby granted in perpetuity, provided that the above copyright +# notice and this paragraph appear in all copies. The copyright +# holders make no representation about the suitability of the DTD for +# any purpose. It is provided "as is" without expressed or implied +# warranty. +# +# If you modify the DocBook XML DTD in any way, except for declaring and +# referencing additional sets of general entities and declaring +# additional notations, label your DTD as a variant of DocBook. See +# the maintenance documentation for more information. +# +# Please direct all questions, bug reports, or suggestions for +# changes to the docbook@lists.oasis-open.org mailing list. For more +# information, see http://www.oasis-open.org/docbook/. + +# ...................................................................... + +# This module contains the definitions for the objects, inline +# elements, and so on that are available to be used as the main +# content of DocBook documents. Some elements are useful for general +# publishing, and others are useful specifically for computer +# documentation. +# +# This module has the following dependencies on other modules: +# +# o It assumes that a %notation.class; entity is defined by the +# driver file or other high-level module. This entity is +# referenced in the NOTATION attributes for the graphic-related and +# ModeSpec elements. +# +# o It assumes that an appropriately parameterized table module is +# available for use with the table-related elements. +# +# In DTD driver files referring to this module, please use an entity +# declaration that uses the public identifier shown below: +# +# <!ENTITY % dbpool PUBLIC +# "-//OASIS//ELEMENTS DocBook XML Information Pool V4.2//EN" +# "dbpoolx.mod"> +# %dbpool; +# +# See the documentation for detailed information on the parameter +# entity and module scheme used in DocBook, customizing DocBook and +# planning for interchange, and changes made since the last release +# of DocBook. + +# ...................................................................... + +# General-purpose semantics entities ................................... + +namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0" + +yesorno.attvals = string +# ...................................................................... + +# Entities for module inclusions ....................................... + +# ...................................................................... + +# Entities for element classes and mixtures ............................ + +# "Ubiquitous" classes: ndxterm.class and beginpage +local.ndxterm.class = notAllowed +ndxterm.class = indexterm | local.ndxterm.class +# Object-level classes ................................................. +local.list.class = notAllowed +list.class = + calloutlist + | glosslist + | itemizedlist + | orderedlist + | segmentedlist + | simplelist + | variablelist + | local.list.class +local.admon.class = notAllowed +admon.class = + caution | important | note | tip | warning | local.admon.class +local.linespecific.class = notAllowed +linespecific.class = + literallayout + | programlisting + | programlistingco + | screen + | screenco + | screenshot + | local.linespecific.class +local.method.synop.class = notAllowed +method.synop.class = + constructorsynopsis + | destructorsynopsis + | methodsynopsis + | local.method.synop.class +local.synop.class = notAllowed +synop.class = + synopsis + | cmdsynopsis + | funcsynopsis + | classsynopsis + | fieldsynopsis + | method.synop.class + | local.synop.class +local.para.class = notAllowed +para.class = formalpara | para | simpara | local.para.class +local.informal.class = notAllowed +informal.class = + address + | blockquote + | graphic + | graphicco + | mediaobject + | mediaobjectco + | informalequation + | informalexample + | informalfigure + | informaltable + | local.informal.class +local.formal.class = notAllowed +formal.class = equation | example | figure | table | local.formal.class +# The DocBook TC may produce an official EBNF module for DocBook. + +# This PE provides the hook by which it can be inserted into the DTD. +ebnf.block.hook = notAllowed +local.compound.class = notAllowed +compound.class = + msgset + | procedure + | sidebar + | qandaset + | ebnf.block.hook + | local.compound.class +local.genobj.class = notAllowed +genobj.class = + anchor | bridgehead | remark | highlights | local.genobj.class +local.descobj.class = notAllowed +descobj.class = abstract | authorblurb | epigraph | local.descobj.class +# Character-level classes .............................................. +local.xref.char.class = notAllowed +xref.char.class = footnoteref | xref | local.xref.char.class +local.gen.char.class = notAllowed +gen.char.class = + abbrev + | acronym + | citation + | citerefentry + | citetitle + | emphasis + | firstterm + | foreignphrase + | glossterm + | footnote + | phrase + | quote + | trademark + | wordasword + | personname + | local.gen.char.class +local.link.char.class = notAllowed +link.char.class = link | olink | ulink | local.link.char.class +# The DocBook TC may produce an official EBNF module for DocBook. + +# This PE provides the hook by which it can be inserted into the DTD. +ebnf.inline.hook = notAllowed +local.tech.char.class = notAllowed +tech.char.class = + action + | application + | classname + | methodname + | interfacename + | exceptionname + | ooclass + | oointerface + | ooexception + | command + | computeroutput + | database + | email + | envar + | errorcode + | errorname + | errortype + | errortext + | filename + | function + | guibutton + | guiicon + | guilabel + | guimenu + | guimenuitem + | guisubmenu + | hardware + | interface + | keycap + | keycode + | keycombo + | keysym + | literal + | constant + | markup + | medialabel + | menuchoice + | mousebutton + | option + | optional + | parameter + | prompt + | property + | replaceable + | returnvalue + | sgmltag + | structfield + | structname + | symbol + | systemitem + | \token + | type + | userinput + | varname + | ebnf.inline.hook + | local.tech.char.class +local.base.char.class = notAllowed +base.char.class = anchor | local.base.char.class +local.docinfo.char.class = notAllowed +docinfo.char.class = + author + | authorinitials + | corpauthor + | modespec + | othercredit + | productname + | productnumber + | revhistory + | local.docinfo.char.class +local.other.char.class = notAllowed +other.char.class = + remark | subscript | superscript | local.other.char.class +local.inlineobj.char.class = notAllowed +inlineobj.char.class = + inlinegraphic + | inlinemediaobject + | inlineequation + | local.inlineobj.char.class +# ...................................................................... + +# Entities for content models .......................................... +formalobject.title.content = title, titleabbrev? +# Redeclaration placeholder ............................................ + +# For redeclaring entities that are declared after this point while +# retaining their references to the entities that are declared before +# this point + +# Object-level mixtures ................................................ + +# list admn line synp para infm form cmpd gen desc +# Component mixture X X X X X X X X X X +# Sidebar mixture X X X X X X X a X +# Footnote mixture X X X X X +# Example mixture X X X X X +# Highlights mixture X X X +# Paragraph mixture X X X X +# Admonition mixture X X X X X X b c +# Figure mixture X X X +# Table entry mixture X X X X d +# Glossary def mixture X X X X X e +# Legal notice mixture X X X X f +# +# a. Just Procedure; not Sidebar itself or MsgSet. +# b. No MsgSet. +# c. No Highlights. +# d. Just Graphic; no other informal objects. +# e. No Anchor, BridgeHead, or Highlights. +# f. Just BlockQuote; no other informal objects. +local.component.mix = notAllowed +component.mix = + list.class + | admon.class + | linespecific.class + | synop.class + | para.class + | informal.class + | formal.class + | compound.class + | genobj.class + | descobj.class + | ndxterm.class + | beginpage + | local.component.mix +local.sidebar.mix = notAllowed +sidebar.mix = + list.class + | admon.class + | linespecific.class + | synop.class + | para.class + | informal.class + | formal.class + | procedure + | genobj.class + | ndxterm.class + | beginpage + | local.sidebar.mix +local.qandaset.mix = notAllowed +qandaset.mix = + list.class + | admon.class + | linespecific.class + | synop.class + | para.class + | informal.class + | formal.class + | procedure + | genobj.class + | ndxterm.class + | local.qandaset.mix +local.revdescription.mix = notAllowed +revdescription.mix = + list.class + | admon.class + | linespecific.class + | synop.class + | para.class + | informal.class + | formal.class + | procedure + | genobj.class + | ndxterm.class + | local.revdescription.mix +local.footnote.mix = notAllowed +footnote.mix = + list.class + | linespecific.class + | synop.class + | para.class + | informal.class + | local.footnote.mix +local.example.mix = notAllowed +example.mix = + list.class + | linespecific.class + | synop.class + | para.class + | informal.class + | ndxterm.class + | beginpage + | local.example.mix +local.highlights.mix = notAllowed +highlights.mix = + list.class + | admon.class + | para.class + | ndxterm.class + | local.highlights.mix +# %formal.class; is explicitly excluded from many contexts in which +# paragraphs are used +local.para.mix = notAllowed +para.mix = + list.class + | admon.class + | linespecific.class + | informal.class + | formal.class + | local.para.mix +local.admon.mix = notAllowed +admon.mix = + list.class + | linespecific.class + | synop.class + | para.class + | informal.class + | formal.class + | procedure + | sidebar + | anchor + | bridgehead + | remark + | ndxterm.class + | beginpage + | local.admon.mix +local.figure.mix = notAllowed +figure.mix = + linespecific.class + | synop.class + | informal.class + | ndxterm.class + | beginpage + | local.figure.mix +local.tabentry.mix = notAllowed +tabentry.mix = + list.class + | admon.class + | linespecific.class + | para.class + | graphic + | mediaobject + | local.tabentry.mix +local.glossdef.mix = notAllowed +glossdef.mix = + list.class + | linespecific.class + | synop.class + | para.class + | informal.class + | formal.class + | remark + | ndxterm.class + | beginpage + | local.glossdef.mix +local.legalnotice.mix = notAllowed +legalnotice.mix = + list.class + | admon.class + | linespecific.class + | para.class + | blockquote + | ndxterm.class + | beginpage + | local.legalnotice.mix +local.textobject.mix = notAllowed +textobject.mix = + list.class + | admon.class + | linespecific.class + | para.class + | blockquote + | local.textobject.mix +local.mediaobject.mix = notAllowed +mediaobject.mix = + videoobject + | audioobject + | imageobject + | textobject + | local.mediaobject.mix +local.listpreamble.mix = notAllowed +listpreamble.mix = + admon.class + | linespecific.class + | synop.class + | para.class + | informal.class + | genobj.class + | descobj.class + | ndxterm.class + | beginpage + | local.listpreamble.mix +# Character-level mixtures ............................................. + +# sgml.features + +# not [sgml.features[ + +# ]] not sgml.features + +# #PCD xref word link cptr base dnfo othr inob (synop) +# para.char.mix X X X X X X X X X +# title.char.mix X X X X X X X X X +# ndxterm.char.mix X X X X X X X X a +# cptr.char.mix X X X X X a +# smallcptr.char.mix X b a +# word.char.mix X c X X X a +# docinfo.char.mix X d X b X a +# +# a. Just InlineGraphic; no InlineEquation. +# b. Just Replaceable; no other computer terms. +# c. Just Emphasis and Trademark; no other word elements. +# d. Just Acronym, Emphasis, and Trademark; no other word elements. + +# The DocBook TC may produce an official forms module for DocBook. + +# This PE provides the hook by which it can be inserted into the DTD. +forminlines.hook = notAllowed +local.para.char.mix = notAllowed +para.char.mix = + text + | xref.char.class + | gen.char.class + | link.char.class + | tech.char.class + | base.char.class + | docinfo.char.class + | other.char.class + | inlineobj.char.class + | synop.class + | ndxterm.class + | beginpage + | forminlines.hook + | local.para.char.mix +local.title.char.mix = notAllowed +title.char.mix = + text + | xref.char.class + | gen.char.class + | link.char.class + | tech.char.class + | base.char.class + | docinfo.char.class + | other.char.class + | inlineobj.char.class + | ndxterm.class + | local.title.char.mix +local.ndxterm.char.mix = notAllowed +ndxterm.char.mix = + text + | xref.char.class + | gen.char.class + | link.char.class + | tech.char.class + | base.char.class + | docinfo.char.class + | other.char.class + | inlinegraphic + | inlinemediaobject + | local.ndxterm.char.mix +local.cptr.char.mix = notAllowed +cptr.char.mix = + text + | link.char.class + | tech.char.class + | base.char.class + | other.char.class + | inlinegraphic + | inlinemediaobject + | ndxterm.class + | beginpage + | local.cptr.char.mix +local.smallcptr.char.mix = notAllowed +smallcptr.char.mix = + text + | replaceable + | inlinegraphic + | inlinemediaobject + | ndxterm.class + | beginpage + | local.smallcptr.char.mix +local.word.char.mix = notAllowed +word.char.mix = + text + | acronym + | emphasis + | trademark + | link.char.class + | base.char.class + | other.char.class + | inlinegraphic + | inlinemediaobject + | ndxterm.class + | beginpage + | local.word.char.mix +local.docinfo.char.mix = notAllowed +docinfo.char.mix = + text + | link.char.class + | emphasis + | trademark + | replaceable + | other.char.class + | inlinegraphic + | inlinemediaobject + | ndxterm.class + | local.docinfo.char.mix +# ENTITY % bibliocomponent.mix (see Bibliographic section, below) + +# ENTITY % person.ident.mix (see Bibliographic section, below) + +# ...................................................................... + +# Entities for attributes and attribute components ..................... + +# Effectivity attributes ............................................... + +# Arch: Computer or chip architecture to which element applies; no +# default +arch.attrib = attribute arch { text }? +# Condition: General-purpose effectivity attribute +condition.attrib = attribute condition { text }? +# Conformance: Standards conformance characteristics +conformance.attrib = attribute conformance { xsd:NMTOKENS }? +# OS: Operating system to which element applies; no default +os.attrib = attribute os { text }? +# Revision: Editorial revision to which element belongs; no default +revision.attrib = attribute revision { text }? +# Security: Security classification; no default +security.attrib = attribute security { text }? +# UserLevel: Level of user experience to which element applies; no +# default +userlevel.attrib = attribute userlevel { text }? +# Vendor: Computer vendor to which element applies; no default +vendor.attrib = attribute vendor { text }? +local.effectivity.attrib = empty +effectivity.attrib = + arch.attrib, + condition.attrib, + conformance.attrib, + os.attrib, + revision.attrib, + security.attrib, + userlevel.attrib, + vendor.attrib, + local.effectivity.attrib +# Common attributes .................................................... + +# Id: Unique identifier of element; no default +id.attrib = attribute id { xsd:ID }? +# Id: Unique identifier of element; a value must be supplied; no +# default +idreq.attrib = attribute id { xsd:ID } +# Lang: Indicator of language in which element is written, for +# translation, character set management, etc.; no default +lang.attrib = attribute lang { text }? +# Remap: Previous role of element before conversion; no default +remap.attrib = attribute remap { text }? +# Role: New role of element in local environment; no default +role.attrib = attribute role { text }? +# XRefLabel: Alternate labeling string for XRef text generation; +# default is usually title or other appropriate label text already +# contained in element +xreflabel.attrib = attribute xreflabel { text }? +# RevisionFlag: Revision status of element; default is that element +# wasn't revised +revisionflag.attrib = + attribute revisionflag { "changed" | "added" | "deleted" | "off" }? +local.common.attrib = empty +# Role is included explicitly on each element +common.attrib = + id.attrib, + lang.attrib, + remap.attrib, + xreflabel.attrib, + revisionflag.attrib, + effectivity.attrib, + local.common.attrib +# Role is included explicitly on each element +idreq.common.attrib = + idreq.attrib, + lang.attrib, + remap.attrib, + xreflabel.attrib, + revisionflag.attrib, + effectivity.attrib, + local.common.attrib +# Semi-common attributes and other attribute entities .................. +local.graphics.attrib = empty +# EntityRef: Name of an external entity containing the content +# of the graphic + +# FileRef: Filename, qualified by a pathname if desired, +# designating the file containing the content of the graphic + +# Format: Notation of the element content, if any + +# SrcCredit: Information about the source of the Graphic + +# Width: Same as CALS reprowid (desired width) + +# Depth: Same as CALS reprodep (desired depth) + +# Align: Same as CALS hplace with 'none' removed; #IMPLIED means +# application-specific + +# Scale: Conflation of CALS hscale and vscale + +# Scalefit: Same as CALS scalefit +graphics.attrib = + attribute entityref { xsd:ENTITY }?, + attribute fileref { text }?, + attribute format { notation.class }?, + attribute srccredit { text }?, + attribute width { text }?, + attribute contentwidth { text }?, + attribute depth { text }?, + attribute contentdepth { text }?, + attribute align { "left" | "right" | "center" }?, + attribute valign { "top" | "middle" | "bottom" }?, + attribute scale { text }?, + attribute scalefit { yesorno.attvals }?, + local.graphics.attrib +local.keyaction.attrib = empty +# Action: Key combination type; default is unspecified if one +# child element, Simul if there is more than one; if value is +# Other, the OtherAction attribute must have a nonempty value + +# OtherAction: User-defined key combination type +keyaction.attrib = + attribute action { + "click" | "double-click" | "press" | "seq" | "simul" | "other" + }?, + attribute otheraction { text }?, + local.keyaction.attrib +# Label: Identifying number or string; default is usually the +# appropriate number or string autogenerated by a formatter +label.attrib = attribute label { text }? +# Format: whether element is assumed to contain significant white +# space +linespecific.attrib = + [ a:defaultValue = "linespecific" ] + attribute format { "linespecific" }?, + attribute linenumbering { "numbered" | "unnumbered" }? +# Linkend: link to related information; no default +linkend.attrib = attribute linkend { xsd:IDREF }? +# Linkend: required link to related information +linkendreq.attrib = attribute linkend { xsd:IDREF } +# Linkends: link to one or more sets of related information; no +# default +linkends.attrib = attribute linkends { xsd:IDREFS }? +local.mark.attrib = empty +mark.attrib = + attribute mark { text }?, + local.mark.attrib +# MoreInfo: whether element's content has an associated RefEntry +moreinfo.attrib = + [ a:defaultValue = "none" ] + attribute moreinfo { "refentry" | "none" }? +# Pagenum: number of page on which element appears; no default +pagenum.attrib = attribute pagenum { text }? +local.status.attrib = empty +# Status: Editorial or publication status of the element +# it applies to, such as "in review" or "approved for distribution" +status.attrib = + attribute status { text }?, + local.status.attrib +# Width: width of the longest line in the element to which it +# pertains, in number of characters +width.attrib = attribute width { text }? +# ...................................................................... + +# Title elements ....................................................... +local.title.attrib = empty +title.role.attrib = role.attrib +title = element title { title.attlist, title.char.mix* } +# end of title.element +title.attlist &= + pagenum.attrib, common.attrib, title.role.attrib, local.title.attrib +# end of title.attlist + +# end of title.module +local.titleabbrev.attrib = empty +titleabbrev.role.attrib = role.attrib +titleabbrev = + element titleabbrev { titleabbrev.attlist, title.char.mix* } +# end of titleabbrev.element +titleabbrev.attlist &= + common.attrib, titleabbrev.role.attrib, local.titleabbrev.attrib +# end of titleabbrev.attlist + +# end of titleabbrev.module +local.subtitle.attrib = empty +subtitle.role.attrib = role.attrib +subtitle = element subtitle { subtitle.attlist, title.char.mix* } +# end of subtitle.element +subtitle.attlist &= + common.attrib, subtitle.role.attrib, local.subtitle.attrib +# end of subtitle.attlist + +# end of subtitle.module + +# ...................................................................... + +# Bibliographic entities and elements .................................. + +# The bibliographic elements are typically used in the document +# hierarchy. They do not appear in content models of information +# pool elements. See also the document information elements, +# below. +local.person.ident.mix = notAllowed +person.ident.mix = + honorific + | firstname + | surname + | lineage + | othername + | affiliation + | authorblurb + | contrib + | local.person.ident.mix +local.bibliocomponent.mix = notAllowed +bibliocomponent.mix = + abbrev + | abstract + | address + | artpagenums + | author + | authorgroup + | authorinitials + | bibliomisc + | biblioset + | collab + | confgroup + | contractnum + | contractsponsor + | copyright + | corpauthor + | corpname + | date + | edition + | editor + | invpartnumber + | isbn + | issn + | issuenum + | orgname + | biblioid + | citebiblioid + | bibliosource + | bibliorelation + | bibliocoverage + | othercredit + | pagenums + | printhistory + | productname + | productnumber + | pubdate + | publisher + | publishername + | pubsnumber + | releaseinfo + | revhistory + | seriesvolnums + | subtitle + | title + | titleabbrev + | volumenum + | citetitle + | personname + | person.ident.mix + | ndxterm.class + | local.bibliocomponent.mix +# I don't think this is well placed, but it needs to be here because of + +# the reference to bibliocomponent.mix +local.info.class = notAllowed +info.class = + graphic + | mediaobject + | legalnotice + | modespec + | subjectset + | keywordset + | itermset + | bibliocomponent.mix + | local.info.class +local.biblioentry.attrib = empty +biblioentry.role.attrib = role.attrib +biblioentry = + element biblioentry { + biblioentry.attlist, (articleinfo | bibliocomponent.mix)+ + } +# end of biblioentry.element +biblioentry.attlist &= + common.attrib, biblioentry.role.attrib, local.biblioentry.attrib +# end of biblioentry.attlist + +# end of biblioentry.module +local.bibliomixed.attrib = empty +bibliomixed.role.attrib = role.attrib +bibliomixed = + element bibliomixed { + bibliomixed.attlist, (text | bibliocomponent.mix | bibliomset)* + } +# end of bibliomixed.element +bibliomixed.attlist &= + common.attrib, bibliomixed.role.attrib, local.bibliomixed.attrib +# end of bibliomixed.attlist + +# end of bibliomixed.module +local.articleinfo.attrib = empty +articleinfo.role.attrib = role.attrib +articleinfo = element articleinfo { articleinfo.attlist, info.class+ } +# end of articleinfo.element +articleinfo.attlist &= + common.attrib, articleinfo.role.attrib, local.articleinfo.attrib +# end of articleinfo.attlist + +# end of articleinfo.module +local.biblioset.attrib = empty +biblioset.role.attrib = role.attrib +biblioset = + element biblioset { biblioset.attlist, bibliocomponent.mix+ } +# end of biblioset.element + +# Relation: Relationship of elements contained within BiblioSet +biblioset.attlist &= + attribute relation { text }?, + common.attrib, + biblioset.role.attrib, + local.biblioset.attrib +# end of biblioset.attlist + +# end of biblioset.module +bibliomset.role.attrib = role.attrib +local.bibliomset.attrib = empty +bibliomset = + element bibliomset { + bibliomset.attlist, (text | bibliocomponent.mix | bibliomset)* + } +# end of bibliomset.element + +# Relation: Relationship of elements contained within BiblioMSet +bibliomset.attlist &= + attribute relation { text }?, + common.attrib, + bibliomset.role.attrib, + local.bibliomset.attrib +# end of bibliomset.attlist + +# end of bibliomset.module +local.bibliomisc.attrib = empty +bibliomisc.role.attrib = role.attrib +bibliomisc = element bibliomisc { bibliomisc.attlist, para.char.mix* } +# end of bibliomisc.element +bibliomisc.attlist &= + common.attrib, bibliomisc.role.attrib, local.bibliomisc.attrib +# end of bibliomisc.attlist + +# end of bibliomisc.module + +# ...................................................................... + +# Subject, Keyword, and ITermSet elements .............................. +local.subjectset.attrib = empty +subjectset.role.attrib = role.attrib +subjectset = element subjectset { subjectset.attlist, subject+ } +# end of subjectset.element + +# Scheme: Controlled vocabulary employed in SubjectTerms +subjectset.attlist &= + attribute scheme { xsd:NMTOKEN }?, + common.attrib, + subjectset.role.attrib, + local.subjectset.attrib +# end of subjectset.attlist + +# end of subjectset.module +local.subject.attrib = empty +subject.role.attrib = role.attrib +subject = element subject { subject.attlist, subjectterm+ } +# end of subject.element + +# Weight: Ranking of this group of SubjectTerms relative +# to others, 0 is low, no highest value specified +subject.attlist &= + attribute weight { text }?, + common.attrib, + subject.role.attrib, + local.subject.attrib +# end of subject.attlist + +# end of subject.module +local.subjectterm.attrib = empty +subjectterm.role.attrib = role.attrib +subjectterm = element subjectterm { subjectterm.attlist, text } +# end of subjectterm.element +subjectterm.attlist &= + common.attrib, subjectterm.role.attrib, local.subjectterm.attrib +# end of subjectterm.attlist + +# end of subjectterm.module + +# end of subjectset.content.module +local.keywordset.attrib = empty +keywordset.role.attrib = role.attrib +keywordset = element keywordset { keywordset.attlist, keyword+ } +# end of keywordset.element +keywordset.attlist &= + common.attrib, keywordset.role.attrib, local.keywordset.attrib +# end of keywordset.attlist + +# end of keywordset.module +local.keyword.attrib = empty +keyword.role.attrib = role.attrib +keyword = element keyword { keyword.attlist, text } +# end of keyword.element +keyword.attlist &= + common.attrib, keyword.role.attrib, local.keyword.attrib +# end of keyword.attlist + +# end of keyword.module + +# end of keywordset.content.module +local.itermset.attrib = empty +itermset.role.attrib = role.attrib +itermset = element itermset { itermset.attlist, indexterm+ } +# end of itermset.element +itermset.attlist &= + common.attrib, itermset.role.attrib, local.itermset.attrib +# end of itermset.attlist + +# end of itermset.module + +# Bibliographic info for "blocks" +local.blockinfo.attrib = empty +blockinfo.role.attrib = role.attrib +blockinfo = element blockinfo { blockinfo.attlist, info.class+ } +# end of blockinfo.element +blockinfo.attlist &= + common.attrib, blockinfo.role.attrib, local.blockinfo.attrib +# end of blockinfo.attlist + +# end of blockinfo.module + +# ...................................................................... + +# Compound (section-ish) elements ...................................... + +# Message set ...................... +local.msgset.attrib = empty +msgset.role.attrib = role.attrib +msgset = + element msgset { + msgset.attlist, + blockinfo?, + formalobject.title.content?, + (msgentry+ | simplemsgentry+) + } +# end of msgset.element +msgset.attlist &= common.attrib, msgset.role.attrib, local.msgset.attrib +# end of msgset.attlist + +# end of msgset.module +local.msgentry.attrib = empty +msgentry.role.attrib = role.attrib +msgentry = + element msgentry { msgentry.attlist, msg+, msginfo?, msgexplan* } +# end of msgentry.element +msgentry.attlist &= + common.attrib, msgentry.role.attrib, local.msgentry.attrib +# end of msgentry.attlist + +# end of msgentry.module +local.simplemsgentry.attrib = empty +simplemsgentry.role.attrib = role.attrib +simplemsgentry = + element simplemsgentry { simplemsgentry.attlist, msgtext, msgexplan+ } +# end of simplemsgentry.element +simplemsgentry.attlist &= + attribute audience { text }?, + attribute level { text }?, + attribute origin { text }?, + common.attrib, + simplemsgentry.role.attrib, + local.simplemsgentry.attrib +# end of simplemsgentry.attlist + +# end of simplemsgentry.module +local.msg.attrib = empty +msg.role.attrib = role.attrib +msg = element msg { msg.attlist, title?, msgmain, (msgsub | msgrel)* } +# end of msg.element +msg.attlist &= common.attrib, msg.role.attrib, local.msg.attrib +# end of msg.attlist + +# end of msg.module +local.msgmain.attrib = empty +msgmain.role.attrib = role.attrib +msgmain = element msgmain { msgmain.attlist, title?, msgtext } +# end of msgmain.element +msgmain.attlist &= + common.attrib, msgmain.role.attrib, local.msgmain.attrib +# end of msgmain.attlist + +# end of msgmain.module +local.msgsub.attrib = empty +msgsub.role.attrib = role.attrib +msgsub = element msgsub { msgsub.attlist, title?, msgtext } +# end of msgsub.element +msgsub.attlist &= common.attrib, msgsub.role.attrib, local.msgsub.attrib +# end of msgsub.attlist + +# end of msgsub.module +local.msgrel.attrib = empty +msgrel.role.attrib = role.attrib +msgrel = element msgrel { msgrel.attlist, title?, msgtext } +# end of msgrel.element +msgrel.attlist &= common.attrib, msgrel.role.attrib, local.msgrel.attrib +# end of msgrel.attlist + +# end of msgrel.module + +# MsgText (defined in the Inlines section, below) +local.msginfo.attrib = empty +msginfo.role.attrib = role.attrib +msginfo = + element msginfo { msginfo.attlist, (msglevel | msgorig | msgaud)* } +# end of msginfo.element +msginfo.attlist &= + common.attrib, msginfo.role.attrib, local.msginfo.attrib +# end of msginfo.attlist + +# end of msginfo.module +local.msglevel.attrib = empty +msglevel.role.attrib = role.attrib +msglevel = element msglevel { msglevel.attlist, smallcptr.char.mix* } +# end of msglevel.element +msglevel.attlist &= + common.attrib, msglevel.role.attrib, local.msglevel.attrib +# end of msglevel.attlist + +# end of msglevel.module +local.msgorig.attrib = empty +msgorig.role.attrib = role.attrib +msgorig = element msgorig { msgorig.attlist, smallcptr.char.mix* } +# end of msgorig.element +msgorig.attlist &= + common.attrib, msgorig.role.attrib, local.msgorig.attrib +# end of msgorig.attlist + +# end of msgorig.module +local.msgaud.attrib = empty +msgaud.role.attrib = role.attrib +msgaud = element msgaud { msgaud.attlist, para.char.mix* } +# end of msgaud.element +msgaud.attlist &= common.attrib, msgaud.role.attrib, local.msgaud.attrib +# end of msgaud.attlist + +# end of msgaud.module +local.msgexplan.attrib = empty +msgexplan.role.attrib = role.attrib +msgexplan = + element msgexplan { msgexplan.attlist, title?, component.mix+ } +# end of msgexplan.element +msgexplan.attlist &= + common.attrib, msgexplan.role.attrib, local.msgexplan.attrib +# end of msgexplan.attlist + +# end of msgexplan.module + +# end of msgset.content.module + +# QandASet ........................ +local.qandaset.attrib = empty +qandaset.role.attrib = role.attrib +qandaset = + element qandaset { + qandaset.attlist, + blockinfo?, + formalobject.title.content?, + qandaset.mix*, + (qandadiv+ | qandaentry+) + } +# end of qandaset.element +qandaset.attlist &= + attribute defaultlabel { "qanda" | "number" | "none" }?, + common.attrib, + qandaset.role.attrib, + local.qandaset.attrib +# end of qandaset.attlist + +# end of qandaset.module +local.qandadiv.attrib = empty +qandadiv.role.attrib = role.attrib +qandadiv = + element qandadiv { + qandadiv.attlist, + blockinfo?, + formalobject.title.content?, + qandaset.mix*, + (qandadiv+ | qandaentry+) + } +# end of qandadiv.element +qandadiv.attlist &= + common.attrib, qandadiv.role.attrib, local.qandadiv.attrib +# end of qandadiv.attlist + +# end of qandadiv.module +local.qandaentry.attrib = empty +qandaentry.role.attrib = role.attrib +qandaentry = + element qandaentry { + qandaentry.attlist, blockinfo?, revhistory?, question, answer* + } +# end of qandaentry.element +qandaentry.attlist &= + common.attrib, qandaentry.role.attrib, local.qandaentry.attrib +# end of qandaentry.attlist + +# end of qandaentry.module +local.question.attrib = empty +question.role.attrib = role.attrib +question = element question { question.attlist, label?, qandaset.mix+ } +# end of question.element +question.attlist &= + common.attrib, question.role.attrib, local.question.attrib +# end of question.attlist + +# end of question.module +local.answer.attrib = empty +answer.role.attrib = role.attrib +answer = + element answer { answer.attlist, label?, qandaset.mix*, qandaentry* } +# end of answer.element +answer.attlist &= common.attrib, answer.role.attrib, local.answer.attrib +# end of answer.attlist + +# end of answer.module +local.label.attrib = empty +label.role.attrib = role.attrib +label = element label { label.attlist, word.char.mix* } +# end of label.element +label.attlist &= common.attrib, label.role.attrib, local.label.attrib +# end of label.attlist + +# end of label.module + +# end of qandaset.content.module + +# Procedure ........................ +local.procedure.attrib = empty +procedure.role.attrib = role.attrib +procedure = + element procedure { + procedure.attlist, + blockinfo?, + formalobject.title.content?, + component.mix*, + step+ + } +# end of procedure.element +procedure.attlist &= + common.attrib, procedure.role.attrib, local.procedure.attrib +# end of procedure.attlist + +# end of procedure.module +local.step.attrib = empty +step.role.attrib = role.attrib +step = + element step { + step.attlist, + title?, + ((component.mix+, (substeps, component.mix*)?) + | (substeps, component.mix*)) + } +# end of step.element + +# Performance: Whether the Step must be performed + +# not #REQUIRED! +step.attlist &= + [ a:defaultValue = "required" ] + attribute performance { "optional" | "required" }?, + common.attrib, + step.role.attrib, + local.step.attrib +# end of step.attlist + +# end of step.module +local.substeps.attrib = empty +substeps.role.attrib = role.attrib +substeps = element substeps { substeps.attlist, step+ } +# end of substeps.element + +# Performance: whether entire set of substeps must be performed + +# not #REQUIRED! +substeps.attlist &= + [ a:defaultValue = "required" ] + attribute performance { "optional" | "required" }?, + common.attrib, + substeps.role.attrib, + local.substeps.attrib +# end of substeps.attlist + +# end of substeps.module + +# end of procedure.content.module + +# Sidebar .......................... +local.sidebarinfo.attrib = empty +sidebarinfo.role.attrib = role.attrib +sidebarinfo = element sidebarinfo { sidebarinfo.attlist, info.class+ } +# end of sidebarinfo.element +sidebarinfo.attlist &= + common.attrib, sidebarinfo.role.attrib, local.sidebarinfo.attrib +# end of sidebarinfo.attlist + +# end of sidebarinfo.module +local.sidebar.attrib = empty +sidebar.role.attrib = role.attrib +sidebar = + element sidebar { + sidebar.attlist, + sidebarinfo?, + formalobject.title.content?, + sidebar.mix+ + } +# end of sidebar.element +sidebar.attlist &= + common.attrib, sidebar.role.attrib, local.sidebar.attrib +# end of sidebar.attlist + +# end of sidebar.module + +# end of sidebar.content.model + +# ...................................................................... + +# Paragraph-related elements ........................................... +local.abstract.attrib = empty +abstract.role.attrib = role.attrib +abstract = element abstract { abstract.attlist, title?, para.class+ } +# end of abstract.element +abstract.attlist &= + common.attrib, abstract.role.attrib, local.abstract.attrib +# end of abstract.attlist + +# end of abstract.module +local.authorblurb.attrib = empty +authorblurb.role.attrib = role.attrib +authorblurb = + element authorblurb { authorblurb.attlist, title?, para.class+ } +# end of authorblurb.element +authorblurb.attlist &= + common.attrib, authorblurb.role.attrib, local.authorblurb.attrib +# end of authorblurb.attlist + +# end of authorblurb.module +local.personblurb.attrib = empty +personblurb.role.attrib = role.attrib +personblurb = + element personblurb { personblurb.attlist, title?, para.class+ } +# end of personblurb.element +personblurb.attlist &= + common.attrib, personblurb.role.attrib, local.personblurb.attrib +# end of personblurb.attlist + +# end of personblurb.module +local.blockquote.attrib = empty +blockquote.role.attrib = role.attrib +blockquote = + element blockquote { + blockquote.attlist, title?, attribution?, component.mix+ + } +# end of blockquote.element +blockquote.attlist &= + common.attrib, blockquote.role.attrib, local.blockquote.attrib +# end of blockquote.attlist + +# end of blockquote.module +local.attribution.attrib = empty +attribution.role.attrib = role.attrib +attribution = + element attribution { attribution.attlist, para.char.mix* } +# end of attribution.element +attribution.attlist &= + common.attrib, attribution.role.attrib, local.attribution.attrib +# end of attribution.attlist + +# end of attribution.module +local.bridgehead.attrib = empty +bridgehead.role.attrib = role.attrib +bridgehead = element bridgehead { bridgehead.attlist, title.char.mix* } +# end of bridgehead.element + +# Renderas: Indicates the format in which the BridgeHead +# should appear +bridgehead.attlist &= + attribute renderas { + "other" | "sect1" | "sect2" | "sect3" | "sect4" | "sect5" + }?, + common.attrib, + bridgehead.role.attrib, + local.bridgehead.attrib +# end of bridgehead.attlist + +# end of bridgehead.module +local.remark.attrib = empty +remark.role.attrib = role.attrib +remark = element remark { remark.attlist, para.char.mix* } +# end of remark.element +remark.attlist &= common.attrib, remark.role.attrib, local.remark.attrib +# end of remark.attlist + +# end of remark.module +local.epigraph.attrib = empty +epigraph.role.attrib = role.attrib +epigraph = + element epigraph { + epigraph.attlist, attribution?, (para.class | literallayout)+ + } +# end of epigraph.element +epigraph.attlist &= + common.attrib, epigraph.role.attrib, local.epigraph.attrib +# end of epigraph.attlist + +# Attribution (defined above) + +# end of epigraph.module +local.footnote.attrib = empty +footnote.role.attrib = role.attrib +footnote = element footnote { footnote.attlist, footnote.mix+ } +# end of footnote.element +footnote.attlist &= + label.attrib, + common.attrib, + footnote.role.attrib, + local.footnote.attrib +# end of footnote.attlist + +# end of footnote.module +local.highlights.attrib = empty +highlights.role.attrib = role.attrib +highlights = element highlights { highlights.attlist, highlights.mix+ } +# end of highlights.element +highlights.attlist &= + common.attrib, highlights.role.attrib, local.highlights.attrib +# end of highlights.attlist + +# end of highlights.module +local.formalpara.attrib = empty +formalpara.role.attrib = role.attrib +formalpara = + element formalpara { formalpara.attlist, title, ndxterm.class*, para } +# end of formalpara.element +formalpara.attlist &= + common.attrib, formalpara.role.attrib, local.formalpara.attrib +# end of formalpara.attlist + +# end of formalpara.module +local.para.attrib = empty +para.role.attrib = role.attrib +para = element para { para.attlist, (para.char.mix | para.mix)* } +# end of para.element +para.attlist &= common.attrib, para.role.attrib, local.para.attrib +# end of para.attlist + +# end of para.module +local.simpara.attrib = empty +simpara.role.attrib = role.attrib +simpara = element simpara { simpara.attlist, para.char.mix* } +# end of simpara.element +simpara.attlist &= + common.attrib, simpara.role.attrib, local.simpara.attrib +# end of simpara.attlist + +# end of simpara.module +local.admon.attrib = empty +admon.role.attrib = role.attrib +caution = element caution { caution.attlist, title?, admon.mix+ } +# end of caution.element +caution.attlist &= common.attrib, admon.role.attrib, local.admon.attrib +# end of caution.attlist +important = element important { important.attlist, title?, admon.mix+ } +# end of important.element +important.attlist &= + common.attrib, admon.role.attrib, local.admon.attrib +# end of important.attlist +note = element note { note.attlist, title?, admon.mix+ } +# end of note.element +note.attlist &= common.attrib, admon.role.attrib, local.admon.attrib +# end of note.attlist +tip = element tip { tip.attlist, title?, admon.mix+ } +# end of tip.element +tip.attlist &= common.attrib, admon.role.attrib, local.admon.attrib +# end of tip.attlist +warning = element warning { warning.attlist, title?, admon.mix+ } +# end of warning.element +warning.attlist &= common.attrib, admon.role.attrib, local.admon.attrib +# end of warning.attlist + +# end of admon.module + +# ...................................................................... + +# Lists ................................................................ + +# GlossList ........................ +local.glosslist.attrib = empty +glosslist.role.attrib = role.attrib +glosslist = element glosslist { glosslist.attlist, glossentry+ } +# end of glosslist.element +glosslist.attlist &= + common.attrib, glosslist.role.attrib, local.glosslist.attrib +# end of glosslist.attlist + +# end of glosslist.module +local.glossentry.attrib = empty +glossentry.role.attrib = role.attrib +glossentry = + element glossentry { + glossentry.attlist, + glossterm, + acronym?, + abbrev?, + ndxterm.class*, + revhistory?, + (glosssee | glossdef+) + } +# end of glossentry.element + +# SortAs: String by which the GlossEntry is to be sorted +# (alphabetized) in lieu of its proper content +glossentry.attlist &= + attribute sortas { text }?, + common.attrib, + glossentry.role.attrib, + local.glossentry.attrib +# end of glossentry.attlist + +# end of glossentry.module + +# GlossTerm (defined in the Inlines section, below) +local.glossdef.attrib = empty +glossdef.role.attrib = role.attrib +glossdef = + element glossdef { glossdef.attlist, glossdef.mix+, glossseealso* } +# end of glossdef.element + +# Subject: List of subjects; keywords for the definition +glossdef.attlist &= + attribute subject { text }?, + common.attrib, + glossdef.role.attrib, + local.glossdef.attrib +# end of glossdef.attlist + +# end of glossdef.module +local.glosssee.attrib = empty +glosssee.role.attrib = role.attrib +glosssee = element glosssee { glosssee.attlist, para.char.mix* } +# end of glosssee.element + +# OtherTerm: Reference to the GlossEntry whose GlossTerm +# should be displayed at the point of the GlossSee +glosssee.attlist &= + attribute otherterm { xsd:IDREF }?, + common.attrib, + glosssee.role.attrib, + local.glosssee.attrib +# end of glosssee.attlist + +# end of glosssee.module +local.glossseealso.attrib = empty +glossseealso.role.attrib = role.attrib +glossseealso = + element glossseealso { glossseealso.attlist, para.char.mix* } +# end of glossseealso.element + +# OtherTerm: Reference to the GlossEntry whose GlossTerm +# should be displayed at the point of the GlossSeeAlso +glossseealso.attlist &= + attribute otherterm { xsd:IDREF }?, + common.attrib, + glossseealso.role.attrib, + local.glossseealso.attrib +# end of glossseealso.attlist + +# end of glossseealso.module + +# end of glossentry.content.module + +# ItemizedList and OrderedList ..... +local.itemizedlist.attrib = empty +itemizedlist.role.attrib = role.attrib +itemizedlist = + element itemizedlist { + itemizedlist.attlist, + blockinfo?, + formalobject.title.content?, + listpreamble.mix*, + listitem+ + } +# end of itemizedlist.element + +# Spacing: Whether the vertical space in the list should be +# compressed + +# Mark: Keyword, e.g., bullet, dash, checkbox, none; +# list of keywords and defaults are implementation specific +itemizedlist.attlist &= + attribute spacing { "normal" | "compact" }?, + mark.attrib, + common.attrib, + itemizedlist.role.attrib, + local.itemizedlist.attrib +# end of itemizedlist.attlist + +# end of itemizedlist.module +local.orderedlist.attrib = empty +orderedlist.role.attrib = role.attrib +orderedlist = + element orderedlist { + orderedlist.attlist, + blockinfo?, + formalobject.title.content?, + listpreamble.mix*, + listitem+ + } +# end of orderedlist.element + +# Numeration: Style of ListItem numbered; default is expected +# to be Arabic + +# InheritNum: Specifies for a nested list that the numbering +# of ListItems should include the number of the item +# within which they are nested (e.g., 1a and 1b within 1, +# rather than a and b) + +# Continuation: Where list numbering begins afresh (Restarts, +# the default) or continues that of the immediately preceding +# list (Continues) + +# Spacing: Whether the vertical space in the list should be +# compressed +orderedlist.attlist &= + attribute numeration { + "arabic" | "upperalpha" | "loweralpha" | "upperroman" | "lowerroman" + }?, + [ a:defaultValue = "ignore" ] + attribute inheritnum { "inherit" | "ignore" }?, + [ a:defaultValue = "restarts" ] + attribute continuation { "continues" | "restarts" }?, + attribute spacing { "normal" | "compact" }?, + common.attrib, + orderedlist.role.attrib, + local.orderedlist.attrib +# end of orderedlist.attlist + +# end of orderedlist.module +local.listitem.attrib = empty +listitem.role.attrib = role.attrib +listitem = element listitem { listitem.attlist, component.mix+ } +# end of listitem.element + +# Override: Indicates the mark to be used for this ListItem +# instead of the default mark or the mark specified by +# the Mark attribute on the enclosing ItemizedList +listitem.attlist &= + attribute override { text }?, + common.attrib, + listitem.role.attrib, + local.listitem.attrib +# end of listitem.attlist + +# end of listitem.module + +# SegmentedList .................... +local.segmentedlist.attrib = empty +segmentedlist.role.attrib = role.attrib +segmentedlist = + element segmentedlist { + segmentedlist.attlist, + formalobject.title.content?, + segtitle+, + seglistitem+ + } +# end of segmentedlist.element +segmentedlist.attlist &= + common.attrib, segmentedlist.role.attrib, local.segmentedlist.attrib +# end of segmentedlist.attlist + +# end of segmentedlist.module +local.segtitle.attrib = empty +segtitle.role.attrib = role.attrib +segtitle = element segtitle { segtitle.attlist, title.char.mix* } +# end of segtitle.element +segtitle.attlist &= + common.attrib, segtitle.role.attrib, local.segtitle.attrib +# end of segtitle.attlist + +# end of segtitle.module +local.seglistitem.attrib = empty +seglistitem.role.attrib = role.attrib +seglistitem = element seglistitem { seglistitem.attlist, seg+ } +# end of seglistitem.element +seglistitem.attlist &= + common.attrib, seglistitem.role.attrib, local.seglistitem.attrib +# end of seglistitem.attlist + +# end of seglistitem.module +local.seg.attrib = empty +seg.role.attrib = role.attrib +seg = element seg { seg.attlist, para.char.mix* } +# end of seg.element +seg.attlist &= common.attrib, seg.role.attrib, local.seg.attrib +# end of seg.attlist + +# end of seg.module + +# end of segmentedlist.content.module + +# SimpleList ....................... +local.simplelist.attrib = empty +simplelist.role.attrib = role.attrib +simplelist = element simplelist { simplelist.attlist, member+ } +# end of simplelist.element + +# Columns: The number of columns the array should contain + +# Type: How the Members of the SimpleList should be +# formatted: Inline (members separated with commas etc. +# inline), Vert (top to bottom in n Columns), or Horiz (in +# the direction of text flow) in n Columns. If Column +# is 1 or implied, Type=Vert and Type=Horiz give the same +# results. +simplelist.attlist &= + attribute columns { text }?, + [ a:defaultValue = "vert" ] + attribute type { "inline" | "vert" | "horiz" }?, + common.attrib, + simplelist.role.attrib, + local.simplelist.attrib +# end of simplelist.attlist + +# end of simplelist.module +local.member.attrib = empty +member.role.attrib = role.attrib +member = element member { member.attlist, para.char.mix* } +# end of member.element +member.attlist &= common.attrib, member.role.attrib, local.member.attrib +# end of member.attlist + +# end of member.module + +# end of simplelist.content.module + +# VariableList ..................... +local.variablelist.attrib = empty +variablelist.role.attrib = role.attrib +variablelist = + element variablelist { + variablelist.attlist, + blockinfo?, + formalobject.title.content?, + listpreamble.mix*, + varlistentry+ + } +# end of variablelist.element + +# TermLength: Length beyond which the presentation engine +# may consider the Term too long and select an alternate +# presentation of the Term and, or, its associated ListItem. +variablelist.attlist &= + attribute termlength { text }?, + common.attrib, + variablelist.role.attrib, + local.variablelist.attrib +# end of variablelist.attlist + +# end of variablelist.module +local.varlistentry.attrib = empty +varlistentry.role.attrib = role.attrib +varlistentry = + element varlistentry { varlistentry.attlist, term+, listitem } +# end of varlistentry.element +varlistentry.attlist &= + common.attrib, varlistentry.role.attrib, local.varlistentry.attrib +# end of varlistentry.attlist + +# end of varlistentry.module +local.term.attrib = empty +term.role.attrib = role.attrib +term = element term { term.attlist, para.char.mix* } +# end of term.element +term.attlist &= common.attrib, term.role.attrib, local.term.attrib +# end of term.attlist + +# end of term.module + +# ListItem (defined above) + +# end of variablelist.content.module + +# CalloutList ...................... +local.calloutlist.attrib = empty +calloutlist.role.attrib = role.attrib +calloutlist = + element calloutlist { + calloutlist.attlist, formalobject.title.content?, callout+ + } +# end of calloutlist.element +calloutlist.attlist &= + common.attrib, calloutlist.role.attrib, local.calloutlist.attrib +# end of calloutlist.attlist + +# end of calloutlist.module +local.callout.attrib = empty +callout.role.attrib = role.attrib +callout = element callout { callout.attlist, component.mix+ } +# end of callout.element + +# AreaRefs: IDs of one or more Areas or AreaSets described +# by this Callout +callout.attlist &= + attribute arearefs { xsd:IDREFS }, + common.attrib, + callout.role.attrib, + local.callout.attrib +# end of callout.attlist + +# end of callout.module + +# end of calloutlist.content.module + +# ...................................................................... + +# Objects .............................................................. + +# Examples etc. .................... +local.example.attrib = empty +example.role.attrib = role.attrib +example = + element example { + example.attlist, + blockinfo?, + formalobject.title.content, + example.mix+ + } +# end of example.element +example.attlist &= + label.attrib, + width.attrib, + common.attrib, + example.role.attrib, + local.example.attrib +# end of example.attlist + +# end of example.module +local.informalexample.attrib = empty +informalexample.role.attrib = role.attrib +informalexample = + element informalexample { + informalexample.attlist, blockinfo?, example.mix+ + } +# end of informalexample.element +informalexample.attlist &= + width.attrib, + common.attrib, + informalexample.role.attrib, + local.informalexample.attrib +# end of informalexample.attlist + +# end of informalexample.module +local.programlistingco.attrib = empty +programlistingco.role.attrib = role.attrib +programlistingco = + element programlistingco { + programlistingco.attlist, areaspec, programlisting, calloutlist* + } +# end of programlistingco.element +programlistingco.attlist &= + common.attrib, + programlistingco.role.attrib, + local.programlistingco.attrib +# end of programlistingco.attlist + +# CalloutList (defined above in Lists) + +# end of informalexample.module +local.areaspec.attrib = empty +areaspec.role.attrib = role.attrib +areaspec = element areaspec { areaspec.attlist, (area | areaset)+ } +# end of areaspec.element + +# Units: global unit of measure in which coordinates in +# this spec are expressed: +# +# - CALSPair "x1,y1 x2,y2": lower-left and upper-right +# coordinates in a rectangle describing repro area in which +# graphic is placed, where X and Y dimensions are each some +# number 0..10000 (taken from CALS graphic attributes) +# +# - LineColumn "line column": line number and column number +# at which to start callout text in "linespecific" content +# +# - LineRange "startline endline": whole lines from startline +# to endline in "linespecific" content +# +# - LineColumnPair "line1 col1 line2 col2": starting and ending +# points of area in "linespecific" content that starts at +# first position and ends at second position (including the +# beginnings of any intervening lines) +# +# - Other: directive to look at value of OtherUnits attribute +# to get implementation-specific keyword +# +# The default is implementation-specific; usually dependent on +# the parent element (GraphicCO gets CALSPair, ProgramListingCO +# and ScreenCO get LineColumn) + +# OtherUnits: User-defined units +areaspec.attlist &= + attribute units { + "calspair" | "linecolumn" | "linerange" | "linecolumnpair" | "other" + }?, + attribute otherunits { xsd:NMTOKEN }?, + common.attrib, + areaspec.role.attrib, + local.areaspec.attrib +# end of areaspec.attlist + +# end of areaspec.module +local.area.attrib = empty +area.role.attrib = role.attrib +area = element area { area.attlist, empty } +# end of area.element + +# bug number/symbol override or initialization + +# to any related information + +# Units: unit of measure in which coordinates in this +# area are expressed; inherits from AreaSet and AreaSpec + +# OtherUnits: User-defined units +area.attlist &= + label.attrib, + linkends.attrib, + attribute units { + "calspair" | "linecolumn" | "linerange" | "linecolumnpair" | "other" + }?, + attribute otherunits { xsd:NMTOKEN }?, + attribute coords { text }, + idreq.common.attrib, + area.role.attrib, + local.area.attrib +# end of area.attlist + +# end of area.module +local.areaset.attrib = empty +areaset.role.attrib = role.attrib +areaset = element areaset { areaset.attlist, area+ } +# end of areaset.element + +# bug number/symbol override or initialization + +# Units: unit of measure in which coordinates in this +# area are expressed; inherits from AreaSpec +areaset.attlist &= + label.attrib, + attribute units { + "calspair" | "linecolumn" | "linerange" | "linecolumnpair" | "other" + }?, + attribute otherunits { xsd:NMTOKEN }?, + attribute coords { text }, + idreq.common.attrib, + areaset.role.attrib, + local.areaset.attrib +# end of areaset.attlist + +# end of areaset.module + +# end of areaspec.content.module +local.programlisting.attrib = empty +programlisting.role.attrib = role.attrib +programlisting = + element programlisting { + programlisting.attlist, + (para.char.mix | co | coref | lineannotation | textobject)* + } +# end of programlisting.element +programlisting.attlist &= + width.attrib, + linespecific.attrib, + common.attrib, + programlisting.role.attrib, + local.programlisting.attrib +# end of programlisting.attlist + +# end of programlisting.module +local.literallayout.attrib = empty +literallayout.role.attrib = role.attrib +literallayout = + element literallayout { + literallayout.attlist, + (para.char.mix | co | coref | textobject | lineannotation)* + } +# end of literallayout.element +literallayout.attlist &= + width.attrib, + linespecific.attrib, + [ a:defaultValue = "normal" ] + attribute class { "monospaced" | "normal" }?, + common.attrib, + literallayout.role.attrib, + local.literallayout.attrib +# end of literallayout.attlist + +# LineAnnotation (defined in the Inlines section, below) + +# end of literallayout.module +local.screenco.attrib = empty +screenco.role.attrib = role.attrib +screenco = + element screenco { screenco.attlist, areaspec, screen, calloutlist* } +# end of screenco.element +screenco.attlist &= + common.attrib, screenco.role.attrib, local.screenco.attrib +# end of screenco.attlist + +# AreaSpec (defined above) + +# CalloutList (defined above in Lists) + +# end of screenco.module +local.screen.attrib = empty +screen.role.attrib = role.attrib +screen = + element screen { + screen.attlist, + (para.char.mix | co | coref | textobject | lineannotation)* + } +# end of screen.element +screen.attlist &= + width.attrib, + linespecific.attrib, + common.attrib, + screen.role.attrib, + local.screen.attrib +# end of screen.attlist + +# end of screen.module +local.screenshot.attrib = empty +screenshot.role.attrib = role.attrib +screenshot = + element screenshot { + screenshot.attlist, + screeninfo?, + (graphic | graphicco | mediaobject | mediaobjectco) + } +# end of screenshot.element +screenshot.attlist &= + common.attrib, screenshot.role.attrib, local.screenshot.attrib +# end of screenshot.attlist + +# end of screenshot.module +local.screeninfo.attrib = empty +screeninfo.role.attrib = role.attrib +screeninfo = element screeninfo { screeninfo.attlist, para.char.mix* } +# end of screeninfo.element +screeninfo.attlist &= + common.attrib, screeninfo.role.attrib, local.screeninfo.attrib +# end of screeninfo.attlist + +# end of screeninfo.module + +# end of screenshot.content.module + +# Figures etc. ..................... +local.figure.attrib = empty +figure.role.attrib = role.attrib +figure = + element figure { + figure.attlist, + blockinfo?, + formalobject.title.content, + (figure.mix | link.char.class)+ + } +# end of figure.element + +# Float: Whether the Figure is supposed to be rendered +# where convenient (yes (1) value) or at the place it occurs +# in the text (no (0) value, the default) +figure.attlist &= + [ a:defaultValue = "0" ] attribute float { yesorno.attvals }?, + attribute pgwide { yesorno.attvals }?, + label.attrib, + common.attrib, + figure.role.attrib, + local.figure.attrib +# end of figure.attlist + +# end of figure.module +local.informalfigure.attrib = empty +informalfigure.role.attrib = role.attrib +informalfigure = + element informalfigure { + informalfigure.attlist, blockinfo?, (figure.mix | link.char.class)+ + } +# end of informalfigure.element + +# Float: Whether the Figure is supposed to be rendered +# where convenient (yes (1) value) or at the place it occurs +# in the text (no (0) value, the default) +informalfigure.attlist &= + [ a:defaultValue = "0" ] attribute float { yesorno.attvals }?, + attribute pgwide { yesorno.attvals }?, + label.attrib, + common.attrib, + informalfigure.role.attrib, + local.informalfigure.attrib +# end of informalfigure.attlist + +# end of informalfigure.module +local.graphicco.attrib = empty +graphicco.role.attrib = role.attrib +graphicco = + element graphicco { + graphicco.attlist, areaspec, graphic, calloutlist* + } +# end of graphicco.element +graphicco.attlist &= + common.attrib, graphicco.role.attrib, local.graphicco.attrib +# end of graphicco.attlist + +# AreaSpec (defined above in Examples) + +# CalloutList (defined above in Lists) + +# end of graphicco.module + +# Graphical data can be the content of Graphic, or you can reference +# an external file either as an entity (Entitref) or a filename +# (Fileref). +local.graphic.attrib = empty +graphic.role.attrib = role.attrib +graphic = element graphic { graphic.attlist, empty } +# end of graphic.element +graphic.attlist &= + graphics.attrib, + common.attrib, + graphic.role.attrib, + local.graphic.attrib +# end of graphic.attlist + +# end of graphic.module +local.inlinegraphic.attrib = empty +inlinegraphic.role.attrib = role.attrib +inlinegraphic = element inlinegraphic { inlinegraphic.attlist, empty } +# end of inlinegraphic.element +inlinegraphic.attlist &= + graphics.attrib, + common.attrib, + inlinegraphic.role.attrib, + local.inlinegraphic.attrib +# end of inlinegraphic.attlist + +# end of inlinegraphic.module +local.mediaobject.attrib = empty +mediaobject.role.attrib = role.attrib +mediaobject = + element mediaobject { + mediaobject.attlist, objectinfo?, mediaobject.mix+, caption? + } +# end of mediaobject.element +mediaobject.attlist &= + common.attrib, mediaobject.role.attrib, local.mediaobject.attrib +# end of mediaobject.attlist + +# end of mediaobject.module +local.inlinemediaobject.attrib = empty +inlinemediaobject.role.attrib = role.attrib +inlinemediaobject = + element inlinemediaobject { + inlinemediaobject.attlist, objectinfo?, mediaobject.mix+ + } +# end of inlinemediaobject.element +inlinemediaobject.attlist &= + common.attrib, + inlinemediaobject.role.attrib, + local.inlinemediaobject.attrib +# end of inlinemediaobject.attlist + +# end of inlinemediaobject.module +local.videoobject.attrib = empty +videoobject.role.attrib = role.attrib +videoobject = + element videoobject { videoobject.attlist, objectinfo?, videodata } +# end of videoobject.element +videoobject.attlist &= + common.attrib, videoobject.role.attrib, local.videoobject.attrib +# end of videoobject.attlist + +# end of videoobject.module +local.audioobject.attrib = empty +audioobject.role.attrib = role.attrib +audioobject = + element audioobject { audioobject.attlist, objectinfo?, audiodata } +# end of audioobject.element +audioobject.attlist &= + common.attrib, audioobject.role.attrib, local.audioobject.attrib +# end of audioobject.attlist + +# end of audioobject.module +local.imageobject.attrib = empty +imageobject.role.attrib = role.attrib +imageobject = + element imageobject { imageobject.attlist, objectinfo?, imagedata } +# end of imageobject.element +imageobject.attlist &= + common.attrib, imageobject.role.attrib, local.imageobject.attrib +# end of imageobject.attlist + +# end of imageobject.module +local.textobject.attrib = empty +textobject.role.attrib = role.attrib +textobject = + element textobject { + textobject.attlist, + objectinfo?, + (phrase | textdata | textobject.mix+) + } +# end of textobject.element +textobject.attlist &= + common.attrib, textobject.role.attrib, local.textobject.attrib +# end of textobject.attlist + +# end of textobject.module +local.objectinfo.attrib = empty +objectinfo.role.attrib = role.attrib +objectinfo = element objectinfo { objectinfo.attlist, info.class+ } +# end of objectinfo.element +objectinfo.attlist &= + common.attrib, objectinfo.role.attrib, local.objectinfo.attrib +# end of objectinfo.attlist + +# end of objectinfo.module + +# EntityRef: Name of an external entity containing the content +# of the object data + +# FileRef: Filename, qualified by a pathname if desired, +# designating the file containing the content of the object data + +# Format: Notation of the element content, if any + +# SrcCredit: Information about the source of the image +local.objectdata.attrib = empty +objectdata.attrib = + attribute entityref { xsd:ENTITY }?, + attribute fileref { text }?, + attribute format { notation.class }?, + attribute srccredit { text }?, + local.objectdata.attrib +local.videodata.attrib = empty +videodata.role.attrib = role.attrib +videodata = element videodata { videodata.attlist, empty } +# end of videodata.element + +# Width: Same as CALS reprowid (desired width) + +# Depth: Same as CALS reprodep (desired depth) + +# Align: Same as CALS hplace with 'none' removed; #IMPLIED means +# application-specific + +# Scale: Conflation of CALS hscale and vscale + +# Scalefit: Same as CALS scalefit +videodata.attlist &= + attribute width { text }?, + attribute contentwidth { text }?, + attribute depth { text }?, + attribute contentdepth { text }?, + attribute align { "left" | "right" | "center" }?, + attribute valign { "top" | "middle" | "bottom" }?, + attribute scale { text }?, + attribute scalefit { yesorno.attvals }?, + objectdata.attrib, + common.attrib, + videodata.role.attrib, + local.videodata.attrib +# end of videodata.attlist + +# end of videodata.module +local.audiodata.attrib = empty +audiodata.role.attrib = role.attrib +audiodata = element audiodata { audiodata.attlist, empty } +# end of audiodata.element +audiodata.attlist &= + objectdata.attrib, + common.attrib, + audiodata.role.attrib, + local.audiodata.attrib +# end of audiodata.attlist + +# end of audiodata.module +local.imagedata.attrib = empty +imagedata.role.attrib = role.attrib +imagedata = element imagedata { imagedata.attlist, empty } +# end of imagedata.element + +# Width: Same as CALS reprowid (desired width) + +# Depth: Same as CALS reprodep (desired depth) + +# Align: Same as CALS hplace with 'none' removed; #IMPLIED means +# application-specific + +# Scale: Conflation of CALS hscale and vscale + +# Scalefit: Same as CALS scalefit +imagedata.attlist &= + attribute width { text }?, + attribute contentwidth { text }?, + attribute depth { text }?, + attribute contentdepth { text }?, + attribute align { "left" | "right" | "center" }?, + attribute valign { "top" | "middle" | "bottom" }?, + attribute scale { text }?, + attribute scalefit { yesorno.attvals }?, + objectdata.attrib, + common.attrib, + imagedata.role.attrib, + local.imagedata.attrib +# end of imagedata.attlist + +# end of imagedata.module +local.textdata.attrib = empty +textdata.role.attrib = role.attrib +textdata = element textdata { textdata.attlist, empty } +# end of textdata.element +textdata.attlist &= + attribute encoding { text }?, + objectdata.attrib, + common.attrib, + textdata.role.attrib, + local.textdata.attrib +# end of textdata.attlist + +# end of textdata.module +local.caption.attrib = empty +caption.role.attrib = role.attrib +caption = element caption { caption.attlist, textobject.mix* } +# end of caption.element +caption.attlist &= + common.attrib, caption.role.attrib, local.caption.attrib +# end of caption.attlist + +# end of caption.module +local.mediaobjectco.attrib = empty +mediaobjectco.role.attrib = role.attrib +mediaobjectco = + element mediaobjectco { + mediaobjectco.attlist, + objectinfo?, + imageobjectco, + (imageobjectco | textobject)* + } +# end of mediaobjectco.element +mediaobjectco.attlist &= + common.attrib, mediaobjectco.role.attrib, local.mediaobjectco.attrib +# end of mediaobjectco.attlist + +# end of mediaobjectco.module +local.imageobjectco.attrib = empty +imageobjectco.role.attrib = role.attrib +imageobjectco = + element imageobjectco { + imageobjectco.attlist, areaspec, imageobject, calloutlist* + } +# end of imageobjectco.element +imageobjectco.attlist &= + common.attrib, imageobjectco.role.attrib, local.imageobjectco.attrib +# end of imageobjectco.attlist + +# end of imageobjectco.module + +# end of mediaobject.content.module + +# Equations ........................ + +# This PE provides a mechanism for replacing equation content, + +# perhaps adding a new or different model (e.g., MathML) +equation.content = alt?, (graphic+ | mediaobject+) +inlineequation.content = alt?, (graphic+ | inlinemediaobject+) +local.equation.attrib = empty +equation.role.attrib = role.attrib +equation = + element equation { + equation.attlist, + blockinfo?, + formalobject.title.content?, + (informalequation | equation.content) + } +# end of equation.element +equation.attlist &= + label.attrib, + common.attrib, + equation.role.attrib, + local.equation.attrib +# end of equation.attlist + +# end of equation.module +local.informalequation.attrib = empty +informalequation.role.attrib = role.attrib +informalequation = + element informalequation { + informalequation.attlist, blockinfo?, equation.content + } +# end of informalequation.element +informalequation.attlist &= + common.attrib, + informalequation.role.attrib, + local.informalequation.attrib +# end of informalequation.attlist + +# end of informalequation.module +local.inlineequation.attrib = empty +inlineequation.role.attrib = role.attrib +inlineequation = + element inlineequation { + inlineequation.attlist, inlineequation.content + } +# end of inlineequation.element +inlineequation.attlist &= + common.attrib, inlineequation.role.attrib, local.inlineequation.attrib +# end of inlineequation.attlist + +# end of inlineequation.module +local.alt.attrib = empty +alt.role.attrib = role.attrib +alt = element alt { alt.attlist, text } +# end of alt.element +alt.attlist &= common.attrib, alt.role.attrib, local.alt.attrib +# end of alt.attlist + +# end of alt.module + +# Tables ........................... + +tables.role.attrib = role.attrib + +# Note that InformalTable is dependent on some of the entity +# declarations that customize Table. +local.informaltable.attrib = empty +informaltable = + element informaltable { + informaltable.attlist, + blockinfo?, + textobject*, + (graphic+ | mediaobject+ | tgroup+) + } +# end of informaltable.element + +# Frame, Colsep, and Rowsep must be repeated because +# they are not in entities in the table module. + +# includes TabStyle, ToCentry, ShortEntry, +# Orient, PgWide + +# includes Label + +# includes common attributes +informaltable.attlist &= + attribute frame { + "top" | "bottom" | "topbot" | "all" | "sides" | "none" + }?, + attribute colsep { yesorno.attvals }?, + attribute rowsep { yesorno.attvals }?, + common.table.attribs, + tbl.table.att, + local.informaltable.attrib +# end of informaltable.attlist + +# end of informaltable.module + +# ...................................................................... + +# Synopses ............................................................. + +# Synopsis ......................... +local.synopsis.attrib = empty +synopsis.role.attrib = role.attrib +synopsis = + element synopsis { + synopsis.attlist, + (para.char.mix + | graphic + | mediaobject + | co + | coref + | textobject + | lineannotation)* + } +# end of synopsis.element +synopsis.attlist &= + label.attrib, + linespecific.attrib, + common.attrib, + synopsis.role.attrib, + local.synopsis.attrib +# end of synopsis.attlist + +# LineAnnotation (defined in the Inlines section, below) + +# end of synopsis.module + +# CmdSynopsis ...................... +local.cmdsynopsis.attrib = empty +cmdsynopsis.role.attrib = role.attrib +cmdsynopsis = + element cmdsynopsis { + cmdsynopsis.attlist, (command | arg | group | sbr)+, synopfragment* + } +# end of cmdsynopsis.element + +# Sepchar: Character that should separate command and all +# top-level arguments; alternate value might be e.g., Δ +cmdsynopsis.attlist &= + label.attrib, + [ a:defaultValue = " " ] attribute sepchar { text }?, + attribute cmdlength { text }?, + common.attrib, + cmdsynopsis.role.attrib, + local.cmdsynopsis.attrib +# end of cmdsynopsis.attlist + +# end of cmdsynopsis.module +local.arg.attrib = empty +arg.role.attrib = role.attrib +arg = + element arg { + arg.attlist, + (text + | arg + | group + | option + | synopfragmentref + | replaceable + | sbr)* + } +# end of arg.element + +# Choice: Whether Arg must be supplied: Opt (optional to +# supply, e.g. [arg]; the default), Req (required to supply, +# e.g. {arg}), or Plain (required to supply, e.g. arg) + +# Rep: whether Arg is repeatable: Norepeat (e.g. arg without +# ellipsis; the default), or Repeat (e.g. arg...) +arg.attlist &= + [ a:defaultValue = "opt" ] + attribute choice { "opt" | "req" | "plain" }?, + [ a:defaultValue = "norepeat" ] + attribute rep { "norepeat" | "repeat" }?, + common.attrib, + arg.role.attrib, + local.arg.attrib +# end of arg.attlist + +# end of arg.module +local.group.attrib = empty +group.role.attrib = role.attrib +group = + element group { + group.attlist, + (arg | group | option | synopfragmentref | replaceable | sbr)+ + } +# end of group.element + +# Choice: Whether Group must be supplied: Opt (optional to +# supply, e.g. [g1|g2|g3]; the default), Req (required to +# supply, e.g. {g1|g2|g3}), Plain (required to supply, +# e.g. g1|g2|g3), OptMult (can supply zero or more, e.g. +# [[g1|g2|g3]]), or ReqMult (must supply one or more, e.g. +# {{g1|g2|g3}}) + +# Rep: whether Group is repeatable: Norepeat (e.g. group +# without ellipsis; the default), or Repeat (e.g. group...) +group.attlist &= + [ a:defaultValue = "opt" ] + attribute choice { "opt" | "req" | "plain" }?, + [ a:defaultValue = "norepeat" ] + attribute rep { "norepeat" | "repeat" }?, + common.attrib, + group.role.attrib, + local.group.attrib +# end of group.attlist + +# end of group.module +local.sbr.attrib = empty +# Synopsis break +sbr.role.attrib = role.attrib +sbr = element sbr { sbr.attlist, empty } +# end of sbr.element +sbr.attlist &= common.attrib, sbr.role.attrib, local.sbr.attrib +# end of sbr.attlist + +# end of sbr.module +local.synopfragmentref.attrib = empty +synopfragmentref.role.attrib = role.attrib +synopfragmentref = + element synopfragmentref { synopfragmentref.attlist, text } +# end of synopfragmentref.element + +# to SynopFragment of complex synopsis +# material for separate referencing +synopfragmentref.attlist &= + linkendreq.attrib, + common.attrib, + synopfragmentref.role.attrib, + local.synopfragmentref.attrib +# end of synopfragmentref.attlist + +# end of synopfragmentref.module +local.synopfragment.attrib = empty +synopfragment.role.attrib = role.attrib +synopfragment = + element synopfragment { synopfragment.attlist, (arg | group)+ } +# end of synopfragment.element +synopfragment.attlist &= + idreq.common.attrib, + synopfragment.role.attrib, + local.synopfragment.attrib +# end of synopfragment.attlist + +# end of synopfragment.module + +# Command (defined in the Inlines section, below) + +# Option (defined in the Inlines section, below) + +# Replaceable (defined in the Inlines section, below) + +# end of cmdsynopsis.content.module + +# FuncSynopsis ..................... +local.funcsynopsis.attrib = empty +funcsynopsis.role.attrib = role.attrib +funcsynopsis = + element funcsynopsis { + funcsynopsis.attlist, (funcsynopsisinfo | funcprototype)+ + } +# end of funcsynopsis.element +funcsynopsis.attlist &= + label.attrib, + common.attrib, + funcsynopsis.role.attrib, + local.funcsynopsis.attrib +# end of funcsynopsis.attlist + +# end of funcsynopsis.module +local.funcsynopsisinfo.attrib = empty +funcsynopsisinfo.role.attrib = role.attrib +funcsynopsisinfo = + element funcsynopsisinfo { + funcsynopsisinfo.attlist, + (cptr.char.mix | textobject | lineannotation)* + } +# end of funcsynopsisinfo.element +funcsynopsisinfo.attlist &= + linespecific.attrib, + common.attrib, + funcsynopsisinfo.role.attrib, + local.funcsynopsisinfo.attrib +# end of funcsynopsisinfo.attlist + +# end of funcsynopsisinfo.module +local.funcprototype.attrib = empty +funcprototype.role.attrib = role.attrib +funcprototype = + element funcprototype { + funcprototype.attlist, funcdef, (void | varargs | paramdef+) + } +# end of funcprototype.element +funcprototype.attlist &= + common.attrib, funcprototype.role.attrib, local.funcprototype.attrib +# end of funcprototype.attlist + +# end of funcprototype.module +local.funcdef.attrib = empty +funcdef.role.attrib = role.attrib +funcdef = + element funcdef { + funcdef.attlist, (text | type | replaceable | function)* + } +# end of funcdef.element +funcdef.attlist &= + common.attrib, funcdef.role.attrib, local.funcdef.attrib +# end of funcdef.attlist + +# end of funcdef.module +local.void.attrib = empty +void.role.attrib = role.attrib +void = element void { void.attlist, empty } +# end of void.element +void.attlist &= common.attrib, void.role.attrib, local.void.attrib +# end of void.attlist + +# end of void.module +local.varargs.attrib = empty +varargs.role.attrib = role.attrib +varargs = element varargs { varargs.attlist, empty } +# end of varargs.element +varargs.attlist &= + common.attrib, varargs.role.attrib, local.varargs.attrib +# end of varargs.attlist + +# end of varargs.module + +# Processing assumes that only one Parameter will appear in a +# ParamDef, and that FuncParams will be used at most once, for +# providing information on the "inner parameters" for parameters that +# are pointers to functions. +local.paramdef.attrib = empty +paramdef.role.attrib = role.attrib +paramdef = + element paramdef { + paramdef.attlist, + (text | type | replaceable | parameter | funcparams)* + } +# end of paramdef.element +paramdef.attlist &= + common.attrib, paramdef.role.attrib, local.paramdef.attrib +# end of paramdef.attlist + +# end of paramdef.module +local.funcparams.attrib = empty +funcparams.role.attrib = role.attrib +funcparams = element funcparams { funcparams.attlist, cptr.char.mix* } +# end of funcparams.element +funcparams.attlist &= + common.attrib, funcparams.role.attrib, local.funcparams.attrib +# end of funcparams.attlist + +# end of funcparams.module + +# LineAnnotation (defined in the Inlines section, below) + +# Replaceable (defined in the Inlines section, below) + +# Function (defined in the Inlines section, below) + +# Parameter (defined in the Inlines section, below) + +# end of funcsynopsis.content.module + +# ClassSynopsis ..................... +local.classsynopsis.attrib = empty +classsynopsis.role.attrib = role.attrib +classsynopsis = + element classsynopsis { + classsynopsis.attlist, + (ooclass | oointerface | ooexception)+, + (classsynopsisinfo | fieldsynopsis | method.synop.class)* + } +# end of classsynopsis.element +classsynopsis.attlist &= + attribute language { text }?, + [ a:defaultValue = "class" ] + attribute class { "class" | "interface" }?, + common.attrib, + classsynopsis.role.attrib, + local.classsynopsis.attrib +# end of classsynopsis.attlist + +# end of classsynopsis.module +local.classsynopsisinfo.attrib = empty +classsynopsisinfo.role.attrib = role.attrib +classsynopsisinfo = + element classsynopsisinfo { + classsynopsisinfo.attlist, + (cptr.char.mix | textobject | lineannotation)* + } +# end of classsynopsisinfo.element +classsynopsisinfo.attlist &= + linespecific.attrib, + common.attrib, + classsynopsisinfo.role.attrib, + local.classsynopsisinfo.attrib +# end of classsynopsisinfo.attlist + +# end of classsynopsisinfo.module +local.ooclass.attrib = empty +ooclass.role.attrib = role.attrib +ooclass = element ooclass { ooclass.attlist, modifier*, classname } +# end of ooclass.element +ooclass.attlist &= + common.attrib, ooclass.role.attrib, local.ooclass.attrib +# end of ooclass.attlist + +# end of ooclass.module +local.oointerface.attrib = empty +oointerface.role.attrib = role.attrib +oointerface = + element oointerface { oointerface.attlist, modifier*, interfacename } +# end of oointerface.element +oointerface.attlist &= + common.attrib, oointerface.role.attrib, local.oointerface.attrib +# end of oointerface.attlist + +# end of oointerface.module +local.ooexception.attrib = empty +ooexception.role.attrib = role.attrib +ooexception = + element ooexception { ooexception.attlist, modifier*, exceptionname } +# end of ooexception.element +ooexception.attlist &= + common.attrib, ooexception.role.attrib, local.ooexception.attrib +# end of ooexception.attlist + +# end of ooexception.module +local.modifier.attrib = empty +modifier.role.attrib = role.attrib +modifier = element modifier { modifier.attlist, smallcptr.char.mix* } +# end of modifier.element +modifier.attlist &= + common.attrib, modifier.role.attrib, local.modifier.attrib +# end of modifier.attlist + +# end of modifier.module +local.interfacename.attrib = empty +interfacename.role.attrib = role.attrib +interfacename = + element interfacename { interfacename.attlist, cptr.char.mix* } +# end of interfacename.element +interfacename.attlist &= + common.attrib, interfacename.role.attrib, local.interfacename.attrib +# end of interfacename.attlist + +# end of interfacename.module +local.exceptionname.attrib = empty +exceptionname.role.attrib = role.attrib +exceptionname = + element exceptionname { exceptionname.attlist, smallcptr.char.mix* } +# end of exceptionname.element +exceptionname.attlist &= + common.attrib, exceptionname.role.attrib, local.exceptionname.attrib +# end of exceptionname.attlist + +# end of exceptionname.module +local.fieldsynopsis.attrib = empty +fieldsynopsis.role.attrib = role.attrib +fieldsynopsis = + element fieldsynopsis { + fieldsynopsis.attlist, modifier*, type?, varname, initializer? + } +# end of fieldsynopsis.element +fieldsynopsis.attlist &= + attribute language { text }?, + common.attrib, + fieldsynopsis.role.attrib, + local.fieldsynopsis.attrib +# end of fieldsynopsis.attlist + +# end of fieldsynopsis.module +local.initializer.attrib = empty +initializer.role.attrib = role.attrib +initializer = + element initializer { initializer.attlist, smallcptr.char.mix* } +# end of initializer.element +initializer.attlist &= + common.attrib, initializer.role.attrib, local.initializer.attrib +# end of initializer.attlist + +# end of initializer.module +local.constructorsynopsis.attrib = empty +constructorsynopsis.role.attrib = role.attrib +constructorsynopsis = + element constructorsynopsis { + constructorsynopsis.attlist, + modifier*, + methodname?, + (methodparam+ | void), + exceptionname* + } +# end of constructorsynopsis.element +constructorsynopsis.attlist &= + attribute language { text }?, + common.attrib, + constructorsynopsis.role.attrib, + local.constructorsynopsis.attrib +# end of constructorsynopsis.attlist + +# end of constructorsynopsis.module +local.destructorsynopsis.attrib = empty +destructorsynopsis.role.attrib = role.attrib +destructorsynopsis = + element destructorsynopsis { + destructorsynopsis.attlist, + modifier*, + methodname?, + (methodparam+ | void), + exceptionname* + } +# end of destructorsynopsis.element +destructorsynopsis.attlist &= + attribute language { text }?, + common.attrib, + destructorsynopsis.role.attrib, + local.destructorsynopsis.attrib +# end of destructorsynopsis.attlist + +# end of destructorsynopsis.module +local.methodsynopsis.attrib = empty +methodsynopsis.role.attrib = role.attrib +methodsynopsis = + element methodsynopsis { + methodsynopsis.attlist, + modifier*, + (type | void)?, + methodname, + (methodparam+ | void), + exceptionname*, + modifier* + } +# end of methodsynopsis.element +methodsynopsis.attlist &= + attribute language { text }?, + common.attrib, + methodsynopsis.role.attrib, + local.methodsynopsis.attrib +# end of methodsynopsis.attlist + +# end of methodsynopsis.module +local.methodname.attrib = empty +methodname.role.attrib = role.attrib +methodname = + element methodname { methodname.attlist, smallcptr.char.mix* } +# end of methodname.element +methodname.attlist &= + common.attrib, methodname.role.attrib, local.methodname.attrib +# end of methodname.attlist + +# end of methodname.module +local.methodparam.attrib = empty +methodparam.role.attrib = role.attrib +methodparam = + element methodparam { + methodparam.attlist, + modifier*, + type?, + ((parameter, initializer?) | funcparams), + modifier* + } +# end of methodparam.element +methodparam.attlist &= + [ a:defaultValue = "req" ] + attribute choice { "opt" | "req" | "plain" }?, + [ a:defaultValue = "norepeat" ] + attribute rep { "norepeat" | "repeat" }?, + common.attrib, + methodparam.role.attrib, + local.methodparam.attrib +# end of methodparam.attlist + +# end of methodparam.module + +# end of classsynopsis.content.module + +# ...................................................................... + +# Document information entities and elements ........................... + +# The document information elements include some elements that are +# currently used only in the document hierarchy module. They are +# defined here so that they will be available for use in customized +# document hierarchies. + +# .................................. + +# Ackno ............................ +local.ackno.attrib = empty +ackno.role.attrib = role.attrib +ackno = element ackno { ackno.attlist, docinfo.char.mix* } +# end of ackno.element +ackno.attlist &= common.attrib, ackno.role.attrib, local.ackno.attrib +# end of ackno.attlist + +# end of ackno.module + +# Address .......................... +local.address.attrib = empty +address.role.attrib = role.attrib +address = + element address { + address.attlist, + (text + | personname + | person.ident.mix + | street + | pob + | postcode + | city + | state + | country + | phone + | fax + | email + | otheraddr)* + } +# end of address.element +address.attlist &= + linespecific.attrib, + common.attrib, + address.role.attrib, + local.address.attrib +# end of address.attlist + +# end of address.module +local.street.attrib = empty +street.role.attrib = role.attrib +street = element street { street.attlist, docinfo.char.mix* } +# end of street.element +street.attlist &= common.attrib, street.role.attrib, local.street.attrib +# end of street.attlist + +# end of street.module +local.pob.attrib = empty +pob.role.attrib = role.attrib +pob = element pob { pob.attlist, docinfo.char.mix* } +# end of pob.element +pob.attlist &= common.attrib, pob.role.attrib, local.pob.attrib +# end of pob.attlist + +# end of pob.module +local.postcode.attrib = empty +postcode.role.attrib = role.attrib +postcode = element postcode { postcode.attlist, docinfo.char.mix* } +# end of postcode.element +postcode.attlist &= + common.attrib, postcode.role.attrib, local.postcode.attrib +# end of postcode.attlist + +# end of postcode.module +local.city.attrib = empty +city.role.attrib = role.attrib +city = element city { city.attlist, docinfo.char.mix* } +# end of city.element +city.attlist &= common.attrib, city.role.attrib, local.city.attrib +# end of city.attlist + +# end of city.module +local.state.attrib = empty +state.role.attrib = role.attrib +state = element state { state.attlist, docinfo.char.mix* } +# end of state.element +state.attlist &= common.attrib, state.role.attrib, local.state.attrib +# end of state.attlist + +# end of state.module +local.country.attrib = empty +country.role.attrib = role.attrib +country = element country { country.attlist, docinfo.char.mix* } +# end of country.element +country.attlist &= + common.attrib, country.role.attrib, local.country.attrib +# end of country.attlist + +# end of country.module +local.phone.attrib = empty +phone.role.attrib = role.attrib +phone = element phone { phone.attlist, docinfo.char.mix* } +# end of phone.element +phone.attlist &= common.attrib, phone.role.attrib, local.phone.attrib +# end of phone.attlist + +# end of phone.module +local.fax.attrib = empty +fax.role.attrib = role.attrib +fax = element fax { fax.attlist, docinfo.char.mix* } +# end of fax.element +fax.attlist &= common.attrib, fax.role.attrib, local.fax.attrib +# end of fax.attlist + +# end of fax.module + +# Email (defined in the Inlines section, below) +local.otheraddr.attrib = empty +otheraddr.role.attrib = role.attrib +otheraddr = element otheraddr { otheraddr.attlist, docinfo.char.mix* } +# end of otheraddr.element +otheraddr.attlist &= + common.attrib, otheraddr.role.attrib, local.otheraddr.attrib +# end of otheraddr.attlist + +# end of otheraddr.module + +# end of address.content.module + +# Affiliation ...................... +local.affiliation.attrib = empty +affiliation.role.attrib = role.attrib +affiliation = + element affiliation { + affiliation.attlist, + shortaffil?, + jobtitle*, + orgname?, + orgdiv*, + address* + } +# end of affiliation.element +affiliation.attlist &= + common.attrib, affiliation.role.attrib, local.affiliation.attrib +# end of affiliation.attlist + +# end of affiliation.module +local.shortaffil.attrib = empty +shortaffil.role.attrib = role.attrib +shortaffil = + element shortaffil { shortaffil.attlist, docinfo.char.mix* } +# end of shortaffil.element +shortaffil.attlist &= + common.attrib, shortaffil.role.attrib, local.shortaffil.attrib +# end of shortaffil.attlist + +# end of shortaffil.module +local.jobtitle.attrib = empty +jobtitle.role.attrib = role.attrib +jobtitle = element jobtitle { jobtitle.attlist, docinfo.char.mix* } +# end of jobtitle.element +jobtitle.attlist &= + common.attrib, jobtitle.role.attrib, local.jobtitle.attrib +# end of jobtitle.attlist + +# end of jobtitle.module + +# OrgName (defined elsewhere in this section) +local.orgdiv.attrib = empty +orgdiv.role.attrib = role.attrib +orgdiv = element orgdiv { orgdiv.attlist, docinfo.char.mix* } +# end of orgdiv.element +orgdiv.attlist &= common.attrib, orgdiv.role.attrib, local.orgdiv.attrib +# end of orgdiv.attlist + +# end of orgdiv.module + +# Address (defined elsewhere in this section) + +# end of affiliation.content.module + +# ArtPageNums ...................... +local.artpagenums.attrib = empty +artpagenums.role.attrib = role.attrib +artpagenums = + element artpagenums { artpagenums.attlist, docinfo.char.mix* } +# end of artpagenums.element +artpagenums.attlist &= + common.attrib, artpagenums.role.attrib, local.artpagenums.attrib +# end of artpagenums.attlist + +# end of artpagenums.module + +# PersonName +local.personname.attrib = empty +personname.role.attrib = role.attrib +personname = + element personname { + personname.attlist, + (honorific | firstname | surname | lineage | othername)+ + } +# end of personname.element +personname.attlist &= + common.attrib, personname.role.attrib, local.personname.attrib +# end of personname.attlist + +# end of personname.module + +# Author ........................... +local.author.attrib = empty +author.role.attrib = role.attrib +author = + element author { + author.attlist, + (personname | person.ident.mix+), + (personblurb | email | address)* + } +# end of author.element +author.attlist &= common.attrib, author.role.attrib, local.author.attrib +# end of author.attlist + +# (see "Personal identity elements" for %person.ident.mix;) + +# end of author.module + +# AuthorGroup ...................... +local.authorgroup.attrib = empty +authorgroup.role.attrib = role.attrib +authorgroup = + element authorgroup { + authorgroup.attlist, + (author | editor | collab | corpauthor | othercredit)+ + } +# end of authorgroup.element +authorgroup.attlist &= + common.attrib, authorgroup.role.attrib, local.authorgroup.attrib +# end of authorgroup.attlist + +# end of authorgroup.module + +# Author (defined elsewhere in this section) + +# Editor (defined elsewhere in this section) +local.collab.attrib = empty +collab.role.attrib = role.attrib +collab = element collab { collab.attlist, collabname, affiliation* } +# end of collab.element +collab.attlist &= common.attrib, collab.role.attrib, local.collab.attrib +# end of collab.attlist + +# end of collab.module +local.collabname.attrib = empty +collabname.role.attrib = role.attrib +collabname = + element collabname { collabname.attlist, docinfo.char.mix* } +# end of collabname.element +collabname.attlist &= + common.attrib, collabname.role.attrib, local.collabname.attrib +# end of collabname.attlist + +# end of collabname.module + +# Affiliation (defined elsewhere in this section) + +# end of collab.content.module + +# CorpAuthor (defined elsewhere in this section) + +# OtherCredit (defined elsewhere in this section) + +# end of authorgroup.content.module + +# AuthorInitials ................... +local.authorinitials.attrib = empty +authorinitials.role.attrib = role.attrib +authorinitials = + element authorinitials { authorinitials.attlist, docinfo.char.mix* } +# end of authorinitials.element +authorinitials.attlist &= + common.attrib, authorinitials.role.attrib, local.authorinitials.attrib +# end of authorinitials.attlist + +# end of authorinitials.module + +# ConfGroup ........................ +local.confgroup.attrib = empty +confgroup.role.attrib = role.attrib +confgroup = + element confgroup { + confgroup.attlist, + (confdates | conftitle | confnum | address | confsponsor)* + } +# end of confgroup.element +confgroup.attlist &= + common.attrib, confgroup.role.attrib, local.confgroup.attrib +# end of confgroup.attlist + +# end of confgroup.module +local.confdates.attrib = empty +confdates.role.attrib = role.attrib +confdates = element confdates { confdates.attlist, docinfo.char.mix* } +# end of confdates.element +confdates.attlist &= + common.attrib, confdates.role.attrib, local.confdates.attrib +# end of confdates.attlist + +# end of confdates.module +local.conftitle.attrib = empty +conftitle.role.attrib = role.attrib +conftitle = element conftitle { conftitle.attlist, docinfo.char.mix* } +# end of conftitle.element +conftitle.attlist &= + common.attrib, conftitle.role.attrib, local.conftitle.attrib +# end of conftitle.attlist + +# end of conftitle.module +local.confnum.attrib = empty +confnum.role.attrib = role.attrib +confnum = element confnum { confnum.attlist, docinfo.char.mix* } +# end of confnum.element +confnum.attlist &= + common.attrib, confnum.role.attrib, local.confnum.attrib +# end of confnum.attlist + +# end of confnum.module + +# Address (defined elsewhere in this section) +local.confsponsor.attrib = empty +confsponsor.role.attrib = role.attrib +confsponsor = + element confsponsor { confsponsor.attlist, docinfo.char.mix* } +# end of confsponsor.element +confsponsor.attlist &= + common.attrib, confsponsor.role.attrib, local.confsponsor.attrib +# end of confsponsor.attlist + +# end of confsponsor.module + +# end of confgroup.content.module + +# ContractNum ...................... +local.contractnum.attrib = empty +contractnum.role.attrib = role.attrib +contractnum = + element contractnum { contractnum.attlist, docinfo.char.mix* } +# end of contractnum.element +contractnum.attlist &= + common.attrib, contractnum.role.attrib, local.contractnum.attrib +# end of contractnum.attlist + +# end of contractnum.module + +# ContractSponsor .................. +local.contractsponsor.attrib = empty +contractsponsor.role.attrib = role.attrib +contractsponsor = + element contractsponsor { contractsponsor.attlist, docinfo.char.mix* } +# end of contractsponsor.element +contractsponsor.attlist &= + common.attrib, + contractsponsor.role.attrib, + local.contractsponsor.attrib +# end of contractsponsor.attlist + +# end of contractsponsor.module + +# Copyright ........................ +local.copyright.attrib = empty +copyright.role.attrib = role.attrib +copyright = element copyright { copyright.attlist, year+, holder* } +# end of copyright.element +copyright.attlist &= + common.attrib, copyright.role.attrib, local.copyright.attrib +# end of copyright.attlist + +# end of copyright.module +local.year.attrib = empty +year.role.attrib = role.attrib +year = element year { year.attlist, docinfo.char.mix* } +# end of year.element +year.attlist &= common.attrib, year.role.attrib, local.year.attrib +# end of year.attlist + +# end of year.module +local.holder.attrib = empty +holder.role.attrib = role.attrib +holder = element holder { holder.attlist, docinfo.char.mix* } +# end of holder.element +holder.attlist &= common.attrib, holder.role.attrib, local.holder.attrib +# end of holder.attlist + +# end of holder.module + +# end of copyright.content.module + +# CorpAuthor ....................... +local.corpauthor.attrib = empty +corpauthor.role.attrib = role.attrib +corpauthor = + element corpauthor { corpauthor.attlist, docinfo.char.mix* } +# end of corpauthor.element +corpauthor.attlist &= + common.attrib, corpauthor.role.attrib, local.corpauthor.attrib +# end of corpauthor.attlist + +# end of corpauthor.module + +# CorpName ......................... +local.corpname.attrib = empty +corpname = element corpname { corpname.attlist, docinfo.char.mix* } +# end of corpname.element +corpname.role.attrib = role.attrib +corpname.attlist &= + common.attrib, corpname.role.attrib, local.corpname.attrib +# end of corpname.attlist + +# end of corpname.module + +# Date ............................. +local.date.attrib = empty +date.role.attrib = role.attrib +date = element date { date.attlist, docinfo.char.mix* } +# end of date.element +date.attlist &= common.attrib, date.role.attrib, local.date.attrib +# end of date.attlist + +# end of date.module + +# Edition .......................... +local.edition.attrib = empty +edition.role.attrib = role.attrib +edition = element edition { edition.attlist, docinfo.char.mix* } +# end of edition.element +edition.attlist &= + common.attrib, edition.role.attrib, local.edition.attrib +# end of edition.attlist + +# end of edition.module + +# Editor ........................... +local.editor.attrib = empty +editor.role.attrib = role.attrib +editor = + element editor { + editor.attlist, + (personname | person.ident.mix+), + (personblurb | email | address)* + } +# end of editor.element +editor.attlist &= common.attrib, editor.role.attrib, local.editor.attrib +# end of editor.attlist + +# (see "Personal identity elements" for %person.ident.mix;) + +# end of editor.module + +# ISBN ............................. +local.isbn.attrib = empty +isbn.role.attrib = role.attrib +isbn = element isbn { isbn.attlist, docinfo.char.mix* } +# end of isbn.element +isbn.attlist &= common.attrib, isbn.role.attrib, local.isbn.attrib +# end of isbn.attlist + +# end of isbn.module + +# ISSN ............................. +local.issn.attrib = empty +issn.role.attrib = role.attrib +issn = element issn { issn.attlist, docinfo.char.mix* } +# end of issn.element +issn.attlist &= common.attrib, issn.role.attrib, local.issn.attrib +# end of issn.attlist + +# end of issn.module + +# BiblioId ................. +biblio.class.attrib = + attribute class { + "uri" + | "doi" + | "isbn" + | "issn" + | "libraryofcongress" + | "pubnumber" + | "other" + }?, + attribute otherclass { text }? +local.biblioid.attrib = empty +biblioid.role.attrib = role.attrib +biblioid = element biblioid { biblioid.attlist, docinfo.char.mix* } +# end of biblioid.element +biblioid.attlist &= + biblio.class.attrib, + common.attrib, + biblioid.role.attrib, + local.biblioid.attrib +# end of biblioid.attlist + +# end of biblioid.module + +# CiteBiblioId ................. +local.citebiblioid.attrib = empty +citebiblioid.role.attrib = role.attrib +citebiblioid = + element citebiblioid { citebiblioid.attlist, docinfo.char.mix* } +# end of citebiblioid.element +citebiblioid.attlist &= + biblio.class.attrib, + common.attrib, + citebiblioid.role.attrib, + local.citebiblioid.attrib +# end of citebiblioid.attlist + +# end of citebiblioid.module + +# BiblioSource ................. +local.bibliosource.attrib = empty +bibliosource.role.attrib = role.attrib +bibliosource = + element bibliosource { bibliosource.attlist, docinfo.char.mix* } +# end of bibliosource.element +bibliosource.attlist &= + biblio.class.attrib, + common.attrib, + bibliosource.role.attrib, + local.bibliosource.attrib +# end of bibliosource.attlist + +# end of bibliosource.module + +# BiblioRelation ................. +local.bibliorelation.attrib = empty +local.bibliorelation.types = notAllowed +bibliorelation.type.attrib = + attribute type { + "isversionof" + | "hasversion" + | "isreplacedby" + | "replaces" + | "isrequiredby" + | "requires" + | "ispartof" + | "haspart" + | "isreferencedby" + | "references" + | "isformatof" + | "hasformat" + | "othertype" + | local.bibliorelation.types + }?, + attribute othertype { text }? +bibliorelation.role.attrib = role.attrib +bibliorelation = + element bibliorelation { bibliorelation.attlist, docinfo.char.mix* } +# end of bibliorelation.element +bibliorelation.attlist &= + biblio.class.attrib, + bibliorelation.type.attrib, + common.attrib, + bibliorelation.role.attrib, + local.bibliorelation.attrib +# end of bibliorelation.attlist + +# end of bibliorelation.module + +# BiblioCoverage ................. +local.bibliocoverage.attrib = empty +bibliocoverage.role.attrib = role.attrib +bibliocoverage = + element bibliocoverage { bibliocoverage.attlist, docinfo.char.mix* } +# end of bibliocoverage.element +bibliocoverage.attlist &= + attribute spatial { + "dcmipoint" | "iso3166" | "dcmibox" | "tgn" | "otherspatial" + }?, + attribute otherspatial { text }?, + attribute temporal { "dcmiperiod" | "w3c-dtf" | "othertemporal" }?, + attribute othertemporal { text }?, + common.attrib, + bibliocoverage.role.attrib, + local.bibliocoverage.attrib +# end of bibliocoverage.attlist + +# end of bibliocoverage.module + +# InvPartNumber .................... +local.invpartnumber.attrib = empty +invpartnumber.role.attrib = role.attrib +invpartnumber = + element invpartnumber { invpartnumber.attlist, docinfo.char.mix* } +# end of invpartnumber.element +invpartnumber.attlist &= + common.attrib, invpartnumber.role.attrib, local.invpartnumber.attrib +# end of invpartnumber.attlist + +# end of invpartnumber.module + +# IssueNum ......................... +local.issuenum.attrib = empty +issuenum.role.attrib = role.attrib +issuenum = element issuenum { issuenum.attlist, docinfo.char.mix* } +# end of issuenum.element +issuenum.attlist &= + common.attrib, issuenum.role.attrib, local.issuenum.attrib +# end of issuenum.attlist + +# end of issuenum.module + +# LegalNotice ...................... +local.legalnotice.attrib = empty +legalnotice.role.attrib = role.attrib +legalnotice = + element legalnotice { + legalnotice.attlist, blockinfo?, title?, legalnotice.mix+ + } +# end of legalnotice.element +legalnotice.attlist &= + common.attrib, legalnotice.role.attrib, local.legalnotice.attrib +# end of legalnotice.attlist + +# end of legalnotice.module + +# ModeSpec ......................... +local.modespec.attrib = empty +modespec.role.attrib = role.attrib +modespec = element modespec { modespec.attlist, docinfo.char.mix* } +# end of modespec.element + +# Application: Type of action required for completion +# of the links to which the ModeSpec is relevant (e.g., +# retrieval query) +modespec.attlist &= + attribute application { notation.class }?, + common.attrib, + modespec.role.attrib, + local.modespec.attrib +# end of modespec.attlist + +# end of modespec.module + +# OrgName .......................... +local.orgname.attrib = empty +orgname.role.attrib = role.attrib +orgname = element orgname { orgname.attlist, docinfo.char.mix* } +# end of orgname.element +orgname.attlist &= + common.attrib, + attribute class { + "corporation" | "nonprofit" | "consortium" | "informal" | "other" + }?, + attribute otherclass { text }?, + orgname.role.attrib, + local.orgname.attrib +# end of orgname.attlist + +# end of orgname.module + +# OtherCredit ...................... +local.othercredit.attrib = empty +othercredit.role.attrib = role.attrib +othercredit = + element othercredit { + othercredit.attlist, + (personname | person.ident.mix+), + (personblurb | email | address)* + } +# end of othercredit.element +othercredit.attlist &= + common.attrib, othercredit.role.attrib, local.othercredit.attrib +# end of othercredit.attlist + +# (see "Personal identity elements" for %person.ident.mix;) + +# end of othercredit.module + +# PageNums ......................... +local.pagenums.attrib = empty +pagenums.role.attrib = role.attrib +pagenums = element pagenums { pagenums.attlist, docinfo.char.mix* } +# end of pagenums.element +pagenums.attlist &= + common.attrib, pagenums.role.attrib, local.pagenums.attrib +# end of pagenums.attlist + +# end of pagenums.module + +# Personal identity elements ....... + +# These elements are used only within Author, Editor, and +# OtherCredit. +local.contrib.attrib = empty +contrib.role.attrib = role.attrib +contrib = element contrib { contrib.attlist, docinfo.char.mix* } +# end of contrib.element +contrib.attlist &= + common.attrib, contrib.role.attrib, local.contrib.attrib +# end of contrib.attlist + +# end of contrib.module +local.firstname.attrib = empty +firstname.role.attrib = role.attrib +firstname = element firstname { firstname.attlist, docinfo.char.mix* } +# end of firstname.element +firstname.attlist &= + common.attrib, firstname.role.attrib, local.firstname.attrib +# end of firstname.attlist + +# end of firstname.module +local.honorific.attrib = empty +honorific.role.attrib = role.attrib +honorific = element honorific { honorific.attlist, docinfo.char.mix* } +# end of honorific.element +honorific.attlist &= + common.attrib, honorific.role.attrib, local.honorific.attrib +# end of honorific.attlist + +# end of honorific.module +local.lineage.attrib = empty +lineage.role.attrib = role.attrib +lineage = element lineage { lineage.attlist, docinfo.char.mix* } +# end of lineage.element +lineage.attlist &= + common.attrib, lineage.role.attrib, local.lineage.attrib +# end of lineage.attlist + +# end of lineage.module +local.othername.attrib = empty +othername.role.attrib = role.attrib +othername = element othername { othername.attlist, docinfo.char.mix* } +# end of othername.element +othername.attlist &= + common.attrib, othername.role.attrib, local.othername.attrib +# end of othername.attlist + +# end of othername.module +local.surname.attrib = empty +surname.role.attrib = role.attrib +surname = element surname { surname.attlist, docinfo.char.mix* } +# end of surname.element +surname.attlist &= + common.attrib, surname.role.attrib, local.surname.attrib +# end of surname.attlist + +# end of surname.module + +# end of person.ident.module + +# PrintHistory ..................... +local.printhistory.attrib = empty +printhistory.role.attrib = role.attrib +printhistory = + element printhistory { printhistory.attlist, para.class+ } +# end of printhistory.element +printhistory.attlist &= + common.attrib, printhistory.role.attrib, local.printhistory.attrib +# end of printhistory.attlist + +# end of printhistory.module + +# ProductName ...................... +local.productname.attrib = empty +productname.role.attrib = role.attrib +productname = + element productname { productname.attlist, para.char.mix* } +# end of productname.element + +# Class: More precisely identifies the item the element names +productname.attlist &= + [ a:defaultValue = "trade" ] + attribute class { "service" | "trade" | "registered" | "copyright" }?, + common.attrib, + productname.role.attrib, + local.productname.attrib +# end of productname.attlist + +# end of productname.module + +# ProductNumber .................... +local.productnumber.attrib = empty +productnumber.role.attrib = role.attrib +productnumber = + element productnumber { productnumber.attlist, docinfo.char.mix* } +# end of productnumber.element +productnumber.attlist &= + common.attrib, productnumber.role.attrib, local.productnumber.attrib +# end of productnumber.attlist + +# end of productnumber.module + +# PubDate .......................... +local.pubdate.attrib = empty +pubdate.role.attrib = role.attrib +pubdate = element pubdate { pubdate.attlist, docinfo.char.mix* } +# end of pubdate.element +pubdate.attlist &= + common.attrib, pubdate.role.attrib, local.pubdate.attrib +# end of pubdate.attlist + +# end of pubdate.module + +# Publisher ........................ +local.publisher.attrib = empty +publisher.role.attrib = role.attrib +publisher = + element publisher { publisher.attlist, publishername, address* } +# end of publisher.element +publisher.attlist &= + common.attrib, publisher.role.attrib, local.publisher.attrib +# end of publisher.attlist + +# end of publisher.module +local.publishername.attrib = empty +publishername.role.attrib = role.attrib +publishername = + element publishername { publishername.attlist, docinfo.char.mix* } +# end of publishername.element +publishername.attlist &= + common.attrib, publishername.role.attrib, local.publishername.attrib +# end of publishername.attlist + +# end of publishername.module + +# Address (defined elsewhere in this section) + +# end of publisher.content.module + +# PubsNumber ....................... +local.pubsnumber.attrib = empty +pubsnumber.role.attrib = role.attrib +pubsnumber = + element pubsnumber { pubsnumber.attlist, docinfo.char.mix* } +# end of pubsnumber.element +pubsnumber.attlist &= + common.attrib, pubsnumber.role.attrib, local.pubsnumber.attrib +# end of pubsnumber.attlist + +# end of pubsnumber.module + +# ReleaseInfo ...................... +local.releaseinfo.attrib = empty +releaseinfo.role.attrib = role.attrib +releaseinfo = + element releaseinfo { releaseinfo.attlist, docinfo.char.mix* } +# end of releaseinfo.element +releaseinfo.attlist &= + common.attrib, releaseinfo.role.attrib, local.releaseinfo.attrib +# end of releaseinfo.attlist + +# end of releaseinfo.module + +# RevHistory ....................... +local.revhistory.attrib = empty +revhistory.role.attrib = role.attrib +revhistory = element revhistory { revhistory.attlist, revision+ } +# end of revhistory.element +revhistory.attlist &= + common.attrib, revhistory.role.attrib, local.revhistory.attrib +# end of revhistory.attlist + +# end of revhistory.module +local.revision.attrib = empty +revision.role.attrib = role.attrib +revision = + element revision { + revision.attlist, + revnumber, + date, + authorinitials*, + (revremark | revdescription)? + } +# end of revision.element +revision.attlist &= + common.attrib, revision.role.attrib, local.revision.attrib +# end of revision.attlist + +# end of revision.module +local.revnumber.attrib = empty +revnumber.role.attrib = role.attrib +revnumber = element revnumber { revnumber.attlist, docinfo.char.mix* } +# end of revnumber.element +revnumber.attlist &= + common.attrib, revnumber.role.attrib, local.revnumber.attrib +# end of revnumber.attlist + +# end of revnumber.module + +# Date (defined elsewhere in this section) + +# AuthorInitials (defined elsewhere in this section) +local.revremark.attrib = empty +revremark.role.attrib = role.attrib +revremark = element revremark { revremark.attlist, docinfo.char.mix* } +# end of revremark.element +revremark.attlist &= + common.attrib, revremark.role.attrib, local.revremark.attrib +# end of revremark.attlist + +# end of revremark.module +local.revdescription.attrib = empty +revdescription.role.attrib = role.attrib +revdescription = + element revdescription { revdescription.attlist, revdescription.mix+ } +# end of revdescription.element +revdescription.attlist &= + common.attrib, revdescription.role.attrib, local.revdescription.attrib +# end of revdescription.attlist + +# end of revdescription.module + +# end of revhistory.content.module + +# SeriesVolNums .................... +local.seriesvolnums.attrib = empty +seriesvolnums.role.attrib = role.attrib +seriesvolnums = + element seriesvolnums { seriesvolnums.attlist, docinfo.char.mix* } +# end of seriesvolnums.element +seriesvolnums.attlist &= + common.attrib, seriesvolnums.role.attrib, local.seriesvolnums.attrib +# end of seriesvolnums.attlist + +# end of seriesvolnums.module + +# VolumeNum ........................ +local.volumenum.attrib = empty +volumenum.role.attrib = role.attrib +volumenum = element volumenum { volumenum.attlist, docinfo.char.mix* } +# end of volumenum.element +volumenum.attlist &= + common.attrib, volumenum.role.attrib, local.volumenum.attrib +# end of volumenum.attlist + +# end of volumenum.module + +# .................................. + +# end of docinfo.content.module + +# ...................................................................... + +# Inline, link, and ubiquitous elements ................................ + +# Technical and computer terms ......................................... +local.accel.attrib = empty +accel.role.attrib = role.attrib +accel = element accel { accel.attlist, smallcptr.char.mix* } +# end of accel.element +accel.attlist &= common.attrib, accel.role.attrib, local.accel.attrib +# end of accel.attlist + +# end of accel.module +local.action.attrib = empty +action.role.attrib = role.attrib +action = element action { action.attlist, cptr.char.mix* } +# end of action.element +action.attlist &= + moreinfo.attrib, + common.attrib, + action.role.attrib, + local.action.attrib +# end of action.attlist + +# end of action.module +local.application.attrib = empty +application.role.attrib = role.attrib +application = + element application { application.attlist, para.char.mix* } +# end of application.element +application.attlist &= + attribute class { "hardware" | "software" }?, + moreinfo.attrib, + common.attrib, + application.role.attrib, + local.application.attrib +# end of application.attlist + +# end of application.module +local.classname.attrib = empty +classname.role.attrib = role.attrib +classname = element classname { classname.attlist, smallcptr.char.mix* } +# end of classname.element +classname.attlist &= + common.attrib, classname.role.attrib, local.classname.attrib +# end of classname.attlist + +# end of classname.module +local.co.attrib = empty +# CO is a callout area of the LineColumn unit type (a single character +# position); the position is directly indicated by the location of CO. +co.role.attrib = role.attrib +co = element co { co.attlist, empty } +# end of co.element + +# bug number/symbol override or initialization + +# to any related information +co.attlist &= + label.attrib, + linkends.attrib, + idreq.common.attrib, + co.role.attrib, + local.co.attrib +# end of co.attlist + +# end of co.module +local.coref.attrib = empty +# COREF is a reference to a CO +coref.role.attrib = role.attrib +coref = element coref { coref.attlist, empty } +# end of coref.element + +# bug number/symbol override or initialization + +# to any related information +coref.attlist &= + label.attrib, + linkendreq.attrib, + common.attrib, + coref.role.attrib, + local.coref.attrib +# end of coref.attlist + +# end of coref.module +local.command.attrib = empty +command.role.attrib = role.attrib +command = element command { command.attlist, cptr.char.mix* } +# end of command.element +command.attlist &= + moreinfo.attrib, + common.attrib, + command.role.attrib, + local.command.attrib +# end of command.attlist + +# end of command.module +local.computeroutput.attrib = empty +computeroutput.role.attrib = role.attrib +computeroutput = + element computeroutput { + computeroutput.attlist, (cptr.char.mix | co)* + } +# end of computeroutput.element +computeroutput.attlist &= + moreinfo.attrib, + common.attrib, + computeroutput.role.attrib, + local.computeroutput.attrib +# end of computeroutput.attlist + +# end of computeroutput.module +local.database.attrib = empty +database.role.attrib = role.attrib +database = element database { database.attlist, cptr.char.mix* } +# end of database.element + +# Class: Type of database the element names; no default +database.attlist &= + attribute class { + "name" | "table" | "field" | "key1" | "key2" | "record" + }?, + moreinfo.attrib, + common.attrib, + database.role.attrib, + local.database.attrib +# end of database.attlist + +# end of database.module +local.email.attrib = empty +email.role.attrib = role.attrib +email = element email { email.attlist, docinfo.char.mix* } +# end of email.element +email.attlist &= common.attrib, email.role.attrib, local.email.attrib +# end of email.attlist + +# end of email.module +local.envar.attrib = empty +envar.role.attrib = role.attrib +envar = element envar { envar.attlist, smallcptr.char.mix* } +# end of envar.element +envar.attlist &= common.attrib, envar.role.attrib, local.envar.attrib +# end of envar.attlist + +# end of envar.module +local.errorcode.attrib = empty +errorcode.role.attrib = role.attrib +errorcode = element errorcode { errorcode.attlist, smallcptr.char.mix* } +# end of errorcode.element +errorcode.attlist &= + moreinfo.attrib, + common.attrib, + errorcode.role.attrib, + local.errorcode.attrib +# end of errorcode.attlist + +# end of errorcode.module +local.errorname.attrib = empty +errorname.role.attrib = role.attrib +errorname = element errorname { errorname.attlist, smallcptr.char.mix* } +# end of errorname.element +errorname.attlist &= + common.attrib, errorname.role.attrib, local.errorname.attrib +# end of errorname.attlist + +# end of errorname.module +local.errortext.attrib = empty +errortext.role.attrib = role.attrib +errortext = element errortext { errortext.attlist, smallcptr.char.mix* } +# end of errortext.element +errortext.attlist &= + common.attrib, errortext.role.attrib, local.errortext.attrib +# end of errortext.attlist + +# end of errortext.module +local.errortype.attrib = empty +errortype.role.attrib = role.attrib +errortype = element errortype { errortype.attlist, smallcptr.char.mix* } +# end of errortype.element +errortype.attlist &= + common.attrib, errortype.role.attrib, local.errortype.attrib +# end of errortype.attlist + +# end of errortype.module +local.filename.attrib = empty +filename.role.attrib = role.attrib +filename = element filename { filename.attlist, cptr.char.mix* } +# end of filename.element + +# Class: Type of filename the element names; no default + +# Path: Search path (possibly system-specific) in which +# file can be found +filename.attlist &= + attribute class { + "headerfile" + | "partition" + | "devicefile" + | "libraryfile" + | "directory" + | "extension" + | "symlink" + }?, + attribute path { text }?, + moreinfo.attrib, + common.attrib, + filename.role.attrib, + local.filename.attrib +# end of filename.attlist + +# end of filename.module +local.function.attrib = empty +function.role.attrib = role.attrib +function = element function { function.attlist, cptr.char.mix* } +# end of function.element +function.attlist &= + moreinfo.attrib, + common.attrib, + function.role.attrib, + local.function.attrib +# end of function.attlist + +# end of function.module +local.guibutton.attrib = empty +guibutton.role.attrib = role.attrib +guibutton = + element guibutton { guibutton.attlist, (smallcptr.char.mix | accel)* } +# end of guibutton.element +guibutton.attlist &= + moreinfo.attrib, + common.attrib, + guibutton.role.attrib, + local.guibutton.attrib +# end of guibutton.attlist + +# end of guibutton.module +local.guiicon.attrib = empty +guiicon.role.attrib = role.attrib +guiicon = + element guiicon { guiicon.attlist, (smallcptr.char.mix | accel)* } +# end of guiicon.element +guiicon.attlist &= + moreinfo.attrib, + common.attrib, + guiicon.role.attrib, + local.guiicon.attrib +# end of guiicon.attlist + +# end of guiicon.module +local.guilabel.attrib = empty +guilabel.role.attrib = role.attrib +guilabel = + element guilabel { guilabel.attlist, (smallcptr.char.mix | accel)* } +# end of guilabel.element +guilabel.attlist &= + moreinfo.attrib, + common.attrib, + guilabel.role.attrib, + local.guilabel.attrib +# end of guilabel.attlist + +# end of guilabel.module +local.guimenu.attrib = empty +guimenu.role.attrib = role.attrib +guimenu = + element guimenu { guimenu.attlist, (smallcptr.char.mix | accel)* } +# end of guimenu.element +guimenu.attlist &= + moreinfo.attrib, + common.attrib, + guimenu.role.attrib, + local.guimenu.attrib +# end of guimenu.attlist + +# end of guimenu.module +local.guimenuitem.attrib = empty +guimenuitem.role.attrib = role.attrib +guimenuitem = + element guimenuitem { + guimenuitem.attlist, (smallcptr.char.mix | accel)* + } +# end of guimenuitem.element +guimenuitem.attlist &= + moreinfo.attrib, + common.attrib, + guimenuitem.role.attrib, + local.guimenuitem.attrib +# end of guimenuitem.attlist + +# end of guimenuitem.module +local.guisubmenu.attrib = empty +guisubmenu.role.attrib = role.attrib +guisubmenu = + element guisubmenu { + guisubmenu.attlist, (smallcptr.char.mix | accel)* + } +# end of guisubmenu.element +guisubmenu.attlist &= + moreinfo.attrib, + common.attrib, + guisubmenu.role.attrib, + local.guisubmenu.attrib +# end of guisubmenu.attlist + +# end of guisubmenu.module +local.hardware.attrib = empty +hardware.role.attrib = role.attrib +hardware = element hardware { hardware.attlist, cptr.char.mix* } +# end of hardware.element +hardware.attlist &= + moreinfo.attrib, + common.attrib, + hardware.role.attrib, + local.hardware.attrib +# end of hardware.attlist + +# end of hardware.module +local.interface.attrib = empty +interface.role.attrib = role.attrib +interface = + element interface { interface.attlist, (smallcptr.char.mix | accel)* } +# end of interface.element + +# Class: Type of the Interface item; no default +interface.attlist &= + moreinfo.attrib, + common.attrib, + interface.role.attrib, + local.interface.attrib +# end of interface.attlist + +# end of interface.module +local.keycap.attrib = empty +keycap.role.attrib = role.attrib +keycap = element keycap { keycap.attlist, cptr.char.mix* } +# end of keycap.element +keycap.attlist &= + moreinfo.attrib, + common.attrib, + keycap.role.attrib, + local.keycap.attrib +# end of keycap.attlist + +# end of keycap.module +local.keycode.attrib = empty +keycode.role.attrib = role.attrib +keycode = element keycode { keycode.attlist, smallcptr.char.mix* } +# end of keycode.element +keycode.attlist &= + common.attrib, keycode.role.attrib, local.keycode.attrib +# end of keycode.attlist + +# end of keycode.module +local.keycombo.attrib = empty +keycombo.role.attrib = role.attrib +keycombo = + element keycombo { + keycombo.attlist, (keycap | keycombo | keysym | mousebutton)+ + } +# end of keycombo.element +keycombo.attlist &= + keyaction.attrib, + moreinfo.attrib, + common.attrib, + keycombo.role.attrib, + local.keycombo.attrib +# end of keycombo.attlist + +# end of keycombo.module +local.keysym.attrib = empty +keysysm.role.attrib = role.attrib +keysym = element keysym { keysym.attlist, smallcptr.char.mix* } +# end of keysym.element +keysym.attlist &= + common.attrib, keysysm.role.attrib, local.keysym.attrib +# end of keysym.attlist + +# end of keysym.module +local.lineannotation.attrib = empty +lineannotation.role.attrib = role.attrib +lineannotation = + element lineannotation { lineannotation.attlist, para.char.mix* } +# end of lineannotation.element +lineannotation.attlist &= + common.attrib, lineannotation.role.attrib, local.lineannotation.attrib +# end of lineannotation.attlist + +# end of lineannotation.module +local.literal.attrib = empty +literal.role.attrib = role.attrib +literal = element literal { literal.attlist, cptr.char.mix* } +# end of literal.element +literal.attlist &= + moreinfo.attrib, + common.attrib, + literal.role.attrib, + local.literal.attrib +# end of literal.attlist + +# end of literal.module +local.constant.attrib = empty +constant.role.attrib = role.attrib +constant = element constant { constant.attlist, smallcptr.char.mix* } +# end of constant.element +constant.attlist &= + attribute class { "limit" }?, + common.attrib, + constant.role.attrib, + local.constant.attrib +# end of constant.attlist + +# end of constant.module +local.varname.attrib = empty +varname.role.attrib = role.attrib +varname = element varname { varname.attlist, smallcptr.char.mix* } +# end of varname.element +varname.attlist &= + common.attrib, varname.role.attrib, local.varname.attrib +# end of varname.attlist + +# end of varname.module +local.markup.attrib = empty +markup.role.attrib = role.attrib +markup = element markup { markup.attlist, smallcptr.char.mix* } +# end of markup.element +markup.attlist &= common.attrib, markup.role.attrib, local.markup.attrib +# end of markup.attlist + +# end of markup.module +local.medialabel.attrib = empty +medialabel.role.attrib = role.attrib +medialabel = + element medialabel { medialabel.attlist, smallcptr.char.mix* } +# end of medialabel.element + +# Class: Type of medium named by the element; no default +medialabel.attlist &= + attribute class { "cartridge" | "cdrom" | "disk" | "tape" }?, + common.attrib, + medialabel.role.attrib, + local.medialabel.attrib +# end of medialabel.attlist + +# end of medialabel.module +local.menuchoice.attrib = empty +menuchoice.role.attrib = role.attrib +menuchoice = + element menuchoice { + menuchoice.attlist, + shortcut?, + (guibutton + | guiicon + | guilabel + | guimenu + | guimenuitem + | guisubmenu + | interface)+ + } +# end of menuchoice.element +menuchoice.attlist &= + moreinfo.attrib, + common.attrib, + menuchoice.role.attrib, + local.menuchoice.attrib +# end of menuchoice.attlist + +# end of menuchoice.module + +# See also KeyCombo +local.shortcut.attrib = empty +shortcut.role.attrib = role.attrib +shortcut = + element shortcut { + shortcut.attlist, (keycap | keycombo | keysym | mousebutton)+ + } +# end of shortcut.element +shortcut.attlist &= + keyaction.attrib, + moreinfo.attrib, + common.attrib, + shortcut.role.attrib, + local.shortcut.attrib +# end of shortcut.attlist + +# end of shortcut.module + +# end of menuchoice.content.module +local.mousebutton.attrib = empty +mousebutton.role.attrib = role.attrib +mousebutton = + element mousebutton { mousebutton.attlist, smallcptr.char.mix* } +# end of mousebutton.element +mousebutton.attlist &= + moreinfo.attrib, + common.attrib, + mousebutton.role.attrib, + local.mousebutton.attrib +# end of mousebutton.attlist + +# end of mousebutton.module +local.msgtext.attrib = empty +msgtext.role.attrib = role.attrib +msgtext = element msgtext { msgtext.attlist, component.mix+ } +# end of msgtext.element +msgtext.attlist &= + common.attrib, msgtext.role.attrib, local.msgtext.attrib +# end of msgtext.attlist + +# end of msgtext.module +local.option.attrib = empty +option.role.attrib = role.attrib +option = element option { option.attlist, cptr.char.mix* } +# end of option.element +option.attlist &= common.attrib, option.role.attrib, local.option.attrib +# end of option.attlist + +# end of option.module +local.optional.attrib = empty +optional.role.attrib = role.attrib +optional = element optional { optional.attlist, cptr.char.mix* } +# end of optional.element +optional.attlist &= + common.attrib, optional.role.attrib, local.optional.attrib +# end of optional.attlist + +# end of optional.module +local.parameter.attrib = empty +parameter.role.attrib = role.attrib +parameter = element parameter { parameter.attlist, cptr.char.mix* } +# end of parameter.element + +# Class: Type of the Parameter; no default +parameter.attlist &= + attribute class { "command" | "function" | "option" }?, + moreinfo.attrib, + common.attrib, + parameter.role.attrib, + local.parameter.attrib +# end of parameter.attlist + +# end of parameter.module +local.prompt.attrib = empty +prompt.role.attrib = role.attrib +prompt = element prompt { prompt.attlist, (smallcptr.char.mix | co)* } +# end of prompt.element +prompt.attlist &= + moreinfo.attrib, + common.attrib, + prompt.role.attrib, + local.prompt.attrib +# end of prompt.attlist + +# end of prompt.module +local.property.attrib = empty +property.role.attrib = role.attrib +property = element property { property.attlist, cptr.char.mix* } +# end of property.element +property.attlist &= + moreinfo.attrib, + common.attrib, + property.role.attrib, + local.property.attrib +# end of property.attlist + +# end of property.module +local.replaceable.attrib = empty +replaceable.role.attrib = role.attrib +replaceable = + element replaceable { + replaceable.attlist, + (text + | link.char.class + | optional + | base.char.class + | other.char.class + | inlinegraphic + | inlinemediaobject + | co)* + } +# end of replaceable.element + +# Class: Type of information the element represents; no +# default +replaceable.attlist &= + attribute class { "command" | "function" | "option" | "parameter" }?, + common.attrib, + replaceable.role.attrib, + local.replaceable.attrib +# end of replaceable.attlist + +# end of replaceable.module +local.returnvalue.attrib = empty +returnvalue.role.attrib = role.attrib +returnvalue = + element returnvalue { returnvalue.attlist, smallcptr.char.mix* } +# end of returnvalue.element +returnvalue.attlist &= + common.attrib, returnvalue.role.attrib, local.returnvalue.attrib +# end of returnvalue.attlist + +# end of returnvalue.module +local.sgmltag.attrib = empty +sgmltag.role.attrib = role.attrib +sgmltag = element sgmltag { sgmltag.attlist, smallcptr.char.mix* } +# end of sgmltag.element + +# Class: Type of SGML construct the element names; no default +sgmltag.attlist &= + attribute class { + "attribute" + | "attvalue" + | "element" + | "endtag" + | "emptytag" + | "genentity" + | "numcharref" + | "paramentity" + | "pi" + | "xmlpi" + | "starttag" + | "sgmlcomment" + }?, + common.attrib, + sgmltag.role.attrib, + local.sgmltag.attrib +# end of sgmltag.attlist + +# end of sgmltag.module +local.structfield.attrib = empty +structfield.role.attrib = role.attrib +structfield = + element structfield { structfield.attlist, smallcptr.char.mix* } +# end of structfield.element +structfield.attlist &= + common.attrib, structfield.role.attrib, local.structfield.attrib +# end of structfield.attlist + +# end of structfield.module +local.structname.attrib = empty +structname.role.attrib = role.attrib +structname = + element structname { structname.attlist, smallcptr.char.mix* } +# end of structname.element +structname.attlist &= + common.attrib, structname.role.attrib, local.structname.attrib +# end of structname.attlist + +# end of structname.module +local.symbol.attrib = empty +symbol.role.attrib = role.attrib +symbol = element symbol { symbol.attlist, smallcptr.char.mix* } +# end of symbol.element + +# Class: Type of symbol; no default +symbol.attlist &= + attribute class { "limit" }?, + common.attrib, + symbol.role.attrib, + local.symbol.attrib +# end of symbol.attlist + +# end of symbol.module +local.systemitem.attrib = empty +systemitem.role.attrib = role.attrib +systemitem = + element systemitem { + systemitem.attlist, (cptr.char.mix | acronym | co)* + } +# end of systemitem.element + +# Class: Type of system item the element names; no default +systemitem.attlist &= + attribute class { + "constant" + | "event" + | "eventhandler" + | "domainname" + | "fqdomainname" + | "ipaddress" + | "netmask" + | "etheraddress" + | "groupname" + | "library" + | "macro" + | "osname" + | "filesystem" + | "resource" + | "systemname" + | "username" + | "newsgroup" + }?, + moreinfo.attrib, + common.attrib, + systemitem.role.attrib, + local.systemitem.attrib +# end of systemitem.attlist + +# end of systemitem.module +local.token.attrib = empty +token.role.attrib = role.attrib +\token = element token { token.attlist, smallcptr.char.mix* } +# end of token.element +token.attlist &= common.attrib, token.role.attrib, local.token.attrib +# end of token.attlist + +# end of token.module +local.type.attrib = empty +type.role.attrib = role.attrib +type = element type { type.attlist, smallcptr.char.mix* } +# end of type.element +type.attlist &= common.attrib, type.role.attrib, local.type.attrib +# end of type.attlist + +# end of type.module +local.userinput.attrib = empty +userinput.role.attrib = role.attrib +userinput = + element userinput { userinput.attlist, (cptr.char.mix | co)* } +# end of userinput.element +userinput.attlist &= + moreinfo.attrib, + common.attrib, + userinput.role.attrib, + local.userinput.attrib +# end of userinput.attlist + +# end of userinput.module + +# General words and phrases ............................................ +local.abbrev.attrib = empty +abbrev.role.attrib = role.attrib +abbrev = element abbrev { abbrev.attlist, word.char.mix* } +# end of abbrev.element +abbrev.attlist &= common.attrib, abbrev.role.attrib, local.abbrev.attrib +# end of abbrev.attlist + +# end of abbrev.module +local.acronym.attrib = empty +acronym.role.attrib = role.attrib +acronym = element acronym { acronym.attlist, word.char.mix* } +# end of acronym.element +acronym.attlist &= + common.attrib, acronym.role.attrib, local.acronym.attrib +# end of acronym.attlist + +# end of acronym.module +local.citation.attrib = empty +citation.role.attrib = role.attrib +citation = element citation { citation.attlist, para.char.mix* } +# end of citation.element +citation.attlist &= + common.attrib, citation.role.attrib, local.citation.attrib +# end of citation.attlist + +# end of citation.module +local.citerefentry.attrib = empty +citerefentry.role.attrib = role.attrib +citerefentry = + element citerefentry { + citerefentry.attlist, refentrytitle, manvolnum? + } +# end of citerefentry.element +citerefentry.attlist &= + common.attrib, citerefentry.role.attrib, local.citerefentry.attrib +# end of citerefentry.attlist + +# end of citerefentry.module +local.refentrytitle.attrib = empty +refentrytitle.role.attrib = role.attrib +refentrytitle = + element refentrytitle { refentrytitle.attlist, para.char.mix* } +# end of refentrytitle.element +refentrytitle.attlist &= + common.attrib, refentrytitle.role.attrib, local.refentrytitle.attrib +# end of refentrytitle.attlist + +# end of refentrytitle.module +local.manvolnum.attrib = empty +namvolnum.role.attrib = role.attrib +manvolnum = element manvolnum { manvolnum.attlist, word.char.mix* } +# end of manvolnum.element +manvolnum.attlist &= + common.attrib, namvolnum.role.attrib, local.manvolnum.attrib +# end of manvolnum.attlist + +# end of manvolnum.module +local.citetitle.attrib = empty +citetitle.role.attrib = role.attrib +citetitle = element citetitle { citetitle.attlist, para.char.mix* } +# end of citetitle.element + +# Pubwork: Genre of published work cited; no default +citetitle.attlist &= + attribute pubwork { + "article" + | "book" + | "chapter" + | "part" + | "refentry" + | "section" + | "journal" + | "series" + | "set" + | "manuscript" + }?, + common.attrib, + citetitle.role.attrib, + local.citetitle.attrib +# end of citetitle.attlist + +# end of citetitle.module +local.emphasis.attrib = empty +emphasis.role.attrib = role.attrib +emphasis = element emphasis { emphasis.attlist, para.char.mix* } +# end of emphasis.element +emphasis.attlist &= + common.attrib, emphasis.role.attrib, local.emphasis.attrib +# end of emphasis.attlist + +# end of emphasis.module +local.firstterm.attrib = empty +firstterm.role.attrib = role.attrib +firstterm = element firstterm { firstterm.attlist, word.char.mix* } +# end of firstterm.element + +# to GlossEntry or other explanation +firstterm.attlist &= + linkend.attrib, + common.attrib, + firstterm.role.attrib, + local.firstterm.attrib +# end of firstterm.attlist + +# end of firstterm.module +local.foreignphrase.attrib = empty +foreignphrase.role.attrib = role.attrib +foreignphrase = + element foreignphrase { foreignphrase.attlist, para.char.mix* } +# end of foreignphrase.element +foreignphrase.attlist &= + common.attrib, foreignphrase.role.attrib, local.foreignphrase.attrib +# end of foreignphrase.attlist + +# end of foreignphrase.module +local.glossterm.attrib = empty +glossterm.role.attrib = role.attrib +glossterm = element glossterm { glossterm.attlist, para.char.mix* } +# end of glossterm.element + +# to GlossEntry if Glossterm used in text + +# BaseForm: Provides the form of GlossTerm to be used +# for indexing +glossterm.attlist &= + linkend.attrib, + attribute baseform { text }?, + common.attrib, + glossterm.role.attrib, + local.glossterm.attrib +# end of glossterm.attlist + +# end of glossterm.module +local.phrase.attrib = empty +phrase.role.attrib = role.attrib +phrase = element phrase { phrase.attlist, para.char.mix* } +# end of phrase.element +phrase.attlist &= common.attrib, phrase.role.attrib, local.phrase.attrib +# end of phrase.attlist + +# end of phrase.module +local.quote.attrib = empty +quote.role.attrib = role.attrib +quote = element quote { quote.attlist, para.char.mix* } +# end of quote.element +quote.attlist &= common.attrib, quote.role.attrib, local.quote.attrib +# end of quote.attlist + +# end of quote.module +local.ssscript.attrib = empty +ssscript.role.attrib = role.attrib +subscript = + element subscript { + subscript.attlist, + (text + | link.char.class + | emphasis + | replaceable + | symbol + | inlinegraphic + | inlinemediaobject + | base.char.class + | other.char.class)* + } +# end of subscript.element +subscript.attlist &= + common.attrib, ssscript.role.attrib, local.ssscript.attrib +# end of subscript.attlist +superscript = + element superscript { + superscript.attlist, + (text + | link.char.class + | emphasis + | replaceable + | symbol + | inlinegraphic + | inlinemediaobject + | base.char.class + | other.char.class)* + } +# end of superscript.element +superscript.attlist &= + common.attrib, ssscript.role.attrib, local.ssscript.attrib +# end of superscript.attlist + +# end of ssscript.module +local.trademark.attrib = empty +trademark.role.attrib = role.attrib +trademark = + element trademark { + trademark.attlist, + (text + | link.char.class + | tech.char.class + | base.char.class + | other.char.class + | inlinegraphic + | inlinemediaobject + | emphasis)* + } +# end of trademark.element + +# Class: More precisely identifies the item the element names +trademark.attlist &= + [ a:defaultValue = "trade" ] + attribute class { "service" | "trade" | "registered" | "copyright" }?, + common.attrib, + trademark.role.attrib, + local.trademark.attrib +# end of trademark.attlist + +# end of trademark.module +local.wordasword.attrib = empty +wordasword.role.attrib = role.attrib +wordasword = element wordasword { wordasword.attlist, word.char.mix* } +# end of wordasword.element +wordasword.attlist &= + common.attrib, wordasword.role.attrib, local.wordasword.attrib +# end of wordasword.attlist + +# end of wordasword.module + +# Links and cross-references ........................................... +local.link.attrib = empty +link.role.attrib = role.attrib +link = element link { link.attlist, para.char.mix* } +# end of link.element + +# Endterm: ID of element containing text that is to be +# fetched from elsewhere in the document to appear as +# the content of this element + +# to linked-to object + +# Type: Freely assignable parameter +link.attlist &= + attribute endterm { xsd:IDREF }?, + linkendreq.attrib, + attribute type { text }?, + common.attrib, + link.role.attrib, + local.link.attrib +# end of link.attlist + +# end of link.module +local.olink.attrib = empty +olink.role.attrib = role.attrib +olink = element olink { olink.attlist, para.char.mix* } +# end of olink.element + +# TargetDocEnt: Name of an entity to be the target of the link + +# LinkMode: ID of a ModeSpec containing instructions for +# operating on the entity named by TargetDocEnt + +# LocalInfo: Information that may be passed to ModeSpec + +# Type: Freely assignable parameter +olink.attlist &= + attribute targetdocent { xsd:ENTITY }?, + attribute linkmode { xsd:IDREF }?, + attribute localinfo { text }?, + attribute type { text }?, + attribute targetdoc { text }?, + attribute targetptr { text }?, + common.attrib, + olink.role.attrib, + local.olink.attrib +# end of olink.attlist + +# end of olink.module +local.ulink.attrib = empty +ulink.role.attrib = role.attrib +ulink = element ulink { ulink.attlist, para.char.mix* } +# end of ulink.element + +# URL: uniform resource locator; the target of the ULink + +# Type: Freely assignable parameter +ulink.attlist &= + attribute url { text }, + attribute type { text }?, + common.attrib, + ulink.role.attrib, + local.ulink.attrib +# end of ulink.attlist + +# end of ulink.module +local.footnoteref.attrib = empty +footnoteref.role.attrib = role.attrib +footnoteref = element footnoteref { footnoteref.attlist, empty } +# end of footnoteref.element + +# to footnote content supplied elsewhere +footnoteref.attlist &= + linkendreq.attrib, + label.attrib, + common.attrib, + footnoteref.role.attrib, + local.footnoteref.attrib +# end of footnoteref.attlist + +# end of footnoteref.module +local.xref.attrib = empty +xref.role.attrib = role.attrib +xref = element xref { xref.attlist, empty } +# end of xref.element + +# Endterm: ID of element containing text that is to be +# fetched from elsewhere in the document to appear as +# the content of this element + +# to linked-to object +xref.attlist &= + attribute endterm { xsd:IDREF }?, + linkendreq.attrib, + common.attrib, + xref.role.attrib, + local.xref.attrib +# end of xref.attlist + +# end of xref.module + +# Ubiquitous elements .................................................. +local.anchor.attrib = empty +anchor.role.attrib = role.attrib +anchor = element anchor { anchor.attlist, empty } +# end of anchor.element + +# required + +# replaces Lang +anchor.attlist &= + idreq.attrib, + pagenum.attrib, + remap.attrib, + xreflabel.attrib, + revisionflag.attrib, + effectivity.attrib, + anchor.role.attrib, + local.anchor.attrib +# end of anchor.attlist + +# end of anchor.module +local.beginpage.attrib = empty +beginpage.role.attrib = role.attrib +beginpage = element beginpage { beginpage.attlist, empty } +# end of beginpage.element + +# PageNum: Number of page that begins at this point +beginpage.attlist &= + pagenum.attrib, + common.attrib, + beginpage.role.attrib, + local.beginpage.attrib +# end of beginpage.attlist + +# end of beginpage.module + +# IndexTerms appear in the text flow for generating or linking an +# index. +local.indexterm.attrib = empty +indexterm.role.attrib = role.attrib +indexterm = + element indexterm { + indexterm.attlist, + primary?, + ((secondary, + ((tertiary, (see | seealso+)?) + | see + | seealso+)?) + | see + | seealso+)? + } +# end of indexterm.element + +# Scope: Indicates which generated indices the IndexTerm +# should appear in: Global (whole document set), Local (this +# document only), or All (both) + +# Significance: Whether this IndexTerm is the most pertinent +# of its series (Preferred) or not (Normal, the default) + +# Class: Indicates type of IndexTerm; default is Singular, +# or EndOfRange if StartRef is supplied; StartOfRange value +# must be supplied explicitly on starts of ranges + +# StartRef: ID of the IndexTerm that starts the indexing +# range ended by this IndexTerm + +# Zone: IDs of the elements to which the IndexTerm applies, +# and indicates that the IndexTerm applies to those entire +# elements rather than the point at which the IndexTerm +# occurs +indexterm.attlist &= + pagenum.attrib, + attribute scope { "all" | "global" | "local" }?, + [ a:defaultValue = "normal" ] + attribute significance { "preferred" | "normal" }?, + attribute class { "singular" | "startofrange" | "endofrange" }?, + attribute startref { xsd:IDREF }?, + attribute zone { xsd:IDREFS }?, + common.attrib, + indexterm.role.attrib, + local.indexterm.attrib +# end of indexterm.attlist + +# end of indexterm.module +local.primsecter.attrib = empty +primsecter.role.attrib = role.attrib +primary = element primary { primary.attlist, ndxterm.char.mix* } +# end of primary.element + +# SortAs: Alternate sort string for index sorting, e.g., +# "fourteen" for an element containing "14" +primary.attlist &= + attribute sortas { text }?, + common.attrib, + primsecter.role.attrib, + local.primsecter.attrib +# end of primary.attlist +secondary = element secondary { secondary.attlist, ndxterm.char.mix* } +# end of secondary.element + +# SortAs: Alternate sort string for index sorting, e.g., +# "fourteen" for an element containing "14" +secondary.attlist &= + attribute sortas { text }?, + common.attrib, + primsecter.role.attrib, + local.primsecter.attrib +# end of secondary.attlist +tertiary = element tertiary { tertiary.attlist, ndxterm.char.mix* } +# end of tertiary.element + +# SortAs: Alternate sort string for index sorting, e.g., +# "fourteen" for an element containing "14" +tertiary.attlist &= + attribute sortas { text }?, + common.attrib, + primsecter.role.attrib, + local.primsecter.attrib +# end of tertiary.attlist + +# end of primsecter.module +local.seeseealso.attrib = empty +seeseealso.role.attrib = role.attrib +see = element see { see.attlist, ndxterm.char.mix* } +# end of see.element +see.attlist &= + common.attrib, seeseealso.role.attrib, local.seeseealso.attrib +# end of see.attlist +seealso = element seealso { seealso.attlist, ndxterm.char.mix* } +# end of seealso.element +seealso.attlist &= + common.attrib, seeseealso.role.attrib, local.seeseealso.attrib +# end of seealso.attlist + +# end of seeseealso.module + +# end of indexterm.content.module + +# End of DocBook XML information pool module V4.2 ...................... + +# ......................................................................
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/dbsoextbl.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,30 @@ +# Definitions specific to the OASIS XML Exchange Table Model. + +# Reference OASIS Exchange Table Model +include "soextbl.rnc" { + # Override definition of start + start |= notAllowed + # Add common attributes and the Label attribute to Table and + # InformalTable. + bodyatt = common.attrib, label.attrib, tables.role.attrib + # Add common attributes to TGroup, ColSpec, TBody, THead, Row, Entry + tbl.tgroup.att = common.attrib + tbl.colspec.att = common.attrib + tbl.tbody.att = common.attrib + tbl.thead.att = common.attrib + tbl.row.att = common.attrib + tbl.entry.att = common.attrib + # Content model for Table. + tbl.table.mdl = + blockinfo?, + formalobject.title.content, + ndxterm.class*, + textobject*, + (graphic+ | mediaobject+ | tgroup+) + # Allow either objects or inlines; beware of REs between elements. + tbl.entry.mdl = (para.char.mix | tabentry.mix)* +} + +common.table.attribs = bodyatt + +# end of table.module
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/dbstart.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,23 @@ +# This choice of root elements comes from the 1.0b1 RNG schema at +# http://www.oasis-open.org/docbook/relaxng/1.0b1/index.shtml + +start = + set + | setindex + | book + | part + | reference + | preface + | chapter + | appendix + | article + | bibliography + | glossary + | index + | refentry + | sect1 + | sect2 + | sect3 + | sect4 + | sect5 + | section
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/docbook-dyntbl.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,18 @@ +# Variant of docbook.rnc that allows the table model to be selected +# dynamically based on the definitions of cals.table.module and +# exchange.table.module. See dbdyntbl.rnc. + +# Document (root) elements +include "dbstart.rnc" + +# Notation declarations +include "dbnotn.rnc" + +# Information pool +include "dbpool.rnc" + +# Dynamic Table Model +include "dbdyntbl.rnc" + +# Document hierarchy +include "dbhier.rnc"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/docbook-soextbl.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,17 @@ +# Variant of docbook.rnc that uses the OASIS XML Exchange Table Model +# rather than the CALS Table Model. + +# Document (root) elements +include "dbstart.rnc" + +# Notation declarations +include "dbnotn.rnc" + +# Information pool +include "dbpool.rnc" + +# OASIS XML Exchange Table Model +include "dbsoextbl.rnc" + +# Document hierarchy +include "dbhier.rnc"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/docbook.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,48 @@ +# Unofficial DocBook RELAX NG Compact Syntax schema + +# This file was generated automatically by Trang +# (http://www.thaiopensource.com/relaxng/trang.html) from the DocBook +# XML DTD V4.2 (http://www.oasis-open.org/docbook/xml/4.2/), then +# changing the definition of start, changing the filenames, +# editing the comments and adding includes of dbstart.rnc +# and dbcalstbl.rnc. + +# The following copyright applies to the DocBook XML DTD V4.2. + +# Copyright 1992-2002 HaL Computer Systems, Inc., +# O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software +# Corporation, Norman Walsh, Sun Microsystems, Inc., and the +# Organization for the Advancement of Structured Information +# Standards (OASIS). +# +# Permission to use, copy, modify and distribute the DocBook XML DTD +# and its accompanying documentation for any purpose and without fee +# is hereby granted in perpetuity, provided that the above copyright +# notice and this paragraph appear in all copies. The copyright +# holders make no representation about the suitability of the DTD for +# any purpose. It is provided "as is" without expressed or implied +# warranty. +# +# If you modify the DocBook DTD in any way, except for declaring and +# referencing additional sets of general entities and declaring +# additional notations, label your DTD as a variant of DocBook. See +# the maintenance documentation for more information. +# +# Please direct all questions, bug reports, or suggestions for +# changes to the docbook@lists.oasis-open.org mailing list. For more +# information, see http://www.oasis-open.org/docbook/. + +# Document (root) elements +include "dbstart.rnc" + +# Notation declarations +include "dbnotn.rnc" + +# Information pool +include "dbpool.rnc" + +# CALS Table Model +include "dbcalstbl.rnc" + +# Document hierarchy +include "dbhier.rnc"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/locate.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,200 @@ +default namespace this = "http://thaiopensource.com/ns/locating-rules/1.0" +namespace local = "" + +start = locatingRules + +locatingRules = element locatingRules { common, rule* } + +rule = + \include + # | group + | applyFollowingRules + | documentElement + # | doctypePublicId + | \namespace + | uri + | transformURI + # | typeIdProcessingInstruction + | \default + | typeId + # | typeIdBase + | extensionRule + +## Group of rules. Useful with xml:base. +group = element group { common, rule* } + +\include = + element include { + common, + attribute rules { xsd:anyURI } + } + +applyFollowingRules = + element applyFollowingRules { + common, + attribute ruleType { + "documentElement" + | "doctypePublicId" + | "namespace" + | "uri" + | "transformURI" + | "typeIdProcessingInstruction" + | "default" + } + } + +documentElement = + ## Matches if the prefix and/or local name of document element + ## match the values of the prefix and localName attributes. + element documentElement { + common, + nameAtts, + targetAtt + } + +## If there's no prefix attribute, then only the local name must match. +## If there's no local name attribute, then only the prefix must match. +nameAtts = (prefixAtt, localNameAtt?) | localNameAtt + +## prefix="" matches if the document element has no prefix. +prefixAtt = attribute prefix { (xsd:NCName - "xmlns") | "" } +localNameAtt = attribute localName { xsd:NCName - "xmlns" } + +doctypePublicId = + ## Matches if the document has a DOCTYPE declaration with a public + ## identifier that, after normalization, matches the value of the + ## publicId attribute. + element doctypePublicId { + common, + attribute publicId { publicIdValue }, + targetAtt + } + +publicIdValue = + xsd:token { + ## Newline and tab are excluded, because pattern applies to + ## the post-normalization value. + pattern = "[\-'()+,./:=?;!*#@$_%a-zA-Z0-9 ]*" + } + +# This is separate from documentElement so it can be distinguished +# by applyFollowingRules. +\namespace = + ## Matches if the document element has a namespace URI equal to the value + ## of the ns attribute. A document element with no namespace matches if + ## the value of the ns attribute is the empty string. + element namespace { + common, + attribute ns { xsd:string }, + targetAtt + } + +uri = + ## Matches based on the URI of the document. + element uri { + common, + (resourceAtt | patternAtt), + targetAtt + } + +## Matches if it can be determined that the document resource is +## the same resource as that identified by the value of the resource +## attribute. In determining this, the implementation should apply +## the semantics of the URI scheme used by the URI. +resourceAtt = attribute resource { xsd:anyURI } + +## Matches if the document's URI matches the pattern specified +## by the pattern attribute. A * in the path component matches +## zero or more characters other than / (after resolving escapes). +## If the pattern is a relative URI, it means that there must +## be some URI such that when the pattern is resolved relative +## to that URI, it matches the document's URI. Thus an empty +## pattern will always match. +patternAtt = attribute pattern { uriPattern } + +## A pattern for a URI. Same syntax as a URI, except that a * in +## the path component has a special meaning. +uriPattern = xsd:anyURI + +transformURI = + ## Generates a URI for the related resource by transforming + ## the URI of the document. Matches if the transformation + ## yields a valid URI that identifies an existing resource. + element transformURI { + common, + ## Semantics are the same as the pattern attribute of the uri element. + attribute fromPattern { uriPattern }, + ## The result of the transformation is produced from the toPattern + ## by replacing each * by the string that matched the corresponding + ## * in the toPattern. The toPattern is appended to the initial + ## part of the document's URI that was not explicitly matched + ## by fromPattern. + attribute toPattern { uriPattern } + } + +\default = + ## Always matches. + element default { + common, + targetAtt + } + +## A document can be mapped onto a URI either indirectly via a typeId +## or directly. +targetAtt = uriAtt | typeIdAtt + +## Specifies the URI of the related resource. +## xml:base is used if it's relative. +uriAtt = attribute uri { xsd:anyURI } + +## Specifies an identifier of the type of document. typeId and +## typeIdBase rules will be used to map this to a URI. +typeIdAtt = attribute typeId { typeIdValue } + +## A type identifier can be anything convenient (e.g. a public identifier, +## a URL or just a string with no formal structure). Whitespace is +## normalized like a public identifier before comparing type identifiers +## for equality. +typeIdValue = xsd:token + +typeIdProcessingInstruction = + ## Matches if there's a processing instruction in the prolog + ## before any DOCTYPE declaration whose target is the value of + ## the target attribute. The value of the processing instruction + ## is interpreted as a typeId, which will be mapped to a + ## URI as normal. + element typeIdProcessingInstruction { + common, + attribute target { xsd:NCName } + } + +typeId = + ## Maps a typeId onto a URI. + element typeId { + common, + attribute id { typeIdValue }, + targetAtt + } + +typeIdBase = + ## Used to map a typeId onto a URI. First, any URI reserved characters + ## are URI encoded. If the append attribute is specified, it is appended. + ## This is then treated as a URI. If relative, it is resolved using + ## the applicable base URI as usual. If the resulting URI identifies + ## an existing resource, then the typeId is mapped to this resource. + ## This is intended to be useful with file URIs. + element typeIdBase { + common, + attribute append { xsd:string }? + } + +extensionRule = + element * - this:* { + attribute * { text }*, (text|anyElement)* + } + +anyElement = element * { attribute * { text }*, (text|anyElement)* } + +common = + # attribute xml:base { xsd:anyURI }?, + attribute * - (xml:base|this:*|local:*) { text }*
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/rdfxml.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,205 @@ +# +# RELAX NG Compact Schema for RDF/XML Syntax +# +# This schema is for information only and NON-NORMATIVE +# +# It is based on one originally written by James Clark in +# http://lists.w3.org/Archives/Public/www-rdf-comments/2001JulSep/0248.html +# and updated with later changes. +# + +namespace local = "" +namespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#" +datatypes xsd = "http://www.w3.org/2001/XMLSchema-datatypes" + + +start = doc + + +# I cannot seem to do this in RNGC so they are expanded in-line + +# coreSyntaxTerms = rdf:RDF | rdf:ID | rdf:about | rdf:parseType | rdf:resource | rdf:nodeID | rdf:datatype +# syntaxTerms = coreSyntaxTerms | rdf:Description | rdf:li +# oldTerms = rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID +# nodeElementURIs = * - ( coreSyntaxTerms | rdf:li | oldTerms ) +# propertyElementURIs = * - ( coreSyntaxTerms | rdf:Description | oldTerms ) +# propertyAttributeURIs = * - ( coreSyntaxTerms | rdf:Description | rdf:li | oldTerms ) + +# Also needed to allow rdf:li on all property element productions +# since we can't capture the rdf:li rewriting to rdf_<n> in relaxng + +# Need to add these explicitly +xmllang = attribute xml:lang { text } +xmlbase = attribute xml:base { text } +# and to forbid every other xml:* attribute, element + +doc = + RDF + +RDF = + element rdf:RDF { + xmllang?, xmlbase?, nodeElementList +} + +nodeElementList = + nodeElement* + + # Should be something like: + # ws* , ( nodeElement , ws* )* + # but RELAXNG does this by default, ignoring whitespace separating tags. + +nodeElement = + element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | + rdf:resource | rdf:nodeID | rdf:datatype | rdf:li | + rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID ) { + (idAttr | nodeIdAttr | aboutAttr )?, xmllang?, xmlbase?, propertyAttr*, propertyEltList + } + + # It is not possible to say "and not things + # beginning with _ in the rdf: namespace" in RELAX NG. + +ws = + " " + + # Not used in this RELAX NG schema; but should be any legal XML + # whitespace defined by http://www.w3.org/TR/2000/REC-xml-20001006#NT-S + + +propertyEltList = + propertyElt* + + # Should be something like: + # ws* , ( propertyElt , ws* )* + # but RELAXNG does this by default, ignoring whitespace separating tags. + +propertyElt = + resourcePropertyElt | + literalPropertyElt | + parseTypeLiteralPropertyElt | + parseTypeResourcePropertyElt | + parseTypeCollectionPropertyElt | + parseTypeOtherPropertyElt | + emptyPropertyElt + +resourcePropertyElt = + element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | + rdf:resource | rdf:nodeID | rdf:datatype | + rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID | + xml:* ) { + idAttr?, xmllang?, xmlbase?, nodeElement + } + +literalPropertyElt = + element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | + rdf:resource | rdf:nodeID | rdf:datatype | + rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID | + xml:* ) { + (idAttr | datatypeAttr )?, xmllang?, xmlbase?, text + } + +parseTypeLiteralPropertyElt = + element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | + rdf:resource | rdf:nodeID | rdf:datatype | + rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID | + xml:* ) { + idAttr?, parseLiteral, xmllang?, xmlbase?, literal + } + +parseTypeResourcePropertyElt = + element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | + rdf:resource | rdf:nodeID | rdf:datatype | + rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID | + xml:* ) { + idAttr?, parseResource, xmllang?, xmlbase?, propertyEltList + } + +parseTypeCollectionPropertyElt = + element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | + rdf:resource | rdf:nodeID | rdf:datatype | + rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID | + xml:* ) { + idAttr?, xmllang?, xmlbase?, parseCollection, nodeElementList + } + +parseTypeOtherPropertyElt = + element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | + rdf:resource | rdf:nodeID | rdf:datatype | + rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID | + xml:* ) { + idAttr?, xmllang?, xmlbase?, parseOther, any + } + +emptyPropertyElt = + element * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | + rdf:resource | rdf:nodeID | rdf:datatype | + rdf:Description | rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID | + xml:* ) { + idAttr?, (resourceAttr | nodeIdAttr)?, xmllang?, xmlbase?, propertyAttr* + } + +idAttr = + attribute rdf:ID { + IDsymbol + } + +nodeIdAttr = + attribute rdf:nodeID { + IDsymbol + } + +aboutAttr = + attribute rdf:about { + URI-reference + } + +propertyAttr = + attribute * - ( local:* | rdf:RDF | rdf:ID | rdf:about | rdf:parseType | + rdf:resource | rdf:nodeID | rdf:datatype | rdf:li | + rdf:Description | rdf:aboutEach | + rdf:aboutEachPrefix | rdf:bagID | + xml:* ) { + string + } + +resourceAttr = + attribute rdf:resource { + URI-reference + } + +datatypeAttr = + attribute rdf:datatype { + URI-reference + } + +parseLiteral = + attribute rdf:parseType { + "Literal" + } + +parseResource = + attribute rdf:parseType { + "Resource" + } + +parseCollection = + attribute rdf:parseType { + "Collection" + } + +parseOther = + attribute rdf:parseType { + text + } + +URI-reference = + string + +literal = + any + +IDsymbol = + xsd:NMTOKEN + +any = + mixed { element * { attribute * { text }*, any }* } +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/relaxng.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,63 @@ +# RELAX NG XML syntax expressed in RELAX NG Compact syntax. + +default namespace rng = "http://relaxng.org/ns/structure/1.0" +namespace local = "" +datatypes xsd = "http://www.w3.org/2001/XMLSchema-datatypes" + +start = pattern + +pattern = + element element { (nameQName | nameClass), (common & pattern+) } + | element attribute { (nameQName | nameClass), (common & pattern?) } + | element group|interleave|choice|optional + |zeroOrMore|oneOrMore|list|mixed { common & pattern+ } + | element ref|parentRef { nameNCName, common } + | element empty|notAllowed|text { common } + | element data { type, param*, (common & exceptPattern?) } + | element value { commonAttributes, type?, xsd:string } + | element externalRef { href, common } + | element grammar { common & grammarContent* } + +param = element param { commonAttributes, nameNCName, xsd:string } + +exceptPattern = element except { common & pattern+ } + +grammarContent = + definition + | element div { common & grammarContent* } + | element include { href, (common & includeContent*) } + +includeContent = + definition + | element div { common & includeContent* } + +definition = + element start { combine?, (common & pattern+) } + | element define { nameNCName, combine?, (common & pattern+) } + +combine = attribute combine { "choice" | "interleave" } + +nameClass = + element name { commonAttributes, xsd:QName } + | element anyName { common & exceptNameClass? } + | element nsName { common & exceptNameClass? } + | element choice { common & nameClass+ } + +exceptNameClass = element except { common & nameClass+ } + +nameQName = attribute name { xsd:QName } +nameNCName = attribute name { xsd:NCName } +href = attribute href { xsd:anyURI } +type = attribute type { xsd:NCName } + +common = commonAttributes, foreignElement* + +commonAttributes = + attribute ns { xsd:string }?, + attribute datatypeLibrary { xsd:anyURI }?, + foreignAttribute* + +foreignElement = element * - rng:* { (anyAttribute | text | anyElement)* } +foreignAttribute = attribute * - (rng:*|local:*) { text } +anyElement = element * { (anyAttribute | text | anyElement)* } +anyAttribute = attribute * { text }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/schemas.xml Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,36 @@ +<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0"> + <transformURI fromPattern="*.xml" toPattern="*.rnc"/> + + <uri pattern="*.xsl" typeId="XSLT"/> + <uri pattern="*.html" typeId="XHTML"/> + <uri pattern="*.rng" typeId="RELAX NG"/> + <uri pattern="*.rdf" typeId="RDF"/> + + <namespace ns="http://www.w3.org/1999/XSL/Transform" typeId="XSLT"/> + <namespace ns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" typeId="RDF"/> + <namespace ns="http://www.w3.org/1999/xhtml" typeId="XHTML"/> + <namespace ns="http://relaxng.org/ns/structure/1.0" typeId="RELAX NG"/> + <namespace ns="http://thaiopensource.com/ns/locating-rules/1.0" + uri="locate.rnc"/> + + <documentElement localName="stylesheet" typeId="XSLT"/> + <documentElement prefix="xsl" localName="transform" typeId="XSLT"/> + + <documentElement localName="html" typeId="XHTML"/> + + <documentElement localName="grammar" typeId="RELAX NG"/> + + <documentElement prefix="" localName="article" typeId="DocBook"/> + <documentElement prefix="" localName="book" typeId="DocBook"/> + + <documentElement localName="RDF" typeId="RDF"/> + <documentElement prefix="rdf" typeId="RDF"/> + + <documentElement localName="locatingRules" uri="locate.rnc"/> + + <typeId id="XSLT" uri="xslt.rnc"/> + <typeId id="RELAX NG" uri="relaxng.rnc"/> + <typeId id="XHTML" uri="xhtml.rnc"/> + <typeId id="DocBook" uri="docbook.rnc"/> + <typeId id="RDF" uri="rdfxml.rnc"/> +</locatingRules>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/soextbl.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,260 @@ +# XML EXCHANGE TABLE MODEL DECLARATION MODULE + +# This set of declarations defines the XML version of the Exchange +# Table Model as of the date shown in the Formal Public Identifier +# (FPI) for this entity. +# +# This set of declarations may be referred to using a public external +# entity declaration and reference as shown in the following three +# lines: +# +# <!ENTITY % calstblx +# PUBLIC "-//OASIS//DTD XML Exchange Table Model 19990315//EN"> +# %calstblx; +# +# If various parameter entities used within this set of declarations +# are to be given non-default values, the appropriate declarations +# should be given before calling in this package (i.e., before the +# "%calstblx;" reference). + +# The motivation for this XML version of the Exchange Table Model +# is simply to create an XML version of the SGML Exchange Table +# Model. By design, no effort has been made to "improve" the model. +# +# This XML version incorporates the logical bare minimum changes +# necessary to make the Exchange Table Model a valid XML DTD. + +# The XML version of the Exchange Table Model differs from +# the SGML version in the following ways: +# +# The following parameter entities have been removed: +# +# - tbl.table.excep, tbl.hdft.excep, tbl.row.excep, tbl.entry.excep +# There are no exceptions in XML. The following normative statement +# is made in lieu of exceptions: the exchange table model explicitly +# forbids a table from occurring within another table. If the +# content model of an entry includes a table element, then this +# cannot be enforced by the DTD, but it is a deviation from the +# exchange table model to include a table within a table. +# +# - tbl.hdft.name, tbl.hdft.mdl, tbl.hdft.excep, tbl.hdft.att +# The motivation for these elements was to change the table +# header/footer elements. Since XML does not allow element declarations +# to contain name groups, and the exchange table model does not +# allow a table to contain footers, the continued presence of these +# attributes seems unnecessary. +# +# The following parameter entity has been added: +# +# - tbl.thead.att +# This entity parameterizes the attributes on thead. It replaces +# the tbl.hdft.att parameter entity. +# +# Other miscellaneous changes: +# +# - Tag ommission indicators have been removed +# - Comments have been removed from declarations +# - NUMBER attributes have been changed to NMTOKEN +# - NUTOKEN attributes have been to changed to NMTOKEN +# - Removed the grouping characters around the content model +# parameter entry for the 'entry' element. This is necessary +# so that an entry can contain #PCDATA and be defined as an +# optional, repeatable OR group beginning with #PCDATA. + +# This entity includes a set of element and attribute declarations +# that partially defines the Exchange table model. However, the model +# is not well-defined without the accompanying natural language +# description of the semantics (meanings) of these various elements, +# attributes, and attribute values. The semantic writeup, also available +# from SGML Open, should be used in conjunction with this entity. + +# In order to use the Exchange table model, various parameter entity +# declarations are required. A brief description is as follows: +# +# ENTITY NAME WHERE USED WHAT IT IS +# +# %yesorno In ATTLIST of: An attribute declared value +# almost all elements for a "boolean" attribute +# +# %paracon In content model of: The "text" (logical content) +# <entry> of the model group for <entry> +# +# %titles In content model of: The "title" part of the model +# table element group for the table element +# +# %tbl.table.name In declaration of: The name of the "table" +# table element element +# +# %tbl.table-titles.mdl In content model of: The model group for the title +# table elements part of the content model for +# table element +# +# %tbl.table.mdl In content model of: The model group for the content +# table elements model for table element, +# often (and by default) defined +# in terms of %tbl.table-titles.mdl +# and tgroup +# +# %tbl.table.att In ATTLIST of: Additional attributes on the +# table element table element +# +# %bodyatt In ATTLIST of: Additional attributes on the +# table element table element (for backward +# compatibility with the SGML +# model) +# +# %tbl.tgroup.mdl In content model of: The model group for the content +# <tgroup> model for <tgroup> +# +# %tbl.tgroup.att In ATTLIST of: Additional attributes on the +# <tgroup> <tgroup> element +# +# %tbl.thead.att In ATTLIST of: Additional attributes on the +# <thead> <thead> element +# +# %tbl.tbody.att In ATTLIST of: Additional attributes on the +# <tbody> <tbody> element +# +# %tbl.colspec.att In ATTLIST of: Additional attributes on the +# <colspec> <colspec> element +# +# %tbl.row.mdl In content model of: The model group for the content +# <row> model for <row> +# +# %tbl.row.att In ATTLIST of: Additional attributes on the +# <row> <row> element +# +# %tbl.entry.mdl In content model of: The model group for the content +# <entry> model for <entry> +# +# %tbl.entry.att In ATTLIST of: Additional attributes on the +# <entry> <entry> element +# +# This set of declarations will use the default definitions shown below +# for any of these parameter entities that are not declared before this +# set of declarations is referenced. + +# These definitions are not directly related to the table model, but are +# used in the default CALS table model and may be defined elsewhere (and +# prior to the inclusion of this table module) in the referencing DTD. + +yesorno = xsd:NMTOKEN +# no if zero(s), yes if any other value +pcd = text +paracon = pcd +# default for use in entry content + +# The parameter entities as defined below change and simplify the CALS table +# model as published (as part of the Example DTD) in MIL-HDBK-28001. The +# resulting simplified DTD has support from the SGML Open vendors and is +# therefore more interoperable among different systems. +# +# These following declarations provide the Exchange default definitions +# for these entities. However, these entities can be redefined (by giving +# the appropriate parameter entity declaration(s) prior to the reference +# to this Table Model declaration set entity) to fit the needs of the +# current application. +# +# Note, however, that changes may have significant effect on the ability to +# interchange table information. These changes may manifest themselves +# in useability, presentation, and possible structure information degradation. +tbl.table-titles.mdl = title +tbl.table-main.mdl = tgroup+ +tbl.table.mdl = tbl.table-titles.mdl | tbl.table-main.mdl +tbl.table.att = attribute pgwide { yesorno }? +bodyatt = empty +tbl.tgroup.mdl = colspec*, thead?, tbody +tbl.tgroup.att = empty +tbl.thead.att = empty +tbl.tbody.att = empty +tbl.colspec.att = empty +tbl.row.mdl = entry+ +tbl.row.att = empty +tbl.entry.mdl = paracon* +tbl.entry.att = empty +# ===== Element and attribute declarations follow. ===== + +# Default declarations previously defined in this entity and +# referenced below include: +# ENTITY % tbl.table.name "table" +# ENTITY % tbl.table-titles.mdl "%titles;," +# ENTITY % tbl.table.mdl "%tbl.table-titles; tgroup+" +# ENTITY % tbl.table.att " +# pgwide %yesorno; #IMPLIED " +table = element table { table.attlist, tbl.table.mdl } +table.attlist &= + attribute frame { + "top" | "bottom" | "topbot" | "all" | "sides" | "none" + }?, + attribute colsep { yesorno }?, + attribute rowsep { yesorno }?, + tbl.table.att, + bodyatt +# Default declarations previously defined in this entity and +# referenced below include: +# ENTITY % tbl.tgroup.mdl "colspec*,thead?,tbody" +# ENTITY % tbl.tgroup.att "" +tgroup = element tgroup { tgroup.attlist, tbl.tgroup.mdl } +tgroup.attlist &= + attribute cols { xsd:NMTOKEN }, + attribute colsep { yesorno }?, + attribute rowsep { yesorno }?, + attribute align { "left" | "right" | "center" | "justify" | "char" }?, + tbl.tgroup.att +# Default declarations previously defined in this entity and +# referenced below include: +# ENTITY % tbl.colspec.att "" +colspec = element colspec { colspec.attlist, empty } +colspec.attlist &= + attribute colnum { xsd:NMTOKEN }?, + attribute colname { xsd:NMTOKEN }?, + attribute colwidth { text }?, + attribute colsep { yesorno }?, + attribute rowsep { yesorno }?, + attribute align { "left" | "right" | "center" | "justify" | "char" }?, + attribute char { text }?, + attribute charoff { xsd:NMTOKEN }?, + tbl.colspec.att +# Default declarations previously defined in this entity and +# referenced below include: +# ENTITY % tbl.thead.att "" +thead = element thead { thead.attlist, row+ } +thead.attlist &= + attribute valign { "top" | "middle" | "bottom" }?, + tbl.thead.att +# Default declarations previously defined in this entity and +# referenced below include: +# ENTITY % tbl.tbody.att "" +tbody = element tbody { tbody.attlist, row+ } +tbody.attlist &= + attribute valign { "top" | "middle" | "bottom" }?, + tbl.tbody.att +# Default declarations previously defined in this entity and +# referenced below include: +# ENTITY % tbl.row.mdl "entry+" +# ENTITY % tbl.row.att "" +row = element row { row.attlist, tbl.row.mdl } +row.attlist &= + attribute rowsep { yesorno }?, + attribute valign { "top" | "middle" | "bottom" }?, + tbl.row.att +# Default declarations previously defined in this entity and +# referenced below include: +# ENTITY % paracon "#PCDATA" +# ENTITY % tbl.entry.mdl "(%paracon;)*" +# ENTITY % tbl.entry.att "" +entry = element entry { entry.attlist, tbl.entry.mdl } +entry.attlist &= + attribute colname { xsd:NMTOKEN }?, + attribute namest { xsd:NMTOKEN }?, + attribute nameend { xsd:NMTOKEN }?, + attribute morerows { xsd:NMTOKEN }?, + attribute colsep { yesorno }?, + attribute rowsep { yesorno }?, + attribute align { "left" | "right" | "center" | "justify" | "char" }?, + attribute char { text }?, + attribute charoff { xsd:NMTOKEN }?, + attribute valign { "top" | "middle" | "bottom" }?, + tbl.entry.att +title |= notAllowed +start = table
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-applet.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,19 @@ +# Applet Module + +applet = + element applet { + applet.attlist, + # No restrictions on mixed content in TREX. + param*, + Flow.model + } +applet.attlist = + Core.attrib, + attribute alt { Text.datatype }, + attribute archive { text }?, + attribute code { text }?, + attribute codebase { URI.datatype }?, + attribute object { text }?, + attribute height { Length.datatype }, + attribute width { Length.datatype } +Inline.class |= applet
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-attribs.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,14 @@ +# Common Attributes Module + +id.attrib = attribute id { ID.datatype }? +class.attrib = attribute class { NMTOKENS.datatype }? +title.attrib = attribute title { Text.datatype }? +Core.attrib = id.attrib, class.attrib, title.attrib +lang.attrib = attribute xml:lang { LanguageCode.datatype }? +I18n.attrib = lang.attrib +Common.attrib = Core.attrib, I18n.attrib +CommonIdRequired.attrib = + attribute id { ID.datatype }, + class.attrib, + title.attrib, + I18n.attrib
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-base.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,5 @@ +# Base Module + +base = element base { base.attlist } +base.attlist = attribute href { URI.datatype } +head.content &= base?
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-basic-form.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,63 @@ +# Simplified Forms Module + +form = + element form { + form.attlist, + # Don't use Block.model, because this gets redefined by the + # legacy module. + Block.class+ + } +form.attlist = + Common.attrib, + attribute action { URI.datatype }, + attribute method { "get" | "post" }?, + attribute enctype { ContentType.datatype }? +label = element label { label.attlist, Inline.model } +label.attlist = + Common.attrib, + attribute for { IDREF.datatype }?, + attribute accesskey { Character.datatype }? +input = element input { input.attlist } +input.attlist = + Common.attrib, + attribute type { InputType.class }?, + attribute name { text }?, + attribute value { text }?, + attribute checked { "checked" }?, + attribute size { text }?, + attribute maxlength { Number.datatype }?, + attribute src { URI.datatype }?, + attribute accesskey { Character.datatype }? +InputType.class = + "text" + | "password" + | "checkbox" + | "radio" + | "submit" + | "reset" + | "hidden" +select = element select { select.attlist, option+ } +select.attlist = + Common.attrib, + attribute name { text }?, + attribute size { Number.datatype }?, + attribute multiple { "multiple" }? +option = + element option { + Common.attrib, + attribute selected { "selected" }?, + attribute value { text }?, + text + } +textarea = element textarea { textarea.attlist } +textarea.attlist = + Common.attrib, + attribute name { text }?, + attribute rows { Number.datatype }, + attribute cols { Number.datatype }, + attribute accesskey { Character.datatype }?, + text +Form.class = form +Formctrl.class = input | label | select | textarea +Block.class |= Form.class +Inline.class |= Formctrl.class
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-basic-table.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,28 @@ +# Basic Tables Module + +table = element table { table.attlist, caption?, tr+ } +table.attlist = + Common.attrib, + attribute summary { Text.datatype }? +caption = element caption { caption.attlist, Inline.model } +caption.attlist = Common.attrib +tr = element tr { tr.attlist, (th | td)+ } +tr.attlist = Common.attrib, CellHAlign.attrib, CellVAlign.attrib +th = element th { th.attlist, Flow.model } +th.attlist = Cell.attrib +td = element td { td.attlist, Flow.model } +td.attlist = Cell.attrib +Cell.attrib = + Common.attrib, + attribute abbr { Text.datatype }?, + attribute axis { text }?, + attribute headers { IDREFS.datatype }?, + scope.attrib, + attribute rowspan { Number.datatype }?, + attribute colspan { Number.datatype }?, + CellHAlign.attrib, + CellVAlign.attrib +CellHAlign.attrib = attribute align { "left" | "center" | "right" }? +CellVAlign.attrib = attribute valign { "top" | "middle" | "bottom" }? +scope.attrib = attribute scope { "row" | "col" }? +Block.class |= table
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-bdo.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,7 @@ +# Bi-directional Module + +bdo = element bdo { bdo.attlist, Inline.model } +bdo.attlist = Core.attrib, lang.attrib, dir.attrib +dir.attrib = attribute dir { "ltr" | "rtl" } +I18n.attrib &= dir.attrib? +Inline.class |= bdo
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-csismap.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,29 @@ +# Client-side Image Map Module + +area = element area { area.attlist } +area.attlist = + Common.attrib, + attribute href { URI.datatype }?, + shape.attrib, + coords.attrib, + attribute nohref { "nohref" }?, + attribute alt { Text.datatype }, + attribute tabindex { Number.datatype }?, + attribute accesskey { Character.datatype }? +map = + element map { + map.attlist, + (# This does not use Block.mix + # because loose.dtd doesn't use %Flow; + Block.class + | area)+ + } +map.attlist = CommonIdRequired.attrib +a.attlist &= shape.attrib, coords.attrib +img.attlist &= usemap.attlist +object.attlist &= usemap.attlist +usemap.attlist = attribute usemap { IDREF.datatype }? +shape.attrib = + attribute shape { "rect" | "circle" | "poly" | "default" }? +coords.attrib = attribute coords { text }? +Inline.class |= map
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-datatypes.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,47 @@ +# Datatypes Module + +# Length defined for cellpadding/cellspacing + +# nn for pixels or nn% for percentage length +Length.datatype = text +# space-separated list of link types +LinkTypes.datatype = NMTOKENS.datatype +# single or comma-separated list of media descriptors +MediaDesc.datatype = text +# pixel, percentage, or relative +MultiLength.datatype = text +# one or more digits (NUMBER) +Number.datatype = text +# integer representing length in pixels +Pixels.datatype = text +# script expression +Script.datatype = text +# textual content +Text.datatype = text +# Imported Datatypes ................................ + +# a single character from [ISO10646] +Character.datatype = text +# a character encoding, as per [RFC2045] +Charset.datatype = text +# a space separated list of character encodings, as per [RFC2045] +Charsets.datatype = text +# media type, as per [RFC2045] +ContentType.datatype = text +# comma-separated list of media types, as per [RFC2045] +ContentTypes.datatype = text +# date and time information. ISO date format +Datetime.datatype = text +# formal public identifier, as per [ISO8879] +FPI.datatype = text +# a language code, as per [RFC1766] +LanguageCode.datatype = xsd:language +# a Uniform Resource Identifier, see [URI] +URI.datatype = xsd:anyURI +# a space-separated list of Uniform Resource Identifiers, see [URI] +URIs.datatype = text +NMTOKEN.datatype = xsd:NMTOKEN +NMTOKENS.datatype = xsd:NMTOKENS +ID.datatype = xsd:ID +IDREF.datatype = xsd:IDREF +IDREFS.datatype = xsd:IDREFS
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-edit.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,12 @@ +# Edit Module + +del = element del { del.attlist, Inline.model } +del.attlist = Edit.attrib +ins = element ins { ins.attlist, Inline.model } +ins.attlist = Edit.attrib +Edit.attrib = + attribute cite { URI.datatype }?, + attribute datetime { Datetime.datatype }? +Edit.class = del | ins +Inline.class |= Edit.class +Block.class |= Edit.class
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-events.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,47 @@ +# Events Module + +a.attlist &= + attribute onblur { Script.datatype }?, + attribute onfocus { Script.datatype }? +area.attlist &= + attribute onblur { Script.datatype }?, + attribute onfocus { Script.datatype }? +form.attlist &= + attribute onreset { Script.datatype }?, + attribute onsubmit { Script.datatype }? +body.attlist &= + attribute onload { Script.datatype }?, + attribute onunload { Script.datatype }? +label.attlist &= + attribute onblur { Script.datatype }?, + attribute onfocus { Script.datatype }? +input.attlist &= + attribute onblur { Script.datatype }?, + attribute onchange { Script.datatype }?, + attribute onfocus { Script.datatype }?, + attribute onselect { Script.datatype }? +select.attlist &= + attribute onblur { Script.datatype }?, + attribute onchange { Script.datatype }?, + attribute onfocus { Script.datatype }? +textarea.attlist &= + attribute onblur { Script.datatype }?, + attribute onchange { Script.datatype }?, + attribute onfocus { Script.datatype }?, + attribute onselect { Script.datatype }? +button.attlist &= + attribute onblur { Script.datatype }?, + attribute onfocus { Script.datatype }? +Events.attrib = + attribute onclick { Script.datatype }?, + attribute ondblclick { Script.datatype }?, + attribute onmousedown { Script.datatype }?, + attribute onmouseup { Script.datatype }?, + attribute onmouseover { Script.datatype }?, + attribute onmousemove { Script.datatype }?, + attribute onmouseout { Script.datatype }?, + attribute onkeypress { Script.datatype }?, + attribute onkeydown { Script.datatype }?, + attribute onkeyup { Script.datatype }? +Common.attrib &= Events.attrib +CommonIdRequired.attrib &= Events.attrib
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-form.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,49 @@ +# Forms Module + +# Unlike the DTD implementation, this builds on the basic-form module + +include "xhtml-basic-form.rnc" { + select = element select { select.attlist, (option | optgroup)+ } +} +form.attlist &= + attribute accept-charset { Charsets.datatype }?, + attribute accept { ContentTypes.datatype }? +input.attlist &= + attribute disabled { "disabled" }?, + attribute readonly { "readonly" }?, + attribute alt { text }?, + attribute tabindex { Number.datatype }?, + attribute accept { ContentTypes.datatype }? +InputType.class |= "image" | "button" +select.attlist &= + attribute disabled { "disabled" }?, + attribute tabindex { Number.datatype }? +option.attlist &= + attribute disabled { "disabled" }?, + attribute label { Text.datatype }? +optgroup = element optgroup { optgroup.attlist, option+ } +optgroup.attlist = + Common.attrib, + attribute disabled { "disabled" }?, + attribute label { Text.datatype } +textarea.attlist &= + attribute disabled { "disabled" }?, + attribute readonly { "readonly" }?, + attribute tabindex { Number.datatype }? +fieldset = element fieldset { fieldset.attlist, legend, Flow.model } +fieldset.attlist = Common.attrib +button = element button { button.attlist, Flow.model } +button.attlist = + Common.attrib, + attribute name { text }?, + attribute value { text }?, + attribute type { "button" | "submit" | "reset" }?, + attribute disabled { "disabled" }?, + attribute tabindex { Number.datatype }?, + attribute accesskey { Character.datatype }? +legend = element legend { legend.attlist, Inline.model } +legend.attlist = + Common.attrib, + attribute accesskey { Character.datatype }? +Form.class |= fieldset +Formctrl.class |= button
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-frames.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,26 @@ +# Frames Module + +include "xhtml-struct.rnc" { + html = element html { html.attlist, head, frameset } +} +frameset = + element frameset { + frameset.attlist, + ((frameset | frame)+ & noframes?) + } +frameset.attlist = + Core.attrib, + attribute cols { MultiLength.datatype }?, + attribute rows { MultiLength.datatype }? +frame = element frame { frame.attlist } +frame.attlist = + Core.attrib, + attribute longdesc { URI.datatype }?, + attribute src { URI.datatype }?, + attribute frameborder { "1" | "0" }?, + attribute marginwidth { Pixels.datatype }?, + attribute marginheight { Pixels.datatype }?, + attribute noresize { "noresize" }?, + attribute scrolling { "yes" | "no" | "auto" }? +noframes = element noframes { noframes.attlist, body } +noframes.attlist = Common.attrib
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-hypertext.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,16 @@ +# Hypertext Module + +# Depends on text module. + +a = element a { a.attlist, Inline.model } +a.attlist = + Common.attrib, + attribute href { URI.datatype }?, + attribute charset { Charset.datatype }?, + attribute type { ContentType.datatype }?, + attribute hreflang { LanguageCode.datatype }?, + attribute rel { LinkTypes.datatype }?, + attribute rev { LinkTypes.datatype }?, + attribute accesskey { Character.datatype }?, + attribute tabindex { Number.datatype }? +Inline.class |= a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-iframe.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,14 @@ +# Iframe Module + +iframe = element iframe { iframe.attlist, Flow.model } +iframe.attlist = + Core.attrib, + attribute longdesc { URI.datatype }?, + attribute src { URI.datatype }?, + attribute frameborder { "1" | "0" }?, + attribute width { Length.datatype }?, + attribute height { Length.datatype }?, + attribute marginwidth { Pixels.datatype }?, + attribute marginheight { Pixels.datatype }?, + attribute scrolling { "yes" | "no" | "auto" }? +Inline.class |= iframe
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-image.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,11 @@ +# Image Module + +img = element img { img.attlist } +img.attlist = + Common.attrib, + attribute src { URI.datatype }, + attribute alt { Text.datatype }, + attribute longdesc { URI.datatype }?, + attribute height { Length.datatype }?, + attribute width { Length.datatype }? +Inline.class |= img
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-inlstyle.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,3 @@ +# Inline Style Module + +Core.attrib &= attribute style { text }?
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-legacy.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,100 @@ +# Legacy Module + +lang.attrib &= attribute lang { LanguageCode.datatype }? +basefont = element basefont { basefont.attlist } +basefont.attlist = id.attrib, Font.attrib +center = element center { center.attlist, Flow.model } +center.attlist = Common.attrib +font = element font { font.attlist, Inline.model } +font.attlist = Core.attrib, I18n.attrib, Font.attrib +Font.attrib = + attribute size { text }?, + attribute color { Color.datatype }?, + attribute face { text }? +s = element s { s.attlist, Inline.model } +s.attlist = Common.attrib +strike = element strike { strike.attlist, Inline.model } +strike.attlist = Common.attrib +u = element u { u.attlist, Inline.model } +u.attlist = Common.attrib +dir = element dir { dir.attlist, li.noblock+ } +dir.attlist = + Common.attrib, + attribute compact { "compact" }? +menu = element menu { menu.attlist, li.noblock+ } +menu.attlist = + Common.attrib, + attribute compact { "compact" }? +li.noblock = element li { li.attlist, Inline.model } +isindex = element isindex { isindex.attlist } +isindex.attlist = + Core.attrib, + I18n.attrib, + attribute prompt { Text.datatype }? +applet.attlist &= + attribute align { "top" | "middle" | "bottom" | "left" | "right" }?, + attribute hspace { Pixels.datatype }?, + attribute vspace { Pixels.datatype }? +body.attlist &= + attribute background { URI.datatype }?, + attribute bgcolor { Color.datatype }?, + attribute text { Color.datatype }?, + attribute link { Color.datatype }?, + attribute vlink { Color.datatype }?, + attribute alink { Color.datatype }? +br.attlist &= attribute clear { "left" | "all" | "right" | "none" }? +caption.attlist &= align.attrib +div.attlist &= align.attrib +# Not in the CR, but surely an error. +dl.attlist &= attribute compact { "compact" }? +Heading.attrib &= align.attrib +hr.attlist &= + attribute align { "left" | "center" | "right" }?, + attribute noshade { "noshade" }?, + attribute size { Pixels.datatype }?, + attribute width { Pixels.datatype }? +img.attlist &= + attribute align { "top" | "middle" | "bottom" | "left" | "right" }?, + attribute border { Pixels.datatype }?, + attribute hspace { Pixels.datatype }?, + attribute vspace { Pixels.datatype }? +input.attlist &= align.attrib +legend.attlist &= + attribute align { "top" | "bottom" | "left" | "right" }? +li.attlist &= + attribute type { text }?, + attribute value { text }? +object.attlist &= + attribute align { "top" | "middle" | "bottom" | "left" | "right" }?, + attribute border { Pixels.datatype }?, + attribute hspace { Pixels.datatype }?, + attribute vspace { Pixels.datatype }? +ol.attlist &= + attribute type { text }?, + attribute compact { "compact" }?, + attribute start { text }? +p.attlist &= align.attrib +pre.attlist &= attribute width { Length.datatype }? +script.attlist &= attribute language { ContentType.datatype }? +table.attlist &= + align.attrib, + attribute bgcolor { Color.datatype }? +tr.attlist &= attribute bgcolor { Color.datatype }? +Cell.attrib &= + attribute nowrap { "nowrap" }?, + attribute bgcolor { Color.datatype }?, + attribute width { Pixels.datatype }?, + attribute height { Pixels.datatype }? +ul.attlist &= + attribute type { text }?, + attribute compact { "compact" }? +align.attrib = attribute align { "left" | "all" | "right" | "none" }? +Color.datatype = text +Inline.class |= font | basefont | s | strike | u +Block.class |= center | isindex +List.class |= dir | menu +head.content &= isindex? +Block.mix |= text | Inline.class +# With the legacy module and the frames modules, the html +# element can contain either body or frameset. +frameset |= body
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-link.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,13 @@ +# Link Module + +link = element link { link.attlist } +link.attlist = + Common.attrib, + attribute charset { Charset.datatype }?, + attribute href { URI.datatype }?, + attribute hreflang { LanguageCode.datatype }?, + attribute type { ContentType.datatype }?, + attribute rel { LinkTypes.datatype }?, + attribute rev { LinkTypes.datatype }?, + attribute media { MediaDesc.datatype }? +head.content &= link*
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-list.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,16 @@ +# List Module + +dl = element dl { dl.attlist, (dt | dd)+ } +dl.attlist = Common.attrib +dt = element dt { dt.attlist, Inline.model } +dt.attlist = Common.attrib +dd = element dd { dd.attlist, Flow.model } +dd.attlist = Common.attrib +ol = element ol { ol.attlist, li+ } +ol.attlist = Common.attrib +ul = element ul { ul.attlist, li+ } +ul.attlist = Common.attrib +li = element li { li.attlist, Flow.model } +li.attlist = Common.attrib +List.class = ul | ol | dl +Block.class |= List.class
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-meta.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,10 @@ +# Meta Module + +meta = element meta { meta.attlist } +meta.attlist = + I18n.attrib, + attribute http-equiv { NMTOKEN.datatype }?, + attribute name { NMTOKEN.datatype }?, + attribute content { text }?, + attribute scheme { text }? +head.content &= meta*
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-nameident.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,10 @@ +# Name Identification Module + +a.attlist &= name.attlist +applet.attlist &= name.attlist +form.attlist &= name.attlist +frame.attrib &= name.attlist +iframe.attlist &= name.attlist +img.attlist &= name.attlist +map.attlist &= name.attlist +name.attlist = attribute name { text }?
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-object.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,24 @@ +# Object Module + +object = + element object { + object.attlist, + # No restrictions on mixed content in TREX. + param*, + Flow.model + } +object.attlist = + Common.attrib, + attribute declare { "declare" }?, + attribute classid { URI.datatype }?, + attribute codebase { URI.datatype }?, + attribute data { URI.datatype }?, + attribute type { ContentType.datatype }?, + attribute codetype { ContentType.datatype }?, + attribute archive { URIs.datatype }?, + attribute standby { Text.datatype }?, + attribute height { Length.datatype }?, + attribute width { Length.datatype }?, + attribute name { text }?, + attribute tabindex { Number.datatype }? +Inline.class |= object
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-param.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,9 @@ +# Param Module + +param = element param { param.attlist } +param.attlist = + id.attrib, + attribute name { text }, + attribute value { text }?, + attribute valuetype { "data" | "ref" | "object" }?, + attribute type { ContentType.datatype }?
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-pres.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,18 @@ +hr = element hr { hr.attlist } +hr.attlist = Common.attrib +Block.class |= hr +b = element b { b.attlist, Inline.model } +b.attlist = Common.attrib +big = element big { big.attlist, Inline.model } +big.attlist = Common.attrib +i = element i { i.attlist, Inline.model } +i.attlist = Common.attrib +small = element small { small.attlist, Inline.model } +small.attlist = Common.attrib +sub = element sub { sub.attlist, Inline.model } +sub.attlist = Common.attrib +sup = element sup { sup.attlist, Inline.model } +sup.attlist = Common.attrib +tt = element tt { tt.attlist, Inline.model } +tt.attlist = Common.attrib +Inline.class |= b | big | i | small | sub | sup | tt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-ruby.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,21 @@ +ruby = + element ruby { + ruby.attlist, + ((rb, + (rt | (rp, rt, rp))) + | (rbc, rtc, rtc?)) + } +ruby.attlist = Common.attrib +rbc = element rbc { rbc.attlist, rb+ } +rbc.attlist = Common.attrib +rtc = element rtc { rtc.attlist, rt+ } +rtc.attlist = Common.attrib +rb = element rb { rb.attlist, Inline.model } +rb.attlist = Common.attrib +rt = element rt { rt.attlist, Inline.model } +rt.attlist = + Common.attrib, + attribute rt { Number.datatype }? +rp = element rp { rp.attlist, text } +rp.attlist = Common.attrib +Inline.class |= ruby
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-script.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,15 @@ +# Script Module + +script = element script { script.attlist, text } +script.attlist = + attribute charset { Charset.datatype }?, + attribute type { ContentType.datatype }, + attribute src { URI.datatype }?, + attribute defer { "defer" }?, + attribute xml:space { "preserve" }? +noscript = element noscript { noscript.attlist, Block.model } +noscript.attlist = Common.attrib +head.content &= script* +Script.class = noscript | script +Inline.class |= Script.class +Block.class |= Script.class
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-ssismap.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,5 @@ +# Server-side Image Map Module + +# Depends on image module. + +img.attlist &= attribute ismap { "ismap" }?
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-struct.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,14 @@ +# Structure Module + +start = html +title = element title { title.attlist, text } +title.attlist = I18n.attrib +head = element head { head.attlist, head.content } +head.attlist = I18n.attrib, profile.attlist +head.content = title +profile.attlist = attribute profile { URI.datatype }? +body = element body { body.attlist, Block.model } +body.attlist = Common.attrib +html = element html { html.attlist, head, body } +html.attlist = XHTML.version.attrib, I18n.attrib +XHTML.version.attrib = attribute version { FPI.datatype }?
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-style.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,10 @@ +# Style Module + +style = element style { style.attlist, text } +style.attlist = + title.attrib, + I18n.attrib, + attribute type { ContentType.datatype }, + attribute media { MediaDesc.datatype }?, + attribute xml:space { "preserve" }? +head.content &= style*
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-table.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,67 @@ +# Tables Module + +# This builds on the basic tables module, unlike with the DTD +# implementation. + +include "xhtml-basic-table.rnc" { + table = + element table { + table.attlist, + caption?, + (col* | colgroup*), + ((thead?, tfoot?, tbody+) | tr+) + } + th = element th { th.attlist, Flow.model } + td = element td { td.attlist, Flow.model } + CellHAlign.attrib = + attribute align { + "left" | "center" | "right" | "justify" | "char" + }?, + attribute char { Character.datatype }?, + attribute charoff { Length.datatype }? + CellVAlign.attrib = + attribute valign { "top" | "middle" | "bottom" | "baseline" }? + scope.attrib = + attribute scope { "row" | "col" | "rowgroup" | "colgroup" }? +} +table.attlist &= + attribute width { Length.datatype }?, + attribute border { Pixels.datatype }?, + frame.attrib, + rules.attrib, + attribute cellspacing { Length.datatype }?, + attribute cellpadding { Length.datatype }? +col = element col { col.attlist } +col.attlist = + Common.attrib, + attribute span { Number.datatype }?, + attribute width { MultiLength.datatype }?, + CellHAlign.attrib, + CellVAlign.attrib +colgroup = element colgroup { colgroup.attlist, col* } +colgroup.attlist = + Common.attrib, + attribute span { Number.datatype }?, + attribute width { MultiLength.datatype }?, + CellHAlign.attrib, + CellVAlign.attrib +tbody = element tbody { tbody.attlist, tr+ } +tbody.attlist = Common.attrib, CellHAlign.attrib, CellVAlign.attrib +thead = element thead { thead.attlist, tr+ } +thead.attlist = Common.attrib, CellHAlign.attrib, CellVAlign.attrib +tfoot = element tfoot { tfoot.attlist, tr+ } +tfoot.attlist = Common.attrib, CellHAlign.attrib, CellVAlign.attrib +frame.attrib = + attribute frame { + "void" + | "above" + | "below" + | "hsides" + | "lhs" + | "rhs" + | "vsides" + | "box" + | "border" + }? +rules.attrib = + attribute rules { "none" | "groups" | "rows" | "cols" | "all" }?
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-target.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,8 @@ +# Target Module + +a.attlist &= target.attrib +area.attlist &= target.attrib +base.attlist &= target.attrib +link.attrib &= target.attrib +form.attlist &= target.attrib +target.attrib = attribute target { text }?
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml-text.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,73 @@ +# Text Module + +br = element br { br.attlist, empty } +br.attlist = Core.attrib +span = element span { span.attlist, Inline.model } +span.attlist = Common.attrib +abbr = element abbr { abbr.attlist, Inline.model } +abbr.attlist = Common.attrib +acronym = element acronym { acronym.attlist, Inline.model } +acronym.attlist = Common.attrib +cite = element cite { cite.attlist, Inline.model } +cite.attlist = Common.attrib +code = element code { code.attlist, Inline.model } +code.attlist = Common.attrib +dfn = element dfn { dfn.attlist, Inline.model } +dfn.attlist = Common.attrib +em = element em { em.attlist, Inline.model } +em.attlist = Common.attrib +kbd = element kbd { kbd.attlist, Inline.model } +kbd.attlist = Common.attrib +q = element q { q.attlist, Inline.model } +q.attlist = + Common.attrib, + attribute cite { URI.datatype }? +samp = element samp { samp.attlist, Inline.model } +samp.attlist = Common.attrib +strong = element strong { strong.attlist, Inline.model } +strong.attlist = Common.attrib +var = element var { var.attlist, Inline.model } +var.attlist = Common.attrib +\div = element div { div.attlist, Flow.model } +div.attlist = Common.attrib +p = element p { p.attlist, Inline.model } +p.attlist = Common.attrib +address = element address { address.attlist, Inline.model } +address.attlist = Common.attrib +blockquote = element blockquote { blockquote.attlist, Block.model } +blockquote.attlist = + Common.attrib, + attribute cite { URI.datatype }? +pre = element pre { pre.attlist, Inline.model } +pre.attlist = + Common.attrib, + attribute xml:space { "preserve" }? +h1 = element h1 { Heading.attrib, Heading.content } +h2 = element h2 { Heading.attrib, Heading.content } +h3 = element h3 { Heading.attrib, Heading.content } +h4 = element h4 { Heading.attrib, Heading.content } +h5 = element h5 { Heading.attrib, Heading.content } +h6 = element h6 { Heading.attrib, Heading.content } +Heading.attrib = Common.attrib +Heading.content = Inline.model +Heading.class = h1 | h2 | h3 | h4 | h5 | h6 +Block.class = address | blockquote | \div | p | pre | Heading.class +Inline.class = + abbr + | acronym + | br + | cite + | code + | dfn + | em + | kbd + | q + | samp + | span + | strong + | var +Inline.model = (text | Inline.class)* +# This is redefined by the legacy module to include inlines. +Block.mix = Block.class +Block.model = Block.mix+ +Flow.model = (text | Inline.class | Block.class)*
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xhtml.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,37 @@ +# XHTML + +# This corresponds to the union of transitional and frameset. + +default namespace = "http://www.w3.org/1999/xhtml" + +include "xhtml-datatypes.rnc" +include "xhtml-attribs.rnc" +# include "xhtml-struct.rnc" +include "xhtml-frames.rnc" +include "xhtml-text.rnc" +include "xhtml-hypertext.rnc" +include "xhtml-list.rnc" +include "xhtml-image.rnc" +include "xhtml-ssismap.rnc" +include "xhtml-base.rnc" +include "xhtml-link.rnc" +include "xhtml-meta.rnc" +include "xhtml-param.rnc" +include "xhtml-object.rnc" +include "xhtml-bdo.rnc" +include "xhtml-pres.rnc" +include "xhtml-edit.rnc" +include "xhtml-applet.rnc" +# include "xhtml-basic-form.rnc" +include "xhtml-form.rnc" +include "xhtml-style.rnc" +include "xhtml-script.rnc" +# include "xhtml-basic-table.rnc" +include "xhtml-table.rnc" +include "xhtml-csismap.rnc" +include "xhtml-events.rnc" +include "xhtml-inlstyle.rnc" +include "xhtml-target.rnc" +include "xhtml-iframe.rnc" +include "xhtml-nameident.rnc" +include "xhtml-legacy.rnc"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/schema/xslt.rnc Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,356 @@ +# $Id: xslt.rnc,v 1.2 2003/08/30 08:09:03 jjc Exp $ + +# This was mostly generated from the syntax summary in the XSLT +# Recommendation (using XSLT of course). + +# Issues: this validates extension elements as literal result +# elements, which is overly restrictive. + +namespace local = "" +default namespace xsl = "http://www.w3.org/1999/XSL/Transform" + +start = + stylesheet.element + | transform.element + | literal-result-element-as-stylesheet +version = "1.0" +top-level-elements.model = + (top-level-element.category | top-level-extension)* +top-level-extension = + element * - (xsl:* | local:*) { + grammar { + start = any + any = + (attribute * { text } + | text + | element * { any })* + } + } +template.model = (instruction.category | literal-result-element | text)* +literal-result-element-as-stylesheet = + element * - xsl:* { + attribute xsl:version { version }, + literal-result-element-no-version.atts, + template.model + } +literal-result-element = + element * - xsl:* { literal-result-element.atts, template.model } +literal-result-element.atts = + literal-result-element-no-version.atts, + attribute xsl:version { version }? +literal-result-element-no-version.atts = + (attribute * - xsl:* { avt.datatype } + | attribute xsl:extension-element-prefixes { prefixes.datatype } + | attribute xsl:exclude-result-prefixes { prefixes.datatype } + | attribute xsl:use-attribute-sets { qnames.datatype })* +top-level-element.category = + include.element + | strip-space.element + | preserve-space.element + | template.element + | namespace-alias.element + | attribute-set.element + | variable.element + | param.element + | key.element + | decimal-format.element + | output.element +instruction.category = + apply-templates.element + | apply-imports.element + | call-template.element + | element.element + | attribute.element + | text.element + | processing-instruction.element + | comment.element + | copy.element + | value-of.element + | number.element + | for-each.element + | if.element + | choose.element + | variable.element + | copy-of.element + | message.element + | fallback.element +extension.atts = attribute * - (xsl:* | local:*) { text }* +stylesheet.element = element stylesheet { stylesheet.model } +transform.element = element transform { stylesheet.model } +stylesheet.model = + extension.atts, + attribute id { xsd:NCName }?, + attribute extension-element-prefixes { prefixes.datatype }?, + attribute exclude-result-prefixes { prefixes.datatype }?, + attribute version { version }, + (import.element*, top-level-elements.model) +include.element = + element include { + extension.atts, + attribute href { xsd:anyURI } + } +import.element = + element import { + extension.atts, + attribute href { xsd:anyURI } + } +strip-space.element = + element strip-space { + extension.atts, + attribute elements { wildcards.datatype } + } +preserve-space.element = + element preserve-space { + extension.atts, + attribute elements { wildcards.datatype } + } +template.element = + element template { + extension.atts, + attribute match { pattern.datatype }?, + attribute name { qname.datatype }?, + attribute priority { number.datatype }?, + attribute mode { qname.datatype }?, + (param.element*, template.model) + } +apply-templates.element = + element apply-templates { + extension.atts, + attribute select { expression.datatype }?, + attribute mode { qname.datatype }?, + (sort.element | with-param.element)* + } +apply-imports.element = element apply-imports { extension.atts } +call-template.element = + element call-template { + extension.atts, + attribute name { qname.datatype }, + with-param.element* + } +namespace-alias.element = + element namespace-alias { + extension.atts, + attribute stylesheet-prefix { prefix.datatype }, + attribute result-prefix { prefix.datatype } + } +element.element = + element element { + extension.atts, + attribute name { qname.datatype | expr-avt.datatype }, + attribute namespace { xsd:anyURI | brace-avt.datatype }?, + attribute use-attribute-sets { qnames.datatype }?, + template.model + } +attribute.element = + element attribute { + extension.atts, + attribute name { qname.datatype | expr-avt.datatype }, + attribute namespace { xsd:anyURI | brace-avt.datatype }?, + template.model + } +attribute-set.element = + element attribute-set { + extension.atts, + attribute name { qname.datatype }, + attribute use-attribute-sets { qnames.datatype }?, + attribute.element* + } +text.element = + element text { + extension.atts, + attribute disable-output-escaping { + xsd:string "yes" | xsd:string "no" + }?, + text + } +processing-instruction.element = + element processing-instruction { + extension.atts, + attribute name { xsd:NCName | expr-avt.datatype }, + template.model + } +comment.element = element comment { extension.atts, template.model } +copy.element = + element copy { + extension.atts, + attribute use-attribute-sets { qnames.datatype }?, + template.model + } +value-of.element = + element value-of { + extension.atts, + attribute select { expression.datatype }, + attribute disable-output-escaping { + xsd:string "yes" | xsd:string "no" + }? + } +number.element = + element number { + extension.atts, + attribute level { + xsd:string "single" | xsd:string "multiple" | xsd:string "any" + }?, + attribute count { pattern.datatype }?, + attribute from { pattern.datatype }?, + attribute value { expression.datatype }?, + attribute format { avt.datatype }?, + attribute lang { xsd:NMTOKEN | expr-avt.datatype }?, + attribute letter-value { + xsd:string "alphabetic" + | xsd:string "traditional" + | expr-avt.datatype + }?, + attribute grouping-separator { char.datatype | expr-avt.datatype }?, + attribute grouping-size { number.datatype | expr-avt.datatype }? + } +for-each.element = + element for-each { + extension.atts, + attribute select { expression.datatype }, + (sort.element*, template.model) + } +if.element = + element if { + extension.atts, + attribute test { expression.datatype }, + template.model + } +choose.element = + element choose { extension.atts, (when.element+, otherwise.element?) } +when.element = + element when { + extension.atts, + attribute test { expression.datatype }, + template.model + } +otherwise.element = element otherwise { extension.atts, template.model } +sort.element = + element sort { + extension.atts, + attribute select { expression.datatype }?, + attribute lang { xsd:NMTOKEN | expr-avt.datatype }?, + attribute data-type { + xsd:string "text" + | xsd:string "number" + | qname-but-not-ncname.datatype + | expr-avt.datatype + }?, + attribute order { + xsd:string "ascending" + | xsd:string "descending" + | expr-avt.datatype + }?, + attribute case-order { + xsd:string "upper-first" + | xsd:string "lower-first" + | expr-avt.datatype + }? + } +variable.element = + element variable { + extension.atts, + attribute name { qname.datatype }, + (attribute select { expression.datatype } + | template.model) + } +param.element = + element param { + extension.atts, + attribute name { qname.datatype }, + (attribute select { expression.datatype } + | template.model) + } +copy-of.element = + element copy-of { + extension.atts, + attribute select { expression.datatype } + } +with-param.element = + element with-param { + extension.atts, + attribute name { qname.datatype }, + (attribute select { expression.datatype } + | template.model) + } +key.element = + element key { + extension.atts, + attribute name { qname.datatype }, + attribute match { pattern.datatype }, + attribute use { expression.datatype } + } +decimal-format.element = + element decimal-format { + extension.atts, + attribute name { qname.datatype }?, + attribute decimal-separator { char.datatype }?, + attribute grouping-separator { char.datatype }?, + attribute infinity { text }?, + attribute minus-sign { char.datatype }?, + attribute NaN { text }?, + attribute percent { char.datatype }?, + attribute per-mille { char.datatype }?, + attribute zero-digit { char.datatype }?, + attribute digit { char.datatype }?, + attribute pattern-separator { char.datatype }? + } +message.element = + element message { + extension.atts, + attribute terminate { xsd:string "yes" | xsd:string "no" }?, + template.model + } +fallback.element = element fallback { extension.atts, template.model } +output.element = + element output { + extension.atts, + attribute method { + xsd:string "xml" + | xsd:string "html" + | xsd:string "text" + | qname-but-not-ncname.datatype + }?, + attribute version { xsd:NMTOKEN }?, + attribute encoding { text }?, + attribute omit-xml-declaration { + xsd:string "yes" | xsd:string "no" + }?, + attribute standalone { xsd:string "yes" | xsd:string "no" }?, + attribute doctype-public { text }?, + attribute doctype-system { text }?, + attribute cdata-section-elements { qnames.datatype }?, + attribute indent { xsd:string "yes" | xsd:string "no" }?, + attribute media-type { text }? + } +prefixes.datatype = list { (xsd:NCName | "#default")* } +prefix.datatype = xsd:NCName | "#default" +wildcards.datatype = + list { + (xsd:QName + | xsd:token { pattern = "\*|\i\c*:\*" })* + } +qname.datatype = xsd:QName +qnames.datatype = list { xsd:QName* } +char.datatype = xsd:string { length = "1" } +number.datatype = xsd:decimal +expression.datatype = text +pattern.datatype = text +qname-but-not-ncname.datatype = xsd:QName { pattern = ".*:.*" } +# An AVT containing at least one expression. +expr-avt.datatype = + xsd:string { + pattern = + """([^\{\}]|\{\{|\}\})*\{([^"'\{\}]|"[^"]*"|'[^']*')+\}([^\{\}]|\{\{|\}\}|\{([^"'\{\}]|"[^"]*"|'[^']*')+\})*""" + } +# An AVT containing at least one brace; ie where instantiated AVT +# is not the same as the literal AVT. +brace-avt.datatype = + xsd:string { + pattern = + """[^\{\}]*(\{\{|\}\}|\{([^"'\{\}]|"[^"]*"|'[^']*')+\})([^\{\}]|\{\{|\}\}|\{([^"'\{\}]|"[^"]*"|'[^']*')+\})*""" + } +avt.datatype = + xsd:string { + pattern = + """([^\{\}]|\{\{|\}\}|\{([^"'\{\}]|"[^"]*"|'[^']*')+\})*""" + }
--- a/lisp/ChangeLog Fri Nov 23 04:17:56 2007 +0000 +++ b/lisp/ChangeLog Fri Nov 23 06:58:00 2007 +0000 @@ -1,3 +1,8 @@ +2007-11-23 Mark A. Hershberger <mah@everybody.org> + + * nxml: Initial merge of nxml. Kept nxml/char-name subdir for + now. + 2007-11-23 Juri Linkov <juri@jurta.org> * dired.el (dired-read-dir-and-switches): For C-x d, set the
--- a/lisp/makefile.w32-in Fri Nov 23 04:17:56 2007 +0000 +++ b/lisp/makefile.w32-in Fri Nov 23 06:58:00 2007 +0000 @@ -76,6 +76,7 @@ erc \ eshell \ gnus \ + nxml \ international \ language \ mail \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/Makefile Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,80 @@ +EXTRA=README NEWS VERSION TODO COPYING Makefile rng-auto.el \ + nxml-mode.xml nxml-mode.rnc nxml-mode.texi nxml-mode.info dir \ + test.valid.xml test.invalid.xml + +SRC=nxml-rap.el nxml-outln.el nxml-mode.el nxml-parse.el nxml-enc.el \ + nxml-uchnm.el nxml-glyph.el nxml-maint.el nxml-util.el nxml-ns.el \ + rng-dt.el rng-valid.el rng-pttrn.el rng-xsd.el rng-cmpct.el \ + rng-match.el rng-nxml.el rng-util.el rng-loc.el rng-uri.el \ + rng-parse.el rng-maint.el xsd-regexp.el xmltok.el + +ELC=nxml-rap.elc nxml-outln.elc nxml-mode.elc nxml-parse.elc nxml-enc.elc \ + nxml-uchnm.elc nxml-glyph.elc nxml-maint.elc nxml-util.elc nxml-ns.elc \ + rng-dt.elc rng-valid.elc rng-pttrn.elc rng-xsd.elc rng-cmpct.elc \ + rng-match.elc rng-nxml.elc rng-util.elc rng-loc.elc rng-uri.elc \ + rng-parse.elc rng-maint.elc xsd-regexp.elc xmltok.elc + +FILESTOCLEAN=stamp-byte-compile $(ELC) VERSION TAGS \ + nxml-mode.texi nxml-mode.info dir + +EMACS=emacs +ETAGS=etags +MAKEINFO=makeinfo +INSTALL-INFO=install-info +PACKAGE=nxml-mode + +stamp-byte-compile: $(SRC) + -rm -f $(ELC) + $(EMACS) -batch -l rng-auto.el -f rng-byte-compile-load + touch $(@) + +all: stamp-byte-compile nxml-mode.info + +dir: nxml-mode.info + rm -f $@ + $(INSTALL-INFO) $< $@ + +info: nxml-mode.info + +nxml-mode.info: nxml-mode.texi + $(MAKEINFO) $< + +nxml-mode.texi: nxml-mode.xml + $(EMACS) -batch -l rng-auto.el -f rng-format-manual + +VERSION: stamp-byte-compile rng-auto.el + $(EMACS) -batch -l rng-auto.el -f rng-write-version + +TAGS: $(SRC) + $(ETAGS) $(SRC) + +dist: stamp-byte-compile $(EXTRA) + @version=`cat VERSION`; \ + set -e; \ + echo Making $(PACKAGE)-$$version.tar.gz; \ + rm -fr $(PACKAGE)-$$version; \ + mkdir $(PACKAGE)-$$version; \ + cd $(PACKAGE)-$$version; \ + for f in $(EXTRA) $(SRC) $(ELC); do \ + ln -s ../$$f .; \ + done; \ + mkdir schema; \ + cd schema; \ + for f in ../../schema/*.rnc ../../schema/*.xml; do \ + ln -s $$f .; \ + done; \ + cd ..; \ + mkdir char-name; \ + mkdir char-name/unicode; \ + cd char-name/unicode; \ + for f in ../../../char-name/unicode/*-*.el; do \ + ln -s $$f .; \ + done; \ + cd ../../..; \ + tar cfhz $(PACKAGE)-$$version.tar.gz $(PACKAGE)-$$version; \ + rm -fr $(PACKAGE)-$$version + +clean: + -rm -f $(FILESTOCLEAN) + +.PHONY: all clean info
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/NEWS Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,199 @@ +20041004 +-------- + +Support for outlining has been added. See the manual for more details. + +C-u C-c C-n goes to the first error. + +20040910 +-------- + +C-c RET splits the current element as in PSGML. + +20040908 +-------- + +Indentation has been rewritten. Indentation of attribute names and +values should work better. The default value of +`nxml-attribute-indent' has been changed to 4. + +Syntax highlighting with a dark background should now work. + +20040726 +-------- + +The attribute pathSuffix on the uri element in schema locating files +has been replaced by a more general pattern attribute. The +transformURI element now has required fromPattern and toPattern +attributes. + +The schema related bindings have been changed to use C-c C-s as a prefix +as follows: + + C-c C-s => C-c C-s C-f (f for file) + C-c C-a => C-c C-s C-a + C-c C-t => C-c C-s C-t + C-c C-l => C-c C-s C-l + C-c C-w => C-c C-s C-w + +There's now an XML menu on the menu-bar. + +20031031 +-------- + +C-c C-d "dynamically" chooses a tag to put around the word before +point, rather like M-/. + +The mechanism for locating the schema has changed completely. The new +mechanism is described in the manual. Any existing customizations of +`rng-auto-element-alist' or `rng-auto-file-name-alist' will no longer +be effective. + +C-c C-a is now bound to rng-auto-set-schema. + +20031018 +-------- + +Unicode names can be used to insert characters with the new command +C-c C-u. Normally, this inserts a character reference. With a prefix +arg (i.e. C-u C-c C-u), it inserts the character directly. You can +customize `nxml-enabled-unicode-blocks' to control what Unicode blocks +are used for completing names. + +Extra information is displayed for character references. The Unicode +name is displayed in a tooltip. A glyph for the referenced character +is displayed in a distinguished face following the character +reference; this can be disabled by customizing +`nxml-char-ref-display-glyph-flag'. The command +`nxml-toggle-char-ref-extra-display' dynamically toggles the display +of extra information for character references for a particular buffer. +This can be used if the display of extra information is causing +performance problems. nXML mode tries to figure out which glyphs can +be displayed. Unfortunately Emacs doesn't provide the primitives +necessary to do this properly, so nXML mode has to guess and will +sometimes guess wrong. The hook `nxml-glyph-set-hook' can be used to +change nXML mode's guess. + +New command C-c C-w says what schema is being used. + +C-c C-s now turns on validation if it is not already on. + +20030928 +-------- + +M-q has been implemented so that it works reasonably with XML. Other +paragraph-related commands (M-{, M-}, M-h) have also been implemented. + +New command M-x rng-auto-set-schema to set the schema based on the +buffer's current contents and file-name. This is called automatically +when rng-validate-mode is first enabled. + +There's now a C-M-d to go with C-M-u. C-M-d moves forward down into +the content of an element. C-M-n and C-M-p move to the next or +previous element. + +By default, the sexp commands (C-M-f, C-M-b, C-M-k, C-M-SPC) operate +on tags rather than elements. To restore the old behaviour, +customize nxml-sexp-element-flag. + +The file TUTORIAL has been replaced by nxml-mode.info; this is in info +format and can be read using Emacs. The source is maintained in a +simple, ad-hoc XML format. + +20030915 +-------- + +XML encodings should now work properly. When saving a buffer, +nxml-mode arranges to use the encoding declared in the XML +declaration. If there is no encoding declared, then nxml-mode will +use utf-8 or utf-16 according to the user options +`nxml-prefer-utf-16-to-utf-8-flag' and +`nxml-prefer-utf-16-little-to-big-endian-flag'. If the chosen encoding +cannot encode all the characters in the buffer, nxml-mode will +complain and give the user an opportunity to use an encoding that can. + +A new command C-c C-x inserts an XML declaration. + +The option `nxml-auto-insert-xml-declaration-flag' automatically +inserts an XML declaration in new files. + +The `nxml-default-buffer-file-coding-system' option allows a different +default buffer-file-coding-system for nXML mode buffers. This affects +what XML declaration is inserted. + +Encoding names in XML declarations are now validated by +rng-validate-mode. + +RDF/XML schema was updated to version in 05 September 2003 WD. + +20030912 +-------- + +The tutorial has a new section on inserting end-tags. + +By default </ no longer automatically inserts the rest of the end-tag. +You can do + + M-x customize-variable RET nxml-slash-auto-complete-flag RET + +and then follow the instructions displayed in the buffer to get the +old behaviour. + +Completion after </ will complete the rest of the end-tag. Completion +after < will include the end-tag in the possibilities if allowed by +the schema. + +You can use C-c C-i instead of > to close the start-tag of an +inline-level element. After inserting the >, it will insert the +end-tag and leave point before the end-tag. The `i' is supposed to be +mnemonic for `inline'. C-c C-b is similar, but for block elements: the +start-tag, point and the end-tag will all be on separate lines. + +The binding for inserting an end-tag has changed from C-c / to C-c C-f +to comply with Emacs guidelines about what keys major modes should +bind. The `f' is supposed to be mnemonic for `finish'. + +Completion always puts point after all the characters it inserts. It +doesn't insert a `>' after completing a start-tag name. + +Completion no longer completes CDATA section and comment delimiters. + +The nxml-start-auto-coding command enables auto-detection of a file's +encoding as specified in the XML Recommendation for files that use +nxml-mode; rng-auto.el calls this. + +20030906 +-------- + +Validation messages applicable to point are displayed automatically. + +Completion can deal with prefixes that haven't yet been declared. + +rng-preferred-prefix-alist variable added. + +Namespace URIs can be completed. + +xmlns and xmlns:* attributes can be completed. + +CDATA section and comment delimiters can be completed. + +Each kind of completion has its own history. + +Completion function moved to nxml-mode; uses a hook to allow +schema-sensitive completion. Completion function bound to C-return. +Also bound to M-TAB as before, unless +nxml-bind-meta-tab-to-complete-flag is nil. When there is a window +system, nxml-bind-meta-tab-to-complete-flag is nil by default, This +avoid problems with M-TAB, which is not passed through by several +window systems/managers. + +TUTORIAL file added. + +NEWS file added. + +Bug fixes. + +20030901 +-------- + +Initial release.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/README Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,106 @@ +This is a new major mode for GNU Emacs for editing XML documents. It +supports editing well-formed XML documents and also provides +schema-sensitive editing of XML documents using RELAX NG Compact +Syntax. + +To use this, you need GNU Emacs version 21.x, preferably 21.3. GNU +Emacs version 20 will not work properly, nor will XEmacs. + +To get started, do + + M-x load-file <RET> rng-auto.el <RET> + +This defines the necessary autoloads. Now, visit a file containing +an XML document, and do + + M-x nxml-mode + +Now do + + C-h m + +for information on how to use nxml-mode. + +The beginnings of a manual are in nxml-mode.info. You can read this +using + + C-u M-x info RET nxml-mode.info RET + +It's also installed as an entry at the end of the top-level info +directory. So you can read it with C-h i as usual. + +You can use test.valid.xml and test.invalid.xml as examples of valid +and invalid XML documents. + +To get things automatically loaded each time you start Emacs, add + + (load "~/nxml-mode-200YMMDD/rng-auto.el") + +to your .emacs, where ~/nxml-mode-200YMMDD is the directory containing +the .elc files. Note that rng-auto.el does not load all of the +nxml-mode code; it merely sets things up so that all the features of +nxml-mode will be autoloaded properly. You should not try to autoload +rng-auto.el itself. + +To use nxml-mode automatically for files with an extension of xml, +xsl, rng or xhtml, add + + (setq auto-mode-alist + (cons '("\\.\\(xml\\|xsl\\|rng\\|xhtml\\)\\'" . nxml-mode) + auto-mode-alist)) + +to your .emacs. + +If you edit XML using iso-8859-N encodings other than iso-8859-1 and +you are running Emacs 21.3 or later, then I recommend enabling +unify-8859-on-decoding-mode, by adding + + (unify-8859-on-decoding-mode) + +to you .emacs. + +To get validation and schema-sensitive editing, you need a RELAX NG +Compact Syntax (RNC) schema for you document. The schema directory +includes some schemas for popular document types. + +For more on RELAX NG, see + + http://relaxng.org + +For a tutorial on RELAX NG Compact Syntax, see + + http://relaxng.org/compact-tutorial.html + +For automatically creating RNC schemas, I recommend my Trang program: + + http://www.thaiopensource.com/relaxng/trang.html + +You can use this to + +- infer an RNC schema from an instance document; + +- convert a DTD to an RNC schema; + +- convert a RELAX NG XML syntax schema to an RNC schema. + +To convert a RELAX NG XML syntax (.rng) schema to a RNC schema, you +can also use the XSLT stylesheet from + + http://www.pantor.com/download.html + +To convert a W3C XML Schema to an RNC schema, you need first to +convert it to RELAX NG XML syntax using Sun's RELAX NG converter tool +rngconv (built on top of MSV). See + + https://msv.dev.java.net/ + +The file NEWS describes recent changes. + +Please use the list + + http://groups.yahoo.com/group/emacs-nxml-mode/ + +for bug reports, discussion. I will announce all new versions there. + +James Clark +http://www.jclark.com/contact.html
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/TODO Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,468 @@ +* High priority + +** Command to insert an element template, including all required +attributes and child elements. When there's a choice of elements +possible, we could insert a comment, and put an overlay on that +comment that makes it behave like a button with a pop-up menu to +select the appropriate choice. + +** Command to tag a region. With a schema should complete using legal +tags, but should work without a schema as well. + +** Provide a way to conveniently rename an element. With a schema should +complete using legal tags, but should work without a schema as well. + +* Outlining + +** Implement C-c C-o C-q. + +** Install pre/post command hook for moving out of invisible section. + +** Put a modify hook on invisible sections that expands them. + +** Integrate dumb folding somehow. + +** An element should be able to be its own heading. + +** Optimize to avoid complete buffer scan on each command. + +** Make it work with HTML-style headings (i.e. level indicated by +name of heading element rather than depth of section nesting). + +** Recognize root element as a section provided it has a title, even +if it doesn't match section-element-name-regex. + +** Support for incremental search automatically making hidden text +visible. + +** Allow title to be an attribute. + +** Command that says to recognize the tag at point as a section/heading. + +** Explore better ways to determine when an element is a section +or a heading. + +** rng-next-error needs to either ignore invisible portion or reveal it +(maybe use isearch oriented text properties). + +** Errors within hidden section should be highlighted by underlining the +ellipsis. + +** Make indirect buffers work. + +** How should nxml-refresh outline recover from non well-formed tags? + +** Hide tags in title elements? + +** Use overlays instead of text properties for holding outline state? +Necessary for indirect buffers to work? + +** Allow an outline to go in the speedbar. + +** Split up outlining manual section into subsections. + +** More detail in the manual about each outlining command. + +** More menu entries for hiding/showing? + +** Indication of many lines have been hidden? + +* Locating schemas + +** Should rng-validate-mode give the user an opportunity to specify a +schema if there is currently none? Or should it at least give a hint +to the user how to specify a non-vacuous schema? + +** Support for adding new schemas to schema-locating files. Add +documentElement and namespace elements. + +** C-c C-w should be able to report current type id. + +** Implement doctypePublicId. + +** Implement typeIdBase. + +** Implement typeIdProcessingInstruction. + +** Support xml:base. + +** Implement group. + +** Find preferred prefix from schema-locating files. Get rid of +rng-preferred-prefix-alist. + +** Inserting document element with vacuous schema should complete using +document elements declared in schema locating files, and set schema +appropriately. + +** Add a ruleType attribute to the <include> element? + +** Allow processing instruction in prolog to contain the compact syntax +schema directly. + +** Use RDDL to locate a schema based on the namespace URI. + +** Should not prompt to add redundant association to schema locating +file. + +** Command to reload current schema. + +* Schema-sensitive features + +** Should filter dynamic markup possibilities using schema validity, by +adding hook to nxml-mode. + +** Dynamic markup word should (at least optionally) be able to look in +other buffers that are using nxml-mode. + +** Should clicking on Invalid move to next error if already on an error? + +** Take advantage of a:documentation. Needs change to schema format. + +** Provide feasible validation (as in Jing) toggle. + +** Save the validation state as a property on the error overlay to enable +more detailed diagnosis. + +** Provide an Error Summary buffer showing all the validation errors. + +** Pop-up menu. What is useful? Tag a region (should be greyed out if +the region is not balanced). Suggestions based on error messages. + +** Have configurable list of namespace URIs so that we can provide +namespace URI completion on extension elements or with schema-less +documents. + +** Allow validation to handle XInclude. + +** ID/IDREF support. + +* Completion + +** Make it work with icomplete. Only use a function to complete when +some of the possible names have undeclared namespaces. + +** How should C-return in mixed text work? + +** When there's a vacuous schema, C-return after < will insert the +end-tag. Is this a bug or a feature? + +** After completing start-tag, ensure we don't get unhelpful message +from validation + +** Syntax table for completion. + +** Should complete start-tag name with a space if namespace attributes +are required. + +** When completing start-tag name with no prefix and it doesn't match +should try to infer namespace from local name. + +** Should completion pay attention to characters after point? If so, +how? + +** When completing start-tag name, add required atts if only one required +attribute. + +** When completing attribute name, add attribute value if only one value +is possible. + +** After attribute-value completion, insert space after close delimiter +if more attributes are required. + +** Complete on enumerated data values in elements. + +** When in context that allows only elements, should get tag +completion without having to type < first. + +** When immediately after start-tag name, and name is valid and not +prefix of any other name, should C-return complete on attribute names? + +** When completing attributes, more consistent to ignore all attributes +after point. + +** Inserting attribute value completions needs to be sensitive to what +delimiter is used so that it quotes the correct character. + +** Complete on encoding-names in XML decl. + +** Complete namespace declarations by searching for all namespaces +mentioned in the schema. + +* Well-formed XML support + +** Deal better with Mule-UCS + +** Deal with UTF-8 BOM when reading. + +** Complete entity names. + +** Provide some support for entity names for MathML. + +** Command to repeat the last tag. + +** Support for changing between character references and characters. +Need to check that context is one in which character references are +allowed. xmltok prolog parsing will need to distinguish parameter +literals from other kinds of literal. + +** Provide a comment command to bind to M-; that works better than the +normal one. + +** Make indenting in a multi-line comment work. + +** Structure view. Separate buffer displaying element tree. Be able to +navigate from structure view to document and vice-versa. + +** Flash matching >. + +** Smart selection command that selects increasingly large syntactically +coherent chunks of XML. If point is in an attribute value, first +select complete value; then if command is repeated, select value plus +delimiters, then select attribute name as well, then complete +start-tag, then complete element, then enclosing element, etc. + +** ispell integration. + +** Block-level items in mixed content should be indented, e.g: + <para>This is list: + <ul> + <li>item</li> + +** Provide option to indent like this: + +** <para>This is a paragraph + occupying multiple lines.</para> + +** Option to add make a / that closes a start-tag electrically insert a +space for the XHTML guys. + +** C-M-q should work. + +* Datatypes + +** Figure out workaround for CJK characters with regexps. + +** Does category C contain Cn? + +** Do ENTITY datatype properly. + +* XML Parsing Library + +** Parameter entity parsing option, nil (never), t (always), +unless-standalone (unless standalone="yes" in XML declaration). + +** When a file is currently being edited, there should be an option to +use its buffer instead of the on-disk copy. + +* Handling all XML features + +** Provide better support for editing external general parsed entities. +Perhaps provide a way to force ignoring undefined entities; maybe turn +this on automatically with <?xml encoding=""?> (with no version +pseudo-att). + +** Handle internal general entity declarations containing elements. + +** Handle external general entity declarations. + +** Handle default attribute declarations in internal subset. + +** Handle parameter entities (including DTD). + +* RELAX NG + +** Do complete schema checking, at least optionally. + +** Detect include/external loops during schema parse. + +** Coding system detection for schemas. Should use utf-8/utf-16 per the +spec. But also need to allow encodings other than UTF-8/16 to support +CJK charsets that Emacs cannot represent in Unicode. + +* Catching XML errors + +** Check public identifiers. + +** Check default attribute values. + +* Performance + +** Explore whether overlay-recenter can cure overlays performance +problems. + +** Cache schemas. Need to have list of files and mtimes. + +** Make it possible to reduce rng-validate-chunk-size significantly, +perhaps to 500 bytes, without bad performance impact: don't do +redisplay on every chunk; pass continue functions on other uses of +rng-do-some-validation. + +** Cache after first tag. + +** Introduce a new name class that is a choice between names (so that +we can use member) + +** intern-choice should simplify after patterns with same 1st/2nd args + +** Large numbers of overlays slow things down dramatically. Represent +errors using text properties. This implies we cannot incrementally +keep track of the number of errors, in order to determine validity. +Instead, when validation completes, scan for any characters with an +error text property; this seems to be fast enough even with large +buffers. Problem with error at end of buffer, where there's no +character; need special variable for this. Need to merge face from +font-lock with the error face: use :inherit attribute with list of two +faces. How do we avoid making rng-valid depend on nxml-mode? + +* Error recovery + +** Don't stop at newline in looking for close of start-tag. + +** Use indentation to guide recovery from mismatched end-tags + +** Don't keep parsing when currently not well-formed but previously +well-formed + +** Try to recover from a bad start-tag by popping an open element if +there was a mismatched end-tag unaccounted for. + +** Try to recover from a bad start-tag open on the hypothesis that there +was an error in the namespace URI. + +** Better recovery from ill-formed XML declarations. + +* Useability improvements + +** Should print a "Parsing..." message during long movements. + +** Provide better position for reference to undefined pattern error. + +** Put Well-formed in the mode-line when validating against any-content. + +** Trim marking of illegal data for leading and trailing whitespace. + +** Show Invalid status as soon as we are sure it's invalid, rather than +waiting for everything to be completely up to date. + +** When narrowed, Valid or Invalid status should probably consider only +validity of narrowed region. + +* Bug fixes + +** Need to give an error for a document like: <foo/><![CDATA[ ]]> + +** Make nxml-forward-balanced-item work better for the prolog. + +** Make filling and indenting comments work in the prolog. + +** Should delete RNC Input buffers. + +** Figure out what regex use for NCName and use it consistently, + +** Should have not-well-formed tokens in ref. + +** Require version in XML declaration? Probably not because prevents +use for external parsed entities. At least forbid standalone +without version. + +** Reject schema that compiles to rng-not-allowed-ipattern. + +** Move point backwards on schema parse error so that it's on the right token. + +* Internal + +** Use rng-quote-string consistently. + +** Use parsing library for XML to texinfo conversion. + +** Rename xmltok.el to nxml-token.el. Use nxml-t- prefix instead of +xmltok-. Change nxml-t-type to nxml-t-token-type, nxml-t-start to +nxml-t-token-start. + +** Can we set fill-prefix to nil and rely on indenting? + +** xmltok should make available replacement text of entities containing +elements + +** In rng-valid, instead of using modification-hooks and +insert-behind-hooks on dependent overlays, use same technique as +nxml-mode. + +** Port to XEmacs. Issues include: Unicode (XEmacs seems to be based on +Mule-UCS); overlays/text properties vs extents; absence of +fontification-functions hook. + +* Fontification + +** Allow face to depend on element qname, attribute qname, attribute +value. Use list with pairs of (R . F), where R specifies regexps and +F specifies faces. How can this list be made to depend on the +document type? + +* Other + +** Support RELAX NG XML syntax (use XML parsing library). + +** Support W3C XML Schema (use XML parsing library). + +** Command to infer schema from current document (like trang). + +* Schemas + +** XSLT schema should take advantage of RELAX NG to express cooccurrence +constraints on attributes (e.g. xsl:template). + +* Documentation + +** Move material from README to manual. + +** Document encodings. + +* Notes + +** How can we allow an error to be displayed on a different token from +where it is detected? In particular, for a missing closing ">" we +will need to display it at the beginning of the following token. At +the moment, when we parse the following token the error overlay will +get cleared. + +** How should rng-goto-next-error deal with narrowing? + +** Perhaps should merge errors having same start position even if they +have different ends. + +** How to handle surrogates? One possibility is to be compatible with +utf8.e: represent as sequence of 4 chars. But utf-16 is incompatible +with this. + +** Should we distinguish well-formedness errors from invalidity errors? +(I think not: we may want to recover from a bad start-tag by implying +an end-tag.) + +** Seems to be a bug with Emacs, where a mouse movement that causes +help-echo text to appear counts as pending input but does not cause +idle timer to be restarted. + +** Use XML to represent this file. + +** I had a TODO which said simply "split-string". What did I mean? + +** Investigate performance on large files all on one line. + +* CVS emacs issues + +** Take advantage of UTF-8 CJK support. + +** Supply a next-error-function. + +** Investigate this NEWS item "Emacs now tries to set up buffer coding +systems for HTML/XML files automatically." + +** Take advantage of the pointer text property. + +** Leverage char-displayable-p. + +Local variables: +mode: outline +end:
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/subdirs.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,8 @@ +;; -*- no-byte-compile: t -*- +;; In load-path, after this directory should come +;; certain of its subdirectories. Here we specify them. +(normal-top-level-add-to-load-path '("unicode" )) +;; Local Variables: +;; version-control: never +;; no-byte-compile: t +;; End:
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/00000-0007F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,97 @@ +(nxml-define-char-name-set 'basic-latin + '(("SPACE" #x0020) + ("EXCLAMATION MARK" #x0021) + ("QUOTATION MARK" #x0022) + ("NUMBER SIGN" #x0023) + ("DOLLAR SIGN" #x0024) + ("PERCENT SIGN" #x0025) + ("AMPERSAND" #x0026) + ("APOSTROPHE" #x0027) + ("LEFT PARENTHESIS" #x0028) + ("RIGHT PARENTHESIS" #x0029) + ("ASTERISK" #x002A) + ("PLUS SIGN" #x002B) + ("COMMA" #x002C) + ("HYPHEN-MINUS" #x002D) + ("FULL STOP" #x002E) + ("SOLIDUS" #x002F) + ("DIGIT ZERO" #x0030) + ("DIGIT ONE" #x0031) + ("DIGIT TWO" #x0032) + ("DIGIT THREE" #x0033) + ("DIGIT FOUR" #x0034) + ("DIGIT FIVE" #x0035) + ("DIGIT SIX" #x0036) + ("DIGIT SEVEN" #x0037) + ("DIGIT EIGHT" #x0038) + ("DIGIT NINE" #x0039) + ("COLON" #x003A) + ("SEMICOLON" #x003B) + ("LESS-THAN SIGN" #x003C) + ("EQUALS SIGN" #x003D) + ("GREATER-THAN SIGN" #x003E) + ("QUESTION MARK" #x003F) + ("COMMERCIAL AT" #x0040) + ("LATIN CAPITAL LETTER A" #x0041) + ("LATIN CAPITAL LETTER B" #x0042) + ("LATIN CAPITAL LETTER C" #x0043) + ("LATIN CAPITAL LETTER D" #x0044) + ("LATIN CAPITAL LETTER E" #x0045) + ("LATIN CAPITAL LETTER F" #x0046) + ("LATIN CAPITAL LETTER G" #x0047) + ("LATIN CAPITAL LETTER H" #x0048) + ("LATIN CAPITAL LETTER I" #x0049) + ("LATIN CAPITAL LETTER J" #x004A) + ("LATIN CAPITAL LETTER K" #x004B) + ("LATIN CAPITAL LETTER L" #x004C) + ("LATIN CAPITAL LETTER M" #x004D) + ("LATIN CAPITAL LETTER N" #x004E) + ("LATIN CAPITAL LETTER O" #x004F) + ("LATIN CAPITAL LETTER P" #x0050) + ("LATIN CAPITAL LETTER Q" #x0051) + ("LATIN CAPITAL LETTER R" #x0052) + ("LATIN CAPITAL LETTER S" #x0053) + ("LATIN CAPITAL LETTER T" #x0054) + ("LATIN CAPITAL LETTER U" #x0055) + ("LATIN CAPITAL LETTER V" #x0056) + ("LATIN CAPITAL LETTER W" #x0057) + ("LATIN CAPITAL LETTER X" #x0058) + ("LATIN CAPITAL LETTER Y" #x0059) + ("LATIN CAPITAL LETTER Z" #x005A) + ("LEFT SQUARE BRACKET" #x005B) + ("REVERSE SOLIDUS" #x005C) + ("RIGHT SQUARE BRACKET" #x005D) + ("CIRCUMFLEX ACCENT" #x005E) + ("LOW LINE" #x005F) + ("GRAVE ACCENT" #x0060) + ("LATIN SMALL LETTER A" #x0061) + ("LATIN SMALL LETTER B" #x0062) + ("LATIN SMALL LETTER C" #x0063) + ("LATIN SMALL LETTER D" #x0064) + ("LATIN SMALL LETTER E" #x0065) + ("LATIN SMALL LETTER F" #x0066) + ("LATIN SMALL LETTER G" #x0067) + ("LATIN SMALL LETTER H" #x0068) + ("LATIN SMALL LETTER I" #x0069) + ("LATIN SMALL LETTER J" #x006A) + ("LATIN SMALL LETTER K" #x006B) + ("LATIN SMALL LETTER L" #x006C) + ("LATIN SMALL LETTER M" #x006D) + ("LATIN SMALL LETTER N" #x006E) + ("LATIN SMALL LETTER O" #x006F) + ("LATIN SMALL LETTER P" #x0070) + ("LATIN SMALL LETTER Q" #x0071) + ("LATIN SMALL LETTER R" #x0072) + ("LATIN SMALL LETTER S" #x0073) + ("LATIN SMALL LETTER T" #x0074) + ("LATIN SMALL LETTER U" #x0075) + ("LATIN SMALL LETTER V" #x0076) + ("LATIN SMALL LETTER W" #x0077) + ("LATIN SMALL LETTER X" #x0078) + ("LATIN SMALL LETTER Y" #x0079) + ("LATIN SMALL LETTER Z" #x007A) + ("LEFT CURLY BRACKET" #x007B) + ("VERTICAL LINE" #x007C) + ("RIGHT CURLY BRACKET" #x007D) + ("TILDE" #x007E) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/00080-000FF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,98 @@ +(nxml-define-char-name-set 'latin-1-supplement + '(("NO-BREAK SPACE" #x00A0) + ("INVERTED EXCLAMATION MARK" #x00A1) + ("CENT SIGN" #x00A2) + ("POUND SIGN" #x00A3) + ("CURRENCY SIGN" #x00A4) + ("YEN SIGN" #x00A5) + ("BROKEN BAR" #x00A6) + ("SECTION SIGN" #x00A7) + ("DIAERESIS" #x00A8) + ("COPYRIGHT SIGN" #x00A9) + ("FEMININE ORDINAL INDICATOR" #x00AA) + ("LEFT-POINTING DOUBLE ANGLE QUOTATION MARK" #x00AB) + ("NOT SIGN" #x00AC) + ("SOFT HYPHEN" #x00AD) + ("REGISTERED SIGN" #x00AE) + ("MACRON" #x00AF) + ("DEGREE SIGN" #x00B0) + ("PLUS-MINUS SIGN" #x00B1) + ("SUPERSCRIPT TWO" #x00B2) + ("SUPERSCRIPT THREE" #x00B3) + ("ACUTE ACCENT" #x00B4) + ("MICRO SIGN" #x00B5) + ("PILCROW SIGN" #x00B6) + ("MIDDLE DOT" #x00B7) + ("CEDILLA" #x00B8) + ("SUPERSCRIPT ONE" #x00B9) + ("MASCULINE ORDINAL INDICATOR" #x00BA) + ("RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK" #x00BB) + ("VULGAR FRACTION ONE QUARTER" #x00BC) + ("VULGAR FRACTION ONE HALF" #x00BD) + ("VULGAR FRACTION THREE QUARTERS" #x00BE) + ("INVERTED QUESTION MARK" #x00BF) + ("LATIN CAPITAL LETTER A WITH GRAVE" #x00C0) + ("LATIN CAPITAL LETTER A WITH ACUTE" #x00C1) + ("LATIN CAPITAL LETTER A WITH CIRCUMFLEX" #x00C2) + ("LATIN CAPITAL LETTER A WITH TILDE" #x00C3) + ("LATIN CAPITAL LETTER A WITH DIAERESIS" #x00C4) + ("LATIN CAPITAL LETTER A WITH RING ABOVE" #x00C5) + ("LATIN CAPITAL LETTER AE" #x00C6) + ("LATIN CAPITAL LETTER C WITH CEDILLA" #x00C7) + ("LATIN CAPITAL LETTER E WITH GRAVE" #x00C8) + ("LATIN CAPITAL LETTER E WITH ACUTE" #x00C9) + ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX" #x00CA) + ("LATIN CAPITAL LETTER E WITH DIAERESIS" #x00CB) + ("LATIN CAPITAL LETTER I WITH GRAVE" #x00CC) + ("LATIN CAPITAL LETTER I WITH ACUTE" #x00CD) + ("LATIN CAPITAL LETTER I WITH CIRCUMFLEX" #x00CE) + ("LATIN CAPITAL LETTER I WITH DIAERESIS" #x00CF) + ("LATIN CAPITAL LETTER ETH" #x00D0) + ("LATIN CAPITAL LETTER N WITH TILDE" #x00D1) + ("LATIN CAPITAL LETTER O WITH GRAVE" #x00D2) + ("LATIN CAPITAL LETTER O WITH ACUTE" #x00D3) + ("LATIN CAPITAL LETTER O WITH CIRCUMFLEX" #x00D4) + ("LATIN CAPITAL LETTER O WITH TILDE" #x00D5) + ("LATIN CAPITAL LETTER O WITH DIAERESIS" #x00D6) + ("MULTIPLICATION SIGN" #x00D7) + ("LATIN CAPITAL LETTER O WITH STROKE" #x00D8) + ("LATIN CAPITAL LETTER U WITH GRAVE" #x00D9) + ("LATIN CAPITAL LETTER U WITH ACUTE" #x00DA) + ("LATIN CAPITAL LETTER U WITH CIRCUMFLEX" #x00DB) + ("LATIN CAPITAL LETTER U WITH DIAERESIS" #x00DC) + ("LATIN CAPITAL LETTER Y WITH ACUTE" #x00DD) + ("LATIN CAPITAL LETTER THORN" #x00DE) + ("LATIN SMALL LETTER SHARP S" #x00DF) + ("LATIN SMALL LETTER A WITH GRAVE" #x00E0) + ("LATIN SMALL LETTER A WITH ACUTE" #x00E1) + ("LATIN SMALL LETTER A WITH CIRCUMFLEX" #x00E2) + ("LATIN SMALL LETTER A WITH TILDE" #x00E3) + ("LATIN SMALL LETTER A WITH DIAERESIS" #x00E4) + ("LATIN SMALL LETTER A WITH RING ABOVE" #x00E5) + ("LATIN SMALL LETTER AE" #x00E6) + ("LATIN SMALL LETTER C WITH CEDILLA" #x00E7) + ("LATIN SMALL LETTER E WITH GRAVE" #x00E8) + ("LATIN SMALL LETTER E WITH ACUTE" #x00E9) + ("LATIN SMALL LETTER E WITH CIRCUMFLEX" #x00EA) + ("LATIN SMALL LETTER E WITH DIAERESIS" #x00EB) + ("LATIN SMALL LETTER I WITH GRAVE" #x00EC) + ("LATIN SMALL LETTER I WITH ACUTE" #x00ED) + ("LATIN SMALL LETTER I WITH CIRCUMFLEX" #x00EE) + ("LATIN SMALL LETTER I WITH DIAERESIS" #x00EF) + ("LATIN SMALL LETTER ETH" #x00F0) + ("LATIN SMALL LETTER N WITH TILDE" #x00F1) + ("LATIN SMALL LETTER O WITH GRAVE" #x00F2) + ("LATIN SMALL LETTER O WITH ACUTE" #x00F3) + ("LATIN SMALL LETTER O WITH CIRCUMFLEX" #x00F4) + ("LATIN SMALL LETTER O WITH TILDE" #x00F5) + ("LATIN SMALL LETTER O WITH DIAERESIS" #x00F6) + ("DIVISION SIGN" #x00F7) + ("LATIN SMALL LETTER O WITH STROKE" #x00F8) + ("LATIN SMALL LETTER U WITH GRAVE" #x00F9) + ("LATIN SMALL LETTER U WITH ACUTE" #x00FA) + ("LATIN SMALL LETTER U WITH CIRCUMFLEX" #x00FB) + ("LATIN SMALL LETTER U WITH DIAERESIS" #x00FC) + ("LATIN SMALL LETTER Y WITH ACUTE" #x00FD) + ("LATIN SMALL LETTER THORN" #x00FE) + ("LATIN SMALL LETTER Y WITH DIAERESIS" #x00FF) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/00100-0017F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,130 @@ +(nxml-define-char-name-set 'latin-extended-a + '(("LATIN CAPITAL LETTER A WITH MACRON" #x0100) + ("LATIN SMALL LETTER A WITH MACRON" #x0101) + ("LATIN CAPITAL LETTER A WITH BREVE" #x0102) + ("LATIN SMALL LETTER A WITH BREVE" #x0103) + ("LATIN CAPITAL LETTER A WITH OGONEK" #x0104) + ("LATIN SMALL LETTER A WITH OGONEK" #x0105) + ("LATIN CAPITAL LETTER C WITH ACUTE" #x0106) + ("LATIN SMALL LETTER C WITH ACUTE" #x0107) + ("LATIN CAPITAL LETTER C WITH CIRCUMFLEX" #x0108) + ("LATIN SMALL LETTER C WITH CIRCUMFLEX" #x0109) + ("LATIN CAPITAL LETTER C WITH DOT ABOVE" #x010A) + ("LATIN SMALL LETTER C WITH DOT ABOVE" #x010B) + ("LATIN CAPITAL LETTER C WITH CARON" #x010C) + ("LATIN SMALL LETTER C WITH CARON" #x010D) + ("LATIN CAPITAL LETTER D WITH CARON" #x010E) + ("LATIN SMALL LETTER D WITH CARON" #x010F) + ("LATIN CAPITAL LETTER D WITH STROKE" #x0110) + ("LATIN SMALL LETTER D WITH STROKE" #x0111) + ("LATIN CAPITAL LETTER E WITH MACRON" #x0112) + ("LATIN SMALL LETTER E WITH MACRON" #x0113) + ("LATIN CAPITAL LETTER E WITH BREVE" #x0114) + ("LATIN SMALL LETTER E WITH BREVE" #x0115) + ("LATIN CAPITAL LETTER E WITH DOT ABOVE" #x0116) + ("LATIN SMALL LETTER E WITH DOT ABOVE" #x0117) + ("LATIN CAPITAL LETTER E WITH OGONEK" #x0118) + ("LATIN SMALL LETTER E WITH OGONEK" #x0119) + ("LATIN CAPITAL LETTER E WITH CARON" #x011A) + ("LATIN SMALL LETTER E WITH CARON" #x011B) + ("LATIN CAPITAL LETTER G WITH CIRCUMFLEX" #x011C) + ("LATIN SMALL LETTER G WITH CIRCUMFLEX" #x011D) + ("LATIN CAPITAL LETTER G WITH BREVE" #x011E) + ("LATIN SMALL LETTER G WITH BREVE" #x011F) + ("LATIN CAPITAL LETTER G WITH DOT ABOVE" #x0120) + ("LATIN SMALL LETTER G WITH DOT ABOVE" #x0121) + ("LATIN CAPITAL LETTER G WITH CEDILLA" #x0122) + ("LATIN SMALL LETTER G WITH CEDILLA" #x0123) + ("LATIN CAPITAL LETTER H WITH CIRCUMFLEX" #x0124) + ("LATIN SMALL LETTER H WITH CIRCUMFLEX" #x0125) + ("LATIN CAPITAL LETTER H WITH STROKE" #x0126) + ("LATIN SMALL LETTER H WITH STROKE" #x0127) + ("LATIN CAPITAL LETTER I WITH TILDE" #x0128) + ("LATIN SMALL LETTER I WITH TILDE" #x0129) + ("LATIN CAPITAL LETTER I WITH MACRON" #x012A) + ("LATIN SMALL LETTER I WITH MACRON" #x012B) + ("LATIN CAPITAL LETTER I WITH BREVE" #x012C) + ("LATIN SMALL LETTER I WITH BREVE" #x012D) + ("LATIN CAPITAL LETTER I WITH OGONEK" #x012E) + ("LATIN SMALL LETTER I WITH OGONEK" #x012F) + ("LATIN CAPITAL LETTER I WITH DOT ABOVE" #x0130) + ("LATIN SMALL LETTER DOTLESS I" #x0131) + ("LATIN CAPITAL LIGATURE IJ" #x0132) + ("LATIN SMALL LIGATURE IJ" #x0133) + ("LATIN CAPITAL LETTER J WITH CIRCUMFLEX" #x0134) + ("LATIN SMALL LETTER J WITH CIRCUMFLEX" #x0135) + ("LATIN CAPITAL LETTER K WITH CEDILLA" #x0136) + ("LATIN SMALL LETTER K WITH CEDILLA" #x0137) + ("LATIN SMALL LETTER KRA" #x0138) + ("LATIN CAPITAL LETTER L WITH ACUTE" #x0139) + ("LATIN SMALL LETTER L WITH ACUTE" #x013A) + ("LATIN CAPITAL LETTER L WITH CEDILLA" #x013B) + ("LATIN SMALL LETTER L WITH CEDILLA" #x013C) + ("LATIN CAPITAL LETTER L WITH CARON" #x013D) + ("LATIN SMALL LETTER L WITH CARON" #x013E) + ("LATIN CAPITAL LETTER L WITH MIDDLE DOT" #x013F) + ("LATIN SMALL LETTER L WITH MIDDLE DOT" #x0140) + ("LATIN CAPITAL LETTER L WITH STROKE" #x0141) + ("LATIN SMALL LETTER L WITH STROKE" #x0142) + ("LATIN CAPITAL LETTER N WITH ACUTE" #x0143) + ("LATIN SMALL LETTER N WITH ACUTE" #x0144) + ("LATIN CAPITAL LETTER N WITH CEDILLA" #x0145) + ("LATIN SMALL LETTER N WITH CEDILLA" #x0146) + ("LATIN CAPITAL LETTER N WITH CARON" #x0147) + ("LATIN SMALL LETTER N WITH CARON" #x0148) + ("LATIN SMALL LETTER N PRECEDED BY APOSTROPHE" #x0149) + ("LATIN CAPITAL LETTER ENG" #x014A) + ("LATIN SMALL LETTER ENG" #x014B) + ("LATIN CAPITAL LETTER O WITH MACRON" #x014C) + ("LATIN SMALL LETTER O WITH MACRON" #x014D) + ("LATIN CAPITAL LETTER O WITH BREVE" #x014E) + ("LATIN SMALL LETTER O WITH BREVE" #x014F) + ("LATIN CAPITAL LETTER O WITH DOUBLE ACUTE" #x0150) + ("LATIN SMALL LETTER O WITH DOUBLE ACUTE" #x0151) + ("LATIN CAPITAL LIGATURE OE" #x0152) + ("LATIN SMALL LIGATURE OE" #x0153) + ("LATIN CAPITAL LETTER R WITH ACUTE" #x0154) + ("LATIN SMALL LETTER R WITH ACUTE" #x0155) + ("LATIN CAPITAL LETTER R WITH CEDILLA" #x0156) + ("LATIN SMALL LETTER R WITH CEDILLA" #x0157) + ("LATIN CAPITAL LETTER R WITH CARON" #x0158) + ("LATIN SMALL LETTER R WITH CARON" #x0159) + ("LATIN CAPITAL LETTER S WITH ACUTE" #x015A) + ("LATIN SMALL LETTER S WITH ACUTE" #x015B) + ("LATIN CAPITAL LETTER S WITH CIRCUMFLEX" #x015C) + ("LATIN SMALL LETTER S WITH CIRCUMFLEX" #x015D) + ("LATIN CAPITAL LETTER S WITH CEDILLA" #x015E) + ("LATIN SMALL LETTER S WITH CEDILLA" #x015F) + ("LATIN CAPITAL LETTER S WITH CARON" #x0160) + ("LATIN SMALL LETTER S WITH CARON" #x0161) + ("LATIN CAPITAL LETTER T WITH CEDILLA" #x0162) + ("LATIN SMALL LETTER T WITH CEDILLA" #x0163) + ("LATIN CAPITAL LETTER T WITH CARON" #x0164) + ("LATIN SMALL LETTER T WITH CARON" #x0165) + ("LATIN CAPITAL LETTER T WITH STROKE" #x0166) + ("LATIN SMALL LETTER T WITH STROKE" #x0167) + ("LATIN CAPITAL LETTER U WITH TILDE" #x0168) + ("LATIN SMALL LETTER U WITH TILDE" #x0169) + ("LATIN CAPITAL LETTER U WITH MACRON" #x016A) + ("LATIN SMALL LETTER U WITH MACRON" #x016B) + ("LATIN CAPITAL LETTER U WITH BREVE" #x016C) + ("LATIN SMALL LETTER U WITH BREVE" #x016D) + ("LATIN CAPITAL LETTER U WITH RING ABOVE" #x016E) + ("LATIN SMALL LETTER U WITH RING ABOVE" #x016F) + ("LATIN CAPITAL LETTER U WITH DOUBLE ACUTE" #x0170) + ("LATIN SMALL LETTER U WITH DOUBLE ACUTE" #x0171) + ("LATIN CAPITAL LETTER U WITH OGONEK" #x0172) + ("LATIN SMALL LETTER U WITH OGONEK" #x0173) + ("LATIN CAPITAL LETTER W WITH CIRCUMFLEX" #x0174) + ("LATIN SMALL LETTER W WITH CIRCUMFLEX" #x0175) + ("LATIN CAPITAL LETTER Y WITH CIRCUMFLEX" #x0176) + ("LATIN SMALL LETTER Y WITH CIRCUMFLEX" #x0177) + ("LATIN CAPITAL LETTER Y WITH DIAERESIS" #x0178) + ("LATIN CAPITAL LETTER Z WITH ACUTE" #x0179) + ("LATIN SMALL LETTER Z WITH ACUTE" #x017A) + ("LATIN CAPITAL LETTER Z WITH DOT ABOVE" #x017B) + ("LATIN SMALL LETTER Z WITH DOT ABOVE" #x017C) + ("LATIN CAPITAL LETTER Z WITH CARON" #x017D) + ("LATIN SMALL LETTER Z WITH CARON" #x017E) + ("LATIN SMALL LETTER LONG S" #x017F) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/00180-0024F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,181 @@ +(nxml-define-char-name-set 'latin-extended-b + '(("LATIN SMALL LETTER B WITH STROKE" #x0180) + ("LATIN CAPITAL LETTER B WITH HOOK" #x0181) + ("LATIN CAPITAL LETTER B WITH TOPBAR" #x0182) + ("LATIN SMALL LETTER B WITH TOPBAR" #x0183) + ("LATIN CAPITAL LETTER TONE SIX" #x0184) + ("LATIN SMALL LETTER TONE SIX" #x0185) + ("LATIN CAPITAL LETTER OPEN O" #x0186) + ("LATIN CAPITAL LETTER C WITH HOOK" #x0187) + ("LATIN SMALL LETTER C WITH HOOK" #x0188) + ("LATIN CAPITAL LETTER AFRICAN D" #x0189) + ("LATIN CAPITAL LETTER D WITH HOOK" #x018A) + ("LATIN CAPITAL LETTER D WITH TOPBAR" #x018B) + ("LATIN SMALL LETTER D WITH TOPBAR" #x018C) + ("LATIN SMALL LETTER TURNED DELTA" #x018D) + ("LATIN CAPITAL LETTER REVERSED E" #x018E) + ("LATIN CAPITAL LETTER SCHWA" #x018F) + ("LATIN CAPITAL LETTER OPEN E" #x0190) + ("LATIN CAPITAL LETTER F WITH HOOK" #x0191) + ("LATIN SMALL LETTER F WITH HOOK" #x0192) + ("LATIN CAPITAL LETTER G WITH HOOK" #x0193) + ("LATIN CAPITAL LETTER GAMMA" #x0194) + ("LATIN SMALL LETTER HV" #x0195) + ("LATIN CAPITAL LETTER IOTA" #x0196) + ("LATIN CAPITAL LETTER I WITH STROKE" #x0197) + ("LATIN CAPITAL LETTER K WITH HOOK" #x0198) + ("LATIN SMALL LETTER K WITH HOOK" #x0199) + ("LATIN SMALL LETTER L WITH BAR" #x019A) + ("LATIN SMALL LETTER LAMBDA WITH STROKE" #x019B) + ("LATIN CAPITAL LETTER TURNED M" #x019C) + ("LATIN CAPITAL LETTER N WITH LEFT HOOK" #x019D) + ("LATIN SMALL LETTER N WITH LONG RIGHT LEG" #x019E) + ("LATIN CAPITAL LETTER O WITH MIDDLE TILDE" #x019F) + ("LATIN CAPITAL LETTER O WITH HORN" #x01A0) + ("LATIN SMALL LETTER O WITH HORN" #x01A1) + ("LATIN CAPITAL LETTER OI" #x01A2) + ("LATIN SMALL LETTER OI" #x01A3) + ("LATIN CAPITAL LETTER P WITH HOOK" #x01A4) + ("LATIN SMALL LETTER P WITH HOOK" #x01A5) + ("LATIN LETTER YR" #x01A6) + ("LATIN CAPITAL LETTER TONE TWO" #x01A7) + ("LATIN SMALL LETTER TONE TWO" #x01A8) + ("LATIN CAPITAL LETTER ESH" #x01A9) + ("LATIN LETTER REVERSED ESH LOOP" #x01AA) + ("LATIN SMALL LETTER T WITH PALATAL HOOK" #x01AB) + ("LATIN CAPITAL LETTER T WITH HOOK" #x01AC) + ("LATIN SMALL LETTER T WITH HOOK" #x01AD) + ("LATIN CAPITAL LETTER T WITH RETROFLEX HOOK" #x01AE) + ("LATIN CAPITAL LETTER U WITH HORN" #x01AF) + ("LATIN SMALL LETTER U WITH HORN" #x01B0) + ("LATIN CAPITAL LETTER UPSILON" #x01B1) + ("LATIN CAPITAL LETTER V WITH HOOK" #x01B2) + ("LATIN CAPITAL LETTER Y WITH HOOK" #x01B3) + ("LATIN SMALL LETTER Y WITH HOOK" #x01B4) + ("LATIN CAPITAL LETTER Z WITH STROKE" #x01B5) + ("LATIN SMALL LETTER Z WITH STROKE" #x01B6) + ("LATIN CAPITAL LETTER EZH" #x01B7) + ("LATIN CAPITAL LETTER EZH REVERSED" #x01B8) + ("LATIN SMALL LETTER EZH REVERSED" #x01B9) + ("LATIN SMALL LETTER EZH WITH TAIL" #x01BA) + ("LATIN LETTER TWO WITH STROKE" #x01BB) + ("LATIN CAPITAL LETTER TONE FIVE" #x01BC) + ("LATIN SMALL LETTER TONE FIVE" #x01BD) + ("LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE" #x01BE) + ("LATIN LETTER WYNN" #x01BF) + ("LATIN LETTER DENTAL CLICK" #x01C0) + ("LATIN LETTER LATERAL CLICK" #x01C1) + ("LATIN LETTER ALVEOLAR CLICK" #x01C2) + ("LATIN LETTER RETROFLEX CLICK" #x01C3) + ("LATIN CAPITAL LETTER DZ WITH CARON" #x01C4) + ("LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON" #x01C5) + ("LATIN SMALL LETTER DZ WITH CARON" #x01C6) + ("LATIN CAPITAL LETTER LJ" #x01C7) + ("LATIN CAPITAL LETTER L WITH SMALL LETTER J" #x01C8) + ("LATIN SMALL LETTER LJ" #x01C9) + ("LATIN CAPITAL LETTER NJ" #x01CA) + ("LATIN CAPITAL LETTER N WITH SMALL LETTER J" #x01CB) + ("LATIN SMALL LETTER NJ" #x01CC) + ("LATIN CAPITAL LETTER A WITH CARON" #x01CD) + ("LATIN SMALL LETTER A WITH CARON" #x01CE) + ("LATIN CAPITAL LETTER I WITH CARON" #x01CF) + ("LATIN SMALL LETTER I WITH CARON" #x01D0) + ("LATIN CAPITAL LETTER O WITH CARON" #x01D1) + ("LATIN SMALL LETTER O WITH CARON" #x01D2) + ("LATIN CAPITAL LETTER U WITH CARON" #x01D3) + ("LATIN SMALL LETTER U WITH CARON" #x01D4) + ("LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON" #x01D5) + ("LATIN SMALL LETTER U WITH DIAERESIS AND MACRON" #x01D6) + ("LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE" #x01D7) + ("LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE" #x01D8) + ("LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON" #x01D9) + ("LATIN SMALL LETTER U WITH DIAERESIS AND CARON" #x01DA) + ("LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE" #x01DB) + ("LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE" #x01DC) + ("LATIN SMALL LETTER TURNED E" #x01DD) + ("LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON" #x01DE) + ("LATIN SMALL LETTER A WITH DIAERESIS AND MACRON" #x01DF) + ("LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON" #x01E0) + ("LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON" #x01E1) + ("LATIN CAPITAL LETTER AE WITH MACRON" #x01E2) + ("LATIN SMALL LETTER AE WITH MACRON" #x01E3) + ("LATIN CAPITAL LETTER G WITH STROKE" #x01E4) + ("LATIN SMALL LETTER G WITH STROKE" #x01E5) + ("LATIN CAPITAL LETTER G WITH CARON" #x01E6) + ("LATIN SMALL LETTER G WITH CARON" #x01E7) + ("LATIN CAPITAL LETTER K WITH CARON" #x01E8) + ("LATIN SMALL LETTER K WITH CARON" #x01E9) + ("LATIN CAPITAL LETTER O WITH OGONEK" #x01EA) + ("LATIN SMALL LETTER O WITH OGONEK" #x01EB) + ("LATIN CAPITAL LETTER O WITH OGONEK AND MACRON" #x01EC) + ("LATIN SMALL LETTER O WITH OGONEK AND MACRON" #x01ED) + ("LATIN CAPITAL LETTER EZH WITH CARON" #x01EE) + ("LATIN SMALL LETTER EZH WITH CARON" #x01EF) + ("LATIN SMALL LETTER J WITH CARON" #x01F0) + ("LATIN CAPITAL LETTER DZ" #x01F1) + ("LATIN CAPITAL LETTER D WITH SMALL LETTER Z" #x01F2) + ("LATIN SMALL LETTER DZ" #x01F3) + ("LATIN CAPITAL LETTER G WITH ACUTE" #x01F4) + ("LATIN SMALL LETTER G WITH ACUTE" #x01F5) + ("LATIN CAPITAL LETTER HWAIR" #x01F6) + ("LATIN CAPITAL LETTER WYNN" #x01F7) + ("LATIN CAPITAL LETTER N WITH GRAVE" #x01F8) + ("LATIN SMALL LETTER N WITH GRAVE" #x01F9) + ("LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE" #x01FA) + ("LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE" #x01FB) + ("LATIN CAPITAL LETTER AE WITH ACUTE" #x01FC) + ("LATIN SMALL LETTER AE WITH ACUTE" #x01FD) + ("LATIN CAPITAL LETTER O WITH STROKE AND ACUTE" #x01FE) + ("LATIN SMALL LETTER O WITH STROKE AND ACUTE" #x01FF) + ("LATIN CAPITAL LETTER A WITH DOUBLE GRAVE" #x0200) + ("LATIN SMALL LETTER A WITH DOUBLE GRAVE" #x0201) + ("LATIN CAPITAL LETTER A WITH INVERTED BREVE" #x0202) + ("LATIN SMALL LETTER A WITH INVERTED BREVE" #x0203) + ("LATIN CAPITAL LETTER E WITH DOUBLE GRAVE" #x0204) + ("LATIN SMALL LETTER E WITH DOUBLE GRAVE" #x0205) + ("LATIN CAPITAL LETTER E WITH INVERTED BREVE" #x0206) + ("LATIN SMALL LETTER E WITH INVERTED BREVE" #x0207) + ("LATIN CAPITAL LETTER I WITH DOUBLE GRAVE" #x0208) + ("LATIN SMALL LETTER I WITH DOUBLE GRAVE" #x0209) + ("LATIN CAPITAL LETTER I WITH INVERTED BREVE" #x020A) + ("LATIN SMALL LETTER I WITH INVERTED BREVE" #x020B) + ("LATIN CAPITAL LETTER O WITH DOUBLE GRAVE" #x020C) + ("LATIN SMALL LETTER O WITH DOUBLE GRAVE" #x020D) + ("LATIN CAPITAL LETTER O WITH INVERTED BREVE" #x020E) + ("LATIN SMALL LETTER O WITH INVERTED BREVE" #x020F) + ("LATIN CAPITAL LETTER R WITH DOUBLE GRAVE" #x0210) + ("LATIN SMALL LETTER R WITH DOUBLE GRAVE" #x0211) + ("LATIN CAPITAL LETTER R WITH INVERTED BREVE" #x0212) + ("LATIN SMALL LETTER R WITH INVERTED BREVE" #x0213) + ("LATIN CAPITAL LETTER U WITH DOUBLE GRAVE" #x0214) + ("LATIN SMALL LETTER U WITH DOUBLE GRAVE" #x0215) + ("LATIN CAPITAL LETTER U WITH INVERTED BREVE" #x0216) + ("LATIN SMALL LETTER U WITH INVERTED BREVE" #x0217) + ("LATIN CAPITAL LETTER S WITH COMMA BELOW" #x0218) + ("LATIN SMALL LETTER S WITH COMMA BELOW" #x0219) + ("LATIN CAPITAL LETTER T WITH COMMA BELOW" #x021A) + ("LATIN SMALL LETTER T WITH COMMA BELOW" #x021B) + ("LATIN CAPITAL LETTER YOGH" #x021C) + ("LATIN SMALL LETTER YOGH" #x021D) + ("LATIN CAPITAL LETTER H WITH CARON" #x021E) + ("LATIN SMALL LETTER H WITH CARON" #x021F) + ("LATIN CAPITAL LETTER N WITH LONG RIGHT LEG" #x0220) + ("LATIN CAPITAL LETTER OU" #x0222) + ("LATIN SMALL LETTER OU" #x0223) + ("LATIN CAPITAL LETTER Z WITH HOOK" #x0224) + ("LATIN SMALL LETTER Z WITH HOOK" #x0225) + ("LATIN CAPITAL LETTER A WITH DOT ABOVE" #x0226) + ("LATIN SMALL LETTER A WITH DOT ABOVE" #x0227) + ("LATIN CAPITAL LETTER E WITH CEDILLA" #x0228) + ("LATIN SMALL LETTER E WITH CEDILLA" #x0229) + ("LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON" #x022A) + ("LATIN SMALL LETTER O WITH DIAERESIS AND MACRON" #x022B) + ("LATIN CAPITAL LETTER O WITH TILDE AND MACRON" #x022C) + ("LATIN SMALL LETTER O WITH TILDE AND MACRON" #x022D) + ("LATIN CAPITAL LETTER O WITH DOT ABOVE" #x022E) + ("LATIN SMALL LETTER O WITH DOT ABOVE" #x022F) + ("LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON" #x0230) + ("LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON" #x0231) + ("LATIN CAPITAL LETTER Y WITH MACRON" #x0232) + ("LATIN SMALL LETTER Y WITH MACRON" #x0233) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/00250-002AF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,96 @@ +(nxml-define-char-name-set 'ipa-extensions + '(("LATIN SMALL LETTER TURNED A" #x0250) + ("LATIN SMALL LETTER ALPHA" #x0251) + ("LATIN SMALL LETTER TURNED ALPHA" #x0252) + ("LATIN SMALL LETTER B WITH HOOK" #x0253) + ("LATIN SMALL LETTER OPEN O" #x0254) + ("LATIN SMALL LETTER C WITH CURL" #x0255) + ("LATIN SMALL LETTER D WITH TAIL" #x0256) + ("LATIN SMALL LETTER D WITH HOOK" #x0257) + ("LATIN SMALL LETTER REVERSED E" #x0258) + ("LATIN SMALL LETTER SCHWA" #x0259) + ("LATIN SMALL LETTER SCHWA WITH HOOK" #x025A) + ("LATIN SMALL LETTER OPEN E" #x025B) + ("LATIN SMALL LETTER REVERSED OPEN E" #x025C) + ("LATIN SMALL LETTER REVERSED OPEN E WITH HOOK" #x025D) + ("LATIN SMALL LETTER CLOSED REVERSED OPEN E" #x025E) + ("LATIN SMALL LETTER DOTLESS J WITH STROKE" #x025F) + ("LATIN SMALL LETTER G WITH HOOK" #x0260) + ("LATIN SMALL LETTER SCRIPT G" #x0261) + ("LATIN LETTER SMALL CAPITAL G" #x0262) + ("LATIN SMALL LETTER GAMMA" #x0263) + ("LATIN SMALL LETTER RAMS HORN" #x0264) + ("LATIN SMALL LETTER TURNED H" #x0265) + ("LATIN SMALL LETTER H WITH HOOK" #x0266) + ("LATIN SMALL LETTER HENG WITH HOOK" #x0267) + ("LATIN SMALL LETTER I WITH STROKE" #x0268) + ("LATIN SMALL LETTER IOTA" #x0269) + ("LATIN LETTER SMALL CAPITAL I" #x026A) + ("LATIN SMALL LETTER L WITH MIDDLE TILDE" #x026B) + ("LATIN SMALL LETTER L WITH BELT" #x026C) + ("LATIN SMALL LETTER L WITH RETROFLEX HOOK" #x026D) + ("LATIN SMALL LETTER LEZH" #x026E) + ("LATIN SMALL LETTER TURNED M" #x026F) + ("LATIN SMALL LETTER TURNED M WITH LONG LEG" #x0270) + ("LATIN SMALL LETTER M WITH HOOK" #x0271) + ("LATIN SMALL LETTER N WITH LEFT HOOK" #x0272) + ("LATIN SMALL LETTER N WITH RETROFLEX HOOK" #x0273) + ("LATIN LETTER SMALL CAPITAL N" #x0274) + ("LATIN SMALL LETTER BARRED O" #x0275) + ("LATIN LETTER SMALL CAPITAL OE" #x0276) + ("LATIN SMALL LETTER CLOSED OMEGA" #x0277) + ("LATIN SMALL LETTER PHI" #x0278) + ("LATIN SMALL LETTER TURNED R" #x0279) + ("LATIN SMALL LETTER TURNED R WITH LONG LEG" #x027A) + ("LATIN SMALL LETTER TURNED R WITH HOOK" #x027B) + ("LATIN SMALL LETTER R WITH LONG LEG" #x027C) + ("LATIN SMALL LETTER R WITH TAIL" #x027D) + ("LATIN SMALL LETTER R WITH FISHHOOK" #x027E) + ("LATIN SMALL LETTER REVERSED R WITH FISHHOOK" #x027F) + ("LATIN LETTER SMALL CAPITAL R" #x0280) + ("LATIN LETTER SMALL CAPITAL INVERTED R" #x0281) + ("LATIN SMALL LETTER S WITH HOOK" #x0282) + ("LATIN SMALL LETTER ESH" #x0283) + ("LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK" #x0284) + ("LATIN SMALL LETTER SQUAT REVERSED ESH" #x0285) + ("LATIN SMALL LETTER ESH WITH CURL" #x0286) + ("LATIN SMALL LETTER TURNED T" #x0287) + ("LATIN SMALL LETTER T WITH RETROFLEX HOOK" #x0288) + ("LATIN SMALL LETTER U BAR" #x0289) + ("LATIN SMALL LETTER UPSILON" #x028A) + ("LATIN SMALL LETTER V WITH HOOK" #x028B) + ("LATIN SMALL LETTER TURNED V" #x028C) + ("LATIN SMALL LETTER TURNED W" #x028D) + ("LATIN SMALL LETTER TURNED Y" #x028E) + ("LATIN LETTER SMALL CAPITAL Y" #x028F) + ("LATIN SMALL LETTER Z WITH RETROFLEX HOOK" #x0290) + ("LATIN SMALL LETTER Z WITH CURL" #x0291) + ("LATIN SMALL LETTER EZH" #x0292) + ("LATIN SMALL LETTER EZH WITH CURL" #x0293) + ("LATIN LETTER GLOTTAL STOP" #x0294) + ("LATIN LETTER PHARYNGEAL VOICED FRICATIVE" #x0295) + ("LATIN LETTER INVERTED GLOTTAL STOP" #x0296) + ("LATIN LETTER STRETCHED C" #x0297) + ("LATIN LETTER BILABIAL CLICK" #x0298) + ("LATIN LETTER SMALL CAPITAL B" #x0299) + ("LATIN SMALL LETTER CLOSED OPEN E" #x029A) + ("LATIN LETTER SMALL CAPITAL G WITH HOOK" #x029B) + ("LATIN LETTER SMALL CAPITAL H" #x029C) + ("LATIN SMALL LETTER J WITH CROSSED-TAIL" #x029D) + ("LATIN SMALL LETTER TURNED K" #x029E) + ("LATIN LETTER SMALL CAPITAL L" #x029F) + ("LATIN SMALL LETTER Q WITH HOOK" #x02A0) + ("LATIN LETTER GLOTTAL STOP WITH STROKE" #x02A1) + ("LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE" #x02A2) + ("LATIN SMALL LETTER DZ DIGRAPH" #x02A3) + ("LATIN SMALL LETTER DEZH DIGRAPH" #x02A4) + ("LATIN SMALL LETTER DZ DIGRAPH WITH CURL" #x02A5) + ("LATIN SMALL LETTER TS DIGRAPH" #x02A6) + ("LATIN SMALL LETTER TESH DIGRAPH" #x02A7) + ("LATIN SMALL LETTER TC DIGRAPH WITH CURL" #x02A8) + ("LATIN SMALL LETTER FENG DIGRAPH" #x02A9) + ("LATIN SMALL LETTER LS DIGRAPH" #x02AA) + ("LATIN SMALL LETTER LZ DIGRAPH" #x02AB) + ("LATIN LETTER BILABIAL PERCUSSIVE" #x02AC) + ("LATIN LETTER BIDENTAL PERCUSSIVE" #x02AD) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/002B0-002FF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,65 @@ +(nxml-define-char-name-set 'spacing-modifier-letters + '(("MODIFIER LETTER SMALL H" #x02B0) + ("MODIFIER LETTER SMALL H WITH HOOK" #x02B1) + ("MODIFIER LETTER SMALL J" #x02B2) + ("MODIFIER LETTER SMALL R" #x02B3) + ("MODIFIER LETTER SMALL TURNED R" #x02B4) + ("MODIFIER LETTER SMALL TURNED R WITH HOOK" #x02B5) + ("MODIFIER LETTER SMALL CAPITAL INVERTED R" #x02B6) + ("MODIFIER LETTER SMALL W" #x02B7) + ("MODIFIER LETTER SMALL Y" #x02B8) + ("MODIFIER LETTER PRIME" #x02B9) + ("MODIFIER LETTER DOUBLE PRIME" #x02BA) + ("MODIFIER LETTER TURNED COMMA" #x02BB) + ("MODIFIER LETTER APOSTROPHE" #x02BC) + ("MODIFIER LETTER REVERSED COMMA" #x02BD) + ("MODIFIER LETTER RIGHT HALF RING" #x02BE) + ("MODIFIER LETTER LEFT HALF RING" #x02BF) + ("MODIFIER LETTER GLOTTAL STOP" #x02C0) + ("MODIFIER LETTER REVERSED GLOTTAL STOP" #x02C1) + ("MODIFIER LETTER LEFT ARROWHEAD" #x02C2) + ("MODIFIER LETTER RIGHT ARROWHEAD" #x02C3) + ("MODIFIER LETTER UP ARROWHEAD" #x02C4) + ("MODIFIER LETTER DOWN ARROWHEAD" #x02C5) + ("MODIFIER LETTER CIRCUMFLEX ACCENT" #x02C6) + ("CARON" #x02C7) + ("MODIFIER LETTER VERTICAL LINE" #x02C8) + ("MODIFIER LETTER MACRON" #x02C9) + ("MODIFIER LETTER ACUTE ACCENT" #x02CA) + ("MODIFIER LETTER GRAVE ACCENT" #x02CB) + ("MODIFIER LETTER LOW VERTICAL LINE" #x02CC) + ("MODIFIER LETTER LOW MACRON" #x02CD) + ("MODIFIER LETTER LOW GRAVE ACCENT" #x02CE) + ("MODIFIER LETTER LOW ACUTE ACCENT" #x02CF) + ("MODIFIER LETTER TRIANGULAR COLON" #x02D0) + ("MODIFIER LETTER HALF TRIANGULAR COLON" #x02D1) + ("MODIFIER LETTER CENTRED RIGHT HALF RING" #x02D2) + ("MODIFIER LETTER CENTRED LEFT HALF RING" #x02D3) + ("MODIFIER LETTER UP TACK" #x02D4) + ("MODIFIER LETTER DOWN TACK" #x02D5) + ("MODIFIER LETTER PLUS SIGN" #x02D6) + ("MODIFIER LETTER MINUS SIGN" #x02D7) + ("BREVE" #x02D8) + ("DOT ABOVE" #x02D9) + ("RING ABOVE" #x02DA) + ("OGONEK" #x02DB) + ("SMALL TILDE" #x02DC) + ("DOUBLE ACUTE ACCENT" #x02DD) + ("MODIFIER LETTER RHOTIC HOOK" #x02DE) + ("MODIFIER LETTER CROSS ACCENT" #x02DF) + ("MODIFIER LETTER SMALL GAMMA" #x02E0) + ("MODIFIER LETTER SMALL L" #x02E1) + ("MODIFIER LETTER SMALL S" #x02E2) + ("MODIFIER LETTER SMALL X" #x02E3) + ("MODIFIER LETTER SMALL REVERSED GLOTTAL STOP" #x02E4) + ("MODIFIER LETTER EXTRA-HIGH TONE BAR" #x02E5) + ("MODIFIER LETTER HIGH TONE BAR" #x02E6) + ("MODIFIER LETTER MID TONE BAR" #x02E7) + ("MODIFIER LETTER LOW TONE BAR" #x02E8) + ("MODIFIER LETTER EXTRA-LOW TONE BAR" #x02E9) + ("MODIFIER LETTER YIN DEPARTING TONE MARK" #x02EA) + ("MODIFIER LETTER YANG DEPARTING TONE MARK" #x02EB) + ("MODIFIER LETTER VOICING" #x02EC) + ("MODIFIER LETTER UNASPIRATED" #x02ED) + ("MODIFIER LETTER DOUBLE APOSTROPHE" #x02EE) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/00300-0036F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,98 @@ +(nxml-define-char-name-set 'combining-diacritical-marks + '(("COMBINING GRAVE ACCENT" #x0300) + ("COMBINING ACUTE ACCENT" #x0301) + ("COMBINING CIRCUMFLEX ACCENT" #x0302) + ("COMBINING TILDE" #x0303) + ("COMBINING MACRON" #x0304) + ("COMBINING OVERLINE" #x0305) + ("COMBINING BREVE" #x0306) + ("COMBINING DOT ABOVE" #x0307) + ("COMBINING DIAERESIS" #x0308) + ("COMBINING HOOK ABOVE" #x0309) + ("COMBINING RING ABOVE" #x030A) + ("COMBINING DOUBLE ACUTE ACCENT" #x030B) + ("COMBINING CARON" #x030C) + ("COMBINING VERTICAL LINE ABOVE" #x030D) + ("COMBINING DOUBLE VERTICAL LINE ABOVE" #x030E) + ("COMBINING DOUBLE GRAVE ACCENT" #x030F) + ("COMBINING CANDRABINDU" #x0310) + ("COMBINING INVERTED BREVE" #x0311) + ("COMBINING TURNED COMMA ABOVE" #x0312) + ("COMBINING COMMA ABOVE" #x0313) + ("COMBINING REVERSED COMMA ABOVE" #x0314) + ("COMBINING COMMA ABOVE RIGHT" #x0315) + ("COMBINING GRAVE ACCENT BELOW" #x0316) + ("COMBINING ACUTE ACCENT BELOW" #x0317) + ("COMBINING LEFT TACK BELOW" #x0318) + ("COMBINING RIGHT TACK BELOW" #x0319) + ("COMBINING LEFT ANGLE ABOVE" #x031A) + ("COMBINING HORN" #x031B) + ("COMBINING LEFT HALF RING BELOW" #x031C) + ("COMBINING UP TACK BELOW" #x031D) + ("COMBINING DOWN TACK BELOW" #x031E) + ("COMBINING PLUS SIGN BELOW" #x031F) + ("COMBINING MINUS SIGN BELOW" #x0320) + ("COMBINING PALATALIZED HOOK BELOW" #x0321) + ("COMBINING RETROFLEX HOOK BELOW" #x0322) + ("COMBINING DOT BELOW" #x0323) + ("COMBINING DIAERESIS BELOW" #x0324) + ("COMBINING RING BELOW" #x0325) + ("COMBINING COMMA BELOW" #x0326) + ("COMBINING CEDILLA" #x0327) + ("COMBINING OGONEK" #x0328) + ("COMBINING VERTICAL LINE BELOW" #x0329) + ("COMBINING BRIDGE BELOW" #x032A) + ("COMBINING INVERTED DOUBLE ARCH BELOW" #x032B) + ("COMBINING CARON BELOW" #x032C) + ("COMBINING CIRCUMFLEX ACCENT BELOW" #x032D) + ("COMBINING BREVE BELOW" #x032E) + ("COMBINING INVERTED BREVE BELOW" #x032F) + ("COMBINING TILDE BELOW" #x0330) + ("COMBINING MACRON BELOW" #x0331) + ("COMBINING LOW LINE" #x0332) + ("COMBINING DOUBLE LOW LINE" #x0333) + ("COMBINING TILDE OVERLAY" #x0334) + ("COMBINING SHORT STROKE OVERLAY" #x0335) + ("COMBINING LONG STROKE OVERLAY" #x0336) + ("COMBINING SHORT SOLIDUS OVERLAY" #x0337) + ("COMBINING LONG SOLIDUS OVERLAY" #x0338) + ("COMBINING RIGHT HALF RING BELOW" #x0339) + ("COMBINING INVERTED BRIDGE BELOW" #x033A) + ("COMBINING SQUARE BELOW" #x033B) + ("COMBINING SEAGULL BELOW" #x033C) + ("COMBINING X ABOVE" #x033D) + ("COMBINING VERTICAL TILDE" #x033E) + ("COMBINING DOUBLE OVERLINE" #x033F) + ("COMBINING GRAVE TONE MARK" #x0340) + ("COMBINING ACUTE TONE MARK" #x0341) + ("COMBINING GREEK PERISPOMENI" #x0342) + ("COMBINING GREEK KORONIS" #x0343) + ("COMBINING GREEK DIALYTIKA TONOS" #x0344) + ("COMBINING GREEK YPOGEGRAMMENI" #x0345) + ("COMBINING BRIDGE ABOVE" #x0346) + ("COMBINING EQUALS SIGN BELOW" #x0347) + ("COMBINING DOUBLE VERTICAL LINE BELOW" #x0348) + ("COMBINING LEFT ANGLE BELOW" #x0349) + ("COMBINING NOT TILDE ABOVE" #x034A) + ("COMBINING HOMOTHETIC ABOVE" #x034B) + ("COMBINING ALMOST EQUAL TO ABOVE" #x034C) + ("COMBINING LEFT RIGHT ARROW BELOW" #x034D) + ("COMBINING UPWARDS ARROW BELOW" #x034E) + ("COMBINING GRAPHEME JOINER" #x034F) + ("COMBINING DOUBLE TILDE" #x0360) + ("COMBINING DOUBLE INVERTED BREVE" #x0361) + ("COMBINING DOUBLE RIGHTWARDS ARROW BELOW" #x0362) + ("COMBINING LATIN SMALL LETTER A" #x0363) + ("COMBINING LATIN SMALL LETTER E" #x0364) + ("COMBINING LATIN SMALL LETTER I" #x0365) + ("COMBINING LATIN SMALL LETTER O" #x0366) + ("COMBINING LATIN SMALL LETTER U" #x0367) + ("COMBINING LATIN SMALL LETTER C" #x0368) + ("COMBINING LATIN SMALL LETTER D" #x0369) + ("COMBINING LATIN SMALL LETTER H" #x036A) + ("COMBINING LATIN SMALL LETTER M" #x036B) + ("COMBINING LATIN SMALL LETTER R" #x036C) + ("COMBINING LATIN SMALL LETTER T" #x036D) + ("COMBINING LATIN SMALL LETTER V" #x036E) + ("COMBINING LATIN SMALL LETTER X" #x036F) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/00370-003FF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,117 @@ +(nxml-define-char-name-set 'greek-and-coptic + '(("GREEK NUMERAL SIGN" #x0374) + ("GREEK LOWER NUMERAL SIGN" #x0375) + ("GREEK YPOGEGRAMMENI" #x037A) + ("GREEK QUESTION MARK" #x037E) + ("GREEK TONOS" #x0384) + ("GREEK DIALYTIKA TONOS" #x0385) + ("GREEK CAPITAL LETTER ALPHA WITH TONOS" #x0386) + ("GREEK ANO TELEIA" #x0387) + ("GREEK CAPITAL LETTER EPSILON WITH TONOS" #x0388) + ("GREEK CAPITAL LETTER ETA WITH TONOS" #x0389) + ("GREEK CAPITAL LETTER IOTA WITH TONOS" #x038A) + ("GREEK CAPITAL LETTER OMICRON WITH TONOS" #x038C) + ("GREEK CAPITAL LETTER UPSILON WITH TONOS" #x038E) + ("GREEK CAPITAL LETTER OMEGA WITH TONOS" #x038F) + ("GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS" #x0390) + ("GREEK CAPITAL LETTER ALPHA" #x0391) + ("GREEK CAPITAL LETTER BETA" #x0392) + ("GREEK CAPITAL LETTER GAMMA" #x0393) + ("GREEK CAPITAL LETTER DELTA" #x0394) + ("GREEK CAPITAL LETTER EPSILON" #x0395) + ("GREEK CAPITAL LETTER ZETA" #x0396) + ("GREEK CAPITAL LETTER ETA" #x0397) + ("GREEK CAPITAL LETTER THETA" #x0398) + ("GREEK CAPITAL LETTER IOTA" #x0399) + ("GREEK CAPITAL LETTER KAPPA" #x039A) + ("GREEK CAPITAL LETTER LAMDA" #x039B) + ("GREEK CAPITAL LETTER MU" #x039C) + ("GREEK CAPITAL LETTER NU" #x039D) + ("GREEK CAPITAL LETTER XI" #x039E) + ("GREEK CAPITAL LETTER OMICRON" #x039F) + ("GREEK CAPITAL LETTER PI" #x03A0) + ("GREEK CAPITAL LETTER RHO" #x03A1) + ("GREEK CAPITAL LETTER SIGMA" #x03A3) + ("GREEK CAPITAL LETTER TAU" #x03A4) + ("GREEK CAPITAL LETTER UPSILON" #x03A5) + ("GREEK CAPITAL LETTER PHI" #x03A6) + ("GREEK CAPITAL LETTER CHI" #x03A7) + ("GREEK CAPITAL LETTER PSI" #x03A8) + ("GREEK CAPITAL LETTER OMEGA" #x03A9) + ("GREEK CAPITAL LETTER IOTA WITH DIALYTIKA" #x03AA) + ("GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA" #x03AB) + ("GREEK SMALL LETTER ALPHA WITH TONOS" #x03AC) + ("GREEK SMALL LETTER EPSILON WITH TONOS" #x03AD) + ("GREEK SMALL LETTER ETA WITH TONOS" #x03AE) + ("GREEK SMALL LETTER IOTA WITH TONOS" #x03AF) + ("GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS" #x03B0) + ("GREEK SMALL LETTER ALPHA" #x03B1) + ("GREEK SMALL LETTER BETA" #x03B2) + ("GREEK SMALL LETTER GAMMA" #x03B3) + ("GREEK SMALL LETTER DELTA" #x03B4) + ("GREEK SMALL LETTER EPSILON" #x03B5) + ("GREEK SMALL LETTER ZETA" #x03B6) + ("GREEK SMALL LETTER ETA" #x03B7) + ("GREEK SMALL LETTER THETA" #x03B8) + ("GREEK SMALL LETTER IOTA" #x03B9) + ("GREEK SMALL LETTER KAPPA" #x03BA) + ("GREEK SMALL LETTER LAMDA" #x03BB) + ("GREEK SMALL LETTER MU" #x03BC) + ("GREEK SMALL LETTER NU" #x03BD) + ("GREEK SMALL LETTER XI" #x03BE) + ("GREEK SMALL LETTER OMICRON" #x03BF) + ("GREEK SMALL LETTER PI" #x03C0) + ("GREEK SMALL LETTER RHO" #x03C1) + ("GREEK SMALL LETTER FINAL SIGMA" #x03C2) + ("GREEK SMALL LETTER SIGMA" #x03C3) + ("GREEK SMALL LETTER TAU" #x03C4) + ("GREEK SMALL LETTER UPSILON" #x03C5) + ("GREEK SMALL LETTER PHI" #x03C6) + ("GREEK SMALL LETTER CHI" #x03C7) + ("GREEK SMALL LETTER PSI" #x03C8) + ("GREEK SMALL LETTER OMEGA" #x03C9) + ("GREEK SMALL LETTER IOTA WITH DIALYTIKA" #x03CA) + ("GREEK SMALL LETTER UPSILON WITH DIALYTIKA" #x03CB) + ("GREEK SMALL LETTER OMICRON WITH TONOS" #x03CC) + ("GREEK SMALL LETTER UPSILON WITH TONOS" #x03CD) + ("GREEK SMALL LETTER OMEGA WITH TONOS" #x03CE) + ("GREEK BETA SYMBOL" #x03D0) + ("GREEK THETA SYMBOL" #x03D1) + ("GREEK UPSILON WITH HOOK SYMBOL" #x03D2) + ("GREEK UPSILON WITH ACUTE AND HOOK SYMBOL" #x03D3) + ("GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL" #x03D4) + ("GREEK PHI SYMBOL" #x03D5) + ("GREEK PI SYMBOL" #x03D6) + ("GREEK KAI SYMBOL" #x03D7) + ("GREEK LETTER ARCHAIC KOPPA" #x03D8) + ("GREEK SMALL LETTER ARCHAIC KOPPA" #x03D9) + ("GREEK LETTER STIGMA" #x03DA) + ("GREEK SMALL LETTER STIGMA" #x03DB) + ("GREEK LETTER DIGAMMA" #x03DC) + ("GREEK SMALL LETTER DIGAMMA" #x03DD) + ("GREEK LETTER KOPPA" #x03DE) + ("GREEK SMALL LETTER KOPPA" #x03DF) + ("GREEK LETTER SAMPI" #x03E0) + ("GREEK SMALL LETTER SAMPI" #x03E1) + ("COPTIC CAPITAL LETTER SHEI" #x03E2) + ("COPTIC SMALL LETTER SHEI" #x03E3) + ("COPTIC CAPITAL LETTER FEI" #x03E4) + ("COPTIC SMALL LETTER FEI" #x03E5) + ("COPTIC CAPITAL LETTER KHEI" #x03E6) + ("COPTIC SMALL LETTER KHEI" #x03E7) + ("COPTIC CAPITAL LETTER HORI" #x03E8) + ("COPTIC SMALL LETTER HORI" #x03E9) + ("COPTIC CAPITAL LETTER GANGIA" #x03EA) + ("COPTIC SMALL LETTER GANGIA" #x03EB) + ("COPTIC CAPITAL LETTER SHIMA" #x03EC) + ("COPTIC SMALL LETTER SHIMA" #x03ED) + ("COPTIC CAPITAL LETTER DEI" #x03EE) + ("COPTIC SMALL LETTER DEI" #x03EF) + ("GREEK KAPPA SYMBOL" #x03F0) + ("GREEK RHO SYMBOL" #x03F1) + ("GREEK LUNATE SIGMA SYMBOL" #x03F2) + ("GREEK LETTER YOT" #x03F3) + ("GREEK CAPITAL THETA SYMBOL" #x03F4) + ("GREEK LUNATE EPSILON SYMBOL" #x03F5) + ("GREEK REVERSED LUNATE EPSILON SYMBOL" #x03F6) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/00400-004FF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,248 @@ +(nxml-define-char-name-set 'cyrillic + '(("CYRILLIC CAPITAL LETTER IE WITH GRAVE" #x0400) + ("CYRILLIC CAPITAL LETTER IO" #x0401) + ("CYRILLIC CAPITAL LETTER DJE" #x0402) + ("CYRILLIC CAPITAL LETTER GJE" #x0403) + ("CYRILLIC CAPITAL LETTER UKRAINIAN IE" #x0404) + ("CYRILLIC CAPITAL LETTER DZE" #x0405) + ("CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I" #x0406) + ("CYRILLIC CAPITAL LETTER YI" #x0407) + ("CYRILLIC CAPITAL LETTER JE" #x0408) + ("CYRILLIC CAPITAL LETTER LJE" #x0409) + ("CYRILLIC CAPITAL LETTER NJE" #x040A) + ("CYRILLIC CAPITAL LETTER TSHE" #x040B) + ("CYRILLIC CAPITAL LETTER KJE" #x040C) + ("CYRILLIC CAPITAL LETTER I WITH GRAVE" #x040D) + ("CYRILLIC CAPITAL LETTER SHORT U" #x040E) + ("CYRILLIC CAPITAL LETTER DZHE" #x040F) + ("CYRILLIC CAPITAL LETTER A" #x0410) + ("CYRILLIC CAPITAL LETTER BE" #x0411) + ("CYRILLIC CAPITAL LETTER VE" #x0412) + ("CYRILLIC CAPITAL LETTER GHE" #x0413) + ("CYRILLIC CAPITAL LETTER DE" #x0414) + ("CYRILLIC CAPITAL LETTER IE" #x0415) + ("CYRILLIC CAPITAL LETTER ZHE" #x0416) + ("CYRILLIC CAPITAL LETTER ZE" #x0417) + ("CYRILLIC CAPITAL LETTER I" #x0418) + ("CYRILLIC CAPITAL LETTER SHORT I" #x0419) + ("CYRILLIC CAPITAL LETTER KA" #x041A) + ("CYRILLIC CAPITAL LETTER EL" #x041B) + ("CYRILLIC CAPITAL LETTER EM" #x041C) + ("CYRILLIC CAPITAL LETTER EN" #x041D) + ("CYRILLIC CAPITAL LETTER O" #x041E) + ("CYRILLIC CAPITAL LETTER PE" #x041F) + ("CYRILLIC CAPITAL LETTER ER" #x0420) + ("CYRILLIC CAPITAL LETTER ES" #x0421) + ("CYRILLIC CAPITAL LETTER TE" #x0422) + ("CYRILLIC CAPITAL LETTER U" #x0423) + ("CYRILLIC CAPITAL LETTER EF" #x0424) + ("CYRILLIC CAPITAL LETTER HA" #x0425) + ("CYRILLIC CAPITAL LETTER TSE" #x0426) + ("CYRILLIC CAPITAL LETTER CHE" #x0427) + ("CYRILLIC CAPITAL LETTER SHA" #x0428) + ("CYRILLIC CAPITAL LETTER SHCHA" #x0429) + ("CYRILLIC CAPITAL LETTER HARD SIGN" #x042A) + ("CYRILLIC CAPITAL LETTER YERU" #x042B) + ("CYRILLIC CAPITAL LETTER SOFT SIGN" #x042C) + ("CYRILLIC CAPITAL LETTER E" #x042D) + ("CYRILLIC CAPITAL LETTER YU" #x042E) + ("CYRILLIC CAPITAL LETTER YA" #x042F) + ("CYRILLIC SMALL LETTER A" #x0430) + ("CYRILLIC SMALL LETTER BE" #x0431) + ("CYRILLIC SMALL LETTER VE" #x0432) + ("CYRILLIC SMALL LETTER GHE" #x0433) + ("CYRILLIC SMALL LETTER DE" #x0434) + ("CYRILLIC SMALL LETTER IE" #x0435) + ("CYRILLIC SMALL LETTER ZHE" #x0436) + ("CYRILLIC SMALL LETTER ZE" #x0437) + ("CYRILLIC SMALL LETTER I" #x0438) + ("CYRILLIC SMALL LETTER SHORT I" #x0439) + ("CYRILLIC SMALL LETTER KA" #x043A) + ("CYRILLIC SMALL LETTER EL" #x043B) + ("CYRILLIC SMALL LETTER EM" #x043C) + ("CYRILLIC SMALL LETTER EN" #x043D) + ("CYRILLIC SMALL LETTER O" #x043E) + ("CYRILLIC SMALL LETTER PE" #x043F) + ("CYRILLIC SMALL LETTER ER" #x0440) + ("CYRILLIC SMALL LETTER ES" #x0441) + ("CYRILLIC SMALL LETTER TE" #x0442) + ("CYRILLIC SMALL LETTER U" #x0443) + ("CYRILLIC SMALL LETTER EF" #x0444) + ("CYRILLIC SMALL LETTER HA" #x0445) + ("CYRILLIC SMALL LETTER TSE" #x0446) + ("CYRILLIC SMALL LETTER CHE" #x0447) + ("CYRILLIC SMALL LETTER SHA" #x0448) + ("CYRILLIC SMALL LETTER SHCHA" #x0449) + ("CYRILLIC SMALL LETTER HARD SIGN" #x044A) + ("CYRILLIC SMALL LETTER YERU" #x044B) + ("CYRILLIC SMALL LETTER SOFT SIGN" #x044C) + ("CYRILLIC SMALL LETTER E" #x044D) + ("CYRILLIC SMALL LETTER YU" #x044E) + ("CYRILLIC SMALL LETTER YA" #x044F) + ("CYRILLIC SMALL LETTER IE WITH GRAVE" #x0450) + ("CYRILLIC SMALL LETTER IO" #x0451) + ("CYRILLIC SMALL LETTER DJE" #x0452) + ("CYRILLIC SMALL LETTER GJE" #x0453) + ("CYRILLIC SMALL LETTER UKRAINIAN IE" #x0454) + ("CYRILLIC SMALL LETTER DZE" #x0455) + ("CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I" #x0456) + ("CYRILLIC SMALL LETTER YI" #x0457) + ("CYRILLIC SMALL LETTER JE" #x0458) + ("CYRILLIC SMALL LETTER LJE" #x0459) + ("CYRILLIC SMALL LETTER NJE" #x045A) + ("CYRILLIC SMALL LETTER TSHE" #x045B) + ("CYRILLIC SMALL LETTER KJE" #x045C) + ("CYRILLIC SMALL LETTER I WITH GRAVE" #x045D) + ("CYRILLIC SMALL LETTER SHORT U" #x045E) + ("CYRILLIC SMALL LETTER DZHE" #x045F) + ("CYRILLIC CAPITAL LETTER OMEGA" #x0460) + ("CYRILLIC SMALL LETTER OMEGA" #x0461) + ("CYRILLIC CAPITAL LETTER YAT" #x0462) + ("CYRILLIC SMALL LETTER YAT" #x0463) + ("CYRILLIC CAPITAL LETTER IOTIFIED E" #x0464) + ("CYRILLIC SMALL LETTER IOTIFIED E" #x0465) + ("CYRILLIC CAPITAL LETTER LITTLE YUS" #x0466) + ("CYRILLIC SMALL LETTER LITTLE YUS" #x0467) + ("CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS" #x0468) + ("CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS" #x0469) + ("CYRILLIC CAPITAL LETTER BIG YUS" #x046A) + ("CYRILLIC SMALL LETTER BIG YUS" #x046B) + ("CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS" #x046C) + ("CYRILLIC SMALL LETTER IOTIFIED BIG YUS" #x046D) + ("CYRILLIC CAPITAL LETTER KSI" #x046E) + ("CYRILLIC SMALL LETTER KSI" #x046F) + ("CYRILLIC CAPITAL LETTER PSI" #x0470) + ("CYRILLIC SMALL LETTER PSI" #x0471) + ("CYRILLIC CAPITAL LETTER FITA" #x0472) + ("CYRILLIC SMALL LETTER FITA" #x0473) + ("CYRILLIC CAPITAL LETTER IZHITSA" #x0474) + ("CYRILLIC SMALL LETTER IZHITSA" #x0475) + ("CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT" #x0476) + ("CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT" #x0477) + ("CYRILLIC CAPITAL LETTER UK" #x0478) + ("CYRILLIC SMALL LETTER UK" #x0479) + ("CYRILLIC CAPITAL LETTER ROUND OMEGA" #x047A) + ("CYRILLIC SMALL LETTER ROUND OMEGA" #x047B) + ("CYRILLIC CAPITAL LETTER OMEGA WITH TITLO" #x047C) + ("CYRILLIC SMALL LETTER OMEGA WITH TITLO" #x047D) + ("CYRILLIC CAPITAL LETTER OT" #x047E) + ("CYRILLIC SMALL LETTER OT" #x047F) + ("CYRILLIC CAPITAL LETTER KOPPA" #x0480) + ("CYRILLIC SMALL LETTER KOPPA" #x0481) + ("CYRILLIC THOUSANDS SIGN" #x0482) + ("COMBINING CYRILLIC TITLO" #x0483) + ("COMBINING CYRILLIC PALATALIZATION" #x0484) + ("COMBINING CYRILLIC DASIA PNEUMATA" #x0485) + ("COMBINING CYRILLIC PSILI PNEUMATA" #x0486) + ("COMBINING CYRILLIC HUNDRED THOUSANDS SIGN" #x0488) + ("COMBINING CYRILLIC MILLIONS SIGN" #x0489) + ("CYRILLIC CAPITAL LETTER SHORT I WITH TAIL" #x048A) + ("CYRILLIC SMALL LETTER SHORT I WITH TAIL" #x048B) + ("CYRILLIC CAPITAL LETTER SEMISOFT SIGN" #x048C) + ("CYRILLIC SMALL LETTER SEMISOFT SIGN" #x048D) + ("CYRILLIC CAPITAL LETTER ER WITH TICK" #x048E) + ("CYRILLIC SMALL LETTER ER WITH TICK" #x048F) + ("CYRILLIC CAPITAL LETTER GHE WITH UPTURN" #x0490) + ("CYRILLIC SMALL LETTER GHE WITH UPTURN" #x0491) + ("CYRILLIC CAPITAL LETTER GHE WITH STROKE" #x0492) + ("CYRILLIC SMALL LETTER GHE WITH STROKE" #x0493) + ("CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK" #x0494) + ("CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK" #x0495) + ("CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER" #x0496) + ("CYRILLIC SMALL LETTER ZHE WITH DESCENDER" #x0497) + ("CYRILLIC CAPITAL LETTER ZE WITH DESCENDER" #x0498) + ("CYRILLIC SMALL LETTER ZE WITH DESCENDER" #x0499) + ("CYRILLIC CAPITAL LETTER KA WITH DESCENDER" #x049A) + ("CYRILLIC SMALL LETTER KA WITH DESCENDER" #x049B) + ("CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE" #x049C) + ("CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE" #x049D) + ("CYRILLIC CAPITAL LETTER KA WITH STROKE" #x049E) + ("CYRILLIC SMALL LETTER KA WITH STROKE" #x049F) + ("CYRILLIC CAPITAL LETTER BASHKIR KA" #x04A0) + ("CYRILLIC SMALL LETTER BASHKIR KA" #x04A1) + ("CYRILLIC CAPITAL LETTER EN WITH DESCENDER" #x04A2) + ("CYRILLIC SMALL LETTER EN WITH DESCENDER" #x04A3) + ("CYRILLIC CAPITAL LIGATURE EN GHE" #x04A4) + ("CYRILLIC SMALL LIGATURE EN GHE" #x04A5) + ("CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK" #x04A6) + ("CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK" #x04A7) + ("CYRILLIC CAPITAL LETTER ABKHASIAN HA" #x04A8) + ("CYRILLIC SMALL LETTER ABKHASIAN HA" #x04A9) + ("CYRILLIC CAPITAL LETTER ES WITH DESCENDER" #x04AA) + ("CYRILLIC SMALL LETTER ES WITH DESCENDER" #x04AB) + ("CYRILLIC CAPITAL LETTER TE WITH DESCENDER" #x04AC) + ("CYRILLIC SMALL LETTER TE WITH DESCENDER" #x04AD) + ("CYRILLIC CAPITAL LETTER STRAIGHT U" #x04AE) + ("CYRILLIC SMALL LETTER STRAIGHT U" #x04AF) + ("CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE" #x04B0) + ("CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE" #x04B1) + ("CYRILLIC CAPITAL LETTER HA WITH DESCENDER" #x04B2) + ("CYRILLIC SMALL LETTER HA WITH DESCENDER" #x04B3) + ("CYRILLIC CAPITAL LIGATURE TE TSE" #x04B4) + ("CYRILLIC SMALL LIGATURE TE TSE" #x04B5) + ("CYRILLIC CAPITAL LETTER CHE WITH DESCENDER" #x04B6) + ("CYRILLIC SMALL LETTER CHE WITH DESCENDER" #x04B7) + ("CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE" #x04B8) + ("CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE" #x04B9) + ("CYRILLIC CAPITAL LETTER SHHA" #x04BA) + ("CYRILLIC SMALL LETTER SHHA" #x04BB) + ("CYRILLIC CAPITAL LETTER ABKHASIAN CHE" #x04BC) + ("CYRILLIC SMALL LETTER ABKHASIAN CHE" #x04BD) + ("CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER" #x04BE) + ("CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER" #x04BF) + ("CYRILLIC LETTER PALOCHKA" #x04C0) + ("CYRILLIC CAPITAL LETTER ZHE WITH BREVE" #x04C1) + ("CYRILLIC SMALL LETTER ZHE WITH BREVE" #x04C2) + ("CYRILLIC CAPITAL LETTER KA WITH HOOK" #x04C3) + ("CYRILLIC SMALL LETTER KA WITH HOOK" #x04C4) + ("CYRILLIC CAPITAL LETTER EL WITH TAIL" #x04C5) + ("CYRILLIC SMALL LETTER EL WITH TAIL" #x04C6) + ("CYRILLIC CAPITAL LETTER EN WITH HOOK" #x04C7) + ("CYRILLIC SMALL LETTER EN WITH HOOK" #x04C8) + ("CYRILLIC CAPITAL LETTER EN WITH TAIL" #x04C9) + ("CYRILLIC SMALL LETTER EN WITH TAIL" #x04CA) + ("CYRILLIC CAPITAL LETTER KHAKASSIAN CHE" #x04CB) + ("CYRILLIC SMALL LETTER KHAKASSIAN CHE" #x04CC) + ("CYRILLIC CAPITAL LETTER EM WITH TAIL" #x04CD) + ("CYRILLIC SMALL LETTER EM WITH TAIL" #x04CE) + ("CYRILLIC CAPITAL LETTER A WITH BREVE" #x04D0) + ("CYRILLIC SMALL LETTER A WITH BREVE" #x04D1) + ("CYRILLIC CAPITAL LETTER A WITH DIAERESIS" #x04D2) + ("CYRILLIC SMALL LETTER A WITH DIAERESIS" #x04D3) + ("CYRILLIC CAPITAL LIGATURE A IE" #x04D4) + ("CYRILLIC SMALL LIGATURE A IE" #x04D5) + ("CYRILLIC CAPITAL LETTER IE WITH BREVE" #x04D6) + ("CYRILLIC SMALL LETTER IE WITH BREVE" #x04D7) + ("CYRILLIC CAPITAL LETTER SCHWA" #x04D8) + ("CYRILLIC SMALL LETTER SCHWA" #x04D9) + ("CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS" #x04DA) + ("CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS" #x04DB) + ("CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS" #x04DC) + ("CYRILLIC SMALL LETTER ZHE WITH DIAERESIS" #x04DD) + ("CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS" #x04DE) + ("CYRILLIC SMALL LETTER ZE WITH DIAERESIS" #x04DF) + ("CYRILLIC CAPITAL LETTER ABKHASIAN DZE" #x04E0) + ("CYRILLIC SMALL LETTER ABKHASIAN DZE" #x04E1) + ("CYRILLIC CAPITAL LETTER I WITH MACRON" #x04E2) + ("CYRILLIC SMALL LETTER I WITH MACRON" #x04E3) + ("CYRILLIC CAPITAL LETTER I WITH DIAERESIS" #x04E4) + ("CYRILLIC SMALL LETTER I WITH DIAERESIS" #x04E5) + ("CYRILLIC CAPITAL LETTER O WITH DIAERESIS" #x04E6) + ("CYRILLIC SMALL LETTER O WITH DIAERESIS" #x04E7) + ("CYRILLIC CAPITAL LETTER BARRED O" #x04E8) + ("CYRILLIC SMALL LETTER BARRED O" #x04E9) + ("CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS" #x04EA) + ("CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS" #x04EB) + ("CYRILLIC CAPITAL LETTER E WITH DIAERESIS" #x04EC) + ("CYRILLIC SMALL LETTER E WITH DIAERESIS" #x04ED) + ("CYRILLIC CAPITAL LETTER U WITH MACRON" #x04EE) + ("CYRILLIC SMALL LETTER U WITH MACRON" #x04EF) + ("CYRILLIC CAPITAL LETTER U WITH DIAERESIS" #x04F0) + ("CYRILLIC SMALL LETTER U WITH DIAERESIS" #x04F1) + ("CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE" #x04F2) + ("CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE" #x04F3) + ("CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS" #x04F4) + ("CYRILLIC SMALL LETTER CHE WITH DIAERESIS" #x04F5) + ("CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS" #x04F8) + ("CYRILLIC SMALL LETTER YERU WITH DIAERESIS" #x04F9) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/00500-0052F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,18 @@ +(nxml-define-char-name-set 'cyrillic-supplementary + '(("CYRILLIC CAPITAL LETTER KOMI DE" #x0500) + ("CYRILLIC SMALL LETTER KOMI DE" #x0501) + ("CYRILLIC CAPITAL LETTER KOMI DJE" #x0502) + ("CYRILLIC SMALL LETTER KOMI DJE" #x0503) + ("CYRILLIC CAPITAL LETTER KOMI ZJE" #x0504) + ("CYRILLIC SMALL LETTER KOMI ZJE" #x0505) + ("CYRILLIC CAPITAL LETTER KOMI DZJE" #x0506) + ("CYRILLIC SMALL LETTER KOMI DZJE" #x0507) + ("CYRILLIC CAPITAL LETTER KOMI LJE" #x0508) + ("CYRILLIC SMALL LETTER KOMI LJE" #x0509) + ("CYRILLIC CAPITAL LETTER KOMI NJE" #x050A) + ("CYRILLIC SMALL LETTER KOMI NJE" #x050B) + ("CYRILLIC CAPITAL LETTER KOMI SJE" #x050C) + ("CYRILLIC SMALL LETTER KOMI SJE" #x050D) + ("CYRILLIC CAPITAL LETTER KOMI TJE" #x050E) + ("CYRILLIC SMALL LETTER KOMI TJE" #x050F) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/00530-0058F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,88 @@ +(nxml-define-char-name-set 'armenian + '(("ARMENIAN CAPITAL LETTER AYB" #x0531) + ("ARMENIAN CAPITAL LETTER BEN" #x0532) + ("ARMENIAN CAPITAL LETTER GIM" #x0533) + ("ARMENIAN CAPITAL LETTER DA" #x0534) + ("ARMENIAN CAPITAL LETTER ECH" #x0535) + ("ARMENIAN CAPITAL LETTER ZA" #x0536) + ("ARMENIAN CAPITAL LETTER EH" #x0537) + ("ARMENIAN CAPITAL LETTER ET" #x0538) + ("ARMENIAN CAPITAL LETTER TO" #x0539) + ("ARMENIAN CAPITAL LETTER ZHE" #x053A) + ("ARMENIAN CAPITAL LETTER INI" #x053B) + ("ARMENIAN CAPITAL LETTER LIWN" #x053C) + ("ARMENIAN CAPITAL LETTER XEH" #x053D) + ("ARMENIAN CAPITAL LETTER CA" #x053E) + ("ARMENIAN CAPITAL LETTER KEN" #x053F) + ("ARMENIAN CAPITAL LETTER HO" #x0540) + ("ARMENIAN CAPITAL LETTER JA" #x0541) + ("ARMENIAN CAPITAL LETTER GHAD" #x0542) + ("ARMENIAN CAPITAL LETTER CHEH" #x0543) + ("ARMENIAN CAPITAL LETTER MEN" #x0544) + ("ARMENIAN CAPITAL LETTER YI" #x0545) + ("ARMENIAN CAPITAL LETTER NOW" #x0546) + ("ARMENIAN CAPITAL LETTER SHA" #x0547) + ("ARMENIAN CAPITAL LETTER VO" #x0548) + ("ARMENIAN CAPITAL LETTER CHA" #x0549) + ("ARMENIAN CAPITAL LETTER PEH" #x054A) + ("ARMENIAN CAPITAL LETTER JHEH" #x054B) + ("ARMENIAN CAPITAL LETTER RA" #x054C) + ("ARMENIAN CAPITAL LETTER SEH" #x054D) + ("ARMENIAN CAPITAL LETTER VEW" #x054E) + ("ARMENIAN CAPITAL LETTER TIWN" #x054F) + ("ARMENIAN CAPITAL LETTER REH" #x0550) + ("ARMENIAN CAPITAL LETTER CO" #x0551) + ("ARMENIAN CAPITAL LETTER YIWN" #x0552) + ("ARMENIAN CAPITAL LETTER PIWR" #x0553) + ("ARMENIAN CAPITAL LETTER KEH" #x0554) + ("ARMENIAN CAPITAL LETTER OH" #x0555) + ("ARMENIAN CAPITAL LETTER FEH" #x0556) + ("ARMENIAN MODIFIER LETTER LEFT HALF RING" #x0559) + ("ARMENIAN APOSTROPHE" #x055A) + ("ARMENIAN EMPHASIS MARK" #x055B) + ("ARMENIAN EXCLAMATION MARK" #x055C) + ("ARMENIAN COMMA" #x055D) + ("ARMENIAN QUESTION MARK" #x055E) + ("ARMENIAN ABBREVIATION MARK" #x055F) + ("ARMENIAN SMALL LETTER AYB" #x0561) + ("ARMENIAN SMALL LETTER BEN" #x0562) + ("ARMENIAN SMALL LETTER GIM" #x0563) + ("ARMENIAN SMALL LETTER DA" #x0564) + ("ARMENIAN SMALL LETTER ECH" #x0565) + ("ARMENIAN SMALL LETTER ZA" #x0566) + ("ARMENIAN SMALL LETTER EH" #x0567) + ("ARMENIAN SMALL LETTER ET" #x0568) + ("ARMENIAN SMALL LETTER TO" #x0569) + ("ARMENIAN SMALL LETTER ZHE" #x056A) + ("ARMENIAN SMALL LETTER INI" #x056B) + ("ARMENIAN SMALL LETTER LIWN" #x056C) + ("ARMENIAN SMALL LETTER XEH" #x056D) + ("ARMENIAN SMALL LETTER CA" #x056E) + ("ARMENIAN SMALL LETTER KEN" #x056F) + ("ARMENIAN SMALL LETTER HO" #x0570) + ("ARMENIAN SMALL LETTER JA" #x0571) + ("ARMENIAN SMALL LETTER GHAD" #x0572) + ("ARMENIAN SMALL LETTER CHEH" #x0573) + ("ARMENIAN SMALL LETTER MEN" #x0574) + ("ARMENIAN SMALL LETTER YI" #x0575) + ("ARMENIAN SMALL LETTER NOW" #x0576) + ("ARMENIAN SMALL LETTER SHA" #x0577) + ("ARMENIAN SMALL LETTER VO" #x0578) + ("ARMENIAN SMALL LETTER CHA" #x0579) + ("ARMENIAN SMALL LETTER PEH" #x057A) + ("ARMENIAN SMALL LETTER JHEH" #x057B) + ("ARMENIAN SMALL LETTER RA" #x057C) + ("ARMENIAN SMALL LETTER SEH" #x057D) + ("ARMENIAN SMALL LETTER VEW" #x057E) + ("ARMENIAN SMALL LETTER TIWN" #x057F) + ("ARMENIAN SMALL LETTER REH" #x0580) + ("ARMENIAN SMALL LETTER CO" #x0581) + ("ARMENIAN SMALL LETTER YIWN" #x0582) + ("ARMENIAN SMALL LETTER PIWR" #x0583) + ("ARMENIAN SMALL LETTER KEH" #x0584) + ("ARMENIAN SMALL LETTER OH" #x0585) + ("ARMENIAN SMALL LETTER FEH" #x0586) + ("ARMENIAN SMALL LIGATURE ECH YIWN" #x0587) + ("ARMENIAN FULL STOP" #x0589) + ("ARMENIAN HYPHEN" #x058A) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/00590-005FF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,84 @@ +(nxml-define-char-name-set 'hebrew + '(("HEBREW ACCENT ETNAHTA" #x0591) + ("HEBREW ACCENT SEGOL" #x0592) + ("HEBREW ACCENT SHALSHELET" #x0593) + ("HEBREW ACCENT ZAQEF QATAN" #x0594) + ("HEBREW ACCENT ZAQEF GADOL" #x0595) + ("HEBREW ACCENT TIPEHA" #x0596) + ("HEBREW ACCENT REVIA" #x0597) + ("HEBREW ACCENT ZARQA" #x0598) + ("HEBREW ACCENT PASHTA" #x0599) + ("HEBREW ACCENT YETIV" #x059A) + ("HEBREW ACCENT TEVIR" #x059B) + ("HEBREW ACCENT GERESH" #x059C) + ("HEBREW ACCENT GERESH MUQDAM" #x059D) + ("HEBREW ACCENT GERSHAYIM" #x059E) + ("HEBREW ACCENT QARNEY PARA" #x059F) + ("HEBREW ACCENT TELISHA GEDOLA" #x05A0) + ("HEBREW ACCENT PAZER" #x05A1) + ("HEBREW ACCENT MUNAH" #x05A3) + ("HEBREW ACCENT MAHAPAKH" #x05A4) + ("HEBREW ACCENT MERKHA" #x05A5) + ("HEBREW ACCENT MERKHA KEFULA" #x05A6) + ("HEBREW ACCENT DARGA" #x05A7) + ("HEBREW ACCENT QADMA" #x05A8) + ("HEBREW ACCENT TELISHA QETANA" #x05A9) + ("HEBREW ACCENT YERAH BEN YOMO" #x05AA) + ("HEBREW ACCENT OLE" #x05AB) + ("HEBREW ACCENT ILUY" #x05AC) + ("HEBREW ACCENT DEHI" #x05AD) + ("HEBREW ACCENT ZINOR" #x05AE) + ("HEBREW MARK MASORA CIRCLE" #x05AF) + ("HEBREW POINT SHEVA" #x05B0) + ("HEBREW POINT HATAF SEGOL" #x05B1) + ("HEBREW POINT HATAF PATAH" #x05B2) + ("HEBREW POINT HATAF QAMATS" #x05B3) + ("HEBREW POINT HIRIQ" #x05B4) + ("HEBREW POINT TSERE" #x05B5) + ("HEBREW POINT SEGOL" #x05B6) + ("HEBREW POINT PATAH" #x05B7) + ("HEBREW POINT QAMATS" #x05B8) + ("HEBREW POINT HOLAM" #x05B9) + ("HEBREW POINT QUBUTS" #x05BB) + ("HEBREW POINT DAGESH OR MAPIQ" #x05BC) + ("HEBREW POINT METEG" #x05BD) + ("HEBREW PUNCTUATION MAQAF" #x05BE) + ("HEBREW POINT RAFE" #x05BF) + ("HEBREW PUNCTUATION PASEQ" #x05C0) + ("HEBREW POINT SHIN DOT" #x05C1) + ("HEBREW POINT SIN DOT" #x05C2) + ("HEBREW PUNCTUATION SOF PASUQ" #x05C3) + ("HEBREW MARK UPPER DOT" #x05C4) + ("HEBREW LETTER ALEF" #x05D0) + ("HEBREW LETTER BET" #x05D1) + ("HEBREW LETTER GIMEL" #x05D2) + ("HEBREW LETTER DALET" #x05D3) + ("HEBREW LETTER HE" #x05D4) + ("HEBREW LETTER VAV" #x05D5) + ("HEBREW LETTER ZAYIN" #x05D6) + ("HEBREW LETTER HET" #x05D7) + ("HEBREW LETTER TET" #x05D8) + ("HEBREW LETTER YOD" #x05D9) + ("HEBREW LETTER FINAL KAF" #x05DA) + ("HEBREW LETTER KAF" #x05DB) + ("HEBREW LETTER LAMED" #x05DC) + ("HEBREW LETTER FINAL MEM" #x05DD) + ("HEBREW LETTER MEM" #x05DE) + ("HEBREW LETTER FINAL NUN" #x05DF) + ("HEBREW LETTER NUN" #x05E0) + ("HEBREW LETTER SAMEKH" #x05E1) + ("HEBREW LETTER AYIN" #x05E2) + ("HEBREW LETTER FINAL PE" #x05E3) + ("HEBREW LETTER PE" #x05E4) + ("HEBREW LETTER FINAL TSADI" #x05E5) + ("HEBREW LETTER TSADI" #x05E6) + ("HEBREW LETTER QOF" #x05E7) + ("HEBREW LETTER RESH" #x05E8) + ("HEBREW LETTER SHIN" #x05E9) + ("HEBREW LETTER TAV" #x05EA) + ("HEBREW LIGATURE YIDDISH DOUBLE VAV" #x05F0) + ("HEBREW LIGATURE YIDDISH VAV YOD" #x05F1) + ("HEBREW LIGATURE YIDDISH DOUBLE YOD" #x05F2) + ("HEBREW PUNCTUATION GERESH" #x05F3) + ("HEBREW PUNCTUATION GERSHAYIM" #x05F4) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/00600-006FF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,210 @@ +(nxml-define-char-name-set 'arabic + '(("ARABIC COMMA" #x060C) + ("ARABIC SEMICOLON" #x061B) + ("ARABIC QUESTION MARK" #x061F) + ("ARABIC LETTER HAMZA" #x0621) + ("ARABIC LETTER ALEF WITH MADDA ABOVE" #x0622) + ("ARABIC LETTER ALEF WITH HAMZA ABOVE" #x0623) + ("ARABIC LETTER WAW WITH HAMZA ABOVE" #x0624) + ("ARABIC LETTER ALEF WITH HAMZA BELOW" #x0625) + ("ARABIC LETTER YEH WITH HAMZA ABOVE" #x0626) + ("ARABIC LETTER ALEF" #x0627) + ("ARABIC LETTER BEH" #x0628) + ("ARABIC LETTER TEH MARBUTA" #x0629) + ("ARABIC LETTER TEH" #x062A) + ("ARABIC LETTER THEH" #x062B) + ("ARABIC LETTER JEEM" #x062C) + ("ARABIC LETTER HAH" #x062D) + ("ARABIC LETTER KHAH" #x062E) + ("ARABIC LETTER DAL" #x062F) + ("ARABIC LETTER THAL" #x0630) + ("ARABIC LETTER REH" #x0631) + ("ARABIC LETTER ZAIN" #x0632) + ("ARABIC LETTER SEEN" #x0633) + ("ARABIC LETTER SHEEN" #x0634) + ("ARABIC LETTER SAD" #x0635) + ("ARABIC LETTER DAD" #x0636) + ("ARABIC LETTER TAH" #x0637) + ("ARABIC LETTER ZAH" #x0638) + ("ARABIC LETTER AIN" #x0639) + ("ARABIC LETTER GHAIN" #x063A) + ("ARABIC TATWEEL" #x0640) + ("ARABIC LETTER FEH" #x0641) + ("ARABIC LETTER QAF" #x0642) + ("ARABIC LETTER KAF" #x0643) + ("ARABIC LETTER LAM" #x0644) + ("ARABIC LETTER MEEM" #x0645) + ("ARABIC LETTER NOON" #x0646) + ("ARABIC LETTER HEH" #x0647) + ("ARABIC LETTER WAW" #x0648) + ("ARABIC LETTER ALEF MAKSURA" #x0649) + ("ARABIC LETTER YEH" #x064A) + ("ARABIC FATHATAN" #x064B) + ("ARABIC DAMMATAN" #x064C) + ("ARABIC KASRATAN" #x064D) + ("ARABIC FATHA" #x064E) + ("ARABIC DAMMA" #x064F) + ("ARABIC KASRA" #x0650) + ("ARABIC SHADDA" #x0651) + ("ARABIC SUKUN" #x0652) + ("ARABIC MADDAH ABOVE" #x0653) + ("ARABIC HAMZA ABOVE" #x0654) + ("ARABIC HAMZA BELOW" #x0655) + ("ARABIC-INDIC DIGIT ZERO" #x0660) + ("ARABIC-INDIC DIGIT ONE" #x0661) + ("ARABIC-INDIC DIGIT TWO" #x0662) + ("ARABIC-INDIC DIGIT THREE" #x0663) + ("ARABIC-INDIC DIGIT FOUR" #x0664) + ("ARABIC-INDIC DIGIT FIVE" #x0665) + ("ARABIC-INDIC DIGIT SIX" #x0666) + ("ARABIC-INDIC DIGIT SEVEN" #x0667) + ("ARABIC-INDIC DIGIT EIGHT" #x0668) + ("ARABIC-INDIC DIGIT NINE" #x0669) + ("ARABIC PERCENT SIGN" #x066A) + ("ARABIC DECIMAL SEPARATOR" #x066B) + ("ARABIC THOUSANDS SEPARATOR" #x066C) + ("ARABIC FIVE POINTED STAR" #x066D) + ("ARABIC LETTER DOTLESS BEH" #x066E) + ("ARABIC LETTER DOTLESS QAF" #x066F) + ("ARABIC LETTER SUPERSCRIPT ALEF" #x0670) + ("ARABIC LETTER ALEF WASLA" #x0671) + ("ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE" #x0672) + ("ARABIC LETTER ALEF WITH WAVY HAMZA BELOW" #x0673) + ("ARABIC LETTER HIGH HAMZA" #x0674) + ("ARABIC LETTER HIGH HAMZA ALEF" #x0675) + ("ARABIC LETTER HIGH HAMZA WAW" #x0676) + ("ARABIC LETTER U WITH HAMZA ABOVE" #x0677) + ("ARABIC LETTER HIGH HAMZA YEH" #x0678) + ("ARABIC LETTER TTEH" #x0679) + ("ARABIC LETTER TTEHEH" #x067A) + ("ARABIC LETTER BEEH" #x067B) + ("ARABIC LETTER TEH WITH RING" #x067C) + ("ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS" #x067D) + ("ARABIC LETTER PEH" #x067E) + ("ARABIC LETTER TEHEH" #x067F) + ("ARABIC LETTER BEHEH" #x0680) + ("ARABIC LETTER HAH WITH HAMZA ABOVE" #x0681) + ("ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE" #x0682) + ("ARABIC LETTER NYEH" #x0683) + ("ARABIC LETTER DYEH" #x0684) + ("ARABIC LETTER HAH WITH THREE DOTS ABOVE" #x0685) + ("ARABIC LETTER TCHEH" #x0686) + ("ARABIC LETTER TCHEHEH" #x0687) + ("ARABIC LETTER DDAL" #x0688) + ("ARABIC LETTER DAL WITH RING" #x0689) + ("ARABIC LETTER DAL WITH DOT BELOW" #x068A) + ("ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH" #x068B) + ("ARABIC LETTER DAHAL" #x068C) + ("ARABIC LETTER DDAHAL" #x068D) + ("ARABIC LETTER DUL" #x068E) + ("ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS" #x068F) + ("ARABIC LETTER DAL WITH FOUR DOTS ABOVE" #x0690) + ("ARABIC LETTER RREH" #x0691) + ("ARABIC LETTER REH WITH SMALL V" #x0692) + ("ARABIC LETTER REH WITH RING" #x0693) + ("ARABIC LETTER REH WITH DOT BELOW" #x0694) + ("ARABIC LETTER REH WITH SMALL V BELOW" #x0695) + ("ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE" #x0696) + ("ARABIC LETTER REH WITH TWO DOTS ABOVE" #x0697) + ("ARABIC LETTER JEH" #x0698) + ("ARABIC LETTER REH WITH FOUR DOTS ABOVE" #x0699) + ("ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE" #x069A) + ("ARABIC LETTER SEEN WITH THREE DOTS BELOW" #x069B) + ("ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE" #x069C) + ("ARABIC LETTER SAD WITH TWO DOTS BELOW" #x069D) + ("ARABIC LETTER SAD WITH THREE DOTS ABOVE" #x069E) + ("ARABIC LETTER TAH WITH THREE DOTS ABOVE" #x069F) + ("ARABIC LETTER AIN WITH THREE DOTS ABOVE" #x06A0) + ("ARABIC LETTER DOTLESS FEH" #x06A1) + ("ARABIC LETTER FEH WITH DOT MOVED BELOW" #x06A2) + ("ARABIC LETTER FEH WITH DOT BELOW" #x06A3) + ("ARABIC LETTER VEH" #x06A4) + ("ARABIC LETTER FEH WITH THREE DOTS BELOW" #x06A5) + ("ARABIC LETTER PEHEH" #x06A6) + ("ARABIC LETTER QAF WITH DOT ABOVE" #x06A7) + ("ARABIC LETTER QAF WITH THREE DOTS ABOVE" #x06A8) + ("ARABIC LETTER KEHEH" #x06A9) + ("ARABIC LETTER SWASH KAF" #x06AA) + ("ARABIC LETTER KAF WITH RING" #x06AB) + ("ARABIC LETTER KAF WITH DOT ABOVE" #x06AC) + ("ARABIC LETTER NG" #x06AD) + ("ARABIC LETTER KAF WITH THREE DOTS BELOW" #x06AE) + ("ARABIC LETTER GAF" #x06AF) + ("ARABIC LETTER GAF WITH RING" #x06B0) + ("ARABIC LETTER NGOEH" #x06B1) + ("ARABIC LETTER GAF WITH TWO DOTS BELOW" #x06B2) + ("ARABIC LETTER GUEH" #x06B3) + ("ARABIC LETTER GAF WITH THREE DOTS ABOVE" #x06B4) + ("ARABIC LETTER LAM WITH SMALL V" #x06B5) + ("ARABIC LETTER LAM WITH DOT ABOVE" #x06B6) + ("ARABIC LETTER LAM WITH THREE DOTS ABOVE" #x06B7) + ("ARABIC LETTER LAM WITH THREE DOTS BELOW" #x06B8) + ("ARABIC LETTER NOON WITH DOT BELOW" #x06B9) + ("ARABIC LETTER NOON GHUNNA" #x06BA) + ("ARABIC LETTER RNOON" #x06BB) + ("ARABIC LETTER NOON WITH RING" #x06BC) + ("ARABIC LETTER NOON WITH THREE DOTS ABOVE" #x06BD) + ("ARABIC LETTER HEH DOACHASHMEE" #x06BE) + ("ARABIC LETTER TCHEH WITH DOT ABOVE" #x06BF) + ("ARABIC LETTER HEH WITH YEH ABOVE" #x06C0) + ("ARABIC LETTER HEH GOAL" #x06C1) + ("ARABIC LETTER HEH GOAL WITH HAMZA ABOVE" #x06C2) + ("ARABIC LETTER TEH MARBUTA GOAL" #x06C3) + ("ARABIC LETTER WAW WITH RING" #x06C4) + ("ARABIC LETTER KIRGHIZ OE" #x06C5) + ("ARABIC LETTER OE" #x06C6) + ("ARABIC LETTER U" #x06C7) + ("ARABIC LETTER YU" #x06C8) + ("ARABIC LETTER KIRGHIZ YU" #x06C9) + ("ARABIC LETTER WAW WITH TWO DOTS ABOVE" #x06CA) + ("ARABIC LETTER VE" #x06CB) + ("ARABIC LETTER FARSI YEH" #x06CC) + ("ARABIC LETTER YEH WITH TAIL" #x06CD) + ("ARABIC LETTER YEH WITH SMALL V" #x06CE) + ("ARABIC LETTER WAW WITH DOT ABOVE" #x06CF) + ("ARABIC LETTER E" #x06D0) + ("ARABIC LETTER YEH WITH THREE DOTS BELOW" #x06D1) + ("ARABIC LETTER YEH BARREE" #x06D2) + ("ARABIC LETTER YEH BARREE WITH HAMZA ABOVE" #x06D3) + ("ARABIC FULL STOP" #x06D4) + ("ARABIC LETTER AE" #x06D5) + ("ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA" #x06D6) + ("ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA" #x06D7) + ("ARABIC SMALL HIGH MEEM INITIAL FORM" #x06D8) + ("ARABIC SMALL HIGH LAM ALEF" #x06D9) + ("ARABIC SMALL HIGH JEEM" #x06DA) + ("ARABIC SMALL HIGH THREE DOTS" #x06DB) + ("ARABIC SMALL HIGH SEEN" #x06DC) + ("ARABIC END OF AYAH" #x06DD) + ("ARABIC START OF RUB EL HIZB" #x06DE) + ("ARABIC SMALL HIGH ROUNDED ZERO" #x06DF) + ("ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO" #x06E0) + ("ARABIC SMALL HIGH DOTLESS HEAD OF KHAH" #x06E1) + ("ARABIC SMALL HIGH MEEM ISOLATED FORM" #x06E2) + ("ARABIC SMALL LOW SEEN" #x06E3) + ("ARABIC SMALL HIGH MADDA" #x06E4) + ("ARABIC SMALL WAW" #x06E5) + ("ARABIC SMALL YEH" #x06E6) + ("ARABIC SMALL HIGH YEH" #x06E7) + ("ARABIC SMALL HIGH NOON" #x06E8) + ("ARABIC PLACE OF SAJDAH" #x06E9) + ("ARABIC EMPTY CENTRE LOW STOP" #x06EA) + ("ARABIC EMPTY CENTRE HIGH STOP" #x06EB) + ("ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE" #x06EC) + ("ARABIC SMALL LOW MEEM" #x06ED) + ("EXTENDED ARABIC-INDIC DIGIT ZERO" #x06F0) + ("EXTENDED ARABIC-INDIC DIGIT ONE" #x06F1) + ("EXTENDED ARABIC-INDIC DIGIT TWO" #x06F2) + ("EXTENDED ARABIC-INDIC DIGIT THREE" #x06F3) + ("EXTENDED ARABIC-INDIC DIGIT FOUR" #x06F4) + ("EXTENDED ARABIC-INDIC DIGIT FIVE" #x06F5) + ("EXTENDED ARABIC-INDIC DIGIT SIX" #x06F6) + ("EXTENDED ARABIC-INDIC DIGIT SEVEN" #x06F7) + ("EXTENDED ARABIC-INDIC DIGIT EIGHT" #x06F8) + ("EXTENDED ARABIC-INDIC DIGIT NINE" #x06F9) + ("ARABIC LETTER SHEEN WITH DOT BELOW" #x06FA) + ("ARABIC LETTER DAD WITH DOT BELOW" #x06FB) + ("ARABIC LETTER GHAIN WITH DOT BELOW" #x06FC) + ("ARABIC SIGN SINDHI AMPERSAND" #x06FD) + ("ARABIC SIGN SINDHI POSTPOSITION MEN" #x06FE) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/00700-0074F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,73 @@ +(nxml-define-char-name-set 'syriac + '(("SYRIAC END OF PARAGRAPH" #x0700) + ("SYRIAC SUPRALINEAR FULL STOP" #x0701) + ("SYRIAC SUBLINEAR FULL STOP" #x0702) + ("SYRIAC SUPRALINEAR COLON" #x0703) + ("SYRIAC SUBLINEAR COLON" #x0704) + ("SYRIAC HORIZONTAL COLON" #x0705) + ("SYRIAC COLON SKEWED LEFT" #x0706) + ("SYRIAC COLON SKEWED RIGHT" #x0707) + ("SYRIAC SUPRALINEAR COLON SKEWED LEFT" #x0708) + ("SYRIAC SUBLINEAR COLON SKEWED RIGHT" #x0709) + ("SYRIAC CONTRACTION" #x070A) + ("SYRIAC HARKLEAN OBELUS" #x070B) + ("SYRIAC HARKLEAN METOBELUS" #x070C) + ("SYRIAC HARKLEAN ASTERISCUS" #x070D) + ("SYRIAC ABBREVIATION MARK" #x070F) + ("SYRIAC LETTER ALAPH" #x0710) + ("SYRIAC LETTER SUPERSCRIPT ALAPH" #x0711) + ("SYRIAC LETTER BETH" #x0712) + ("SYRIAC LETTER GAMAL" #x0713) + ("SYRIAC LETTER GAMAL GARSHUNI" #x0714) + ("SYRIAC LETTER DALATH" #x0715) + ("SYRIAC LETTER DOTLESS DALATH RISH" #x0716) + ("SYRIAC LETTER HE" #x0717) + ("SYRIAC LETTER WAW" #x0718) + ("SYRIAC LETTER ZAIN" #x0719) + ("SYRIAC LETTER HETH" #x071A) + ("SYRIAC LETTER TETH" #x071B) + ("SYRIAC LETTER TETH GARSHUNI" #x071C) + ("SYRIAC LETTER YUDH" #x071D) + ("SYRIAC LETTER YUDH HE" #x071E) + ("SYRIAC LETTER KAPH" #x071F) + ("SYRIAC LETTER LAMADH" #x0720) + ("SYRIAC LETTER MIM" #x0721) + ("SYRIAC LETTER NUN" #x0722) + ("SYRIAC LETTER SEMKATH" #x0723) + ("SYRIAC LETTER FINAL SEMKATH" #x0724) + ("SYRIAC LETTER E" #x0725) + ("SYRIAC LETTER PE" #x0726) + ("SYRIAC LETTER REVERSED PE" #x0727) + ("SYRIAC LETTER SADHE" #x0728) + ("SYRIAC LETTER QAPH" #x0729) + ("SYRIAC LETTER RISH" #x072A) + ("SYRIAC LETTER SHIN" #x072B) + ("SYRIAC LETTER TAW" #x072C) + ("SYRIAC PTHAHA ABOVE" #x0730) + ("SYRIAC PTHAHA BELOW" #x0731) + ("SYRIAC PTHAHA DOTTED" #x0732) + ("SYRIAC ZQAPHA ABOVE" #x0733) + ("SYRIAC ZQAPHA BELOW" #x0734) + ("SYRIAC ZQAPHA DOTTED" #x0735) + ("SYRIAC RBASA ABOVE" #x0736) + ("SYRIAC RBASA BELOW" #x0737) + ("SYRIAC DOTTED ZLAMA HORIZONTAL" #x0738) + ("SYRIAC DOTTED ZLAMA ANGULAR" #x0739) + ("SYRIAC HBASA ABOVE" #x073A) + ("SYRIAC HBASA BELOW" #x073B) + ("SYRIAC HBASA-ESASA DOTTED" #x073C) + ("SYRIAC ESASA ABOVE" #x073D) + ("SYRIAC ESASA BELOW" #x073E) + ("SYRIAC RWAHA" #x073F) + ("SYRIAC FEMININE DOT" #x0740) + ("SYRIAC QUSHSHAYA" #x0741) + ("SYRIAC RUKKAKHA" #x0742) + ("SYRIAC TWO VERTICAL DOTS ABOVE" #x0743) + ("SYRIAC TWO VERTICAL DOTS BELOW" #x0744) + ("SYRIAC THREE DOTS ABOVE" #x0745) + ("SYRIAC THREE DOTS BELOW" #x0746) + ("SYRIAC OBLIQUE LINE ABOVE" #x0747) + ("SYRIAC OBLIQUE LINE BELOW" #x0748) + ("SYRIAC MUSIC" #x0749) + ("SYRIAC BARREKH" #x074A) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/00780-007BF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,52 @@ +(nxml-define-char-name-set 'thaana + '(("THAANA LETTER HAA" #x0780) + ("THAANA LETTER SHAVIYANI" #x0781) + ("THAANA LETTER NOONU" #x0782) + ("THAANA LETTER RAA" #x0783) + ("THAANA LETTER BAA" #x0784) + ("THAANA LETTER LHAVIYANI" #x0785) + ("THAANA LETTER KAAFU" #x0786) + ("THAANA LETTER ALIFU" #x0787) + ("THAANA LETTER VAAVU" #x0788) + ("THAANA LETTER MEEMU" #x0789) + ("THAANA LETTER FAAFU" #x078A) + ("THAANA LETTER DHAALU" #x078B) + ("THAANA LETTER THAA" #x078C) + ("THAANA LETTER LAAMU" #x078D) + ("THAANA LETTER GAAFU" #x078E) + ("THAANA LETTER GNAVIYANI" #x078F) + ("THAANA LETTER SEENU" #x0790) + ("THAANA LETTER DAVIYANI" #x0791) + ("THAANA LETTER ZAVIYANI" #x0792) + ("THAANA LETTER TAVIYANI" #x0793) + ("THAANA LETTER YAA" #x0794) + ("THAANA LETTER PAVIYANI" #x0795) + ("THAANA LETTER JAVIYANI" #x0796) + ("THAANA LETTER CHAVIYANI" #x0797) + ("THAANA LETTER TTAA" #x0798) + ("THAANA LETTER HHAA" #x0799) + ("THAANA LETTER KHAA" #x079A) + ("THAANA LETTER THAALU" #x079B) + ("THAANA LETTER ZAA" #x079C) + ("THAANA LETTER SHEENU" #x079D) + ("THAANA LETTER SAADHU" #x079E) + ("THAANA LETTER DAADHU" #x079F) + ("THAANA LETTER TO" #x07A0) + ("THAANA LETTER ZO" #x07A1) + ("THAANA LETTER AINU" #x07A2) + ("THAANA LETTER GHAINU" #x07A3) + ("THAANA LETTER QAAFU" #x07A4) + ("THAANA LETTER WAAVU" #x07A5) + ("THAANA ABAFILI" #x07A6) + ("THAANA AABAAFILI" #x07A7) + ("THAANA IBIFILI" #x07A8) + ("THAANA EEBEEFILI" #x07A9) + ("THAANA UBUFILI" #x07AA) + ("THAANA OOBOOFILI" #x07AB) + ("THAANA EBEFILI" #x07AC) + ("THAANA EYBEYFILI" #x07AD) + ("THAANA OBOFILI" #x07AE) + ("THAANA OABOAFILI" #x07AF) + ("THAANA SUKUN" #x07B0) + ("THAANA LETTER NAA" #x07B1) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/00900-0097F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,106 @@ +(nxml-define-char-name-set 'devanagari + '(("DEVANAGARI SIGN CANDRABINDU" #x0901) + ("DEVANAGARI SIGN ANUSVARA" #x0902) + ("DEVANAGARI SIGN VISARGA" #x0903) + ("DEVANAGARI LETTER A" #x0905) + ("DEVANAGARI LETTER AA" #x0906) + ("DEVANAGARI LETTER I" #x0907) + ("DEVANAGARI LETTER II" #x0908) + ("DEVANAGARI LETTER U" #x0909) + ("DEVANAGARI LETTER UU" #x090A) + ("DEVANAGARI LETTER VOCALIC R" #x090B) + ("DEVANAGARI LETTER VOCALIC L" #x090C) + ("DEVANAGARI LETTER CANDRA E" #x090D) + ("DEVANAGARI LETTER SHORT E" #x090E) + ("DEVANAGARI LETTER E" #x090F) + ("DEVANAGARI LETTER AI" #x0910) + ("DEVANAGARI LETTER CANDRA O" #x0911) + ("DEVANAGARI LETTER SHORT O" #x0912) + ("DEVANAGARI LETTER O" #x0913) + ("DEVANAGARI LETTER AU" #x0914) + ("DEVANAGARI LETTER KA" #x0915) + ("DEVANAGARI LETTER KHA" #x0916) + ("DEVANAGARI LETTER GA" #x0917) + ("DEVANAGARI LETTER GHA" #x0918) + ("DEVANAGARI LETTER NGA" #x0919) + ("DEVANAGARI LETTER CA" #x091A) + ("DEVANAGARI LETTER CHA" #x091B) + ("DEVANAGARI LETTER JA" #x091C) + ("DEVANAGARI LETTER JHA" #x091D) + ("DEVANAGARI LETTER NYA" #x091E) + ("DEVANAGARI LETTER TTA" #x091F) + ("DEVANAGARI LETTER TTHA" #x0920) + ("DEVANAGARI LETTER DDA" #x0921) + ("DEVANAGARI LETTER DDHA" #x0922) + ("DEVANAGARI LETTER NNA" #x0923) + ("DEVANAGARI LETTER TA" #x0924) + ("DEVANAGARI LETTER THA" #x0925) + ("DEVANAGARI LETTER DA" #x0926) + ("DEVANAGARI LETTER DHA" #x0927) + ("DEVANAGARI LETTER NA" #x0928) + ("DEVANAGARI LETTER NNNA" #x0929) + ("DEVANAGARI LETTER PA" #x092A) + ("DEVANAGARI LETTER PHA" #x092B) + ("DEVANAGARI LETTER BA" #x092C) + ("DEVANAGARI LETTER BHA" #x092D) + ("DEVANAGARI LETTER MA" #x092E) + ("DEVANAGARI LETTER YA" #x092F) + ("DEVANAGARI LETTER RA" #x0930) + ("DEVANAGARI LETTER RRA" #x0931) + ("DEVANAGARI LETTER LA" #x0932) + ("DEVANAGARI LETTER LLA" #x0933) + ("DEVANAGARI LETTER LLLA" #x0934) + ("DEVANAGARI LETTER VA" #x0935) + ("DEVANAGARI LETTER SHA" #x0936) + ("DEVANAGARI LETTER SSA" #x0937) + ("DEVANAGARI LETTER SA" #x0938) + ("DEVANAGARI LETTER HA" #x0939) + ("DEVANAGARI SIGN NUKTA" #x093C) + ("DEVANAGARI SIGN AVAGRAHA" #x093D) + ("DEVANAGARI VOWEL SIGN AA" #x093E) + ("DEVANAGARI VOWEL SIGN I" #x093F) + ("DEVANAGARI VOWEL SIGN II" #x0940) + ("DEVANAGARI VOWEL SIGN U" #x0941) + ("DEVANAGARI VOWEL SIGN UU" #x0942) + ("DEVANAGARI VOWEL SIGN VOCALIC R" #x0943) + ("DEVANAGARI VOWEL SIGN VOCALIC RR" #x0944) + ("DEVANAGARI VOWEL SIGN CANDRA E" #x0945) + ("DEVANAGARI VOWEL SIGN SHORT E" #x0946) + ("DEVANAGARI VOWEL SIGN E" #x0947) + ("DEVANAGARI VOWEL SIGN AI" #x0948) + ("DEVANAGARI VOWEL SIGN CANDRA O" #x0949) + ("DEVANAGARI VOWEL SIGN SHORT O" #x094A) + ("DEVANAGARI VOWEL SIGN O" #x094B) + ("DEVANAGARI VOWEL SIGN AU" #x094C) + ("DEVANAGARI SIGN VIRAMA" #x094D) + ("DEVANAGARI OM" #x0950) + ("DEVANAGARI STRESS SIGN UDATTA" #x0951) + ("DEVANAGARI STRESS SIGN ANUDATTA" #x0952) + ("DEVANAGARI GRAVE ACCENT" #x0953) + ("DEVANAGARI ACUTE ACCENT" #x0954) + ("DEVANAGARI LETTER QA" #x0958) + ("DEVANAGARI LETTER KHHA" #x0959) + ("DEVANAGARI LETTER GHHA" #x095A) + ("DEVANAGARI LETTER ZA" #x095B) + ("DEVANAGARI LETTER DDDHA" #x095C) + ("DEVANAGARI LETTER RHA" #x095D) + ("DEVANAGARI LETTER FA" #x095E) + ("DEVANAGARI LETTER YYA" #x095F) + ("DEVANAGARI LETTER VOCALIC RR" #x0960) + ("DEVANAGARI LETTER VOCALIC LL" #x0961) + ("DEVANAGARI VOWEL SIGN VOCALIC L" #x0962) + ("DEVANAGARI VOWEL SIGN VOCALIC LL" #x0963) + ("DEVANAGARI DANDA" #x0964) + ("DEVANAGARI DOUBLE DANDA" #x0965) + ("DEVANAGARI DIGIT ZERO" #x0966) + ("DEVANAGARI DIGIT ONE" #x0967) + ("DEVANAGARI DIGIT TWO" #x0968) + ("DEVANAGARI DIGIT THREE" #x0969) + ("DEVANAGARI DIGIT FOUR" #x096A) + ("DEVANAGARI DIGIT FIVE" #x096B) + ("DEVANAGARI DIGIT SIX" #x096C) + ("DEVANAGARI DIGIT SEVEN" #x096D) + ("DEVANAGARI DIGIT EIGHT" #x096E) + ("DEVANAGARI DIGIT NINE" #x096F) + ("DEVANAGARI ABBREVIATION SIGN" #x0970) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/00980-009FF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,91 @@ +(nxml-define-char-name-set 'bengali + '(("BENGALI SIGN CANDRABINDU" #x0981) + ("BENGALI SIGN ANUSVARA" #x0982) + ("BENGALI SIGN VISARGA" #x0983) + ("BENGALI LETTER A" #x0985) + ("BENGALI LETTER AA" #x0986) + ("BENGALI LETTER I" #x0987) + ("BENGALI LETTER II" #x0988) + ("BENGALI LETTER U" #x0989) + ("BENGALI LETTER UU" #x098A) + ("BENGALI LETTER VOCALIC R" #x098B) + ("BENGALI LETTER VOCALIC L" #x098C) + ("BENGALI LETTER E" #x098F) + ("BENGALI LETTER AI" #x0990) + ("BENGALI LETTER O" #x0993) + ("BENGALI LETTER AU" #x0994) + ("BENGALI LETTER KA" #x0995) + ("BENGALI LETTER KHA" #x0996) + ("BENGALI LETTER GA" #x0997) + ("BENGALI LETTER GHA" #x0998) + ("BENGALI LETTER NGA" #x0999) + ("BENGALI LETTER CA" #x099A) + ("BENGALI LETTER CHA" #x099B) + ("BENGALI LETTER JA" #x099C) + ("BENGALI LETTER JHA" #x099D) + ("BENGALI LETTER NYA" #x099E) + ("BENGALI LETTER TTA" #x099F) + ("BENGALI LETTER TTHA" #x09A0) + ("BENGALI LETTER DDA" #x09A1) + ("BENGALI LETTER DDHA" #x09A2) + ("BENGALI LETTER NNA" #x09A3) + ("BENGALI LETTER TA" #x09A4) + ("BENGALI LETTER THA" #x09A5) + ("BENGALI LETTER DA" #x09A6) + ("BENGALI LETTER DHA" #x09A7) + ("BENGALI LETTER NA" #x09A8) + ("BENGALI LETTER PA" #x09AA) + ("BENGALI LETTER PHA" #x09AB) + ("BENGALI LETTER BA" #x09AC) + ("BENGALI LETTER BHA" #x09AD) + ("BENGALI LETTER MA" #x09AE) + ("BENGALI LETTER YA" #x09AF) + ("BENGALI LETTER RA" #x09B0) + ("BENGALI LETTER LA" #x09B2) + ("BENGALI LETTER SHA" #x09B6) + ("BENGALI LETTER SSA" #x09B7) + ("BENGALI LETTER SA" #x09B8) + ("BENGALI LETTER HA" #x09B9) + ("BENGALI SIGN NUKTA" #x09BC) + ("BENGALI VOWEL SIGN AA" #x09BE) + ("BENGALI VOWEL SIGN I" #x09BF) + ("BENGALI VOWEL SIGN II" #x09C0) + ("BENGALI VOWEL SIGN U" #x09C1) + ("BENGALI VOWEL SIGN UU" #x09C2) + ("BENGALI VOWEL SIGN VOCALIC R" #x09C3) + ("BENGALI VOWEL SIGN VOCALIC RR" #x09C4) + ("BENGALI VOWEL SIGN E" #x09C7) + ("BENGALI VOWEL SIGN AI" #x09C8) + ("BENGALI VOWEL SIGN O" #x09CB) + ("BENGALI VOWEL SIGN AU" #x09CC) + ("BENGALI SIGN VIRAMA" #x09CD) + ("BENGALI AU LENGTH MARK" #x09D7) + ("BENGALI LETTER RRA" #x09DC) + ("BENGALI LETTER RHA" #x09DD) + ("BENGALI LETTER YYA" #x09DF) + ("BENGALI LETTER VOCALIC RR" #x09E0) + ("BENGALI LETTER VOCALIC LL" #x09E1) + ("BENGALI VOWEL SIGN VOCALIC L" #x09E2) + ("BENGALI VOWEL SIGN VOCALIC LL" #x09E3) + ("BENGALI DIGIT ZERO" #x09E6) + ("BENGALI DIGIT ONE" #x09E7) + ("BENGALI DIGIT TWO" #x09E8) + ("BENGALI DIGIT THREE" #x09E9) + ("BENGALI DIGIT FOUR" #x09EA) + ("BENGALI DIGIT FIVE" #x09EB) + ("BENGALI DIGIT SIX" #x09EC) + ("BENGALI DIGIT SEVEN" #x09ED) + ("BENGALI DIGIT EIGHT" #x09EE) + ("BENGALI DIGIT NINE" #x09EF) + ("BENGALI LETTER RA WITH MIDDLE DIAGONAL" #x09F0) + ("BENGALI LETTER RA WITH LOWER DIAGONAL" #x09F1) + ("BENGALI RUPEE MARK" #x09F2) + ("BENGALI RUPEE SIGN" #x09F3) + ("BENGALI CURRENCY NUMERATOR ONE" #x09F4) + ("BENGALI CURRENCY NUMERATOR TWO" #x09F5) + ("BENGALI CURRENCY NUMERATOR THREE" #x09F6) + ("BENGALI CURRENCY NUMERATOR FOUR" #x09F7) + ("BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR" #x09F8) + ("BENGALI CURRENCY DENOMINATOR SIXTEEN" #x09F9) + ("BENGALI ISSHAR" #x09FA) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/00A00-00A7F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,77 @@ +(nxml-define-char-name-set 'gurmukhi + '(("GURMUKHI SIGN BINDI" #x0A02) + ("GURMUKHI LETTER A" #x0A05) + ("GURMUKHI LETTER AA" #x0A06) + ("GURMUKHI LETTER I" #x0A07) + ("GURMUKHI LETTER II" #x0A08) + ("GURMUKHI LETTER U" #x0A09) + ("GURMUKHI LETTER UU" #x0A0A) + ("GURMUKHI LETTER EE" #x0A0F) + ("GURMUKHI LETTER AI" #x0A10) + ("GURMUKHI LETTER OO" #x0A13) + ("GURMUKHI LETTER AU" #x0A14) + ("GURMUKHI LETTER KA" #x0A15) + ("GURMUKHI LETTER KHA" #x0A16) + ("GURMUKHI LETTER GA" #x0A17) + ("GURMUKHI LETTER GHA" #x0A18) + ("GURMUKHI LETTER NGA" #x0A19) + ("GURMUKHI LETTER CA" #x0A1A) + ("GURMUKHI LETTER CHA" #x0A1B) + ("GURMUKHI LETTER JA" #x0A1C) + ("GURMUKHI LETTER JHA" #x0A1D) + ("GURMUKHI LETTER NYA" #x0A1E) + ("GURMUKHI LETTER TTA" #x0A1F) + ("GURMUKHI LETTER TTHA" #x0A20) + ("GURMUKHI LETTER DDA" #x0A21) + ("GURMUKHI LETTER DDHA" #x0A22) + ("GURMUKHI LETTER NNA" #x0A23) + ("GURMUKHI LETTER TA" #x0A24) + ("GURMUKHI LETTER THA" #x0A25) + ("GURMUKHI LETTER DA" #x0A26) + ("GURMUKHI LETTER DHA" #x0A27) + ("GURMUKHI LETTER NA" #x0A28) + ("GURMUKHI LETTER PA" #x0A2A) + ("GURMUKHI LETTER PHA" #x0A2B) + ("GURMUKHI LETTER BA" #x0A2C) + ("GURMUKHI LETTER BHA" #x0A2D) + ("GURMUKHI LETTER MA" #x0A2E) + ("GURMUKHI LETTER YA" #x0A2F) + ("GURMUKHI LETTER RA" #x0A30) + ("GURMUKHI LETTER LA" #x0A32) + ("GURMUKHI LETTER LLA" #x0A33) + ("GURMUKHI LETTER VA" #x0A35) + ("GURMUKHI LETTER SHA" #x0A36) + ("GURMUKHI LETTER SA" #x0A38) + ("GURMUKHI LETTER HA" #x0A39) + ("GURMUKHI SIGN NUKTA" #x0A3C) + ("GURMUKHI VOWEL SIGN AA" #x0A3E) + ("GURMUKHI VOWEL SIGN I" #x0A3F) + ("GURMUKHI VOWEL SIGN II" #x0A40) + ("GURMUKHI VOWEL SIGN U" #x0A41) + ("GURMUKHI VOWEL SIGN UU" #x0A42) + ("GURMUKHI VOWEL SIGN EE" #x0A47) + ("GURMUKHI VOWEL SIGN AI" #x0A48) + ("GURMUKHI VOWEL SIGN OO" #x0A4B) + ("GURMUKHI VOWEL SIGN AU" #x0A4C) + ("GURMUKHI SIGN VIRAMA" #x0A4D) + ("GURMUKHI LETTER KHHA" #x0A59) + ("GURMUKHI LETTER GHHA" #x0A5A) + ("GURMUKHI LETTER ZA" #x0A5B) + ("GURMUKHI LETTER RRA" #x0A5C) + ("GURMUKHI LETTER FA" #x0A5E) + ("GURMUKHI DIGIT ZERO" #x0A66) + ("GURMUKHI DIGIT ONE" #x0A67) + ("GURMUKHI DIGIT TWO" #x0A68) + ("GURMUKHI DIGIT THREE" #x0A69) + ("GURMUKHI DIGIT FOUR" #x0A6A) + ("GURMUKHI DIGIT FIVE" #x0A6B) + ("GURMUKHI DIGIT SIX" #x0A6C) + ("GURMUKHI DIGIT SEVEN" #x0A6D) + ("GURMUKHI DIGIT EIGHT" #x0A6E) + ("GURMUKHI DIGIT NINE" #x0A6F) + ("GURMUKHI TIPPI" #x0A70) + ("GURMUKHI ADDAK" #x0A71) + ("GURMUKHI IRI" #x0A72) + ("GURMUKHI URA" #x0A73) + ("GURMUKHI EK ONKAR" #x0A74) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/00A80-00AFF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,80 @@ +(nxml-define-char-name-set 'gujarati + '(("GUJARATI SIGN CANDRABINDU" #x0A81) + ("GUJARATI SIGN ANUSVARA" #x0A82) + ("GUJARATI SIGN VISARGA" #x0A83) + ("GUJARATI LETTER A" #x0A85) + ("GUJARATI LETTER AA" #x0A86) + ("GUJARATI LETTER I" #x0A87) + ("GUJARATI LETTER II" #x0A88) + ("GUJARATI LETTER U" #x0A89) + ("GUJARATI LETTER UU" #x0A8A) + ("GUJARATI LETTER VOCALIC R" #x0A8B) + ("GUJARATI VOWEL CANDRA E" #x0A8D) + ("GUJARATI LETTER E" #x0A8F) + ("GUJARATI LETTER AI" #x0A90) + ("GUJARATI VOWEL CANDRA O" #x0A91) + ("GUJARATI LETTER O" #x0A93) + ("GUJARATI LETTER AU" #x0A94) + ("GUJARATI LETTER KA" #x0A95) + ("GUJARATI LETTER KHA" #x0A96) + ("GUJARATI LETTER GA" #x0A97) + ("GUJARATI LETTER GHA" #x0A98) + ("GUJARATI LETTER NGA" #x0A99) + ("GUJARATI LETTER CA" #x0A9A) + ("GUJARATI LETTER CHA" #x0A9B) + ("GUJARATI LETTER JA" #x0A9C) + ("GUJARATI LETTER JHA" #x0A9D) + ("GUJARATI LETTER NYA" #x0A9E) + ("GUJARATI LETTER TTA" #x0A9F) + ("GUJARATI LETTER TTHA" #x0AA0) + ("GUJARATI LETTER DDA" #x0AA1) + ("GUJARATI LETTER DDHA" #x0AA2) + ("GUJARATI LETTER NNA" #x0AA3) + ("GUJARATI LETTER TA" #x0AA4) + ("GUJARATI LETTER THA" #x0AA5) + ("GUJARATI LETTER DA" #x0AA6) + ("GUJARATI LETTER DHA" #x0AA7) + ("GUJARATI LETTER NA" #x0AA8) + ("GUJARATI LETTER PA" #x0AAA) + ("GUJARATI LETTER PHA" #x0AAB) + ("GUJARATI LETTER BA" #x0AAC) + ("GUJARATI LETTER BHA" #x0AAD) + ("GUJARATI LETTER MA" #x0AAE) + ("GUJARATI LETTER YA" #x0AAF) + ("GUJARATI LETTER RA" #x0AB0) + ("GUJARATI LETTER LA" #x0AB2) + ("GUJARATI LETTER LLA" #x0AB3) + ("GUJARATI LETTER VA" #x0AB5) + ("GUJARATI LETTER SHA" #x0AB6) + ("GUJARATI LETTER SSA" #x0AB7) + ("GUJARATI LETTER SA" #x0AB8) + ("GUJARATI LETTER HA" #x0AB9) + ("GUJARATI SIGN NUKTA" #x0ABC) + ("GUJARATI SIGN AVAGRAHA" #x0ABD) + ("GUJARATI VOWEL SIGN AA" #x0ABE) + ("GUJARATI VOWEL SIGN I" #x0ABF) + ("GUJARATI VOWEL SIGN II" #x0AC0) + ("GUJARATI VOWEL SIGN U" #x0AC1) + ("GUJARATI VOWEL SIGN UU" #x0AC2) + ("GUJARATI VOWEL SIGN VOCALIC R" #x0AC3) + ("GUJARATI VOWEL SIGN VOCALIC RR" #x0AC4) + ("GUJARATI VOWEL SIGN CANDRA E" #x0AC5) + ("GUJARATI VOWEL SIGN E" #x0AC7) + ("GUJARATI VOWEL SIGN AI" #x0AC8) + ("GUJARATI VOWEL SIGN CANDRA O" #x0AC9) + ("GUJARATI VOWEL SIGN O" #x0ACB) + ("GUJARATI VOWEL SIGN AU" #x0ACC) + ("GUJARATI SIGN VIRAMA" #x0ACD) + ("GUJARATI OM" #x0AD0) + ("GUJARATI LETTER VOCALIC RR" #x0AE0) + ("GUJARATI DIGIT ZERO" #x0AE6) + ("GUJARATI DIGIT ONE" #x0AE7) + ("GUJARATI DIGIT TWO" #x0AE8) + ("GUJARATI DIGIT THREE" #x0AE9) + ("GUJARATI DIGIT FOUR" #x0AEA) + ("GUJARATI DIGIT FIVE" #x0AEB) + ("GUJARATI DIGIT SIX" #x0AEC) + ("GUJARATI DIGIT SEVEN" #x0AED) + ("GUJARATI DIGIT EIGHT" #x0AEE) + ("GUJARATI DIGIT NINE" #x0AEF) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/00B00-00B7F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,81 @@ +(nxml-define-char-name-set 'oriya + '(("ORIYA SIGN CANDRABINDU" #x0B01) + ("ORIYA SIGN ANUSVARA" #x0B02) + ("ORIYA SIGN VISARGA" #x0B03) + ("ORIYA LETTER A" #x0B05) + ("ORIYA LETTER AA" #x0B06) + ("ORIYA LETTER I" #x0B07) + ("ORIYA LETTER II" #x0B08) + ("ORIYA LETTER U" #x0B09) + ("ORIYA LETTER UU" #x0B0A) + ("ORIYA LETTER VOCALIC R" #x0B0B) + ("ORIYA LETTER VOCALIC L" #x0B0C) + ("ORIYA LETTER E" #x0B0F) + ("ORIYA LETTER AI" #x0B10) + ("ORIYA LETTER O" #x0B13) + ("ORIYA LETTER AU" #x0B14) + ("ORIYA LETTER KA" #x0B15) + ("ORIYA LETTER KHA" #x0B16) + ("ORIYA LETTER GA" #x0B17) + ("ORIYA LETTER GHA" #x0B18) + ("ORIYA LETTER NGA" #x0B19) + ("ORIYA LETTER CA" #x0B1A) + ("ORIYA LETTER CHA" #x0B1B) + ("ORIYA LETTER JA" #x0B1C) + ("ORIYA LETTER JHA" #x0B1D) + ("ORIYA LETTER NYA" #x0B1E) + ("ORIYA LETTER TTA" #x0B1F) + ("ORIYA LETTER TTHA" #x0B20) + ("ORIYA LETTER DDA" #x0B21) + ("ORIYA LETTER DDHA" #x0B22) + ("ORIYA LETTER NNA" #x0B23) + ("ORIYA LETTER TA" #x0B24) + ("ORIYA LETTER THA" #x0B25) + ("ORIYA LETTER DA" #x0B26) + ("ORIYA LETTER DHA" #x0B27) + ("ORIYA LETTER NA" #x0B28) + ("ORIYA LETTER PA" #x0B2A) + ("ORIYA LETTER PHA" #x0B2B) + ("ORIYA LETTER BA" #x0B2C) + ("ORIYA LETTER BHA" #x0B2D) + ("ORIYA LETTER MA" #x0B2E) + ("ORIYA LETTER YA" #x0B2F) + ("ORIYA LETTER RA" #x0B30) + ("ORIYA LETTER LA" #x0B32) + ("ORIYA LETTER LLA" #x0B33) + ("ORIYA LETTER SHA" #x0B36) + ("ORIYA LETTER SSA" #x0B37) + ("ORIYA LETTER SA" #x0B38) + ("ORIYA LETTER HA" #x0B39) + ("ORIYA SIGN NUKTA" #x0B3C) + ("ORIYA SIGN AVAGRAHA" #x0B3D) + ("ORIYA VOWEL SIGN AA" #x0B3E) + ("ORIYA VOWEL SIGN I" #x0B3F) + ("ORIYA VOWEL SIGN II" #x0B40) + ("ORIYA VOWEL SIGN U" #x0B41) + ("ORIYA VOWEL SIGN UU" #x0B42) + ("ORIYA VOWEL SIGN VOCALIC R" #x0B43) + ("ORIYA VOWEL SIGN E" #x0B47) + ("ORIYA VOWEL SIGN AI" #x0B48) + ("ORIYA VOWEL SIGN O" #x0B4B) + ("ORIYA VOWEL SIGN AU" #x0B4C) + ("ORIYA SIGN VIRAMA" #x0B4D) + ("ORIYA AI LENGTH MARK" #x0B56) + ("ORIYA AU LENGTH MARK" #x0B57) + ("ORIYA LETTER RRA" #x0B5C) + ("ORIYA LETTER RHA" #x0B5D) + ("ORIYA LETTER YYA" #x0B5F) + ("ORIYA LETTER VOCALIC RR" #x0B60) + ("ORIYA LETTER VOCALIC LL" #x0B61) + ("ORIYA DIGIT ZERO" #x0B66) + ("ORIYA DIGIT ONE" #x0B67) + ("ORIYA DIGIT TWO" #x0B68) + ("ORIYA DIGIT THREE" #x0B69) + ("ORIYA DIGIT FOUR" #x0B6A) + ("ORIYA DIGIT FIVE" #x0B6B) + ("ORIYA DIGIT SIX" #x0B6C) + ("ORIYA DIGIT SEVEN" #x0B6D) + ("ORIYA DIGIT EIGHT" #x0B6E) + ("ORIYA DIGIT NINE" #x0B6F) + ("ORIYA ISSHAR" #x0B70) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/00B80-00BFF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,63 @@ +(nxml-define-char-name-set 'tamil + '(("TAMIL SIGN ANUSVARA" #x0B82) + ("TAMIL SIGN VISARGA" #x0B83) + ("TAMIL LETTER A" #x0B85) + ("TAMIL LETTER AA" #x0B86) + ("TAMIL LETTER I" #x0B87) + ("TAMIL LETTER II" #x0B88) + ("TAMIL LETTER U" #x0B89) + ("TAMIL LETTER UU" #x0B8A) + ("TAMIL LETTER E" #x0B8E) + ("TAMIL LETTER EE" #x0B8F) + ("TAMIL LETTER AI" #x0B90) + ("TAMIL LETTER O" #x0B92) + ("TAMIL LETTER OO" #x0B93) + ("TAMIL LETTER AU" #x0B94) + ("TAMIL LETTER KA" #x0B95) + ("TAMIL LETTER NGA" #x0B99) + ("TAMIL LETTER CA" #x0B9A) + ("TAMIL LETTER JA" #x0B9C) + ("TAMIL LETTER NYA" #x0B9E) + ("TAMIL LETTER TTA" #x0B9F) + ("TAMIL LETTER NNA" #x0BA3) + ("TAMIL LETTER TA" #x0BA4) + ("TAMIL LETTER NA" #x0BA8) + ("TAMIL LETTER NNNA" #x0BA9) + ("TAMIL LETTER PA" #x0BAA) + ("TAMIL LETTER MA" #x0BAE) + ("TAMIL LETTER YA" #x0BAF) + ("TAMIL LETTER RA" #x0BB0) + ("TAMIL LETTER RRA" #x0BB1) + ("TAMIL LETTER LA" #x0BB2) + ("TAMIL LETTER LLA" #x0BB3) + ("TAMIL LETTER LLLA" #x0BB4) + ("TAMIL LETTER VA" #x0BB5) + ("TAMIL LETTER SSA" #x0BB7) + ("TAMIL LETTER SA" #x0BB8) + ("TAMIL LETTER HA" #x0BB9) + ("TAMIL VOWEL SIGN AA" #x0BBE) + ("TAMIL VOWEL SIGN I" #x0BBF) + ("TAMIL VOWEL SIGN II" #x0BC0) + ("TAMIL VOWEL SIGN U" #x0BC1) + ("TAMIL VOWEL SIGN UU" #x0BC2) + ("TAMIL VOWEL SIGN E" #x0BC6) + ("TAMIL VOWEL SIGN EE" #x0BC7) + ("TAMIL VOWEL SIGN AI" #x0BC8) + ("TAMIL VOWEL SIGN O" #x0BCA) + ("TAMIL VOWEL SIGN OO" #x0BCB) + ("TAMIL VOWEL SIGN AU" #x0BCC) + ("TAMIL SIGN VIRAMA" #x0BCD) + ("TAMIL AU LENGTH MARK" #x0BD7) + ("TAMIL DIGIT ONE" #x0BE7) + ("TAMIL DIGIT TWO" #x0BE8) + ("TAMIL DIGIT THREE" #x0BE9) + ("TAMIL DIGIT FOUR" #x0BEA) + ("TAMIL DIGIT FIVE" #x0BEB) + ("TAMIL DIGIT SIX" #x0BEC) + ("TAMIL DIGIT SEVEN" #x0BED) + ("TAMIL DIGIT EIGHT" #x0BEE) + ("TAMIL DIGIT NINE" #x0BEF) + ("TAMIL NUMBER TEN" #x0BF0) + ("TAMIL NUMBER ONE HUNDRED" #x0BF1) + ("TAMIL NUMBER ONE THOUSAND" #x0BF2) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/00C00-00C7F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,82 @@ +(nxml-define-char-name-set 'telugu + '(("TELUGU SIGN CANDRABINDU" #x0C01) + ("TELUGU SIGN ANUSVARA" #x0C02) + ("TELUGU SIGN VISARGA" #x0C03) + ("TELUGU LETTER A" #x0C05) + ("TELUGU LETTER AA" #x0C06) + ("TELUGU LETTER I" #x0C07) + ("TELUGU LETTER II" #x0C08) + ("TELUGU LETTER U" #x0C09) + ("TELUGU LETTER UU" #x0C0A) + ("TELUGU LETTER VOCALIC R" #x0C0B) + ("TELUGU LETTER VOCALIC L" #x0C0C) + ("TELUGU LETTER E" #x0C0E) + ("TELUGU LETTER EE" #x0C0F) + ("TELUGU LETTER AI" #x0C10) + ("TELUGU LETTER O" #x0C12) + ("TELUGU LETTER OO" #x0C13) + ("TELUGU LETTER AU" #x0C14) + ("TELUGU LETTER KA" #x0C15) + ("TELUGU LETTER KHA" #x0C16) + ("TELUGU LETTER GA" #x0C17) + ("TELUGU LETTER GHA" #x0C18) + ("TELUGU LETTER NGA" #x0C19) + ("TELUGU LETTER CA" #x0C1A) + ("TELUGU LETTER CHA" #x0C1B) + ("TELUGU LETTER JA" #x0C1C) + ("TELUGU LETTER JHA" #x0C1D) + ("TELUGU LETTER NYA" #x0C1E) + ("TELUGU LETTER TTA" #x0C1F) + ("TELUGU LETTER TTHA" #x0C20) + ("TELUGU LETTER DDA" #x0C21) + ("TELUGU LETTER DDHA" #x0C22) + ("TELUGU LETTER NNA" #x0C23) + ("TELUGU LETTER TA" #x0C24) + ("TELUGU LETTER THA" #x0C25) + ("TELUGU LETTER DA" #x0C26) + ("TELUGU LETTER DHA" #x0C27) + ("TELUGU LETTER NA" #x0C28) + ("TELUGU LETTER PA" #x0C2A) + ("TELUGU LETTER PHA" #x0C2B) + ("TELUGU LETTER BA" #x0C2C) + ("TELUGU LETTER BHA" #x0C2D) + ("TELUGU LETTER MA" #x0C2E) + ("TELUGU LETTER YA" #x0C2F) + ("TELUGU LETTER RA" #x0C30) + ("TELUGU LETTER RRA" #x0C31) + ("TELUGU LETTER LA" #x0C32) + ("TELUGU LETTER LLA" #x0C33) + ("TELUGU LETTER VA" #x0C35) + ("TELUGU LETTER SHA" #x0C36) + ("TELUGU LETTER SSA" #x0C37) + ("TELUGU LETTER SA" #x0C38) + ("TELUGU LETTER HA" #x0C39) + ("TELUGU VOWEL SIGN AA" #x0C3E) + ("TELUGU VOWEL SIGN I" #x0C3F) + ("TELUGU VOWEL SIGN II" #x0C40) + ("TELUGU VOWEL SIGN U" #x0C41) + ("TELUGU VOWEL SIGN UU" #x0C42) + ("TELUGU VOWEL SIGN VOCALIC R" #x0C43) + ("TELUGU VOWEL SIGN VOCALIC RR" #x0C44) + ("TELUGU VOWEL SIGN E" #x0C46) + ("TELUGU VOWEL SIGN EE" #x0C47) + ("TELUGU VOWEL SIGN AI" #x0C48) + ("TELUGU VOWEL SIGN O" #x0C4A) + ("TELUGU VOWEL SIGN OO" #x0C4B) + ("TELUGU VOWEL SIGN AU" #x0C4C) + ("TELUGU SIGN VIRAMA" #x0C4D) + ("TELUGU LENGTH MARK" #x0C55) + ("TELUGU AI LENGTH MARK" #x0C56) + ("TELUGU LETTER VOCALIC RR" #x0C60) + ("TELUGU LETTER VOCALIC LL" #x0C61) + ("TELUGU DIGIT ZERO" #x0C66) + ("TELUGU DIGIT ONE" #x0C67) + ("TELUGU DIGIT TWO" #x0C68) + ("TELUGU DIGIT THREE" #x0C69) + ("TELUGU DIGIT FOUR" #x0C6A) + ("TELUGU DIGIT FIVE" #x0C6B) + ("TELUGU DIGIT SIX" #x0C6C) + ("TELUGU DIGIT SEVEN" #x0C6D) + ("TELUGU DIGIT EIGHT" #x0C6E) + ("TELUGU DIGIT NINE" #x0C6F) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/00C80-00CFF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,82 @@ +(nxml-define-char-name-set 'kannada + '(("KANNADA SIGN ANUSVARA" #x0C82) + ("KANNADA SIGN VISARGA" #x0C83) + ("KANNADA LETTER A" #x0C85) + ("KANNADA LETTER AA" #x0C86) + ("KANNADA LETTER I" #x0C87) + ("KANNADA LETTER II" #x0C88) + ("KANNADA LETTER U" #x0C89) + ("KANNADA LETTER UU" #x0C8A) + ("KANNADA LETTER VOCALIC R" #x0C8B) + ("KANNADA LETTER VOCALIC L" #x0C8C) + ("KANNADA LETTER E" #x0C8E) + ("KANNADA LETTER EE" #x0C8F) + ("KANNADA LETTER AI" #x0C90) + ("KANNADA LETTER O" #x0C92) + ("KANNADA LETTER OO" #x0C93) + ("KANNADA LETTER AU" #x0C94) + ("KANNADA LETTER KA" #x0C95) + ("KANNADA LETTER KHA" #x0C96) + ("KANNADA LETTER GA" #x0C97) + ("KANNADA LETTER GHA" #x0C98) + ("KANNADA LETTER NGA" #x0C99) + ("KANNADA LETTER CA" #x0C9A) + ("KANNADA LETTER CHA" #x0C9B) + ("KANNADA LETTER JA" #x0C9C) + ("KANNADA LETTER JHA" #x0C9D) + ("KANNADA LETTER NYA" #x0C9E) + ("KANNADA LETTER TTA" #x0C9F) + ("KANNADA LETTER TTHA" #x0CA0) + ("KANNADA LETTER DDA" #x0CA1) + ("KANNADA LETTER DDHA" #x0CA2) + ("KANNADA LETTER NNA" #x0CA3) + ("KANNADA LETTER TA" #x0CA4) + ("KANNADA LETTER THA" #x0CA5) + ("KANNADA LETTER DA" #x0CA6) + ("KANNADA LETTER DHA" #x0CA7) + ("KANNADA LETTER NA" #x0CA8) + ("KANNADA LETTER PA" #x0CAA) + ("KANNADA LETTER PHA" #x0CAB) + ("KANNADA LETTER BA" #x0CAC) + ("KANNADA LETTER BHA" #x0CAD) + ("KANNADA LETTER MA" #x0CAE) + ("KANNADA LETTER YA" #x0CAF) + ("KANNADA LETTER RA" #x0CB0) + ("KANNADA LETTER RRA" #x0CB1) + ("KANNADA LETTER LA" #x0CB2) + ("KANNADA LETTER LLA" #x0CB3) + ("KANNADA LETTER VA" #x0CB5) + ("KANNADA LETTER SHA" #x0CB6) + ("KANNADA LETTER SSA" #x0CB7) + ("KANNADA LETTER SA" #x0CB8) + ("KANNADA LETTER HA" #x0CB9) + ("KANNADA VOWEL SIGN AA" #x0CBE) + ("KANNADA VOWEL SIGN I" #x0CBF) + ("KANNADA VOWEL SIGN II" #x0CC0) + ("KANNADA VOWEL SIGN U" #x0CC1) + ("KANNADA VOWEL SIGN UU" #x0CC2) + ("KANNADA VOWEL SIGN VOCALIC R" #x0CC3) + ("KANNADA VOWEL SIGN VOCALIC RR" #x0CC4) + ("KANNADA VOWEL SIGN E" #x0CC6) + ("KANNADA VOWEL SIGN EE" #x0CC7) + ("KANNADA VOWEL SIGN AI" #x0CC8) + ("KANNADA VOWEL SIGN O" #x0CCA) + ("KANNADA VOWEL SIGN OO" #x0CCB) + ("KANNADA VOWEL SIGN AU" #x0CCC) + ("KANNADA SIGN VIRAMA" #x0CCD) + ("KANNADA LENGTH MARK" #x0CD5) + ("KANNADA AI LENGTH MARK" #x0CD6) + ("KANNADA LETTER FA" #x0CDE) + ("KANNADA LETTER VOCALIC RR" #x0CE0) + ("KANNADA LETTER VOCALIC LL" #x0CE1) + ("KANNADA DIGIT ZERO" #x0CE6) + ("KANNADA DIGIT ONE" #x0CE7) + ("KANNADA DIGIT TWO" #x0CE8) + ("KANNADA DIGIT THREE" #x0CE9) + ("KANNADA DIGIT FOUR" #x0CEA) + ("KANNADA DIGIT FIVE" #x0CEB) + ("KANNADA DIGIT SIX" #x0CEC) + ("KANNADA DIGIT SEVEN" #x0CED) + ("KANNADA DIGIT EIGHT" #x0CEE) + ("KANNADA DIGIT NINE" #x0CEF) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/00D00-00D7F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,80 @@ +(nxml-define-char-name-set 'malayalam + '(("MALAYALAM SIGN ANUSVARA" #x0D02) + ("MALAYALAM SIGN VISARGA" #x0D03) + ("MALAYALAM LETTER A" #x0D05) + ("MALAYALAM LETTER AA" #x0D06) + ("MALAYALAM LETTER I" #x0D07) + ("MALAYALAM LETTER II" #x0D08) + ("MALAYALAM LETTER U" #x0D09) + ("MALAYALAM LETTER UU" #x0D0A) + ("MALAYALAM LETTER VOCALIC R" #x0D0B) + ("MALAYALAM LETTER VOCALIC L" #x0D0C) + ("MALAYALAM LETTER E" #x0D0E) + ("MALAYALAM LETTER EE" #x0D0F) + ("MALAYALAM LETTER AI" #x0D10) + ("MALAYALAM LETTER O" #x0D12) + ("MALAYALAM LETTER OO" #x0D13) + ("MALAYALAM LETTER AU" #x0D14) + ("MALAYALAM LETTER KA" #x0D15) + ("MALAYALAM LETTER KHA" #x0D16) + ("MALAYALAM LETTER GA" #x0D17) + ("MALAYALAM LETTER GHA" #x0D18) + ("MALAYALAM LETTER NGA" #x0D19) + ("MALAYALAM LETTER CA" #x0D1A) + ("MALAYALAM LETTER CHA" #x0D1B) + ("MALAYALAM LETTER JA" #x0D1C) + ("MALAYALAM LETTER JHA" #x0D1D) + ("MALAYALAM LETTER NYA" #x0D1E) + ("MALAYALAM LETTER TTA" #x0D1F) + ("MALAYALAM LETTER TTHA" #x0D20) + ("MALAYALAM LETTER DDA" #x0D21) + ("MALAYALAM LETTER DDHA" #x0D22) + ("MALAYALAM LETTER NNA" #x0D23) + ("MALAYALAM LETTER TA" #x0D24) + ("MALAYALAM LETTER THA" #x0D25) + ("MALAYALAM LETTER DA" #x0D26) + ("MALAYALAM LETTER DHA" #x0D27) + ("MALAYALAM LETTER NA" #x0D28) + ("MALAYALAM LETTER PA" #x0D2A) + ("MALAYALAM LETTER PHA" #x0D2B) + ("MALAYALAM LETTER BA" #x0D2C) + ("MALAYALAM LETTER BHA" #x0D2D) + ("MALAYALAM LETTER MA" #x0D2E) + ("MALAYALAM LETTER YA" #x0D2F) + ("MALAYALAM LETTER RA" #x0D30) + ("MALAYALAM LETTER RRA" #x0D31) + ("MALAYALAM LETTER LA" #x0D32) + ("MALAYALAM LETTER LLA" #x0D33) + ("MALAYALAM LETTER LLLA" #x0D34) + ("MALAYALAM LETTER VA" #x0D35) + ("MALAYALAM LETTER SHA" #x0D36) + ("MALAYALAM LETTER SSA" #x0D37) + ("MALAYALAM LETTER SA" #x0D38) + ("MALAYALAM LETTER HA" #x0D39) + ("MALAYALAM VOWEL SIGN AA" #x0D3E) + ("MALAYALAM VOWEL SIGN I" #x0D3F) + ("MALAYALAM VOWEL SIGN II" #x0D40) + ("MALAYALAM VOWEL SIGN U" #x0D41) + ("MALAYALAM VOWEL SIGN UU" #x0D42) + ("MALAYALAM VOWEL SIGN VOCALIC R" #x0D43) + ("MALAYALAM VOWEL SIGN E" #x0D46) + ("MALAYALAM VOWEL SIGN EE" #x0D47) + ("MALAYALAM VOWEL SIGN AI" #x0D48) + ("MALAYALAM VOWEL SIGN O" #x0D4A) + ("MALAYALAM VOWEL SIGN OO" #x0D4B) + ("MALAYALAM VOWEL SIGN AU" #x0D4C) + ("MALAYALAM SIGN VIRAMA" #x0D4D) + ("MALAYALAM AU LENGTH MARK" #x0D57) + ("MALAYALAM LETTER VOCALIC RR" #x0D60) + ("MALAYALAM LETTER VOCALIC LL" #x0D61) + ("MALAYALAM DIGIT ZERO" #x0D66) + ("MALAYALAM DIGIT ONE" #x0D67) + ("MALAYALAM DIGIT TWO" #x0D68) + ("MALAYALAM DIGIT THREE" #x0D69) + ("MALAYALAM DIGIT FOUR" #x0D6A) + ("MALAYALAM DIGIT FIVE" #x0D6B) + ("MALAYALAM DIGIT SIX" #x0D6C) + ("MALAYALAM DIGIT SEVEN" #x0D6D) + ("MALAYALAM DIGIT EIGHT" #x0D6E) + ("MALAYALAM DIGIT NINE" #x0D6F) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/00D80-00DFF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,82 @@ +(nxml-define-char-name-set 'sinhala + '(("SINHALA SIGN ANUSVARAYA" #x0D82) + ("SINHALA SIGN VISARGAYA" #x0D83) + ("SINHALA LETTER AYANNA" #x0D85) + ("SINHALA LETTER AAYANNA" #x0D86) + ("SINHALA LETTER AEYANNA" #x0D87) + ("SINHALA LETTER AEEYANNA" #x0D88) + ("SINHALA LETTER IYANNA" #x0D89) + ("SINHALA LETTER IIYANNA" #x0D8A) + ("SINHALA LETTER UYANNA" #x0D8B) + ("SINHALA LETTER UUYANNA" #x0D8C) + ("SINHALA LETTER IRUYANNA" #x0D8D) + ("SINHALA LETTER IRUUYANNA" #x0D8E) + ("SINHALA LETTER ILUYANNA" #x0D8F) + ("SINHALA LETTER ILUUYANNA" #x0D90) + ("SINHALA LETTER EYANNA" #x0D91) + ("SINHALA LETTER EEYANNA" #x0D92) + ("SINHALA LETTER AIYANNA" #x0D93) + ("SINHALA LETTER OYANNA" #x0D94) + ("SINHALA LETTER OOYANNA" #x0D95) + ("SINHALA LETTER AUYANNA" #x0D96) + ("SINHALA LETTER ALPAPRAANA KAYANNA" #x0D9A) + ("SINHALA LETTER MAHAAPRAANA KAYANNA" #x0D9B) + ("SINHALA LETTER ALPAPRAANA GAYANNA" #x0D9C) + ("SINHALA LETTER MAHAAPRAANA GAYANNA" #x0D9D) + ("SINHALA LETTER KANTAJA NAASIKYAYA" #x0D9E) + ("SINHALA LETTER SANYAKA GAYANNA" #x0D9F) + ("SINHALA LETTER ALPAPRAANA CAYANNA" #x0DA0) + ("SINHALA LETTER MAHAAPRAANA CAYANNA" #x0DA1) + ("SINHALA LETTER ALPAPRAANA JAYANNA" #x0DA2) + ("SINHALA LETTER MAHAAPRAANA JAYANNA" #x0DA3) + ("SINHALA LETTER TAALUJA NAASIKYAYA" #x0DA4) + ("SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA" #x0DA5) + ("SINHALA LETTER SANYAKA JAYANNA" #x0DA6) + ("SINHALA LETTER ALPAPRAANA TTAYANNA" #x0DA7) + ("SINHALA LETTER MAHAAPRAANA TTAYANNA" #x0DA8) + ("SINHALA LETTER ALPAPRAANA DDAYANNA" #x0DA9) + ("SINHALA LETTER MAHAAPRAANA DDAYANNA" #x0DAA) + ("SINHALA LETTER MUURDHAJA NAYANNA" #x0DAB) + ("SINHALA LETTER SANYAKA DDAYANNA" #x0DAC) + ("SINHALA LETTER ALPAPRAANA TAYANNA" #x0DAD) + ("SINHALA LETTER MAHAAPRAANA TAYANNA" #x0DAE) + ("SINHALA LETTER ALPAPRAANA DAYANNA" #x0DAF) + ("SINHALA LETTER MAHAAPRAANA DAYANNA" #x0DB0) + ("SINHALA LETTER DANTAJA NAYANNA" #x0DB1) + ("SINHALA LETTER SANYAKA DAYANNA" #x0DB3) + ("SINHALA LETTER ALPAPRAANA PAYANNA" #x0DB4) + ("SINHALA LETTER MAHAAPRAANA PAYANNA" #x0DB5) + ("SINHALA LETTER ALPAPRAANA BAYANNA" #x0DB6) + ("SINHALA LETTER MAHAAPRAANA BAYANNA" #x0DB7) + ("SINHALA LETTER MAYANNA" #x0DB8) + ("SINHALA LETTER AMBA BAYANNA" #x0DB9) + ("SINHALA LETTER YAYANNA" #x0DBA) + ("SINHALA LETTER RAYANNA" #x0DBB) + ("SINHALA LETTER DANTAJA LAYANNA" #x0DBD) + ("SINHALA LETTER VAYANNA" #x0DC0) + ("SINHALA LETTER TAALUJA SAYANNA" #x0DC1) + ("SINHALA LETTER MUURDHAJA SAYANNA" #x0DC2) + ("SINHALA LETTER DANTAJA SAYANNA" #x0DC3) + ("SINHALA LETTER HAYANNA" #x0DC4) + ("SINHALA LETTER MUURDHAJA LAYANNA" #x0DC5) + ("SINHALA LETTER FAYANNA" #x0DC6) + ("SINHALA SIGN AL-LAKUNA" #x0DCA) + ("SINHALA VOWEL SIGN AELA-PILLA" #x0DCF) + ("SINHALA VOWEL SIGN KETTI AEDA-PILLA" #x0DD0) + ("SINHALA VOWEL SIGN DIGA AEDA-PILLA" #x0DD1) + ("SINHALA VOWEL SIGN KETTI IS-PILLA" #x0DD2) + ("SINHALA VOWEL SIGN DIGA IS-PILLA" #x0DD3) + ("SINHALA VOWEL SIGN KETTI PAA-PILLA" #x0DD4) + ("SINHALA VOWEL SIGN DIGA PAA-PILLA" #x0DD6) + ("SINHALA VOWEL SIGN GAETTA-PILLA" #x0DD8) + ("SINHALA VOWEL SIGN KOMBUVA" #x0DD9) + ("SINHALA VOWEL SIGN DIGA KOMBUVA" #x0DDA) + ("SINHALA VOWEL SIGN KOMBU DEKA" #x0DDB) + ("SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA" #x0DDC) + ("SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA" #x0DDD) + ("SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA" #x0DDE) + ("SINHALA VOWEL SIGN GAYANUKITTA" #x0DDF) + ("SINHALA VOWEL SIGN DIGA GAETTA-PILLA" #x0DF2) + ("SINHALA VOWEL SIGN DIGA GAYANUKITTA" #x0DF3) + ("SINHALA PUNCTUATION KUNDDALIYA" #x0DF4) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/00E00-00E7F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,89 @@ +(nxml-define-char-name-set 'thai + '(("THAI CHARACTER KO KAI" #x0E01) + ("THAI CHARACTER KHO KHAI" #x0E02) + ("THAI CHARACTER KHO KHUAT" #x0E03) + ("THAI CHARACTER KHO KHWAI" #x0E04) + ("THAI CHARACTER KHO KHON" #x0E05) + ("THAI CHARACTER KHO RAKHANG" #x0E06) + ("THAI CHARACTER NGO NGU" #x0E07) + ("THAI CHARACTER CHO CHAN" #x0E08) + ("THAI CHARACTER CHO CHING" #x0E09) + ("THAI CHARACTER CHO CHANG" #x0E0A) + ("THAI CHARACTER SO SO" #x0E0B) + ("THAI CHARACTER CHO CHOE" #x0E0C) + ("THAI CHARACTER YO YING" #x0E0D) + ("THAI CHARACTER DO CHADA" #x0E0E) + ("THAI CHARACTER TO PATAK" #x0E0F) + ("THAI CHARACTER THO THAN" #x0E10) + ("THAI CHARACTER THO NANGMONTHO" #x0E11) + ("THAI CHARACTER THO PHUTHAO" #x0E12) + ("THAI CHARACTER NO NEN" #x0E13) + ("THAI CHARACTER DO DEK" #x0E14) + ("THAI CHARACTER TO TAO" #x0E15) + ("THAI CHARACTER THO THUNG" #x0E16) + ("THAI CHARACTER THO THAHAN" #x0E17) + ("THAI CHARACTER THO THONG" #x0E18) + ("THAI CHARACTER NO NU" #x0E19) + ("THAI CHARACTER BO BAIMAI" #x0E1A) + ("THAI CHARACTER PO PLA" #x0E1B) + ("THAI CHARACTER PHO PHUNG" #x0E1C) + ("THAI CHARACTER FO FA" #x0E1D) + ("THAI CHARACTER PHO PHAN" #x0E1E) + ("THAI CHARACTER FO FAN" #x0E1F) + ("THAI CHARACTER PHO SAMPHAO" #x0E20) + ("THAI CHARACTER MO MA" #x0E21) + ("THAI CHARACTER YO YAK" #x0E22) + ("THAI CHARACTER RO RUA" #x0E23) + ("THAI CHARACTER RU" #x0E24) + ("THAI CHARACTER LO LING" #x0E25) + ("THAI CHARACTER LU" #x0E26) + ("THAI CHARACTER WO WAEN" #x0E27) + ("THAI CHARACTER SO SALA" #x0E28) + ("THAI CHARACTER SO RUSI" #x0E29) + ("THAI CHARACTER SO SUA" #x0E2A) + ("THAI CHARACTER HO HIP" #x0E2B) + ("THAI CHARACTER LO CHULA" #x0E2C) + ("THAI CHARACTER O ANG" #x0E2D) + ("THAI CHARACTER HO NOKHUK" #x0E2E) + ("THAI CHARACTER PAIYANNOI" #x0E2F) + ("THAI CHARACTER SARA A" #x0E30) + ("THAI CHARACTER MAI HAN-AKAT" #x0E31) + ("THAI CHARACTER SARA AA" #x0E32) + ("THAI CHARACTER SARA AM" #x0E33) + ("THAI CHARACTER SARA I" #x0E34) + ("THAI CHARACTER SARA II" #x0E35) + ("THAI CHARACTER SARA UE" #x0E36) + ("THAI CHARACTER SARA UEE" #x0E37) + ("THAI CHARACTER SARA U" #x0E38) + ("THAI CHARACTER SARA UU" #x0E39) + ("THAI CHARACTER PHINTHU" #x0E3A) + ("THAI CURRENCY SYMBOL BAHT" #x0E3F) + ("THAI CHARACTER SARA E" #x0E40) + ("THAI CHARACTER SARA AE" #x0E41) + ("THAI CHARACTER SARA O" #x0E42) + ("THAI CHARACTER SARA AI MAIMUAN" #x0E43) + ("THAI CHARACTER SARA AI MAIMALAI" #x0E44) + ("THAI CHARACTER LAKKHANGYAO" #x0E45) + ("THAI CHARACTER MAIYAMOK" #x0E46) + ("THAI CHARACTER MAITAIKHU" #x0E47) + ("THAI CHARACTER MAI EK" #x0E48) + ("THAI CHARACTER MAI THO" #x0E49) + ("THAI CHARACTER MAI TRI" #x0E4A) + ("THAI CHARACTER MAI CHATTAWA" #x0E4B) + ("THAI CHARACTER THANTHAKHAT" #x0E4C) + ("THAI CHARACTER NIKHAHIT" #x0E4D) + ("THAI CHARACTER YAMAKKAN" #x0E4E) + ("THAI CHARACTER FONGMAN" #x0E4F) + ("THAI DIGIT ZERO" #x0E50) + ("THAI DIGIT ONE" #x0E51) + ("THAI DIGIT TWO" #x0E52) + ("THAI DIGIT THREE" #x0E53) + ("THAI DIGIT FOUR" #x0E54) + ("THAI DIGIT FIVE" #x0E55) + ("THAI DIGIT SIX" #x0E56) + ("THAI DIGIT SEVEN" #x0E57) + ("THAI DIGIT EIGHT" #x0E58) + ("THAI DIGIT NINE" #x0E59) + ("THAI CHARACTER ANGKHANKHU" #x0E5A) + ("THAI CHARACTER KHOMUT" #x0E5B) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/00E80-00EFF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,67 @@ +(nxml-define-char-name-set 'lao + '(("LAO LETTER KO" #x0E81) + ("LAO LETTER KHO SUNG" #x0E82) + ("LAO LETTER KHO TAM" #x0E84) + ("LAO LETTER NGO" #x0E87) + ("LAO LETTER CO" #x0E88) + ("LAO LETTER SO TAM" #x0E8A) + ("LAO LETTER NYO" #x0E8D) + ("LAO LETTER DO" #x0E94) + ("LAO LETTER TO" #x0E95) + ("LAO LETTER THO SUNG" #x0E96) + ("LAO LETTER THO TAM" #x0E97) + ("LAO LETTER NO" #x0E99) + ("LAO LETTER BO" #x0E9A) + ("LAO LETTER PO" #x0E9B) + ("LAO LETTER PHO SUNG" #x0E9C) + ("LAO LETTER FO TAM" #x0E9D) + ("LAO LETTER PHO TAM" #x0E9E) + ("LAO LETTER FO SUNG" #x0E9F) + ("LAO LETTER MO" #x0EA1) + ("LAO LETTER YO" #x0EA2) + ("LAO LETTER LO LING" #x0EA3) + ("LAO LETTER LO LOOT" #x0EA5) + ("LAO LETTER WO" #x0EA7) + ("LAO LETTER SO SUNG" #x0EAA) + ("LAO LETTER HO SUNG" #x0EAB) + ("LAO LETTER O" #x0EAD) + ("LAO LETTER HO TAM" #x0EAE) + ("LAO ELLIPSIS" #x0EAF) + ("LAO VOWEL SIGN A" #x0EB0) + ("LAO VOWEL SIGN MAI KAN" #x0EB1) + ("LAO VOWEL SIGN AA" #x0EB2) + ("LAO VOWEL SIGN AM" #x0EB3) + ("LAO VOWEL SIGN I" #x0EB4) + ("LAO VOWEL SIGN II" #x0EB5) + ("LAO VOWEL SIGN Y" #x0EB6) + ("LAO VOWEL SIGN YY" #x0EB7) + ("LAO VOWEL SIGN U" #x0EB8) + ("LAO VOWEL SIGN UU" #x0EB9) + ("LAO VOWEL SIGN MAI KON" #x0EBB) + ("LAO SEMIVOWEL SIGN LO" #x0EBC) + ("LAO SEMIVOWEL SIGN NYO" #x0EBD) + ("LAO VOWEL SIGN E" #x0EC0) + ("LAO VOWEL SIGN EI" #x0EC1) + ("LAO VOWEL SIGN O" #x0EC2) + ("LAO VOWEL SIGN AY" #x0EC3) + ("LAO VOWEL SIGN AI" #x0EC4) + ("LAO KO LA" #x0EC6) + ("LAO TONE MAI EK" #x0EC8) + ("LAO TONE MAI THO" #x0EC9) + ("LAO TONE MAI TI" #x0ECA) + ("LAO TONE MAI CATAWA" #x0ECB) + ("LAO CANCELLATION MARK" #x0ECC) + ("LAO NIGGAHITA" #x0ECD) + ("LAO DIGIT ZERO" #x0ED0) + ("LAO DIGIT ONE" #x0ED1) + ("LAO DIGIT TWO" #x0ED2) + ("LAO DIGIT THREE" #x0ED3) + ("LAO DIGIT FOUR" #x0ED4) + ("LAO DIGIT FIVE" #x0ED5) + ("LAO DIGIT SIX" #x0ED6) + ("LAO DIGIT SEVEN" #x0ED7) + ("LAO DIGIT EIGHT" #x0ED8) + ("LAO DIGIT NINE" #x0ED9) + ("LAO HO NO" #x0EDC) + ("LAO HO MO" #x0EDD) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/00F00-00FFF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,195 @@ +(nxml-define-char-name-set 'tibetan + '(("TIBETAN SYLLABLE OM" #x0F00) + ("TIBETAN MARK GTER YIG MGO TRUNCATED A" #x0F01) + ("TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA" #x0F02) + ("TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA" #x0F03) + ("TIBETAN MARK INITIAL YIG MGO MDUN MA" #x0F04) + ("TIBETAN MARK CLOSING YIG MGO SGAB MA" #x0F05) + ("TIBETAN MARK CARET YIG MGO PHUR SHAD MA" #x0F06) + ("TIBETAN MARK YIG MGO TSHEG SHAD MA" #x0F07) + ("TIBETAN MARK SBRUL SHAD" #x0F08) + ("TIBETAN MARK BSKUR YIG MGO" #x0F09) + ("TIBETAN MARK BKA- SHOG YIG MGO" #x0F0A) + ("TIBETAN MARK INTERSYLLABIC TSHEG" #x0F0B) + ("TIBETAN MARK DELIMITER TSHEG BSTAR" #x0F0C) + ("TIBETAN MARK SHAD" #x0F0D) + ("TIBETAN MARK NYIS SHAD" #x0F0E) + ("TIBETAN MARK TSHEG SHAD" #x0F0F) + ("TIBETAN MARK NYIS TSHEG SHAD" #x0F10) + ("TIBETAN MARK RIN CHEN SPUNGS SHAD" #x0F11) + ("TIBETAN MARK RGYA GRAM SHAD" #x0F12) + ("TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN" #x0F13) + ("TIBETAN MARK GTER TSHEG" #x0F14) + ("TIBETAN LOGOTYPE SIGN CHAD RTAGS" #x0F15) + ("TIBETAN LOGOTYPE SIGN LHAG RTAGS" #x0F16) + ("TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS" #x0F17) + ("TIBETAN ASTROLOGICAL SIGN -KHYUD PA" #x0F18) + ("TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS" #x0F19) + ("TIBETAN SIGN RDEL DKAR GCIG" #x0F1A) + ("TIBETAN SIGN RDEL DKAR GNYIS" #x0F1B) + ("TIBETAN SIGN RDEL DKAR GSUM" #x0F1C) + ("TIBETAN SIGN RDEL NAG GCIG" #x0F1D) + ("TIBETAN SIGN RDEL NAG GNYIS" #x0F1E) + ("TIBETAN SIGN RDEL DKAR RDEL NAG" #x0F1F) + ("TIBETAN DIGIT ZERO" #x0F20) + ("TIBETAN DIGIT ONE" #x0F21) + ("TIBETAN DIGIT TWO" #x0F22) + ("TIBETAN DIGIT THREE" #x0F23) + ("TIBETAN DIGIT FOUR" #x0F24) + ("TIBETAN DIGIT FIVE" #x0F25) + ("TIBETAN DIGIT SIX" #x0F26) + ("TIBETAN DIGIT SEVEN" #x0F27) + ("TIBETAN DIGIT EIGHT" #x0F28) + ("TIBETAN DIGIT NINE" #x0F29) + ("TIBETAN DIGIT HALF ONE" #x0F2A) + ("TIBETAN DIGIT HALF TWO" #x0F2B) + ("TIBETAN DIGIT HALF THREE" #x0F2C) + ("TIBETAN DIGIT HALF FOUR" #x0F2D) + ("TIBETAN DIGIT HALF FIVE" #x0F2E) + ("TIBETAN DIGIT HALF SIX" #x0F2F) + ("TIBETAN DIGIT HALF SEVEN" #x0F30) + ("TIBETAN DIGIT HALF EIGHT" #x0F31) + ("TIBETAN DIGIT HALF NINE" #x0F32) + ("TIBETAN DIGIT HALF ZERO" #x0F33) + ("TIBETAN MARK BSDUS RTAGS" #x0F34) + ("TIBETAN MARK NGAS BZUNG NYI ZLA" #x0F35) + ("TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN" #x0F36) + ("TIBETAN MARK NGAS BZUNG SGOR RTAGS" #x0F37) + ("TIBETAN MARK CHE MGO" #x0F38) + ("TIBETAN MARK TSA -PHRU" #x0F39) + ("TIBETAN MARK GUG RTAGS GYON" #x0F3A) + ("TIBETAN MARK GUG RTAGS GYAS" #x0F3B) + ("TIBETAN MARK ANG KHANG GYON" #x0F3C) + ("TIBETAN MARK ANG KHANG GYAS" #x0F3D) + ("TIBETAN SIGN YAR TSHES" #x0F3E) + ("TIBETAN SIGN MAR TSHES" #x0F3F) + ("TIBETAN LETTER KA" #x0F40) + ("TIBETAN LETTER KHA" #x0F41) + ("TIBETAN LETTER GA" #x0F42) + ("TIBETAN LETTER GHA" #x0F43) + ("TIBETAN LETTER NGA" #x0F44) + ("TIBETAN LETTER CA" #x0F45) + ("TIBETAN LETTER CHA" #x0F46) + ("TIBETAN LETTER JA" #x0F47) + ("TIBETAN LETTER NYA" #x0F49) + ("TIBETAN LETTER TTA" #x0F4A) + ("TIBETAN LETTER TTHA" #x0F4B) + ("TIBETAN LETTER DDA" #x0F4C) + ("TIBETAN LETTER DDHA" #x0F4D) + ("TIBETAN LETTER NNA" #x0F4E) + ("TIBETAN LETTER TA" #x0F4F) + ("TIBETAN LETTER THA" #x0F50) + ("TIBETAN LETTER DA" #x0F51) + ("TIBETAN LETTER DHA" #x0F52) + ("TIBETAN LETTER NA" #x0F53) + ("TIBETAN LETTER PA" #x0F54) + ("TIBETAN LETTER PHA" #x0F55) + ("TIBETAN LETTER BA" #x0F56) + ("TIBETAN LETTER BHA" #x0F57) + ("TIBETAN LETTER MA" #x0F58) + ("TIBETAN LETTER TSA" #x0F59) + ("TIBETAN LETTER TSHA" #x0F5A) + ("TIBETAN LETTER DZA" #x0F5B) + ("TIBETAN LETTER DZHA" #x0F5C) + ("TIBETAN LETTER WA" #x0F5D) + ("TIBETAN LETTER ZHA" #x0F5E) + ("TIBETAN LETTER ZA" #x0F5F) + ("TIBETAN LETTER -A" #x0F60) + ("TIBETAN LETTER YA" #x0F61) + ("TIBETAN LETTER RA" #x0F62) + ("TIBETAN LETTER LA" #x0F63) + ("TIBETAN LETTER SHA" #x0F64) + ("TIBETAN LETTER SSA" #x0F65) + ("TIBETAN LETTER SA" #x0F66) + ("TIBETAN LETTER HA" #x0F67) + ("TIBETAN LETTER A" #x0F68) + ("TIBETAN LETTER KSSA" #x0F69) + ("TIBETAN LETTER FIXED-FORM RA" #x0F6A) + ("TIBETAN VOWEL SIGN AA" #x0F71) + ("TIBETAN VOWEL SIGN I" #x0F72) + ("TIBETAN VOWEL SIGN II" #x0F73) + ("TIBETAN VOWEL SIGN U" #x0F74) + ("TIBETAN VOWEL SIGN UU" #x0F75) + ("TIBETAN VOWEL SIGN VOCALIC R" #x0F76) + ("TIBETAN VOWEL SIGN VOCALIC RR" #x0F77) + ("TIBETAN VOWEL SIGN VOCALIC L" #x0F78) + ("TIBETAN VOWEL SIGN VOCALIC LL" #x0F79) + ("TIBETAN VOWEL SIGN E" #x0F7A) + ("TIBETAN VOWEL SIGN EE" #x0F7B) + ("TIBETAN VOWEL SIGN O" #x0F7C) + ("TIBETAN VOWEL SIGN OO" #x0F7D) + ("TIBETAN SIGN RJES SU NGA RO" #x0F7E) + ("TIBETAN SIGN RNAM BCAD" #x0F7F) + ("TIBETAN VOWEL SIGN REVERSED I" #x0F80) + ("TIBETAN VOWEL SIGN REVERSED II" #x0F81) + ("TIBETAN SIGN NYI ZLA NAA DA" #x0F82) + ("TIBETAN SIGN SNA LDAN" #x0F83) + ("TIBETAN MARK HALANTA" #x0F84) + ("TIBETAN MARK PALUTA" #x0F85) + ("TIBETAN SIGN LCI RTAGS" #x0F86) + ("TIBETAN SIGN YANG RTAGS" #x0F87) + ("TIBETAN SIGN LCE TSA CAN" #x0F88) + ("TIBETAN SIGN MCHU CAN" #x0F89) + ("TIBETAN SIGN GRU CAN RGYINGS" #x0F8A) + ("TIBETAN SIGN GRU MED RGYINGS" #x0F8B) + ("TIBETAN SUBJOINED LETTER KA" #x0F90) + ("TIBETAN SUBJOINED LETTER KHA" #x0F91) + ("TIBETAN SUBJOINED LETTER GA" #x0F92) + ("TIBETAN SUBJOINED LETTER GHA" #x0F93) + ("TIBETAN SUBJOINED LETTER NGA" #x0F94) + ("TIBETAN SUBJOINED LETTER CA" #x0F95) + ("TIBETAN SUBJOINED LETTER CHA" #x0F96) + ("TIBETAN SUBJOINED LETTER JA" #x0F97) + ("TIBETAN SUBJOINED LETTER NYA" #x0F99) + ("TIBETAN SUBJOINED LETTER TTA" #x0F9A) + ("TIBETAN SUBJOINED LETTER TTHA" #x0F9B) + ("TIBETAN SUBJOINED LETTER DDA" #x0F9C) + ("TIBETAN SUBJOINED LETTER DDHA" #x0F9D) + ("TIBETAN SUBJOINED LETTER NNA" #x0F9E) + ("TIBETAN SUBJOINED LETTER TA" #x0F9F) + ("TIBETAN SUBJOINED LETTER THA" #x0FA0) + ("TIBETAN SUBJOINED LETTER DA" #x0FA1) + ("TIBETAN SUBJOINED LETTER DHA" #x0FA2) + ("TIBETAN SUBJOINED LETTER NA" #x0FA3) + ("TIBETAN SUBJOINED LETTER PA" #x0FA4) + ("TIBETAN SUBJOINED LETTER PHA" #x0FA5) + ("TIBETAN SUBJOINED LETTER BA" #x0FA6) + ("TIBETAN SUBJOINED LETTER BHA" #x0FA7) + ("TIBETAN SUBJOINED LETTER MA" #x0FA8) + ("TIBETAN SUBJOINED LETTER TSA" #x0FA9) + ("TIBETAN SUBJOINED LETTER TSHA" #x0FAA) + ("TIBETAN SUBJOINED LETTER DZA" #x0FAB) + ("TIBETAN SUBJOINED LETTER DZHA" #x0FAC) + ("TIBETAN SUBJOINED LETTER WA" #x0FAD) + ("TIBETAN SUBJOINED LETTER ZHA" #x0FAE) + ("TIBETAN SUBJOINED LETTER ZA" #x0FAF) + ("TIBETAN SUBJOINED LETTER -A" #x0FB0) + ("TIBETAN SUBJOINED LETTER YA" #x0FB1) + ("TIBETAN SUBJOINED LETTER RA" #x0FB2) + ("TIBETAN SUBJOINED LETTER LA" #x0FB3) + ("TIBETAN SUBJOINED LETTER SHA" #x0FB4) + ("TIBETAN SUBJOINED LETTER SSA" #x0FB5) + ("TIBETAN SUBJOINED LETTER SA" #x0FB6) + ("TIBETAN SUBJOINED LETTER HA" #x0FB7) + ("TIBETAN SUBJOINED LETTER A" #x0FB8) + ("TIBETAN SUBJOINED LETTER KSSA" #x0FB9) + ("TIBETAN SUBJOINED LETTER FIXED-FORM WA" #x0FBA) + ("TIBETAN SUBJOINED LETTER FIXED-FORM YA" #x0FBB) + ("TIBETAN SUBJOINED LETTER FIXED-FORM RA" #x0FBC) + ("TIBETAN KU RU KHA" #x0FBE) + ("TIBETAN KU RU KHA BZHI MIG CAN" #x0FBF) + ("TIBETAN CANTILLATION SIGN HEAVY BEAT" #x0FC0) + ("TIBETAN CANTILLATION SIGN LIGHT BEAT" #x0FC1) + ("TIBETAN CANTILLATION SIGN CANG TE-U" #x0FC2) + ("TIBETAN CANTILLATION SIGN SBUB -CHAL" #x0FC3) + ("TIBETAN SYMBOL DRIL BU" #x0FC4) + ("TIBETAN SYMBOL RDO RJE" #x0FC5) + ("TIBETAN SYMBOL PADMA GDAN" #x0FC6) + ("TIBETAN SYMBOL RDO RJE RGYA GRAM" #x0FC7) + ("TIBETAN SYMBOL PHUR PA" #x0FC8) + ("TIBETAN SYMBOL NOR BU" #x0FC9) + ("TIBETAN SYMBOL NOR BU NYIS -KHYIL" #x0FCA) + ("TIBETAN SYMBOL NOR BU GSUM -KHYIL" #x0FCB) + ("TIBETAN SYMBOL NOR BU BZHI -KHYIL" #x0FCC) + ("TIBETAN SIGN RDEL NAG GSUM" #x0FCF) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/01000-0109F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,80 @@ +(nxml-define-char-name-set 'myanmar + '(("MYANMAR LETTER KA" #x1000) + ("MYANMAR LETTER KHA" #x1001) + ("MYANMAR LETTER GA" #x1002) + ("MYANMAR LETTER GHA" #x1003) + ("MYANMAR LETTER NGA" #x1004) + ("MYANMAR LETTER CA" #x1005) + ("MYANMAR LETTER CHA" #x1006) + ("MYANMAR LETTER JA" #x1007) + ("MYANMAR LETTER JHA" #x1008) + ("MYANMAR LETTER NYA" #x1009) + ("MYANMAR LETTER NNYA" #x100A) + ("MYANMAR LETTER TTA" #x100B) + ("MYANMAR LETTER TTHA" #x100C) + ("MYANMAR LETTER DDA" #x100D) + ("MYANMAR LETTER DDHA" #x100E) + ("MYANMAR LETTER NNA" #x100F) + ("MYANMAR LETTER TA" #x1010) + ("MYANMAR LETTER THA" #x1011) + ("MYANMAR LETTER DA" #x1012) + ("MYANMAR LETTER DHA" #x1013) + ("MYANMAR LETTER NA" #x1014) + ("MYANMAR LETTER PA" #x1015) + ("MYANMAR LETTER PHA" #x1016) + ("MYANMAR LETTER BA" #x1017) + ("MYANMAR LETTER BHA" #x1018) + ("MYANMAR LETTER MA" #x1019) + ("MYANMAR LETTER YA" #x101A) + ("MYANMAR LETTER RA" #x101B) + ("MYANMAR LETTER LA" #x101C) + ("MYANMAR LETTER WA" #x101D) + ("MYANMAR LETTER SA" #x101E) + ("MYANMAR LETTER HA" #x101F) + ("MYANMAR LETTER LLA" #x1020) + ("MYANMAR LETTER A" #x1021) + ("MYANMAR LETTER I" #x1023) + ("MYANMAR LETTER II" #x1024) + ("MYANMAR LETTER U" #x1025) + ("MYANMAR LETTER UU" #x1026) + ("MYANMAR LETTER E" #x1027) + ("MYANMAR LETTER O" #x1029) + ("MYANMAR LETTER AU" #x102A) + ("MYANMAR VOWEL SIGN AA" #x102C) + ("MYANMAR VOWEL SIGN I" #x102D) + ("MYANMAR VOWEL SIGN II" #x102E) + ("MYANMAR VOWEL SIGN U" #x102F) + ("MYANMAR VOWEL SIGN UU" #x1030) + ("MYANMAR VOWEL SIGN E" #x1031) + ("MYANMAR VOWEL SIGN AI" #x1032) + ("MYANMAR SIGN ANUSVARA" #x1036) + ("MYANMAR SIGN DOT BELOW" #x1037) + ("MYANMAR SIGN VISARGA" #x1038) + ("MYANMAR SIGN VIRAMA" #x1039) + ("MYANMAR DIGIT ZERO" #x1040) + ("MYANMAR DIGIT ONE" #x1041) + ("MYANMAR DIGIT TWO" #x1042) + ("MYANMAR DIGIT THREE" #x1043) + ("MYANMAR DIGIT FOUR" #x1044) + ("MYANMAR DIGIT FIVE" #x1045) + ("MYANMAR DIGIT SIX" #x1046) + ("MYANMAR DIGIT SEVEN" #x1047) + ("MYANMAR DIGIT EIGHT" #x1048) + ("MYANMAR DIGIT NINE" #x1049) + ("MYANMAR SIGN LITTLE SECTION" #x104A) + ("MYANMAR SIGN SECTION" #x104B) + ("MYANMAR SYMBOL LOCATIVE" #x104C) + ("MYANMAR SYMBOL COMPLETED" #x104D) + ("MYANMAR SYMBOL AFOREMENTIONED" #x104E) + ("MYANMAR SYMBOL GENITIVE" #x104F) + ("MYANMAR LETTER SHA" #x1050) + ("MYANMAR LETTER SSA" #x1051) + ("MYANMAR LETTER VOCALIC R" #x1052) + ("MYANMAR LETTER VOCALIC RR" #x1053) + ("MYANMAR LETTER VOCALIC L" #x1054) + ("MYANMAR LETTER VOCALIC LL" #x1055) + ("MYANMAR VOWEL SIGN VOCALIC R" #x1056) + ("MYANMAR VOWEL SIGN VOCALIC RR" #x1057) + ("MYANMAR VOWEL SIGN VOCALIC L" #x1058) + ("MYANMAR VOWEL SIGN VOCALIC LL" #x1059) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/010A0-010FF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,82 @@ +(nxml-define-char-name-set 'georgian + '(("GEORGIAN CAPITAL LETTER AN" #x10A0) + ("GEORGIAN CAPITAL LETTER BAN" #x10A1) + ("GEORGIAN CAPITAL LETTER GAN" #x10A2) + ("GEORGIAN CAPITAL LETTER DON" #x10A3) + ("GEORGIAN CAPITAL LETTER EN" #x10A4) + ("GEORGIAN CAPITAL LETTER VIN" #x10A5) + ("GEORGIAN CAPITAL LETTER ZEN" #x10A6) + ("GEORGIAN CAPITAL LETTER TAN" #x10A7) + ("GEORGIAN CAPITAL LETTER IN" #x10A8) + ("GEORGIAN CAPITAL LETTER KAN" #x10A9) + ("GEORGIAN CAPITAL LETTER LAS" #x10AA) + ("GEORGIAN CAPITAL LETTER MAN" #x10AB) + ("GEORGIAN CAPITAL LETTER NAR" #x10AC) + ("GEORGIAN CAPITAL LETTER ON" #x10AD) + ("GEORGIAN CAPITAL LETTER PAR" #x10AE) + ("GEORGIAN CAPITAL LETTER ZHAR" #x10AF) + ("GEORGIAN CAPITAL LETTER RAE" #x10B0) + ("GEORGIAN CAPITAL LETTER SAN" #x10B1) + ("GEORGIAN CAPITAL LETTER TAR" #x10B2) + ("GEORGIAN CAPITAL LETTER UN" #x10B3) + ("GEORGIAN CAPITAL LETTER PHAR" #x10B4) + ("GEORGIAN CAPITAL LETTER KHAR" #x10B5) + ("GEORGIAN CAPITAL LETTER GHAN" #x10B6) + ("GEORGIAN CAPITAL LETTER QAR" #x10B7) + ("GEORGIAN CAPITAL LETTER SHIN" #x10B8) + ("GEORGIAN CAPITAL LETTER CHIN" #x10B9) + ("GEORGIAN CAPITAL LETTER CAN" #x10BA) + ("GEORGIAN CAPITAL LETTER JIL" #x10BB) + ("GEORGIAN CAPITAL LETTER CIL" #x10BC) + ("GEORGIAN CAPITAL LETTER CHAR" #x10BD) + ("GEORGIAN CAPITAL LETTER XAN" #x10BE) + ("GEORGIAN CAPITAL LETTER JHAN" #x10BF) + ("GEORGIAN CAPITAL LETTER HAE" #x10C0) + ("GEORGIAN CAPITAL LETTER HE" #x10C1) + ("GEORGIAN CAPITAL LETTER HIE" #x10C2) + ("GEORGIAN CAPITAL LETTER WE" #x10C3) + ("GEORGIAN CAPITAL LETTER HAR" #x10C4) + ("GEORGIAN CAPITAL LETTER HOE" #x10C5) + ("GEORGIAN LETTER AN" #x10D0) + ("GEORGIAN LETTER BAN" #x10D1) + ("GEORGIAN LETTER GAN" #x10D2) + ("GEORGIAN LETTER DON" #x10D3) + ("GEORGIAN LETTER EN" #x10D4) + ("GEORGIAN LETTER VIN" #x10D5) + ("GEORGIAN LETTER ZEN" #x10D6) + ("GEORGIAN LETTER TAN" #x10D7) + ("GEORGIAN LETTER IN" #x10D8) + ("GEORGIAN LETTER KAN" #x10D9) + ("GEORGIAN LETTER LAS" #x10DA) + ("GEORGIAN LETTER MAN" #x10DB) + ("GEORGIAN LETTER NAR" #x10DC) + ("GEORGIAN LETTER ON" #x10DD) + ("GEORGIAN LETTER PAR" #x10DE) + ("GEORGIAN LETTER ZHAR" #x10DF) + ("GEORGIAN LETTER RAE" #x10E0) + ("GEORGIAN LETTER SAN" #x10E1) + ("GEORGIAN LETTER TAR" #x10E2) + ("GEORGIAN LETTER UN" #x10E3) + ("GEORGIAN LETTER PHAR" #x10E4) + ("GEORGIAN LETTER KHAR" #x10E5) + ("GEORGIAN LETTER GHAN" #x10E6) + ("GEORGIAN LETTER QAR" #x10E7) + ("GEORGIAN LETTER SHIN" #x10E8) + ("GEORGIAN LETTER CHIN" #x10E9) + ("GEORGIAN LETTER CAN" #x10EA) + ("GEORGIAN LETTER JIL" #x10EB) + ("GEORGIAN LETTER CIL" #x10EC) + ("GEORGIAN LETTER CHAR" #x10ED) + ("GEORGIAN LETTER XAN" #x10EE) + ("GEORGIAN LETTER JHAN" #x10EF) + ("GEORGIAN LETTER HAE" #x10F0) + ("GEORGIAN LETTER HE" #x10F1) + ("GEORGIAN LETTER HIE" #x10F2) + ("GEORGIAN LETTER WE" #x10F3) + ("GEORGIAN LETTER HAR" #x10F4) + ("GEORGIAN LETTER HOE" #x10F5) + ("GEORGIAN LETTER FI" #x10F6) + ("GEORGIAN LETTER YN" #x10F7) + ("GEORGIAN LETTER ELIFI" #x10F8) + ("GEORGIAN PARAGRAPH SEPARATOR" #x10FB) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/01100-011FF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,242 @@ +(nxml-define-char-name-set 'hangul-jamo + '(("HANGUL CHOSEONG KIYEOK" #x1100) + ("HANGUL CHOSEONG SSANGKIYEOK" #x1101) + ("HANGUL CHOSEONG NIEUN" #x1102) + ("HANGUL CHOSEONG TIKEUT" #x1103) + ("HANGUL CHOSEONG SSANGTIKEUT" #x1104) + ("HANGUL CHOSEONG RIEUL" #x1105) + ("HANGUL CHOSEONG MIEUM" #x1106) + ("HANGUL CHOSEONG PIEUP" #x1107) + ("HANGUL CHOSEONG SSANGPIEUP" #x1108) + ("HANGUL CHOSEONG SIOS" #x1109) + ("HANGUL CHOSEONG SSANGSIOS" #x110A) + ("HANGUL CHOSEONG IEUNG" #x110B) + ("HANGUL CHOSEONG CIEUC" #x110C) + ("HANGUL CHOSEONG SSANGCIEUC" #x110D) + ("HANGUL CHOSEONG CHIEUCH" #x110E) + ("HANGUL CHOSEONG KHIEUKH" #x110F) + ("HANGUL CHOSEONG THIEUTH" #x1110) + ("HANGUL CHOSEONG PHIEUPH" #x1111) + ("HANGUL CHOSEONG HIEUH" #x1112) + ("HANGUL CHOSEONG NIEUN-KIYEOK" #x1113) + ("HANGUL CHOSEONG SSANGNIEUN" #x1114) + ("HANGUL CHOSEONG NIEUN-TIKEUT" #x1115) + ("HANGUL CHOSEONG NIEUN-PIEUP" #x1116) + ("HANGUL CHOSEONG TIKEUT-KIYEOK" #x1117) + ("HANGUL CHOSEONG RIEUL-NIEUN" #x1118) + ("HANGUL CHOSEONG SSANGRIEUL" #x1119) + ("HANGUL CHOSEONG RIEUL-HIEUH" #x111A) + ("HANGUL CHOSEONG KAPYEOUNRIEUL" #x111B) + ("HANGUL CHOSEONG MIEUM-PIEUP" #x111C) + ("HANGUL CHOSEONG KAPYEOUNMIEUM" #x111D) + ("HANGUL CHOSEONG PIEUP-KIYEOK" #x111E) + ("HANGUL CHOSEONG PIEUP-NIEUN" #x111F) + ("HANGUL CHOSEONG PIEUP-TIKEUT" #x1120) + ("HANGUL CHOSEONG PIEUP-SIOS" #x1121) + ("HANGUL CHOSEONG PIEUP-SIOS-KIYEOK" #x1122) + ("HANGUL CHOSEONG PIEUP-SIOS-TIKEUT" #x1123) + ("HANGUL CHOSEONG PIEUP-SIOS-PIEUP" #x1124) + ("HANGUL CHOSEONG PIEUP-SSANGSIOS" #x1125) + ("HANGUL CHOSEONG PIEUP-SIOS-CIEUC" #x1126) + ("HANGUL CHOSEONG PIEUP-CIEUC" #x1127) + ("HANGUL CHOSEONG PIEUP-CHIEUCH" #x1128) + ("HANGUL CHOSEONG PIEUP-THIEUTH" #x1129) + ("HANGUL CHOSEONG PIEUP-PHIEUPH" #x112A) + ("HANGUL CHOSEONG KAPYEOUNPIEUP" #x112B) + ("HANGUL CHOSEONG KAPYEOUNSSANGPIEUP" #x112C) + ("HANGUL CHOSEONG SIOS-KIYEOK" #x112D) + ("HANGUL CHOSEONG SIOS-NIEUN" #x112E) + ("HANGUL CHOSEONG SIOS-TIKEUT" #x112F) + ("HANGUL CHOSEONG SIOS-RIEUL" #x1130) + ("HANGUL CHOSEONG SIOS-MIEUM" #x1131) + ("HANGUL CHOSEONG SIOS-PIEUP" #x1132) + ("HANGUL CHOSEONG SIOS-PIEUP-KIYEOK" #x1133) + ("HANGUL CHOSEONG SIOS-SSANGSIOS" #x1134) + ("HANGUL CHOSEONG SIOS-IEUNG" #x1135) + ("HANGUL CHOSEONG SIOS-CIEUC" #x1136) + ("HANGUL CHOSEONG SIOS-CHIEUCH" #x1137) + ("HANGUL CHOSEONG SIOS-KHIEUKH" #x1138) + ("HANGUL CHOSEONG SIOS-THIEUTH" #x1139) + ("HANGUL CHOSEONG SIOS-PHIEUPH" #x113A) + ("HANGUL CHOSEONG SIOS-HIEUH" #x113B) + ("HANGUL CHOSEONG CHITUEUMSIOS" #x113C) + ("HANGUL CHOSEONG CHITUEUMSSANGSIOS" #x113D) + ("HANGUL CHOSEONG CEONGCHIEUMSIOS" #x113E) + ("HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS" #x113F) + ("HANGUL CHOSEONG PANSIOS" #x1140) + ("HANGUL CHOSEONG IEUNG-KIYEOK" #x1141) + ("HANGUL CHOSEONG IEUNG-TIKEUT" #x1142) + ("HANGUL CHOSEONG IEUNG-MIEUM" #x1143) + ("HANGUL CHOSEONG IEUNG-PIEUP" #x1144) + ("HANGUL CHOSEONG IEUNG-SIOS" #x1145) + ("HANGUL CHOSEONG IEUNG-PANSIOS" #x1146) + ("HANGUL CHOSEONG SSANGIEUNG" #x1147) + ("HANGUL CHOSEONG IEUNG-CIEUC" #x1148) + ("HANGUL CHOSEONG IEUNG-CHIEUCH" #x1149) + ("HANGUL CHOSEONG IEUNG-THIEUTH" #x114A) + ("HANGUL CHOSEONG IEUNG-PHIEUPH" #x114B) + ("HANGUL CHOSEONG YESIEUNG" #x114C) + ("HANGUL CHOSEONG CIEUC-IEUNG" #x114D) + ("HANGUL CHOSEONG CHITUEUMCIEUC" #x114E) + ("HANGUL CHOSEONG CHITUEUMSSANGCIEUC" #x114F) + ("HANGUL CHOSEONG CEONGCHIEUMCIEUC" #x1150) + ("HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC" #x1151) + ("HANGUL CHOSEONG CHIEUCH-KHIEUKH" #x1152) + ("HANGUL CHOSEONG CHIEUCH-HIEUH" #x1153) + ("HANGUL CHOSEONG CHITUEUMCHIEUCH" #x1154) + ("HANGUL CHOSEONG CEONGCHIEUMCHIEUCH" #x1155) + ("HANGUL CHOSEONG PHIEUPH-PIEUP" #x1156) + ("HANGUL CHOSEONG KAPYEOUNPHIEUPH" #x1157) + ("HANGUL CHOSEONG SSANGHIEUH" #x1158) + ("HANGUL CHOSEONG YEORINHIEUH" #x1159) + ("HANGUL CHOSEONG FILLER" #x115F) + ("HANGUL JUNGSEONG FILLER" #x1160) + ("HANGUL JUNGSEONG A" #x1161) + ("HANGUL JUNGSEONG AE" #x1162) + ("HANGUL JUNGSEONG YA" #x1163) + ("HANGUL JUNGSEONG YAE" #x1164) + ("HANGUL JUNGSEONG EO" #x1165) + ("HANGUL JUNGSEONG E" #x1166) + ("HANGUL JUNGSEONG YEO" #x1167) + ("HANGUL JUNGSEONG YE" #x1168) + ("HANGUL JUNGSEONG O" #x1169) + ("HANGUL JUNGSEONG WA" #x116A) + ("HANGUL JUNGSEONG WAE" #x116B) + ("HANGUL JUNGSEONG OE" #x116C) + ("HANGUL JUNGSEONG YO" #x116D) + ("HANGUL JUNGSEONG U" #x116E) + ("HANGUL JUNGSEONG WEO" #x116F) + ("HANGUL JUNGSEONG WE" #x1170) + ("HANGUL JUNGSEONG WI" #x1171) + ("HANGUL JUNGSEONG YU" #x1172) + ("HANGUL JUNGSEONG EU" #x1173) + ("HANGUL JUNGSEONG YI" #x1174) + ("HANGUL JUNGSEONG I" #x1175) + ("HANGUL JUNGSEONG A-O" #x1176) + ("HANGUL JUNGSEONG A-U" #x1177) + ("HANGUL JUNGSEONG YA-O" #x1178) + ("HANGUL JUNGSEONG YA-YO" #x1179) + ("HANGUL JUNGSEONG EO-O" #x117A) + ("HANGUL JUNGSEONG EO-U" #x117B) + ("HANGUL JUNGSEONG EO-EU" #x117C) + ("HANGUL JUNGSEONG YEO-O" #x117D) + ("HANGUL JUNGSEONG YEO-U" #x117E) + ("HANGUL JUNGSEONG O-EO" #x117F) + ("HANGUL JUNGSEONG O-E" #x1180) + ("HANGUL JUNGSEONG O-YE" #x1181) + ("HANGUL JUNGSEONG O-O" #x1182) + ("HANGUL JUNGSEONG O-U" #x1183) + ("HANGUL JUNGSEONG YO-YA" #x1184) + ("HANGUL JUNGSEONG YO-YAE" #x1185) + ("HANGUL JUNGSEONG YO-YEO" #x1186) + ("HANGUL JUNGSEONG YO-O" #x1187) + ("HANGUL JUNGSEONG YO-I" #x1188) + ("HANGUL JUNGSEONG U-A" #x1189) + ("HANGUL JUNGSEONG U-AE" #x118A) + ("HANGUL JUNGSEONG U-EO-EU" #x118B) + ("HANGUL JUNGSEONG U-YE" #x118C) + ("HANGUL JUNGSEONG U-U" #x118D) + ("HANGUL JUNGSEONG YU-A" #x118E) + ("HANGUL JUNGSEONG YU-EO" #x118F) + ("HANGUL JUNGSEONG YU-E" #x1190) + ("HANGUL JUNGSEONG YU-YEO" #x1191) + ("HANGUL JUNGSEONG YU-YE" #x1192) + ("HANGUL JUNGSEONG YU-U" #x1193) + ("HANGUL JUNGSEONG YU-I" #x1194) + ("HANGUL JUNGSEONG EU-U" #x1195) + ("HANGUL JUNGSEONG EU-EU" #x1196) + ("HANGUL JUNGSEONG YI-U" #x1197) + ("HANGUL JUNGSEONG I-A" #x1198) + ("HANGUL JUNGSEONG I-YA" #x1199) + ("HANGUL JUNGSEONG I-O" #x119A) + ("HANGUL JUNGSEONG I-U" #x119B) + ("HANGUL JUNGSEONG I-EU" #x119C) + ("HANGUL JUNGSEONG I-ARAEA" #x119D) + ("HANGUL JUNGSEONG ARAEA" #x119E) + ("HANGUL JUNGSEONG ARAEA-EO" #x119F) + ("HANGUL JUNGSEONG ARAEA-U" #x11A0) + ("HANGUL JUNGSEONG ARAEA-I" #x11A1) + ("HANGUL JUNGSEONG SSANGARAEA" #x11A2) + ("HANGUL JONGSEONG KIYEOK" #x11A8) + ("HANGUL JONGSEONG SSANGKIYEOK" #x11A9) + ("HANGUL JONGSEONG KIYEOK-SIOS" #x11AA) + ("HANGUL JONGSEONG NIEUN" #x11AB) + ("HANGUL JONGSEONG NIEUN-CIEUC" #x11AC) + ("HANGUL JONGSEONG NIEUN-HIEUH" #x11AD) + ("HANGUL JONGSEONG TIKEUT" #x11AE) + ("HANGUL JONGSEONG RIEUL" #x11AF) + ("HANGUL JONGSEONG RIEUL-KIYEOK" #x11B0) + ("HANGUL JONGSEONG RIEUL-MIEUM" #x11B1) + ("HANGUL JONGSEONG RIEUL-PIEUP" #x11B2) + ("HANGUL JONGSEONG RIEUL-SIOS" #x11B3) + ("HANGUL JONGSEONG RIEUL-THIEUTH" #x11B4) + ("HANGUL JONGSEONG RIEUL-PHIEUPH" #x11B5) + ("HANGUL JONGSEONG RIEUL-HIEUH" #x11B6) + ("HANGUL JONGSEONG MIEUM" #x11B7) + ("HANGUL JONGSEONG PIEUP" #x11B8) + ("HANGUL JONGSEONG PIEUP-SIOS" #x11B9) + ("HANGUL JONGSEONG SIOS" #x11BA) + ("HANGUL JONGSEONG SSANGSIOS" #x11BB) + ("HANGUL JONGSEONG IEUNG" #x11BC) + ("HANGUL JONGSEONG CIEUC" #x11BD) + ("HANGUL JONGSEONG CHIEUCH" #x11BE) + ("HANGUL JONGSEONG KHIEUKH" #x11BF) + ("HANGUL JONGSEONG THIEUTH" #x11C0) + ("HANGUL JONGSEONG PHIEUPH" #x11C1) + ("HANGUL JONGSEONG HIEUH" #x11C2) + ("HANGUL JONGSEONG KIYEOK-RIEUL" #x11C3) + ("HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK" #x11C4) + ("HANGUL JONGSEONG NIEUN-KIYEOK" #x11C5) + ("HANGUL JONGSEONG NIEUN-TIKEUT" #x11C6) + ("HANGUL JONGSEONG NIEUN-SIOS" #x11C7) + ("HANGUL JONGSEONG NIEUN-PANSIOS" #x11C8) + ("HANGUL JONGSEONG NIEUN-THIEUTH" #x11C9) + ("HANGUL JONGSEONG TIKEUT-KIYEOK" #x11CA) + ("HANGUL JONGSEONG TIKEUT-RIEUL" #x11CB) + ("HANGUL JONGSEONG RIEUL-KIYEOK-SIOS" #x11CC) + ("HANGUL JONGSEONG RIEUL-NIEUN" #x11CD) + ("HANGUL JONGSEONG RIEUL-TIKEUT" #x11CE) + ("HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH" #x11CF) + ("HANGUL JONGSEONG SSANGRIEUL" #x11D0) + ("HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK" #x11D1) + ("HANGUL JONGSEONG RIEUL-MIEUM-SIOS" #x11D2) + ("HANGUL JONGSEONG RIEUL-PIEUP-SIOS" #x11D3) + ("HANGUL JONGSEONG RIEUL-PIEUP-HIEUH" #x11D4) + ("HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP" #x11D5) + ("HANGUL JONGSEONG RIEUL-SSANGSIOS" #x11D6) + ("HANGUL JONGSEONG RIEUL-PANSIOS" #x11D7) + ("HANGUL JONGSEONG RIEUL-KHIEUKH" #x11D8) + ("HANGUL JONGSEONG RIEUL-YEORINHIEUH" #x11D9) + ("HANGUL JONGSEONG MIEUM-KIYEOK" #x11DA) + ("HANGUL JONGSEONG MIEUM-RIEUL" #x11DB) + ("HANGUL JONGSEONG MIEUM-PIEUP" #x11DC) + ("HANGUL JONGSEONG MIEUM-SIOS" #x11DD) + ("HANGUL JONGSEONG MIEUM-SSANGSIOS" #x11DE) + ("HANGUL JONGSEONG MIEUM-PANSIOS" #x11DF) + ("HANGUL JONGSEONG MIEUM-CHIEUCH" #x11E0) + ("HANGUL JONGSEONG MIEUM-HIEUH" #x11E1) + ("HANGUL JONGSEONG KAPYEOUNMIEUM" #x11E2) + ("HANGUL JONGSEONG PIEUP-RIEUL" #x11E3) + ("HANGUL JONGSEONG PIEUP-PHIEUPH" #x11E4) + ("HANGUL JONGSEONG PIEUP-HIEUH" #x11E5) + ("HANGUL JONGSEONG KAPYEOUNPIEUP" #x11E6) + ("HANGUL JONGSEONG SIOS-KIYEOK" #x11E7) + ("HANGUL JONGSEONG SIOS-TIKEUT" #x11E8) + ("HANGUL JONGSEONG SIOS-RIEUL" #x11E9) + ("HANGUL JONGSEONG SIOS-PIEUP" #x11EA) + ("HANGUL JONGSEONG PANSIOS" #x11EB) + ("HANGUL JONGSEONG IEUNG-KIYEOK" #x11EC) + ("HANGUL JONGSEONG IEUNG-SSANGKIYEOK" #x11ED) + ("HANGUL JONGSEONG SSANGIEUNG" #x11EE) + ("HANGUL JONGSEONG IEUNG-KHIEUKH" #x11EF) + ("HANGUL JONGSEONG YESIEUNG" #x11F0) + ("HANGUL JONGSEONG YESIEUNG-SIOS" #x11F1) + ("HANGUL JONGSEONG YESIEUNG-PANSIOS" #x11F2) + ("HANGUL JONGSEONG PHIEUPH-PIEUP" #x11F3) + ("HANGUL JONGSEONG KAPYEOUNPHIEUPH" #x11F4) + ("HANGUL JONGSEONG HIEUH-NIEUN" #x11F5) + ("HANGUL JONGSEONG HIEUH-RIEUL" #x11F6) + ("HANGUL JONGSEONG HIEUH-MIEUM" #x11F7) + ("HANGUL JONGSEONG HIEUH-PIEUP" #x11F8) + ("HANGUL JONGSEONG YEORINHIEUH" #x11F9) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/01200-0137F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,347 @@ +(nxml-define-char-name-set 'ethiopic + '(("ETHIOPIC SYLLABLE HA" #x1200) + ("ETHIOPIC SYLLABLE HU" #x1201) + ("ETHIOPIC SYLLABLE HI" #x1202) + ("ETHIOPIC SYLLABLE HAA" #x1203) + ("ETHIOPIC SYLLABLE HEE" #x1204) + ("ETHIOPIC SYLLABLE HE" #x1205) + ("ETHIOPIC SYLLABLE HO" #x1206) + ("ETHIOPIC SYLLABLE LA" #x1208) + ("ETHIOPIC SYLLABLE LU" #x1209) + ("ETHIOPIC SYLLABLE LI" #x120A) + ("ETHIOPIC SYLLABLE LAA" #x120B) + ("ETHIOPIC SYLLABLE LEE" #x120C) + ("ETHIOPIC SYLLABLE LE" #x120D) + ("ETHIOPIC SYLLABLE LO" #x120E) + ("ETHIOPIC SYLLABLE LWA" #x120F) + ("ETHIOPIC SYLLABLE HHA" #x1210) + ("ETHIOPIC SYLLABLE HHU" #x1211) + ("ETHIOPIC SYLLABLE HHI" #x1212) + ("ETHIOPIC SYLLABLE HHAA" #x1213) + ("ETHIOPIC SYLLABLE HHEE" #x1214) + ("ETHIOPIC SYLLABLE HHE" #x1215) + ("ETHIOPIC SYLLABLE HHO" #x1216) + ("ETHIOPIC SYLLABLE HHWA" #x1217) + ("ETHIOPIC SYLLABLE MA" #x1218) + ("ETHIOPIC SYLLABLE MU" #x1219) + ("ETHIOPIC SYLLABLE MI" #x121A) + ("ETHIOPIC SYLLABLE MAA" #x121B) + ("ETHIOPIC SYLLABLE MEE" #x121C) + ("ETHIOPIC SYLLABLE ME" #x121D) + ("ETHIOPIC SYLLABLE MO" #x121E) + ("ETHIOPIC SYLLABLE MWA" #x121F) + ("ETHIOPIC SYLLABLE SZA" #x1220) + ("ETHIOPIC SYLLABLE SZU" #x1221) + ("ETHIOPIC SYLLABLE SZI" #x1222) + ("ETHIOPIC SYLLABLE SZAA" #x1223) + ("ETHIOPIC SYLLABLE SZEE" #x1224) + ("ETHIOPIC SYLLABLE SZE" #x1225) + ("ETHIOPIC SYLLABLE SZO" #x1226) + ("ETHIOPIC SYLLABLE SZWA" #x1227) + ("ETHIOPIC SYLLABLE RA" #x1228) + ("ETHIOPIC SYLLABLE RU" #x1229) + ("ETHIOPIC SYLLABLE RI" #x122A) + ("ETHIOPIC SYLLABLE RAA" #x122B) + ("ETHIOPIC SYLLABLE REE" #x122C) + ("ETHIOPIC SYLLABLE RE" #x122D) + ("ETHIOPIC SYLLABLE RO" #x122E) + ("ETHIOPIC SYLLABLE RWA" #x122F) + ("ETHIOPIC SYLLABLE SA" #x1230) + ("ETHIOPIC SYLLABLE SU" #x1231) + ("ETHIOPIC SYLLABLE SI" #x1232) + ("ETHIOPIC SYLLABLE SAA" #x1233) + ("ETHIOPIC SYLLABLE SEE" #x1234) + ("ETHIOPIC SYLLABLE SE" #x1235) + ("ETHIOPIC SYLLABLE SO" #x1236) + ("ETHIOPIC SYLLABLE SWA" #x1237) + ("ETHIOPIC SYLLABLE SHA" #x1238) + ("ETHIOPIC SYLLABLE SHU" #x1239) + ("ETHIOPIC SYLLABLE SHI" #x123A) + ("ETHIOPIC SYLLABLE SHAA" #x123B) + ("ETHIOPIC SYLLABLE SHEE" #x123C) + ("ETHIOPIC SYLLABLE SHE" #x123D) + ("ETHIOPIC SYLLABLE SHO" #x123E) + ("ETHIOPIC SYLLABLE SHWA" #x123F) + ("ETHIOPIC SYLLABLE QA" #x1240) + ("ETHIOPIC SYLLABLE QU" #x1241) + ("ETHIOPIC SYLLABLE QI" #x1242) + ("ETHIOPIC SYLLABLE QAA" #x1243) + ("ETHIOPIC SYLLABLE QEE" #x1244) + ("ETHIOPIC SYLLABLE QE" #x1245) + ("ETHIOPIC SYLLABLE QO" #x1246) + ("ETHIOPIC SYLLABLE QWA" #x1248) + ("ETHIOPIC SYLLABLE QWI" #x124A) + ("ETHIOPIC SYLLABLE QWAA" #x124B) + ("ETHIOPIC SYLLABLE QWEE" #x124C) + ("ETHIOPIC SYLLABLE QWE" #x124D) + ("ETHIOPIC SYLLABLE QHA" #x1250) + ("ETHIOPIC SYLLABLE QHU" #x1251) + ("ETHIOPIC SYLLABLE QHI" #x1252) + ("ETHIOPIC SYLLABLE QHAA" #x1253) + ("ETHIOPIC SYLLABLE QHEE" #x1254) + ("ETHIOPIC SYLLABLE QHE" #x1255) + ("ETHIOPIC SYLLABLE QHO" #x1256) + ("ETHIOPIC SYLLABLE QHWA" #x1258) + ("ETHIOPIC SYLLABLE QHWI" #x125A) + ("ETHIOPIC SYLLABLE QHWAA" #x125B) + ("ETHIOPIC SYLLABLE QHWEE" #x125C) + ("ETHIOPIC SYLLABLE QHWE" #x125D) + ("ETHIOPIC SYLLABLE BA" #x1260) + ("ETHIOPIC SYLLABLE BU" #x1261) + ("ETHIOPIC SYLLABLE BI" #x1262) + ("ETHIOPIC SYLLABLE BAA" #x1263) + ("ETHIOPIC SYLLABLE BEE" #x1264) + ("ETHIOPIC SYLLABLE BE" #x1265) + ("ETHIOPIC SYLLABLE BO" #x1266) + ("ETHIOPIC SYLLABLE BWA" #x1267) + ("ETHIOPIC SYLLABLE VA" #x1268) + ("ETHIOPIC SYLLABLE VU" #x1269) + ("ETHIOPIC SYLLABLE VI" #x126A) + ("ETHIOPIC SYLLABLE VAA" #x126B) + ("ETHIOPIC SYLLABLE VEE" #x126C) + ("ETHIOPIC SYLLABLE VE" #x126D) + ("ETHIOPIC SYLLABLE VO" #x126E) + ("ETHIOPIC SYLLABLE VWA" #x126F) + ("ETHIOPIC SYLLABLE TA" #x1270) + ("ETHIOPIC SYLLABLE TU" #x1271) + ("ETHIOPIC SYLLABLE TI" #x1272) + ("ETHIOPIC SYLLABLE TAA" #x1273) + ("ETHIOPIC SYLLABLE TEE" #x1274) + ("ETHIOPIC SYLLABLE TE" #x1275) + ("ETHIOPIC SYLLABLE TO" #x1276) + ("ETHIOPIC SYLLABLE TWA" #x1277) + ("ETHIOPIC SYLLABLE CA" #x1278) + ("ETHIOPIC SYLLABLE CU" #x1279) + ("ETHIOPIC SYLLABLE CI" #x127A) + ("ETHIOPIC SYLLABLE CAA" #x127B) + ("ETHIOPIC SYLLABLE CEE" #x127C) + ("ETHIOPIC SYLLABLE CE" #x127D) + ("ETHIOPIC SYLLABLE CO" #x127E) + ("ETHIOPIC SYLLABLE CWA" #x127F) + ("ETHIOPIC SYLLABLE XA" #x1280) + ("ETHIOPIC SYLLABLE XU" #x1281) + ("ETHIOPIC SYLLABLE XI" #x1282) + ("ETHIOPIC SYLLABLE XAA" #x1283) + ("ETHIOPIC SYLLABLE XEE" #x1284) + ("ETHIOPIC SYLLABLE XE" #x1285) + ("ETHIOPIC SYLLABLE XO" #x1286) + ("ETHIOPIC SYLLABLE XWA" #x1288) + ("ETHIOPIC SYLLABLE XWI" #x128A) + ("ETHIOPIC SYLLABLE XWAA" #x128B) + ("ETHIOPIC SYLLABLE XWEE" #x128C) + ("ETHIOPIC SYLLABLE XWE" #x128D) + ("ETHIOPIC SYLLABLE NA" #x1290) + ("ETHIOPIC SYLLABLE NU" #x1291) + ("ETHIOPIC SYLLABLE NI" #x1292) + ("ETHIOPIC SYLLABLE NAA" #x1293) + ("ETHIOPIC SYLLABLE NEE" #x1294) + ("ETHIOPIC SYLLABLE NE" #x1295) + ("ETHIOPIC SYLLABLE NO" #x1296) + ("ETHIOPIC SYLLABLE NWA" #x1297) + ("ETHIOPIC SYLLABLE NYA" #x1298) + ("ETHIOPIC SYLLABLE NYU" #x1299) + ("ETHIOPIC SYLLABLE NYI" #x129A) + ("ETHIOPIC SYLLABLE NYAA" #x129B) + ("ETHIOPIC SYLLABLE NYEE" #x129C) + ("ETHIOPIC SYLLABLE NYE" #x129D) + ("ETHIOPIC SYLLABLE NYO" #x129E) + ("ETHIOPIC SYLLABLE NYWA" #x129F) + ("ETHIOPIC SYLLABLE GLOTTAL A" #x12A0) + ("ETHIOPIC SYLLABLE GLOTTAL U" #x12A1) + ("ETHIOPIC SYLLABLE GLOTTAL I" #x12A2) + ("ETHIOPIC SYLLABLE GLOTTAL AA" #x12A3) + ("ETHIOPIC SYLLABLE GLOTTAL EE" #x12A4) + ("ETHIOPIC SYLLABLE GLOTTAL E" #x12A5) + ("ETHIOPIC SYLLABLE GLOTTAL O" #x12A6) + ("ETHIOPIC SYLLABLE GLOTTAL WA" #x12A7) + ("ETHIOPIC SYLLABLE KA" #x12A8) + ("ETHIOPIC SYLLABLE KU" #x12A9) + ("ETHIOPIC SYLLABLE KI" #x12AA) + ("ETHIOPIC SYLLABLE KAA" #x12AB) + ("ETHIOPIC SYLLABLE KEE" #x12AC) + ("ETHIOPIC SYLLABLE KE" #x12AD) + ("ETHIOPIC SYLLABLE KO" #x12AE) + ("ETHIOPIC SYLLABLE KWA" #x12B0) + ("ETHIOPIC SYLLABLE KWI" #x12B2) + ("ETHIOPIC SYLLABLE KWAA" #x12B3) + ("ETHIOPIC SYLLABLE KWEE" #x12B4) + ("ETHIOPIC SYLLABLE KWE" #x12B5) + ("ETHIOPIC SYLLABLE KXA" #x12B8) + ("ETHIOPIC SYLLABLE KXU" #x12B9) + ("ETHIOPIC SYLLABLE KXI" #x12BA) + ("ETHIOPIC SYLLABLE KXAA" #x12BB) + ("ETHIOPIC SYLLABLE KXEE" #x12BC) + ("ETHIOPIC SYLLABLE KXE" #x12BD) + ("ETHIOPIC SYLLABLE KXO" #x12BE) + ("ETHIOPIC SYLLABLE KXWA" #x12C0) + ("ETHIOPIC SYLLABLE KXWI" #x12C2) + ("ETHIOPIC SYLLABLE KXWAA" #x12C3) + ("ETHIOPIC SYLLABLE KXWEE" #x12C4) + ("ETHIOPIC SYLLABLE KXWE" #x12C5) + ("ETHIOPIC SYLLABLE WA" #x12C8) + ("ETHIOPIC SYLLABLE WU" #x12C9) + ("ETHIOPIC SYLLABLE WI" #x12CA) + ("ETHIOPIC SYLLABLE WAA" #x12CB) + ("ETHIOPIC SYLLABLE WEE" #x12CC) + ("ETHIOPIC SYLLABLE WE" #x12CD) + ("ETHIOPIC SYLLABLE WO" #x12CE) + ("ETHIOPIC SYLLABLE PHARYNGEAL A" #x12D0) + ("ETHIOPIC SYLLABLE PHARYNGEAL U" #x12D1) + ("ETHIOPIC SYLLABLE PHARYNGEAL I" #x12D2) + ("ETHIOPIC SYLLABLE PHARYNGEAL AA" #x12D3) + ("ETHIOPIC SYLLABLE PHARYNGEAL EE" #x12D4) + ("ETHIOPIC SYLLABLE PHARYNGEAL E" #x12D5) + ("ETHIOPIC SYLLABLE PHARYNGEAL O" #x12D6) + ("ETHIOPIC SYLLABLE ZA" #x12D8) + ("ETHIOPIC SYLLABLE ZU" #x12D9) + ("ETHIOPIC SYLLABLE ZI" #x12DA) + ("ETHIOPIC SYLLABLE ZAA" #x12DB) + ("ETHIOPIC SYLLABLE ZEE" #x12DC) + ("ETHIOPIC SYLLABLE ZE" #x12DD) + ("ETHIOPIC SYLLABLE ZO" #x12DE) + ("ETHIOPIC SYLLABLE ZWA" #x12DF) + ("ETHIOPIC SYLLABLE ZHA" #x12E0) + ("ETHIOPIC SYLLABLE ZHU" #x12E1) + ("ETHIOPIC SYLLABLE ZHI" #x12E2) + ("ETHIOPIC SYLLABLE ZHAA" #x12E3) + ("ETHIOPIC SYLLABLE ZHEE" #x12E4) + ("ETHIOPIC SYLLABLE ZHE" #x12E5) + ("ETHIOPIC SYLLABLE ZHO" #x12E6) + ("ETHIOPIC SYLLABLE ZHWA" #x12E7) + ("ETHIOPIC SYLLABLE YA" #x12E8) + ("ETHIOPIC SYLLABLE YU" #x12E9) + ("ETHIOPIC SYLLABLE YI" #x12EA) + ("ETHIOPIC SYLLABLE YAA" #x12EB) + ("ETHIOPIC SYLLABLE YEE" #x12EC) + ("ETHIOPIC SYLLABLE YE" #x12ED) + ("ETHIOPIC SYLLABLE YO" #x12EE) + ("ETHIOPIC SYLLABLE DA" #x12F0) + ("ETHIOPIC SYLLABLE DU" #x12F1) + ("ETHIOPIC SYLLABLE DI" #x12F2) + ("ETHIOPIC SYLLABLE DAA" #x12F3) + ("ETHIOPIC SYLLABLE DEE" #x12F4) + ("ETHIOPIC SYLLABLE DE" #x12F5) + ("ETHIOPIC SYLLABLE DO" #x12F6) + ("ETHIOPIC SYLLABLE DWA" #x12F7) + ("ETHIOPIC SYLLABLE DDA" #x12F8) + ("ETHIOPIC SYLLABLE DDU" #x12F9) + ("ETHIOPIC SYLLABLE DDI" #x12FA) + ("ETHIOPIC SYLLABLE DDAA" #x12FB) + ("ETHIOPIC SYLLABLE DDEE" #x12FC) + ("ETHIOPIC SYLLABLE DDE" #x12FD) + ("ETHIOPIC SYLLABLE DDO" #x12FE) + ("ETHIOPIC SYLLABLE DDWA" #x12FF) + ("ETHIOPIC SYLLABLE JA" #x1300) + ("ETHIOPIC SYLLABLE JU" #x1301) + ("ETHIOPIC SYLLABLE JI" #x1302) + ("ETHIOPIC SYLLABLE JAA" #x1303) + ("ETHIOPIC SYLLABLE JEE" #x1304) + ("ETHIOPIC SYLLABLE JE" #x1305) + ("ETHIOPIC SYLLABLE JO" #x1306) + ("ETHIOPIC SYLLABLE JWA" #x1307) + ("ETHIOPIC SYLLABLE GA" #x1308) + ("ETHIOPIC SYLLABLE GU" #x1309) + ("ETHIOPIC SYLLABLE GI" #x130A) + ("ETHIOPIC SYLLABLE GAA" #x130B) + ("ETHIOPIC SYLLABLE GEE" #x130C) + ("ETHIOPIC SYLLABLE GE" #x130D) + ("ETHIOPIC SYLLABLE GO" #x130E) + ("ETHIOPIC SYLLABLE GWA" #x1310) + ("ETHIOPIC SYLLABLE GWI" #x1312) + ("ETHIOPIC SYLLABLE GWAA" #x1313) + ("ETHIOPIC SYLLABLE GWEE" #x1314) + ("ETHIOPIC SYLLABLE GWE" #x1315) + ("ETHIOPIC SYLLABLE GGA" #x1318) + ("ETHIOPIC SYLLABLE GGU" #x1319) + ("ETHIOPIC SYLLABLE GGI" #x131A) + ("ETHIOPIC SYLLABLE GGAA" #x131B) + ("ETHIOPIC SYLLABLE GGEE" #x131C) + ("ETHIOPIC SYLLABLE GGE" #x131D) + ("ETHIOPIC SYLLABLE GGO" #x131E) + ("ETHIOPIC SYLLABLE THA" #x1320) + ("ETHIOPIC SYLLABLE THU" #x1321) + ("ETHIOPIC SYLLABLE THI" #x1322) + ("ETHIOPIC SYLLABLE THAA" #x1323) + ("ETHIOPIC SYLLABLE THEE" #x1324) + ("ETHIOPIC SYLLABLE THE" #x1325) + ("ETHIOPIC SYLLABLE THO" #x1326) + ("ETHIOPIC SYLLABLE THWA" #x1327) + ("ETHIOPIC SYLLABLE CHA" #x1328) + ("ETHIOPIC SYLLABLE CHU" #x1329) + ("ETHIOPIC SYLLABLE CHI" #x132A) + ("ETHIOPIC SYLLABLE CHAA" #x132B) + ("ETHIOPIC SYLLABLE CHEE" #x132C) + ("ETHIOPIC SYLLABLE CHE" #x132D) + ("ETHIOPIC SYLLABLE CHO" #x132E) + ("ETHIOPIC SYLLABLE CHWA" #x132F) + ("ETHIOPIC SYLLABLE PHA" #x1330) + ("ETHIOPIC SYLLABLE PHU" #x1331) + ("ETHIOPIC SYLLABLE PHI" #x1332) + ("ETHIOPIC SYLLABLE PHAA" #x1333) + ("ETHIOPIC SYLLABLE PHEE" #x1334) + ("ETHIOPIC SYLLABLE PHE" #x1335) + ("ETHIOPIC SYLLABLE PHO" #x1336) + ("ETHIOPIC SYLLABLE PHWA" #x1337) + ("ETHIOPIC SYLLABLE TSA" #x1338) + ("ETHIOPIC SYLLABLE TSU" #x1339) + ("ETHIOPIC SYLLABLE TSI" #x133A) + ("ETHIOPIC SYLLABLE TSAA" #x133B) + ("ETHIOPIC SYLLABLE TSEE" #x133C) + ("ETHIOPIC SYLLABLE TSE" #x133D) + ("ETHIOPIC SYLLABLE TSO" #x133E) + ("ETHIOPIC SYLLABLE TSWA" #x133F) + ("ETHIOPIC SYLLABLE TZA" #x1340) + ("ETHIOPIC SYLLABLE TZU" #x1341) + ("ETHIOPIC SYLLABLE TZI" #x1342) + ("ETHIOPIC SYLLABLE TZAA" #x1343) + ("ETHIOPIC SYLLABLE TZEE" #x1344) + ("ETHIOPIC SYLLABLE TZE" #x1345) + ("ETHIOPIC SYLLABLE TZO" #x1346) + ("ETHIOPIC SYLLABLE FA" #x1348) + ("ETHIOPIC SYLLABLE FU" #x1349) + ("ETHIOPIC SYLLABLE FI" #x134A) + ("ETHIOPIC SYLLABLE FAA" #x134B) + ("ETHIOPIC SYLLABLE FEE" #x134C) + ("ETHIOPIC SYLLABLE FE" #x134D) + ("ETHIOPIC SYLLABLE FO" #x134E) + ("ETHIOPIC SYLLABLE FWA" #x134F) + ("ETHIOPIC SYLLABLE PA" #x1350) + ("ETHIOPIC SYLLABLE PU" #x1351) + ("ETHIOPIC SYLLABLE PI" #x1352) + ("ETHIOPIC SYLLABLE PAA" #x1353) + ("ETHIOPIC SYLLABLE PEE" #x1354) + ("ETHIOPIC SYLLABLE PE" #x1355) + ("ETHIOPIC SYLLABLE PO" #x1356) + ("ETHIOPIC SYLLABLE PWA" #x1357) + ("ETHIOPIC SYLLABLE RYA" #x1358) + ("ETHIOPIC SYLLABLE MYA" #x1359) + ("ETHIOPIC SYLLABLE FYA" #x135A) + ("ETHIOPIC WORDSPACE" #x1361) + ("ETHIOPIC FULL STOP" #x1362) + ("ETHIOPIC COMMA" #x1363) + ("ETHIOPIC SEMICOLON" #x1364) + ("ETHIOPIC COLON" #x1365) + ("ETHIOPIC PREFACE COLON" #x1366) + ("ETHIOPIC QUESTION MARK" #x1367) + ("ETHIOPIC PARAGRAPH SEPARATOR" #x1368) + ("ETHIOPIC DIGIT ONE" #x1369) + ("ETHIOPIC DIGIT TWO" #x136A) + ("ETHIOPIC DIGIT THREE" #x136B) + ("ETHIOPIC DIGIT FOUR" #x136C) + ("ETHIOPIC DIGIT FIVE" #x136D) + ("ETHIOPIC DIGIT SIX" #x136E) + ("ETHIOPIC DIGIT SEVEN" #x136F) + ("ETHIOPIC DIGIT EIGHT" #x1370) + ("ETHIOPIC DIGIT NINE" #x1371) + ("ETHIOPIC NUMBER TEN" #x1372) + ("ETHIOPIC NUMBER TWENTY" #x1373) + ("ETHIOPIC NUMBER THIRTY" #x1374) + ("ETHIOPIC NUMBER FORTY" #x1375) + ("ETHIOPIC NUMBER FIFTY" #x1376) + ("ETHIOPIC NUMBER SIXTY" #x1377) + ("ETHIOPIC NUMBER SEVENTY" #x1378) + ("ETHIOPIC NUMBER EIGHTY" #x1379) + ("ETHIOPIC NUMBER NINETY" #x137A) + ("ETHIOPIC NUMBER HUNDRED" #x137B) + ("ETHIOPIC NUMBER TEN THOUSAND" #x137C) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/013A0-013FF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,87 @@ +(nxml-define-char-name-set 'cherokee + '(("CHEROKEE LETTER A" #x13A0) + ("CHEROKEE LETTER E" #x13A1) + ("CHEROKEE LETTER I" #x13A2) + ("CHEROKEE LETTER O" #x13A3) + ("CHEROKEE LETTER U" #x13A4) + ("CHEROKEE LETTER V" #x13A5) + ("CHEROKEE LETTER GA" #x13A6) + ("CHEROKEE LETTER KA" #x13A7) + ("CHEROKEE LETTER GE" #x13A8) + ("CHEROKEE LETTER GI" #x13A9) + ("CHEROKEE LETTER GO" #x13AA) + ("CHEROKEE LETTER GU" #x13AB) + ("CHEROKEE LETTER GV" #x13AC) + ("CHEROKEE LETTER HA" #x13AD) + ("CHEROKEE LETTER HE" #x13AE) + ("CHEROKEE LETTER HI" #x13AF) + ("CHEROKEE LETTER HO" #x13B0) + ("CHEROKEE LETTER HU" #x13B1) + ("CHEROKEE LETTER HV" #x13B2) + ("CHEROKEE LETTER LA" #x13B3) + ("CHEROKEE LETTER LE" #x13B4) + ("CHEROKEE LETTER LI" #x13B5) + ("CHEROKEE LETTER LO" #x13B6) + ("CHEROKEE LETTER LU" #x13B7) + ("CHEROKEE LETTER LV" #x13B8) + ("CHEROKEE LETTER MA" #x13B9) + ("CHEROKEE LETTER ME" #x13BA) + ("CHEROKEE LETTER MI" #x13BB) + ("CHEROKEE LETTER MO" #x13BC) + ("CHEROKEE LETTER MU" #x13BD) + ("CHEROKEE LETTER NA" #x13BE) + ("CHEROKEE LETTER HNA" #x13BF) + ("CHEROKEE LETTER NAH" #x13C0) + ("CHEROKEE LETTER NE" #x13C1) + ("CHEROKEE LETTER NI" #x13C2) + ("CHEROKEE LETTER NO" #x13C3) + ("CHEROKEE LETTER NU" #x13C4) + ("CHEROKEE LETTER NV" #x13C5) + ("CHEROKEE LETTER QUA" #x13C6) + ("CHEROKEE LETTER QUE" #x13C7) + ("CHEROKEE LETTER QUI" #x13C8) + ("CHEROKEE LETTER QUO" #x13C9) + ("CHEROKEE LETTER QUU" #x13CA) + ("CHEROKEE LETTER QUV" #x13CB) + ("CHEROKEE LETTER SA" #x13CC) + ("CHEROKEE LETTER S" #x13CD) + ("CHEROKEE LETTER SE" #x13CE) + ("CHEROKEE LETTER SI" #x13CF) + ("CHEROKEE LETTER SO" #x13D0) + ("CHEROKEE LETTER SU" #x13D1) + ("CHEROKEE LETTER SV" #x13D2) + ("CHEROKEE LETTER DA" #x13D3) + ("CHEROKEE LETTER TA" #x13D4) + ("CHEROKEE LETTER DE" #x13D5) + ("CHEROKEE LETTER TE" #x13D6) + ("CHEROKEE LETTER DI" #x13D7) + ("CHEROKEE LETTER TI" #x13D8) + ("CHEROKEE LETTER DO" #x13D9) + ("CHEROKEE LETTER DU" #x13DA) + ("CHEROKEE LETTER DV" #x13DB) + ("CHEROKEE LETTER DLA" #x13DC) + ("CHEROKEE LETTER TLA" #x13DD) + ("CHEROKEE LETTER TLE" #x13DE) + ("CHEROKEE LETTER TLI" #x13DF) + ("CHEROKEE LETTER TLO" #x13E0) + ("CHEROKEE LETTER TLU" #x13E1) + ("CHEROKEE LETTER TLV" #x13E2) + ("CHEROKEE LETTER TSA" #x13E3) + ("CHEROKEE LETTER TSE" #x13E4) + ("CHEROKEE LETTER TSI" #x13E5) + ("CHEROKEE LETTER TSO" #x13E6) + ("CHEROKEE LETTER TSU" #x13E7) + ("CHEROKEE LETTER TSV" #x13E8) + ("CHEROKEE LETTER WA" #x13E9) + ("CHEROKEE LETTER WE" #x13EA) + ("CHEROKEE LETTER WI" #x13EB) + ("CHEROKEE LETTER WO" #x13EC) + ("CHEROKEE LETTER WU" #x13ED) + ("CHEROKEE LETTER WV" #x13EE) + ("CHEROKEE LETTER YA" #x13EF) + ("CHEROKEE LETTER YE" #x13F0) + ("CHEROKEE LETTER YI" #x13F1) + ("CHEROKEE LETTER YO" #x13F2) + ("CHEROKEE LETTER YU" #x13F3) + ("CHEROKEE LETTER YV" #x13F4) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/01400-0167F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,632 @@ +(nxml-define-char-name-set 'unified-canadian-aboriginal-syllabics + '(("CANADIAN SYLLABICS E" #x1401) + ("CANADIAN SYLLABICS AAI" #x1402) + ("CANADIAN SYLLABICS I" #x1403) + ("CANADIAN SYLLABICS II" #x1404) + ("CANADIAN SYLLABICS O" #x1405) + ("CANADIAN SYLLABICS OO" #x1406) + ("CANADIAN SYLLABICS Y-CREE OO" #x1407) + ("CANADIAN SYLLABICS CARRIER EE" #x1408) + ("CANADIAN SYLLABICS CARRIER I" #x1409) + ("CANADIAN SYLLABICS A" #x140A) + ("CANADIAN SYLLABICS AA" #x140B) + ("CANADIAN SYLLABICS WE" #x140C) + ("CANADIAN SYLLABICS WEST-CREE WE" #x140D) + ("CANADIAN SYLLABICS WI" #x140E) + ("CANADIAN SYLLABICS WEST-CREE WI" #x140F) + ("CANADIAN SYLLABICS WII" #x1410) + ("CANADIAN SYLLABICS WEST-CREE WII" #x1411) + ("CANADIAN SYLLABICS WO" #x1412) + ("CANADIAN SYLLABICS WEST-CREE WO" #x1413) + ("CANADIAN SYLLABICS WOO" #x1414) + ("CANADIAN SYLLABICS WEST-CREE WOO" #x1415) + ("CANADIAN SYLLABICS NASKAPI WOO" #x1416) + ("CANADIAN SYLLABICS WA" #x1417) + ("CANADIAN SYLLABICS WEST-CREE WA" #x1418) + ("CANADIAN SYLLABICS WAA" #x1419) + ("CANADIAN SYLLABICS WEST-CREE WAA" #x141A) + ("CANADIAN SYLLABICS NASKAPI WAA" #x141B) + ("CANADIAN SYLLABICS AI" #x141C) + ("CANADIAN SYLLABICS Y-CREE W" #x141D) + ("CANADIAN SYLLABICS GLOTTAL STOP" #x141E) + ("CANADIAN SYLLABICS FINAL ACUTE" #x141F) + ("CANADIAN SYLLABICS FINAL GRAVE" #x1420) + ("CANADIAN SYLLABICS FINAL BOTTOM HALF RING" #x1421) + ("CANADIAN SYLLABICS FINAL TOP HALF RING" #x1422) + ("CANADIAN SYLLABICS FINAL RIGHT HALF RING" #x1423) + ("CANADIAN SYLLABICS FINAL RING" #x1424) + ("CANADIAN SYLLABICS FINAL DOUBLE ACUTE" #x1425) + ("CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES" #x1426) + ("CANADIAN SYLLABICS FINAL MIDDLE DOT" #x1427) + ("CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE" #x1428) + ("CANADIAN SYLLABICS FINAL PLUS" #x1429) + ("CANADIAN SYLLABICS FINAL DOWN TACK" #x142A) + ("CANADIAN SYLLABICS EN" #x142B) + ("CANADIAN SYLLABICS IN" #x142C) + ("CANADIAN SYLLABICS ON" #x142D) + ("CANADIAN SYLLABICS AN" #x142E) + ("CANADIAN SYLLABICS PE" #x142F) + ("CANADIAN SYLLABICS PAAI" #x1430) + ("CANADIAN SYLLABICS PI" #x1431) + ("CANADIAN SYLLABICS PII" #x1432) + ("CANADIAN SYLLABICS PO" #x1433) + ("CANADIAN SYLLABICS POO" #x1434) + ("CANADIAN SYLLABICS Y-CREE POO" #x1435) + ("CANADIAN SYLLABICS CARRIER HEE" #x1436) + ("CANADIAN SYLLABICS CARRIER HI" #x1437) + ("CANADIAN SYLLABICS PA" #x1438) + ("CANADIAN SYLLABICS PAA" #x1439) + ("CANADIAN SYLLABICS PWE" #x143A) + ("CANADIAN SYLLABICS WEST-CREE PWE" #x143B) + ("CANADIAN SYLLABICS PWI" #x143C) + ("CANADIAN SYLLABICS WEST-CREE PWI" #x143D) + ("CANADIAN SYLLABICS PWII" #x143E) + ("CANADIAN SYLLABICS WEST-CREE PWII" #x143F) + ("CANADIAN SYLLABICS PWO" #x1440) + ("CANADIAN SYLLABICS WEST-CREE PWO" #x1441) + ("CANADIAN SYLLABICS PWOO" #x1442) + ("CANADIAN SYLLABICS WEST-CREE PWOO" #x1443) + ("CANADIAN SYLLABICS PWA" #x1444) + ("CANADIAN SYLLABICS WEST-CREE PWA" #x1445) + ("CANADIAN SYLLABICS PWAA" #x1446) + ("CANADIAN SYLLABICS WEST-CREE PWAA" #x1447) + ("CANADIAN SYLLABICS Y-CREE PWAA" #x1448) + ("CANADIAN SYLLABICS P" #x1449) + ("CANADIAN SYLLABICS WEST-CREE P" #x144A) + ("CANADIAN SYLLABICS CARRIER H" #x144B) + ("CANADIAN SYLLABICS TE" #x144C) + ("CANADIAN SYLLABICS TAAI" #x144D) + ("CANADIAN SYLLABICS TI" #x144E) + ("CANADIAN SYLLABICS TII" #x144F) + ("CANADIAN SYLLABICS TO" #x1450) + ("CANADIAN SYLLABICS TOO" #x1451) + ("CANADIAN SYLLABICS Y-CREE TOO" #x1452) + ("CANADIAN SYLLABICS CARRIER DEE" #x1453) + ("CANADIAN SYLLABICS CARRIER DI" #x1454) + ("CANADIAN SYLLABICS TA" #x1455) + ("CANADIAN SYLLABICS TAA" #x1456) + ("CANADIAN SYLLABICS TWE" #x1457) + ("CANADIAN SYLLABICS WEST-CREE TWE" #x1458) + ("CANADIAN SYLLABICS TWI" #x1459) + ("CANADIAN SYLLABICS WEST-CREE TWI" #x145A) + ("CANADIAN SYLLABICS TWII" #x145B) + ("CANADIAN SYLLABICS WEST-CREE TWII" #x145C) + ("CANADIAN SYLLABICS TWO" #x145D) + ("CANADIAN SYLLABICS WEST-CREE TWO" #x145E) + ("CANADIAN SYLLABICS TWOO" #x145F) + ("CANADIAN SYLLABICS WEST-CREE TWOO" #x1460) + ("CANADIAN SYLLABICS TWA" #x1461) + ("CANADIAN SYLLABICS WEST-CREE TWA" #x1462) + ("CANADIAN SYLLABICS TWAA" #x1463) + ("CANADIAN SYLLABICS WEST-CREE TWAA" #x1464) + ("CANADIAN SYLLABICS NASKAPI TWAA" #x1465) + ("CANADIAN SYLLABICS T" #x1466) + ("CANADIAN SYLLABICS TTE" #x1467) + ("CANADIAN SYLLABICS TTI" #x1468) + ("CANADIAN SYLLABICS TTO" #x1469) + ("CANADIAN SYLLABICS TTA" #x146A) + ("CANADIAN SYLLABICS KE" #x146B) + ("CANADIAN SYLLABICS KAAI" #x146C) + ("CANADIAN SYLLABICS KI" #x146D) + ("CANADIAN SYLLABICS KII" #x146E) + ("CANADIAN SYLLABICS KO" #x146F) + ("CANADIAN SYLLABICS KOO" #x1470) + ("CANADIAN SYLLABICS Y-CREE KOO" #x1471) + ("CANADIAN SYLLABICS KA" #x1472) + ("CANADIAN SYLLABICS KAA" #x1473) + ("CANADIAN SYLLABICS KWE" #x1474) + ("CANADIAN SYLLABICS WEST-CREE KWE" #x1475) + ("CANADIAN SYLLABICS KWI" #x1476) + ("CANADIAN SYLLABICS WEST-CREE KWI" #x1477) + ("CANADIAN SYLLABICS KWII" #x1478) + ("CANADIAN SYLLABICS WEST-CREE KWII" #x1479) + ("CANADIAN SYLLABICS KWO" #x147A) + ("CANADIAN SYLLABICS WEST-CREE KWO" #x147B) + ("CANADIAN SYLLABICS KWOO" #x147C) + ("CANADIAN SYLLABICS WEST-CREE KWOO" #x147D) + ("CANADIAN SYLLABICS KWA" #x147E) + ("CANADIAN SYLLABICS WEST-CREE KWA" #x147F) + ("CANADIAN SYLLABICS KWAA" #x1480) + ("CANADIAN SYLLABICS WEST-CREE KWAA" #x1481) + ("CANADIAN SYLLABICS NASKAPI KWAA" #x1482) + ("CANADIAN SYLLABICS K" #x1483) + ("CANADIAN SYLLABICS KW" #x1484) + ("CANADIAN SYLLABICS SOUTH-SLAVEY KEH" #x1485) + ("CANADIAN SYLLABICS SOUTH-SLAVEY KIH" #x1486) + ("CANADIAN SYLLABICS SOUTH-SLAVEY KOH" #x1487) + ("CANADIAN SYLLABICS SOUTH-SLAVEY KAH" #x1488) + ("CANADIAN SYLLABICS CE" #x1489) + ("CANADIAN SYLLABICS CAAI" #x148A) + ("CANADIAN SYLLABICS CI" #x148B) + ("CANADIAN SYLLABICS CII" #x148C) + ("CANADIAN SYLLABICS CO" #x148D) + ("CANADIAN SYLLABICS COO" #x148E) + ("CANADIAN SYLLABICS Y-CREE COO" #x148F) + ("CANADIAN SYLLABICS CA" #x1490) + ("CANADIAN SYLLABICS CAA" #x1491) + ("CANADIAN SYLLABICS CWE" #x1492) + ("CANADIAN SYLLABICS WEST-CREE CWE" #x1493) + ("CANADIAN SYLLABICS CWI" #x1494) + ("CANADIAN SYLLABICS WEST-CREE CWI" #x1495) + ("CANADIAN SYLLABICS CWII" #x1496) + ("CANADIAN SYLLABICS WEST-CREE CWII" #x1497) + ("CANADIAN SYLLABICS CWO" #x1498) + ("CANADIAN SYLLABICS WEST-CREE CWO" #x1499) + ("CANADIAN SYLLABICS CWOO" #x149A) + ("CANADIAN SYLLABICS WEST-CREE CWOO" #x149B) + ("CANADIAN SYLLABICS CWA" #x149C) + ("CANADIAN SYLLABICS WEST-CREE CWA" #x149D) + ("CANADIAN SYLLABICS CWAA" #x149E) + ("CANADIAN SYLLABICS WEST-CREE CWAA" #x149F) + ("CANADIAN SYLLABICS NASKAPI CWAA" #x14A0) + ("CANADIAN SYLLABICS C" #x14A1) + ("CANADIAN SYLLABICS SAYISI TH" #x14A2) + ("CANADIAN SYLLABICS ME" #x14A3) + ("CANADIAN SYLLABICS MAAI" #x14A4) + ("CANADIAN SYLLABICS MI" #x14A5) + ("CANADIAN SYLLABICS MII" #x14A6) + ("CANADIAN SYLLABICS MO" #x14A7) + ("CANADIAN SYLLABICS MOO" #x14A8) + ("CANADIAN SYLLABICS Y-CREE MOO" #x14A9) + ("CANADIAN SYLLABICS MA" #x14AA) + ("CANADIAN SYLLABICS MAA" #x14AB) + ("CANADIAN SYLLABICS MWE" #x14AC) + ("CANADIAN SYLLABICS WEST-CREE MWE" #x14AD) + ("CANADIAN SYLLABICS MWI" #x14AE) + ("CANADIAN SYLLABICS WEST-CREE MWI" #x14AF) + ("CANADIAN SYLLABICS MWII" #x14B0) + ("CANADIAN SYLLABICS WEST-CREE MWII" #x14B1) + ("CANADIAN SYLLABICS MWO" #x14B2) + ("CANADIAN SYLLABICS WEST-CREE MWO" #x14B3) + ("CANADIAN SYLLABICS MWOO" #x14B4) + ("CANADIAN SYLLABICS WEST-CREE MWOO" #x14B5) + ("CANADIAN SYLLABICS MWA" #x14B6) + ("CANADIAN SYLLABICS WEST-CREE MWA" #x14B7) + ("CANADIAN SYLLABICS MWAA" #x14B8) + ("CANADIAN SYLLABICS WEST-CREE MWAA" #x14B9) + ("CANADIAN SYLLABICS NASKAPI MWAA" #x14BA) + ("CANADIAN SYLLABICS M" #x14BB) + ("CANADIAN SYLLABICS WEST-CREE M" #x14BC) + ("CANADIAN SYLLABICS MH" #x14BD) + ("CANADIAN SYLLABICS ATHAPASCAN M" #x14BE) + ("CANADIAN SYLLABICS SAYISI M" #x14BF) + ("CANADIAN SYLLABICS NE" #x14C0) + ("CANADIAN SYLLABICS NAAI" #x14C1) + ("CANADIAN SYLLABICS NI" #x14C2) + ("CANADIAN SYLLABICS NII" #x14C3) + ("CANADIAN SYLLABICS NO" #x14C4) + ("CANADIAN SYLLABICS NOO" #x14C5) + ("CANADIAN SYLLABICS Y-CREE NOO" #x14C6) + ("CANADIAN SYLLABICS NA" #x14C7) + ("CANADIAN SYLLABICS NAA" #x14C8) + ("CANADIAN SYLLABICS NWE" #x14C9) + ("CANADIAN SYLLABICS WEST-CREE NWE" #x14CA) + ("CANADIAN SYLLABICS NWA" #x14CB) + ("CANADIAN SYLLABICS WEST-CREE NWA" #x14CC) + ("CANADIAN SYLLABICS NWAA" #x14CD) + ("CANADIAN SYLLABICS WEST-CREE NWAA" #x14CE) + ("CANADIAN SYLLABICS NASKAPI NWAA" #x14CF) + ("CANADIAN SYLLABICS N" #x14D0) + ("CANADIAN SYLLABICS CARRIER NG" #x14D1) + ("CANADIAN SYLLABICS NH" #x14D2) + ("CANADIAN SYLLABICS LE" #x14D3) + ("CANADIAN SYLLABICS LAAI" #x14D4) + ("CANADIAN SYLLABICS LI" #x14D5) + ("CANADIAN SYLLABICS LII" #x14D6) + ("CANADIAN SYLLABICS LO" #x14D7) + ("CANADIAN SYLLABICS LOO" #x14D8) + ("CANADIAN SYLLABICS Y-CREE LOO" #x14D9) + ("CANADIAN SYLLABICS LA" #x14DA) + ("CANADIAN SYLLABICS LAA" #x14DB) + ("CANADIAN SYLLABICS LWE" #x14DC) + ("CANADIAN SYLLABICS WEST-CREE LWE" #x14DD) + ("CANADIAN SYLLABICS LWI" #x14DE) + ("CANADIAN SYLLABICS WEST-CREE LWI" #x14DF) + ("CANADIAN SYLLABICS LWII" #x14E0) + ("CANADIAN SYLLABICS WEST-CREE LWII" #x14E1) + ("CANADIAN SYLLABICS LWO" #x14E2) + ("CANADIAN SYLLABICS WEST-CREE LWO" #x14E3) + ("CANADIAN SYLLABICS LWOO" #x14E4) + ("CANADIAN SYLLABICS WEST-CREE LWOO" #x14E5) + ("CANADIAN SYLLABICS LWA" #x14E6) + ("CANADIAN SYLLABICS WEST-CREE LWA" #x14E7) + ("CANADIAN SYLLABICS LWAA" #x14E8) + ("CANADIAN SYLLABICS WEST-CREE LWAA" #x14E9) + ("CANADIAN SYLLABICS L" #x14EA) + ("CANADIAN SYLLABICS WEST-CREE L" #x14EB) + ("CANADIAN SYLLABICS MEDIAL L" #x14EC) + ("CANADIAN SYLLABICS SE" #x14ED) + ("CANADIAN SYLLABICS SAAI" #x14EE) + ("CANADIAN SYLLABICS SI" #x14EF) + ("CANADIAN SYLLABICS SII" #x14F0) + ("CANADIAN SYLLABICS SO" #x14F1) + ("CANADIAN SYLLABICS SOO" #x14F2) + ("CANADIAN SYLLABICS Y-CREE SOO" #x14F3) + ("CANADIAN SYLLABICS SA" #x14F4) + ("CANADIAN SYLLABICS SAA" #x14F5) + ("CANADIAN SYLLABICS SWE" #x14F6) + ("CANADIAN SYLLABICS WEST-CREE SWE" #x14F7) + ("CANADIAN SYLLABICS SWI" #x14F8) + ("CANADIAN SYLLABICS WEST-CREE SWI" #x14F9) + ("CANADIAN SYLLABICS SWII" #x14FA) + ("CANADIAN SYLLABICS WEST-CREE SWII" #x14FB) + ("CANADIAN SYLLABICS SWO" #x14FC) + ("CANADIAN SYLLABICS WEST-CREE SWO" #x14FD) + ("CANADIAN SYLLABICS SWOO" #x14FE) + ("CANADIAN SYLLABICS WEST-CREE SWOO" #x14FF) + ("CANADIAN SYLLABICS SWA" #x1500) + ("CANADIAN SYLLABICS WEST-CREE SWA" #x1501) + ("CANADIAN SYLLABICS SWAA" #x1502) + ("CANADIAN SYLLABICS WEST-CREE SWAA" #x1503) + ("CANADIAN SYLLABICS NASKAPI SWAA" #x1504) + ("CANADIAN SYLLABICS S" #x1505) + ("CANADIAN SYLLABICS ATHAPASCAN S" #x1506) + ("CANADIAN SYLLABICS SW" #x1507) + ("CANADIAN SYLLABICS BLACKFOOT S" #x1508) + ("CANADIAN SYLLABICS MOOSE-CREE SK" #x1509) + ("CANADIAN SYLLABICS NASKAPI SKW" #x150A) + ("CANADIAN SYLLABICS NASKAPI S-W" #x150B) + ("CANADIAN SYLLABICS NASKAPI SPWA" #x150C) + ("CANADIAN SYLLABICS NASKAPI STWA" #x150D) + ("CANADIAN SYLLABICS NASKAPI SKWA" #x150E) + ("CANADIAN SYLLABICS NASKAPI SCWA" #x150F) + ("CANADIAN SYLLABICS SHE" #x1510) + ("CANADIAN SYLLABICS SHI" #x1511) + ("CANADIAN SYLLABICS SHII" #x1512) + ("CANADIAN SYLLABICS SHO" #x1513) + ("CANADIAN SYLLABICS SHOO" #x1514) + ("CANADIAN SYLLABICS SHA" #x1515) + ("CANADIAN SYLLABICS SHAA" #x1516) + ("CANADIAN SYLLABICS SHWE" #x1517) + ("CANADIAN SYLLABICS WEST-CREE SHWE" #x1518) + ("CANADIAN SYLLABICS SHWI" #x1519) + ("CANADIAN SYLLABICS WEST-CREE SHWI" #x151A) + ("CANADIAN SYLLABICS SHWII" #x151B) + ("CANADIAN SYLLABICS WEST-CREE SHWII" #x151C) + ("CANADIAN SYLLABICS SHWO" #x151D) + ("CANADIAN SYLLABICS WEST-CREE SHWO" #x151E) + ("CANADIAN SYLLABICS SHWOO" #x151F) + ("CANADIAN SYLLABICS WEST-CREE SHWOO" #x1520) + ("CANADIAN SYLLABICS SHWA" #x1521) + ("CANADIAN SYLLABICS WEST-CREE SHWA" #x1522) + ("CANADIAN SYLLABICS SHWAA" #x1523) + ("CANADIAN SYLLABICS WEST-CREE SHWAA" #x1524) + ("CANADIAN SYLLABICS SH" #x1525) + ("CANADIAN SYLLABICS YE" #x1526) + ("CANADIAN SYLLABICS YAAI" #x1527) + ("CANADIAN SYLLABICS YI" #x1528) + ("CANADIAN SYLLABICS YII" #x1529) + ("CANADIAN SYLLABICS YO" #x152A) + ("CANADIAN SYLLABICS YOO" #x152B) + ("CANADIAN SYLLABICS Y-CREE YOO" #x152C) + ("CANADIAN SYLLABICS YA" #x152D) + ("CANADIAN SYLLABICS YAA" #x152E) + ("CANADIAN SYLLABICS YWE" #x152F) + ("CANADIAN SYLLABICS WEST-CREE YWE" #x1530) + ("CANADIAN SYLLABICS YWI" #x1531) + ("CANADIAN SYLLABICS WEST-CREE YWI" #x1532) + ("CANADIAN SYLLABICS YWII" #x1533) + ("CANADIAN SYLLABICS WEST-CREE YWII" #x1534) + ("CANADIAN SYLLABICS YWO" #x1535) + ("CANADIAN SYLLABICS WEST-CREE YWO" #x1536) + ("CANADIAN SYLLABICS YWOO" #x1537) + ("CANADIAN SYLLABICS WEST-CREE YWOO" #x1538) + ("CANADIAN SYLLABICS YWA" #x1539) + ("CANADIAN SYLLABICS WEST-CREE YWA" #x153A) + ("CANADIAN SYLLABICS YWAA" #x153B) + ("CANADIAN SYLLABICS WEST-CREE YWAA" #x153C) + ("CANADIAN SYLLABICS NASKAPI YWAA" #x153D) + ("CANADIAN SYLLABICS Y" #x153E) + ("CANADIAN SYLLABICS BIBLE-CREE Y" #x153F) + ("CANADIAN SYLLABICS WEST-CREE Y" #x1540) + ("CANADIAN SYLLABICS SAYISI YI" #x1541) + ("CANADIAN SYLLABICS RE" #x1542) + ("CANADIAN SYLLABICS R-CREE RE" #x1543) + ("CANADIAN SYLLABICS WEST-CREE LE" #x1544) + ("CANADIAN SYLLABICS RAAI" #x1545) + ("CANADIAN SYLLABICS RI" #x1546) + ("CANADIAN SYLLABICS RII" #x1547) + ("CANADIAN SYLLABICS RO" #x1548) + ("CANADIAN SYLLABICS ROO" #x1549) + ("CANADIAN SYLLABICS WEST-CREE LO" #x154A) + ("CANADIAN SYLLABICS RA" #x154B) + ("CANADIAN SYLLABICS RAA" #x154C) + ("CANADIAN SYLLABICS WEST-CREE LA" #x154D) + ("CANADIAN SYLLABICS RWAA" #x154E) + ("CANADIAN SYLLABICS WEST-CREE RWAA" #x154F) + ("CANADIAN SYLLABICS R" #x1550) + ("CANADIAN SYLLABICS WEST-CREE R" #x1551) + ("CANADIAN SYLLABICS MEDIAL R" #x1552) + ("CANADIAN SYLLABICS FE" #x1553) + ("CANADIAN SYLLABICS FAAI" #x1554) + ("CANADIAN SYLLABICS FI" #x1555) + ("CANADIAN SYLLABICS FII" #x1556) + ("CANADIAN SYLLABICS FO" #x1557) + ("CANADIAN SYLLABICS FOO" #x1558) + ("CANADIAN SYLLABICS FA" #x1559) + ("CANADIAN SYLLABICS FAA" #x155A) + ("CANADIAN SYLLABICS FWAA" #x155B) + ("CANADIAN SYLLABICS WEST-CREE FWAA" #x155C) + ("CANADIAN SYLLABICS F" #x155D) + ("CANADIAN SYLLABICS THE" #x155E) + ("CANADIAN SYLLABICS N-CREE THE" #x155F) + ("CANADIAN SYLLABICS THI" #x1560) + ("CANADIAN SYLLABICS N-CREE THI" #x1561) + ("CANADIAN SYLLABICS THII" #x1562) + ("CANADIAN SYLLABICS N-CREE THII" #x1563) + ("CANADIAN SYLLABICS THO" #x1564) + ("CANADIAN SYLLABICS THOO" #x1565) + ("CANADIAN SYLLABICS THA" #x1566) + ("CANADIAN SYLLABICS THAA" #x1567) + ("CANADIAN SYLLABICS THWAA" #x1568) + ("CANADIAN SYLLABICS WEST-CREE THWAA" #x1569) + ("CANADIAN SYLLABICS TH" #x156A) + ("CANADIAN SYLLABICS TTHE" #x156B) + ("CANADIAN SYLLABICS TTHI" #x156C) + ("CANADIAN SYLLABICS TTHO" #x156D) + ("CANADIAN SYLLABICS TTHA" #x156E) + ("CANADIAN SYLLABICS TTH" #x156F) + ("CANADIAN SYLLABICS TYE" #x1570) + ("CANADIAN SYLLABICS TYI" #x1571) + ("CANADIAN SYLLABICS TYO" #x1572) + ("CANADIAN SYLLABICS TYA" #x1573) + ("CANADIAN SYLLABICS NUNAVIK HE" #x1574) + ("CANADIAN SYLLABICS NUNAVIK HI" #x1575) + ("CANADIAN SYLLABICS NUNAVIK HII" #x1576) + ("CANADIAN SYLLABICS NUNAVIK HO" #x1577) + ("CANADIAN SYLLABICS NUNAVIK HOO" #x1578) + ("CANADIAN SYLLABICS NUNAVIK HA" #x1579) + ("CANADIAN SYLLABICS NUNAVIK HAA" #x157A) + ("CANADIAN SYLLABICS NUNAVIK H" #x157B) + ("CANADIAN SYLLABICS NUNAVUT H" #x157C) + ("CANADIAN SYLLABICS HK" #x157D) + ("CANADIAN SYLLABICS QAAI" #x157E) + ("CANADIAN SYLLABICS QI" #x157F) + ("CANADIAN SYLLABICS QII" #x1580) + ("CANADIAN SYLLABICS QO" #x1581) + ("CANADIAN SYLLABICS QOO" #x1582) + ("CANADIAN SYLLABICS QA" #x1583) + ("CANADIAN SYLLABICS QAA" #x1584) + ("CANADIAN SYLLABICS Q" #x1585) + ("CANADIAN SYLLABICS TLHE" #x1586) + ("CANADIAN SYLLABICS TLHI" #x1587) + ("CANADIAN SYLLABICS TLHO" #x1588) + ("CANADIAN SYLLABICS TLHA" #x1589) + ("CANADIAN SYLLABICS WEST-CREE RE" #x158A) + ("CANADIAN SYLLABICS WEST-CREE RI" #x158B) + ("CANADIAN SYLLABICS WEST-CREE RO" #x158C) + ("CANADIAN SYLLABICS WEST-CREE RA" #x158D) + ("CANADIAN SYLLABICS NGAAI" #x158E) + ("CANADIAN SYLLABICS NGI" #x158F) + ("CANADIAN SYLLABICS NGII" #x1590) + ("CANADIAN SYLLABICS NGO" #x1591) + ("CANADIAN SYLLABICS NGOO" #x1592) + ("CANADIAN SYLLABICS NGA" #x1593) + ("CANADIAN SYLLABICS NGAA" #x1594) + ("CANADIAN SYLLABICS NG" #x1595) + ("CANADIAN SYLLABICS NNG" #x1596) + ("CANADIAN SYLLABICS SAYISI SHE" #x1597) + ("CANADIAN SYLLABICS SAYISI SHI" #x1598) + ("CANADIAN SYLLABICS SAYISI SHO" #x1599) + ("CANADIAN SYLLABICS SAYISI SHA" #x159A) + ("CANADIAN SYLLABICS WOODS-CREE THE" #x159B) + ("CANADIAN SYLLABICS WOODS-CREE THI" #x159C) + ("CANADIAN SYLLABICS WOODS-CREE THO" #x159D) + ("CANADIAN SYLLABICS WOODS-CREE THA" #x159E) + ("CANADIAN SYLLABICS WOODS-CREE TH" #x159F) + ("CANADIAN SYLLABICS LHI" #x15A0) + ("CANADIAN SYLLABICS LHII" #x15A1) + ("CANADIAN SYLLABICS LHO" #x15A2) + ("CANADIAN SYLLABICS LHOO" #x15A3) + ("CANADIAN SYLLABICS LHA" #x15A4) + ("CANADIAN SYLLABICS LHAA" #x15A5) + ("CANADIAN SYLLABICS LH" #x15A6) + ("CANADIAN SYLLABICS TH-CREE THE" #x15A7) + ("CANADIAN SYLLABICS TH-CREE THI" #x15A8) + ("CANADIAN SYLLABICS TH-CREE THII" #x15A9) + ("CANADIAN SYLLABICS TH-CREE THO" #x15AA) + ("CANADIAN SYLLABICS TH-CREE THOO" #x15AB) + ("CANADIAN SYLLABICS TH-CREE THA" #x15AC) + ("CANADIAN SYLLABICS TH-CREE THAA" #x15AD) + ("CANADIAN SYLLABICS TH-CREE TH" #x15AE) + ("CANADIAN SYLLABICS AIVILIK B" #x15AF) + ("CANADIAN SYLLABICS BLACKFOOT E" #x15B0) + ("CANADIAN SYLLABICS BLACKFOOT I" #x15B1) + ("CANADIAN SYLLABICS BLACKFOOT O" #x15B2) + ("CANADIAN SYLLABICS BLACKFOOT A" #x15B3) + ("CANADIAN SYLLABICS BLACKFOOT WE" #x15B4) + ("CANADIAN SYLLABICS BLACKFOOT WI" #x15B5) + ("CANADIAN SYLLABICS BLACKFOOT WO" #x15B6) + ("CANADIAN SYLLABICS BLACKFOOT WA" #x15B7) + ("CANADIAN SYLLABICS BLACKFOOT NE" #x15B8) + ("CANADIAN SYLLABICS BLACKFOOT NI" #x15B9) + ("CANADIAN SYLLABICS BLACKFOOT NO" #x15BA) + ("CANADIAN SYLLABICS BLACKFOOT NA" #x15BB) + ("CANADIAN SYLLABICS BLACKFOOT KE" #x15BC) + ("CANADIAN SYLLABICS BLACKFOOT KI" #x15BD) + ("CANADIAN SYLLABICS BLACKFOOT KO" #x15BE) + ("CANADIAN SYLLABICS BLACKFOOT KA" #x15BF) + ("CANADIAN SYLLABICS SAYISI HE" #x15C0) + ("CANADIAN SYLLABICS SAYISI HI" #x15C1) + ("CANADIAN SYLLABICS SAYISI HO" #x15C2) + ("CANADIAN SYLLABICS SAYISI HA" #x15C3) + ("CANADIAN SYLLABICS CARRIER GHU" #x15C4) + ("CANADIAN SYLLABICS CARRIER GHO" #x15C5) + ("CANADIAN SYLLABICS CARRIER GHE" #x15C6) + ("CANADIAN SYLLABICS CARRIER GHEE" #x15C7) + ("CANADIAN SYLLABICS CARRIER GHI" #x15C8) + ("CANADIAN SYLLABICS CARRIER GHA" #x15C9) + ("CANADIAN SYLLABICS CARRIER RU" #x15CA) + ("CANADIAN SYLLABICS CARRIER RO" #x15CB) + ("CANADIAN SYLLABICS CARRIER RE" #x15CC) + ("CANADIAN SYLLABICS CARRIER REE" #x15CD) + ("CANADIAN SYLLABICS CARRIER RI" #x15CE) + ("CANADIAN SYLLABICS CARRIER RA" #x15CF) + ("CANADIAN SYLLABICS CARRIER WU" #x15D0) + ("CANADIAN SYLLABICS CARRIER WO" #x15D1) + ("CANADIAN SYLLABICS CARRIER WE" #x15D2) + ("CANADIAN SYLLABICS CARRIER WEE" #x15D3) + ("CANADIAN SYLLABICS CARRIER WI" #x15D4) + ("CANADIAN SYLLABICS CARRIER WA" #x15D5) + ("CANADIAN SYLLABICS CARRIER HWU" #x15D6) + ("CANADIAN SYLLABICS CARRIER HWO" #x15D7) + ("CANADIAN SYLLABICS CARRIER HWE" #x15D8) + ("CANADIAN SYLLABICS CARRIER HWEE" #x15D9) + ("CANADIAN SYLLABICS CARRIER HWI" #x15DA) + ("CANADIAN SYLLABICS CARRIER HWA" #x15DB) + ("CANADIAN SYLLABICS CARRIER THU" #x15DC) + ("CANADIAN SYLLABICS CARRIER THO" #x15DD) + ("CANADIAN SYLLABICS CARRIER THE" #x15DE) + ("CANADIAN SYLLABICS CARRIER THEE" #x15DF) + ("CANADIAN SYLLABICS CARRIER THI" #x15E0) + ("CANADIAN SYLLABICS CARRIER THA" #x15E1) + ("CANADIAN SYLLABICS CARRIER TTU" #x15E2) + ("CANADIAN SYLLABICS CARRIER TTO" #x15E3) + ("CANADIAN SYLLABICS CARRIER TTE" #x15E4) + ("CANADIAN SYLLABICS CARRIER TTEE" #x15E5) + ("CANADIAN SYLLABICS CARRIER TTI" #x15E6) + ("CANADIAN SYLLABICS CARRIER TTA" #x15E7) + ("CANADIAN SYLLABICS CARRIER PU" #x15E8) + ("CANADIAN SYLLABICS CARRIER PO" #x15E9) + ("CANADIAN SYLLABICS CARRIER PE" #x15EA) + ("CANADIAN SYLLABICS CARRIER PEE" #x15EB) + ("CANADIAN SYLLABICS CARRIER PI" #x15EC) + ("CANADIAN SYLLABICS CARRIER PA" #x15ED) + ("CANADIAN SYLLABICS CARRIER P" #x15EE) + ("CANADIAN SYLLABICS CARRIER GU" #x15EF) + ("CANADIAN SYLLABICS CARRIER GO" #x15F0) + ("CANADIAN SYLLABICS CARRIER GE" #x15F1) + ("CANADIAN SYLLABICS CARRIER GEE" #x15F2) + ("CANADIAN SYLLABICS CARRIER GI" #x15F3) + ("CANADIAN SYLLABICS CARRIER GA" #x15F4) + ("CANADIAN SYLLABICS CARRIER KHU" #x15F5) + ("CANADIAN SYLLABICS CARRIER KHO" #x15F6) + ("CANADIAN SYLLABICS CARRIER KHE" #x15F7) + ("CANADIAN SYLLABICS CARRIER KHEE" #x15F8) + ("CANADIAN SYLLABICS CARRIER KHI" #x15F9) + ("CANADIAN SYLLABICS CARRIER KHA" #x15FA) + ("CANADIAN SYLLABICS CARRIER KKU" #x15FB) + ("CANADIAN SYLLABICS CARRIER KKO" #x15FC) + ("CANADIAN SYLLABICS CARRIER KKE" #x15FD) + ("CANADIAN SYLLABICS CARRIER KKEE" #x15FE) + ("CANADIAN SYLLABICS CARRIER KKI" #x15FF) + ("CANADIAN SYLLABICS CARRIER KKA" #x1600) + ("CANADIAN SYLLABICS CARRIER KK" #x1601) + ("CANADIAN SYLLABICS CARRIER NU" #x1602) + ("CANADIAN SYLLABICS CARRIER NO" #x1603) + ("CANADIAN SYLLABICS CARRIER NE" #x1604) + ("CANADIAN SYLLABICS CARRIER NEE" #x1605) + ("CANADIAN SYLLABICS CARRIER NI" #x1606) + ("CANADIAN SYLLABICS CARRIER NA" #x1607) + ("CANADIAN SYLLABICS CARRIER MU" #x1608) + ("CANADIAN SYLLABICS CARRIER MO" #x1609) + ("CANADIAN SYLLABICS CARRIER ME" #x160A) + ("CANADIAN SYLLABICS CARRIER MEE" #x160B) + ("CANADIAN SYLLABICS CARRIER MI" #x160C) + ("CANADIAN SYLLABICS CARRIER MA" #x160D) + ("CANADIAN SYLLABICS CARRIER YU" #x160E) + ("CANADIAN SYLLABICS CARRIER YO" #x160F) + ("CANADIAN SYLLABICS CARRIER YE" #x1610) + ("CANADIAN SYLLABICS CARRIER YEE" #x1611) + ("CANADIAN SYLLABICS CARRIER YI" #x1612) + ("CANADIAN SYLLABICS CARRIER YA" #x1613) + ("CANADIAN SYLLABICS CARRIER JU" #x1614) + ("CANADIAN SYLLABICS SAYISI JU" #x1615) + ("CANADIAN SYLLABICS CARRIER JO" #x1616) + ("CANADIAN SYLLABICS CARRIER JE" #x1617) + ("CANADIAN SYLLABICS CARRIER JEE" #x1618) + ("CANADIAN SYLLABICS CARRIER JI" #x1619) + ("CANADIAN SYLLABICS SAYISI JI" #x161A) + ("CANADIAN SYLLABICS CARRIER JA" #x161B) + ("CANADIAN SYLLABICS CARRIER JJU" #x161C) + ("CANADIAN SYLLABICS CARRIER JJO" #x161D) + ("CANADIAN SYLLABICS CARRIER JJE" #x161E) + ("CANADIAN SYLLABICS CARRIER JJEE" #x161F) + ("CANADIAN SYLLABICS CARRIER JJI" #x1620) + ("CANADIAN SYLLABICS CARRIER JJA" #x1621) + ("CANADIAN SYLLABICS CARRIER LU" #x1622) + ("CANADIAN SYLLABICS CARRIER LO" #x1623) + ("CANADIAN SYLLABICS CARRIER LE" #x1624) + ("CANADIAN SYLLABICS CARRIER LEE" #x1625) + ("CANADIAN SYLLABICS CARRIER LI" #x1626) + ("CANADIAN SYLLABICS CARRIER LA" #x1627) + ("CANADIAN SYLLABICS CARRIER DLU" #x1628) + ("CANADIAN SYLLABICS CARRIER DLO" #x1629) + ("CANADIAN SYLLABICS CARRIER DLE" #x162A) + ("CANADIAN SYLLABICS CARRIER DLEE" #x162B) + ("CANADIAN SYLLABICS CARRIER DLI" #x162C) + ("CANADIAN SYLLABICS CARRIER DLA" #x162D) + ("CANADIAN SYLLABICS CARRIER LHU" #x162E) + ("CANADIAN SYLLABICS CARRIER LHO" #x162F) + ("CANADIAN SYLLABICS CARRIER LHE" #x1630) + ("CANADIAN SYLLABICS CARRIER LHEE" #x1631) + ("CANADIAN SYLLABICS CARRIER LHI" #x1632) + ("CANADIAN SYLLABICS CARRIER LHA" #x1633) + ("CANADIAN SYLLABICS CARRIER TLHU" #x1634) + ("CANADIAN SYLLABICS CARRIER TLHO" #x1635) + ("CANADIAN SYLLABICS CARRIER TLHE" #x1636) + ("CANADIAN SYLLABICS CARRIER TLHEE" #x1637) + ("CANADIAN SYLLABICS CARRIER TLHI" #x1638) + ("CANADIAN SYLLABICS CARRIER TLHA" #x1639) + ("CANADIAN SYLLABICS CARRIER TLU" #x163A) + ("CANADIAN SYLLABICS CARRIER TLO" #x163B) + ("CANADIAN SYLLABICS CARRIER TLE" #x163C) + ("CANADIAN SYLLABICS CARRIER TLEE" #x163D) + ("CANADIAN SYLLABICS CARRIER TLI" #x163E) + ("CANADIAN SYLLABICS CARRIER TLA" #x163F) + ("CANADIAN SYLLABICS CARRIER ZU" #x1640) + ("CANADIAN SYLLABICS CARRIER ZO" #x1641) + ("CANADIAN SYLLABICS CARRIER ZE" #x1642) + ("CANADIAN SYLLABICS CARRIER ZEE" #x1643) + ("CANADIAN SYLLABICS CARRIER ZI" #x1644) + ("CANADIAN SYLLABICS CARRIER ZA" #x1645) + ("CANADIAN SYLLABICS CARRIER Z" #x1646) + ("CANADIAN SYLLABICS CARRIER INITIAL Z" #x1647) + ("CANADIAN SYLLABICS CARRIER DZU" #x1648) + ("CANADIAN SYLLABICS CARRIER DZO" #x1649) + ("CANADIAN SYLLABICS CARRIER DZE" #x164A) + ("CANADIAN SYLLABICS CARRIER DZEE" #x164B) + ("CANADIAN SYLLABICS CARRIER DZI" #x164C) + ("CANADIAN SYLLABICS CARRIER DZA" #x164D) + ("CANADIAN SYLLABICS CARRIER SU" #x164E) + ("CANADIAN SYLLABICS CARRIER SO" #x164F) + ("CANADIAN SYLLABICS CARRIER SE" #x1650) + ("CANADIAN SYLLABICS CARRIER SEE" #x1651) + ("CANADIAN SYLLABICS CARRIER SI" #x1652) + ("CANADIAN SYLLABICS CARRIER SA" #x1653) + ("CANADIAN SYLLABICS CARRIER SHU" #x1654) + ("CANADIAN SYLLABICS CARRIER SHO" #x1655) + ("CANADIAN SYLLABICS CARRIER SHE" #x1656) + ("CANADIAN SYLLABICS CARRIER SHEE" #x1657) + ("CANADIAN SYLLABICS CARRIER SHI" #x1658) + ("CANADIAN SYLLABICS CARRIER SHA" #x1659) + ("CANADIAN SYLLABICS CARRIER SH" #x165A) + ("CANADIAN SYLLABICS CARRIER TSU" #x165B) + ("CANADIAN SYLLABICS CARRIER TSO" #x165C) + ("CANADIAN SYLLABICS CARRIER TSE" #x165D) + ("CANADIAN SYLLABICS CARRIER TSEE" #x165E) + ("CANADIAN SYLLABICS CARRIER TSI" #x165F) + ("CANADIAN SYLLABICS CARRIER TSA" #x1660) + ("CANADIAN SYLLABICS CARRIER CHU" #x1661) + ("CANADIAN SYLLABICS CARRIER CHO" #x1662) + ("CANADIAN SYLLABICS CARRIER CHE" #x1663) + ("CANADIAN SYLLABICS CARRIER CHEE" #x1664) + ("CANADIAN SYLLABICS CARRIER CHI" #x1665) + ("CANADIAN SYLLABICS CARRIER CHA" #x1666) + ("CANADIAN SYLLABICS CARRIER TTSU" #x1667) + ("CANADIAN SYLLABICS CARRIER TTSO" #x1668) + ("CANADIAN SYLLABICS CARRIER TTSE" #x1669) + ("CANADIAN SYLLABICS CARRIER TTSEE" #x166A) + ("CANADIAN SYLLABICS CARRIER TTSI" #x166B) + ("CANADIAN SYLLABICS CARRIER TTSA" #x166C) + ("CANADIAN SYLLABICS CHI SIGN" #x166D) + ("CANADIAN SYLLABICS FULL STOP" #x166E) + ("CANADIAN SYLLABICS QAI" #x166F) + ("CANADIAN SYLLABICS NGAI" #x1670) + ("CANADIAN SYLLABICS NNGI" #x1671) + ("CANADIAN SYLLABICS NNGII" #x1672) + ("CANADIAN SYLLABICS NNGO" #x1673) + ("CANADIAN SYLLABICS NNGOO" #x1674) + ("CANADIAN SYLLABICS NNGA" #x1675) + ("CANADIAN SYLLABICS NNGAA" #x1676) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/01680-0169F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,31 @@ +(nxml-define-char-name-set 'ogham + '(("OGHAM SPACE MARK" #x1680) + ("OGHAM LETTER BEITH" #x1681) + ("OGHAM LETTER LUIS" #x1682) + ("OGHAM LETTER FEARN" #x1683) + ("OGHAM LETTER SAIL" #x1684) + ("OGHAM LETTER NION" #x1685) + ("OGHAM LETTER UATH" #x1686) + ("OGHAM LETTER DAIR" #x1687) + ("OGHAM LETTER TINNE" #x1688) + ("OGHAM LETTER COLL" #x1689) + ("OGHAM LETTER CEIRT" #x168A) + ("OGHAM LETTER MUIN" #x168B) + ("OGHAM LETTER GORT" #x168C) + ("OGHAM LETTER NGEADAL" #x168D) + ("OGHAM LETTER STRAIF" #x168E) + ("OGHAM LETTER RUIS" #x168F) + ("OGHAM LETTER AILM" #x1690) + ("OGHAM LETTER ONN" #x1691) + ("OGHAM LETTER UR" #x1692) + ("OGHAM LETTER EADHADH" #x1693) + ("OGHAM LETTER IODHADH" #x1694) + ("OGHAM LETTER EABHADH" #x1695) + ("OGHAM LETTER OR" #x1696) + ("OGHAM LETTER UILLEANN" #x1697) + ("OGHAM LETTER IFIN" #x1698) + ("OGHAM LETTER EAMHANCHOLL" #x1699) + ("OGHAM LETTER PEITH" #x169A) + ("OGHAM FEATHER MARK" #x169B) + ("OGHAM REVERSED FEATHER MARK" #x169C) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/016A0-016FF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,83 @@ +(nxml-define-char-name-set 'runic + '(("RUNIC LETTER FEHU FEOH FE F" #x16A0) + ("RUNIC LETTER V" #x16A1) + ("RUNIC LETTER URUZ UR U" #x16A2) + ("RUNIC LETTER YR" #x16A3) + ("RUNIC LETTER Y" #x16A4) + ("RUNIC LETTER W" #x16A5) + ("RUNIC LETTER THURISAZ THURS THORN" #x16A6) + ("RUNIC LETTER ETH" #x16A7) + ("RUNIC LETTER ANSUZ A" #x16A8) + ("RUNIC LETTER OS O" #x16A9) + ("RUNIC LETTER AC A" #x16AA) + ("RUNIC LETTER AESC" #x16AB) + ("RUNIC LETTER LONG-BRANCH-OSS O" #x16AC) + ("RUNIC LETTER SHORT-TWIG-OSS O" #x16AD) + ("RUNIC LETTER O" #x16AE) + ("RUNIC LETTER OE" #x16AF) + ("RUNIC LETTER ON" #x16B0) + ("RUNIC LETTER RAIDO RAD REID R" #x16B1) + ("RUNIC LETTER KAUNA" #x16B2) + ("RUNIC LETTER CEN" #x16B3) + ("RUNIC LETTER KAUN K" #x16B4) + ("RUNIC LETTER G" #x16B5) + ("RUNIC LETTER ENG" #x16B6) + ("RUNIC LETTER GEBO GYFU G" #x16B7) + ("RUNIC LETTER GAR" #x16B8) + ("RUNIC LETTER WUNJO WYNN W" #x16B9) + ("RUNIC LETTER HAGLAZ H" #x16BA) + ("RUNIC LETTER HAEGL H" #x16BB) + ("RUNIC LETTER LONG-BRANCH-HAGALL H" #x16BC) + ("RUNIC LETTER SHORT-TWIG-HAGALL H" #x16BD) + ("RUNIC LETTER NAUDIZ NYD NAUD N" #x16BE) + ("RUNIC LETTER SHORT-TWIG-NAUD N" #x16BF) + ("RUNIC LETTER DOTTED-N" #x16C0) + ("RUNIC LETTER ISAZ IS ISS I" #x16C1) + ("RUNIC LETTER E" #x16C2) + ("RUNIC LETTER JERAN J" #x16C3) + ("RUNIC LETTER GER" #x16C4) + ("RUNIC LETTER LONG-BRANCH-AR AE" #x16C5) + ("RUNIC LETTER SHORT-TWIG-AR A" #x16C6) + ("RUNIC LETTER IWAZ EOH" #x16C7) + ("RUNIC LETTER PERTHO PEORTH P" #x16C8) + ("RUNIC LETTER ALGIZ EOLHX" #x16C9) + ("RUNIC LETTER SOWILO S" #x16CA) + ("RUNIC LETTER SIGEL LONG-BRANCH-SOL S" #x16CB) + ("RUNIC LETTER SHORT-TWIG-SOL S" #x16CC) + ("RUNIC LETTER C" #x16CD) + ("RUNIC LETTER Z" #x16CE) + ("RUNIC LETTER TIWAZ TIR TYR T" #x16CF) + ("RUNIC LETTER SHORT-TWIG-TYR T" #x16D0) + ("RUNIC LETTER D" #x16D1) + ("RUNIC LETTER BERKANAN BEORC BJARKAN B" #x16D2) + ("RUNIC LETTER SHORT-TWIG-BJARKAN B" #x16D3) + ("RUNIC LETTER DOTTED-P" #x16D4) + ("RUNIC LETTER OPEN-P" #x16D5) + ("RUNIC LETTER EHWAZ EH E" #x16D6) + ("RUNIC LETTER MANNAZ MAN M" #x16D7) + ("RUNIC LETTER LONG-BRANCH-MADR M" #x16D8) + ("RUNIC LETTER SHORT-TWIG-MADR M" #x16D9) + ("RUNIC LETTER LAUKAZ LAGU LOGR L" #x16DA) + ("RUNIC LETTER DOTTED-L" #x16DB) + ("RUNIC LETTER INGWAZ" #x16DC) + ("RUNIC LETTER ING" #x16DD) + ("RUNIC LETTER DAGAZ DAEG D" #x16DE) + ("RUNIC LETTER OTHALAN ETHEL O" #x16DF) + ("RUNIC LETTER EAR" #x16E0) + ("RUNIC LETTER IOR" #x16E1) + ("RUNIC LETTER CWEORTH" #x16E2) + ("RUNIC LETTER CALC" #x16E3) + ("RUNIC LETTER CEALC" #x16E4) + ("RUNIC LETTER STAN" #x16E5) + ("RUNIC LETTER LONG-BRANCH-YR" #x16E6) + ("RUNIC LETTER SHORT-TWIG-YR" #x16E7) + ("RUNIC LETTER ICELANDIC-YR" #x16E8) + ("RUNIC LETTER Q" #x16E9) + ("RUNIC LETTER X" #x16EA) + ("RUNIC SINGLE PUNCTUATION" #x16EB) + ("RUNIC MULTIPLE PUNCTUATION" #x16EC) + ("RUNIC CROSS PUNCTUATION" #x16ED) + ("RUNIC ARLAUG SYMBOL" #x16EE) + ("RUNIC TVIMADUR SYMBOL" #x16EF) + ("RUNIC BELGTHOR SYMBOL" #x16F0) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/01700-0171F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,22 @@ +(nxml-define-char-name-set 'tagalog + '(("TAGALOG LETTER A" #x1700) + ("TAGALOG LETTER I" #x1701) + ("TAGALOG LETTER U" #x1702) + ("TAGALOG LETTER KA" #x1703) + ("TAGALOG LETTER GA" #x1704) + ("TAGALOG LETTER NGA" #x1705) + ("TAGALOG LETTER TA" #x1706) + ("TAGALOG LETTER DA" #x1707) + ("TAGALOG LETTER NA" #x1708) + ("TAGALOG LETTER PA" #x1709) + ("TAGALOG LETTER BA" #x170A) + ("TAGALOG LETTER MA" #x170B) + ("TAGALOG LETTER YA" #x170C) + ("TAGALOG LETTER LA" #x170E) + ("TAGALOG LETTER WA" #x170F) + ("TAGALOG LETTER SA" #x1710) + ("TAGALOG LETTER HA" #x1711) + ("TAGALOG VOWEL SIGN I" #x1712) + ("TAGALOG VOWEL SIGN U" #x1713) + ("TAGALOG SIGN VIRAMA" #x1714) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/01720-0173F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,25 @@ +(nxml-define-char-name-set 'hanunoo + '(("HANUNOO LETTER A" #x1720) + ("HANUNOO LETTER I" #x1721) + ("HANUNOO LETTER U" #x1722) + ("HANUNOO LETTER KA" #x1723) + ("HANUNOO LETTER GA" #x1724) + ("HANUNOO LETTER NGA" #x1725) + ("HANUNOO LETTER TA" #x1726) + ("HANUNOO LETTER DA" #x1727) + ("HANUNOO LETTER NA" #x1728) + ("HANUNOO LETTER PA" #x1729) + ("HANUNOO LETTER BA" #x172A) + ("HANUNOO LETTER MA" #x172B) + ("HANUNOO LETTER YA" #x172C) + ("HANUNOO LETTER RA" #x172D) + ("HANUNOO LETTER LA" #x172E) + ("HANUNOO LETTER WA" #x172F) + ("HANUNOO LETTER SA" #x1730) + ("HANUNOO LETTER HA" #x1731) + ("HANUNOO VOWEL SIGN I" #x1732) + ("HANUNOO VOWEL SIGN U" #x1733) + ("HANUNOO SIGN PAMUDPOD" #x1734) + ("PHILIPPINE SINGLE PUNCTUATION" #x1735) + ("PHILIPPINE DOUBLE PUNCTUATION" #x1736) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/01740-0175F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,22 @@ +(nxml-define-char-name-set 'buhid + '(("BUHID LETTER A" #x1740) + ("BUHID LETTER I" #x1741) + ("BUHID LETTER U" #x1742) + ("BUHID LETTER KA" #x1743) + ("BUHID LETTER GA" #x1744) + ("BUHID LETTER NGA" #x1745) + ("BUHID LETTER TA" #x1746) + ("BUHID LETTER DA" #x1747) + ("BUHID LETTER NA" #x1748) + ("BUHID LETTER PA" #x1749) + ("BUHID LETTER BA" #x174A) + ("BUHID LETTER MA" #x174B) + ("BUHID LETTER YA" #x174C) + ("BUHID LETTER RA" #x174D) + ("BUHID LETTER LA" #x174E) + ("BUHID LETTER WA" #x174F) + ("BUHID LETTER SA" #x1750) + ("BUHID LETTER HA" #x1751) + ("BUHID VOWEL SIGN I" #x1752) + ("BUHID VOWEL SIGN U" #x1753) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/01760-0177F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,20 @@ +(nxml-define-char-name-set 'tagbanwa + '(("TAGBANWA LETTER A" #x1760) + ("TAGBANWA LETTER I" #x1761) + ("TAGBANWA LETTER U" #x1762) + ("TAGBANWA LETTER KA" #x1763) + ("TAGBANWA LETTER GA" #x1764) + ("TAGBANWA LETTER NGA" #x1765) + ("TAGBANWA LETTER TA" #x1766) + ("TAGBANWA LETTER DA" #x1767) + ("TAGBANWA LETTER NA" #x1768) + ("TAGBANWA LETTER PA" #x1769) + ("TAGBANWA LETTER BA" #x176A) + ("TAGBANWA LETTER MA" #x176B) + ("TAGBANWA LETTER YA" #x176C) + ("TAGBANWA LETTER LA" #x176E) + ("TAGBANWA LETTER WA" #x176F) + ("TAGBANWA LETTER SA" #x1770) + ("TAGBANWA VOWEL SIGN I" #x1772) + ("TAGBANWA VOWEL SIGN U" #x1773) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/01780-017FF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,105 @@ +(nxml-define-char-name-set 'khmer + '(("KHMER LETTER KA" #x1780) + ("KHMER LETTER KHA" #x1781) + ("KHMER LETTER KO" #x1782) + ("KHMER LETTER KHO" #x1783) + ("KHMER LETTER NGO" #x1784) + ("KHMER LETTER CA" #x1785) + ("KHMER LETTER CHA" #x1786) + ("KHMER LETTER CO" #x1787) + ("KHMER LETTER CHO" #x1788) + ("KHMER LETTER NYO" #x1789) + ("KHMER LETTER DA" #x178A) + ("KHMER LETTER TTHA" #x178B) + ("KHMER LETTER DO" #x178C) + ("KHMER LETTER TTHO" #x178D) + ("KHMER LETTER NNO" #x178E) + ("KHMER LETTER TA" #x178F) + ("KHMER LETTER THA" #x1790) + ("KHMER LETTER TO" #x1791) + ("KHMER LETTER THO" #x1792) + ("KHMER LETTER NO" #x1793) + ("KHMER LETTER BA" #x1794) + ("KHMER LETTER PHA" #x1795) + ("KHMER LETTER PO" #x1796) + ("KHMER LETTER PHO" #x1797) + ("KHMER LETTER MO" #x1798) + ("KHMER LETTER YO" #x1799) + ("KHMER LETTER RO" #x179A) + ("KHMER LETTER LO" #x179B) + ("KHMER LETTER VO" #x179C) + ("KHMER LETTER SHA" #x179D) + ("KHMER LETTER SSO" #x179E) + ("KHMER LETTER SA" #x179F) + ("KHMER LETTER HA" #x17A0) + ("KHMER LETTER LA" #x17A1) + ("KHMER LETTER QA" #x17A2) + ("KHMER INDEPENDENT VOWEL QAQ" #x17A3) + ("KHMER INDEPENDENT VOWEL QAA" #x17A4) + ("KHMER INDEPENDENT VOWEL QI" #x17A5) + ("KHMER INDEPENDENT VOWEL QII" #x17A6) + ("KHMER INDEPENDENT VOWEL QU" #x17A7) + ("KHMER INDEPENDENT VOWEL QUK" #x17A8) + ("KHMER INDEPENDENT VOWEL QUU" #x17A9) + ("KHMER INDEPENDENT VOWEL QUUV" #x17AA) + ("KHMER INDEPENDENT VOWEL RY" #x17AB) + ("KHMER INDEPENDENT VOWEL RYY" #x17AC) + ("KHMER INDEPENDENT VOWEL LY" #x17AD) + ("KHMER INDEPENDENT VOWEL LYY" #x17AE) + ("KHMER INDEPENDENT VOWEL QE" #x17AF) + ("KHMER INDEPENDENT VOWEL QAI" #x17B0) + ("KHMER INDEPENDENT VOWEL QOO TYPE ONE" #x17B1) + ("KHMER INDEPENDENT VOWEL QOO TYPE TWO" #x17B2) + ("KHMER INDEPENDENT VOWEL QAU" #x17B3) + ("KHMER VOWEL INHERENT AQ" #x17B4) + ("KHMER VOWEL INHERENT AA" #x17B5) + ("KHMER VOWEL SIGN AA" #x17B6) + ("KHMER VOWEL SIGN I" #x17B7) + ("KHMER VOWEL SIGN II" #x17B8) + ("KHMER VOWEL SIGN Y" #x17B9) + ("KHMER VOWEL SIGN YY" #x17BA) + ("KHMER VOWEL SIGN U" #x17BB) + ("KHMER VOWEL SIGN UU" #x17BC) + ("KHMER VOWEL SIGN UA" #x17BD) + ("KHMER VOWEL SIGN OE" #x17BE) + ("KHMER VOWEL SIGN YA" #x17BF) + ("KHMER VOWEL SIGN IE" #x17C0) + ("KHMER VOWEL SIGN E" #x17C1) + ("KHMER VOWEL SIGN AE" #x17C2) + ("KHMER VOWEL SIGN AI" #x17C3) + ("KHMER VOWEL SIGN OO" #x17C4) + ("KHMER VOWEL SIGN AU" #x17C5) + ("KHMER SIGN NIKAHIT" #x17C6) + ("KHMER SIGN REAHMUK" #x17C7) + ("KHMER SIGN YUUKALEAPINTU" #x17C8) + ("KHMER SIGN MUUSIKATOAN" #x17C9) + ("KHMER SIGN TRIISAP" #x17CA) + ("KHMER SIGN BANTOC" #x17CB) + ("KHMER SIGN ROBAT" #x17CC) + ("KHMER SIGN TOANDAKHIAT" #x17CD) + ("KHMER SIGN KAKABAT" #x17CE) + ("KHMER SIGN AHSDA" #x17CF) + ("KHMER SIGN SAMYOK SANNYA" #x17D0) + ("KHMER SIGN VIRIAM" #x17D1) + ("KHMER SIGN COENG" #x17D2) + ("KHMER SIGN BATHAMASAT" #x17D3) + ("KHMER SIGN KHAN" #x17D4) + ("KHMER SIGN BARIYOOSAN" #x17D5) + ("KHMER SIGN CAMNUC PII KUUH" #x17D6) + ("KHMER SIGN LEK TOO" #x17D7) + ("KHMER SIGN BEYYAL" #x17D8) + ("KHMER SIGN PHNAEK MUAN" #x17D9) + ("KHMER SIGN KOOMUUT" #x17DA) + ("KHMER CURRENCY SYMBOL RIEL" #x17DB) + ("KHMER SIGN AVAKRAHASANYA" #x17DC) + ("KHMER DIGIT ZERO" #x17E0) + ("KHMER DIGIT ONE" #x17E1) + ("KHMER DIGIT TWO" #x17E2) + ("KHMER DIGIT THREE" #x17E3) + ("KHMER DIGIT FOUR" #x17E4) + ("KHMER DIGIT FIVE" #x17E5) + ("KHMER DIGIT SIX" #x17E6) + ("KHMER DIGIT SEVEN" #x17E7) + ("KHMER DIGIT EIGHT" #x17E8) + ("KHMER DIGIT NINE" #x17E9) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/01800-018AF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,157 @@ +(nxml-define-char-name-set 'mongolian + '(("MONGOLIAN BIRGA" #x1800) + ("MONGOLIAN ELLIPSIS" #x1801) + ("MONGOLIAN COMMA" #x1802) + ("MONGOLIAN FULL STOP" #x1803) + ("MONGOLIAN COLON" #x1804) + ("MONGOLIAN FOUR DOTS" #x1805) + ("MONGOLIAN TODO SOFT HYPHEN" #x1806) + ("MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER" #x1807) + ("MONGOLIAN MANCHU COMMA" #x1808) + ("MONGOLIAN MANCHU FULL STOP" #x1809) + ("MONGOLIAN NIRUGU" #x180A) + ("MONGOLIAN FREE VARIATION SELECTOR ONE" #x180B) + ("MONGOLIAN FREE VARIATION SELECTOR TWO" #x180C) + ("MONGOLIAN FREE VARIATION SELECTOR THREE" #x180D) + ("MONGOLIAN VOWEL SEPARATOR" #x180E) + ("MONGOLIAN DIGIT ZERO" #x1810) + ("MONGOLIAN DIGIT ONE" #x1811) + ("MONGOLIAN DIGIT TWO" #x1812) + ("MONGOLIAN DIGIT THREE" #x1813) + ("MONGOLIAN DIGIT FOUR" #x1814) + ("MONGOLIAN DIGIT FIVE" #x1815) + ("MONGOLIAN DIGIT SIX" #x1816) + ("MONGOLIAN DIGIT SEVEN" #x1817) + ("MONGOLIAN DIGIT EIGHT" #x1818) + ("MONGOLIAN DIGIT NINE" #x1819) + ("MONGOLIAN LETTER A" #x1820) + ("MONGOLIAN LETTER E" #x1821) + ("MONGOLIAN LETTER I" #x1822) + ("MONGOLIAN LETTER O" #x1823) + ("MONGOLIAN LETTER U" #x1824) + ("MONGOLIAN LETTER OE" #x1825) + ("MONGOLIAN LETTER UE" #x1826) + ("MONGOLIAN LETTER EE" #x1827) + ("MONGOLIAN LETTER NA" #x1828) + ("MONGOLIAN LETTER ANG" #x1829) + ("MONGOLIAN LETTER BA" #x182A) + ("MONGOLIAN LETTER PA" #x182B) + ("MONGOLIAN LETTER QA" #x182C) + ("MONGOLIAN LETTER GA" #x182D) + ("MONGOLIAN LETTER MA" #x182E) + ("MONGOLIAN LETTER LA" #x182F) + ("MONGOLIAN LETTER SA" #x1830) + ("MONGOLIAN LETTER SHA" #x1831) + ("MONGOLIAN LETTER TA" #x1832) + ("MONGOLIAN LETTER DA" #x1833) + ("MONGOLIAN LETTER CHA" #x1834) + ("MONGOLIAN LETTER JA" #x1835) + ("MONGOLIAN LETTER YA" #x1836) + ("MONGOLIAN LETTER RA" #x1837) + ("MONGOLIAN LETTER WA" #x1838) + ("MONGOLIAN LETTER FA" #x1839) + ("MONGOLIAN LETTER KA" #x183A) + ("MONGOLIAN LETTER KHA" #x183B) + ("MONGOLIAN LETTER TSA" #x183C) + ("MONGOLIAN LETTER ZA" #x183D) + ("MONGOLIAN LETTER HAA" #x183E) + ("MONGOLIAN LETTER ZRA" #x183F) + ("MONGOLIAN LETTER LHA" #x1840) + ("MONGOLIAN LETTER ZHI" #x1841) + ("MONGOLIAN LETTER CHI" #x1842) + ("MONGOLIAN LETTER TODO LONG VOWEL SIGN" #x1843) + ("MONGOLIAN LETTER TODO E" #x1844) + ("MONGOLIAN LETTER TODO I" #x1845) + ("MONGOLIAN LETTER TODO O" #x1846) + ("MONGOLIAN LETTER TODO U" #x1847) + ("MONGOLIAN LETTER TODO OE" #x1848) + ("MONGOLIAN LETTER TODO UE" #x1849) + ("MONGOLIAN LETTER TODO ANG" #x184A) + ("MONGOLIAN LETTER TODO BA" #x184B) + ("MONGOLIAN LETTER TODO PA" #x184C) + ("MONGOLIAN LETTER TODO QA" #x184D) + ("MONGOLIAN LETTER TODO GA" #x184E) + ("MONGOLIAN LETTER TODO MA" #x184F) + ("MONGOLIAN LETTER TODO TA" #x1850) + ("MONGOLIAN LETTER TODO DA" #x1851) + ("MONGOLIAN LETTER TODO CHA" #x1852) + ("MONGOLIAN LETTER TODO JA" #x1853) + ("MONGOLIAN LETTER TODO TSA" #x1854) + ("MONGOLIAN LETTER TODO YA" #x1855) + ("MONGOLIAN LETTER TODO WA" #x1856) + ("MONGOLIAN LETTER TODO KA" #x1857) + ("MONGOLIAN LETTER TODO GAA" #x1858) + ("MONGOLIAN LETTER TODO HAA" #x1859) + ("MONGOLIAN LETTER TODO JIA" #x185A) + ("MONGOLIAN LETTER TODO NIA" #x185B) + ("MONGOLIAN LETTER TODO DZA" #x185C) + ("MONGOLIAN LETTER SIBE E" #x185D) + ("MONGOLIAN LETTER SIBE I" #x185E) + ("MONGOLIAN LETTER SIBE IY" #x185F) + ("MONGOLIAN LETTER SIBE UE" #x1860) + ("MONGOLIAN LETTER SIBE U" #x1861) + ("MONGOLIAN LETTER SIBE ANG" #x1862) + ("MONGOLIAN LETTER SIBE KA" #x1863) + ("MONGOLIAN LETTER SIBE GA" #x1864) + ("MONGOLIAN LETTER SIBE HA" #x1865) + ("MONGOLIAN LETTER SIBE PA" #x1866) + ("MONGOLIAN LETTER SIBE SHA" #x1867) + ("MONGOLIAN LETTER SIBE TA" #x1868) + ("MONGOLIAN LETTER SIBE DA" #x1869) + ("MONGOLIAN LETTER SIBE JA" #x186A) + ("MONGOLIAN LETTER SIBE FA" #x186B) + ("MONGOLIAN LETTER SIBE GAA" #x186C) + ("MONGOLIAN LETTER SIBE HAA" #x186D) + ("MONGOLIAN LETTER SIBE TSA" #x186E) + ("MONGOLIAN LETTER SIBE ZA" #x186F) + ("MONGOLIAN LETTER SIBE RAA" #x1870) + ("MONGOLIAN LETTER SIBE CHA" #x1871) + ("MONGOLIAN LETTER SIBE ZHA" #x1872) + ("MONGOLIAN LETTER MANCHU I" #x1873) + ("MONGOLIAN LETTER MANCHU KA" #x1874) + ("MONGOLIAN LETTER MANCHU RA" #x1875) + ("MONGOLIAN LETTER MANCHU FA" #x1876) + ("MONGOLIAN LETTER MANCHU ZHA" #x1877) + ("MONGOLIAN LETTER ALI GALI ANUSVARA ONE" #x1880) + ("MONGOLIAN LETTER ALI GALI VISARGA ONE" #x1881) + ("MONGOLIAN LETTER ALI GALI DAMARU" #x1882) + ("MONGOLIAN LETTER ALI GALI UBADAMA" #x1883) + ("MONGOLIAN LETTER ALI GALI INVERTED UBADAMA" #x1884) + ("MONGOLIAN LETTER ALI GALI BALUDA" #x1885) + ("MONGOLIAN LETTER ALI GALI THREE BALUDA" #x1886) + ("MONGOLIAN LETTER ALI GALI A" #x1887) + ("MONGOLIAN LETTER ALI GALI I" #x1888) + ("MONGOLIAN LETTER ALI GALI KA" #x1889) + ("MONGOLIAN LETTER ALI GALI NGA" #x188A) + ("MONGOLIAN LETTER ALI GALI CA" #x188B) + ("MONGOLIAN LETTER ALI GALI TTA" #x188C) + ("MONGOLIAN LETTER ALI GALI TTHA" #x188D) + ("MONGOLIAN LETTER ALI GALI DDA" #x188E) + ("MONGOLIAN LETTER ALI GALI NNA" #x188F) + ("MONGOLIAN LETTER ALI GALI TA" #x1890) + ("MONGOLIAN LETTER ALI GALI DA" #x1891) + ("MONGOLIAN LETTER ALI GALI PA" #x1892) + ("MONGOLIAN LETTER ALI GALI PHA" #x1893) + ("MONGOLIAN LETTER ALI GALI SSA" #x1894) + ("MONGOLIAN LETTER ALI GALI ZHA" #x1895) + ("MONGOLIAN LETTER ALI GALI ZA" #x1896) + ("MONGOLIAN LETTER ALI GALI AH" #x1897) + ("MONGOLIAN LETTER TODO ALI GALI TA" #x1898) + ("MONGOLIAN LETTER TODO ALI GALI ZHA" #x1899) + ("MONGOLIAN LETTER MANCHU ALI GALI GHA" #x189A) + ("MONGOLIAN LETTER MANCHU ALI GALI NGA" #x189B) + ("MONGOLIAN LETTER MANCHU ALI GALI CA" #x189C) + ("MONGOLIAN LETTER MANCHU ALI GALI JHA" #x189D) + ("MONGOLIAN LETTER MANCHU ALI GALI TTA" #x189E) + ("MONGOLIAN LETTER MANCHU ALI GALI DDHA" #x189F) + ("MONGOLIAN LETTER MANCHU ALI GALI TA" #x18A0) + ("MONGOLIAN LETTER MANCHU ALI GALI DHA" #x18A1) + ("MONGOLIAN LETTER MANCHU ALI GALI SSA" #x18A2) + ("MONGOLIAN LETTER MANCHU ALI GALI CYA" #x18A3) + ("MONGOLIAN LETTER MANCHU ALI GALI ZHA" #x18A4) + ("MONGOLIAN LETTER MANCHU ALI GALI ZA" #x18A5) + ("MONGOLIAN LETTER ALI GALI HALF U" #x18A6) + ("MONGOLIAN LETTER ALI GALI HALF YA" #x18A7) + ("MONGOLIAN LETTER MANCHU ALI GALI BHA" #x18A8) + ("MONGOLIAN LETTER ALI GALI DAGALGA" #x18A9) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/01E00-01EFF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,248 @@ +(nxml-define-char-name-set 'latin-extended-additional + '(("LATIN CAPITAL LETTER A WITH RING BELOW" #x1E00) + ("LATIN SMALL LETTER A WITH RING BELOW" #x1E01) + ("LATIN CAPITAL LETTER B WITH DOT ABOVE" #x1E02) + ("LATIN SMALL LETTER B WITH DOT ABOVE" #x1E03) + ("LATIN CAPITAL LETTER B WITH DOT BELOW" #x1E04) + ("LATIN SMALL LETTER B WITH DOT BELOW" #x1E05) + ("LATIN CAPITAL LETTER B WITH LINE BELOW" #x1E06) + ("LATIN SMALL LETTER B WITH LINE BELOW" #x1E07) + ("LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE" #x1E08) + ("LATIN SMALL LETTER C WITH CEDILLA AND ACUTE" #x1E09) + ("LATIN CAPITAL LETTER D WITH DOT ABOVE" #x1E0A) + ("LATIN SMALL LETTER D WITH DOT ABOVE" #x1E0B) + ("LATIN CAPITAL LETTER D WITH DOT BELOW" #x1E0C) + ("LATIN SMALL LETTER D WITH DOT BELOW" #x1E0D) + ("LATIN CAPITAL LETTER D WITH LINE BELOW" #x1E0E) + ("LATIN SMALL LETTER D WITH LINE BELOW" #x1E0F) + ("LATIN CAPITAL LETTER D WITH CEDILLA" #x1E10) + ("LATIN SMALL LETTER D WITH CEDILLA" #x1E11) + ("LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW" #x1E12) + ("LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW" #x1E13) + ("LATIN CAPITAL LETTER E WITH MACRON AND GRAVE" #x1E14) + ("LATIN SMALL LETTER E WITH MACRON AND GRAVE" #x1E15) + ("LATIN CAPITAL LETTER E WITH MACRON AND ACUTE" #x1E16) + ("LATIN SMALL LETTER E WITH MACRON AND ACUTE" #x1E17) + ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW" #x1E18) + ("LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW" #x1E19) + ("LATIN CAPITAL LETTER E WITH TILDE BELOW" #x1E1A) + ("LATIN SMALL LETTER E WITH TILDE BELOW" #x1E1B) + ("LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE" #x1E1C) + ("LATIN SMALL LETTER E WITH CEDILLA AND BREVE" #x1E1D) + ("LATIN CAPITAL LETTER F WITH DOT ABOVE" #x1E1E) + ("LATIN SMALL LETTER F WITH DOT ABOVE" #x1E1F) + ("LATIN CAPITAL LETTER G WITH MACRON" #x1E20) + ("LATIN SMALL LETTER G WITH MACRON" #x1E21) + ("LATIN CAPITAL LETTER H WITH DOT ABOVE" #x1E22) + ("LATIN SMALL LETTER H WITH DOT ABOVE" #x1E23) + ("LATIN CAPITAL LETTER H WITH DOT BELOW" #x1E24) + ("LATIN SMALL LETTER H WITH DOT BELOW" #x1E25) + ("LATIN CAPITAL LETTER H WITH DIAERESIS" #x1E26) + ("LATIN SMALL LETTER H WITH DIAERESIS" #x1E27) + ("LATIN CAPITAL LETTER H WITH CEDILLA" #x1E28) + ("LATIN SMALL LETTER H WITH CEDILLA" #x1E29) + ("LATIN CAPITAL LETTER H WITH BREVE BELOW" #x1E2A) + ("LATIN SMALL LETTER H WITH BREVE BELOW" #x1E2B) + ("LATIN CAPITAL LETTER I WITH TILDE BELOW" #x1E2C) + ("LATIN SMALL LETTER I WITH TILDE BELOW" #x1E2D) + ("LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE" #x1E2E) + ("LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE" #x1E2F) + ("LATIN CAPITAL LETTER K WITH ACUTE" #x1E30) + ("LATIN SMALL LETTER K WITH ACUTE" #x1E31) + ("LATIN CAPITAL LETTER K WITH DOT BELOW" #x1E32) + ("LATIN SMALL LETTER K WITH DOT BELOW" #x1E33) + ("LATIN CAPITAL LETTER K WITH LINE BELOW" #x1E34) + ("LATIN SMALL LETTER K WITH LINE BELOW" #x1E35) + ("LATIN CAPITAL LETTER L WITH DOT BELOW" #x1E36) + ("LATIN SMALL LETTER L WITH DOT BELOW" #x1E37) + ("LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON" #x1E38) + ("LATIN SMALL LETTER L WITH DOT BELOW AND MACRON" #x1E39) + ("LATIN CAPITAL LETTER L WITH LINE BELOW" #x1E3A) + ("LATIN SMALL LETTER L WITH LINE BELOW" #x1E3B) + ("LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW" #x1E3C) + ("LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW" #x1E3D) + ("LATIN CAPITAL LETTER M WITH ACUTE" #x1E3E) + ("LATIN SMALL LETTER M WITH ACUTE" #x1E3F) + ("LATIN CAPITAL LETTER M WITH DOT ABOVE" #x1E40) + ("LATIN SMALL LETTER M WITH DOT ABOVE" #x1E41) + ("LATIN CAPITAL LETTER M WITH DOT BELOW" #x1E42) + ("LATIN SMALL LETTER M WITH DOT BELOW" #x1E43) + ("LATIN CAPITAL LETTER N WITH DOT ABOVE" #x1E44) + ("LATIN SMALL LETTER N WITH DOT ABOVE" #x1E45) + ("LATIN CAPITAL LETTER N WITH DOT BELOW" #x1E46) + ("LATIN SMALL LETTER N WITH DOT BELOW" #x1E47) + ("LATIN CAPITAL LETTER N WITH LINE BELOW" #x1E48) + ("LATIN SMALL LETTER N WITH LINE BELOW" #x1E49) + ("LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW" #x1E4A) + ("LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW" #x1E4B) + ("LATIN CAPITAL LETTER O WITH TILDE AND ACUTE" #x1E4C) + ("LATIN SMALL LETTER O WITH TILDE AND ACUTE" #x1E4D) + ("LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS" #x1E4E) + ("LATIN SMALL LETTER O WITH TILDE AND DIAERESIS" #x1E4F) + ("LATIN CAPITAL LETTER O WITH MACRON AND GRAVE" #x1E50) + ("LATIN SMALL LETTER O WITH MACRON AND GRAVE" #x1E51) + ("LATIN CAPITAL LETTER O WITH MACRON AND ACUTE" #x1E52) + ("LATIN SMALL LETTER O WITH MACRON AND ACUTE" #x1E53) + ("LATIN CAPITAL LETTER P WITH ACUTE" #x1E54) + ("LATIN SMALL LETTER P WITH ACUTE" #x1E55) + ("LATIN CAPITAL LETTER P WITH DOT ABOVE" #x1E56) + ("LATIN SMALL LETTER P WITH DOT ABOVE" #x1E57) + ("LATIN CAPITAL LETTER R WITH DOT ABOVE" #x1E58) + ("LATIN SMALL LETTER R WITH DOT ABOVE" #x1E59) + ("LATIN CAPITAL LETTER R WITH DOT BELOW" #x1E5A) + ("LATIN SMALL LETTER R WITH DOT BELOW" #x1E5B) + ("LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON" #x1E5C) + ("LATIN SMALL LETTER R WITH DOT BELOW AND MACRON" #x1E5D) + ("LATIN CAPITAL LETTER R WITH LINE BELOW" #x1E5E) + ("LATIN SMALL LETTER R WITH LINE BELOW" #x1E5F) + ("LATIN CAPITAL LETTER S WITH DOT ABOVE" #x1E60) + ("LATIN SMALL LETTER S WITH DOT ABOVE" #x1E61) + ("LATIN CAPITAL LETTER S WITH DOT BELOW" #x1E62) + ("LATIN SMALL LETTER S WITH DOT BELOW" #x1E63) + ("LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE" #x1E64) + ("LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE" #x1E65) + ("LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE" #x1E66) + ("LATIN SMALL LETTER S WITH CARON AND DOT ABOVE" #x1E67) + ("LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE" #x1E68) + ("LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE" #x1E69) + ("LATIN CAPITAL LETTER T WITH DOT ABOVE" #x1E6A) + ("LATIN SMALL LETTER T WITH DOT ABOVE" #x1E6B) + ("LATIN CAPITAL LETTER T WITH DOT BELOW" #x1E6C) + ("LATIN SMALL LETTER T WITH DOT BELOW" #x1E6D) + ("LATIN CAPITAL LETTER T WITH LINE BELOW" #x1E6E) + ("LATIN SMALL LETTER T WITH LINE BELOW" #x1E6F) + ("LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW" #x1E70) + ("LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW" #x1E71) + ("LATIN CAPITAL LETTER U WITH DIAERESIS BELOW" #x1E72) + ("LATIN SMALL LETTER U WITH DIAERESIS BELOW" #x1E73) + ("LATIN CAPITAL LETTER U WITH TILDE BELOW" #x1E74) + ("LATIN SMALL LETTER U WITH TILDE BELOW" #x1E75) + ("LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW" #x1E76) + ("LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW" #x1E77) + ("LATIN CAPITAL LETTER U WITH TILDE AND ACUTE" #x1E78) + ("LATIN SMALL LETTER U WITH TILDE AND ACUTE" #x1E79) + ("LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS" #x1E7A) + ("LATIN SMALL LETTER U WITH MACRON AND DIAERESIS" #x1E7B) + ("LATIN CAPITAL LETTER V WITH TILDE" #x1E7C) + ("LATIN SMALL LETTER V WITH TILDE" #x1E7D) + ("LATIN CAPITAL LETTER V WITH DOT BELOW" #x1E7E) + ("LATIN SMALL LETTER V WITH DOT BELOW" #x1E7F) + ("LATIN CAPITAL LETTER W WITH GRAVE" #x1E80) + ("LATIN SMALL LETTER W WITH GRAVE" #x1E81) + ("LATIN CAPITAL LETTER W WITH ACUTE" #x1E82) + ("LATIN SMALL LETTER W WITH ACUTE" #x1E83) + ("LATIN CAPITAL LETTER W WITH DIAERESIS" #x1E84) + ("LATIN SMALL LETTER W WITH DIAERESIS" #x1E85) + ("LATIN CAPITAL LETTER W WITH DOT ABOVE" #x1E86) + ("LATIN SMALL LETTER W WITH DOT ABOVE" #x1E87) + ("LATIN CAPITAL LETTER W WITH DOT BELOW" #x1E88) + ("LATIN SMALL LETTER W WITH DOT BELOW" #x1E89) + ("LATIN CAPITAL LETTER X WITH DOT ABOVE" #x1E8A) + ("LATIN SMALL LETTER X WITH DOT ABOVE" #x1E8B) + ("LATIN CAPITAL LETTER X WITH DIAERESIS" #x1E8C) + ("LATIN SMALL LETTER X WITH DIAERESIS" #x1E8D) + ("LATIN CAPITAL LETTER Y WITH DOT ABOVE" #x1E8E) + ("LATIN SMALL LETTER Y WITH DOT ABOVE" #x1E8F) + ("LATIN CAPITAL LETTER Z WITH CIRCUMFLEX" #x1E90) + ("LATIN SMALL LETTER Z WITH CIRCUMFLEX" #x1E91) + ("LATIN CAPITAL LETTER Z WITH DOT BELOW" #x1E92) + ("LATIN SMALL LETTER Z WITH DOT BELOW" #x1E93) + ("LATIN CAPITAL LETTER Z WITH LINE BELOW" #x1E94) + ("LATIN SMALL LETTER Z WITH LINE BELOW" #x1E95) + ("LATIN SMALL LETTER H WITH LINE BELOW" #x1E96) + ("LATIN SMALL LETTER T WITH DIAERESIS" #x1E97) + ("LATIN SMALL LETTER W WITH RING ABOVE" #x1E98) + ("LATIN SMALL LETTER Y WITH RING ABOVE" #x1E99) + ("LATIN SMALL LETTER A WITH RIGHT HALF RING" #x1E9A) + ("LATIN SMALL LETTER LONG S WITH DOT ABOVE" #x1E9B) + ("LATIN CAPITAL LETTER A WITH DOT BELOW" #x1EA0) + ("LATIN SMALL LETTER A WITH DOT BELOW" #x1EA1) + ("LATIN CAPITAL LETTER A WITH HOOK ABOVE" #x1EA2) + ("LATIN SMALL LETTER A WITH HOOK ABOVE" #x1EA3) + ("LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE" #x1EA4) + ("LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE" #x1EA5) + ("LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE" #x1EA6) + ("LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE" #x1EA7) + ("LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE" #x1EA8) + ("LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE" #x1EA9) + ("LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE" #x1EAA) + ("LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE" #x1EAB) + ("LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW" #x1EAC) + ("LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW" #x1EAD) + ("LATIN CAPITAL LETTER A WITH BREVE AND ACUTE" #x1EAE) + ("LATIN SMALL LETTER A WITH BREVE AND ACUTE" #x1EAF) + ("LATIN CAPITAL LETTER A WITH BREVE AND GRAVE" #x1EB0) + ("LATIN SMALL LETTER A WITH BREVE AND GRAVE" #x1EB1) + ("LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE" #x1EB2) + ("LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE" #x1EB3) + ("LATIN CAPITAL LETTER A WITH BREVE AND TILDE" #x1EB4) + ("LATIN SMALL LETTER A WITH BREVE AND TILDE" #x1EB5) + ("LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW" #x1EB6) + ("LATIN SMALL LETTER A WITH BREVE AND DOT BELOW" #x1EB7) + ("LATIN CAPITAL LETTER E WITH DOT BELOW" #x1EB8) + ("LATIN SMALL LETTER E WITH DOT BELOW" #x1EB9) + ("LATIN CAPITAL LETTER E WITH HOOK ABOVE" #x1EBA) + ("LATIN SMALL LETTER E WITH HOOK ABOVE" #x1EBB) + ("LATIN CAPITAL LETTER E WITH TILDE" #x1EBC) + ("LATIN SMALL LETTER E WITH TILDE" #x1EBD) + ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE" #x1EBE) + ("LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE" #x1EBF) + ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE" #x1EC0) + ("LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE" #x1EC1) + ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE" #x1EC2) + ("LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE" #x1EC3) + ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE" #x1EC4) + ("LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE" #x1EC5) + ("LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW" #x1EC6) + ("LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW" #x1EC7) + ("LATIN CAPITAL LETTER I WITH HOOK ABOVE" #x1EC8) + ("LATIN SMALL LETTER I WITH HOOK ABOVE" #x1EC9) + ("LATIN CAPITAL LETTER I WITH DOT BELOW" #x1ECA) + ("LATIN SMALL LETTER I WITH DOT BELOW" #x1ECB) + ("LATIN CAPITAL LETTER O WITH DOT BELOW" #x1ECC) + ("LATIN SMALL LETTER O WITH DOT BELOW" #x1ECD) + ("LATIN CAPITAL LETTER O WITH HOOK ABOVE" #x1ECE) + ("LATIN SMALL LETTER O WITH HOOK ABOVE" #x1ECF) + ("LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE" #x1ED0) + ("LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE" #x1ED1) + ("LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE" #x1ED2) + ("LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE" #x1ED3) + ("LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE" #x1ED4) + ("LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE" #x1ED5) + ("LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE" #x1ED6) + ("LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE" #x1ED7) + ("LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW" #x1ED8) + ("LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW" #x1ED9) + ("LATIN CAPITAL LETTER O WITH HORN AND ACUTE" #x1EDA) + ("LATIN SMALL LETTER O WITH HORN AND ACUTE" #x1EDB) + ("LATIN CAPITAL LETTER O WITH HORN AND GRAVE" #x1EDC) + ("LATIN SMALL LETTER O WITH HORN AND GRAVE" #x1EDD) + ("LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE" #x1EDE) + ("LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE" #x1EDF) + ("LATIN CAPITAL LETTER O WITH HORN AND TILDE" #x1EE0) + ("LATIN SMALL LETTER O WITH HORN AND TILDE" #x1EE1) + ("LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW" #x1EE2) + ("LATIN SMALL LETTER O WITH HORN AND DOT BELOW" #x1EE3) + ("LATIN CAPITAL LETTER U WITH DOT BELOW" #x1EE4) + ("LATIN SMALL LETTER U WITH DOT BELOW" #x1EE5) + ("LATIN CAPITAL LETTER U WITH HOOK ABOVE" #x1EE6) + ("LATIN SMALL LETTER U WITH HOOK ABOVE" #x1EE7) + ("LATIN CAPITAL LETTER U WITH HORN AND ACUTE" #x1EE8) + ("LATIN SMALL LETTER U WITH HORN AND ACUTE" #x1EE9) + ("LATIN CAPITAL LETTER U WITH HORN AND GRAVE" #x1EEA) + ("LATIN SMALL LETTER U WITH HORN AND GRAVE" #x1EEB) + ("LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE" #x1EEC) + ("LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE" #x1EED) + ("LATIN CAPITAL LETTER U WITH HORN AND TILDE" #x1EEE) + ("LATIN SMALL LETTER U WITH HORN AND TILDE" #x1EEF) + ("LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW" #x1EF0) + ("LATIN SMALL LETTER U WITH HORN AND DOT BELOW" #x1EF1) + ("LATIN CAPITAL LETTER Y WITH GRAVE" #x1EF2) + ("LATIN SMALL LETTER Y WITH GRAVE" #x1EF3) + ("LATIN CAPITAL LETTER Y WITH DOT BELOW" #x1EF4) + ("LATIN SMALL LETTER Y WITH DOT BELOW" #x1EF5) + ("LATIN CAPITAL LETTER Y WITH HOOK ABOVE" #x1EF6) + ("LATIN SMALL LETTER Y WITH HOOK ABOVE" #x1EF7) + ("LATIN CAPITAL LETTER Y WITH TILDE" #x1EF8) + ("LATIN SMALL LETTER Y WITH TILDE" #x1EF9) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/01F00-01FFF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,235 @@ +(nxml-define-char-name-set 'greek-extended + '(("GREEK SMALL LETTER ALPHA WITH PSILI" #x1F00) + ("GREEK SMALL LETTER ALPHA WITH DASIA" #x1F01) + ("GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA" #x1F02) + ("GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA" #x1F03) + ("GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA" #x1F04) + ("GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA" #x1F05) + ("GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI" #x1F06) + ("GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI" #x1F07) + ("GREEK CAPITAL LETTER ALPHA WITH PSILI" #x1F08) + ("GREEK CAPITAL LETTER ALPHA WITH DASIA" #x1F09) + ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA" #x1F0A) + ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA" #x1F0B) + ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA" #x1F0C) + ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA" #x1F0D) + ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI" #x1F0E) + ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI" #x1F0F) + ("GREEK SMALL LETTER EPSILON WITH PSILI" #x1F10) + ("GREEK SMALL LETTER EPSILON WITH DASIA" #x1F11) + ("GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA" #x1F12) + ("GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA" #x1F13) + ("GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA" #x1F14) + ("GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA" #x1F15) + ("GREEK CAPITAL LETTER EPSILON WITH PSILI" #x1F18) + ("GREEK CAPITAL LETTER EPSILON WITH DASIA" #x1F19) + ("GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA" #x1F1A) + ("GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA" #x1F1B) + ("GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA" #x1F1C) + ("GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA" #x1F1D) + ("GREEK SMALL LETTER ETA WITH PSILI" #x1F20) + ("GREEK SMALL LETTER ETA WITH DASIA" #x1F21) + ("GREEK SMALL LETTER ETA WITH PSILI AND VARIA" #x1F22) + ("GREEK SMALL LETTER ETA WITH DASIA AND VARIA" #x1F23) + ("GREEK SMALL LETTER ETA WITH PSILI AND OXIA" #x1F24) + ("GREEK SMALL LETTER ETA WITH DASIA AND OXIA" #x1F25) + ("GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI" #x1F26) + ("GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI" #x1F27) + ("GREEK CAPITAL LETTER ETA WITH PSILI" #x1F28) + ("GREEK CAPITAL LETTER ETA WITH DASIA" #x1F29) + ("GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA" #x1F2A) + ("GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA" #x1F2B) + ("GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA" #x1F2C) + ("GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA" #x1F2D) + ("GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI" #x1F2E) + ("GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI" #x1F2F) + ("GREEK SMALL LETTER IOTA WITH PSILI" #x1F30) + ("GREEK SMALL LETTER IOTA WITH DASIA" #x1F31) + ("GREEK SMALL LETTER IOTA WITH PSILI AND VARIA" #x1F32) + ("GREEK SMALL LETTER IOTA WITH DASIA AND VARIA" #x1F33) + ("GREEK SMALL LETTER IOTA WITH PSILI AND OXIA" #x1F34) + ("GREEK SMALL LETTER IOTA WITH DASIA AND OXIA" #x1F35) + ("GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI" #x1F36) + ("GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI" #x1F37) + ("GREEK CAPITAL LETTER IOTA WITH PSILI" #x1F38) + ("GREEK CAPITAL LETTER IOTA WITH DASIA" #x1F39) + ("GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA" #x1F3A) + ("GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA" #x1F3B) + ("GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA" #x1F3C) + ("GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA" #x1F3D) + ("GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI" #x1F3E) + ("GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI" #x1F3F) + ("GREEK SMALL LETTER OMICRON WITH PSILI" #x1F40) + ("GREEK SMALL LETTER OMICRON WITH DASIA" #x1F41) + ("GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA" #x1F42) + ("GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA" #x1F43) + ("GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA" #x1F44) + ("GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA" #x1F45) + ("GREEK CAPITAL LETTER OMICRON WITH PSILI" #x1F48) + ("GREEK CAPITAL LETTER OMICRON WITH DASIA" #x1F49) + ("GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA" #x1F4A) + ("GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA" #x1F4B) + ("GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA" #x1F4C) + ("GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA" #x1F4D) + ("GREEK SMALL LETTER UPSILON WITH PSILI" #x1F50) + ("GREEK SMALL LETTER UPSILON WITH DASIA" #x1F51) + ("GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA" #x1F52) + ("GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA" #x1F53) + ("GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA" #x1F54) + ("GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA" #x1F55) + ("GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI" #x1F56) + ("GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI" #x1F57) + ("GREEK CAPITAL LETTER UPSILON WITH DASIA" #x1F59) + ("GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA" #x1F5B) + ("GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA" #x1F5D) + ("GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI" #x1F5F) + ("GREEK SMALL LETTER OMEGA WITH PSILI" #x1F60) + ("GREEK SMALL LETTER OMEGA WITH DASIA" #x1F61) + ("GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA" #x1F62) + ("GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA" #x1F63) + ("GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA" #x1F64) + ("GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA" #x1F65) + ("GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI" #x1F66) + ("GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI" #x1F67) + ("GREEK CAPITAL LETTER OMEGA WITH PSILI" #x1F68) + ("GREEK CAPITAL LETTER OMEGA WITH DASIA" #x1F69) + ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA" #x1F6A) + ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA" #x1F6B) + ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA" #x1F6C) + ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA" #x1F6D) + ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI" #x1F6E) + ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI" #x1F6F) + ("GREEK SMALL LETTER ALPHA WITH VARIA" #x1F70) + ("GREEK SMALL LETTER ALPHA WITH OXIA" #x1F71) + ("GREEK SMALL LETTER EPSILON WITH VARIA" #x1F72) + ("GREEK SMALL LETTER EPSILON WITH OXIA" #x1F73) + ("GREEK SMALL LETTER ETA WITH VARIA" #x1F74) + ("GREEK SMALL LETTER ETA WITH OXIA" #x1F75) + ("GREEK SMALL LETTER IOTA WITH VARIA" #x1F76) + ("GREEK SMALL LETTER IOTA WITH OXIA" #x1F77) + ("GREEK SMALL LETTER OMICRON WITH VARIA" #x1F78) + ("GREEK SMALL LETTER OMICRON WITH OXIA" #x1F79) + ("GREEK SMALL LETTER UPSILON WITH VARIA" #x1F7A) + ("GREEK SMALL LETTER UPSILON WITH OXIA" #x1F7B) + ("GREEK SMALL LETTER OMEGA WITH VARIA" #x1F7C) + ("GREEK SMALL LETTER OMEGA WITH OXIA" #x1F7D) + ("GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI" #x1F80) + ("GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI" #x1F81) + ("GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI" #x1F82) + ("GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI" #x1F83) + ("GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI" #x1F84) + ("GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI" #x1F85) + ("GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI" #x1F86) + ("GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI" #x1F87) + ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI" #x1F88) + ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI" #x1F89) + ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI" #x1F8A) + ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI" #x1F8B) + ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI" #x1F8C) + ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI" #x1F8D) + ("GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI" #x1F8E) + ("GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI" #x1F8F) + ("GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI" #x1F90) + ("GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI" #x1F91) + ("GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI" #x1F92) + ("GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI" #x1F93) + ("GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI" #x1F94) + ("GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI" #x1F95) + ("GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI" #x1F96) + ("GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI" #x1F97) + ("GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI" #x1F98) + ("GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI" #x1F99) + ("GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI" #x1F9A) + ("GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI" #x1F9B) + ("GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI" #x1F9C) + ("GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI" #x1F9D) + ("GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI" #x1F9E) + ("GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI" #x1F9F) + ("GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI" #x1FA0) + ("GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI" #x1FA1) + ("GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI" #x1FA2) + ("GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI" #x1FA3) + ("GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI" #x1FA4) + ("GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI" #x1FA5) + ("GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI" #x1FA6) + ("GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI" #x1FA7) + ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI" #x1FA8) + ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI" #x1FA9) + ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI" #x1FAA) + ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI" #x1FAB) + ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI" #x1FAC) + ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI" #x1FAD) + ("GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI" #x1FAE) + ("GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI" #x1FAF) + ("GREEK SMALL LETTER ALPHA WITH VRACHY" #x1FB0) + ("GREEK SMALL LETTER ALPHA WITH MACRON" #x1FB1) + ("GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI" #x1FB2) + ("GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI" #x1FB3) + ("GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI" #x1FB4) + ("GREEK SMALL LETTER ALPHA WITH PERISPOMENI" #x1FB6) + ("GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI" #x1FB7) + ("GREEK CAPITAL LETTER ALPHA WITH VRACHY" #x1FB8) + ("GREEK CAPITAL LETTER ALPHA WITH MACRON" #x1FB9) + ("GREEK CAPITAL LETTER ALPHA WITH VARIA" #x1FBA) + ("GREEK CAPITAL LETTER ALPHA WITH OXIA" #x1FBB) + ("GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI" #x1FBC) + ("GREEK KORONIS" #x1FBD) + ("GREEK PROSGEGRAMMENI" #x1FBE) + ("GREEK PSILI" #x1FBF) + ("GREEK PERISPOMENI" #x1FC0) + ("GREEK DIALYTIKA AND PERISPOMENI" #x1FC1) + ("GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI" #x1FC2) + ("GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI" #x1FC3) + ("GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI" #x1FC4) + ("GREEK SMALL LETTER ETA WITH PERISPOMENI" #x1FC6) + ("GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI" #x1FC7) + ("GREEK CAPITAL LETTER EPSILON WITH VARIA" #x1FC8) + ("GREEK CAPITAL LETTER EPSILON WITH OXIA" #x1FC9) + ("GREEK CAPITAL LETTER ETA WITH VARIA" #x1FCA) + ("GREEK CAPITAL LETTER ETA WITH OXIA" #x1FCB) + ("GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI" #x1FCC) + ("GREEK PSILI AND VARIA" #x1FCD) + ("GREEK PSILI AND OXIA" #x1FCE) + ("GREEK PSILI AND PERISPOMENI" #x1FCF) + ("GREEK SMALL LETTER IOTA WITH VRACHY" #x1FD0) + ("GREEK SMALL LETTER IOTA WITH MACRON" #x1FD1) + ("GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA" #x1FD2) + ("GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA" #x1FD3) + ("GREEK SMALL LETTER IOTA WITH PERISPOMENI" #x1FD6) + ("GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI" #x1FD7) + ("GREEK CAPITAL LETTER IOTA WITH VRACHY" #x1FD8) + ("GREEK CAPITAL LETTER IOTA WITH MACRON" #x1FD9) + ("GREEK CAPITAL LETTER IOTA WITH VARIA" #x1FDA) + ("GREEK CAPITAL LETTER IOTA WITH OXIA" #x1FDB) + ("GREEK DASIA AND VARIA" #x1FDD) + ("GREEK DASIA AND OXIA" #x1FDE) + ("GREEK DASIA AND PERISPOMENI" #x1FDF) + ("GREEK SMALL LETTER UPSILON WITH VRACHY" #x1FE0) + ("GREEK SMALL LETTER UPSILON WITH MACRON" #x1FE1) + ("GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA" #x1FE2) + ("GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA" #x1FE3) + ("GREEK SMALL LETTER RHO WITH PSILI" #x1FE4) + ("GREEK SMALL LETTER RHO WITH DASIA" #x1FE5) + ("GREEK SMALL LETTER UPSILON WITH PERISPOMENI" #x1FE6) + ("GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI" #x1FE7) + ("GREEK CAPITAL LETTER UPSILON WITH VRACHY" #x1FE8) + ("GREEK CAPITAL LETTER UPSILON WITH MACRON" #x1FE9) + ("GREEK CAPITAL LETTER UPSILON WITH VARIA" #x1FEA) + ("GREEK CAPITAL LETTER UPSILON WITH OXIA" #x1FEB) + ("GREEK CAPITAL LETTER RHO WITH DASIA" #x1FEC) + ("GREEK DIALYTIKA AND VARIA" #x1FED) + ("GREEK DIALYTIKA AND OXIA" #x1FEE) + ("GREEK VARIA" #x1FEF) + ("GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI" #x1FF2) + ("GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI" #x1FF3) + ("GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI" #x1FF4) + ("GREEK SMALL LETTER OMEGA WITH PERISPOMENI" #x1FF6) + ("GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI" #x1FF7) + ("GREEK CAPITAL LETTER OMICRON WITH VARIA" #x1FF8) + ("GREEK CAPITAL LETTER OMICRON WITH OXIA" #x1FF9) + ("GREEK CAPITAL LETTER OMEGA WITH VARIA" #x1FFA) + ("GREEK CAPITAL LETTER OMEGA WITH OXIA" #x1FFB) + ("GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI" #x1FFC) + ("GREEK OXIA" #x1FFD) + ("GREEK DASIA" #x1FFE) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/02000-0206F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,97 @@ +(nxml-define-char-name-set 'general-punctuation + '(("EN QUAD" #x2000) + ("EM QUAD" #x2001) + ("EN SPACE" #x2002) + ("EM SPACE" #x2003) + ("THREE-PER-EM SPACE" #x2004) + ("FOUR-PER-EM SPACE" #x2005) + ("SIX-PER-EM SPACE" #x2006) + ("FIGURE SPACE" #x2007) + ("PUNCTUATION SPACE" #x2008) + ("THIN SPACE" #x2009) + ("HAIR SPACE" #x200A) + ("ZERO WIDTH SPACE" #x200B) + ("ZERO WIDTH NON-JOINER" #x200C) + ("ZERO WIDTH JOINER" #x200D) + ("LEFT-TO-RIGHT MARK" #x200E) + ("RIGHT-TO-LEFT MARK" #x200F) + ("HYPHEN" #x2010) + ("NON-BREAKING HYPHEN" #x2011) + ("FIGURE DASH" #x2012) + ("EN DASH" #x2013) + ("EM DASH" #x2014) + ("HORIZONTAL BAR" #x2015) + ("DOUBLE VERTICAL LINE" #x2016) + ("DOUBLE LOW LINE" #x2017) + ("LEFT SINGLE QUOTATION MARK" #x2018) + ("RIGHT SINGLE QUOTATION MARK" #x2019) + ("SINGLE LOW-9 QUOTATION MARK" #x201A) + ("SINGLE HIGH-REVERSED-9 QUOTATION MARK" #x201B) + ("LEFT DOUBLE QUOTATION MARK" #x201C) + ("RIGHT DOUBLE QUOTATION MARK" #x201D) + ("DOUBLE LOW-9 QUOTATION MARK" #x201E) + ("DOUBLE HIGH-REVERSED-9 QUOTATION MARK" #x201F) + ("DAGGER" #x2020) + ("DOUBLE DAGGER" #x2021) + ("BULLET" #x2022) + ("TRIANGULAR BULLET" #x2023) + ("ONE DOT LEADER" #x2024) + ("TWO DOT LEADER" #x2025) + ("HORIZONTAL ELLIPSIS" #x2026) + ("HYPHENATION POINT" #x2027) + ("LINE SEPARATOR" #x2028) + ("PARAGRAPH SEPARATOR" #x2029) + ("LEFT-TO-RIGHT EMBEDDING" #x202A) + ("RIGHT-TO-LEFT EMBEDDING" #x202B) + ("POP DIRECTIONAL FORMATTING" #x202C) + ("LEFT-TO-RIGHT OVERRIDE" #x202D) + ("RIGHT-TO-LEFT OVERRIDE" #x202E) + ("NARROW NO-BREAK SPACE" #x202F) + ("PER MILLE SIGN" #x2030) + ("PER TEN THOUSAND SIGN" #x2031) + ("PRIME" #x2032) + ("DOUBLE PRIME" #x2033) + ("TRIPLE PRIME" #x2034) + ("REVERSED PRIME" #x2035) + ("REVERSED DOUBLE PRIME" #x2036) + ("REVERSED TRIPLE PRIME" #x2037) + ("CARET" #x2038) + ("SINGLE LEFT-POINTING ANGLE QUOTATION MARK" #x2039) + ("SINGLE RIGHT-POINTING ANGLE QUOTATION MARK" #x203A) + ("REFERENCE MARK" #x203B) + ("DOUBLE EXCLAMATION MARK" #x203C) + ("INTERROBANG" #x203D) + ("OVERLINE" #x203E) + ("UNDERTIE" #x203F) + ("CHARACTER TIE" #x2040) + ("CARET INSERTION POINT" #x2041) + ("ASTERISM" #x2042) + ("HYPHEN BULLET" #x2043) + ("FRACTION SLASH" #x2044) + ("LEFT SQUARE BRACKET WITH QUILL" #x2045) + ("RIGHT SQUARE BRACKET WITH QUILL" #x2046) + ("DOUBLE QUESTION MARK" #x2047) + ("QUESTION EXCLAMATION MARK" #x2048) + ("EXCLAMATION QUESTION MARK" #x2049) + ("TIRONIAN SIGN ET" #x204A) + ("REVERSED PILCROW SIGN" #x204B) + ("BLACK LEFTWARDS BULLET" #x204C) + ("BLACK RIGHTWARDS BULLET" #x204D) + ("LOW ASTERISK" #x204E) + ("REVERSED SEMICOLON" #x204F) + ("CLOSE UP" #x2050) + ("TWO ASTERISKS ALIGNED VERTICALLY" #x2051) + ("COMMERCIAL MINUS SIGN" #x2052) + ("QUADRUPLE PRIME" #x2057) + ("MEDIUM MATHEMATICAL SPACE" #x205F) + ("WORD JOINER" #x2060) + ("FUNCTION APPLICATION" #x2061) + ("INVISIBLE TIMES" #x2062) + ("INVISIBLE SEPARATOR" #x2063) + ("INHIBIT SYMMETRIC SWAPPING" #x206A) + ("ACTIVATE SYMMETRIC SWAPPING" #x206B) + ("INHIBIT ARABIC FORM SHAPING" #x206C) + ("ACTIVATE ARABIC FORM SHAPING" #x206D) + ("NATIONAL DIGIT SHAPES" #x206E) + ("NOMINAL DIGIT SHAPES" #x206F) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/02070-0209F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,31 @@ +(nxml-define-char-name-set 'superscripts-and-subscripts + '(("SUPERSCRIPT ZERO" #x2070) + ("SUPERSCRIPT LATIN SMALL LETTER I" #x2071) + ("SUPERSCRIPT FOUR" #x2074) + ("SUPERSCRIPT FIVE" #x2075) + ("SUPERSCRIPT SIX" #x2076) + ("SUPERSCRIPT SEVEN" #x2077) + ("SUPERSCRIPT EIGHT" #x2078) + ("SUPERSCRIPT NINE" #x2079) + ("SUPERSCRIPT PLUS SIGN" #x207A) + ("SUPERSCRIPT MINUS" #x207B) + ("SUPERSCRIPT EQUALS SIGN" #x207C) + ("SUPERSCRIPT LEFT PARENTHESIS" #x207D) + ("SUPERSCRIPT RIGHT PARENTHESIS" #x207E) + ("SUPERSCRIPT LATIN SMALL LETTER N" #x207F) + ("SUBSCRIPT ZERO" #x2080) + ("SUBSCRIPT ONE" #x2081) + ("SUBSCRIPT TWO" #x2082) + ("SUBSCRIPT THREE" #x2083) + ("SUBSCRIPT FOUR" #x2084) + ("SUBSCRIPT FIVE" #x2085) + ("SUBSCRIPT SIX" #x2086) + ("SUBSCRIPT SEVEN" #x2087) + ("SUBSCRIPT EIGHT" #x2088) + ("SUBSCRIPT NINE" #x2089) + ("SUBSCRIPT PLUS SIGN" #x208A) + ("SUBSCRIPT MINUS" #x208B) + ("SUBSCRIPT EQUALS SIGN" #x208C) + ("SUBSCRIPT LEFT PARENTHESIS" #x208D) + ("SUBSCRIPT RIGHT PARENTHESIS" #x208E) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/020A0-020CF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,20 @@ +(nxml-define-char-name-set 'currency-symbols + '(("EURO-CURRENCY SIGN" #x20A0) + ("COLON SIGN" #x20A1) + ("CRUZEIRO SIGN" #x20A2) + ("FRENCH FRANC SIGN" #x20A3) + ("LIRA SIGN" #x20A4) + ("MILL SIGN" #x20A5) + ("NAIRA SIGN" #x20A6) + ("PESETA SIGN" #x20A7) + ("RUPEE SIGN" #x20A8) + ("WON SIGN" #x20A9) + ("NEW SHEQEL SIGN" #x20AA) + ("DONG SIGN" #x20AB) + ("EURO SIGN" #x20AC) + ("KIP SIGN" #x20AD) + ("TUGRIK SIGN" #x20AE) + ("DRACHMA SIGN" #x20AF) + ("GERMAN PENNY SIGN" #x20B0) + ("PESO SIGN" #x20B1) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/020D0-020FF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,29 @@ +(nxml-define-char-name-set 'combining-diacritical-marks-for-symbols + '(("COMBINING LEFT HARPOON ABOVE" #x20D0) + ("COMBINING RIGHT HARPOON ABOVE" #x20D1) + ("COMBINING LONG VERTICAL LINE OVERLAY" #x20D2) + ("COMBINING SHORT VERTICAL LINE OVERLAY" #x20D3) + ("COMBINING ANTICLOCKWISE ARROW ABOVE" #x20D4) + ("COMBINING CLOCKWISE ARROW ABOVE" #x20D5) + ("COMBINING LEFT ARROW ABOVE" #x20D6) + ("COMBINING RIGHT ARROW ABOVE" #x20D7) + ("COMBINING RING OVERLAY" #x20D8) + ("COMBINING CLOCKWISE RING OVERLAY" #x20D9) + ("COMBINING ANTICLOCKWISE RING OVERLAY" #x20DA) + ("COMBINING THREE DOTS ABOVE" #x20DB) + ("COMBINING FOUR DOTS ABOVE" #x20DC) + ("COMBINING ENCLOSING CIRCLE" #x20DD) + ("COMBINING ENCLOSING SQUARE" #x20DE) + ("COMBINING ENCLOSING DIAMOND" #x20DF) + ("COMBINING ENCLOSING CIRCLE BACKSLASH" #x20E0) + ("COMBINING LEFT RIGHT ARROW ABOVE" #x20E1) + ("COMBINING ENCLOSING SCREEN" #x20E2) + ("COMBINING ENCLOSING KEYCAP" #x20E3) + ("COMBINING ENCLOSING UPWARD POINTING TRIANGLE" #x20E4) + ("COMBINING REVERSE SOLIDUS OVERLAY" #x20E5) + ("COMBINING DOUBLE VERTICAL STROKE OVERLAY" #x20E6) + ("COMBINING ANNUITY SYMBOL" #x20E7) + ("COMBINING TRIPLE UNDERDOT" #x20E8) + ("COMBINING WIDE BRIDGE ABOVE" #x20E9) + ("COMBINING LEFTWARDS ARROW OVERLAY" #x20EA) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/02100-0214F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,76 @@ +(nxml-define-char-name-set 'letterlike-symbols + '(("ACCOUNT OF" #x2100) + ("ADDRESSED TO THE SUBJECT" #x2101) + ("DOUBLE-STRUCK CAPITAL C" #x2102) + ("DEGREE CELSIUS" #x2103) + ("CENTRE LINE SYMBOL" #x2104) + ("CARE OF" #x2105) + ("CADA UNA" #x2106) + ("EULER CONSTANT" #x2107) + ("SCRUPLE" #x2108) + ("DEGREE FAHRENHEIT" #x2109) + ("SCRIPT SMALL G" #x210A) + ("SCRIPT CAPITAL H" #x210B) + ("BLACK-LETTER CAPITAL H" #x210C) + ("DOUBLE-STRUCK CAPITAL H" #x210D) + ("PLANCK CONSTANT" #x210E) + ("PLANCK CONSTANT OVER TWO PI" #x210F) + ("SCRIPT CAPITAL I" #x2110) + ("BLACK-LETTER CAPITAL I" #x2111) + ("SCRIPT CAPITAL L" #x2112) + ("SCRIPT SMALL L" #x2113) + ("L B BAR SYMBOL" #x2114) + ("DOUBLE-STRUCK CAPITAL N" #x2115) + ("NUMERO SIGN" #x2116) + ("SOUND RECORDING COPYRIGHT" #x2117) + ("SCRIPT CAPITAL P" #x2118) + ("DOUBLE-STRUCK CAPITAL P" #x2119) + ("DOUBLE-STRUCK CAPITAL Q" #x211A) + ("SCRIPT CAPITAL R" #x211B) + ("BLACK-LETTER CAPITAL R" #x211C) + ("DOUBLE-STRUCK CAPITAL R" #x211D) + ("PRESCRIPTION TAKE" #x211E) + ("RESPONSE" #x211F) + ("SERVICE MARK" #x2120) + ("TELEPHONE SIGN" #x2121) + ("TRADE MARK SIGN" #x2122) + ("VERSICLE" #x2123) + ("DOUBLE-STRUCK CAPITAL Z" #x2124) + ("OUNCE SIGN" #x2125) + ("OHM SIGN" #x2126) + ("INVERTED OHM SIGN" #x2127) + ("BLACK-LETTER CAPITAL Z" #x2128) + ("TURNED GREEK SMALL LETTER IOTA" #x2129) + ("KELVIN SIGN" #x212A) + ("ANGSTROM SIGN" #x212B) + ("SCRIPT CAPITAL B" #x212C) + ("BLACK-LETTER CAPITAL C" #x212D) + ("ESTIMATED SYMBOL" #x212E) + ("SCRIPT SMALL E" #x212F) + ("SCRIPT CAPITAL E" #x2130) + ("SCRIPT CAPITAL F" #x2131) + ("TURNED CAPITAL F" #x2132) + ("SCRIPT CAPITAL M" #x2133) + ("SCRIPT SMALL O" #x2134) + ("ALEF SYMBOL" #x2135) + ("BET SYMBOL" #x2136) + ("GIMEL SYMBOL" #x2137) + ("DALET SYMBOL" #x2138) + ("INFORMATION SOURCE" #x2139) + ("ROTATED CAPITAL Q" #x213A) + ("DOUBLE-STRUCK SMALL GAMMA" #x213D) + ("DOUBLE-STRUCK CAPITAL GAMMA" #x213E) + ("DOUBLE-STRUCK CAPITAL PI" #x213F) + ("DOUBLE-STRUCK N-ARY SUMMATION" #x2140) + ("TURNED SANS-SERIF CAPITAL G" #x2141) + ("TURNED SANS-SERIF CAPITAL L" #x2142) + ("REVERSED SANS-SERIF CAPITAL L" #x2143) + ("TURNED SANS-SERIF CAPITAL Y" #x2144) + ("DOUBLE-STRUCK ITALIC CAPITAL D" #x2145) + ("DOUBLE-STRUCK ITALIC SMALL D" #x2146) + ("DOUBLE-STRUCK ITALIC SMALL E" #x2147) + ("DOUBLE-STRUCK ITALIC SMALL I" #x2148) + ("DOUBLE-STRUCK ITALIC SMALL J" #x2149) + ("PROPERTY LINE" #x214A) + ("TURNED AMPERSAND" #x214B) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/02150-0218F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,51 @@ +(nxml-define-char-name-set 'number-forms + '(("VULGAR FRACTION ONE THIRD" #x2153) + ("VULGAR FRACTION TWO THIRDS" #x2154) + ("VULGAR FRACTION ONE FIFTH" #x2155) + ("VULGAR FRACTION TWO FIFTHS" #x2156) + ("VULGAR FRACTION THREE FIFTHS" #x2157) + ("VULGAR FRACTION FOUR FIFTHS" #x2158) + ("VULGAR FRACTION ONE SIXTH" #x2159) + ("VULGAR FRACTION FIVE SIXTHS" #x215A) + ("VULGAR FRACTION ONE EIGHTH" #x215B) + ("VULGAR FRACTION THREE EIGHTHS" #x215C) + ("VULGAR FRACTION FIVE EIGHTHS" #x215D) + ("VULGAR FRACTION SEVEN EIGHTHS" #x215E) + ("FRACTION NUMERATOR ONE" #x215F) + ("ROMAN NUMERAL ONE" #x2160) + ("ROMAN NUMERAL TWO" #x2161) + ("ROMAN NUMERAL THREE" #x2162) + ("ROMAN NUMERAL FOUR" #x2163) + ("ROMAN NUMERAL FIVE" #x2164) + ("ROMAN NUMERAL SIX" #x2165) + ("ROMAN NUMERAL SEVEN" #x2166) + ("ROMAN NUMERAL EIGHT" #x2167) + ("ROMAN NUMERAL NINE" #x2168) + ("ROMAN NUMERAL TEN" #x2169) + ("ROMAN NUMERAL ELEVEN" #x216A) + ("ROMAN NUMERAL TWELVE" #x216B) + ("ROMAN NUMERAL FIFTY" #x216C) + ("ROMAN NUMERAL ONE HUNDRED" #x216D) + ("ROMAN NUMERAL FIVE HUNDRED" #x216E) + ("ROMAN NUMERAL ONE THOUSAND" #x216F) + ("SMALL ROMAN NUMERAL ONE" #x2170) + ("SMALL ROMAN NUMERAL TWO" #x2171) + ("SMALL ROMAN NUMERAL THREE" #x2172) + ("SMALL ROMAN NUMERAL FOUR" #x2173) + ("SMALL ROMAN NUMERAL FIVE" #x2174) + ("SMALL ROMAN NUMERAL SIX" #x2175) + ("SMALL ROMAN NUMERAL SEVEN" #x2176) + ("SMALL ROMAN NUMERAL EIGHT" #x2177) + ("SMALL ROMAN NUMERAL NINE" #x2178) + ("SMALL ROMAN NUMERAL TEN" #x2179) + ("SMALL ROMAN NUMERAL ELEVEN" #x217A) + ("SMALL ROMAN NUMERAL TWELVE" #x217B) + ("SMALL ROMAN NUMERAL FIFTY" #x217C) + ("SMALL ROMAN NUMERAL ONE HUNDRED" #x217D) + ("SMALL ROMAN NUMERAL FIVE HUNDRED" #x217E) + ("SMALL ROMAN NUMERAL ONE THOUSAND" #x217F) + ("ROMAN NUMERAL ONE THOUSAND C D" #x2180) + ("ROMAN NUMERAL FIVE THOUSAND" #x2181) + ("ROMAN NUMERAL TEN THOUSAND" #x2182) + ("ROMAN NUMERAL REVERSED ONE HUNDRED" #x2183) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/02190-021FF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,114 @@ +(nxml-define-char-name-set 'arrows + '(("LEFTWARDS ARROW" #x2190) + ("UPWARDS ARROW" #x2191) + ("RIGHTWARDS ARROW" #x2192) + ("DOWNWARDS ARROW" #x2193) + ("LEFT RIGHT ARROW" #x2194) + ("UP DOWN ARROW" #x2195) + ("NORTH WEST ARROW" #x2196) + ("NORTH EAST ARROW" #x2197) + ("SOUTH EAST ARROW" #x2198) + ("SOUTH WEST ARROW" #x2199) + ("LEFTWARDS ARROW WITH STROKE" #x219A) + ("RIGHTWARDS ARROW WITH STROKE" #x219B) + ("LEFTWARDS WAVE ARROW" #x219C) + ("RIGHTWARDS WAVE ARROW" #x219D) + ("LEFTWARDS TWO HEADED ARROW" #x219E) + ("UPWARDS TWO HEADED ARROW" #x219F) + ("RIGHTWARDS TWO HEADED ARROW" #x21A0) + ("DOWNWARDS TWO HEADED ARROW" #x21A1) + ("LEFTWARDS ARROW WITH TAIL" #x21A2) + ("RIGHTWARDS ARROW WITH TAIL" #x21A3) + ("LEFTWARDS ARROW FROM BAR" #x21A4) + ("UPWARDS ARROW FROM BAR" #x21A5) + ("RIGHTWARDS ARROW FROM BAR" #x21A6) + ("DOWNWARDS ARROW FROM BAR" #x21A7) + ("UP DOWN ARROW WITH BASE" #x21A8) + ("LEFTWARDS ARROW WITH HOOK" #x21A9) + ("RIGHTWARDS ARROW WITH HOOK" #x21AA) + ("LEFTWARDS ARROW WITH LOOP" #x21AB) + ("RIGHTWARDS ARROW WITH LOOP" #x21AC) + ("LEFT RIGHT WAVE ARROW" #x21AD) + ("LEFT RIGHT ARROW WITH STROKE" #x21AE) + ("DOWNWARDS ZIGZAG ARROW" #x21AF) + ("UPWARDS ARROW WITH TIP LEFTWARDS" #x21B0) + ("UPWARDS ARROW WITH TIP RIGHTWARDS" #x21B1) + ("DOWNWARDS ARROW WITH TIP LEFTWARDS" #x21B2) + ("DOWNWARDS ARROW WITH TIP RIGHTWARDS" #x21B3) + ("RIGHTWARDS ARROW WITH CORNER DOWNWARDS" #x21B4) + ("DOWNWARDS ARROW WITH CORNER LEFTWARDS" #x21B5) + ("ANTICLOCKWISE TOP SEMICIRCLE ARROW" #x21B6) + ("CLOCKWISE TOP SEMICIRCLE ARROW" #x21B7) + ("NORTH WEST ARROW TO LONG BAR" #x21B8) + ("LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR" #x21B9) + ("ANTICLOCKWISE OPEN CIRCLE ARROW" #x21BA) + ("CLOCKWISE OPEN CIRCLE ARROW" #x21BB) + ("LEFTWARDS HARPOON WITH BARB UPWARDS" #x21BC) + ("LEFTWARDS HARPOON WITH BARB DOWNWARDS" #x21BD) + ("UPWARDS HARPOON WITH BARB RIGHTWARDS" #x21BE) + ("UPWARDS HARPOON WITH BARB LEFTWARDS" #x21BF) + ("RIGHTWARDS HARPOON WITH BARB UPWARDS" #x21C0) + ("RIGHTWARDS HARPOON WITH BARB DOWNWARDS" #x21C1) + ("DOWNWARDS HARPOON WITH BARB RIGHTWARDS" #x21C2) + ("DOWNWARDS HARPOON WITH BARB LEFTWARDS" #x21C3) + ("RIGHTWARDS ARROW OVER LEFTWARDS ARROW" #x21C4) + ("UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW" #x21C5) + ("LEFTWARDS ARROW OVER RIGHTWARDS ARROW" #x21C6) + ("LEFTWARDS PAIRED ARROWS" #x21C7) + ("UPWARDS PAIRED ARROWS" #x21C8) + ("RIGHTWARDS PAIRED ARROWS" #x21C9) + ("DOWNWARDS PAIRED ARROWS" #x21CA) + ("LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON" #x21CB) + ("RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON" #x21CC) + ("LEFTWARDS DOUBLE ARROW WITH STROKE" #x21CD) + ("LEFT RIGHT DOUBLE ARROW WITH STROKE" #x21CE) + ("RIGHTWARDS DOUBLE ARROW WITH STROKE" #x21CF) + ("LEFTWARDS DOUBLE ARROW" #x21D0) + ("UPWARDS DOUBLE ARROW" #x21D1) + ("RIGHTWARDS DOUBLE ARROW" #x21D2) + ("DOWNWARDS DOUBLE ARROW" #x21D3) + ("LEFT RIGHT DOUBLE ARROW" #x21D4) + ("UP DOWN DOUBLE ARROW" #x21D5) + ("NORTH WEST DOUBLE ARROW" #x21D6) + ("NORTH EAST DOUBLE ARROW" #x21D7) + ("SOUTH EAST DOUBLE ARROW" #x21D8) + ("SOUTH WEST DOUBLE ARROW" #x21D9) + ("LEFTWARDS TRIPLE ARROW" #x21DA) + ("RIGHTWARDS TRIPLE ARROW" #x21DB) + ("LEFTWARDS SQUIGGLE ARROW" #x21DC) + ("RIGHTWARDS SQUIGGLE ARROW" #x21DD) + ("UPWARDS ARROW WITH DOUBLE STROKE" #x21DE) + ("DOWNWARDS ARROW WITH DOUBLE STROKE" #x21DF) + ("LEFTWARDS DASHED ARROW" #x21E0) + ("UPWARDS DASHED ARROW" #x21E1) + ("RIGHTWARDS DASHED ARROW" #x21E2) + ("DOWNWARDS DASHED ARROW" #x21E3) + ("LEFTWARDS ARROW TO BAR" #x21E4) + ("RIGHTWARDS ARROW TO BAR" #x21E5) + ("LEFTWARDS WHITE ARROW" #x21E6) + ("UPWARDS WHITE ARROW" #x21E7) + ("RIGHTWARDS WHITE ARROW" #x21E8) + ("DOWNWARDS WHITE ARROW" #x21E9) + ("UPWARDS WHITE ARROW FROM BAR" #x21EA) + ("UPWARDS WHITE ARROW ON PEDESTAL" #x21EB) + ("UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR" #x21EC) + ("UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR" #x21ED) + ("UPWARDS WHITE DOUBLE ARROW" #x21EE) + ("UPWARDS WHITE DOUBLE ARROW ON PEDESTAL" #x21EF) + ("RIGHTWARDS WHITE ARROW FROM WALL" #x21F0) + ("NORTH WEST ARROW TO CORNER" #x21F1) + ("SOUTH EAST ARROW TO CORNER" #x21F2) + ("UP DOWN WHITE ARROW" #x21F3) + ("RIGHT ARROW WITH SMALL CIRCLE" #x21F4) + ("DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW" #x21F5) + ("THREE RIGHTWARDS ARROWS" #x21F6) + ("LEFTWARDS ARROW WITH VERTICAL STROKE" #x21F7) + ("RIGHTWARDS ARROW WITH VERTICAL STROKE" #x21F8) + ("LEFT RIGHT ARROW WITH VERTICAL STROKE" #x21F9) + ("LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE" #x21FA) + ("RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE" #x21FB) + ("LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE" #x21FC) + ("LEFTWARDS OPEN-HEADED ARROW" #x21FD) + ("RIGHTWARDS OPEN-HEADED ARROW" #x21FE) + ("LEFT RIGHT OPEN-HEADED ARROW" #x21FF) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/02200-022FF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,258 @@ +(nxml-define-char-name-set 'mathematical-operators + '(("FOR ALL" #x2200) + ("COMPLEMENT" #x2201) + ("PARTIAL DIFFERENTIAL" #x2202) + ("THERE EXISTS" #x2203) + ("THERE DOES NOT EXIST" #x2204) + ("EMPTY SET" #x2205) + ("INCREMENT" #x2206) + ("NABLA" #x2207) + ("ELEMENT OF" #x2208) + ("NOT AN ELEMENT OF" #x2209) + ("SMALL ELEMENT OF" #x220A) + ("CONTAINS AS MEMBER" #x220B) + ("DOES NOT CONTAIN AS MEMBER" #x220C) + ("SMALL CONTAINS AS MEMBER" #x220D) + ("END OF PROOF" #x220E) + ("N-ARY PRODUCT" #x220F) + ("N-ARY COPRODUCT" #x2210) + ("N-ARY SUMMATION" #x2211) + ("MINUS SIGN" #x2212) + ("MINUS-OR-PLUS SIGN" #x2213) + ("DOT PLUS" #x2214) + ("DIVISION SLASH" #x2215) + ("SET MINUS" #x2216) + ("ASTERISK OPERATOR" #x2217) + ("RING OPERATOR" #x2218) + ("BULLET OPERATOR" #x2219) + ("SQUARE ROOT" #x221A) + ("CUBE ROOT" #x221B) + ("FOURTH ROOT" #x221C) + ("PROPORTIONAL TO" #x221D) + ("INFINITY" #x221E) + ("RIGHT ANGLE" #x221F) + ("ANGLE" #x2220) + ("MEASURED ANGLE" #x2221) + ("SPHERICAL ANGLE" #x2222) + ("DIVIDES" #x2223) + ("DOES NOT DIVIDE" #x2224) + ("PARALLEL TO" #x2225) + ("NOT PARALLEL TO" #x2226) + ("LOGICAL AND" #x2227) + ("LOGICAL OR" #x2228) + ("INTERSECTION" #x2229) + ("UNION" #x222A) + ("INTEGRAL" #x222B) + ("DOUBLE INTEGRAL" #x222C) + ("TRIPLE INTEGRAL" #x222D) + ("CONTOUR INTEGRAL" #x222E) + ("SURFACE INTEGRAL" #x222F) + ("VOLUME INTEGRAL" #x2230) + ("CLOCKWISE INTEGRAL" #x2231) + ("CLOCKWISE CONTOUR INTEGRAL" #x2232) + ("ANTICLOCKWISE CONTOUR INTEGRAL" #x2233) + ("THEREFORE" #x2234) + ("BECAUSE" #x2235) + ("RATIO" #x2236) + ("PROPORTION" #x2237) + ("DOT MINUS" #x2238) + ("EXCESS" #x2239) + ("GEOMETRIC PROPORTION" #x223A) + ("HOMOTHETIC" #x223B) + ("TILDE OPERATOR" #x223C) + ("REVERSED TILDE" #x223D) + ("INVERTED LAZY S" #x223E) + ("SINE WAVE" #x223F) + ("WREATH PRODUCT" #x2240) + ("NOT TILDE" #x2241) + ("MINUS TILDE" #x2242) + ("ASYMPTOTICALLY EQUAL TO" #x2243) + ("NOT ASYMPTOTICALLY EQUAL TO" #x2244) + ("APPROXIMATELY EQUAL TO" #x2245) + ("APPROXIMATELY BUT NOT ACTUALLY EQUAL TO" #x2246) + ("NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO" #x2247) + ("ALMOST EQUAL TO" #x2248) + ("NOT ALMOST EQUAL TO" #x2249) + ("ALMOST EQUAL OR EQUAL TO" #x224A) + ("TRIPLE TILDE" #x224B) + ("ALL EQUAL TO" #x224C) + ("EQUIVALENT TO" #x224D) + ("GEOMETRICALLY EQUIVALENT TO" #x224E) + ("DIFFERENCE BETWEEN" #x224F) + ("APPROACHES THE LIMIT" #x2250) + ("GEOMETRICALLY EQUAL TO" #x2251) + ("APPROXIMATELY EQUAL TO OR THE IMAGE OF" #x2252) + ("IMAGE OF OR APPROXIMATELY EQUAL TO" #x2253) + ("COLON EQUALS" #x2254) + ("EQUALS COLON" #x2255) + ("RING IN EQUAL TO" #x2256) + ("RING EQUAL TO" #x2257) + ("CORRESPONDS TO" #x2258) + ("ESTIMATES" #x2259) + ("EQUIANGULAR TO" #x225A) + ("STAR EQUALS" #x225B) + ("DELTA EQUAL TO" #x225C) + ("EQUAL TO BY DEFINITION" #x225D) + ("MEASURED BY" #x225E) + ("QUESTIONED EQUAL TO" #x225F) + ("NOT EQUAL TO" #x2260) + ("IDENTICAL TO" #x2261) + ("NOT IDENTICAL TO" #x2262) + ("STRICTLY EQUIVALENT TO" #x2263) + ("LESS-THAN OR EQUAL TO" #x2264) + ("GREATER-THAN OR EQUAL TO" #x2265) + ("LESS-THAN OVER EQUAL TO" #x2266) + ("GREATER-THAN OVER EQUAL TO" #x2267) + ("LESS-THAN BUT NOT EQUAL TO" #x2268) + ("GREATER-THAN BUT NOT EQUAL TO" #x2269) + ("MUCH LESS-THAN" #x226A) + ("MUCH GREATER-THAN" #x226B) + ("BETWEEN" #x226C) + ("NOT EQUIVALENT TO" #x226D) + ("NOT LESS-THAN" #x226E) + ("NOT GREATER-THAN" #x226F) + ("NEITHER LESS-THAN NOR EQUAL TO" #x2270) + ("NEITHER GREATER-THAN NOR EQUAL TO" #x2271) + ("LESS-THAN OR EQUIVALENT TO" #x2272) + ("GREATER-THAN OR EQUIVALENT TO" #x2273) + ("NEITHER LESS-THAN NOR EQUIVALENT TO" #x2274) + ("NEITHER GREATER-THAN NOR EQUIVALENT TO" #x2275) + ("LESS-THAN OR GREATER-THAN" #x2276) + ("GREATER-THAN OR LESS-THAN" #x2277) + ("NEITHER LESS-THAN NOR GREATER-THAN" #x2278) + ("NEITHER GREATER-THAN NOR LESS-THAN" #x2279) + ("PRECEDES" #x227A) + ("SUCCEEDS" #x227B) + ("PRECEDES OR EQUAL TO" #x227C) + ("SUCCEEDS OR EQUAL TO" #x227D) + ("PRECEDES OR EQUIVALENT TO" #x227E) + ("SUCCEEDS OR EQUIVALENT TO" #x227F) + ("DOES NOT PRECEDE" #x2280) + ("DOES NOT SUCCEED" #x2281) + ("SUBSET OF" #x2282) + ("SUPERSET OF" #x2283) + ("NOT A SUBSET OF" #x2284) + ("NOT A SUPERSET OF" #x2285) + ("SUBSET OF OR EQUAL TO" #x2286) + ("SUPERSET OF OR EQUAL TO" #x2287) + ("NEITHER A SUBSET OF NOR EQUAL TO" #x2288) + ("NEITHER A SUPERSET OF NOR EQUAL TO" #x2289) + ("SUBSET OF WITH NOT EQUAL TO" #x228A) + ("SUPERSET OF WITH NOT EQUAL TO" #x228B) + ("MULTISET" #x228C) + ("MULTISET MULTIPLICATION" #x228D) + ("MULTISET UNION" #x228E) + ("SQUARE IMAGE OF" #x228F) + ("SQUARE ORIGINAL OF" #x2290) + ("SQUARE IMAGE OF OR EQUAL TO" #x2291) + ("SQUARE ORIGINAL OF OR EQUAL TO" #x2292) + ("SQUARE CAP" #x2293) + ("SQUARE CUP" #x2294) + ("CIRCLED PLUS" #x2295) + ("CIRCLED MINUS" #x2296) + ("CIRCLED TIMES" #x2297) + ("CIRCLED DIVISION SLASH" #x2298) + ("CIRCLED DOT OPERATOR" #x2299) + ("CIRCLED RING OPERATOR" #x229A) + ("CIRCLED ASTERISK OPERATOR" #x229B) + ("CIRCLED EQUALS" #x229C) + ("CIRCLED DASH" #x229D) + ("SQUARED PLUS" #x229E) + ("SQUARED MINUS" #x229F) + ("SQUARED TIMES" #x22A0) + ("SQUARED DOT OPERATOR" #x22A1) + ("RIGHT TACK" #x22A2) + ("LEFT TACK" #x22A3) + ("DOWN TACK" #x22A4) + ("UP TACK" #x22A5) + ("ASSERTION" #x22A6) + ("MODELS" #x22A7) + ("TRUE" #x22A8) + ("FORCES" #x22A9) + ("TRIPLE VERTICAL BAR RIGHT TURNSTILE" #x22AA) + ("DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE" #x22AB) + ("DOES NOT PROVE" #x22AC) + ("NOT TRUE" #x22AD) + ("DOES NOT FORCE" #x22AE) + ("NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE" #x22AF) + ("PRECEDES UNDER RELATION" #x22B0) + ("SUCCEEDS UNDER RELATION" #x22B1) + ("NORMAL SUBGROUP OF" #x22B2) + ("CONTAINS AS NORMAL SUBGROUP" #x22B3) + ("NORMAL SUBGROUP OF OR EQUAL TO" #x22B4) + ("CONTAINS AS NORMAL SUBGROUP OR EQUAL TO" #x22B5) + ("ORIGINAL OF" #x22B6) + ("IMAGE OF" #x22B7) + ("MULTIMAP" #x22B8) + ("HERMITIAN CONJUGATE MATRIX" #x22B9) + ("INTERCALATE" #x22BA) + ("XOR" #x22BB) + ("NAND" #x22BC) + ("NOR" #x22BD) + ("RIGHT ANGLE WITH ARC" #x22BE) + ("RIGHT TRIANGLE" #x22BF) + ("N-ARY LOGICAL AND" #x22C0) + ("N-ARY LOGICAL OR" #x22C1) + ("N-ARY INTERSECTION" #x22C2) + ("N-ARY UNION" #x22C3) + ("DIAMOND OPERATOR" #x22C4) + ("DOT OPERATOR" #x22C5) + ("STAR OPERATOR" #x22C6) + ("DIVISION TIMES" #x22C7) + ("BOWTIE" #x22C8) + ("LEFT NORMAL FACTOR SEMIDIRECT PRODUCT" #x22C9) + ("RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT" #x22CA) + ("LEFT SEMIDIRECT PRODUCT" #x22CB) + ("RIGHT SEMIDIRECT PRODUCT" #x22CC) + ("REVERSED TILDE EQUALS" #x22CD) + ("CURLY LOGICAL OR" #x22CE) + ("CURLY LOGICAL AND" #x22CF) + ("DOUBLE SUBSET" #x22D0) + ("DOUBLE SUPERSET" #x22D1) + ("DOUBLE INTERSECTION" #x22D2) + ("DOUBLE UNION" #x22D3) + ("PITCHFORK" #x22D4) + ("EQUAL AND PARALLEL TO" #x22D5) + ("LESS-THAN WITH DOT" #x22D6) + ("GREATER-THAN WITH DOT" #x22D7) + ("VERY MUCH LESS-THAN" #x22D8) + ("VERY MUCH GREATER-THAN" #x22D9) + ("LESS-THAN EQUAL TO OR GREATER-THAN" #x22DA) + ("GREATER-THAN EQUAL TO OR LESS-THAN" #x22DB) + ("EQUAL TO OR LESS-THAN" #x22DC) + ("EQUAL TO OR GREATER-THAN" #x22DD) + ("EQUAL TO OR PRECEDES" #x22DE) + ("EQUAL TO OR SUCCEEDS" #x22DF) + ("DOES NOT PRECEDE OR EQUAL" #x22E0) + ("DOES NOT SUCCEED OR EQUAL" #x22E1) + ("NOT SQUARE IMAGE OF OR EQUAL TO" #x22E2) + ("NOT SQUARE ORIGINAL OF OR EQUAL TO" #x22E3) + ("SQUARE IMAGE OF OR NOT EQUAL TO" #x22E4) + ("SQUARE ORIGINAL OF OR NOT EQUAL TO" #x22E5) + ("LESS-THAN BUT NOT EQUIVALENT TO" #x22E6) + ("GREATER-THAN BUT NOT EQUIVALENT TO" #x22E7) + ("PRECEDES BUT NOT EQUIVALENT TO" #x22E8) + ("SUCCEEDS BUT NOT EQUIVALENT TO" #x22E9) + ("NOT NORMAL SUBGROUP OF" #x22EA) + ("DOES NOT CONTAIN AS NORMAL SUBGROUP" #x22EB) + ("NOT NORMAL SUBGROUP OF OR EQUAL TO" #x22EC) + ("DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL" #x22ED) + ("VERTICAL ELLIPSIS" #x22EE) + ("MIDLINE HORIZONTAL ELLIPSIS" #x22EF) + ("UP RIGHT DIAGONAL ELLIPSIS" #x22F0) + ("DOWN RIGHT DIAGONAL ELLIPSIS" #x22F1) + ("ELEMENT OF WITH LONG HORIZONTAL STROKE" #x22F2) + ("ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE" #x22F3) + ("SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE" #x22F4) + ("ELEMENT OF WITH DOT ABOVE" #x22F5) + ("ELEMENT OF WITH OVERBAR" #x22F6) + ("SMALL ELEMENT OF WITH OVERBAR" #x22F7) + ("ELEMENT OF WITH UNDERBAR" #x22F8) + ("ELEMENT OF WITH TWO HORIZONTAL STROKES" #x22F9) + ("CONTAINS WITH LONG HORIZONTAL STROKE" #x22FA) + ("CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE" #x22FB) + ("SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE" #x22FC) + ("CONTAINS WITH OVERBAR" #x22FD) + ("SMALL CONTAINS WITH OVERBAR" #x22FE) + ("Z NOTATION BAG MEMBERSHIP" #x22FF) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/02300-023FF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,209 @@ +(nxml-define-char-name-set 'miscellaneous-technical + '(("DIAMETER SIGN" #x2300) + ("ELECTRIC ARROW" #x2301) + ("HOUSE" #x2302) + ("UP ARROWHEAD" #x2303) + ("DOWN ARROWHEAD" #x2304) + ("PROJECTIVE" #x2305) + ("PERSPECTIVE" #x2306) + ("WAVY LINE" #x2307) + ("LEFT CEILING" #x2308) + ("RIGHT CEILING" #x2309) + ("LEFT FLOOR" #x230A) + ("RIGHT FLOOR" #x230B) + ("BOTTOM RIGHT CROP" #x230C) + ("BOTTOM LEFT CROP" #x230D) + ("TOP RIGHT CROP" #x230E) + ("TOP LEFT CROP" #x230F) + ("REVERSED NOT SIGN" #x2310) + ("SQUARE LOZENGE" #x2311) + ("ARC" #x2312) + ("SEGMENT" #x2313) + ("SECTOR" #x2314) + ("TELEPHONE RECORDER" #x2315) + ("POSITION INDICATOR" #x2316) + ("VIEWDATA SQUARE" #x2317) + ("PLACE OF INTEREST SIGN" #x2318) + ("TURNED NOT SIGN" #x2319) + ("WATCH" #x231A) + ("HOURGLASS" #x231B) + ("TOP LEFT CORNER" #x231C) + ("TOP RIGHT CORNER" #x231D) + ("BOTTOM LEFT CORNER" #x231E) + ("BOTTOM RIGHT CORNER" #x231F) + ("TOP HALF INTEGRAL" #x2320) + ("BOTTOM HALF INTEGRAL" #x2321) + ("FROWN" #x2322) + ("SMILE" #x2323) + ("UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS" #x2324) + ("OPTION KEY" #x2325) + ("ERASE TO THE RIGHT" #x2326) + ("X IN A RECTANGLE BOX" #x2327) + ("KEYBOARD" #x2328) + ("LEFT-POINTING ANGLE BRACKET" #x2329) + ("RIGHT-POINTING ANGLE BRACKET" #x232A) + ("ERASE TO THE LEFT" #x232B) + ("BENZENE RING" #x232C) + ("CYLINDRICITY" #x232D) + ("ALL AROUND-PROFILE" #x232E) + ("SYMMETRY" #x232F) + ("TOTAL RUNOUT" #x2330) + ("DIMENSION ORIGIN" #x2331) + ("CONICAL TAPER" #x2332) + ("SLOPE" #x2333) + ("COUNTERBORE" #x2334) + ("COUNTERSINK" #x2335) + ("APL FUNCTIONAL SYMBOL I-BEAM" #x2336) + ("APL FUNCTIONAL SYMBOL SQUISH QUAD" #x2337) + ("APL FUNCTIONAL SYMBOL QUAD EQUAL" #x2338) + ("APL FUNCTIONAL SYMBOL QUAD DIVIDE" #x2339) + ("APL FUNCTIONAL SYMBOL QUAD DIAMOND" #x233A) + ("APL FUNCTIONAL SYMBOL QUAD JOT" #x233B) + ("APL FUNCTIONAL SYMBOL QUAD CIRCLE" #x233C) + ("APL FUNCTIONAL SYMBOL CIRCLE STILE" #x233D) + ("APL FUNCTIONAL SYMBOL CIRCLE JOT" #x233E) + ("APL FUNCTIONAL SYMBOL SLASH BAR" #x233F) + ("APL FUNCTIONAL SYMBOL BACKSLASH BAR" #x2340) + ("APL FUNCTIONAL SYMBOL QUAD SLASH" #x2341) + ("APL FUNCTIONAL SYMBOL QUAD BACKSLASH" #x2342) + ("APL FUNCTIONAL SYMBOL QUAD LESS-THAN" #x2343) + ("APL FUNCTIONAL SYMBOL QUAD GREATER-THAN" #x2344) + ("APL FUNCTIONAL SYMBOL LEFTWARDS VANE" #x2345) + ("APL FUNCTIONAL SYMBOL RIGHTWARDS VANE" #x2346) + ("APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW" #x2347) + ("APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW" #x2348) + ("APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH" #x2349) + ("APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR" #x234A) + ("APL FUNCTIONAL SYMBOL DELTA STILE" #x234B) + ("APL FUNCTIONAL SYMBOL QUAD DOWN CARET" #x234C) + ("APL FUNCTIONAL SYMBOL QUAD DELTA" #x234D) + ("APL FUNCTIONAL SYMBOL DOWN TACK JOT" #x234E) + ("APL FUNCTIONAL SYMBOL UPWARDS VANE" #x234F) + ("APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW" #x2350) + ("APL FUNCTIONAL SYMBOL UP TACK OVERBAR" #x2351) + ("APL FUNCTIONAL SYMBOL DEL STILE" #x2352) + ("APL FUNCTIONAL SYMBOL QUAD UP CARET" #x2353) + ("APL FUNCTIONAL SYMBOL QUAD DEL" #x2354) + ("APL FUNCTIONAL SYMBOL UP TACK JOT" #x2355) + ("APL FUNCTIONAL SYMBOL DOWNWARDS VANE" #x2356) + ("APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW" #x2357) + ("APL FUNCTIONAL SYMBOL QUOTE UNDERBAR" #x2358) + ("APL FUNCTIONAL SYMBOL DELTA UNDERBAR" #x2359) + ("APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR" #x235A) + ("APL FUNCTIONAL SYMBOL JOT UNDERBAR" #x235B) + ("APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR" #x235C) + ("APL FUNCTIONAL SYMBOL UP SHOE JOT" #x235D) + ("APL FUNCTIONAL SYMBOL QUOTE QUAD" #x235E) + ("APL FUNCTIONAL SYMBOL CIRCLE STAR" #x235F) + ("APL FUNCTIONAL SYMBOL QUAD COLON" #x2360) + ("APL FUNCTIONAL SYMBOL UP TACK DIAERESIS" #x2361) + ("APL FUNCTIONAL SYMBOL DEL DIAERESIS" #x2362) + ("APL FUNCTIONAL SYMBOL STAR DIAERESIS" #x2363) + ("APL FUNCTIONAL SYMBOL JOT DIAERESIS" #x2364) + ("APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS" #x2365) + ("APL FUNCTIONAL SYMBOL DOWN SHOE STILE" #x2366) + ("APL FUNCTIONAL SYMBOL LEFT SHOE STILE" #x2367) + ("APL FUNCTIONAL SYMBOL TILDE DIAERESIS" #x2368) + ("APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS" #x2369) + ("APL FUNCTIONAL SYMBOL COMMA BAR" #x236A) + ("APL FUNCTIONAL SYMBOL DEL TILDE" #x236B) + ("APL FUNCTIONAL SYMBOL ZILDE" #x236C) + ("APL FUNCTIONAL SYMBOL STILE TILDE" #x236D) + ("APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR" #x236E) + ("APL FUNCTIONAL SYMBOL QUAD NOT EQUAL" #x236F) + ("APL FUNCTIONAL SYMBOL QUAD QUESTION" #x2370) + ("APL FUNCTIONAL SYMBOL DOWN CARET TILDE" #x2371) + ("APL FUNCTIONAL SYMBOL UP CARET TILDE" #x2372) + ("APL FUNCTIONAL SYMBOL IOTA" #x2373) + ("APL FUNCTIONAL SYMBOL RHO" #x2374) + ("APL FUNCTIONAL SYMBOL OMEGA" #x2375) + ("APL FUNCTIONAL SYMBOL ALPHA UNDERBAR" #x2376) + ("APL FUNCTIONAL SYMBOL EPSILON UNDERBAR" #x2377) + ("APL FUNCTIONAL SYMBOL IOTA UNDERBAR" #x2378) + ("APL FUNCTIONAL SYMBOL OMEGA UNDERBAR" #x2379) + ("APL FUNCTIONAL SYMBOL ALPHA" #x237A) + ("NOT CHECK MARK" #x237B) + ("RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW" #x237C) + ("SHOULDERED OPEN BOX" #x237D) + ("BELL SYMBOL" #x237E) + ("VERTICAL LINE WITH MIDDLE DOT" #x237F) + ("INSERTION SYMBOL" #x2380) + ("CONTINUOUS UNDERLINE SYMBOL" #x2381) + ("DISCONTINUOUS UNDERLINE SYMBOL" #x2382) + ("EMPHASIS SYMBOL" #x2383) + ("COMPOSITION SYMBOL" #x2384) + ("WHITE SQUARE WITH CENTRE VERTICAL LINE" #x2385) + ("ENTER SYMBOL" #x2386) + ("ALTERNATIVE KEY SYMBOL" #x2387) + ("HELM SYMBOL" #x2388) + ("CIRCLED HORIZONTAL BAR WITH NOTCH" #x2389) + ("CIRCLED TRIANGLE DOWN" #x238A) + ("BROKEN CIRCLE WITH NORTHWEST ARROW" #x238B) + ("UNDO SYMBOL" #x238C) + ("MONOSTABLE SYMBOL" #x238D) + ("HYSTERESIS SYMBOL" #x238E) + ("OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL" #x238F) + ("OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL" #x2390) + ("PASSIVE-PULL-DOWN-OUTPUT SYMBOL" #x2391) + ("PASSIVE-PULL-UP-OUTPUT SYMBOL" #x2392) + ("DIRECT CURRENT SYMBOL FORM TWO" #x2393) + ("SOFTWARE-FUNCTION SYMBOL" #x2394) + ("APL FUNCTIONAL SYMBOL QUAD" #x2395) + ("DECIMAL SEPARATOR KEY SYMBOL" #x2396) + ("PREVIOUS PAGE" #x2397) + ("NEXT PAGE" #x2398) + ("PRINT SCREEN SYMBOL" #x2399) + ("CLEAR SCREEN SYMBOL" #x239A) + ("LEFT PARENTHESIS UPPER HOOK" #x239B) + ("LEFT PARENTHESIS EXTENSION" #x239C) + ("LEFT PARENTHESIS LOWER HOOK" #x239D) + ("RIGHT PARENTHESIS UPPER HOOK" #x239E) + ("RIGHT PARENTHESIS EXTENSION" #x239F) + ("RIGHT PARENTHESIS LOWER HOOK" #x23A0) + ("LEFT SQUARE BRACKET UPPER CORNER" #x23A1) + ("LEFT SQUARE BRACKET EXTENSION" #x23A2) + ("LEFT SQUARE BRACKET LOWER CORNER" #x23A3) + ("RIGHT SQUARE BRACKET UPPER CORNER" #x23A4) + ("RIGHT SQUARE BRACKET EXTENSION" #x23A5) + ("RIGHT SQUARE BRACKET LOWER CORNER" #x23A6) + ("LEFT CURLY BRACKET UPPER HOOK" #x23A7) + ("LEFT CURLY BRACKET MIDDLE PIECE" #x23A8) + ("LEFT CURLY BRACKET LOWER HOOK" #x23A9) + ("CURLY BRACKET EXTENSION" #x23AA) + ("RIGHT CURLY BRACKET UPPER HOOK" #x23AB) + ("RIGHT CURLY BRACKET MIDDLE PIECE" #x23AC) + ("RIGHT CURLY BRACKET LOWER HOOK" #x23AD) + ("INTEGRAL EXTENSION" #x23AE) + ("HORIZONTAL LINE EXTENSION" #x23AF) + ("UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION" #x23B0) + ("UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION" #x23B1) + ("SUMMATION TOP" #x23B2) + ("SUMMATION BOTTOM" #x23B3) + ("TOP SQUARE BRACKET" #x23B4) + ("BOTTOM SQUARE BRACKET" #x23B5) + ("BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET" #x23B6) + ("RADICAL SYMBOL BOTTOM" #x23B7) + ("LEFT VERTICAL BOX LINE" #x23B8) + ("RIGHT VERTICAL BOX LINE" #x23B9) + ("HORIZONTAL SCAN LINE-1" #x23BA) + ("HORIZONTAL SCAN LINE-3" #x23BB) + ("HORIZONTAL SCAN LINE-7" #x23BC) + ("HORIZONTAL SCAN LINE-9" #x23BD) + ("DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT" #x23BE) + ("DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT" #x23BF) + ("DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE" #x23C0) + ("DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE" #x23C1) + ("DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE" #x23C2) + ("DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE" #x23C3) + ("DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE" #x23C4) + ("DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE" #x23C5) + ("DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE" #x23C6) + ("DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE" #x23C7) + ("DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE" #x23C8) + ("DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL" #x23C9) + ("DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL" #x23CA) + ("DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT" #x23CB) + ("DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT" #x23CC) + ("SQUARE FOOT" #x23CD) + ("RETURN SYMBOL" #x23CE) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/02400-0243F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,41 @@ +(nxml-define-char-name-set 'control-pictures + '(("SYMBOL FOR NULL" #x2400) + ("SYMBOL FOR START OF HEADING" #x2401) + ("SYMBOL FOR START OF TEXT" #x2402) + ("SYMBOL FOR END OF TEXT" #x2403) + ("SYMBOL FOR END OF TRANSMISSION" #x2404) + ("SYMBOL FOR ENQUIRY" #x2405) + ("SYMBOL FOR ACKNOWLEDGE" #x2406) + ("SYMBOL FOR BELL" #x2407) + ("SYMBOL FOR BACKSPACE" #x2408) + ("SYMBOL FOR HORIZONTAL TABULATION" #x2409) + ("SYMBOL FOR LINE FEED" #x240A) + ("SYMBOL FOR VERTICAL TABULATION" #x240B) + ("SYMBOL FOR FORM FEED" #x240C) + ("SYMBOL FOR CARRIAGE RETURN" #x240D) + ("SYMBOL FOR SHIFT OUT" #x240E) + ("SYMBOL FOR SHIFT IN" #x240F) + ("SYMBOL FOR DATA LINK ESCAPE" #x2410) + ("SYMBOL FOR DEVICE CONTROL ONE" #x2411) + ("SYMBOL FOR DEVICE CONTROL TWO" #x2412) + ("SYMBOL FOR DEVICE CONTROL THREE" #x2413) + ("SYMBOL FOR DEVICE CONTROL FOUR" #x2414) + ("SYMBOL FOR NEGATIVE ACKNOWLEDGE" #x2415) + ("SYMBOL FOR SYNCHRONOUS IDLE" #x2416) + ("SYMBOL FOR END OF TRANSMISSION BLOCK" #x2417) + ("SYMBOL FOR CANCEL" #x2418) + ("SYMBOL FOR END OF MEDIUM" #x2419) + ("SYMBOL FOR SUBSTITUTE" #x241A) + ("SYMBOL FOR ESCAPE" #x241B) + ("SYMBOL FOR FILE SEPARATOR" #x241C) + ("SYMBOL FOR GROUP SEPARATOR" #x241D) + ("SYMBOL FOR RECORD SEPARATOR" #x241E) + ("SYMBOL FOR UNIT SEPARATOR" #x241F) + ("SYMBOL FOR SPACE" #x2420) + ("SYMBOL FOR DELETE" #x2421) + ("BLANK SYMBOL" #x2422) + ("OPEN BOX" #x2423) + ("SYMBOL FOR NEWLINE" #x2424) + ("SYMBOL FOR DELETE FORM TWO" #x2425) + ("SYMBOL FOR SUBSTITUTE FORM TWO" #x2426) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/02440-0245F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,13 @@ +(nxml-define-char-name-set 'optical-character-recognition + '(("OCR HOOK" #x2440) + ("OCR CHAIR" #x2441) + ("OCR FORK" #x2442) + ("OCR INVERTED FORK" #x2443) + ("OCR BELT BUCKLE" #x2444) + ("OCR BOW TIE" #x2445) + ("OCR BRANCH BANK IDENTIFICATION" #x2446) + ("OCR AMOUNT OF CHECK" #x2447) + ("OCR DASH" #x2448) + ("OCR CUSTOMER ACCOUNT NUMBER" #x2449) + ("OCR DOUBLE BACKSLASH" #x244A) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/02460-024FF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,161 @@ +(nxml-define-char-name-set 'enclosed-alphanumerics + '(("CIRCLED DIGIT ONE" #x2460) + ("CIRCLED DIGIT TWO" #x2461) + ("CIRCLED DIGIT THREE" #x2462) + ("CIRCLED DIGIT FOUR" #x2463) + ("CIRCLED DIGIT FIVE" #x2464) + ("CIRCLED DIGIT SIX" #x2465) + ("CIRCLED DIGIT SEVEN" #x2466) + ("CIRCLED DIGIT EIGHT" #x2467) + ("CIRCLED DIGIT NINE" #x2468) + ("CIRCLED NUMBER TEN" #x2469) + ("CIRCLED NUMBER ELEVEN" #x246A) + ("CIRCLED NUMBER TWELVE" #x246B) + ("CIRCLED NUMBER THIRTEEN" #x246C) + ("CIRCLED NUMBER FOURTEEN" #x246D) + ("CIRCLED NUMBER FIFTEEN" #x246E) + ("CIRCLED NUMBER SIXTEEN" #x246F) + ("CIRCLED NUMBER SEVENTEEN" #x2470) + ("CIRCLED NUMBER EIGHTEEN" #x2471) + ("CIRCLED NUMBER NINETEEN" #x2472) + ("CIRCLED NUMBER TWENTY" #x2473) + ("PARENTHESIZED DIGIT ONE" #x2474) + ("PARENTHESIZED DIGIT TWO" #x2475) + ("PARENTHESIZED DIGIT THREE" #x2476) + ("PARENTHESIZED DIGIT FOUR" #x2477) + ("PARENTHESIZED DIGIT FIVE" #x2478) + ("PARENTHESIZED DIGIT SIX" #x2479) + ("PARENTHESIZED DIGIT SEVEN" #x247A) + ("PARENTHESIZED DIGIT EIGHT" #x247B) + ("PARENTHESIZED DIGIT NINE" #x247C) + ("PARENTHESIZED NUMBER TEN" #x247D) + ("PARENTHESIZED NUMBER ELEVEN" #x247E) + ("PARENTHESIZED NUMBER TWELVE" #x247F) + ("PARENTHESIZED NUMBER THIRTEEN" #x2480) + ("PARENTHESIZED NUMBER FOURTEEN" #x2481) + ("PARENTHESIZED NUMBER FIFTEEN" #x2482) + ("PARENTHESIZED NUMBER SIXTEEN" #x2483) + ("PARENTHESIZED NUMBER SEVENTEEN" #x2484) + ("PARENTHESIZED NUMBER EIGHTEEN" #x2485) + ("PARENTHESIZED NUMBER NINETEEN" #x2486) + ("PARENTHESIZED NUMBER TWENTY" #x2487) + ("DIGIT ONE FULL STOP" #x2488) + ("DIGIT TWO FULL STOP" #x2489) + ("DIGIT THREE FULL STOP" #x248A) + ("DIGIT FOUR FULL STOP" #x248B) + ("DIGIT FIVE FULL STOP" #x248C) + ("DIGIT SIX FULL STOP" #x248D) + ("DIGIT SEVEN FULL STOP" #x248E) + ("DIGIT EIGHT FULL STOP" #x248F) + ("DIGIT NINE FULL STOP" #x2490) + ("NUMBER TEN FULL STOP" #x2491) + ("NUMBER ELEVEN FULL STOP" #x2492) + ("NUMBER TWELVE FULL STOP" #x2493) + ("NUMBER THIRTEEN FULL STOP" #x2494) + ("NUMBER FOURTEEN FULL STOP" #x2495) + ("NUMBER FIFTEEN FULL STOP" #x2496) + ("NUMBER SIXTEEN FULL STOP" #x2497) + ("NUMBER SEVENTEEN FULL STOP" #x2498) + ("NUMBER EIGHTEEN FULL STOP" #x2499) + ("NUMBER NINETEEN FULL STOP" #x249A) + ("NUMBER TWENTY FULL STOP" #x249B) + ("PARENTHESIZED LATIN SMALL LETTER A" #x249C) + ("PARENTHESIZED LATIN SMALL LETTER B" #x249D) + ("PARENTHESIZED LATIN SMALL LETTER C" #x249E) + ("PARENTHESIZED LATIN SMALL LETTER D" #x249F) + ("PARENTHESIZED LATIN SMALL LETTER E" #x24A0) + ("PARENTHESIZED LATIN SMALL LETTER F" #x24A1) + ("PARENTHESIZED LATIN SMALL LETTER G" #x24A2) + ("PARENTHESIZED LATIN SMALL LETTER H" #x24A3) + ("PARENTHESIZED LATIN SMALL LETTER I" #x24A4) + ("PARENTHESIZED LATIN SMALL LETTER J" #x24A5) + ("PARENTHESIZED LATIN SMALL LETTER K" #x24A6) + ("PARENTHESIZED LATIN SMALL LETTER L" #x24A7) + ("PARENTHESIZED LATIN SMALL LETTER M" #x24A8) + ("PARENTHESIZED LATIN SMALL LETTER N" #x24A9) + ("PARENTHESIZED LATIN SMALL LETTER O" #x24AA) + ("PARENTHESIZED LATIN SMALL LETTER P" #x24AB) + ("PARENTHESIZED LATIN SMALL LETTER Q" #x24AC) + ("PARENTHESIZED LATIN SMALL LETTER R" #x24AD) + ("PARENTHESIZED LATIN SMALL LETTER S" #x24AE) + ("PARENTHESIZED LATIN SMALL LETTER T" #x24AF) + ("PARENTHESIZED LATIN SMALL LETTER U" #x24B0) + ("PARENTHESIZED LATIN SMALL LETTER V" #x24B1) + ("PARENTHESIZED LATIN SMALL LETTER W" #x24B2) + ("PARENTHESIZED LATIN SMALL LETTER X" #x24B3) + ("PARENTHESIZED LATIN SMALL LETTER Y" #x24B4) + ("PARENTHESIZED LATIN SMALL LETTER Z" #x24B5) + ("CIRCLED LATIN CAPITAL LETTER A" #x24B6) + ("CIRCLED LATIN CAPITAL LETTER B" #x24B7) + ("CIRCLED LATIN CAPITAL LETTER C" #x24B8) + ("CIRCLED LATIN CAPITAL LETTER D" #x24B9) + ("CIRCLED LATIN CAPITAL LETTER E" #x24BA) + ("CIRCLED LATIN CAPITAL LETTER F" #x24BB) + ("CIRCLED LATIN CAPITAL LETTER G" #x24BC) + ("CIRCLED LATIN CAPITAL LETTER H" #x24BD) + ("CIRCLED LATIN CAPITAL LETTER I" #x24BE) + ("CIRCLED LATIN CAPITAL LETTER J" #x24BF) + ("CIRCLED LATIN CAPITAL LETTER K" #x24C0) + ("CIRCLED LATIN CAPITAL LETTER L" #x24C1) + ("CIRCLED LATIN CAPITAL LETTER M" #x24C2) + ("CIRCLED LATIN CAPITAL LETTER N" #x24C3) + ("CIRCLED LATIN CAPITAL LETTER O" #x24C4) + ("CIRCLED LATIN CAPITAL LETTER P" #x24C5) + ("CIRCLED LATIN CAPITAL LETTER Q" #x24C6) + ("CIRCLED LATIN CAPITAL LETTER R" #x24C7) + ("CIRCLED LATIN CAPITAL LETTER S" #x24C8) + ("CIRCLED LATIN CAPITAL LETTER T" #x24C9) + ("CIRCLED LATIN CAPITAL LETTER U" #x24CA) + ("CIRCLED LATIN CAPITAL LETTER V" #x24CB) + ("CIRCLED LATIN CAPITAL LETTER W" #x24CC) + ("CIRCLED LATIN CAPITAL LETTER X" #x24CD) + ("CIRCLED LATIN CAPITAL LETTER Y" #x24CE) + ("CIRCLED LATIN CAPITAL LETTER Z" #x24CF) + ("CIRCLED LATIN SMALL LETTER A" #x24D0) + ("CIRCLED LATIN SMALL LETTER B" #x24D1) + ("CIRCLED LATIN SMALL LETTER C" #x24D2) + ("CIRCLED LATIN SMALL LETTER D" #x24D3) + ("CIRCLED LATIN SMALL LETTER E" #x24D4) + ("CIRCLED LATIN SMALL LETTER F" #x24D5) + ("CIRCLED LATIN SMALL LETTER G" #x24D6) + ("CIRCLED LATIN SMALL LETTER H" #x24D7) + ("CIRCLED LATIN SMALL LETTER I" #x24D8) + ("CIRCLED LATIN SMALL LETTER J" #x24D9) + ("CIRCLED LATIN SMALL LETTER K" #x24DA) + ("CIRCLED LATIN SMALL LETTER L" #x24DB) + ("CIRCLED LATIN SMALL LETTER M" #x24DC) + ("CIRCLED LATIN SMALL LETTER N" #x24DD) + ("CIRCLED LATIN SMALL LETTER O" #x24DE) + ("CIRCLED LATIN SMALL LETTER P" #x24DF) + ("CIRCLED LATIN SMALL LETTER Q" #x24E0) + ("CIRCLED LATIN SMALL LETTER R" #x24E1) + ("CIRCLED LATIN SMALL LETTER S" #x24E2) + ("CIRCLED LATIN SMALL LETTER T" #x24E3) + ("CIRCLED LATIN SMALL LETTER U" #x24E4) + ("CIRCLED LATIN SMALL LETTER V" #x24E5) + ("CIRCLED LATIN SMALL LETTER W" #x24E6) + ("CIRCLED LATIN SMALL LETTER X" #x24E7) + ("CIRCLED LATIN SMALL LETTER Y" #x24E8) + ("CIRCLED LATIN SMALL LETTER Z" #x24E9) + ("CIRCLED DIGIT ZERO" #x24EA) + ("NEGATIVE CIRCLED NUMBER ELEVEN" #x24EB) + ("NEGATIVE CIRCLED NUMBER TWELVE" #x24EC) + ("NEGATIVE CIRCLED NUMBER THIRTEEN" #x24ED) + ("NEGATIVE CIRCLED NUMBER FOURTEEN" #x24EE) + ("NEGATIVE CIRCLED NUMBER FIFTEEN" #x24EF) + ("NEGATIVE CIRCLED NUMBER SIXTEEN" #x24F0) + ("NEGATIVE CIRCLED NUMBER SEVENTEEN" #x24F1) + ("NEGATIVE CIRCLED NUMBER EIGHTEEN" #x24F2) + ("NEGATIVE CIRCLED NUMBER NINETEEN" #x24F3) + ("NEGATIVE CIRCLED NUMBER TWENTY" #x24F4) + ("DOUBLE CIRCLED DIGIT ONE" #x24F5) + ("DOUBLE CIRCLED DIGIT TWO" #x24F6) + ("DOUBLE CIRCLED DIGIT THREE" #x24F7) + ("DOUBLE CIRCLED DIGIT FOUR" #x24F8) + ("DOUBLE CIRCLED DIGIT FIVE" #x24F9) + ("DOUBLE CIRCLED DIGIT SIX" #x24FA) + ("DOUBLE CIRCLED DIGIT SEVEN" #x24FB) + ("DOUBLE CIRCLED DIGIT EIGHT" #x24FC) + ("DOUBLE CIRCLED DIGIT NINE" #x24FD) + ("DOUBLE CIRCLED NUMBER TEN" #x24FE) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/02500-0257F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,130 @@ +(nxml-define-char-name-set 'box-drawing + '(("BOX DRAWINGS LIGHT HORIZONTAL" #x2500) + ("BOX DRAWINGS HEAVY HORIZONTAL" #x2501) + ("BOX DRAWINGS LIGHT VERTICAL" #x2502) + ("BOX DRAWINGS HEAVY VERTICAL" #x2503) + ("BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL" #x2504) + ("BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL" #x2505) + ("BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL" #x2506) + ("BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL" #x2507) + ("BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL" #x2508) + ("BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL" #x2509) + ("BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL" #x250A) + ("BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL" #x250B) + ("BOX DRAWINGS LIGHT DOWN AND RIGHT" #x250C) + ("BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY" #x250D) + ("BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT" #x250E) + ("BOX DRAWINGS HEAVY DOWN AND RIGHT" #x250F) + ("BOX DRAWINGS LIGHT DOWN AND LEFT" #x2510) + ("BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY" #x2511) + ("BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT" #x2512) + ("BOX DRAWINGS HEAVY DOWN AND LEFT" #x2513) + ("BOX DRAWINGS LIGHT UP AND RIGHT" #x2514) + ("BOX DRAWINGS UP LIGHT AND RIGHT HEAVY" #x2515) + ("BOX DRAWINGS UP HEAVY AND RIGHT LIGHT" #x2516) + ("BOX DRAWINGS HEAVY UP AND RIGHT" #x2517) + ("BOX DRAWINGS LIGHT UP AND LEFT" #x2518) + ("BOX DRAWINGS UP LIGHT AND LEFT HEAVY" #x2519) + ("BOX DRAWINGS UP HEAVY AND LEFT LIGHT" #x251A) + ("BOX DRAWINGS HEAVY UP AND LEFT" #x251B) + ("BOX DRAWINGS LIGHT VERTICAL AND RIGHT" #x251C) + ("BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY" #x251D) + ("BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT" #x251E) + ("BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT" #x251F) + ("BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT" #x2520) + ("BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY" #x2521) + ("BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY" #x2522) + ("BOX DRAWINGS HEAVY VERTICAL AND RIGHT" #x2523) + ("BOX DRAWINGS LIGHT VERTICAL AND LEFT" #x2524) + ("BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY" #x2525) + ("BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT" #x2526) + ("BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT" #x2527) + ("BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT" #x2528) + ("BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY" #x2529) + ("BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY" #x252A) + ("BOX DRAWINGS HEAVY VERTICAL AND LEFT" #x252B) + ("BOX DRAWINGS LIGHT DOWN AND HORIZONTAL" #x252C) + ("BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT" #x252D) + ("BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT" #x252E) + ("BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY" #x252F) + ("BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT" #x2530) + ("BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY" #x2531) + ("BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY" #x2532) + ("BOX DRAWINGS HEAVY DOWN AND HORIZONTAL" #x2533) + ("BOX DRAWINGS LIGHT UP AND HORIZONTAL" #x2534) + ("BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT" #x2535) + ("BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT" #x2536) + ("BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY" #x2537) + ("BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT" #x2538) + ("BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY" #x2539) + ("BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY" #x253A) + ("BOX DRAWINGS HEAVY UP AND HORIZONTAL" #x253B) + ("BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL" #x253C) + ("BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT" #x253D) + ("BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT" #x253E) + ("BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY" #x253F) + ("BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT" #x2540) + ("BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT" #x2541) + ("BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT" #x2542) + ("BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT" #x2543) + ("BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT" #x2544) + ("BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT" #x2545) + ("BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT" #x2546) + ("BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY" #x2547) + ("BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY" #x2548) + ("BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY" #x2549) + ("BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY" #x254A) + ("BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL" #x254B) + ("BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL" #x254C) + ("BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL" #x254D) + ("BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL" #x254E) + ("BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL" #x254F) + ("BOX DRAWINGS DOUBLE HORIZONTAL" #x2550) + ("BOX DRAWINGS DOUBLE VERTICAL" #x2551) + ("BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE" #x2552) + ("BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE" #x2553) + ("BOX DRAWINGS DOUBLE DOWN AND RIGHT" #x2554) + ("BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE" #x2555) + ("BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE" #x2556) + ("BOX DRAWINGS DOUBLE DOWN AND LEFT" #x2557) + ("BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE" #x2558) + ("BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE" #x2559) + ("BOX DRAWINGS DOUBLE UP AND RIGHT" #x255A) + ("BOX DRAWINGS UP SINGLE AND LEFT DOUBLE" #x255B) + ("BOX DRAWINGS UP DOUBLE AND LEFT SINGLE" #x255C) + ("BOX DRAWINGS DOUBLE UP AND LEFT" #x255D) + ("BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE" #x255E) + ("BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE" #x255F) + ("BOX DRAWINGS DOUBLE VERTICAL AND RIGHT" #x2560) + ("BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE" #x2561) + ("BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE" #x2562) + ("BOX DRAWINGS DOUBLE VERTICAL AND LEFT" #x2563) + ("BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE" #x2564) + ("BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE" #x2565) + ("BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL" #x2566) + ("BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE" #x2567) + ("BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE" #x2568) + ("BOX DRAWINGS DOUBLE UP AND HORIZONTAL" #x2569) + ("BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE" #x256A) + ("BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE" #x256B) + ("BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL" #x256C) + ("BOX DRAWINGS LIGHT ARC DOWN AND RIGHT" #x256D) + ("BOX DRAWINGS LIGHT ARC DOWN AND LEFT" #x256E) + ("BOX DRAWINGS LIGHT ARC UP AND LEFT" #x256F) + ("BOX DRAWINGS LIGHT ARC UP AND RIGHT" #x2570) + ("BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT" #x2571) + ("BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT" #x2572) + ("BOX DRAWINGS LIGHT DIAGONAL CROSS" #x2573) + ("BOX DRAWINGS LIGHT LEFT" #x2574) + ("BOX DRAWINGS LIGHT UP" #x2575) + ("BOX DRAWINGS LIGHT RIGHT" #x2576) + ("BOX DRAWINGS LIGHT DOWN" #x2577) + ("BOX DRAWINGS HEAVY LEFT" #x2578) + ("BOX DRAWINGS HEAVY UP" #x2579) + ("BOX DRAWINGS HEAVY RIGHT" #x257A) + ("BOX DRAWINGS HEAVY DOWN" #x257B) + ("BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT" #x257C) + ("BOX DRAWINGS LIGHT UP AND HEAVY DOWN" #x257D) + ("BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT" #x257E) + ("BOX DRAWINGS HEAVY UP AND LIGHT DOWN" #x257F) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/02580-0259F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,34 @@ +(nxml-define-char-name-set 'block-elements + '(("UPPER HALF BLOCK" #x2580) + ("LOWER ONE EIGHTH BLOCK" #x2581) + ("LOWER ONE QUARTER BLOCK" #x2582) + ("LOWER THREE EIGHTHS BLOCK" #x2583) + ("LOWER HALF BLOCK" #x2584) + ("LOWER FIVE EIGHTHS BLOCK" #x2585) + ("LOWER THREE QUARTERS BLOCK" #x2586) + ("LOWER SEVEN EIGHTHS BLOCK" #x2587) + ("FULL BLOCK" #x2588) + ("LEFT SEVEN EIGHTHS BLOCK" #x2589) + ("LEFT THREE QUARTERS BLOCK" #x258A) + ("LEFT FIVE EIGHTHS BLOCK" #x258B) + ("LEFT HALF BLOCK" #x258C) + ("LEFT THREE EIGHTHS BLOCK" #x258D) + ("LEFT ONE QUARTER BLOCK" #x258E) + ("LEFT ONE EIGHTH BLOCK" #x258F) + ("RIGHT HALF BLOCK" #x2590) + ("LIGHT SHADE" #x2591) + ("MEDIUM SHADE" #x2592) + ("DARK SHADE" #x2593) + ("UPPER ONE EIGHTH BLOCK" #x2594) + ("RIGHT ONE EIGHTH BLOCK" #x2595) + ("QUADRANT LOWER LEFT" #x2596) + ("QUADRANT LOWER RIGHT" #x2597) + ("QUADRANT UPPER LEFT" #x2598) + ("QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT" #x2599) + ("QUADRANT UPPER LEFT AND LOWER RIGHT" #x259A) + ("QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT" #x259B) + ("QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT" #x259C) + ("QUADRANT UPPER RIGHT" #x259D) + ("QUADRANT UPPER RIGHT AND LOWER LEFT" #x259E) + ("QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT" #x259F) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/025A0-025FF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,98 @@ +(nxml-define-char-name-set 'geometric-shapes + '(("BLACK SQUARE" #x25A0) + ("WHITE SQUARE" #x25A1) + ("WHITE SQUARE WITH ROUNDED CORNERS" #x25A2) + ("WHITE SQUARE CONTAINING BLACK SMALL SQUARE" #x25A3) + ("SQUARE WITH HORIZONTAL FILL" #x25A4) + ("SQUARE WITH VERTICAL FILL" #x25A5) + ("SQUARE WITH ORTHOGONAL CROSSHATCH FILL" #x25A6) + ("SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL" #x25A7) + ("SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL" #x25A8) + ("SQUARE WITH DIAGONAL CROSSHATCH FILL" #x25A9) + ("BLACK SMALL SQUARE" #x25AA) + ("WHITE SMALL SQUARE" #x25AB) + ("BLACK RECTANGLE" #x25AC) + ("WHITE RECTANGLE" #x25AD) + ("BLACK VERTICAL RECTANGLE" #x25AE) + ("WHITE VERTICAL RECTANGLE" #x25AF) + ("BLACK PARALLELOGRAM" #x25B0) + ("WHITE PARALLELOGRAM" #x25B1) + ("BLACK UP-POINTING TRIANGLE" #x25B2) + ("WHITE UP-POINTING TRIANGLE" #x25B3) + ("BLACK UP-POINTING SMALL TRIANGLE" #x25B4) + ("WHITE UP-POINTING SMALL TRIANGLE" #x25B5) + ("BLACK RIGHT-POINTING TRIANGLE" #x25B6) + ("WHITE RIGHT-POINTING TRIANGLE" #x25B7) + ("BLACK RIGHT-POINTING SMALL TRIANGLE" #x25B8) + ("WHITE RIGHT-POINTING SMALL TRIANGLE" #x25B9) + ("BLACK RIGHT-POINTING POINTER" #x25BA) + ("WHITE RIGHT-POINTING POINTER" #x25BB) + ("BLACK DOWN-POINTING TRIANGLE" #x25BC) + ("WHITE DOWN-POINTING TRIANGLE" #x25BD) + ("BLACK DOWN-POINTING SMALL TRIANGLE" #x25BE) + ("WHITE DOWN-POINTING SMALL TRIANGLE" #x25BF) + ("BLACK LEFT-POINTING TRIANGLE" #x25C0) + ("WHITE LEFT-POINTING TRIANGLE" #x25C1) + ("BLACK LEFT-POINTING SMALL TRIANGLE" #x25C2) + ("WHITE LEFT-POINTING SMALL TRIANGLE" #x25C3) + ("BLACK LEFT-POINTING POINTER" #x25C4) + ("WHITE LEFT-POINTING POINTER" #x25C5) + ("BLACK DIAMOND" #x25C6) + ("WHITE DIAMOND" #x25C7) + ("WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND" #x25C8) + ("FISHEYE" #x25C9) + ("LOZENGE" #x25CA) + ("WHITE CIRCLE" #x25CB) + ("DOTTED CIRCLE" #x25CC) + ("CIRCLE WITH VERTICAL FILL" #x25CD) + ("BULLSEYE" #x25CE) + ("BLACK CIRCLE" #x25CF) + ("CIRCLE WITH LEFT HALF BLACK" #x25D0) + ("CIRCLE WITH RIGHT HALF BLACK" #x25D1) + ("CIRCLE WITH LOWER HALF BLACK" #x25D2) + ("CIRCLE WITH UPPER HALF BLACK" #x25D3) + ("CIRCLE WITH UPPER RIGHT QUADRANT BLACK" #x25D4) + ("CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK" #x25D5) + ("LEFT HALF BLACK CIRCLE" #x25D6) + ("RIGHT HALF BLACK CIRCLE" #x25D7) + ("INVERSE BULLET" #x25D8) + ("INVERSE WHITE CIRCLE" #x25D9) + ("UPPER HALF INVERSE WHITE CIRCLE" #x25DA) + ("LOWER HALF INVERSE WHITE CIRCLE" #x25DB) + ("UPPER LEFT QUADRANT CIRCULAR ARC" #x25DC) + ("UPPER RIGHT QUADRANT CIRCULAR ARC" #x25DD) + ("LOWER RIGHT QUADRANT CIRCULAR ARC" #x25DE) + ("LOWER LEFT QUADRANT CIRCULAR ARC" #x25DF) + ("UPPER HALF CIRCLE" #x25E0) + ("LOWER HALF CIRCLE" #x25E1) + ("BLACK LOWER RIGHT TRIANGLE" #x25E2) + ("BLACK LOWER LEFT TRIANGLE" #x25E3) + ("BLACK UPPER LEFT TRIANGLE" #x25E4) + ("BLACK UPPER RIGHT TRIANGLE" #x25E5) + ("WHITE BULLET" #x25E6) + ("SQUARE WITH LEFT HALF BLACK" #x25E7) + ("SQUARE WITH RIGHT HALF BLACK" #x25E8) + ("SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK" #x25E9) + ("SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK" #x25EA) + ("WHITE SQUARE WITH VERTICAL BISECTING LINE" #x25EB) + ("WHITE UP-POINTING TRIANGLE WITH DOT" #x25EC) + ("UP-POINTING TRIANGLE WITH LEFT HALF BLACK" #x25ED) + ("UP-POINTING TRIANGLE WITH RIGHT HALF BLACK" #x25EE) + ("LARGE CIRCLE" #x25EF) + ("WHITE SQUARE WITH UPPER LEFT QUADRANT" #x25F0) + ("WHITE SQUARE WITH LOWER LEFT QUADRANT" #x25F1) + ("WHITE SQUARE WITH LOWER RIGHT QUADRANT" #x25F2) + ("WHITE SQUARE WITH UPPER RIGHT QUADRANT" #x25F3) + ("WHITE CIRCLE WITH UPPER LEFT QUADRANT" #x25F4) + ("WHITE CIRCLE WITH LOWER LEFT QUADRANT" #x25F5) + ("WHITE CIRCLE WITH LOWER RIGHT QUADRANT" #x25F6) + ("WHITE CIRCLE WITH UPPER RIGHT QUADRANT" #x25F7) + ("UPPER LEFT TRIANGLE" #x25F8) + ("UPPER RIGHT TRIANGLE" #x25F9) + ("LOWER LEFT TRIANGLE" #x25FA) + ("WHITE MEDIUM SQUARE" #x25FB) + ("BLACK MEDIUM SQUARE" #x25FC) + ("WHITE MEDIUM SMALL SQUARE" #x25FD) + ("BLACK MEDIUM SMALL SQUARE" #x25FE) + ("LOWER RIGHT TRIANGLE" #x25FF) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/02600-026FF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,135 @@ +(nxml-define-char-name-set 'miscellaneous-symbols + '(("BLACK SUN WITH RAYS" #x2600) + ("CLOUD" #x2601) + ("UMBRELLA" #x2602) + ("SNOWMAN" #x2603) + ("COMET" #x2604) + ("BLACK STAR" #x2605) + ("WHITE STAR" #x2606) + ("LIGHTNING" #x2607) + ("THUNDERSTORM" #x2608) + ("SUN" #x2609) + ("ASCENDING NODE" #x260A) + ("DESCENDING NODE" #x260B) + ("CONJUNCTION" #x260C) + ("OPPOSITION" #x260D) + ("BLACK TELEPHONE" #x260E) + ("WHITE TELEPHONE" #x260F) + ("BALLOT BOX" #x2610) + ("BALLOT BOX WITH CHECK" #x2611) + ("BALLOT BOX WITH X" #x2612) + ("SALTIRE" #x2613) + ("WHITE SHOGI PIECE" #x2616) + ("BLACK SHOGI PIECE" #x2617) + ("REVERSED ROTATED FLORAL HEART BULLET" #x2619) + ("BLACK LEFT POINTING INDEX" #x261A) + ("BLACK RIGHT POINTING INDEX" #x261B) + ("WHITE LEFT POINTING INDEX" #x261C) + ("WHITE UP POINTING INDEX" #x261D) + ("WHITE RIGHT POINTING INDEX" #x261E) + ("WHITE DOWN POINTING INDEX" #x261F) + ("SKULL AND CROSSBONES" #x2620) + ("CAUTION SIGN" #x2621) + ("RADIOACTIVE SIGN" #x2622) + ("BIOHAZARD SIGN" #x2623) + ("CADUCEUS" #x2624) + ("ANKH" #x2625) + ("ORTHODOX CROSS" #x2626) + ("CHI RHO" #x2627) + ("CROSS OF LORRAINE" #x2628) + ("CROSS OF JERUSALEM" #x2629) + ("STAR AND CRESCENT" #x262A) + ("FARSI SYMBOL" #x262B) + ("ADI SHAKTI" #x262C) + ("HAMMER AND SICKLE" #x262D) + ("PEACE SYMBOL" #x262E) + ("YIN YANG" #x262F) + ("TRIGRAM FOR HEAVEN" #x2630) + ("TRIGRAM FOR LAKE" #x2631) + ("TRIGRAM FOR FIRE" #x2632) + ("TRIGRAM FOR THUNDER" #x2633) + ("TRIGRAM FOR WIND" #x2634) + ("TRIGRAM FOR WATER" #x2635) + ("TRIGRAM FOR MOUNTAIN" #x2636) + ("TRIGRAM FOR EARTH" #x2637) + ("WHEEL OF DHARMA" #x2638) + ("WHITE FROWNING FACE" #x2639) + ("WHITE SMILING FACE" #x263A) + ("BLACK SMILING FACE" #x263B) + ("WHITE SUN WITH RAYS" #x263C) + ("FIRST QUARTER MOON" #x263D) + ("LAST QUARTER MOON" #x263E) + ("MERCURY" #x263F) + ("FEMALE SIGN" #x2640) + ("EARTH" #x2641) + ("MALE SIGN" #x2642) + ("JUPITER" #x2643) + ("SATURN" #x2644) + ("URANUS" #x2645) + ("NEPTUNE" #x2646) + ("PLUTO" #x2647) + ("ARIES" #x2648) + ("TAURUS" #x2649) + ("GEMINI" #x264A) + ("CANCER" #x264B) + ("LEO" #x264C) + ("VIRGO" #x264D) + ("LIBRA" #x264E) + ("SCORPIUS" #x264F) + ("SAGITTARIUS" #x2650) + ("CAPRICORN" #x2651) + ("AQUARIUS" #x2652) + ("PISCES" #x2653) + ("WHITE CHESS KING" #x2654) + ("WHITE CHESS QUEEN" #x2655) + ("WHITE CHESS ROOK" #x2656) + ("WHITE CHESS BISHOP" #x2657) + ("WHITE CHESS KNIGHT" #x2658) + ("WHITE CHESS PAWN" #x2659) + ("BLACK CHESS KING" #x265A) + ("BLACK CHESS QUEEN" #x265B) + ("BLACK CHESS ROOK" #x265C) + ("BLACK CHESS BISHOP" #x265D) + ("BLACK CHESS KNIGHT" #x265E) + ("BLACK CHESS PAWN" #x265F) + ("BLACK SPADE SUIT" #x2660) + ("WHITE HEART SUIT" #x2661) + ("WHITE DIAMOND SUIT" #x2662) + ("BLACK CLUB SUIT" #x2663) + ("WHITE SPADE SUIT" #x2664) + ("BLACK HEART SUIT" #x2665) + ("BLACK DIAMOND SUIT" #x2666) + ("WHITE CLUB SUIT" #x2667) + ("HOT SPRINGS" #x2668) + ("QUARTER NOTE" #x2669) + ("EIGHTH NOTE" #x266A) + ("BEAMED EIGHTH NOTES" #x266B) + ("BEAMED SIXTEENTH NOTES" #x266C) + ("MUSIC FLAT SIGN" #x266D) + ("MUSIC NATURAL SIGN" #x266E) + ("MUSIC SHARP SIGN" #x266F) + ("WEST SYRIAC CROSS" #x2670) + ("EAST SYRIAC CROSS" #x2671) + ("UNIVERSAL RECYCLING SYMBOL" #x2672) + ("RECYCLING SYMBOL FOR TYPE-1 PLASTICS" #x2673) + ("RECYCLING SYMBOL FOR TYPE-2 PLASTICS" #x2674) + ("RECYCLING SYMBOL FOR TYPE-3 PLASTICS" #x2675) + ("RECYCLING SYMBOL FOR TYPE-4 PLASTICS" #x2676) + ("RECYCLING SYMBOL FOR TYPE-5 PLASTICS" #x2677) + ("RECYCLING SYMBOL FOR TYPE-6 PLASTICS" #x2678) + ("RECYCLING SYMBOL FOR TYPE-7 PLASTICS" #x2679) + ("RECYCLING SYMBOL FOR GENERIC MATERIALS" #x267A) + ("BLACK UNIVERSAL RECYCLING SYMBOL" #x267B) + ("RECYCLED PAPER SYMBOL" #x267C) + ("PARTIALLY-RECYCLED PAPER SYMBOL" #x267D) + ("DIE FACE-1" #x2680) + ("DIE FACE-2" #x2681) + ("DIE FACE-3" #x2682) + ("DIE FACE-4" #x2683) + ("DIE FACE-5" #x2684) + ("DIE FACE-6" #x2685) + ("WHITE CIRCLE WITH DOT RIGHT" #x2686) + ("WHITE CIRCLE WITH TWO DOTS" #x2687) + ("BLACK CIRCLE WITH WHITE DOT RIGHT" #x2688) + ("BLACK CIRCLE WITH TWO WHITE DOTS" #x2689) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/02700-027BF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,176 @@ +(nxml-define-char-name-set 'dingbats + '(("UPPER BLADE SCISSORS" #x2701) + ("BLACK SCISSORS" #x2702) + ("LOWER BLADE SCISSORS" #x2703) + ("WHITE SCISSORS" #x2704) + ("TELEPHONE LOCATION SIGN" #x2706) + ("TAPE DRIVE" #x2707) + ("AIRPLANE" #x2708) + ("ENVELOPE" #x2709) + ("VICTORY HAND" #x270C) + ("WRITING HAND" #x270D) + ("LOWER RIGHT PENCIL" #x270E) + ("PENCIL" #x270F) + ("UPPER RIGHT PENCIL" #x2710) + ("WHITE NIB" #x2711) + ("BLACK NIB" #x2712) + ("CHECK MARK" #x2713) + ("HEAVY CHECK MARK" #x2714) + ("MULTIPLICATION X" #x2715) + ("HEAVY MULTIPLICATION X" #x2716) + ("BALLOT X" #x2717) + ("HEAVY BALLOT X" #x2718) + ("OUTLINED GREEK CROSS" #x2719) + ("HEAVY GREEK CROSS" #x271A) + ("OPEN CENTRE CROSS" #x271B) + ("HEAVY OPEN CENTRE CROSS" #x271C) + ("LATIN CROSS" #x271D) + ("SHADOWED WHITE LATIN CROSS" #x271E) + ("OUTLINED LATIN CROSS" #x271F) + ("MALTESE CROSS" #x2720) + ("STAR OF DAVID" #x2721) + ("FOUR TEARDROP-SPOKED ASTERISK" #x2722) + ("FOUR BALLOON-SPOKED ASTERISK" #x2723) + ("HEAVY FOUR BALLOON-SPOKED ASTERISK" #x2724) + ("FOUR CLUB-SPOKED ASTERISK" #x2725) + ("BLACK FOUR POINTED STAR" #x2726) + ("WHITE FOUR POINTED STAR" #x2727) + ("STRESS OUTLINED WHITE STAR" #x2729) + ("CIRCLED WHITE STAR" #x272A) + ("OPEN CENTRE BLACK STAR" #x272B) + ("BLACK CENTRE WHITE STAR" #x272C) + ("OUTLINED BLACK STAR" #x272D) + ("HEAVY OUTLINED BLACK STAR" #x272E) + ("PINWHEEL STAR" #x272F) + ("SHADOWED WHITE STAR" #x2730) + ("HEAVY ASTERISK" #x2731) + ("OPEN CENTRE ASTERISK" #x2732) + ("EIGHT SPOKED ASTERISK" #x2733) + ("EIGHT POINTED BLACK STAR" #x2734) + ("EIGHT POINTED PINWHEEL STAR" #x2735) + ("SIX POINTED BLACK STAR" #x2736) + ("EIGHT POINTED RECTILINEAR BLACK STAR" #x2737) + ("HEAVY EIGHT POINTED RECTILINEAR BLACK STAR" #x2738) + ("TWELVE POINTED BLACK STAR" #x2739) + ("SIXTEEN POINTED ASTERISK" #x273A) + ("TEARDROP-SPOKED ASTERISK" #x273B) + ("OPEN CENTRE TEARDROP-SPOKED ASTERISK" #x273C) + ("HEAVY TEARDROP-SPOKED ASTERISK" #x273D) + ("SIX PETALLED BLACK AND WHITE FLORETTE" #x273E) + ("BLACK FLORETTE" #x273F) + ("WHITE FLORETTE" #x2740) + ("EIGHT PETALLED OUTLINED BLACK FLORETTE" #x2741) + ("CIRCLED OPEN CENTRE EIGHT POINTED STAR" #x2742) + ("HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK" #x2743) + ("SNOWFLAKE" #x2744) + ("TIGHT TRIFOLIATE SNOWFLAKE" #x2745) + ("HEAVY CHEVRON SNOWFLAKE" #x2746) + ("SPARKLE" #x2747) + ("HEAVY SPARKLE" #x2748) + ("BALLOON-SPOKED ASTERISK" #x2749) + ("EIGHT TEARDROP-SPOKED PROPELLER ASTERISK" #x274A) + ("HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK" #x274B) + ("SHADOWED WHITE CIRCLE" #x274D) + ("LOWER RIGHT DROP-SHADOWED WHITE SQUARE" #x274F) + ("UPPER RIGHT DROP-SHADOWED WHITE SQUARE" #x2750) + ("LOWER RIGHT SHADOWED WHITE SQUARE" #x2751) + ("UPPER RIGHT SHADOWED WHITE SQUARE" #x2752) + ("BLACK DIAMOND MINUS WHITE X" #x2756) + ("LIGHT VERTICAL BAR" #x2758) + ("MEDIUM VERTICAL BAR" #x2759) + ("HEAVY VERTICAL BAR" #x275A) + ("HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT" #x275B) + ("HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT" #x275C) + ("HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT" #x275D) + ("HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT" #x275E) + ("CURVED STEM PARAGRAPH SIGN ORNAMENT" #x2761) + ("HEAVY EXCLAMATION MARK ORNAMENT" #x2762) + ("HEAVY HEART EXCLAMATION MARK ORNAMENT" #x2763) + ("HEAVY BLACK HEART" #x2764) + ("ROTATED HEAVY BLACK HEART BULLET" #x2765) + ("FLORAL HEART" #x2766) + ("ROTATED FLORAL HEART BULLET" #x2767) + ("MEDIUM LEFT PARENTHESIS ORNAMENT" #x2768) + ("MEDIUM RIGHT PARENTHESIS ORNAMENT" #x2769) + ("MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT" #x276A) + ("MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT" #x276B) + ("MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT" #x276C) + ("MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT" #x276D) + ("HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT" #x276E) + ("HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT" #x276F) + ("HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT" #x2770) + ("HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT" #x2771) + ("LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT" #x2772) + ("LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT" #x2773) + ("MEDIUM LEFT CURLY BRACKET ORNAMENT" #x2774) + ("MEDIUM RIGHT CURLY BRACKET ORNAMENT" #x2775) + ("DINGBAT NEGATIVE CIRCLED DIGIT ONE" #x2776) + ("DINGBAT NEGATIVE CIRCLED DIGIT TWO" #x2777) + ("DINGBAT NEGATIVE CIRCLED DIGIT THREE" #x2778) + ("DINGBAT NEGATIVE CIRCLED DIGIT FOUR" #x2779) + ("DINGBAT NEGATIVE CIRCLED DIGIT FIVE" #x277A) + ("DINGBAT NEGATIVE CIRCLED DIGIT SIX" #x277B) + ("DINGBAT NEGATIVE CIRCLED DIGIT SEVEN" #x277C) + ("DINGBAT NEGATIVE CIRCLED DIGIT EIGHT" #x277D) + ("DINGBAT NEGATIVE CIRCLED DIGIT NINE" #x277E) + ("DINGBAT NEGATIVE CIRCLED NUMBER TEN" #x277F) + ("DINGBAT CIRCLED SANS-SERIF DIGIT ONE" #x2780) + ("DINGBAT CIRCLED SANS-SERIF DIGIT TWO" #x2781) + ("DINGBAT CIRCLED SANS-SERIF DIGIT THREE" #x2782) + ("DINGBAT CIRCLED SANS-SERIF DIGIT FOUR" #x2783) + ("DINGBAT CIRCLED SANS-SERIF DIGIT FIVE" #x2784) + ("DINGBAT CIRCLED SANS-SERIF DIGIT SIX" #x2785) + ("DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN" #x2786) + ("DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT" #x2787) + ("DINGBAT CIRCLED SANS-SERIF DIGIT NINE" #x2788) + ("DINGBAT CIRCLED SANS-SERIF NUMBER TEN" #x2789) + ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE" #x278A) + ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO" #x278B) + ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE" #x278C) + ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR" #x278D) + ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE" #x278E) + ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX" #x278F) + ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN" #x2790) + ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT" #x2791) + ("DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE" #x2792) + ("DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN" #x2793) + ("HEAVY WIDE-HEADED RIGHTWARDS ARROW" #x2794) + ("HEAVY SOUTH EAST ARROW" #x2798) + ("HEAVY RIGHTWARDS ARROW" #x2799) + ("HEAVY NORTH EAST ARROW" #x279A) + ("DRAFTING POINT RIGHTWARDS ARROW" #x279B) + ("HEAVY ROUND-TIPPED RIGHTWARDS ARROW" #x279C) + ("TRIANGLE-HEADED RIGHTWARDS ARROW" #x279D) + ("HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW" #x279E) + ("DASHED TRIANGLE-HEADED RIGHTWARDS ARROW" #x279F) + ("HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW" #x27A0) + ("BLACK RIGHTWARDS ARROW" #x27A1) + ("THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD" #x27A2) + ("THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD" #x27A3) + ("BLACK RIGHTWARDS ARROWHEAD" #x27A4) + ("HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW" #x27A5) + ("HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW" #x27A6) + ("SQUAT BLACK RIGHTWARDS ARROW" #x27A7) + ("HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW" #x27A8) + ("RIGHT-SHADED WHITE RIGHTWARDS ARROW" #x27A9) + ("LEFT-SHADED WHITE RIGHTWARDS ARROW" #x27AA) + ("BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW" #x27AB) + ("FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW" #x27AC) + ("HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW" #x27AD) + ("HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW" #x27AE) + ("NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW" #x27AF) + ("NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW" #x27B1) + ("CIRCLED HEAVY WHITE RIGHTWARDS ARROW" #x27B2) + ("WHITE-FEATHERED RIGHTWARDS ARROW" #x27B3) + ("BLACK-FEATHERED SOUTH EAST ARROW" #x27B4) + ("BLACK-FEATHERED RIGHTWARDS ARROW" #x27B5) + ("BLACK-FEATHERED NORTH EAST ARROW" #x27B6) + ("HEAVY BLACK-FEATHERED SOUTH EAST ARROW" #x27B7) + ("HEAVY BLACK-FEATHERED RIGHTWARDS ARROW" #x27B8) + ("HEAVY BLACK-FEATHERED NORTH EAST ARROW" #x27B9) + ("TEARDROP-BARBED RIGHTWARDS ARROW" #x27BA) + ("HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW" #x27BB) + ("WEDGE-TAILED RIGHTWARDS ARROW" #x27BC) + ("HEAVY WEDGE-TAILED RIGHTWARDS ARROW" #x27BD) + ("OPEN-OUTLINED RIGHTWARDS ARROW" #x27BE) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/027C0-027EF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,30 @@ +(nxml-define-char-name-set 'miscellaneous-mathematical-symbols-a + '(("WHITE DIAMOND WITH CENTRED DOT" #x27D0) + ("AND WITH DOT" #x27D1) + ("ELEMENT OF OPENING UPWARDS" #x27D2) + ("LOWER RIGHT CORNER WITH DOT" #x27D3) + ("UPPER LEFT CORNER WITH DOT" #x27D4) + ("LEFT OUTER JOIN" #x27D5) + ("RIGHT OUTER JOIN" #x27D6) + ("FULL OUTER JOIN" #x27D7) + ("LARGE UP TACK" #x27D8) + ("LARGE DOWN TACK" #x27D9) + ("LEFT AND RIGHT DOUBLE TURNSTILE" #x27DA) + ("LEFT AND RIGHT TACK" #x27DB) + ("LEFT MULTIMAP" #x27DC) + ("LONG RIGHT TACK" #x27DD) + ("LONG LEFT TACK" #x27DE) + ("UP TACK WITH CIRCLE ABOVE" #x27DF) + ("LOZENGE DIVIDED BY HORIZONTAL RULE" #x27E0) + ("WHITE CONCAVE-SIDED DIAMOND" #x27E1) + ("WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK" #x27E2) + ("WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK" #x27E3) + ("WHITE SQUARE WITH LEFTWARDS TICK" #x27E4) + ("WHITE SQUARE WITH RIGHTWARDS TICK" #x27E5) + ("MATHEMATICAL LEFT WHITE SQUARE BRACKET" #x27E6) + ("MATHEMATICAL RIGHT WHITE SQUARE BRACKET" #x27E7) + ("MATHEMATICAL LEFT ANGLE BRACKET" #x27E8) + ("MATHEMATICAL RIGHT ANGLE BRACKET" #x27E9) + ("MATHEMATICAL LEFT DOUBLE ANGLE BRACKET" #x27EA) + ("MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET" #x27EB) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/027F0-027FF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,18 @@ +(nxml-define-char-name-set 'supplemental-arrows-a + '(("UPWARDS QUADRUPLE ARROW" #x27F0) + ("DOWNWARDS QUADRUPLE ARROW" #x27F1) + ("ANTICLOCKWISE GAPPED CIRCLE ARROW" #x27F2) + ("CLOCKWISE GAPPED CIRCLE ARROW" #x27F3) + ("RIGHT ARROW WITH CIRCLED PLUS" #x27F4) + ("LONG LEFTWARDS ARROW" #x27F5) + ("LONG RIGHTWARDS ARROW" #x27F6) + ("LONG LEFT RIGHT ARROW" #x27F7) + ("LONG LEFTWARDS DOUBLE ARROW" #x27F8) + ("LONG RIGHTWARDS DOUBLE ARROW" #x27F9) + ("LONG LEFT RIGHT DOUBLE ARROW" #x27FA) + ("LONG LEFTWARDS ARROW FROM BAR" #x27FB) + ("LONG RIGHTWARDS ARROW FROM BAR" #x27FC) + ("LONG LEFTWARDS DOUBLE ARROW FROM BAR" #x27FD) + ("LONG RIGHTWARDS DOUBLE ARROW FROM BAR" #x27FE) + ("LONG RIGHTWARDS SQUIGGLE ARROW" #x27FF) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/02800-028FF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,258 @@ +(nxml-define-char-name-set 'braille-patterns + '(("BRAILLE PATTERN BLANK" #x2800) + ("BRAILLE PATTERN DOTS-1" #x2801) + ("BRAILLE PATTERN DOTS-2" #x2802) + ("BRAILLE PATTERN DOTS-12" #x2803) + ("BRAILLE PATTERN DOTS-3" #x2804) + ("BRAILLE PATTERN DOTS-13" #x2805) + ("BRAILLE PATTERN DOTS-23" #x2806) + ("BRAILLE PATTERN DOTS-123" #x2807) + ("BRAILLE PATTERN DOTS-4" #x2808) + ("BRAILLE PATTERN DOTS-14" #x2809) + ("BRAILLE PATTERN DOTS-24" #x280A) + ("BRAILLE PATTERN DOTS-124" #x280B) + ("BRAILLE PATTERN DOTS-34" #x280C) + ("BRAILLE PATTERN DOTS-134" #x280D) + ("BRAILLE PATTERN DOTS-234" #x280E) + ("BRAILLE PATTERN DOTS-1234" #x280F) + ("BRAILLE PATTERN DOTS-5" #x2810) + ("BRAILLE PATTERN DOTS-15" #x2811) + ("BRAILLE PATTERN DOTS-25" #x2812) + ("BRAILLE PATTERN DOTS-125" #x2813) + ("BRAILLE PATTERN DOTS-35" #x2814) + ("BRAILLE PATTERN DOTS-135" #x2815) + ("BRAILLE PATTERN DOTS-235" #x2816) + ("BRAILLE PATTERN DOTS-1235" #x2817) + ("BRAILLE PATTERN DOTS-45" #x2818) + ("BRAILLE PATTERN DOTS-145" #x2819) + ("BRAILLE PATTERN DOTS-245" #x281A) + ("BRAILLE PATTERN DOTS-1245" #x281B) + ("BRAILLE PATTERN DOTS-345" #x281C) + ("BRAILLE PATTERN DOTS-1345" #x281D) + ("BRAILLE PATTERN DOTS-2345" #x281E) + ("BRAILLE PATTERN DOTS-12345" #x281F) + ("BRAILLE PATTERN DOTS-6" #x2820) + ("BRAILLE PATTERN DOTS-16" #x2821) + ("BRAILLE PATTERN DOTS-26" #x2822) + ("BRAILLE PATTERN DOTS-126" #x2823) + ("BRAILLE PATTERN DOTS-36" #x2824) + ("BRAILLE PATTERN DOTS-136" #x2825) + ("BRAILLE PATTERN DOTS-236" #x2826) + ("BRAILLE PATTERN DOTS-1236" #x2827) + ("BRAILLE PATTERN DOTS-46" #x2828) + ("BRAILLE PATTERN DOTS-146" #x2829) + ("BRAILLE PATTERN DOTS-246" #x282A) + ("BRAILLE PATTERN DOTS-1246" #x282B) + ("BRAILLE PATTERN DOTS-346" #x282C) + ("BRAILLE PATTERN DOTS-1346" #x282D) + ("BRAILLE PATTERN DOTS-2346" #x282E) + ("BRAILLE PATTERN DOTS-12346" #x282F) + ("BRAILLE PATTERN DOTS-56" #x2830) + ("BRAILLE PATTERN DOTS-156" #x2831) + ("BRAILLE PATTERN DOTS-256" #x2832) + ("BRAILLE PATTERN DOTS-1256" #x2833) + ("BRAILLE PATTERN DOTS-356" #x2834) + ("BRAILLE PATTERN DOTS-1356" #x2835) + ("BRAILLE PATTERN DOTS-2356" #x2836) + ("BRAILLE PATTERN DOTS-12356" #x2837) + ("BRAILLE PATTERN DOTS-456" #x2838) + ("BRAILLE PATTERN DOTS-1456" #x2839) + ("BRAILLE PATTERN DOTS-2456" #x283A) + ("BRAILLE PATTERN DOTS-12456" #x283B) + ("BRAILLE PATTERN DOTS-3456" #x283C) + ("BRAILLE PATTERN DOTS-13456" #x283D) + ("BRAILLE PATTERN DOTS-23456" #x283E) + ("BRAILLE PATTERN DOTS-123456" #x283F) + ("BRAILLE PATTERN DOTS-7" #x2840) + ("BRAILLE PATTERN DOTS-17" #x2841) + ("BRAILLE PATTERN DOTS-27" #x2842) + ("BRAILLE PATTERN DOTS-127" #x2843) + ("BRAILLE PATTERN DOTS-37" #x2844) + ("BRAILLE PATTERN DOTS-137" #x2845) + ("BRAILLE PATTERN DOTS-237" #x2846) + ("BRAILLE PATTERN DOTS-1237" #x2847) + ("BRAILLE PATTERN DOTS-47" #x2848) + ("BRAILLE PATTERN DOTS-147" #x2849) + ("BRAILLE PATTERN DOTS-247" #x284A) + ("BRAILLE PATTERN DOTS-1247" #x284B) + ("BRAILLE PATTERN DOTS-347" #x284C) + ("BRAILLE PATTERN DOTS-1347" #x284D) + ("BRAILLE PATTERN DOTS-2347" #x284E) + ("BRAILLE PATTERN DOTS-12347" #x284F) + ("BRAILLE PATTERN DOTS-57" #x2850) + ("BRAILLE PATTERN DOTS-157" #x2851) + ("BRAILLE PATTERN DOTS-257" #x2852) + ("BRAILLE PATTERN DOTS-1257" #x2853) + ("BRAILLE PATTERN DOTS-357" #x2854) + ("BRAILLE PATTERN DOTS-1357" #x2855) + ("BRAILLE PATTERN DOTS-2357" #x2856) + ("BRAILLE PATTERN DOTS-12357" #x2857) + ("BRAILLE PATTERN DOTS-457" #x2858) + ("BRAILLE PATTERN DOTS-1457" #x2859) + ("BRAILLE PATTERN DOTS-2457" #x285A) + ("BRAILLE PATTERN DOTS-12457" #x285B) + ("BRAILLE PATTERN DOTS-3457" #x285C) + ("BRAILLE PATTERN DOTS-13457" #x285D) + ("BRAILLE PATTERN DOTS-23457" #x285E) + ("BRAILLE PATTERN DOTS-123457" #x285F) + ("BRAILLE PATTERN DOTS-67" #x2860) + ("BRAILLE PATTERN DOTS-167" #x2861) + ("BRAILLE PATTERN DOTS-267" #x2862) + ("BRAILLE PATTERN DOTS-1267" #x2863) + ("BRAILLE PATTERN DOTS-367" #x2864) + ("BRAILLE PATTERN DOTS-1367" #x2865) + ("BRAILLE PATTERN DOTS-2367" #x2866) + ("BRAILLE PATTERN DOTS-12367" #x2867) + ("BRAILLE PATTERN DOTS-467" #x2868) + ("BRAILLE PATTERN DOTS-1467" #x2869) + ("BRAILLE PATTERN DOTS-2467" #x286A) + ("BRAILLE PATTERN DOTS-12467" #x286B) + ("BRAILLE PATTERN DOTS-3467" #x286C) + ("BRAILLE PATTERN DOTS-13467" #x286D) + ("BRAILLE PATTERN DOTS-23467" #x286E) + ("BRAILLE PATTERN DOTS-123467" #x286F) + ("BRAILLE PATTERN DOTS-567" #x2870) + ("BRAILLE PATTERN DOTS-1567" #x2871) + ("BRAILLE PATTERN DOTS-2567" #x2872) + ("BRAILLE PATTERN DOTS-12567" #x2873) + ("BRAILLE PATTERN DOTS-3567" #x2874) + ("BRAILLE PATTERN DOTS-13567" #x2875) + ("BRAILLE PATTERN DOTS-23567" #x2876) + ("BRAILLE PATTERN DOTS-123567" #x2877) + ("BRAILLE PATTERN DOTS-4567" #x2878) + ("BRAILLE PATTERN DOTS-14567" #x2879) + ("BRAILLE PATTERN DOTS-24567" #x287A) + ("BRAILLE PATTERN DOTS-124567" #x287B) + ("BRAILLE PATTERN DOTS-34567" #x287C) + ("BRAILLE PATTERN DOTS-134567" #x287D) + ("BRAILLE PATTERN DOTS-234567" #x287E) + ("BRAILLE PATTERN DOTS-1234567" #x287F) + ("BRAILLE PATTERN DOTS-8" #x2880) + ("BRAILLE PATTERN DOTS-18" #x2881) + ("BRAILLE PATTERN DOTS-28" #x2882) + ("BRAILLE PATTERN DOTS-128" #x2883) + ("BRAILLE PATTERN DOTS-38" #x2884) + ("BRAILLE PATTERN DOTS-138" #x2885) + ("BRAILLE PATTERN DOTS-238" #x2886) + ("BRAILLE PATTERN DOTS-1238" #x2887) + ("BRAILLE PATTERN DOTS-48" #x2888) + ("BRAILLE PATTERN DOTS-148" #x2889) + ("BRAILLE PATTERN DOTS-248" #x288A) + ("BRAILLE PATTERN DOTS-1248" #x288B) + ("BRAILLE PATTERN DOTS-348" #x288C) + ("BRAILLE PATTERN DOTS-1348" #x288D) + ("BRAILLE PATTERN DOTS-2348" #x288E) + ("BRAILLE PATTERN DOTS-12348" #x288F) + ("BRAILLE PATTERN DOTS-58" #x2890) + ("BRAILLE PATTERN DOTS-158" #x2891) + ("BRAILLE PATTERN DOTS-258" #x2892) + ("BRAILLE PATTERN DOTS-1258" #x2893) + ("BRAILLE PATTERN DOTS-358" #x2894) + ("BRAILLE PATTERN DOTS-1358" #x2895) + ("BRAILLE PATTERN DOTS-2358" #x2896) + ("BRAILLE PATTERN DOTS-12358" #x2897) + ("BRAILLE PATTERN DOTS-458" #x2898) + ("BRAILLE PATTERN DOTS-1458" #x2899) + ("BRAILLE PATTERN DOTS-2458" #x289A) + ("BRAILLE PATTERN DOTS-12458" #x289B) + ("BRAILLE PATTERN DOTS-3458" #x289C) + ("BRAILLE PATTERN DOTS-13458" #x289D) + ("BRAILLE PATTERN DOTS-23458" #x289E) + ("BRAILLE PATTERN DOTS-123458" #x289F) + ("BRAILLE PATTERN DOTS-68" #x28A0) + ("BRAILLE PATTERN DOTS-168" #x28A1) + ("BRAILLE PATTERN DOTS-268" #x28A2) + ("BRAILLE PATTERN DOTS-1268" #x28A3) + ("BRAILLE PATTERN DOTS-368" #x28A4) + ("BRAILLE PATTERN DOTS-1368" #x28A5) + ("BRAILLE PATTERN DOTS-2368" #x28A6) + ("BRAILLE PATTERN DOTS-12368" #x28A7) + ("BRAILLE PATTERN DOTS-468" #x28A8) + ("BRAILLE PATTERN DOTS-1468" #x28A9) + ("BRAILLE PATTERN DOTS-2468" #x28AA) + ("BRAILLE PATTERN DOTS-12468" #x28AB) + ("BRAILLE PATTERN DOTS-3468" #x28AC) + ("BRAILLE PATTERN DOTS-13468" #x28AD) + ("BRAILLE PATTERN DOTS-23468" #x28AE) + ("BRAILLE PATTERN DOTS-123468" #x28AF) + ("BRAILLE PATTERN DOTS-568" #x28B0) + ("BRAILLE PATTERN DOTS-1568" #x28B1) + ("BRAILLE PATTERN DOTS-2568" #x28B2) + ("BRAILLE PATTERN DOTS-12568" #x28B3) + ("BRAILLE PATTERN DOTS-3568" #x28B4) + ("BRAILLE PATTERN DOTS-13568" #x28B5) + ("BRAILLE PATTERN DOTS-23568" #x28B6) + ("BRAILLE PATTERN DOTS-123568" #x28B7) + ("BRAILLE PATTERN DOTS-4568" #x28B8) + ("BRAILLE PATTERN DOTS-14568" #x28B9) + ("BRAILLE PATTERN DOTS-24568" #x28BA) + ("BRAILLE PATTERN DOTS-124568" #x28BB) + ("BRAILLE PATTERN DOTS-34568" #x28BC) + ("BRAILLE PATTERN DOTS-134568" #x28BD) + ("BRAILLE PATTERN DOTS-234568" #x28BE) + ("BRAILLE PATTERN DOTS-1234568" #x28BF) + ("BRAILLE PATTERN DOTS-78" #x28C0) + ("BRAILLE PATTERN DOTS-178" #x28C1) + ("BRAILLE PATTERN DOTS-278" #x28C2) + ("BRAILLE PATTERN DOTS-1278" #x28C3) + ("BRAILLE PATTERN DOTS-378" #x28C4) + ("BRAILLE PATTERN DOTS-1378" #x28C5) + ("BRAILLE PATTERN DOTS-2378" #x28C6) + ("BRAILLE PATTERN DOTS-12378" #x28C7) + ("BRAILLE PATTERN DOTS-478" #x28C8) + ("BRAILLE PATTERN DOTS-1478" #x28C9) + ("BRAILLE PATTERN DOTS-2478" #x28CA) + ("BRAILLE PATTERN DOTS-12478" #x28CB) + ("BRAILLE PATTERN DOTS-3478" #x28CC) + ("BRAILLE PATTERN DOTS-13478" #x28CD) + ("BRAILLE PATTERN DOTS-23478" #x28CE) + ("BRAILLE PATTERN DOTS-123478" #x28CF) + ("BRAILLE PATTERN DOTS-578" #x28D0) + ("BRAILLE PATTERN DOTS-1578" #x28D1) + ("BRAILLE PATTERN DOTS-2578" #x28D2) + ("BRAILLE PATTERN DOTS-12578" #x28D3) + ("BRAILLE PATTERN DOTS-3578" #x28D4) + ("BRAILLE PATTERN DOTS-13578" #x28D5) + ("BRAILLE PATTERN DOTS-23578" #x28D6) + ("BRAILLE PATTERN DOTS-123578" #x28D7) + ("BRAILLE PATTERN DOTS-4578" #x28D8) + ("BRAILLE PATTERN DOTS-14578" #x28D9) + ("BRAILLE PATTERN DOTS-24578" #x28DA) + ("BRAILLE PATTERN DOTS-124578" #x28DB) + ("BRAILLE PATTERN DOTS-34578" #x28DC) + ("BRAILLE PATTERN DOTS-134578" #x28DD) + ("BRAILLE PATTERN DOTS-234578" #x28DE) + ("BRAILLE PATTERN DOTS-1234578" #x28DF) + ("BRAILLE PATTERN DOTS-678" #x28E0) + ("BRAILLE PATTERN DOTS-1678" #x28E1) + ("BRAILLE PATTERN DOTS-2678" #x28E2) + ("BRAILLE PATTERN DOTS-12678" #x28E3) + ("BRAILLE PATTERN DOTS-3678" #x28E4) + ("BRAILLE PATTERN DOTS-13678" #x28E5) + ("BRAILLE PATTERN DOTS-23678" #x28E6) + ("BRAILLE PATTERN DOTS-123678" #x28E7) + ("BRAILLE PATTERN DOTS-4678" #x28E8) + ("BRAILLE PATTERN DOTS-14678" #x28E9) + ("BRAILLE PATTERN DOTS-24678" #x28EA) + ("BRAILLE PATTERN DOTS-124678" #x28EB) + ("BRAILLE PATTERN DOTS-34678" #x28EC) + ("BRAILLE PATTERN DOTS-134678" #x28ED) + ("BRAILLE PATTERN DOTS-234678" #x28EE) + ("BRAILLE PATTERN DOTS-1234678" #x28EF) + ("BRAILLE PATTERN DOTS-5678" #x28F0) + ("BRAILLE PATTERN DOTS-15678" #x28F1) + ("BRAILLE PATTERN DOTS-25678" #x28F2) + ("BRAILLE PATTERN DOTS-125678" #x28F3) + ("BRAILLE PATTERN DOTS-35678" #x28F4) + ("BRAILLE PATTERN DOTS-135678" #x28F5) + ("BRAILLE PATTERN DOTS-235678" #x28F6) + ("BRAILLE PATTERN DOTS-1235678" #x28F7) + ("BRAILLE PATTERN DOTS-45678" #x28F8) + ("BRAILLE PATTERN DOTS-145678" #x28F9) + ("BRAILLE PATTERN DOTS-245678" #x28FA) + ("BRAILLE PATTERN DOTS-1245678" #x28FB) + ("BRAILLE PATTERN DOTS-345678" #x28FC) + ("BRAILLE PATTERN DOTS-1345678" #x28FD) + ("BRAILLE PATTERN DOTS-2345678" #x28FE) + ("BRAILLE PATTERN DOTS-12345678" #x28FF) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/02900-0297F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,130 @@ +(nxml-define-char-name-set 'supplemental-arrows-b + '(("RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE" #x2900) + ("RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE" #x2901) + ("LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE" #x2902) + ("RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE" #x2903) + ("LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE" #x2904) + ("RIGHTWARDS TWO-HEADED ARROW FROM BAR" #x2905) + ("LEFTWARDS DOUBLE ARROW FROM BAR" #x2906) + ("RIGHTWARDS DOUBLE ARROW FROM BAR" #x2907) + ("DOWNWARDS ARROW WITH HORIZONTAL STROKE" #x2908) + ("UPWARDS ARROW WITH HORIZONTAL STROKE" #x2909) + ("UPWARDS TRIPLE ARROW" #x290A) + ("DOWNWARDS TRIPLE ARROW" #x290B) + ("LEFTWARDS DOUBLE DASH ARROW" #x290C) + ("RIGHTWARDS DOUBLE DASH ARROW" #x290D) + ("LEFTWARDS TRIPLE DASH ARROW" #x290E) + ("RIGHTWARDS TRIPLE DASH ARROW" #x290F) + ("RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW" #x2910) + ("RIGHTWARDS ARROW WITH DOTTED STEM" #x2911) + ("UPWARDS ARROW TO BAR" #x2912) + ("DOWNWARDS ARROW TO BAR" #x2913) + ("RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE" #x2914) + ("RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE" #x2915) + ("RIGHTWARDS TWO-HEADED ARROW WITH TAIL" #x2916) + ("RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE" #x2917) + ("RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE" #x2918) + ("LEFTWARDS ARROW-TAIL" #x2919) + ("RIGHTWARDS ARROW-TAIL" #x291A) + ("LEFTWARDS DOUBLE ARROW-TAIL" #x291B) + ("RIGHTWARDS DOUBLE ARROW-TAIL" #x291C) + ("LEFTWARDS ARROW TO BLACK DIAMOND" #x291D) + ("RIGHTWARDS ARROW TO BLACK DIAMOND" #x291E) + ("LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND" #x291F) + ("RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND" #x2920) + ("NORTH WEST AND SOUTH EAST ARROW" #x2921) + ("NORTH EAST AND SOUTH WEST ARROW" #x2922) + ("NORTH WEST ARROW WITH HOOK" #x2923) + ("NORTH EAST ARROW WITH HOOK" #x2924) + ("SOUTH EAST ARROW WITH HOOK" #x2925) + ("SOUTH WEST ARROW WITH HOOK" #x2926) + ("NORTH WEST ARROW AND NORTH EAST ARROW" #x2927) + ("NORTH EAST ARROW AND SOUTH EAST ARROW" #x2928) + ("SOUTH EAST ARROW AND SOUTH WEST ARROW" #x2929) + ("SOUTH WEST ARROW AND NORTH WEST ARROW" #x292A) + ("RISING DIAGONAL CROSSING FALLING DIAGONAL" #x292B) + ("FALLING DIAGONAL CROSSING RISING DIAGONAL" #x292C) + ("SOUTH EAST ARROW CROSSING NORTH EAST ARROW" #x292D) + ("NORTH EAST ARROW CROSSING SOUTH EAST ARROW" #x292E) + ("FALLING DIAGONAL CROSSING NORTH EAST ARROW" #x292F) + ("RISING DIAGONAL CROSSING SOUTH EAST ARROW" #x2930) + ("NORTH EAST ARROW CROSSING NORTH WEST ARROW" #x2931) + ("NORTH WEST ARROW CROSSING NORTH EAST ARROW" #x2932) + ("WAVE ARROW POINTING DIRECTLY RIGHT" #x2933) + ("ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS" #x2934) + ("ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS" #x2935) + ("ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS" #x2936) + ("ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS" #x2937) + ("RIGHT-SIDE ARC CLOCKWISE ARROW" #x2938) + ("LEFT-SIDE ARC ANTICLOCKWISE ARROW" #x2939) + ("TOP ARC ANTICLOCKWISE ARROW" #x293A) + ("BOTTOM ARC ANTICLOCKWISE ARROW" #x293B) + ("TOP ARC CLOCKWISE ARROW WITH MINUS" #x293C) + ("TOP ARC ANTICLOCKWISE ARROW WITH PLUS" #x293D) + ("LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW" #x293E) + ("LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW" #x293F) + ("ANTICLOCKWISE CLOSED CIRCLE ARROW" #x2940) + ("CLOCKWISE CLOSED CIRCLE ARROW" #x2941) + ("RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW" #x2942) + ("LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW" #x2943) + ("SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW" #x2944) + ("RIGHTWARDS ARROW WITH PLUS BELOW" #x2945) + ("LEFTWARDS ARROW WITH PLUS BELOW" #x2946) + ("RIGHTWARDS ARROW THROUGH X" #x2947) + ("LEFT RIGHT ARROW THROUGH SMALL CIRCLE" #x2948) + ("UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE" #x2949) + ("LEFT BARB UP RIGHT BARB DOWN HARPOON" #x294A) + ("LEFT BARB DOWN RIGHT BARB UP HARPOON" #x294B) + ("UP BARB RIGHT DOWN BARB LEFT HARPOON" #x294C) + ("UP BARB LEFT DOWN BARB RIGHT HARPOON" #x294D) + ("LEFT BARB UP RIGHT BARB UP HARPOON" #x294E) + ("UP BARB RIGHT DOWN BARB RIGHT HARPOON" #x294F) + ("LEFT BARB DOWN RIGHT BARB DOWN HARPOON" #x2950) + ("UP BARB LEFT DOWN BARB LEFT HARPOON" #x2951) + ("LEFTWARDS HARPOON WITH BARB UP TO BAR" #x2952) + ("RIGHTWARDS HARPOON WITH BARB UP TO BAR" #x2953) + ("UPWARDS HARPOON WITH BARB RIGHT TO BAR" #x2954) + ("DOWNWARDS HARPOON WITH BARB RIGHT TO BAR" #x2955) + ("LEFTWARDS HARPOON WITH BARB DOWN TO BAR" #x2956) + ("RIGHTWARDS HARPOON WITH BARB DOWN TO BAR" #x2957) + ("UPWARDS HARPOON WITH BARB LEFT TO BAR" #x2958) + ("DOWNWARDS HARPOON WITH BARB LEFT TO BAR" #x2959) + ("LEFTWARDS HARPOON WITH BARB UP FROM BAR" #x295A) + ("RIGHTWARDS HARPOON WITH BARB UP FROM BAR" #x295B) + ("UPWARDS HARPOON WITH BARB RIGHT FROM BAR" #x295C) + ("DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR" #x295D) + ("LEFTWARDS HARPOON WITH BARB DOWN FROM BAR" #x295E) + ("RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR" #x295F) + ("UPWARDS HARPOON WITH BARB LEFT FROM BAR" #x2960) + ("DOWNWARDS HARPOON WITH BARB LEFT FROM BAR" #x2961) + ("LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN" #x2962) + ("UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT" #x2963) + ("RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN" #x2964) + ("DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT" #x2965) + ("LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP" #x2966) + ("LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN" #x2967) + ("RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP" #x2968) + ("RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN" #x2969) + ("LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH" #x296A) + ("LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH" #x296B) + ("RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH" #x296C) + ("RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH" #x296D) + ("UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT" #x296E) + ("DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT" #x296F) + ("RIGHT DOUBLE ARROW WITH ROUNDED HEAD" #x2970) + ("EQUALS SIGN ABOVE RIGHTWARDS ARROW" #x2971) + ("TILDE OPERATOR ABOVE RIGHTWARDS ARROW" #x2972) + ("LEFTWARDS ARROW ABOVE TILDE OPERATOR" #x2973) + ("RIGHTWARDS ARROW ABOVE TILDE OPERATOR" #x2974) + ("RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO" #x2975) + ("LESS-THAN ABOVE LEFTWARDS ARROW" #x2976) + ("LEFTWARDS ARROW THROUGH LESS-THAN" #x2977) + ("GREATER-THAN ABOVE RIGHTWARDS ARROW" #x2978) + ("SUBSET ABOVE RIGHTWARDS ARROW" #x2979) + ("LEFTWARDS ARROW THROUGH SUBSET" #x297A) + ("SUPERSET ABOVE LEFTWARDS ARROW" #x297B) + ("LEFT FISH TAIL" #x297C) + ("RIGHT FISH TAIL" #x297D) + ("UP FISH TAIL" #x297E) + ("DOWN FISH TAIL" #x297F) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/02980-029FF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,130 @@ +(nxml-define-char-name-set 'miscellaneous-mathematical-symbols-b + '(("TRIPLE VERTICAL BAR DELIMITER" #x2980) + ("Z NOTATION SPOT" #x2981) + ("Z NOTATION TYPE COLON" #x2982) + ("LEFT WHITE CURLY BRACKET" #x2983) + ("RIGHT WHITE CURLY BRACKET" #x2984) + ("LEFT WHITE PARENTHESIS" #x2985) + ("RIGHT WHITE PARENTHESIS" #x2986) + ("Z NOTATION LEFT IMAGE BRACKET" #x2987) + ("Z NOTATION RIGHT IMAGE BRACKET" #x2988) + ("Z NOTATION LEFT BINDING BRACKET" #x2989) + ("Z NOTATION RIGHT BINDING BRACKET" #x298A) + ("LEFT SQUARE BRACKET WITH UNDERBAR" #x298B) + ("RIGHT SQUARE BRACKET WITH UNDERBAR" #x298C) + ("LEFT SQUARE BRACKET WITH TICK IN TOP CORNER" #x298D) + ("RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER" #x298E) + ("LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER" #x298F) + ("RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER" #x2990) + ("LEFT ANGLE BRACKET WITH DOT" #x2991) + ("RIGHT ANGLE BRACKET WITH DOT" #x2992) + ("LEFT ARC LESS-THAN BRACKET" #x2993) + ("RIGHT ARC GREATER-THAN BRACKET" #x2994) + ("DOUBLE LEFT ARC GREATER-THAN BRACKET" #x2995) + ("DOUBLE RIGHT ARC LESS-THAN BRACKET" #x2996) + ("LEFT BLACK TORTOISE SHELL BRACKET" #x2997) + ("RIGHT BLACK TORTOISE SHELL BRACKET" #x2998) + ("DOTTED FENCE" #x2999) + ("VERTICAL ZIGZAG LINE" #x299A) + ("MEASURED ANGLE OPENING LEFT" #x299B) + ("RIGHT ANGLE VARIANT WITH SQUARE" #x299C) + ("MEASURED RIGHT ANGLE WITH DOT" #x299D) + ("ANGLE WITH S INSIDE" #x299E) + ("ACUTE ANGLE" #x299F) + ("SPHERICAL ANGLE OPENING LEFT" #x29A0) + ("SPHERICAL ANGLE OPENING UP" #x29A1) + ("TURNED ANGLE" #x29A2) + ("REVERSED ANGLE" #x29A3) + ("ANGLE WITH UNDERBAR" #x29A4) + ("REVERSED ANGLE WITH UNDERBAR" #x29A5) + ("OBLIQUE ANGLE OPENING UP" #x29A6) + ("OBLIQUE ANGLE OPENING DOWN" #x29A7) + ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT" #x29A8) + ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT" #x29A9) + ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT" #x29AA) + ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT" #x29AB) + ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP" #x29AC) + ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP" #x29AD) + ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN" #x29AE) + ("MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN" #x29AF) + ("REVERSED EMPTY SET" #x29B0) + ("EMPTY SET WITH OVERBAR" #x29B1) + ("EMPTY SET WITH SMALL CIRCLE ABOVE" #x29B2) + ("EMPTY SET WITH RIGHT ARROW ABOVE" #x29B3) + ("EMPTY SET WITH LEFT ARROW ABOVE" #x29B4) + ("CIRCLE WITH HORIZONTAL BAR" #x29B5) + ("CIRCLED VERTICAL BAR" #x29B6) + ("CIRCLED PARALLEL" #x29B7) + ("CIRCLED REVERSE SOLIDUS" #x29B8) + ("CIRCLED PERPENDICULAR" #x29B9) + ("CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR" #x29BA) + ("CIRCLE WITH SUPERIMPOSED X" #x29BB) + ("CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN" #x29BC) + ("UP ARROW THROUGH CIRCLE" #x29BD) + ("CIRCLED WHITE BULLET" #x29BE) + ("CIRCLED BULLET" #x29BF) + ("CIRCLED LESS-THAN" #x29C0) + ("CIRCLED GREATER-THAN" #x29C1) + ("CIRCLE WITH SMALL CIRCLE TO THE RIGHT" #x29C2) + ("CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT" #x29C3) + ("SQUARED RISING DIAGONAL SLASH" #x29C4) + ("SQUARED FALLING DIAGONAL SLASH" #x29C5) + ("SQUARED ASTERISK" #x29C6) + ("SQUARED SMALL CIRCLE" #x29C7) + ("SQUARED SQUARE" #x29C8) + ("TWO JOINED SQUARES" #x29C9) + ("TRIANGLE WITH DOT ABOVE" #x29CA) + ("TRIANGLE WITH UNDERBAR" #x29CB) + ("S IN TRIANGLE" #x29CC) + ("TRIANGLE WITH SERIFS AT BOTTOM" #x29CD) + ("RIGHT TRIANGLE ABOVE LEFT TRIANGLE" #x29CE) + ("LEFT TRIANGLE BESIDE VERTICAL BAR" #x29CF) + ("VERTICAL BAR BESIDE RIGHT TRIANGLE" #x29D0) + ("BOWTIE WITH LEFT HALF BLACK" #x29D1) + ("BOWTIE WITH RIGHT HALF BLACK" #x29D2) + ("BLACK BOWTIE" #x29D3) + ("TIMES WITH LEFT HALF BLACK" #x29D4) + ("TIMES WITH RIGHT HALF BLACK" #x29D5) + ("WHITE HOURGLASS" #x29D6) + ("BLACK HOURGLASS" #x29D7) + ("LEFT WIGGLY FENCE" #x29D8) + ("RIGHT WIGGLY FENCE" #x29D9) + ("LEFT DOUBLE WIGGLY FENCE" #x29DA) + ("RIGHT DOUBLE WIGGLY FENCE" #x29DB) + ("INCOMPLETE INFINITY" #x29DC) + ("TIE OVER INFINITY" #x29DD) + ("INFINITY NEGATED WITH VERTICAL BAR" #x29DE) + ("DOUBLE-ENDED MULTIMAP" #x29DF) + ("SQUARE WITH CONTOURED OUTLINE" #x29E0) + ("INCREASES AS" #x29E1) + ("SHUFFLE PRODUCT" #x29E2) + ("EQUALS SIGN AND SLANTED PARALLEL" #x29E3) + ("EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE" #x29E4) + ("IDENTICAL TO AND SLANTED PARALLEL" #x29E5) + ("GLEICH STARK" #x29E6) + ("THERMODYNAMIC" #x29E7) + ("DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK" #x29E8) + ("DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK" #x29E9) + ("BLACK DIAMOND WITH DOWN ARROW" #x29EA) + ("BLACK LOZENGE" #x29EB) + ("WHITE CIRCLE WITH DOWN ARROW" #x29EC) + ("BLACK CIRCLE WITH DOWN ARROW" #x29ED) + ("ERROR-BARRED WHITE SQUARE" #x29EE) + ("ERROR-BARRED BLACK SQUARE" #x29EF) + ("ERROR-BARRED WHITE DIAMOND" #x29F0) + ("ERROR-BARRED BLACK DIAMOND" #x29F1) + ("ERROR-BARRED WHITE CIRCLE" #x29F2) + ("ERROR-BARRED BLACK CIRCLE" #x29F3) + ("RULE-DELAYED" #x29F4) + ("REVERSE SOLIDUS OPERATOR" #x29F5) + ("SOLIDUS WITH OVERBAR" #x29F6) + ("REVERSE SOLIDUS WITH HORIZONTAL STROKE" #x29F7) + ("BIG SOLIDUS" #x29F8) + ("BIG REVERSE SOLIDUS" #x29F9) + ("DOUBLE PLUS" #x29FA) + ("TRIPLE PLUS" #x29FB) + ("LEFT-POINTING CURVED ANGLE BRACKET" #x29FC) + ("RIGHT-POINTING CURVED ANGLE BRACKET" #x29FD) + ("TINY" #x29FE) + ("MINY" #x29FF) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/02A00-02AFF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,258 @@ +(nxml-define-char-name-set 'supplemental-mathematical-operators + '(("N-ARY CIRCLED DOT OPERATOR" #x2A00) + ("N-ARY CIRCLED PLUS OPERATOR" #x2A01) + ("N-ARY CIRCLED TIMES OPERATOR" #x2A02) + ("N-ARY UNION OPERATOR WITH DOT" #x2A03) + ("N-ARY UNION OPERATOR WITH PLUS" #x2A04) + ("N-ARY SQUARE INTERSECTION OPERATOR" #x2A05) + ("N-ARY SQUARE UNION OPERATOR" #x2A06) + ("TWO LOGICAL AND OPERATOR" #x2A07) + ("TWO LOGICAL OR OPERATOR" #x2A08) + ("N-ARY TIMES OPERATOR" #x2A09) + ("MODULO TWO SUM" #x2A0A) + ("SUMMATION WITH INTEGRAL" #x2A0B) + ("QUADRUPLE INTEGRAL OPERATOR" #x2A0C) + ("FINITE PART INTEGRAL" #x2A0D) + ("INTEGRAL WITH DOUBLE STROKE" #x2A0E) + ("INTEGRAL AVERAGE WITH SLASH" #x2A0F) + ("CIRCULATION FUNCTION" #x2A10) + ("ANTICLOCKWISE INTEGRATION" #x2A11) + ("LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE" #x2A12) + ("LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE" #x2A13) + ("LINE INTEGRATION NOT INCLUDING THE POLE" #x2A14) + ("INTEGRAL AROUND A POINT OPERATOR" #x2A15) + ("QUATERNION INTEGRAL OPERATOR" #x2A16) + ("INTEGRAL WITH LEFTWARDS ARROW WITH HOOK" #x2A17) + ("INTEGRAL WITH TIMES SIGN" #x2A18) + ("INTEGRAL WITH INTERSECTION" #x2A19) + ("INTEGRAL WITH UNION" #x2A1A) + ("INTEGRAL WITH OVERBAR" #x2A1B) + ("INTEGRAL WITH UNDERBAR" #x2A1C) + ("JOIN" #x2A1D) + ("LARGE LEFT TRIANGLE OPERATOR" #x2A1E) + ("Z NOTATION SCHEMA COMPOSITION" #x2A1F) + ("Z NOTATION SCHEMA PIPING" #x2A20) + ("Z NOTATION SCHEMA PROJECTION" #x2A21) + ("PLUS SIGN WITH SMALL CIRCLE ABOVE" #x2A22) + ("PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE" #x2A23) + ("PLUS SIGN WITH TILDE ABOVE" #x2A24) + ("PLUS SIGN WITH DOT BELOW" #x2A25) + ("PLUS SIGN WITH TILDE BELOW" #x2A26) + ("PLUS SIGN WITH SUBSCRIPT TWO" #x2A27) + ("PLUS SIGN WITH BLACK TRIANGLE" #x2A28) + ("MINUS SIGN WITH COMMA ABOVE" #x2A29) + ("MINUS SIGN WITH DOT BELOW" #x2A2A) + ("MINUS SIGN WITH FALLING DOTS" #x2A2B) + ("MINUS SIGN WITH RISING DOTS" #x2A2C) + ("PLUS SIGN IN LEFT HALF CIRCLE" #x2A2D) + ("PLUS SIGN IN RIGHT HALF CIRCLE" #x2A2E) + ("VECTOR OR CROSS PRODUCT" #x2A2F) + ("MULTIPLICATION SIGN WITH DOT ABOVE" #x2A30) + ("MULTIPLICATION SIGN WITH UNDERBAR" #x2A31) + ("SEMIDIRECT PRODUCT WITH BOTTOM CLOSED" #x2A32) + ("SMASH PRODUCT" #x2A33) + ("MULTIPLICATION SIGN IN LEFT HALF CIRCLE" #x2A34) + ("MULTIPLICATION SIGN IN RIGHT HALF CIRCLE" #x2A35) + ("CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT" #x2A36) + ("MULTIPLICATION SIGN IN DOUBLE CIRCLE" #x2A37) + ("CIRCLED DIVISION SIGN" #x2A38) + ("PLUS SIGN IN TRIANGLE" #x2A39) + ("MINUS SIGN IN TRIANGLE" #x2A3A) + ("MULTIPLICATION SIGN IN TRIANGLE" #x2A3B) + ("INTERIOR PRODUCT" #x2A3C) + ("RIGHTHAND INTERIOR PRODUCT" #x2A3D) + ("Z NOTATION RELATIONAL COMPOSITION" #x2A3E) + ("AMALGAMATION OR COPRODUCT" #x2A3F) + ("INTERSECTION WITH DOT" #x2A40) + ("UNION WITH MINUS SIGN" #x2A41) + ("UNION WITH OVERBAR" #x2A42) + ("INTERSECTION WITH OVERBAR" #x2A43) + ("INTERSECTION WITH LOGICAL AND" #x2A44) + ("UNION WITH LOGICAL OR" #x2A45) + ("UNION ABOVE INTERSECTION" #x2A46) + ("INTERSECTION ABOVE UNION" #x2A47) + ("UNION ABOVE BAR ABOVE INTERSECTION" #x2A48) + ("INTERSECTION ABOVE BAR ABOVE UNION" #x2A49) + ("UNION BESIDE AND JOINED WITH UNION" #x2A4A) + ("INTERSECTION BESIDE AND JOINED WITH INTERSECTION" #x2A4B) + ("CLOSED UNION WITH SERIFS" #x2A4C) + ("CLOSED INTERSECTION WITH SERIFS" #x2A4D) + ("DOUBLE SQUARE INTERSECTION" #x2A4E) + ("DOUBLE SQUARE UNION" #x2A4F) + ("CLOSED UNION WITH SERIFS AND SMASH PRODUCT" #x2A50) + ("LOGICAL AND WITH DOT ABOVE" #x2A51) + ("LOGICAL OR WITH DOT ABOVE" #x2A52) + ("DOUBLE LOGICAL AND" #x2A53) + ("DOUBLE LOGICAL OR" #x2A54) + ("TWO INTERSECTING LOGICAL AND" #x2A55) + ("TWO INTERSECTING LOGICAL OR" #x2A56) + ("SLOPING LARGE OR" #x2A57) + ("SLOPING LARGE AND" #x2A58) + ("LOGICAL OR OVERLAPPING LOGICAL AND" #x2A59) + ("LOGICAL AND WITH MIDDLE STEM" #x2A5A) + ("LOGICAL OR WITH MIDDLE STEM" #x2A5B) + ("LOGICAL AND WITH HORIZONTAL DASH" #x2A5C) + ("LOGICAL OR WITH HORIZONTAL DASH" #x2A5D) + ("LOGICAL AND WITH DOUBLE OVERBAR" #x2A5E) + ("LOGICAL AND WITH UNDERBAR" #x2A5F) + ("LOGICAL AND WITH DOUBLE UNDERBAR" #x2A60) + ("SMALL VEE WITH UNDERBAR" #x2A61) + ("LOGICAL OR WITH DOUBLE OVERBAR" #x2A62) + ("LOGICAL OR WITH DOUBLE UNDERBAR" #x2A63) + ("Z NOTATION DOMAIN ANTIRESTRICTION" #x2A64) + ("Z NOTATION RANGE ANTIRESTRICTION" #x2A65) + ("EQUALS SIGN WITH DOT BELOW" #x2A66) + ("IDENTICAL WITH DOT ABOVE" #x2A67) + ("TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE" #x2A68) + ("TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE" #x2A69) + ("TILDE OPERATOR WITH DOT ABOVE" #x2A6A) + ("TILDE OPERATOR WITH RISING DOTS" #x2A6B) + ("SIMILAR MINUS SIMILAR" #x2A6C) + ("CONGRUENT WITH DOT ABOVE" #x2A6D) + ("EQUALS WITH ASTERISK" #x2A6E) + ("ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT" #x2A6F) + ("APPROXIMATELY EQUAL OR EQUAL TO" #x2A70) + ("EQUALS SIGN ABOVE PLUS SIGN" #x2A71) + ("PLUS SIGN ABOVE EQUALS SIGN" #x2A72) + ("EQUALS SIGN ABOVE TILDE OPERATOR" #x2A73) + ("DOUBLE COLON EQUAL" #x2A74) + ("TWO CONSECUTIVE EQUALS SIGNS" #x2A75) + ("THREE CONSECUTIVE EQUALS SIGNS" #x2A76) + ("EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW" #x2A77) + ("EQUIVALENT WITH FOUR DOTS ABOVE" #x2A78) + ("LESS-THAN WITH CIRCLE INSIDE" #x2A79) + ("GREATER-THAN WITH CIRCLE INSIDE" #x2A7A) + ("LESS-THAN WITH QUESTION MARK ABOVE" #x2A7B) + ("GREATER-THAN WITH QUESTION MARK ABOVE" #x2A7C) + ("LESS-THAN OR SLANTED EQUAL TO" #x2A7D) + ("GREATER-THAN OR SLANTED EQUAL TO" #x2A7E) + ("LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE" #x2A7F) + ("GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE" #x2A80) + ("LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE" #x2A81) + ("GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE" #x2A82) + ("LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT" #x2A83) + ("GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT" #x2A84) + ("LESS-THAN OR APPROXIMATE" #x2A85) + ("GREATER-THAN OR APPROXIMATE" #x2A86) + ("LESS-THAN AND SINGLE-LINE NOT EQUAL TO" #x2A87) + ("GREATER-THAN AND SINGLE-LINE NOT EQUAL TO" #x2A88) + ("LESS-THAN AND NOT APPROXIMATE" #x2A89) + ("GREATER-THAN AND NOT APPROXIMATE" #x2A8A) + ("LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN" #x2A8B) + ("GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN" #x2A8C) + ("LESS-THAN ABOVE SIMILAR OR EQUAL" #x2A8D) + ("GREATER-THAN ABOVE SIMILAR OR EQUAL" #x2A8E) + ("LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN" #x2A8F) + ("GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN" #x2A90) + ("LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL" #x2A91) + ("GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL" #x2A92) + ("LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL" #x2A93) + ("GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL" #x2A94) + ("SLANTED EQUAL TO OR LESS-THAN" #x2A95) + ("SLANTED EQUAL TO OR GREATER-THAN" #x2A96) + ("SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE" #x2A97) + ("SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE" #x2A98) + ("DOUBLE-LINE EQUAL TO OR LESS-THAN" #x2A99) + ("DOUBLE-LINE EQUAL TO OR GREATER-THAN" #x2A9A) + ("DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN" #x2A9B) + ("DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN" #x2A9C) + ("SIMILAR OR LESS-THAN" #x2A9D) + ("SIMILAR OR GREATER-THAN" #x2A9E) + ("SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN" #x2A9F) + ("SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN" #x2AA0) + ("DOUBLE NESTED LESS-THAN" #x2AA1) + ("DOUBLE NESTED GREATER-THAN" #x2AA2) + ("DOUBLE NESTED LESS-THAN WITH UNDERBAR" #x2AA3) + ("GREATER-THAN OVERLAPPING LESS-THAN" #x2AA4) + ("GREATER-THAN BESIDE LESS-THAN" #x2AA5) + ("LESS-THAN CLOSED BY CURVE" #x2AA6) + ("GREATER-THAN CLOSED BY CURVE" #x2AA7) + ("LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL" #x2AA8) + ("GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL" #x2AA9) + ("SMALLER THAN" #x2AAA) + ("LARGER THAN" #x2AAB) + ("SMALLER THAN OR EQUAL TO" #x2AAC) + ("LARGER THAN OR EQUAL TO" #x2AAD) + ("EQUALS SIGN WITH BUMPY ABOVE" #x2AAE) + ("PRECEDES ABOVE SINGLE-LINE EQUALS SIGN" #x2AAF) + ("SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN" #x2AB0) + ("PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO" #x2AB1) + ("SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO" #x2AB2) + ("PRECEDES ABOVE EQUALS SIGN" #x2AB3) + ("SUCCEEDS ABOVE EQUALS SIGN" #x2AB4) + ("PRECEDES ABOVE NOT EQUAL TO" #x2AB5) + ("SUCCEEDS ABOVE NOT EQUAL TO" #x2AB6) + ("PRECEDES ABOVE ALMOST EQUAL TO" #x2AB7) + ("SUCCEEDS ABOVE ALMOST EQUAL TO" #x2AB8) + ("PRECEDES ABOVE NOT ALMOST EQUAL TO" #x2AB9) + ("SUCCEEDS ABOVE NOT ALMOST EQUAL TO" #x2ABA) + ("DOUBLE PRECEDES" #x2ABB) + ("DOUBLE SUCCEEDS" #x2ABC) + ("SUBSET WITH DOT" #x2ABD) + ("SUPERSET WITH DOT" #x2ABE) + ("SUBSET WITH PLUS SIGN BELOW" #x2ABF) + ("SUPERSET WITH PLUS SIGN BELOW" #x2AC0) + ("SUBSET WITH MULTIPLICATION SIGN BELOW" #x2AC1) + ("SUPERSET WITH MULTIPLICATION SIGN BELOW" #x2AC2) + ("SUBSET OF OR EQUAL TO WITH DOT ABOVE" #x2AC3) + ("SUPERSET OF OR EQUAL TO WITH DOT ABOVE" #x2AC4) + ("SUBSET OF ABOVE EQUALS SIGN" #x2AC5) + ("SUPERSET OF ABOVE EQUALS SIGN" #x2AC6) + ("SUBSET OF ABOVE TILDE OPERATOR" #x2AC7) + ("SUPERSET OF ABOVE TILDE OPERATOR" #x2AC8) + ("SUBSET OF ABOVE ALMOST EQUAL TO" #x2AC9) + ("SUPERSET OF ABOVE ALMOST EQUAL TO" #x2ACA) + ("SUBSET OF ABOVE NOT EQUAL TO" #x2ACB) + ("SUPERSET OF ABOVE NOT EQUAL TO" #x2ACC) + ("SQUARE LEFT OPEN BOX OPERATOR" #x2ACD) + ("SQUARE RIGHT OPEN BOX OPERATOR" #x2ACE) + ("CLOSED SUBSET" #x2ACF) + ("CLOSED SUPERSET" #x2AD0) + ("CLOSED SUBSET OR EQUAL TO" #x2AD1) + ("CLOSED SUPERSET OR EQUAL TO" #x2AD2) + ("SUBSET ABOVE SUPERSET" #x2AD3) + ("SUPERSET ABOVE SUBSET" #x2AD4) + ("SUBSET ABOVE SUBSET" #x2AD5) + ("SUPERSET ABOVE SUPERSET" #x2AD6) + ("SUPERSET BESIDE SUBSET" #x2AD7) + ("SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET" #x2AD8) + ("ELEMENT OF OPENING DOWNWARDS" #x2AD9) + ("PITCHFORK WITH TEE TOP" #x2ADA) + ("TRANSVERSAL INTERSECTION" #x2ADB) + ("FORKING" #x2ADC) + ("NONFORKING" #x2ADD) + ("SHORT LEFT TACK" #x2ADE) + ("SHORT DOWN TACK" #x2ADF) + ("SHORT UP TACK" #x2AE0) + ("PERPENDICULAR WITH S" #x2AE1) + ("VERTICAL BAR TRIPLE RIGHT TURNSTILE" #x2AE2) + ("DOUBLE VERTICAL BAR LEFT TURNSTILE" #x2AE3) + ("VERTICAL BAR DOUBLE LEFT TURNSTILE" #x2AE4) + ("DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE" #x2AE5) + ("LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL" #x2AE6) + ("SHORT DOWN TACK WITH OVERBAR" #x2AE7) + ("SHORT UP TACK WITH UNDERBAR" #x2AE8) + ("SHORT UP TACK ABOVE SHORT DOWN TACK" #x2AE9) + ("DOUBLE DOWN TACK" #x2AEA) + ("DOUBLE UP TACK" #x2AEB) + ("DOUBLE STROKE NOT SIGN" #x2AEC) + ("REVERSED DOUBLE STROKE NOT SIGN" #x2AED) + ("DOES NOT DIVIDE WITH REVERSED NEGATION SLASH" #x2AEE) + ("VERTICAL LINE WITH CIRCLE ABOVE" #x2AEF) + ("VERTICAL LINE WITH CIRCLE BELOW" #x2AF0) + ("DOWN TACK WITH CIRCLE BELOW" #x2AF1) + ("PARALLEL WITH HORIZONTAL STROKE" #x2AF2) + ("PARALLEL WITH TILDE OPERATOR" #x2AF3) + ("TRIPLE VERTICAL BAR BINARY RELATION" #x2AF4) + ("TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE" #x2AF5) + ("TRIPLE COLON OPERATOR" #x2AF6) + ("TRIPLE NESTED LESS-THAN" #x2AF7) + ("TRIPLE NESTED GREATER-THAN" #x2AF8) + ("DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO" #x2AF9) + ("DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO" #x2AFA) + ("TRIPLE SOLIDUS BINARY RELATION" #x2AFB) + ("LARGE TRIPLE VERTICAL BAR OPERATOR" #x2AFC) + ("DOUBLE SOLIDUS OPERATOR" #x2AFD) + ("WHITE VERTICAL BAR" #x2AFE) + ("N-ARY WHITE VERTICAL BAR" #x2AFF) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/02E80-02EFF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,117 @@ +(nxml-define-char-name-set 'cjk-radicals-supplement + '(("CJK RADICAL REPEAT" #x2E80) + ("CJK RADICAL CLIFF" #x2E81) + ("CJK RADICAL SECOND ONE" #x2E82) + ("CJK RADICAL SECOND TWO" #x2E83) + ("CJK RADICAL SECOND THREE" #x2E84) + ("CJK RADICAL PERSON" #x2E85) + ("CJK RADICAL BOX" #x2E86) + ("CJK RADICAL TABLE" #x2E87) + ("CJK RADICAL KNIFE ONE" #x2E88) + ("CJK RADICAL KNIFE TWO" #x2E89) + ("CJK RADICAL DIVINATION" #x2E8A) + ("CJK RADICAL SEAL" #x2E8B) + ("CJK RADICAL SMALL ONE" #x2E8C) + ("CJK RADICAL SMALL TWO" #x2E8D) + ("CJK RADICAL LAME ONE" #x2E8E) + ("CJK RADICAL LAME TWO" #x2E8F) + ("CJK RADICAL LAME THREE" #x2E90) + ("CJK RADICAL LAME FOUR" #x2E91) + ("CJK RADICAL SNAKE" #x2E92) + ("CJK RADICAL THREAD" #x2E93) + ("CJK RADICAL SNOUT ONE" #x2E94) + ("CJK RADICAL SNOUT TWO" #x2E95) + ("CJK RADICAL HEART ONE" #x2E96) + ("CJK RADICAL HEART TWO" #x2E97) + ("CJK RADICAL HAND" #x2E98) + ("CJK RADICAL RAP" #x2E99) + ("CJK RADICAL CHOKE" #x2E9B) + ("CJK RADICAL SUN" #x2E9C) + ("CJK RADICAL MOON" #x2E9D) + ("CJK RADICAL DEATH" #x2E9E) + ("CJK RADICAL MOTHER" #x2E9F) + ("CJK RADICAL CIVILIAN" #x2EA0) + ("CJK RADICAL WATER ONE" #x2EA1) + ("CJK RADICAL WATER TWO" #x2EA2) + ("CJK RADICAL FIRE" #x2EA3) + ("CJK RADICAL PAW ONE" #x2EA4) + ("CJK RADICAL PAW TWO" #x2EA5) + ("CJK RADICAL SIMPLIFIED HALF TREE TRUNK" #x2EA6) + ("CJK RADICAL COW" #x2EA7) + ("CJK RADICAL DOG" #x2EA8) + ("CJK RADICAL JADE" #x2EA9) + ("CJK RADICAL BOLT OF CLOTH" #x2EAA) + ("CJK RADICAL EYE" #x2EAB) + ("CJK RADICAL SPIRIT ONE" #x2EAC) + ("CJK RADICAL SPIRIT TWO" #x2EAD) + ("CJK RADICAL BAMBOO" #x2EAE) + ("CJK RADICAL SILK" #x2EAF) + ("CJK RADICAL C-SIMPLIFIED SILK" #x2EB0) + ("CJK RADICAL NET ONE" #x2EB1) + ("CJK RADICAL NET TWO" #x2EB2) + ("CJK RADICAL NET THREE" #x2EB3) + ("CJK RADICAL NET FOUR" #x2EB4) + ("CJK RADICAL MESH" #x2EB5) + ("CJK RADICAL SHEEP" #x2EB6) + ("CJK RADICAL RAM" #x2EB7) + ("CJK RADICAL EWE" #x2EB8) + ("CJK RADICAL OLD" #x2EB9) + ("CJK RADICAL BRUSH ONE" #x2EBA) + ("CJK RADICAL BRUSH TWO" #x2EBB) + ("CJK RADICAL MEAT" #x2EBC) + ("CJK RADICAL MORTAR" #x2EBD) + ("CJK RADICAL GRASS ONE" #x2EBE) + ("CJK RADICAL GRASS TWO" #x2EBF) + ("CJK RADICAL GRASS THREE" #x2EC0) + ("CJK RADICAL TIGER" #x2EC1) + ("CJK RADICAL CLOTHES" #x2EC2) + ("CJK RADICAL WEST ONE" #x2EC3) + ("CJK RADICAL WEST TWO" #x2EC4) + ("CJK RADICAL C-SIMPLIFIED SEE" #x2EC5) + ("CJK RADICAL SIMPLIFIED HORN" #x2EC6) + ("CJK RADICAL HORN" #x2EC7) + ("CJK RADICAL C-SIMPLIFIED SPEECH" #x2EC8) + ("CJK RADICAL C-SIMPLIFIED SHELL" #x2EC9) + ("CJK RADICAL FOOT" #x2ECA) + ("CJK RADICAL C-SIMPLIFIED CART" #x2ECB) + ("CJK RADICAL SIMPLIFIED WALK" #x2ECC) + ("CJK RADICAL WALK ONE" #x2ECD) + ("CJK RADICAL WALK TWO" #x2ECE) + ("CJK RADICAL CITY" #x2ECF) + ("CJK RADICAL C-SIMPLIFIED GOLD" #x2ED0) + ("CJK RADICAL LONG ONE" #x2ED1) + ("CJK RADICAL LONG TWO" #x2ED2) + ("CJK RADICAL C-SIMPLIFIED LONG" #x2ED3) + ("CJK RADICAL C-SIMPLIFIED GATE" #x2ED4) + ("CJK RADICAL MOUND ONE" #x2ED5) + ("CJK RADICAL MOUND TWO" #x2ED6) + ("CJK RADICAL RAIN" #x2ED7) + ("CJK RADICAL BLUE" #x2ED8) + ("CJK RADICAL C-SIMPLIFIED TANNED LEATHER" #x2ED9) + ("CJK RADICAL C-SIMPLIFIED LEAF" #x2EDA) + ("CJK RADICAL C-SIMPLIFIED WIND" #x2EDB) + ("CJK RADICAL C-SIMPLIFIED FLY" #x2EDC) + ("CJK RADICAL EAT ONE" #x2EDD) + ("CJK RADICAL EAT TWO" #x2EDE) + ("CJK RADICAL EAT THREE" #x2EDF) + ("CJK RADICAL C-SIMPLIFIED EAT" #x2EE0) + ("CJK RADICAL HEAD" #x2EE1) + ("CJK RADICAL C-SIMPLIFIED HORSE" #x2EE2) + ("CJK RADICAL BONE" #x2EE3) + ("CJK RADICAL GHOST" #x2EE4) + ("CJK RADICAL C-SIMPLIFIED FISH" #x2EE5) + ("CJK RADICAL C-SIMPLIFIED BIRD" #x2EE6) + ("CJK RADICAL C-SIMPLIFIED SALT" #x2EE7) + ("CJK RADICAL SIMPLIFIED WHEAT" #x2EE8) + ("CJK RADICAL SIMPLIFIED YELLOW" #x2EE9) + ("CJK RADICAL C-SIMPLIFIED FROG" #x2EEA) + ("CJK RADICAL J-SIMPLIFIED EVEN" #x2EEB) + ("CJK RADICAL C-SIMPLIFIED EVEN" #x2EEC) + ("CJK RADICAL J-SIMPLIFIED TOOTH" #x2EED) + ("CJK RADICAL C-SIMPLIFIED TOOTH" #x2EEE) + ("CJK RADICAL J-SIMPLIFIED DRAGON" #x2EEF) + ("CJK RADICAL C-SIMPLIFIED DRAGON" #x2EF0) + ("CJK RADICAL TURTLE" #x2EF1) + ("CJK RADICAL J-SIMPLIFIED TURTLE" #x2EF2) + ("CJK RADICAL C-SIMPLIFIED TURTLE" #x2EF3) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/02F00-02FDF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,216 @@ +(nxml-define-char-name-set 'kangxi-radicals + '(("KANGXI RADICAL ONE" #x2F00) + ("KANGXI RADICAL LINE" #x2F01) + ("KANGXI RADICAL DOT" #x2F02) + ("KANGXI RADICAL SLASH" #x2F03) + ("KANGXI RADICAL SECOND" #x2F04) + ("KANGXI RADICAL HOOK" #x2F05) + ("KANGXI RADICAL TWO" #x2F06) + ("KANGXI RADICAL LID" #x2F07) + ("KANGXI RADICAL MAN" #x2F08) + ("KANGXI RADICAL LEGS" #x2F09) + ("KANGXI RADICAL ENTER" #x2F0A) + ("KANGXI RADICAL EIGHT" #x2F0B) + ("KANGXI RADICAL DOWN BOX" #x2F0C) + ("KANGXI RADICAL COVER" #x2F0D) + ("KANGXI RADICAL ICE" #x2F0E) + ("KANGXI RADICAL TABLE" #x2F0F) + ("KANGXI RADICAL OPEN BOX" #x2F10) + ("KANGXI RADICAL KNIFE" #x2F11) + ("KANGXI RADICAL POWER" #x2F12) + ("KANGXI RADICAL WRAP" #x2F13) + ("KANGXI RADICAL SPOON" #x2F14) + ("KANGXI RADICAL RIGHT OPEN BOX" #x2F15) + ("KANGXI RADICAL HIDING ENCLOSURE" #x2F16) + ("KANGXI RADICAL TEN" #x2F17) + ("KANGXI RADICAL DIVINATION" #x2F18) + ("KANGXI RADICAL SEAL" #x2F19) + ("KANGXI RADICAL CLIFF" #x2F1A) + ("KANGXI RADICAL PRIVATE" #x2F1B) + ("KANGXI RADICAL AGAIN" #x2F1C) + ("KANGXI RADICAL MOUTH" #x2F1D) + ("KANGXI RADICAL ENCLOSURE" #x2F1E) + ("KANGXI RADICAL EARTH" #x2F1F) + ("KANGXI RADICAL SCHOLAR" #x2F20) + ("KANGXI RADICAL GO" #x2F21) + ("KANGXI RADICAL GO SLOWLY" #x2F22) + ("KANGXI RADICAL EVENING" #x2F23) + ("KANGXI RADICAL BIG" #x2F24) + ("KANGXI RADICAL WOMAN" #x2F25) + ("KANGXI RADICAL CHILD" #x2F26) + ("KANGXI RADICAL ROOF" #x2F27) + ("KANGXI RADICAL INCH" #x2F28) + ("KANGXI RADICAL SMALL" #x2F29) + ("KANGXI RADICAL LAME" #x2F2A) + ("KANGXI RADICAL CORPSE" #x2F2B) + ("KANGXI RADICAL SPROUT" #x2F2C) + ("KANGXI RADICAL MOUNTAIN" #x2F2D) + ("KANGXI RADICAL RIVER" #x2F2E) + ("KANGXI RADICAL WORK" #x2F2F) + ("KANGXI RADICAL ONESELF" #x2F30) + ("KANGXI RADICAL TURBAN" #x2F31) + ("KANGXI RADICAL DRY" #x2F32) + ("KANGXI RADICAL SHORT THREAD" #x2F33) + ("KANGXI RADICAL DOTTED CLIFF" #x2F34) + ("KANGXI RADICAL LONG STRIDE" #x2F35) + ("KANGXI RADICAL TWO HANDS" #x2F36) + ("KANGXI RADICAL SHOOT" #x2F37) + ("KANGXI RADICAL BOW" #x2F38) + ("KANGXI RADICAL SNOUT" #x2F39) + ("KANGXI RADICAL BRISTLE" #x2F3A) + ("KANGXI RADICAL STEP" #x2F3B) + ("KANGXI RADICAL HEART" #x2F3C) + ("KANGXI RADICAL HALBERD" #x2F3D) + ("KANGXI RADICAL DOOR" #x2F3E) + ("KANGXI RADICAL HAND" #x2F3F) + ("KANGXI RADICAL BRANCH" #x2F40) + ("KANGXI RADICAL RAP" #x2F41) + ("KANGXI RADICAL SCRIPT" #x2F42) + ("KANGXI RADICAL DIPPER" #x2F43) + ("KANGXI RADICAL AXE" #x2F44) + ("KANGXI RADICAL SQUARE" #x2F45) + ("KANGXI RADICAL NOT" #x2F46) + ("KANGXI RADICAL SUN" #x2F47) + ("KANGXI RADICAL SAY" #x2F48) + ("KANGXI RADICAL MOON" #x2F49) + ("KANGXI RADICAL TREE" #x2F4A) + ("KANGXI RADICAL LACK" #x2F4B) + ("KANGXI RADICAL STOP" #x2F4C) + ("KANGXI RADICAL DEATH" #x2F4D) + ("KANGXI RADICAL WEAPON" #x2F4E) + ("KANGXI RADICAL DO NOT" #x2F4F) + ("KANGXI RADICAL COMPARE" #x2F50) + ("KANGXI RADICAL FUR" #x2F51) + ("KANGXI RADICAL CLAN" #x2F52) + ("KANGXI RADICAL STEAM" #x2F53) + ("KANGXI RADICAL WATER" #x2F54) + ("KANGXI RADICAL FIRE" #x2F55) + ("KANGXI RADICAL CLAW" #x2F56) + ("KANGXI RADICAL FATHER" #x2F57) + ("KANGXI RADICAL DOUBLE X" #x2F58) + ("KANGXI RADICAL HALF TREE TRUNK" #x2F59) + ("KANGXI RADICAL SLICE" #x2F5A) + ("KANGXI RADICAL FANG" #x2F5B) + ("KANGXI RADICAL COW" #x2F5C) + ("KANGXI RADICAL DOG" #x2F5D) + ("KANGXI RADICAL PROFOUND" #x2F5E) + ("KANGXI RADICAL JADE" #x2F5F) + ("KANGXI RADICAL MELON" #x2F60) + ("KANGXI RADICAL TILE" #x2F61) + ("KANGXI RADICAL SWEET" #x2F62) + ("KANGXI RADICAL LIFE" #x2F63) + ("KANGXI RADICAL USE" #x2F64) + ("KANGXI RADICAL FIELD" #x2F65) + ("KANGXI RADICAL BOLT OF CLOTH" #x2F66) + ("KANGXI RADICAL SICKNESS" #x2F67) + ("KANGXI RADICAL DOTTED TENT" #x2F68) + ("KANGXI RADICAL WHITE" #x2F69) + ("KANGXI RADICAL SKIN" #x2F6A) + ("KANGXI RADICAL DISH" #x2F6B) + ("KANGXI RADICAL EYE" #x2F6C) + ("KANGXI RADICAL SPEAR" #x2F6D) + ("KANGXI RADICAL ARROW" #x2F6E) + ("KANGXI RADICAL STONE" #x2F6F) + ("KANGXI RADICAL SPIRIT" #x2F70) + ("KANGXI RADICAL TRACK" #x2F71) + ("KANGXI RADICAL GRAIN" #x2F72) + ("KANGXI RADICAL CAVE" #x2F73) + ("KANGXI RADICAL STAND" #x2F74) + ("KANGXI RADICAL BAMBOO" #x2F75) + ("KANGXI RADICAL RICE" #x2F76) + ("KANGXI RADICAL SILK" #x2F77) + ("KANGXI RADICAL JAR" #x2F78) + ("KANGXI RADICAL NET" #x2F79) + ("KANGXI RADICAL SHEEP" #x2F7A) + ("KANGXI RADICAL FEATHER" #x2F7B) + ("KANGXI RADICAL OLD" #x2F7C) + ("KANGXI RADICAL AND" #x2F7D) + ("KANGXI RADICAL PLOW" #x2F7E) + ("KANGXI RADICAL EAR" #x2F7F) + ("KANGXI RADICAL BRUSH" #x2F80) + ("KANGXI RADICAL MEAT" #x2F81) + ("KANGXI RADICAL MINISTER" #x2F82) + ("KANGXI RADICAL SELF" #x2F83) + ("KANGXI RADICAL ARRIVE" #x2F84) + ("KANGXI RADICAL MORTAR" #x2F85) + ("KANGXI RADICAL TONGUE" #x2F86) + ("KANGXI RADICAL OPPOSE" #x2F87) + ("KANGXI RADICAL BOAT" #x2F88) + ("KANGXI RADICAL STOPPING" #x2F89) + ("KANGXI RADICAL COLOR" #x2F8A) + ("KANGXI RADICAL GRASS" #x2F8B) + ("KANGXI RADICAL TIGER" #x2F8C) + ("KANGXI RADICAL INSECT" #x2F8D) + ("KANGXI RADICAL BLOOD" #x2F8E) + ("KANGXI RADICAL WALK ENCLOSURE" #x2F8F) + ("KANGXI RADICAL CLOTHES" #x2F90) + ("KANGXI RADICAL WEST" #x2F91) + ("KANGXI RADICAL SEE" #x2F92) + ("KANGXI RADICAL HORN" #x2F93) + ("KANGXI RADICAL SPEECH" #x2F94) + ("KANGXI RADICAL VALLEY" #x2F95) + ("KANGXI RADICAL BEAN" #x2F96) + ("KANGXI RADICAL PIG" #x2F97) + ("KANGXI RADICAL BADGER" #x2F98) + ("KANGXI RADICAL SHELL" #x2F99) + ("KANGXI RADICAL RED" #x2F9A) + ("KANGXI RADICAL RUN" #x2F9B) + ("KANGXI RADICAL FOOT" #x2F9C) + ("KANGXI RADICAL BODY" #x2F9D) + ("KANGXI RADICAL CART" #x2F9E) + ("KANGXI RADICAL BITTER" #x2F9F) + ("KANGXI RADICAL MORNING" #x2FA0) + ("KANGXI RADICAL WALK" #x2FA1) + ("KANGXI RADICAL CITY" #x2FA2) + ("KANGXI RADICAL WINE" #x2FA3) + ("KANGXI RADICAL DISTINGUISH" #x2FA4) + ("KANGXI RADICAL VILLAGE" #x2FA5) + ("KANGXI RADICAL GOLD" #x2FA6) + ("KANGXI RADICAL LONG" #x2FA7) + ("KANGXI RADICAL GATE" #x2FA8) + ("KANGXI RADICAL MOUND" #x2FA9) + ("KANGXI RADICAL SLAVE" #x2FAA) + ("KANGXI RADICAL SHORT TAILED BIRD" #x2FAB) + ("KANGXI RADICAL RAIN" #x2FAC) + ("KANGXI RADICAL BLUE" #x2FAD) + ("KANGXI RADICAL WRONG" #x2FAE) + ("KANGXI RADICAL FACE" #x2FAF) + ("KANGXI RADICAL LEATHER" #x2FB0) + ("KANGXI RADICAL TANNED LEATHER" #x2FB1) + ("KANGXI RADICAL LEEK" #x2FB2) + ("KANGXI RADICAL SOUND" #x2FB3) + ("KANGXI RADICAL LEAF" #x2FB4) + ("KANGXI RADICAL WIND" #x2FB5) + ("KANGXI RADICAL FLY" #x2FB6) + ("KANGXI RADICAL EAT" #x2FB7) + ("KANGXI RADICAL HEAD" #x2FB8) + ("KANGXI RADICAL FRAGRANT" #x2FB9) + ("KANGXI RADICAL HORSE" #x2FBA) + ("KANGXI RADICAL BONE" #x2FBB) + ("KANGXI RADICAL TALL" #x2FBC) + ("KANGXI RADICAL HAIR" #x2FBD) + ("KANGXI RADICAL FIGHT" #x2FBE) + ("KANGXI RADICAL SACRIFICIAL WINE" #x2FBF) + ("KANGXI RADICAL CAULDRON" #x2FC0) + ("KANGXI RADICAL GHOST" #x2FC1) + ("KANGXI RADICAL FISH" #x2FC2) + ("KANGXI RADICAL BIRD" #x2FC3) + ("KANGXI RADICAL SALT" #x2FC4) + ("KANGXI RADICAL DEER" #x2FC5) + ("KANGXI RADICAL WHEAT" #x2FC6) + ("KANGXI RADICAL HEMP" #x2FC7) + ("KANGXI RADICAL YELLOW" #x2FC8) + ("KANGXI RADICAL MILLET" #x2FC9) + ("KANGXI RADICAL BLACK" #x2FCA) + ("KANGXI RADICAL EMBROIDERY" #x2FCB) + ("KANGXI RADICAL FROG" #x2FCC) + ("KANGXI RADICAL TRIPOD" #x2FCD) + ("KANGXI RADICAL DRUM" #x2FCE) + ("KANGXI RADICAL RAT" #x2FCF) + ("KANGXI RADICAL NOSE" #x2FD0) + ("KANGXI RADICAL EVEN" #x2FD1) + ("KANGXI RADICAL TOOTH" #x2FD2) + ("KANGXI RADICAL DRAGON" #x2FD3) + ("KANGXI RADICAL TURTLE" #x2FD4) + ("KANGXI RADICAL FLUTE" #x2FD5) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/02FF0-02FFF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,14 @@ +(nxml-define-char-name-set 'ideographic-description-characters + '(("IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT" #x2FF0) + ("IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW" #x2FF1) + ("IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT" #x2FF2) + ("IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW" #x2FF3) + ("IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND" #x2FF4) + ("IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE" #x2FF5) + ("IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW" #x2FF6) + ("IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT" #x2FF7) + ("IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT" #x2FF8) + ("IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT" #x2FF9) + ("IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT" #x2FFA) + ("IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID" #x2FFB) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/03000-0303F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,66 @@ +(nxml-define-char-name-set 'cjk-symbols-and-punctuation + '(("IDEOGRAPHIC SPACE" #x3000) + ("IDEOGRAPHIC COMMA" #x3001) + ("IDEOGRAPHIC FULL STOP" #x3002) + ("DITTO MARK" #x3003) + ("JAPANESE INDUSTRIAL STANDARD SYMBOL" #x3004) + ("IDEOGRAPHIC ITERATION MARK" #x3005) + ("IDEOGRAPHIC CLOSING MARK" #x3006) + ("IDEOGRAPHIC NUMBER ZERO" #x3007) + ("LEFT ANGLE BRACKET" #x3008) + ("RIGHT ANGLE BRACKET" #x3009) + ("LEFT DOUBLE ANGLE BRACKET" #x300A) + ("RIGHT DOUBLE ANGLE BRACKET" #x300B) + ("LEFT CORNER BRACKET" #x300C) + ("RIGHT CORNER BRACKET" #x300D) + ("LEFT WHITE CORNER BRACKET" #x300E) + ("RIGHT WHITE CORNER BRACKET" #x300F) + ("LEFT BLACK LENTICULAR BRACKET" #x3010) + ("RIGHT BLACK LENTICULAR BRACKET" #x3011) + ("POSTAL MARK" #x3012) + ("GETA MARK" #x3013) + ("LEFT TORTOISE SHELL BRACKET" #x3014) + ("RIGHT TORTOISE SHELL BRACKET" #x3015) + ("LEFT WHITE LENTICULAR BRACKET" #x3016) + ("RIGHT WHITE LENTICULAR BRACKET" #x3017) + ("LEFT WHITE TORTOISE SHELL BRACKET" #x3018) + ("RIGHT WHITE TORTOISE SHELL BRACKET" #x3019) + ("LEFT WHITE SQUARE BRACKET" #x301A) + ("RIGHT WHITE SQUARE BRACKET" #x301B) + ("WAVE DASH" #x301C) + ("REVERSED DOUBLE PRIME QUOTATION MARK" #x301D) + ("DOUBLE PRIME QUOTATION MARK" #x301E) + ("LOW DOUBLE PRIME QUOTATION MARK" #x301F) + ("POSTAL MARK FACE" #x3020) + ("HANGZHOU NUMERAL ONE" #x3021) + ("HANGZHOU NUMERAL TWO" #x3022) + ("HANGZHOU NUMERAL THREE" #x3023) + ("HANGZHOU NUMERAL FOUR" #x3024) + ("HANGZHOU NUMERAL FIVE" #x3025) + ("HANGZHOU NUMERAL SIX" #x3026) + ("HANGZHOU NUMERAL SEVEN" #x3027) + ("HANGZHOU NUMERAL EIGHT" #x3028) + ("HANGZHOU NUMERAL NINE" #x3029) + ("IDEOGRAPHIC LEVEL TONE MARK" #x302A) + ("IDEOGRAPHIC RISING TONE MARK" #x302B) + ("IDEOGRAPHIC DEPARTING TONE MARK" #x302C) + ("IDEOGRAPHIC ENTERING TONE MARK" #x302D) + ("HANGUL SINGLE DOT TONE MARK" #x302E) + ("HANGUL DOUBLE DOT TONE MARK" #x302F) + ("WAVY DASH" #x3030) + ("VERTICAL KANA REPEAT MARK" #x3031) + ("VERTICAL KANA REPEAT WITH VOICED SOUND MARK" #x3032) + ("VERTICAL KANA REPEAT MARK UPPER HALF" #x3033) + ("VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF" #x3034) + ("VERTICAL KANA REPEAT MARK LOWER HALF" #x3035) + ("CIRCLED POSTAL MARK" #x3036) + ("IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL" #x3037) + ("HANGZHOU NUMERAL TEN" #x3038) + ("HANGZHOU NUMERAL TWENTY" #x3039) + ("HANGZHOU NUMERAL THIRTY" #x303A) + ("VERTICAL IDEOGRAPHIC ITERATION MARK" #x303B) + ("MASU MARK" #x303C) + ("PART ALTERNATION MARK" #x303D) + ("IDEOGRAPHIC VARIATION INDICATOR" #x303E) + ("IDEOGRAPHIC HALF FILL SPACE" #x303F) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/03040-0309F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,95 @@ +(nxml-define-char-name-set 'hiragana + '(("HIRAGANA LETTER SMALL A" #x3041) + ("HIRAGANA LETTER A" #x3042) + ("HIRAGANA LETTER SMALL I" #x3043) + ("HIRAGANA LETTER I" #x3044) + ("HIRAGANA LETTER SMALL U" #x3045) + ("HIRAGANA LETTER U" #x3046) + ("HIRAGANA LETTER SMALL E" #x3047) + ("HIRAGANA LETTER E" #x3048) + ("HIRAGANA LETTER SMALL O" #x3049) + ("HIRAGANA LETTER O" #x304A) + ("HIRAGANA LETTER KA" #x304B) + ("HIRAGANA LETTER GA" #x304C) + ("HIRAGANA LETTER KI" #x304D) + ("HIRAGANA LETTER GI" #x304E) + ("HIRAGANA LETTER KU" #x304F) + ("HIRAGANA LETTER GU" #x3050) + ("HIRAGANA LETTER KE" #x3051) + ("HIRAGANA LETTER GE" #x3052) + ("HIRAGANA LETTER KO" #x3053) + ("HIRAGANA LETTER GO" #x3054) + ("HIRAGANA LETTER SA" #x3055) + ("HIRAGANA LETTER ZA" #x3056) + ("HIRAGANA LETTER SI" #x3057) + ("HIRAGANA LETTER ZI" #x3058) + ("HIRAGANA LETTER SU" #x3059) + ("HIRAGANA LETTER ZU" #x305A) + ("HIRAGANA LETTER SE" #x305B) + ("HIRAGANA LETTER ZE" #x305C) + ("HIRAGANA LETTER SO" #x305D) + ("HIRAGANA LETTER ZO" #x305E) + ("HIRAGANA LETTER TA" #x305F) + ("HIRAGANA LETTER DA" #x3060) + ("HIRAGANA LETTER TI" #x3061) + ("HIRAGANA LETTER DI" #x3062) + ("HIRAGANA LETTER SMALL TU" #x3063) + ("HIRAGANA LETTER TU" #x3064) + ("HIRAGANA LETTER DU" #x3065) + ("HIRAGANA LETTER TE" #x3066) + ("HIRAGANA LETTER DE" #x3067) + ("HIRAGANA LETTER TO" #x3068) + ("HIRAGANA LETTER DO" #x3069) + ("HIRAGANA LETTER NA" #x306A) + ("HIRAGANA LETTER NI" #x306B) + ("HIRAGANA LETTER NU" #x306C) + ("HIRAGANA LETTER NE" #x306D) + ("HIRAGANA LETTER NO" #x306E) + ("HIRAGANA LETTER HA" #x306F) + ("HIRAGANA LETTER BA" #x3070) + ("HIRAGANA LETTER PA" #x3071) + ("HIRAGANA LETTER HI" #x3072) + ("HIRAGANA LETTER BI" #x3073) + ("HIRAGANA LETTER PI" #x3074) + ("HIRAGANA LETTER HU" #x3075) + ("HIRAGANA LETTER BU" #x3076) + ("HIRAGANA LETTER PU" #x3077) + ("HIRAGANA LETTER HE" #x3078) + ("HIRAGANA LETTER BE" #x3079) + ("HIRAGANA LETTER PE" #x307A) + ("HIRAGANA LETTER HO" #x307B) + ("HIRAGANA LETTER BO" #x307C) + ("HIRAGANA LETTER PO" #x307D) + ("HIRAGANA LETTER MA" #x307E) + ("HIRAGANA LETTER MI" #x307F) + ("HIRAGANA LETTER MU" #x3080) + ("HIRAGANA LETTER ME" #x3081) + ("HIRAGANA LETTER MO" #x3082) + ("HIRAGANA LETTER SMALL YA" #x3083) + ("HIRAGANA LETTER YA" #x3084) + ("HIRAGANA LETTER SMALL YU" #x3085) + ("HIRAGANA LETTER YU" #x3086) + ("HIRAGANA LETTER SMALL YO" #x3087) + ("HIRAGANA LETTER YO" #x3088) + ("HIRAGANA LETTER RA" #x3089) + ("HIRAGANA LETTER RI" #x308A) + ("HIRAGANA LETTER RU" #x308B) + ("HIRAGANA LETTER RE" #x308C) + ("HIRAGANA LETTER RO" #x308D) + ("HIRAGANA LETTER SMALL WA" #x308E) + ("HIRAGANA LETTER WA" #x308F) + ("HIRAGANA LETTER WI" #x3090) + ("HIRAGANA LETTER WE" #x3091) + ("HIRAGANA LETTER WO" #x3092) + ("HIRAGANA LETTER N" #x3093) + ("HIRAGANA LETTER VU" #x3094) + ("HIRAGANA LETTER SMALL KA" #x3095) + ("HIRAGANA LETTER SMALL KE" #x3096) + ("COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK" #x3099) + ("COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK" #x309A) + ("KATAKANA-HIRAGANA VOICED SOUND MARK" #x309B) + ("KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK" #x309C) + ("HIRAGANA ITERATION MARK" #x309D) + ("HIRAGANA VOICED ITERATION MARK" #x309E) + ("HIRAGANA DIGRAPH YORI" #x309F) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/030A0-030FF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,98 @@ +(nxml-define-char-name-set 'katakana + '(("KATAKANA-HIRAGANA DOUBLE HYPHEN" #x30A0) + ("KATAKANA LETTER SMALL A" #x30A1) + ("KATAKANA LETTER A" #x30A2) + ("KATAKANA LETTER SMALL I" #x30A3) + ("KATAKANA LETTER I" #x30A4) + ("KATAKANA LETTER SMALL U" #x30A5) + ("KATAKANA LETTER U" #x30A6) + ("KATAKANA LETTER SMALL E" #x30A7) + ("KATAKANA LETTER E" #x30A8) + ("KATAKANA LETTER SMALL O" #x30A9) + ("KATAKANA LETTER O" #x30AA) + ("KATAKANA LETTER KA" #x30AB) + ("KATAKANA LETTER GA" #x30AC) + ("KATAKANA LETTER KI" #x30AD) + ("KATAKANA LETTER GI" #x30AE) + ("KATAKANA LETTER KU" #x30AF) + ("KATAKANA LETTER GU" #x30B0) + ("KATAKANA LETTER KE" #x30B1) + ("KATAKANA LETTER GE" #x30B2) + ("KATAKANA LETTER KO" #x30B3) + ("KATAKANA LETTER GO" #x30B4) + ("KATAKANA LETTER SA" #x30B5) + ("KATAKANA LETTER ZA" #x30B6) + ("KATAKANA LETTER SI" #x30B7) + ("KATAKANA LETTER ZI" #x30B8) + ("KATAKANA LETTER SU" #x30B9) + ("KATAKANA LETTER ZU" #x30BA) + ("KATAKANA LETTER SE" #x30BB) + ("KATAKANA LETTER ZE" #x30BC) + ("KATAKANA LETTER SO" #x30BD) + ("KATAKANA LETTER ZO" #x30BE) + ("KATAKANA LETTER TA" #x30BF) + ("KATAKANA LETTER DA" #x30C0) + ("KATAKANA LETTER TI" #x30C1) + ("KATAKANA LETTER DI" #x30C2) + ("KATAKANA LETTER SMALL TU" #x30C3) + ("KATAKANA LETTER TU" #x30C4) + ("KATAKANA LETTER DU" #x30C5) + ("KATAKANA LETTER TE" #x30C6) + ("KATAKANA LETTER DE" #x30C7) + ("KATAKANA LETTER TO" #x30C8) + ("KATAKANA LETTER DO" #x30C9) + ("KATAKANA LETTER NA" #x30CA) + ("KATAKANA LETTER NI" #x30CB) + ("KATAKANA LETTER NU" #x30CC) + ("KATAKANA LETTER NE" #x30CD) + ("KATAKANA LETTER NO" #x30CE) + ("KATAKANA LETTER HA" #x30CF) + ("KATAKANA LETTER BA" #x30D0) + ("KATAKANA LETTER PA" #x30D1) + ("KATAKANA LETTER HI" #x30D2) + ("KATAKANA LETTER BI" #x30D3) + ("KATAKANA LETTER PI" #x30D4) + ("KATAKANA LETTER HU" #x30D5) + ("KATAKANA LETTER BU" #x30D6) + ("KATAKANA LETTER PU" #x30D7) + ("KATAKANA LETTER HE" #x30D8) + ("KATAKANA LETTER BE" #x30D9) + ("KATAKANA LETTER PE" #x30DA) + ("KATAKANA LETTER HO" #x30DB) + ("KATAKANA LETTER BO" #x30DC) + ("KATAKANA LETTER PO" #x30DD) + ("KATAKANA LETTER MA" #x30DE) + ("KATAKANA LETTER MI" #x30DF) + ("KATAKANA LETTER MU" #x30E0) + ("KATAKANA LETTER ME" #x30E1) + ("KATAKANA LETTER MO" #x30E2) + ("KATAKANA LETTER SMALL YA" #x30E3) + ("KATAKANA LETTER YA" #x30E4) + ("KATAKANA LETTER SMALL YU" #x30E5) + ("KATAKANA LETTER YU" #x30E6) + ("KATAKANA LETTER SMALL YO" #x30E7) + ("KATAKANA LETTER YO" #x30E8) + ("KATAKANA LETTER RA" #x30E9) + ("KATAKANA LETTER RI" #x30EA) + ("KATAKANA LETTER RU" #x30EB) + ("KATAKANA LETTER RE" #x30EC) + ("KATAKANA LETTER RO" #x30ED) + ("KATAKANA LETTER SMALL WA" #x30EE) + ("KATAKANA LETTER WA" #x30EF) + ("KATAKANA LETTER WI" #x30F0) + ("KATAKANA LETTER WE" #x30F1) + ("KATAKANA LETTER WO" #x30F2) + ("KATAKANA LETTER N" #x30F3) + ("KATAKANA LETTER VU" #x30F4) + ("KATAKANA LETTER SMALL KA" #x30F5) + ("KATAKANA LETTER SMALL KE" #x30F6) + ("KATAKANA LETTER VA" #x30F7) + ("KATAKANA LETTER VI" #x30F8) + ("KATAKANA LETTER VE" #x30F9) + ("KATAKANA LETTER VO" #x30FA) + ("KATAKANA MIDDLE DOT" #x30FB) + ("KATAKANA-HIRAGANA PROLONGED SOUND MARK" #x30FC) + ("KATAKANA ITERATION MARK" #x30FD) + ("KATAKANA VOICED ITERATION MARK" #x30FE) + ("KATAKANA DIGRAPH KOTO" #x30FF) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/03100-0312F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,42 @@ +(nxml-define-char-name-set 'bopomofo + '(("BOPOMOFO LETTER B" #x3105) + ("BOPOMOFO LETTER P" #x3106) + ("BOPOMOFO LETTER M" #x3107) + ("BOPOMOFO LETTER F" #x3108) + ("BOPOMOFO LETTER D" #x3109) + ("BOPOMOFO LETTER T" #x310A) + ("BOPOMOFO LETTER N" #x310B) + ("BOPOMOFO LETTER L" #x310C) + ("BOPOMOFO LETTER G" #x310D) + ("BOPOMOFO LETTER K" #x310E) + ("BOPOMOFO LETTER H" #x310F) + ("BOPOMOFO LETTER J" #x3110) + ("BOPOMOFO LETTER Q" #x3111) + ("BOPOMOFO LETTER X" #x3112) + ("BOPOMOFO LETTER ZH" #x3113) + ("BOPOMOFO LETTER CH" #x3114) + ("BOPOMOFO LETTER SH" #x3115) + ("BOPOMOFO LETTER R" #x3116) + ("BOPOMOFO LETTER Z" #x3117) + ("BOPOMOFO LETTER C" #x3118) + ("BOPOMOFO LETTER S" #x3119) + ("BOPOMOFO LETTER A" #x311A) + ("BOPOMOFO LETTER O" #x311B) + ("BOPOMOFO LETTER E" #x311C) + ("BOPOMOFO LETTER EH" #x311D) + ("BOPOMOFO LETTER AI" #x311E) + ("BOPOMOFO LETTER EI" #x311F) + ("BOPOMOFO LETTER AU" #x3120) + ("BOPOMOFO LETTER OU" #x3121) + ("BOPOMOFO LETTER AN" #x3122) + ("BOPOMOFO LETTER EN" #x3123) + ("BOPOMOFO LETTER ANG" #x3124) + ("BOPOMOFO LETTER ENG" #x3125) + ("BOPOMOFO LETTER ER" #x3126) + ("BOPOMOFO LETTER I" #x3127) + ("BOPOMOFO LETTER U" #x3128) + ("BOPOMOFO LETTER IU" #x3129) + ("BOPOMOFO LETTER V" #x312A) + ("BOPOMOFO LETTER NG" #x312B) + ("BOPOMOFO LETTER GN" #x312C) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/03130-0318F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,96 @@ +(nxml-define-char-name-set 'hangul-compatibility-jamo + '(("HANGUL LETTER KIYEOK" #x3131) + ("HANGUL LETTER SSANGKIYEOK" #x3132) + ("HANGUL LETTER KIYEOK-SIOS" #x3133) + ("HANGUL LETTER NIEUN" #x3134) + ("HANGUL LETTER NIEUN-CIEUC" #x3135) + ("HANGUL LETTER NIEUN-HIEUH" #x3136) + ("HANGUL LETTER TIKEUT" #x3137) + ("HANGUL LETTER SSANGTIKEUT" #x3138) + ("HANGUL LETTER RIEUL" #x3139) + ("HANGUL LETTER RIEUL-KIYEOK" #x313A) + ("HANGUL LETTER RIEUL-MIEUM" #x313B) + ("HANGUL LETTER RIEUL-PIEUP" #x313C) + ("HANGUL LETTER RIEUL-SIOS" #x313D) + ("HANGUL LETTER RIEUL-THIEUTH" #x313E) + ("HANGUL LETTER RIEUL-PHIEUPH" #x313F) + ("HANGUL LETTER RIEUL-HIEUH" #x3140) + ("HANGUL LETTER MIEUM" #x3141) + ("HANGUL LETTER PIEUP" #x3142) + ("HANGUL LETTER SSANGPIEUP" #x3143) + ("HANGUL LETTER PIEUP-SIOS" #x3144) + ("HANGUL LETTER SIOS" #x3145) + ("HANGUL LETTER SSANGSIOS" #x3146) + ("HANGUL LETTER IEUNG" #x3147) + ("HANGUL LETTER CIEUC" #x3148) + ("HANGUL LETTER SSANGCIEUC" #x3149) + ("HANGUL LETTER CHIEUCH" #x314A) + ("HANGUL LETTER KHIEUKH" #x314B) + ("HANGUL LETTER THIEUTH" #x314C) + ("HANGUL LETTER PHIEUPH" #x314D) + ("HANGUL LETTER HIEUH" #x314E) + ("HANGUL LETTER A" #x314F) + ("HANGUL LETTER AE" #x3150) + ("HANGUL LETTER YA" #x3151) + ("HANGUL LETTER YAE" #x3152) + ("HANGUL LETTER EO" #x3153) + ("HANGUL LETTER E" #x3154) + ("HANGUL LETTER YEO" #x3155) + ("HANGUL LETTER YE" #x3156) + ("HANGUL LETTER O" #x3157) + ("HANGUL LETTER WA" #x3158) + ("HANGUL LETTER WAE" #x3159) + ("HANGUL LETTER OE" #x315A) + ("HANGUL LETTER YO" #x315B) + ("HANGUL LETTER U" #x315C) + ("HANGUL LETTER WEO" #x315D) + ("HANGUL LETTER WE" #x315E) + ("HANGUL LETTER WI" #x315F) + ("HANGUL LETTER YU" #x3160) + ("HANGUL LETTER EU" #x3161) + ("HANGUL LETTER YI" #x3162) + ("HANGUL LETTER I" #x3163) + ("HANGUL FILLER" #x3164) + ("HANGUL LETTER SSANGNIEUN" #x3165) + ("HANGUL LETTER NIEUN-TIKEUT" #x3166) + ("HANGUL LETTER NIEUN-SIOS" #x3167) + ("HANGUL LETTER NIEUN-PANSIOS" #x3168) + ("HANGUL LETTER RIEUL-KIYEOK-SIOS" #x3169) + ("HANGUL LETTER RIEUL-TIKEUT" #x316A) + ("HANGUL LETTER RIEUL-PIEUP-SIOS" #x316B) + ("HANGUL LETTER RIEUL-PANSIOS" #x316C) + ("HANGUL LETTER RIEUL-YEORINHIEUH" #x316D) + ("HANGUL LETTER MIEUM-PIEUP" #x316E) + ("HANGUL LETTER MIEUM-SIOS" #x316F) + ("HANGUL LETTER MIEUM-PANSIOS" #x3170) + ("HANGUL LETTER KAPYEOUNMIEUM" #x3171) + ("HANGUL LETTER PIEUP-KIYEOK" #x3172) + ("HANGUL LETTER PIEUP-TIKEUT" #x3173) + ("HANGUL LETTER PIEUP-SIOS-KIYEOK" #x3174) + ("HANGUL LETTER PIEUP-SIOS-TIKEUT" #x3175) + ("HANGUL LETTER PIEUP-CIEUC" #x3176) + ("HANGUL LETTER PIEUP-THIEUTH" #x3177) + ("HANGUL LETTER KAPYEOUNPIEUP" #x3178) + ("HANGUL LETTER KAPYEOUNSSANGPIEUP" #x3179) + ("HANGUL LETTER SIOS-KIYEOK" #x317A) + ("HANGUL LETTER SIOS-NIEUN" #x317B) + ("HANGUL LETTER SIOS-TIKEUT" #x317C) + ("HANGUL LETTER SIOS-PIEUP" #x317D) + ("HANGUL LETTER SIOS-CIEUC" #x317E) + ("HANGUL LETTER PANSIOS" #x317F) + ("HANGUL LETTER SSANGIEUNG" #x3180) + ("HANGUL LETTER YESIEUNG" #x3181) + ("HANGUL LETTER YESIEUNG-SIOS" #x3182) + ("HANGUL LETTER YESIEUNG-PANSIOS" #x3183) + ("HANGUL LETTER KAPYEOUNPHIEUPH" #x3184) + ("HANGUL LETTER SSANGHIEUH" #x3185) + ("HANGUL LETTER YEORINHIEUH" #x3186) + ("HANGUL LETTER YO-YA" #x3187) + ("HANGUL LETTER YO-YAE" #x3188) + ("HANGUL LETTER YO-I" #x3189) + ("HANGUL LETTER YU-YEO" #x318A) + ("HANGUL LETTER YU-YE" #x318B) + ("HANGUL LETTER YU-I" #x318C) + ("HANGUL LETTER ARAEA" #x318D) + ("HANGUL LETTER ARAEAE" #x318E) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/03190-0319F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,18 @@ +(nxml-define-char-name-set 'kanbun + '(("IDEOGRAPHIC ANNOTATION LINKING MARK" #x3190) + ("IDEOGRAPHIC ANNOTATION REVERSE MARK" #x3191) + ("IDEOGRAPHIC ANNOTATION ONE MARK" #x3192) + ("IDEOGRAPHIC ANNOTATION TWO MARK" #x3193) + ("IDEOGRAPHIC ANNOTATION THREE MARK" #x3194) + ("IDEOGRAPHIC ANNOTATION FOUR MARK" #x3195) + ("IDEOGRAPHIC ANNOTATION TOP MARK" #x3196) + ("IDEOGRAPHIC ANNOTATION MIDDLE MARK" #x3197) + ("IDEOGRAPHIC ANNOTATION BOTTOM MARK" #x3198) + ("IDEOGRAPHIC ANNOTATION FIRST MARK" #x3199) + ("IDEOGRAPHIC ANNOTATION SECOND MARK" #x319A) + ("IDEOGRAPHIC ANNOTATION THIRD MARK" #x319B) + ("IDEOGRAPHIC ANNOTATION FOURTH MARK" #x319C) + ("IDEOGRAPHIC ANNOTATION HEAVEN MARK" #x319D) + ("IDEOGRAPHIC ANNOTATION EARTH MARK" #x319E) + ("IDEOGRAPHIC ANNOTATION MAN MARK" #x319F) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/031A0-031BF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,26 @@ +(nxml-define-char-name-set 'bopomofo-extended + '(("BOPOMOFO LETTER BU" #x31A0) + ("BOPOMOFO LETTER ZI" #x31A1) + ("BOPOMOFO LETTER JI" #x31A2) + ("BOPOMOFO LETTER GU" #x31A3) + ("BOPOMOFO LETTER EE" #x31A4) + ("BOPOMOFO LETTER ENN" #x31A5) + ("BOPOMOFO LETTER OO" #x31A6) + ("BOPOMOFO LETTER ONN" #x31A7) + ("BOPOMOFO LETTER IR" #x31A8) + ("BOPOMOFO LETTER ANN" #x31A9) + ("BOPOMOFO LETTER INN" #x31AA) + ("BOPOMOFO LETTER UNN" #x31AB) + ("BOPOMOFO LETTER IM" #x31AC) + ("BOPOMOFO LETTER NGG" #x31AD) + ("BOPOMOFO LETTER AINN" #x31AE) + ("BOPOMOFO LETTER AUNN" #x31AF) + ("BOPOMOFO LETTER AM" #x31B0) + ("BOPOMOFO LETTER OM" #x31B1) + ("BOPOMOFO LETTER ONG" #x31B2) + ("BOPOMOFO LETTER INNN" #x31B3) + ("BOPOMOFO FINAL LETTER P" #x31B4) + ("BOPOMOFO FINAL LETTER T" #x31B5) + ("BOPOMOFO FINAL LETTER K" #x31B6) + ("BOPOMOFO FINAL LETTER H" #x31B7) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/031F0-031FF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,18 @@ +(nxml-define-char-name-set 'katakana-phonetic-extensions + '(("KATAKANA LETTER SMALL KU" #x31F0) + ("KATAKANA LETTER SMALL SI" #x31F1) + ("KATAKANA LETTER SMALL SU" #x31F2) + ("KATAKANA LETTER SMALL TO" #x31F3) + ("KATAKANA LETTER SMALL NU" #x31F4) + ("KATAKANA LETTER SMALL HA" #x31F5) + ("KATAKANA LETTER SMALL HI" #x31F6) + ("KATAKANA LETTER SMALL HU" #x31F7) + ("KATAKANA LETTER SMALL HE" #x31F8) + ("KATAKANA LETTER SMALL HO" #x31F9) + ("KATAKANA LETTER SMALL MU" #x31FA) + ("KATAKANA LETTER SMALL RA" #x31FB) + ("KATAKANA LETTER SMALL RI" #x31FC) + ("KATAKANA LETTER SMALL RU" #x31FD) + ("KATAKANA LETTER SMALL RE" #x31FE) + ("KATAKANA LETTER SMALL RO" #x31FF) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/03200-032FF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,234 @@ +(nxml-define-char-name-set 'enclosed-cjk-letters-and-months + '(("PARENTHESIZED HANGUL KIYEOK" #x3200) + ("PARENTHESIZED HANGUL NIEUN" #x3201) + ("PARENTHESIZED HANGUL TIKEUT" #x3202) + ("PARENTHESIZED HANGUL RIEUL" #x3203) + ("PARENTHESIZED HANGUL MIEUM" #x3204) + ("PARENTHESIZED HANGUL PIEUP" #x3205) + ("PARENTHESIZED HANGUL SIOS" #x3206) + ("PARENTHESIZED HANGUL IEUNG" #x3207) + ("PARENTHESIZED HANGUL CIEUC" #x3208) + ("PARENTHESIZED HANGUL CHIEUCH" #x3209) + ("PARENTHESIZED HANGUL KHIEUKH" #x320A) + ("PARENTHESIZED HANGUL THIEUTH" #x320B) + ("PARENTHESIZED HANGUL PHIEUPH" #x320C) + ("PARENTHESIZED HANGUL HIEUH" #x320D) + ("PARENTHESIZED HANGUL KIYEOK A" #x320E) + ("PARENTHESIZED HANGUL NIEUN A" #x320F) + ("PARENTHESIZED HANGUL TIKEUT A" #x3210) + ("PARENTHESIZED HANGUL RIEUL A" #x3211) + ("PARENTHESIZED HANGUL MIEUM A" #x3212) + ("PARENTHESIZED HANGUL PIEUP A" #x3213) + ("PARENTHESIZED HANGUL SIOS A" #x3214) + ("PARENTHESIZED HANGUL IEUNG A" #x3215) + ("PARENTHESIZED HANGUL CIEUC A" #x3216) + ("PARENTHESIZED HANGUL CHIEUCH A" #x3217) + ("PARENTHESIZED HANGUL KHIEUKH A" #x3218) + ("PARENTHESIZED HANGUL THIEUTH A" #x3219) + ("PARENTHESIZED HANGUL PHIEUPH A" #x321A) + ("PARENTHESIZED HANGUL HIEUH A" #x321B) + ("PARENTHESIZED HANGUL CIEUC U" #x321C) + ("PARENTHESIZED IDEOGRAPH ONE" #x3220) + ("PARENTHESIZED IDEOGRAPH TWO" #x3221) + ("PARENTHESIZED IDEOGRAPH THREE" #x3222) + ("PARENTHESIZED IDEOGRAPH FOUR" #x3223) + ("PARENTHESIZED IDEOGRAPH FIVE" #x3224) + ("PARENTHESIZED IDEOGRAPH SIX" #x3225) + ("PARENTHESIZED IDEOGRAPH SEVEN" #x3226) + ("PARENTHESIZED IDEOGRAPH EIGHT" #x3227) + ("PARENTHESIZED IDEOGRAPH NINE" #x3228) + ("PARENTHESIZED IDEOGRAPH TEN" #x3229) + ("PARENTHESIZED IDEOGRAPH MOON" #x322A) + ("PARENTHESIZED IDEOGRAPH FIRE" #x322B) + ("PARENTHESIZED IDEOGRAPH WATER" #x322C) + ("PARENTHESIZED IDEOGRAPH WOOD" #x322D) + ("PARENTHESIZED IDEOGRAPH METAL" #x322E) + ("PARENTHESIZED IDEOGRAPH EARTH" #x322F) + ("PARENTHESIZED IDEOGRAPH SUN" #x3230) + ("PARENTHESIZED IDEOGRAPH STOCK" #x3231) + ("PARENTHESIZED IDEOGRAPH HAVE" #x3232) + ("PARENTHESIZED IDEOGRAPH SOCIETY" #x3233) + ("PARENTHESIZED IDEOGRAPH NAME" #x3234) + ("PARENTHESIZED IDEOGRAPH SPECIAL" #x3235) + ("PARENTHESIZED IDEOGRAPH FINANCIAL" #x3236) + ("PARENTHESIZED IDEOGRAPH CONGRATULATION" #x3237) + ("PARENTHESIZED IDEOGRAPH LABOR" #x3238) + ("PARENTHESIZED IDEOGRAPH REPRESENT" #x3239) + ("PARENTHESIZED IDEOGRAPH CALL" #x323A) + ("PARENTHESIZED IDEOGRAPH STUDY" #x323B) + ("PARENTHESIZED IDEOGRAPH SUPERVISE" #x323C) + ("PARENTHESIZED IDEOGRAPH ENTERPRISE" #x323D) + ("PARENTHESIZED IDEOGRAPH RESOURCE" #x323E) + ("PARENTHESIZED IDEOGRAPH ALLIANCE" #x323F) + ("PARENTHESIZED IDEOGRAPH FESTIVAL" #x3240) + ("PARENTHESIZED IDEOGRAPH REST" #x3241) + ("PARENTHESIZED IDEOGRAPH SELF" #x3242) + ("PARENTHESIZED IDEOGRAPH REACH" #x3243) + ("CIRCLED NUMBER TWENTY ONE" #x3251) + ("CIRCLED NUMBER TWENTY TWO" #x3252) + ("CIRCLED NUMBER TWENTY THREE" #x3253) + ("CIRCLED NUMBER TWENTY FOUR" #x3254) + ("CIRCLED NUMBER TWENTY FIVE" #x3255) + ("CIRCLED NUMBER TWENTY SIX" #x3256) + ("CIRCLED NUMBER TWENTY SEVEN" #x3257) + ("CIRCLED NUMBER TWENTY EIGHT" #x3258) + ("CIRCLED NUMBER TWENTY NINE" #x3259) + ("CIRCLED NUMBER THIRTY" #x325A) + ("CIRCLED NUMBER THIRTY ONE" #x325B) + ("CIRCLED NUMBER THIRTY TWO" #x325C) + ("CIRCLED NUMBER THIRTY THREE" #x325D) + ("CIRCLED NUMBER THIRTY FOUR" #x325E) + ("CIRCLED NUMBER THIRTY FIVE" #x325F) + ("CIRCLED HANGUL KIYEOK" #x3260) + ("CIRCLED HANGUL NIEUN" #x3261) + ("CIRCLED HANGUL TIKEUT" #x3262) + ("CIRCLED HANGUL RIEUL" #x3263) + ("CIRCLED HANGUL MIEUM" #x3264) + ("CIRCLED HANGUL PIEUP" #x3265) + ("CIRCLED HANGUL SIOS" #x3266) + ("CIRCLED HANGUL IEUNG" #x3267) + ("CIRCLED HANGUL CIEUC" #x3268) + ("CIRCLED HANGUL CHIEUCH" #x3269) + ("CIRCLED HANGUL KHIEUKH" #x326A) + ("CIRCLED HANGUL THIEUTH" #x326B) + ("CIRCLED HANGUL PHIEUPH" #x326C) + ("CIRCLED HANGUL HIEUH" #x326D) + ("CIRCLED HANGUL KIYEOK A" #x326E) + ("CIRCLED HANGUL NIEUN A" #x326F) + ("CIRCLED HANGUL TIKEUT A" #x3270) + ("CIRCLED HANGUL RIEUL A" #x3271) + ("CIRCLED HANGUL MIEUM A" #x3272) + ("CIRCLED HANGUL PIEUP A" #x3273) + ("CIRCLED HANGUL SIOS A" #x3274) + ("CIRCLED HANGUL IEUNG A" #x3275) + ("CIRCLED HANGUL CIEUC A" #x3276) + ("CIRCLED HANGUL CHIEUCH A" #x3277) + ("CIRCLED HANGUL KHIEUKH A" #x3278) + ("CIRCLED HANGUL THIEUTH A" #x3279) + ("CIRCLED HANGUL PHIEUPH A" #x327A) + ("CIRCLED HANGUL HIEUH A" #x327B) + ("KOREAN STANDARD SYMBOL" #x327F) + ("CIRCLED IDEOGRAPH ONE" #x3280) + ("CIRCLED IDEOGRAPH TWO" #x3281) + ("CIRCLED IDEOGRAPH THREE" #x3282) + ("CIRCLED IDEOGRAPH FOUR" #x3283) + ("CIRCLED IDEOGRAPH FIVE" #x3284) + ("CIRCLED IDEOGRAPH SIX" #x3285) + ("CIRCLED IDEOGRAPH SEVEN" #x3286) + ("CIRCLED IDEOGRAPH EIGHT" #x3287) + ("CIRCLED IDEOGRAPH NINE" #x3288) + ("CIRCLED IDEOGRAPH TEN" #x3289) + ("CIRCLED IDEOGRAPH MOON" #x328A) + ("CIRCLED IDEOGRAPH FIRE" #x328B) + ("CIRCLED IDEOGRAPH WATER" #x328C) + ("CIRCLED IDEOGRAPH WOOD" #x328D) + ("CIRCLED IDEOGRAPH METAL" #x328E) + ("CIRCLED IDEOGRAPH EARTH" #x328F) + ("CIRCLED IDEOGRAPH SUN" #x3290) + ("CIRCLED IDEOGRAPH STOCK" #x3291) + ("CIRCLED IDEOGRAPH HAVE" #x3292) + ("CIRCLED IDEOGRAPH SOCIETY" #x3293) + ("CIRCLED IDEOGRAPH NAME" #x3294) + ("CIRCLED IDEOGRAPH SPECIAL" #x3295) + ("CIRCLED IDEOGRAPH FINANCIAL" #x3296) + ("CIRCLED IDEOGRAPH CONGRATULATION" #x3297) + ("CIRCLED IDEOGRAPH LABOR" #x3298) + ("CIRCLED IDEOGRAPH SECRET" #x3299) + ("CIRCLED IDEOGRAPH MALE" #x329A) + ("CIRCLED IDEOGRAPH FEMALE" #x329B) + ("CIRCLED IDEOGRAPH SUITABLE" #x329C) + ("CIRCLED IDEOGRAPH EXCELLENT" #x329D) + ("CIRCLED IDEOGRAPH PRINT" #x329E) + ("CIRCLED IDEOGRAPH ATTENTION" #x329F) + ("CIRCLED IDEOGRAPH ITEM" #x32A0) + ("CIRCLED IDEOGRAPH REST" #x32A1) + ("CIRCLED IDEOGRAPH COPY" #x32A2) + ("CIRCLED IDEOGRAPH CORRECT" #x32A3) + ("CIRCLED IDEOGRAPH HIGH" #x32A4) + ("CIRCLED IDEOGRAPH CENTRE" #x32A5) + ("CIRCLED IDEOGRAPH LOW" #x32A6) + ("CIRCLED IDEOGRAPH LEFT" #x32A7) + ("CIRCLED IDEOGRAPH RIGHT" #x32A8) + ("CIRCLED IDEOGRAPH MEDICINE" #x32A9) + ("CIRCLED IDEOGRAPH RELIGION" #x32AA) + ("CIRCLED IDEOGRAPH STUDY" #x32AB) + ("CIRCLED IDEOGRAPH SUPERVISE" #x32AC) + ("CIRCLED IDEOGRAPH ENTERPRISE" #x32AD) + ("CIRCLED IDEOGRAPH RESOURCE" #x32AE) + ("CIRCLED IDEOGRAPH ALLIANCE" #x32AF) + ("CIRCLED IDEOGRAPH NIGHT" #x32B0) + ("CIRCLED NUMBER THIRTY SIX" #x32B1) + ("CIRCLED NUMBER THIRTY SEVEN" #x32B2) + ("CIRCLED NUMBER THIRTY EIGHT" #x32B3) + ("CIRCLED NUMBER THIRTY NINE" #x32B4) + ("CIRCLED NUMBER FORTY" #x32B5) + ("CIRCLED NUMBER FORTY ONE" #x32B6) + ("CIRCLED NUMBER FORTY TWO" #x32B7) + ("CIRCLED NUMBER FORTY THREE" #x32B8) + ("CIRCLED NUMBER FORTY FOUR" #x32B9) + ("CIRCLED NUMBER FORTY FIVE" #x32BA) + ("CIRCLED NUMBER FORTY SIX" #x32BB) + ("CIRCLED NUMBER FORTY SEVEN" #x32BC) + ("CIRCLED NUMBER FORTY EIGHT" #x32BD) + ("CIRCLED NUMBER FORTY NINE" #x32BE) + ("CIRCLED NUMBER FIFTY" #x32BF) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY" #x32C0) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY" #x32C1) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH" #x32C2) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL" #x32C3) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY" #x32C4) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE" #x32C5) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY" #x32C6) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST" #x32C7) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER" #x32C8) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER" #x32C9) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER" #x32CA) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER" #x32CB) + ("CIRCLED KATAKANA A" #x32D0) + ("CIRCLED KATAKANA I" #x32D1) + ("CIRCLED KATAKANA U" #x32D2) + ("CIRCLED KATAKANA E" #x32D3) + ("CIRCLED KATAKANA O" #x32D4) + ("CIRCLED KATAKANA KA" #x32D5) + ("CIRCLED KATAKANA KI" #x32D6) + ("CIRCLED KATAKANA KU" #x32D7) + ("CIRCLED KATAKANA KE" #x32D8) + ("CIRCLED KATAKANA KO" #x32D9) + ("CIRCLED KATAKANA SA" #x32DA) + ("CIRCLED KATAKANA SI" #x32DB) + ("CIRCLED KATAKANA SU" #x32DC) + ("CIRCLED KATAKANA SE" #x32DD) + ("CIRCLED KATAKANA SO" #x32DE) + ("CIRCLED KATAKANA TA" #x32DF) + ("CIRCLED KATAKANA TI" #x32E0) + ("CIRCLED KATAKANA TU" #x32E1) + ("CIRCLED KATAKANA TE" #x32E2) + ("CIRCLED KATAKANA TO" #x32E3) + ("CIRCLED KATAKANA NA" #x32E4) + ("CIRCLED KATAKANA NI" #x32E5) + ("CIRCLED KATAKANA NU" #x32E6) + ("CIRCLED KATAKANA NE" #x32E7) + ("CIRCLED KATAKANA NO" #x32E8) + ("CIRCLED KATAKANA HA" #x32E9) + ("CIRCLED KATAKANA HI" #x32EA) + ("CIRCLED KATAKANA HU" #x32EB) + ("CIRCLED KATAKANA HE" #x32EC) + ("CIRCLED KATAKANA HO" #x32ED) + ("CIRCLED KATAKANA MA" #x32EE) + ("CIRCLED KATAKANA MI" #x32EF) + ("CIRCLED KATAKANA MU" #x32F0) + ("CIRCLED KATAKANA ME" #x32F1) + ("CIRCLED KATAKANA MO" #x32F2) + ("CIRCLED KATAKANA YA" #x32F3) + ("CIRCLED KATAKANA YU" #x32F4) + ("CIRCLED KATAKANA YO" #x32F5) + ("CIRCLED KATAKANA RA" #x32F6) + ("CIRCLED KATAKANA RI" #x32F7) + ("CIRCLED KATAKANA RU" #x32F8) + ("CIRCLED KATAKANA RE" #x32F9) + ("CIRCLED KATAKANA RO" #x32FA) + ("CIRCLED KATAKANA WA" #x32FB) + ("CIRCLED KATAKANA WI" #x32FC) + ("CIRCLED KATAKANA WE" #x32FD) + ("CIRCLED KATAKANA WO" #x32FE) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/03300-033FF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,251 @@ +(nxml-define-char-name-set 'cjk-compatibility + '(("SQUARE APAATO" #x3300) + ("SQUARE ARUHUA" #x3301) + ("SQUARE ANPEA" #x3302) + ("SQUARE AARU" #x3303) + ("SQUARE ININGU" #x3304) + ("SQUARE INTI" #x3305) + ("SQUARE UON" #x3306) + ("SQUARE ESUKUUDO" #x3307) + ("SQUARE EEKAA" #x3308) + ("SQUARE ONSU" #x3309) + ("SQUARE OOMU" #x330A) + ("SQUARE KAIRI" #x330B) + ("SQUARE KARATTO" #x330C) + ("SQUARE KARORII" #x330D) + ("SQUARE GARON" #x330E) + ("SQUARE GANMA" #x330F) + ("SQUARE GIGA" #x3310) + ("SQUARE GINII" #x3311) + ("SQUARE KYURII" #x3312) + ("SQUARE GIRUDAA" #x3313) + ("SQUARE KIRO" #x3314) + ("SQUARE KIROGURAMU" #x3315) + ("SQUARE KIROMEETORU" #x3316) + ("SQUARE KIROWATTO" #x3317) + ("SQUARE GURAMU" #x3318) + ("SQUARE GURAMUTON" #x3319) + ("SQUARE KURUZEIRO" #x331A) + ("SQUARE KUROONE" #x331B) + ("SQUARE KEESU" #x331C) + ("SQUARE KORUNA" #x331D) + ("SQUARE KOOPO" #x331E) + ("SQUARE SAIKURU" #x331F) + ("SQUARE SANTIIMU" #x3320) + ("SQUARE SIRINGU" #x3321) + ("SQUARE SENTI" #x3322) + ("SQUARE SENTO" #x3323) + ("SQUARE DAASU" #x3324) + ("SQUARE DESI" #x3325) + ("SQUARE DORU" #x3326) + ("SQUARE TON" #x3327) + ("SQUARE NANO" #x3328) + ("SQUARE NOTTO" #x3329) + ("SQUARE HAITU" #x332A) + ("SQUARE PAASENTO" #x332B) + ("SQUARE PAATU" #x332C) + ("SQUARE BAARERU" #x332D) + ("SQUARE PIASUTORU" #x332E) + ("SQUARE PIKURU" #x332F) + ("SQUARE PIKO" #x3330) + ("SQUARE BIRU" #x3331) + ("SQUARE HUARADDO" #x3332) + ("SQUARE HUIITO" #x3333) + ("SQUARE BUSSYERU" #x3334) + ("SQUARE HURAN" #x3335) + ("SQUARE HEKUTAARU" #x3336) + ("SQUARE PESO" #x3337) + ("SQUARE PENIHI" #x3338) + ("SQUARE HERUTU" #x3339) + ("SQUARE PENSU" #x333A) + ("SQUARE PEEZI" #x333B) + ("SQUARE BEETA" #x333C) + ("SQUARE POINTO" #x333D) + ("SQUARE BORUTO" #x333E) + ("SQUARE HON" #x333F) + ("SQUARE PONDO" #x3340) + ("SQUARE HOORU" #x3341) + ("SQUARE HOON" #x3342) + ("SQUARE MAIKURO" #x3343) + ("SQUARE MAIRU" #x3344) + ("SQUARE MAHHA" #x3345) + ("SQUARE MARUKU" #x3346) + ("SQUARE MANSYON" #x3347) + ("SQUARE MIKURON" #x3348) + ("SQUARE MIRI" #x3349) + ("SQUARE MIRIBAARU" #x334A) + ("SQUARE MEGA" #x334B) + ("SQUARE MEGATON" #x334C) + ("SQUARE MEETORU" #x334D) + ("SQUARE YAADO" #x334E) + ("SQUARE YAARU" #x334F) + ("SQUARE YUAN" #x3350) + ("SQUARE RITTORU" #x3351) + ("SQUARE RIRA" #x3352) + ("SQUARE RUPII" #x3353) + ("SQUARE RUUBURU" #x3354) + ("SQUARE REMU" #x3355) + ("SQUARE RENTOGEN" #x3356) + ("SQUARE WATTO" #x3357) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO" #x3358) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE" #x3359) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO" #x335A) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE" #x335B) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR" #x335C) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE" #x335D) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX" #x335E) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN" #x335F) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT" #x3360) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE" #x3361) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN" #x3362) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN" #x3363) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE" #x3364) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN" #x3365) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN" #x3366) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN" #x3367) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN" #x3368) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN" #x3369) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN" #x336A) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN" #x336B) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY" #x336C) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE" #x336D) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO" #x336E) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE" #x336F) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR" #x3370) + ("SQUARE HPA" #x3371) + ("SQUARE DA" #x3372) + ("SQUARE AU" #x3373) + ("SQUARE BAR" #x3374) + ("SQUARE OV" #x3375) + ("SQUARE PC" #x3376) + ("SQUARE ERA NAME HEISEI" #x337B) + ("SQUARE ERA NAME SYOUWA" #x337C) + ("SQUARE ERA NAME TAISYOU" #x337D) + ("SQUARE ERA NAME MEIZI" #x337E) + ("SQUARE CORPORATION" #x337F) + ("SQUARE PA AMPS" #x3380) + ("SQUARE NA" #x3381) + ("SQUARE MU A" #x3382) + ("SQUARE MA" #x3383) + ("SQUARE KA" #x3384) + ("SQUARE KB" #x3385) + ("SQUARE MB" #x3386) + ("SQUARE GB" #x3387) + ("SQUARE CAL" #x3388) + ("SQUARE KCAL" #x3389) + ("SQUARE PF" #x338A) + ("SQUARE NF" #x338B) + ("SQUARE MU F" #x338C) + ("SQUARE MU G" #x338D) + ("SQUARE MG" #x338E) + ("SQUARE KG" #x338F) + ("SQUARE HZ" #x3390) + ("SQUARE KHZ" #x3391) + ("SQUARE MHZ" #x3392) + ("SQUARE GHZ" #x3393) + ("SQUARE THZ" #x3394) + ("SQUARE MU L" #x3395) + ("SQUARE ML" #x3396) + ("SQUARE DL" #x3397) + ("SQUARE KL" #x3398) + ("SQUARE FM" #x3399) + ("SQUARE NM" #x339A) + ("SQUARE MU M" #x339B) + ("SQUARE MM" #x339C) + ("SQUARE CM" #x339D) + ("SQUARE KM" #x339E) + ("SQUARE MM SQUARED" #x339F) + ("SQUARE CM SQUARED" #x33A0) + ("SQUARE M SQUARED" #x33A1) + ("SQUARE KM SQUARED" #x33A2) + ("SQUARE MM CUBED" #x33A3) + ("SQUARE CM CUBED" #x33A4) + ("SQUARE M CUBED" #x33A5) + ("SQUARE KM CUBED" #x33A6) + ("SQUARE M OVER S" #x33A7) + ("SQUARE M OVER S SQUARED" #x33A8) + ("SQUARE PA" #x33A9) + ("SQUARE KPA" #x33AA) + ("SQUARE MPA" #x33AB) + ("SQUARE GPA" #x33AC) + ("SQUARE RAD" #x33AD) + ("SQUARE RAD OVER S" #x33AE) + ("SQUARE RAD OVER S SQUARED" #x33AF) + ("SQUARE PS" #x33B0) + ("SQUARE NS" #x33B1) + ("SQUARE MU S" #x33B2) + ("SQUARE MS" #x33B3) + ("SQUARE PV" #x33B4) + ("SQUARE NV" #x33B5) + ("SQUARE MU V" #x33B6) + ("SQUARE MV" #x33B7) + ("SQUARE KV" #x33B8) + ("SQUARE MV MEGA" #x33B9) + ("SQUARE PW" #x33BA) + ("SQUARE NW" #x33BB) + ("SQUARE MU W" #x33BC) + ("SQUARE MW" #x33BD) + ("SQUARE KW" #x33BE) + ("SQUARE MW MEGA" #x33BF) + ("SQUARE K OHM" #x33C0) + ("SQUARE M OHM" #x33C1) + ("SQUARE AM" #x33C2) + ("SQUARE BQ" #x33C3) + ("SQUARE CC" #x33C4) + ("SQUARE CD" #x33C5) + ("SQUARE C OVER KG" #x33C6) + ("SQUARE CO" #x33C7) + ("SQUARE DB" #x33C8) + ("SQUARE GY" #x33C9) + ("SQUARE HA" #x33CA) + ("SQUARE HP" #x33CB) + ("SQUARE IN" #x33CC) + ("SQUARE KK" #x33CD) + ("SQUARE KM CAPITAL" #x33CE) + ("SQUARE KT" #x33CF) + ("SQUARE LM" #x33D0) + ("SQUARE LN" #x33D1) + ("SQUARE LOG" #x33D2) + ("SQUARE LX" #x33D3) + ("SQUARE MB SMALL" #x33D4) + ("SQUARE MIL" #x33D5) + ("SQUARE MOL" #x33D6) + ("SQUARE PH" #x33D7) + ("SQUARE PM" #x33D8) + ("SQUARE PPM" #x33D9) + ("SQUARE PR" #x33DA) + ("SQUARE SR" #x33DB) + ("SQUARE SV" #x33DC) + ("SQUARE WB" #x33DD) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE" #x33E0) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO" #x33E1) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE" #x33E2) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR" #x33E3) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE" #x33E4) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX" #x33E5) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN" #x33E6) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT" #x33E7) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE" #x33E8) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN" #x33E9) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN" #x33EA) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE" #x33EB) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN" #x33EC) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN" #x33ED) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN" #x33EE) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN" #x33EF) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN" #x33F0) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN" #x33F1) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN" #x33F2) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY" #x33F3) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE" #x33F4) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO" #x33F5) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE" #x33F6) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR" #x33F7) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE" #x33F8) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX" #x33F9) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN" #x33FA) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT" #x33FB) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE" #x33FC) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY" #x33FD) + ("IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE" #x33FE) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/03400-04DBF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,2 @@ +(nxml-define-char-name-set 'cjk-unified-ideographs-extension-a + '())
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/0A000-0A48F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,1167 @@ +(nxml-define-char-name-set 'yi-syllables + '(("YI SYLLABLE IT" #xA000) + ("YI SYLLABLE IX" #xA001) + ("YI SYLLABLE I" #xA002) + ("YI SYLLABLE IP" #xA003) + ("YI SYLLABLE IET" #xA004) + ("YI SYLLABLE IEX" #xA005) + ("YI SYLLABLE IE" #xA006) + ("YI SYLLABLE IEP" #xA007) + ("YI SYLLABLE AT" #xA008) + ("YI SYLLABLE AX" #xA009) + ("YI SYLLABLE A" #xA00A) + ("YI SYLLABLE AP" #xA00B) + ("YI SYLLABLE UOX" #xA00C) + ("YI SYLLABLE UO" #xA00D) + ("YI SYLLABLE UOP" #xA00E) + ("YI SYLLABLE OT" #xA00F) + ("YI SYLLABLE OX" #xA010) + ("YI SYLLABLE O" #xA011) + ("YI SYLLABLE OP" #xA012) + ("YI SYLLABLE EX" #xA013) + ("YI SYLLABLE E" #xA014) + ("YI SYLLABLE WU" #xA015) + ("YI SYLLABLE BIT" #xA016) + ("YI SYLLABLE BIX" #xA017) + ("YI SYLLABLE BI" #xA018) + ("YI SYLLABLE BIP" #xA019) + ("YI SYLLABLE BIET" #xA01A) + ("YI SYLLABLE BIEX" #xA01B) + ("YI SYLLABLE BIE" #xA01C) + ("YI SYLLABLE BIEP" #xA01D) + ("YI SYLLABLE BAT" #xA01E) + ("YI SYLLABLE BAX" #xA01F) + ("YI SYLLABLE BA" #xA020) + ("YI SYLLABLE BAP" #xA021) + ("YI SYLLABLE BUOX" #xA022) + ("YI SYLLABLE BUO" #xA023) + ("YI SYLLABLE BUOP" #xA024) + ("YI SYLLABLE BOT" #xA025) + ("YI SYLLABLE BOX" #xA026) + ("YI SYLLABLE BO" #xA027) + ("YI SYLLABLE BOP" #xA028) + ("YI SYLLABLE BEX" #xA029) + ("YI SYLLABLE BE" #xA02A) + ("YI SYLLABLE BEP" #xA02B) + ("YI SYLLABLE BUT" #xA02C) + ("YI SYLLABLE BUX" #xA02D) + ("YI SYLLABLE BU" #xA02E) + ("YI SYLLABLE BUP" #xA02F) + ("YI SYLLABLE BURX" #xA030) + ("YI SYLLABLE BUR" #xA031) + ("YI SYLLABLE BYT" #xA032) + ("YI SYLLABLE BYX" #xA033) + ("YI SYLLABLE BY" #xA034) + ("YI SYLLABLE BYP" #xA035) + ("YI SYLLABLE BYRX" #xA036) + ("YI SYLLABLE BYR" #xA037) + ("YI SYLLABLE PIT" #xA038) + ("YI SYLLABLE PIX" #xA039) + ("YI SYLLABLE PI" #xA03A) + ("YI SYLLABLE PIP" #xA03B) + ("YI SYLLABLE PIEX" #xA03C) + ("YI SYLLABLE PIE" #xA03D) + ("YI SYLLABLE PIEP" #xA03E) + ("YI SYLLABLE PAT" #xA03F) + ("YI SYLLABLE PAX" #xA040) + ("YI SYLLABLE PA" #xA041) + ("YI SYLLABLE PAP" #xA042) + ("YI SYLLABLE PUOX" #xA043) + ("YI SYLLABLE PUO" #xA044) + ("YI SYLLABLE PUOP" #xA045) + ("YI SYLLABLE POT" #xA046) + ("YI SYLLABLE POX" #xA047) + ("YI SYLLABLE PO" #xA048) + ("YI SYLLABLE POP" #xA049) + ("YI SYLLABLE PUT" #xA04A) + ("YI SYLLABLE PUX" #xA04B) + ("YI SYLLABLE PU" #xA04C) + ("YI SYLLABLE PUP" #xA04D) + ("YI SYLLABLE PURX" #xA04E) + ("YI SYLLABLE PUR" #xA04F) + ("YI SYLLABLE PYT" #xA050) + ("YI SYLLABLE PYX" #xA051) + ("YI SYLLABLE PY" #xA052) + ("YI SYLLABLE PYP" #xA053) + ("YI SYLLABLE PYRX" #xA054) + ("YI SYLLABLE PYR" #xA055) + ("YI SYLLABLE BBIT" #xA056) + ("YI SYLLABLE BBIX" #xA057) + ("YI SYLLABLE BBI" #xA058) + ("YI SYLLABLE BBIP" #xA059) + ("YI SYLLABLE BBIET" #xA05A) + ("YI SYLLABLE BBIEX" #xA05B) + ("YI SYLLABLE BBIE" #xA05C) + ("YI SYLLABLE BBIEP" #xA05D) + ("YI SYLLABLE BBAT" #xA05E) + ("YI SYLLABLE BBAX" #xA05F) + ("YI SYLLABLE BBA" #xA060) + ("YI SYLLABLE BBAP" #xA061) + ("YI SYLLABLE BBUOX" #xA062) + ("YI SYLLABLE BBUO" #xA063) + ("YI SYLLABLE BBUOP" #xA064) + ("YI SYLLABLE BBOT" #xA065) + ("YI SYLLABLE BBOX" #xA066) + ("YI SYLLABLE BBO" #xA067) + ("YI SYLLABLE BBOP" #xA068) + ("YI SYLLABLE BBEX" #xA069) + ("YI SYLLABLE BBE" #xA06A) + ("YI SYLLABLE BBEP" #xA06B) + ("YI SYLLABLE BBUT" #xA06C) + ("YI SYLLABLE BBUX" #xA06D) + ("YI SYLLABLE BBU" #xA06E) + ("YI SYLLABLE BBUP" #xA06F) + ("YI SYLLABLE BBURX" #xA070) + ("YI SYLLABLE BBUR" #xA071) + ("YI SYLLABLE BBYT" #xA072) + ("YI SYLLABLE BBYX" #xA073) + ("YI SYLLABLE BBY" #xA074) + ("YI SYLLABLE BBYP" #xA075) + ("YI SYLLABLE NBIT" #xA076) + ("YI SYLLABLE NBIX" #xA077) + ("YI SYLLABLE NBI" #xA078) + ("YI SYLLABLE NBIP" #xA079) + ("YI SYLLABLE NBIEX" #xA07A) + ("YI SYLLABLE NBIE" #xA07B) + ("YI SYLLABLE NBIEP" #xA07C) + ("YI SYLLABLE NBAT" #xA07D) + ("YI SYLLABLE NBAX" #xA07E) + ("YI SYLLABLE NBA" #xA07F) + ("YI SYLLABLE NBAP" #xA080) + ("YI SYLLABLE NBOT" #xA081) + ("YI SYLLABLE NBOX" #xA082) + ("YI SYLLABLE NBO" #xA083) + ("YI SYLLABLE NBOP" #xA084) + ("YI SYLLABLE NBUT" #xA085) + ("YI SYLLABLE NBUX" #xA086) + ("YI SYLLABLE NBU" #xA087) + ("YI SYLLABLE NBUP" #xA088) + ("YI SYLLABLE NBURX" #xA089) + ("YI SYLLABLE NBUR" #xA08A) + ("YI SYLLABLE NBYT" #xA08B) + ("YI SYLLABLE NBYX" #xA08C) + ("YI SYLLABLE NBY" #xA08D) + ("YI SYLLABLE NBYP" #xA08E) + ("YI SYLLABLE NBYRX" #xA08F) + ("YI SYLLABLE NBYR" #xA090) + ("YI SYLLABLE HMIT" #xA091) + ("YI SYLLABLE HMIX" #xA092) + ("YI SYLLABLE HMI" #xA093) + ("YI SYLLABLE HMIP" #xA094) + ("YI SYLLABLE HMIEX" #xA095) + ("YI SYLLABLE HMIE" #xA096) + ("YI SYLLABLE HMIEP" #xA097) + ("YI SYLLABLE HMAT" #xA098) + ("YI SYLLABLE HMAX" #xA099) + ("YI SYLLABLE HMA" #xA09A) + ("YI SYLLABLE HMAP" #xA09B) + ("YI SYLLABLE HMUOX" #xA09C) + ("YI SYLLABLE HMUO" #xA09D) + ("YI SYLLABLE HMUOP" #xA09E) + ("YI SYLLABLE HMOT" #xA09F) + ("YI SYLLABLE HMOX" #xA0A0) + ("YI SYLLABLE HMO" #xA0A1) + ("YI SYLLABLE HMOP" #xA0A2) + ("YI SYLLABLE HMUT" #xA0A3) + ("YI SYLLABLE HMUX" #xA0A4) + ("YI SYLLABLE HMU" #xA0A5) + ("YI SYLLABLE HMUP" #xA0A6) + ("YI SYLLABLE HMURX" #xA0A7) + ("YI SYLLABLE HMUR" #xA0A8) + ("YI SYLLABLE HMYX" #xA0A9) + ("YI SYLLABLE HMY" #xA0AA) + ("YI SYLLABLE HMYP" #xA0AB) + ("YI SYLLABLE HMYRX" #xA0AC) + ("YI SYLLABLE HMYR" #xA0AD) + ("YI SYLLABLE MIT" #xA0AE) + ("YI SYLLABLE MIX" #xA0AF) + ("YI SYLLABLE MI" #xA0B0) + ("YI SYLLABLE MIP" #xA0B1) + ("YI SYLLABLE MIEX" #xA0B2) + ("YI SYLLABLE MIE" #xA0B3) + ("YI SYLLABLE MIEP" #xA0B4) + ("YI SYLLABLE MAT" #xA0B5) + ("YI SYLLABLE MAX" #xA0B6) + ("YI SYLLABLE MA" #xA0B7) + ("YI SYLLABLE MAP" #xA0B8) + ("YI SYLLABLE MUOT" #xA0B9) + ("YI SYLLABLE MUOX" #xA0BA) + ("YI SYLLABLE MUO" #xA0BB) + ("YI SYLLABLE MUOP" #xA0BC) + ("YI SYLLABLE MOT" #xA0BD) + ("YI SYLLABLE MOX" #xA0BE) + ("YI SYLLABLE MO" #xA0BF) + ("YI SYLLABLE MOP" #xA0C0) + ("YI SYLLABLE MEX" #xA0C1) + ("YI SYLLABLE ME" #xA0C2) + ("YI SYLLABLE MUT" #xA0C3) + ("YI SYLLABLE MUX" #xA0C4) + ("YI SYLLABLE MU" #xA0C5) + ("YI SYLLABLE MUP" #xA0C6) + ("YI SYLLABLE MURX" #xA0C7) + ("YI SYLLABLE MUR" #xA0C8) + ("YI SYLLABLE MYT" #xA0C9) + ("YI SYLLABLE MYX" #xA0CA) + ("YI SYLLABLE MY" #xA0CB) + ("YI SYLLABLE MYP" #xA0CC) + ("YI SYLLABLE FIT" #xA0CD) + ("YI SYLLABLE FIX" #xA0CE) + ("YI SYLLABLE FI" #xA0CF) + ("YI SYLLABLE FIP" #xA0D0) + ("YI SYLLABLE FAT" #xA0D1) + ("YI SYLLABLE FAX" #xA0D2) + ("YI SYLLABLE FA" #xA0D3) + ("YI SYLLABLE FAP" #xA0D4) + ("YI SYLLABLE FOX" #xA0D5) + ("YI SYLLABLE FO" #xA0D6) + ("YI SYLLABLE FOP" #xA0D7) + ("YI SYLLABLE FUT" #xA0D8) + ("YI SYLLABLE FUX" #xA0D9) + ("YI SYLLABLE FU" #xA0DA) + ("YI SYLLABLE FUP" #xA0DB) + ("YI SYLLABLE FURX" #xA0DC) + ("YI SYLLABLE FUR" #xA0DD) + ("YI SYLLABLE FYT" #xA0DE) + ("YI SYLLABLE FYX" #xA0DF) + ("YI SYLLABLE FY" #xA0E0) + ("YI SYLLABLE FYP" #xA0E1) + ("YI SYLLABLE VIT" #xA0E2) + ("YI SYLLABLE VIX" #xA0E3) + ("YI SYLLABLE VI" #xA0E4) + ("YI SYLLABLE VIP" #xA0E5) + ("YI SYLLABLE VIET" #xA0E6) + ("YI SYLLABLE VIEX" #xA0E7) + ("YI SYLLABLE VIE" #xA0E8) + ("YI SYLLABLE VIEP" #xA0E9) + ("YI SYLLABLE VAT" #xA0EA) + ("YI SYLLABLE VAX" #xA0EB) + ("YI SYLLABLE VA" #xA0EC) + ("YI SYLLABLE VAP" #xA0ED) + ("YI SYLLABLE VOT" #xA0EE) + ("YI SYLLABLE VOX" #xA0EF) + ("YI SYLLABLE VO" #xA0F0) + ("YI SYLLABLE VOP" #xA0F1) + ("YI SYLLABLE VEX" #xA0F2) + ("YI SYLLABLE VEP" #xA0F3) + ("YI SYLLABLE VUT" #xA0F4) + ("YI SYLLABLE VUX" #xA0F5) + ("YI SYLLABLE VU" #xA0F6) + ("YI SYLLABLE VUP" #xA0F7) + ("YI SYLLABLE VURX" #xA0F8) + ("YI SYLLABLE VUR" #xA0F9) + ("YI SYLLABLE VYT" #xA0FA) + ("YI SYLLABLE VYX" #xA0FB) + ("YI SYLLABLE VY" #xA0FC) + ("YI SYLLABLE VYP" #xA0FD) + ("YI SYLLABLE VYRX" #xA0FE) + ("YI SYLLABLE VYR" #xA0FF) + ("YI SYLLABLE DIT" #xA100) + ("YI SYLLABLE DIX" #xA101) + ("YI SYLLABLE DI" #xA102) + ("YI SYLLABLE DIP" #xA103) + ("YI SYLLABLE DIEX" #xA104) + ("YI SYLLABLE DIE" #xA105) + ("YI SYLLABLE DIEP" #xA106) + ("YI SYLLABLE DAT" #xA107) + ("YI SYLLABLE DAX" #xA108) + ("YI SYLLABLE DA" #xA109) + ("YI SYLLABLE DAP" #xA10A) + ("YI SYLLABLE DUOX" #xA10B) + ("YI SYLLABLE DUO" #xA10C) + ("YI SYLLABLE DOT" #xA10D) + ("YI SYLLABLE DOX" #xA10E) + ("YI SYLLABLE DO" #xA10F) + ("YI SYLLABLE DOP" #xA110) + ("YI SYLLABLE DEX" #xA111) + ("YI SYLLABLE DE" #xA112) + ("YI SYLLABLE DEP" #xA113) + ("YI SYLLABLE DUT" #xA114) + ("YI SYLLABLE DUX" #xA115) + ("YI SYLLABLE DU" #xA116) + ("YI SYLLABLE DUP" #xA117) + ("YI SYLLABLE DURX" #xA118) + ("YI SYLLABLE DUR" #xA119) + ("YI SYLLABLE TIT" #xA11A) + ("YI SYLLABLE TIX" #xA11B) + ("YI SYLLABLE TI" #xA11C) + ("YI SYLLABLE TIP" #xA11D) + ("YI SYLLABLE TIEX" #xA11E) + ("YI SYLLABLE TIE" #xA11F) + ("YI SYLLABLE TIEP" #xA120) + ("YI SYLLABLE TAT" #xA121) + ("YI SYLLABLE TAX" #xA122) + ("YI SYLLABLE TA" #xA123) + ("YI SYLLABLE TAP" #xA124) + ("YI SYLLABLE TUOT" #xA125) + ("YI SYLLABLE TUOX" #xA126) + ("YI SYLLABLE TUO" #xA127) + ("YI SYLLABLE TUOP" #xA128) + ("YI SYLLABLE TOT" #xA129) + ("YI SYLLABLE TOX" #xA12A) + ("YI SYLLABLE TO" #xA12B) + ("YI SYLLABLE TOP" #xA12C) + ("YI SYLLABLE TEX" #xA12D) + ("YI SYLLABLE TE" #xA12E) + ("YI SYLLABLE TEP" #xA12F) + ("YI SYLLABLE TUT" #xA130) + ("YI SYLLABLE TUX" #xA131) + ("YI SYLLABLE TU" #xA132) + ("YI SYLLABLE TUP" #xA133) + ("YI SYLLABLE TURX" #xA134) + ("YI SYLLABLE TUR" #xA135) + ("YI SYLLABLE DDIT" #xA136) + ("YI SYLLABLE DDIX" #xA137) + ("YI SYLLABLE DDI" #xA138) + ("YI SYLLABLE DDIP" #xA139) + ("YI SYLLABLE DDIEX" #xA13A) + ("YI SYLLABLE DDIE" #xA13B) + ("YI SYLLABLE DDIEP" #xA13C) + ("YI SYLLABLE DDAT" #xA13D) + ("YI SYLLABLE DDAX" #xA13E) + ("YI SYLLABLE DDA" #xA13F) + ("YI SYLLABLE DDAP" #xA140) + ("YI SYLLABLE DDUOX" #xA141) + ("YI SYLLABLE DDUO" #xA142) + ("YI SYLLABLE DDUOP" #xA143) + ("YI SYLLABLE DDOT" #xA144) + ("YI SYLLABLE DDOX" #xA145) + ("YI SYLLABLE DDO" #xA146) + ("YI SYLLABLE DDOP" #xA147) + ("YI SYLLABLE DDEX" #xA148) + ("YI SYLLABLE DDE" #xA149) + ("YI SYLLABLE DDEP" #xA14A) + ("YI SYLLABLE DDUT" #xA14B) + ("YI SYLLABLE DDUX" #xA14C) + ("YI SYLLABLE DDU" #xA14D) + ("YI SYLLABLE DDUP" #xA14E) + ("YI SYLLABLE DDURX" #xA14F) + ("YI SYLLABLE DDUR" #xA150) + ("YI SYLLABLE NDIT" #xA151) + ("YI SYLLABLE NDIX" #xA152) + ("YI SYLLABLE NDI" #xA153) + ("YI SYLLABLE NDIP" #xA154) + ("YI SYLLABLE NDIEX" #xA155) + ("YI SYLLABLE NDIE" #xA156) + ("YI SYLLABLE NDAT" #xA157) + ("YI SYLLABLE NDAX" #xA158) + ("YI SYLLABLE NDA" #xA159) + ("YI SYLLABLE NDAP" #xA15A) + ("YI SYLLABLE NDOT" #xA15B) + ("YI SYLLABLE NDOX" #xA15C) + ("YI SYLLABLE NDO" #xA15D) + ("YI SYLLABLE NDOP" #xA15E) + ("YI SYLLABLE NDEX" #xA15F) + ("YI SYLLABLE NDE" #xA160) + ("YI SYLLABLE NDEP" #xA161) + ("YI SYLLABLE NDUT" #xA162) + ("YI SYLLABLE NDUX" #xA163) + ("YI SYLLABLE NDU" #xA164) + ("YI SYLLABLE NDUP" #xA165) + ("YI SYLLABLE NDURX" #xA166) + ("YI SYLLABLE NDUR" #xA167) + ("YI SYLLABLE HNIT" #xA168) + ("YI SYLLABLE HNIX" #xA169) + ("YI SYLLABLE HNI" #xA16A) + ("YI SYLLABLE HNIP" #xA16B) + ("YI SYLLABLE HNIET" #xA16C) + ("YI SYLLABLE HNIEX" #xA16D) + ("YI SYLLABLE HNIE" #xA16E) + ("YI SYLLABLE HNIEP" #xA16F) + ("YI SYLLABLE HNAT" #xA170) + ("YI SYLLABLE HNAX" #xA171) + ("YI SYLLABLE HNA" #xA172) + ("YI SYLLABLE HNAP" #xA173) + ("YI SYLLABLE HNUOX" #xA174) + ("YI SYLLABLE HNUO" #xA175) + ("YI SYLLABLE HNOT" #xA176) + ("YI SYLLABLE HNOX" #xA177) + ("YI SYLLABLE HNOP" #xA178) + ("YI SYLLABLE HNEX" #xA179) + ("YI SYLLABLE HNE" #xA17A) + ("YI SYLLABLE HNEP" #xA17B) + ("YI SYLLABLE HNUT" #xA17C) + ("YI SYLLABLE NIT" #xA17D) + ("YI SYLLABLE NIX" #xA17E) + ("YI SYLLABLE NI" #xA17F) + ("YI SYLLABLE NIP" #xA180) + ("YI SYLLABLE NIEX" #xA181) + ("YI SYLLABLE NIE" #xA182) + ("YI SYLLABLE NIEP" #xA183) + ("YI SYLLABLE NAX" #xA184) + ("YI SYLLABLE NA" #xA185) + ("YI SYLLABLE NAP" #xA186) + ("YI SYLLABLE NUOX" #xA187) + ("YI SYLLABLE NUO" #xA188) + ("YI SYLLABLE NUOP" #xA189) + ("YI SYLLABLE NOT" #xA18A) + ("YI SYLLABLE NOX" #xA18B) + ("YI SYLLABLE NO" #xA18C) + ("YI SYLLABLE NOP" #xA18D) + ("YI SYLLABLE NEX" #xA18E) + ("YI SYLLABLE NE" #xA18F) + ("YI SYLLABLE NEP" #xA190) + ("YI SYLLABLE NUT" #xA191) + ("YI SYLLABLE NUX" #xA192) + ("YI SYLLABLE NU" #xA193) + ("YI SYLLABLE NUP" #xA194) + ("YI SYLLABLE NURX" #xA195) + ("YI SYLLABLE NUR" #xA196) + ("YI SYLLABLE HLIT" #xA197) + ("YI SYLLABLE HLIX" #xA198) + ("YI SYLLABLE HLI" #xA199) + ("YI SYLLABLE HLIP" #xA19A) + ("YI SYLLABLE HLIEX" #xA19B) + ("YI SYLLABLE HLIE" #xA19C) + ("YI SYLLABLE HLIEP" #xA19D) + ("YI SYLLABLE HLAT" #xA19E) + ("YI SYLLABLE HLAX" #xA19F) + ("YI SYLLABLE HLA" #xA1A0) + ("YI SYLLABLE HLAP" #xA1A1) + ("YI SYLLABLE HLUOX" #xA1A2) + ("YI SYLLABLE HLUO" #xA1A3) + ("YI SYLLABLE HLUOP" #xA1A4) + ("YI SYLLABLE HLOX" #xA1A5) + ("YI SYLLABLE HLO" #xA1A6) + ("YI SYLLABLE HLOP" #xA1A7) + ("YI SYLLABLE HLEX" #xA1A8) + ("YI SYLLABLE HLE" #xA1A9) + ("YI SYLLABLE HLEP" #xA1AA) + ("YI SYLLABLE HLUT" #xA1AB) + ("YI SYLLABLE HLUX" #xA1AC) + ("YI SYLLABLE HLU" #xA1AD) + ("YI SYLLABLE HLUP" #xA1AE) + ("YI SYLLABLE HLURX" #xA1AF) + ("YI SYLLABLE HLUR" #xA1B0) + ("YI SYLLABLE HLYT" #xA1B1) + ("YI SYLLABLE HLYX" #xA1B2) + ("YI SYLLABLE HLY" #xA1B3) + ("YI SYLLABLE HLYP" #xA1B4) + ("YI SYLLABLE HLYRX" #xA1B5) + ("YI SYLLABLE HLYR" #xA1B6) + ("YI SYLLABLE LIT" #xA1B7) + ("YI SYLLABLE LIX" #xA1B8) + ("YI SYLLABLE LI" #xA1B9) + ("YI SYLLABLE LIP" #xA1BA) + ("YI SYLLABLE LIET" #xA1BB) + ("YI SYLLABLE LIEX" #xA1BC) + ("YI SYLLABLE LIE" #xA1BD) + ("YI SYLLABLE LIEP" #xA1BE) + ("YI SYLLABLE LAT" #xA1BF) + ("YI SYLLABLE LAX" #xA1C0) + ("YI SYLLABLE LA" #xA1C1) + ("YI SYLLABLE LAP" #xA1C2) + ("YI SYLLABLE LUOT" #xA1C3) + ("YI SYLLABLE LUOX" #xA1C4) + ("YI SYLLABLE LUO" #xA1C5) + ("YI SYLLABLE LUOP" #xA1C6) + ("YI SYLLABLE LOT" #xA1C7) + ("YI SYLLABLE LOX" #xA1C8) + ("YI SYLLABLE LO" #xA1C9) + ("YI SYLLABLE LOP" #xA1CA) + ("YI SYLLABLE LEX" #xA1CB) + ("YI SYLLABLE LE" #xA1CC) + ("YI SYLLABLE LEP" #xA1CD) + ("YI SYLLABLE LUT" #xA1CE) + ("YI SYLLABLE LUX" #xA1CF) + ("YI SYLLABLE LU" #xA1D0) + ("YI SYLLABLE LUP" #xA1D1) + ("YI SYLLABLE LURX" #xA1D2) + ("YI SYLLABLE LUR" #xA1D3) + ("YI SYLLABLE LYT" #xA1D4) + ("YI SYLLABLE LYX" #xA1D5) + ("YI SYLLABLE LY" #xA1D6) + ("YI SYLLABLE LYP" #xA1D7) + ("YI SYLLABLE LYRX" #xA1D8) + ("YI SYLLABLE LYR" #xA1D9) + ("YI SYLLABLE GIT" #xA1DA) + ("YI SYLLABLE GIX" #xA1DB) + ("YI SYLLABLE GI" #xA1DC) + ("YI SYLLABLE GIP" #xA1DD) + ("YI SYLLABLE GIET" #xA1DE) + ("YI SYLLABLE GIEX" #xA1DF) + ("YI SYLLABLE GIE" #xA1E0) + ("YI SYLLABLE GIEP" #xA1E1) + ("YI SYLLABLE GAT" #xA1E2) + ("YI SYLLABLE GAX" #xA1E3) + ("YI SYLLABLE GA" #xA1E4) + ("YI SYLLABLE GAP" #xA1E5) + ("YI SYLLABLE GUOT" #xA1E6) + ("YI SYLLABLE GUOX" #xA1E7) + ("YI SYLLABLE GUO" #xA1E8) + ("YI SYLLABLE GUOP" #xA1E9) + ("YI SYLLABLE GOT" #xA1EA) + ("YI SYLLABLE GOX" #xA1EB) + ("YI SYLLABLE GO" #xA1EC) + ("YI SYLLABLE GOP" #xA1ED) + ("YI SYLLABLE GET" #xA1EE) + ("YI SYLLABLE GEX" #xA1EF) + ("YI SYLLABLE GE" #xA1F0) + ("YI SYLLABLE GEP" #xA1F1) + ("YI SYLLABLE GUT" #xA1F2) + ("YI SYLLABLE GUX" #xA1F3) + ("YI SYLLABLE GU" #xA1F4) + ("YI SYLLABLE GUP" #xA1F5) + ("YI SYLLABLE GURX" #xA1F6) + ("YI SYLLABLE GUR" #xA1F7) + ("YI SYLLABLE KIT" #xA1F8) + ("YI SYLLABLE KIX" #xA1F9) + ("YI SYLLABLE KI" #xA1FA) + ("YI SYLLABLE KIP" #xA1FB) + ("YI SYLLABLE KIEX" #xA1FC) + ("YI SYLLABLE KIE" #xA1FD) + ("YI SYLLABLE KIEP" #xA1FE) + ("YI SYLLABLE KAT" #xA1FF) + ("YI SYLLABLE KAX" #xA200) + ("YI SYLLABLE KA" #xA201) + ("YI SYLLABLE KAP" #xA202) + ("YI SYLLABLE KUOX" #xA203) + ("YI SYLLABLE KUO" #xA204) + ("YI SYLLABLE KUOP" #xA205) + ("YI SYLLABLE KOT" #xA206) + ("YI SYLLABLE KOX" #xA207) + ("YI SYLLABLE KO" #xA208) + ("YI SYLLABLE KOP" #xA209) + ("YI SYLLABLE KET" #xA20A) + ("YI SYLLABLE KEX" #xA20B) + ("YI SYLLABLE KE" #xA20C) + ("YI SYLLABLE KEP" #xA20D) + ("YI SYLLABLE KUT" #xA20E) + ("YI SYLLABLE KUX" #xA20F) + ("YI SYLLABLE KU" #xA210) + ("YI SYLLABLE KUP" #xA211) + ("YI SYLLABLE KURX" #xA212) + ("YI SYLLABLE KUR" #xA213) + ("YI SYLLABLE GGIT" #xA214) + ("YI SYLLABLE GGIX" #xA215) + ("YI SYLLABLE GGI" #xA216) + ("YI SYLLABLE GGIEX" #xA217) + ("YI SYLLABLE GGIE" #xA218) + ("YI SYLLABLE GGIEP" #xA219) + ("YI SYLLABLE GGAT" #xA21A) + ("YI SYLLABLE GGAX" #xA21B) + ("YI SYLLABLE GGA" #xA21C) + ("YI SYLLABLE GGAP" #xA21D) + ("YI SYLLABLE GGUOT" #xA21E) + ("YI SYLLABLE GGUOX" #xA21F) + ("YI SYLLABLE GGUO" #xA220) + ("YI SYLLABLE GGUOP" #xA221) + ("YI SYLLABLE GGOT" #xA222) + ("YI SYLLABLE GGOX" #xA223) + ("YI SYLLABLE GGO" #xA224) + ("YI SYLLABLE GGOP" #xA225) + ("YI SYLLABLE GGET" #xA226) + ("YI SYLLABLE GGEX" #xA227) + ("YI SYLLABLE GGE" #xA228) + ("YI SYLLABLE GGEP" #xA229) + ("YI SYLLABLE GGUT" #xA22A) + ("YI SYLLABLE GGUX" #xA22B) + ("YI SYLLABLE GGU" #xA22C) + ("YI SYLLABLE GGUP" #xA22D) + ("YI SYLLABLE GGURX" #xA22E) + ("YI SYLLABLE GGUR" #xA22F) + ("YI SYLLABLE MGIEX" #xA230) + ("YI SYLLABLE MGIE" #xA231) + ("YI SYLLABLE MGAT" #xA232) + ("YI SYLLABLE MGAX" #xA233) + ("YI SYLLABLE MGA" #xA234) + ("YI SYLLABLE MGAP" #xA235) + ("YI SYLLABLE MGUOX" #xA236) + ("YI SYLLABLE MGUO" #xA237) + ("YI SYLLABLE MGUOP" #xA238) + ("YI SYLLABLE MGOT" #xA239) + ("YI SYLLABLE MGOX" #xA23A) + ("YI SYLLABLE MGO" #xA23B) + ("YI SYLLABLE MGOP" #xA23C) + ("YI SYLLABLE MGEX" #xA23D) + ("YI SYLLABLE MGE" #xA23E) + ("YI SYLLABLE MGEP" #xA23F) + ("YI SYLLABLE MGUT" #xA240) + ("YI SYLLABLE MGUX" #xA241) + ("YI SYLLABLE MGU" #xA242) + ("YI SYLLABLE MGUP" #xA243) + ("YI SYLLABLE MGURX" #xA244) + ("YI SYLLABLE MGUR" #xA245) + ("YI SYLLABLE HXIT" #xA246) + ("YI SYLLABLE HXIX" #xA247) + ("YI SYLLABLE HXI" #xA248) + ("YI SYLLABLE HXIP" #xA249) + ("YI SYLLABLE HXIET" #xA24A) + ("YI SYLLABLE HXIEX" #xA24B) + ("YI SYLLABLE HXIE" #xA24C) + ("YI SYLLABLE HXIEP" #xA24D) + ("YI SYLLABLE HXAT" #xA24E) + ("YI SYLLABLE HXAX" #xA24F) + ("YI SYLLABLE HXA" #xA250) + ("YI SYLLABLE HXAP" #xA251) + ("YI SYLLABLE HXUOT" #xA252) + ("YI SYLLABLE HXUOX" #xA253) + ("YI SYLLABLE HXUO" #xA254) + ("YI SYLLABLE HXUOP" #xA255) + ("YI SYLLABLE HXOT" #xA256) + ("YI SYLLABLE HXOX" #xA257) + ("YI SYLLABLE HXO" #xA258) + ("YI SYLLABLE HXOP" #xA259) + ("YI SYLLABLE HXEX" #xA25A) + ("YI SYLLABLE HXE" #xA25B) + ("YI SYLLABLE HXEP" #xA25C) + ("YI SYLLABLE NGIEX" #xA25D) + ("YI SYLLABLE NGIE" #xA25E) + ("YI SYLLABLE NGIEP" #xA25F) + ("YI SYLLABLE NGAT" #xA260) + ("YI SYLLABLE NGAX" #xA261) + ("YI SYLLABLE NGA" #xA262) + ("YI SYLLABLE NGAP" #xA263) + ("YI SYLLABLE NGUOT" #xA264) + ("YI SYLLABLE NGUOX" #xA265) + ("YI SYLLABLE NGUO" #xA266) + ("YI SYLLABLE NGOT" #xA267) + ("YI SYLLABLE NGOX" #xA268) + ("YI SYLLABLE NGO" #xA269) + ("YI SYLLABLE NGOP" #xA26A) + ("YI SYLLABLE NGEX" #xA26B) + ("YI SYLLABLE NGE" #xA26C) + ("YI SYLLABLE NGEP" #xA26D) + ("YI SYLLABLE HIT" #xA26E) + ("YI SYLLABLE HIEX" #xA26F) + ("YI SYLLABLE HIE" #xA270) + ("YI SYLLABLE HAT" #xA271) + ("YI SYLLABLE HAX" #xA272) + ("YI SYLLABLE HA" #xA273) + ("YI SYLLABLE HAP" #xA274) + ("YI SYLLABLE HUOT" #xA275) + ("YI SYLLABLE HUOX" #xA276) + ("YI SYLLABLE HUO" #xA277) + ("YI SYLLABLE HUOP" #xA278) + ("YI SYLLABLE HOT" #xA279) + ("YI SYLLABLE HOX" #xA27A) + ("YI SYLLABLE HO" #xA27B) + ("YI SYLLABLE HOP" #xA27C) + ("YI SYLLABLE HEX" #xA27D) + ("YI SYLLABLE HE" #xA27E) + ("YI SYLLABLE HEP" #xA27F) + ("YI SYLLABLE WAT" #xA280) + ("YI SYLLABLE WAX" #xA281) + ("YI SYLLABLE WA" #xA282) + ("YI SYLLABLE WAP" #xA283) + ("YI SYLLABLE WUOX" #xA284) + ("YI SYLLABLE WUO" #xA285) + ("YI SYLLABLE WUOP" #xA286) + ("YI SYLLABLE WOX" #xA287) + ("YI SYLLABLE WO" #xA288) + ("YI SYLLABLE WOP" #xA289) + ("YI SYLLABLE WEX" #xA28A) + ("YI SYLLABLE WE" #xA28B) + ("YI SYLLABLE WEP" #xA28C) + ("YI SYLLABLE ZIT" #xA28D) + ("YI SYLLABLE ZIX" #xA28E) + ("YI SYLLABLE ZI" #xA28F) + ("YI SYLLABLE ZIP" #xA290) + ("YI SYLLABLE ZIEX" #xA291) + ("YI SYLLABLE ZIE" #xA292) + ("YI SYLLABLE ZIEP" #xA293) + ("YI SYLLABLE ZAT" #xA294) + ("YI SYLLABLE ZAX" #xA295) + ("YI SYLLABLE ZA" #xA296) + ("YI SYLLABLE ZAP" #xA297) + ("YI SYLLABLE ZUOX" #xA298) + ("YI SYLLABLE ZUO" #xA299) + ("YI SYLLABLE ZUOP" #xA29A) + ("YI SYLLABLE ZOT" #xA29B) + ("YI SYLLABLE ZOX" #xA29C) + ("YI SYLLABLE ZO" #xA29D) + ("YI SYLLABLE ZOP" #xA29E) + ("YI SYLLABLE ZEX" #xA29F) + ("YI SYLLABLE ZE" #xA2A0) + ("YI SYLLABLE ZEP" #xA2A1) + ("YI SYLLABLE ZUT" #xA2A2) + ("YI SYLLABLE ZUX" #xA2A3) + ("YI SYLLABLE ZU" #xA2A4) + ("YI SYLLABLE ZUP" #xA2A5) + ("YI SYLLABLE ZURX" #xA2A6) + ("YI SYLLABLE ZUR" #xA2A7) + ("YI SYLLABLE ZYT" #xA2A8) + ("YI SYLLABLE ZYX" #xA2A9) + ("YI SYLLABLE ZY" #xA2AA) + ("YI SYLLABLE ZYP" #xA2AB) + ("YI SYLLABLE ZYRX" #xA2AC) + ("YI SYLLABLE ZYR" #xA2AD) + ("YI SYLLABLE CIT" #xA2AE) + ("YI SYLLABLE CIX" #xA2AF) + ("YI SYLLABLE CI" #xA2B0) + ("YI SYLLABLE CIP" #xA2B1) + ("YI SYLLABLE CIET" #xA2B2) + ("YI SYLLABLE CIEX" #xA2B3) + ("YI SYLLABLE CIE" #xA2B4) + ("YI SYLLABLE CIEP" #xA2B5) + ("YI SYLLABLE CAT" #xA2B6) + ("YI SYLLABLE CAX" #xA2B7) + ("YI SYLLABLE CA" #xA2B8) + ("YI SYLLABLE CAP" #xA2B9) + ("YI SYLLABLE CUOX" #xA2BA) + ("YI SYLLABLE CUO" #xA2BB) + ("YI SYLLABLE CUOP" #xA2BC) + ("YI SYLLABLE COT" #xA2BD) + ("YI SYLLABLE COX" #xA2BE) + ("YI SYLLABLE CO" #xA2BF) + ("YI SYLLABLE COP" #xA2C0) + ("YI SYLLABLE CEX" #xA2C1) + ("YI SYLLABLE CE" #xA2C2) + ("YI SYLLABLE CEP" #xA2C3) + ("YI SYLLABLE CUT" #xA2C4) + ("YI SYLLABLE CUX" #xA2C5) + ("YI SYLLABLE CU" #xA2C6) + ("YI SYLLABLE CUP" #xA2C7) + ("YI SYLLABLE CURX" #xA2C8) + ("YI SYLLABLE CUR" #xA2C9) + ("YI SYLLABLE CYT" #xA2CA) + ("YI SYLLABLE CYX" #xA2CB) + ("YI SYLLABLE CY" #xA2CC) + ("YI SYLLABLE CYP" #xA2CD) + ("YI SYLLABLE CYRX" #xA2CE) + ("YI SYLLABLE CYR" #xA2CF) + ("YI SYLLABLE ZZIT" #xA2D0) + ("YI SYLLABLE ZZIX" #xA2D1) + ("YI SYLLABLE ZZI" #xA2D2) + ("YI SYLLABLE ZZIP" #xA2D3) + ("YI SYLLABLE ZZIET" #xA2D4) + ("YI SYLLABLE ZZIEX" #xA2D5) + ("YI SYLLABLE ZZIE" #xA2D6) + ("YI SYLLABLE ZZIEP" #xA2D7) + ("YI SYLLABLE ZZAT" #xA2D8) + ("YI SYLLABLE ZZAX" #xA2D9) + ("YI SYLLABLE ZZA" #xA2DA) + ("YI SYLLABLE ZZAP" #xA2DB) + ("YI SYLLABLE ZZOX" #xA2DC) + ("YI SYLLABLE ZZO" #xA2DD) + ("YI SYLLABLE ZZOP" #xA2DE) + ("YI SYLLABLE ZZEX" #xA2DF) + ("YI SYLLABLE ZZE" #xA2E0) + ("YI SYLLABLE ZZEP" #xA2E1) + ("YI SYLLABLE ZZUX" #xA2E2) + ("YI SYLLABLE ZZU" #xA2E3) + ("YI SYLLABLE ZZUP" #xA2E4) + ("YI SYLLABLE ZZURX" #xA2E5) + ("YI SYLLABLE ZZUR" #xA2E6) + ("YI SYLLABLE ZZYT" #xA2E7) + ("YI SYLLABLE ZZYX" #xA2E8) + ("YI SYLLABLE ZZY" #xA2E9) + ("YI SYLLABLE ZZYP" #xA2EA) + ("YI SYLLABLE ZZYRX" #xA2EB) + ("YI SYLLABLE ZZYR" #xA2EC) + ("YI SYLLABLE NZIT" #xA2ED) + ("YI SYLLABLE NZIX" #xA2EE) + ("YI SYLLABLE NZI" #xA2EF) + ("YI SYLLABLE NZIP" #xA2F0) + ("YI SYLLABLE NZIEX" #xA2F1) + ("YI SYLLABLE NZIE" #xA2F2) + ("YI SYLLABLE NZIEP" #xA2F3) + ("YI SYLLABLE NZAT" #xA2F4) + ("YI SYLLABLE NZAX" #xA2F5) + ("YI SYLLABLE NZA" #xA2F6) + ("YI SYLLABLE NZAP" #xA2F7) + ("YI SYLLABLE NZUOX" #xA2F8) + ("YI SYLLABLE NZUO" #xA2F9) + ("YI SYLLABLE NZOX" #xA2FA) + ("YI SYLLABLE NZOP" #xA2FB) + ("YI SYLLABLE NZEX" #xA2FC) + ("YI SYLLABLE NZE" #xA2FD) + ("YI SYLLABLE NZUX" #xA2FE) + ("YI SYLLABLE NZU" #xA2FF) + ("YI SYLLABLE NZUP" #xA300) + ("YI SYLLABLE NZURX" #xA301) + ("YI SYLLABLE NZUR" #xA302) + ("YI SYLLABLE NZYT" #xA303) + ("YI SYLLABLE NZYX" #xA304) + ("YI SYLLABLE NZY" #xA305) + ("YI SYLLABLE NZYP" #xA306) + ("YI SYLLABLE NZYRX" #xA307) + ("YI SYLLABLE NZYR" #xA308) + ("YI SYLLABLE SIT" #xA309) + ("YI SYLLABLE SIX" #xA30A) + ("YI SYLLABLE SI" #xA30B) + ("YI SYLLABLE SIP" #xA30C) + ("YI SYLLABLE SIEX" #xA30D) + ("YI SYLLABLE SIE" #xA30E) + ("YI SYLLABLE SIEP" #xA30F) + ("YI SYLLABLE SAT" #xA310) + ("YI SYLLABLE SAX" #xA311) + ("YI SYLLABLE SA" #xA312) + ("YI SYLLABLE SAP" #xA313) + ("YI SYLLABLE SUOX" #xA314) + ("YI SYLLABLE SUO" #xA315) + ("YI SYLLABLE SUOP" #xA316) + ("YI SYLLABLE SOT" #xA317) + ("YI SYLLABLE SOX" #xA318) + ("YI SYLLABLE SO" #xA319) + ("YI SYLLABLE SOP" #xA31A) + ("YI SYLLABLE SEX" #xA31B) + ("YI SYLLABLE SE" #xA31C) + ("YI SYLLABLE SEP" #xA31D) + ("YI SYLLABLE SUT" #xA31E) + ("YI SYLLABLE SUX" #xA31F) + ("YI SYLLABLE SU" #xA320) + ("YI SYLLABLE SUP" #xA321) + ("YI SYLLABLE SURX" #xA322) + ("YI SYLLABLE SUR" #xA323) + ("YI SYLLABLE SYT" #xA324) + ("YI SYLLABLE SYX" #xA325) + ("YI SYLLABLE SY" #xA326) + ("YI SYLLABLE SYP" #xA327) + ("YI SYLLABLE SYRX" #xA328) + ("YI SYLLABLE SYR" #xA329) + ("YI SYLLABLE SSIT" #xA32A) + ("YI SYLLABLE SSIX" #xA32B) + ("YI SYLLABLE SSI" #xA32C) + ("YI SYLLABLE SSIP" #xA32D) + ("YI SYLLABLE SSIEX" #xA32E) + ("YI SYLLABLE SSIE" #xA32F) + ("YI SYLLABLE SSIEP" #xA330) + ("YI SYLLABLE SSAT" #xA331) + ("YI SYLLABLE SSAX" #xA332) + ("YI SYLLABLE SSA" #xA333) + ("YI SYLLABLE SSAP" #xA334) + ("YI SYLLABLE SSOT" #xA335) + ("YI SYLLABLE SSOX" #xA336) + ("YI SYLLABLE SSO" #xA337) + ("YI SYLLABLE SSOP" #xA338) + ("YI SYLLABLE SSEX" #xA339) + ("YI SYLLABLE SSE" #xA33A) + ("YI SYLLABLE SSEP" #xA33B) + ("YI SYLLABLE SSUT" #xA33C) + ("YI SYLLABLE SSUX" #xA33D) + ("YI SYLLABLE SSU" #xA33E) + ("YI SYLLABLE SSUP" #xA33F) + ("YI SYLLABLE SSYT" #xA340) + ("YI SYLLABLE SSYX" #xA341) + ("YI SYLLABLE SSY" #xA342) + ("YI SYLLABLE SSYP" #xA343) + ("YI SYLLABLE SSYRX" #xA344) + ("YI SYLLABLE SSYR" #xA345) + ("YI SYLLABLE ZHAT" #xA346) + ("YI SYLLABLE ZHAX" #xA347) + ("YI SYLLABLE ZHA" #xA348) + ("YI SYLLABLE ZHAP" #xA349) + ("YI SYLLABLE ZHUOX" #xA34A) + ("YI SYLLABLE ZHUO" #xA34B) + ("YI SYLLABLE ZHUOP" #xA34C) + ("YI SYLLABLE ZHOT" #xA34D) + ("YI SYLLABLE ZHOX" #xA34E) + ("YI SYLLABLE ZHO" #xA34F) + ("YI SYLLABLE ZHOP" #xA350) + ("YI SYLLABLE ZHET" #xA351) + ("YI SYLLABLE ZHEX" #xA352) + ("YI SYLLABLE ZHE" #xA353) + ("YI SYLLABLE ZHEP" #xA354) + ("YI SYLLABLE ZHUT" #xA355) + ("YI SYLLABLE ZHUX" #xA356) + ("YI SYLLABLE ZHU" #xA357) + ("YI SYLLABLE ZHUP" #xA358) + ("YI SYLLABLE ZHURX" #xA359) + ("YI SYLLABLE ZHUR" #xA35A) + ("YI SYLLABLE ZHYT" #xA35B) + ("YI SYLLABLE ZHYX" #xA35C) + ("YI SYLLABLE ZHY" #xA35D) + ("YI SYLLABLE ZHYP" #xA35E) + ("YI SYLLABLE ZHYRX" #xA35F) + ("YI SYLLABLE ZHYR" #xA360) + ("YI SYLLABLE CHAT" #xA361) + ("YI SYLLABLE CHAX" #xA362) + ("YI SYLLABLE CHA" #xA363) + ("YI SYLLABLE CHAP" #xA364) + ("YI SYLLABLE CHUOT" #xA365) + ("YI SYLLABLE CHUOX" #xA366) + ("YI SYLLABLE CHUO" #xA367) + ("YI SYLLABLE CHUOP" #xA368) + ("YI SYLLABLE CHOT" #xA369) + ("YI SYLLABLE CHOX" #xA36A) + ("YI SYLLABLE CHO" #xA36B) + ("YI SYLLABLE CHOP" #xA36C) + ("YI SYLLABLE CHET" #xA36D) + ("YI SYLLABLE CHEX" #xA36E) + ("YI SYLLABLE CHE" #xA36F) + ("YI SYLLABLE CHEP" #xA370) + ("YI SYLLABLE CHUX" #xA371) + ("YI SYLLABLE CHU" #xA372) + ("YI SYLLABLE CHUP" #xA373) + ("YI SYLLABLE CHURX" #xA374) + ("YI SYLLABLE CHUR" #xA375) + ("YI SYLLABLE CHYT" #xA376) + ("YI SYLLABLE CHYX" #xA377) + ("YI SYLLABLE CHY" #xA378) + ("YI SYLLABLE CHYP" #xA379) + ("YI SYLLABLE CHYRX" #xA37A) + ("YI SYLLABLE CHYR" #xA37B) + ("YI SYLLABLE RRAX" #xA37C) + ("YI SYLLABLE RRA" #xA37D) + ("YI SYLLABLE RRUOX" #xA37E) + ("YI SYLLABLE RRUO" #xA37F) + ("YI SYLLABLE RROT" #xA380) + ("YI SYLLABLE RROX" #xA381) + ("YI SYLLABLE RRO" #xA382) + ("YI SYLLABLE RROP" #xA383) + ("YI SYLLABLE RRET" #xA384) + ("YI SYLLABLE RREX" #xA385) + ("YI SYLLABLE RRE" #xA386) + ("YI SYLLABLE RREP" #xA387) + ("YI SYLLABLE RRUT" #xA388) + ("YI SYLLABLE RRUX" #xA389) + ("YI SYLLABLE RRU" #xA38A) + ("YI SYLLABLE RRUP" #xA38B) + ("YI SYLLABLE RRURX" #xA38C) + ("YI SYLLABLE RRUR" #xA38D) + ("YI SYLLABLE RRYT" #xA38E) + ("YI SYLLABLE RRYX" #xA38F) + ("YI SYLLABLE RRY" #xA390) + ("YI SYLLABLE RRYP" #xA391) + ("YI SYLLABLE RRYRX" #xA392) + ("YI SYLLABLE RRYR" #xA393) + ("YI SYLLABLE NRAT" #xA394) + ("YI SYLLABLE NRAX" #xA395) + ("YI SYLLABLE NRA" #xA396) + ("YI SYLLABLE NRAP" #xA397) + ("YI SYLLABLE NROX" #xA398) + ("YI SYLLABLE NRO" #xA399) + ("YI SYLLABLE NROP" #xA39A) + ("YI SYLLABLE NRET" #xA39B) + ("YI SYLLABLE NREX" #xA39C) + ("YI SYLLABLE NRE" #xA39D) + ("YI SYLLABLE NREP" #xA39E) + ("YI SYLLABLE NRUT" #xA39F) + ("YI SYLLABLE NRUX" #xA3A0) + ("YI SYLLABLE NRU" #xA3A1) + ("YI SYLLABLE NRUP" #xA3A2) + ("YI SYLLABLE NRURX" #xA3A3) + ("YI SYLLABLE NRUR" #xA3A4) + ("YI SYLLABLE NRYT" #xA3A5) + ("YI SYLLABLE NRYX" #xA3A6) + ("YI SYLLABLE NRY" #xA3A7) + ("YI SYLLABLE NRYP" #xA3A8) + ("YI SYLLABLE NRYRX" #xA3A9) + ("YI SYLLABLE NRYR" #xA3AA) + ("YI SYLLABLE SHAT" #xA3AB) + ("YI SYLLABLE SHAX" #xA3AC) + ("YI SYLLABLE SHA" #xA3AD) + ("YI SYLLABLE SHAP" #xA3AE) + ("YI SYLLABLE SHUOX" #xA3AF) + ("YI SYLLABLE SHUO" #xA3B0) + ("YI SYLLABLE SHUOP" #xA3B1) + ("YI SYLLABLE SHOT" #xA3B2) + ("YI SYLLABLE SHOX" #xA3B3) + ("YI SYLLABLE SHO" #xA3B4) + ("YI SYLLABLE SHOP" #xA3B5) + ("YI SYLLABLE SHET" #xA3B6) + ("YI SYLLABLE SHEX" #xA3B7) + ("YI SYLLABLE SHE" #xA3B8) + ("YI SYLLABLE SHEP" #xA3B9) + ("YI SYLLABLE SHUT" #xA3BA) + ("YI SYLLABLE SHUX" #xA3BB) + ("YI SYLLABLE SHU" #xA3BC) + ("YI SYLLABLE SHUP" #xA3BD) + ("YI SYLLABLE SHURX" #xA3BE) + ("YI SYLLABLE SHUR" #xA3BF) + ("YI SYLLABLE SHYT" #xA3C0) + ("YI SYLLABLE SHYX" #xA3C1) + ("YI SYLLABLE SHY" #xA3C2) + ("YI SYLLABLE SHYP" #xA3C3) + ("YI SYLLABLE SHYRX" #xA3C4) + ("YI SYLLABLE SHYR" #xA3C5) + ("YI SYLLABLE RAT" #xA3C6) + ("YI SYLLABLE RAX" #xA3C7) + ("YI SYLLABLE RA" #xA3C8) + ("YI SYLLABLE RAP" #xA3C9) + ("YI SYLLABLE RUOX" #xA3CA) + ("YI SYLLABLE RUO" #xA3CB) + ("YI SYLLABLE RUOP" #xA3CC) + ("YI SYLLABLE ROT" #xA3CD) + ("YI SYLLABLE ROX" #xA3CE) + ("YI SYLLABLE RO" #xA3CF) + ("YI SYLLABLE ROP" #xA3D0) + ("YI SYLLABLE REX" #xA3D1) + ("YI SYLLABLE RE" #xA3D2) + ("YI SYLLABLE REP" #xA3D3) + ("YI SYLLABLE RUT" #xA3D4) + ("YI SYLLABLE RUX" #xA3D5) + ("YI SYLLABLE RU" #xA3D6) + ("YI SYLLABLE RUP" #xA3D7) + ("YI SYLLABLE RURX" #xA3D8) + ("YI SYLLABLE RUR" #xA3D9) + ("YI SYLLABLE RYT" #xA3DA) + ("YI SYLLABLE RYX" #xA3DB) + ("YI SYLLABLE RY" #xA3DC) + ("YI SYLLABLE RYP" #xA3DD) + ("YI SYLLABLE RYRX" #xA3DE) + ("YI SYLLABLE RYR" #xA3DF) + ("YI SYLLABLE JIT" #xA3E0) + ("YI SYLLABLE JIX" #xA3E1) + ("YI SYLLABLE JI" #xA3E2) + ("YI SYLLABLE JIP" #xA3E3) + ("YI SYLLABLE JIET" #xA3E4) + ("YI SYLLABLE JIEX" #xA3E5) + ("YI SYLLABLE JIE" #xA3E6) + ("YI SYLLABLE JIEP" #xA3E7) + ("YI SYLLABLE JUOT" #xA3E8) + ("YI SYLLABLE JUOX" #xA3E9) + ("YI SYLLABLE JUO" #xA3EA) + ("YI SYLLABLE JUOP" #xA3EB) + ("YI SYLLABLE JOT" #xA3EC) + ("YI SYLLABLE JOX" #xA3ED) + ("YI SYLLABLE JO" #xA3EE) + ("YI SYLLABLE JOP" #xA3EF) + ("YI SYLLABLE JUT" #xA3F0) + ("YI SYLLABLE JUX" #xA3F1) + ("YI SYLLABLE JU" #xA3F2) + ("YI SYLLABLE JUP" #xA3F3) + ("YI SYLLABLE JURX" #xA3F4) + ("YI SYLLABLE JUR" #xA3F5) + ("YI SYLLABLE JYT" #xA3F6) + ("YI SYLLABLE JYX" #xA3F7) + ("YI SYLLABLE JY" #xA3F8) + ("YI SYLLABLE JYP" #xA3F9) + ("YI SYLLABLE JYRX" #xA3FA) + ("YI SYLLABLE JYR" #xA3FB) + ("YI SYLLABLE QIT" #xA3FC) + ("YI SYLLABLE QIX" #xA3FD) + ("YI SYLLABLE QI" #xA3FE) + ("YI SYLLABLE QIP" #xA3FF) + ("YI SYLLABLE QIET" #xA400) + ("YI SYLLABLE QIEX" #xA401) + ("YI SYLLABLE QIE" #xA402) + ("YI SYLLABLE QIEP" #xA403) + ("YI SYLLABLE QUOT" #xA404) + ("YI SYLLABLE QUOX" #xA405) + ("YI SYLLABLE QUO" #xA406) + ("YI SYLLABLE QUOP" #xA407) + ("YI SYLLABLE QOT" #xA408) + ("YI SYLLABLE QOX" #xA409) + ("YI SYLLABLE QO" #xA40A) + ("YI SYLLABLE QOP" #xA40B) + ("YI SYLLABLE QUT" #xA40C) + ("YI SYLLABLE QUX" #xA40D) + ("YI SYLLABLE QU" #xA40E) + ("YI SYLLABLE QUP" #xA40F) + ("YI SYLLABLE QURX" #xA410) + ("YI SYLLABLE QUR" #xA411) + ("YI SYLLABLE QYT" #xA412) + ("YI SYLLABLE QYX" #xA413) + ("YI SYLLABLE QY" #xA414) + ("YI SYLLABLE QYP" #xA415) + ("YI SYLLABLE QYRX" #xA416) + ("YI SYLLABLE QYR" #xA417) + ("YI SYLLABLE JJIT" #xA418) + ("YI SYLLABLE JJIX" #xA419) + ("YI SYLLABLE JJI" #xA41A) + ("YI SYLLABLE JJIP" #xA41B) + ("YI SYLLABLE JJIET" #xA41C) + ("YI SYLLABLE JJIEX" #xA41D) + ("YI SYLLABLE JJIE" #xA41E) + ("YI SYLLABLE JJIEP" #xA41F) + ("YI SYLLABLE JJUOX" #xA420) + ("YI SYLLABLE JJUO" #xA421) + ("YI SYLLABLE JJUOP" #xA422) + ("YI SYLLABLE JJOT" #xA423) + ("YI SYLLABLE JJOX" #xA424) + ("YI SYLLABLE JJO" #xA425) + ("YI SYLLABLE JJOP" #xA426) + ("YI SYLLABLE JJUT" #xA427) + ("YI SYLLABLE JJUX" #xA428) + ("YI SYLLABLE JJU" #xA429) + ("YI SYLLABLE JJUP" #xA42A) + ("YI SYLLABLE JJURX" #xA42B) + ("YI SYLLABLE JJUR" #xA42C) + ("YI SYLLABLE JJYT" #xA42D) + ("YI SYLLABLE JJYX" #xA42E) + ("YI SYLLABLE JJY" #xA42F) + ("YI SYLLABLE JJYP" #xA430) + ("YI SYLLABLE NJIT" #xA431) + ("YI SYLLABLE NJIX" #xA432) + ("YI SYLLABLE NJI" #xA433) + ("YI SYLLABLE NJIP" #xA434) + ("YI SYLLABLE NJIET" #xA435) + ("YI SYLLABLE NJIEX" #xA436) + ("YI SYLLABLE NJIE" #xA437) + ("YI SYLLABLE NJIEP" #xA438) + ("YI SYLLABLE NJUOX" #xA439) + ("YI SYLLABLE NJUO" #xA43A) + ("YI SYLLABLE NJOT" #xA43B) + ("YI SYLLABLE NJOX" #xA43C) + ("YI SYLLABLE NJO" #xA43D) + ("YI SYLLABLE NJOP" #xA43E) + ("YI SYLLABLE NJUX" #xA43F) + ("YI SYLLABLE NJU" #xA440) + ("YI SYLLABLE NJUP" #xA441) + ("YI SYLLABLE NJURX" #xA442) + ("YI SYLLABLE NJUR" #xA443) + ("YI SYLLABLE NJYT" #xA444) + ("YI SYLLABLE NJYX" #xA445) + ("YI SYLLABLE NJY" #xA446) + ("YI SYLLABLE NJYP" #xA447) + ("YI SYLLABLE NJYRX" #xA448) + ("YI SYLLABLE NJYR" #xA449) + ("YI SYLLABLE NYIT" #xA44A) + ("YI SYLLABLE NYIX" #xA44B) + ("YI SYLLABLE NYI" #xA44C) + ("YI SYLLABLE NYIP" #xA44D) + ("YI SYLLABLE NYIET" #xA44E) + ("YI SYLLABLE NYIEX" #xA44F) + ("YI SYLLABLE NYIE" #xA450) + ("YI SYLLABLE NYIEP" #xA451) + ("YI SYLLABLE NYUOX" #xA452) + ("YI SYLLABLE NYUO" #xA453) + ("YI SYLLABLE NYUOP" #xA454) + ("YI SYLLABLE NYOT" #xA455) + ("YI SYLLABLE NYOX" #xA456) + ("YI SYLLABLE NYO" #xA457) + ("YI SYLLABLE NYOP" #xA458) + ("YI SYLLABLE NYUT" #xA459) + ("YI SYLLABLE NYUX" #xA45A) + ("YI SYLLABLE NYU" #xA45B) + ("YI SYLLABLE NYUP" #xA45C) + ("YI SYLLABLE XIT" #xA45D) + ("YI SYLLABLE XIX" #xA45E) + ("YI SYLLABLE XI" #xA45F) + ("YI SYLLABLE XIP" #xA460) + ("YI SYLLABLE XIET" #xA461) + ("YI SYLLABLE XIEX" #xA462) + ("YI SYLLABLE XIE" #xA463) + ("YI SYLLABLE XIEP" #xA464) + ("YI SYLLABLE XUOX" #xA465) + ("YI SYLLABLE XUO" #xA466) + ("YI SYLLABLE XOT" #xA467) + ("YI SYLLABLE XOX" #xA468) + ("YI SYLLABLE XO" #xA469) + ("YI SYLLABLE XOP" #xA46A) + ("YI SYLLABLE XYT" #xA46B) + ("YI SYLLABLE XYX" #xA46C) + ("YI SYLLABLE XY" #xA46D) + ("YI SYLLABLE XYP" #xA46E) + ("YI SYLLABLE XYRX" #xA46F) + ("YI SYLLABLE XYR" #xA470) + ("YI SYLLABLE YIT" #xA471) + ("YI SYLLABLE YIX" #xA472) + ("YI SYLLABLE YI" #xA473) + ("YI SYLLABLE YIP" #xA474) + ("YI SYLLABLE YIET" #xA475) + ("YI SYLLABLE YIEX" #xA476) + ("YI SYLLABLE YIE" #xA477) + ("YI SYLLABLE YIEP" #xA478) + ("YI SYLLABLE YUOT" #xA479) + ("YI SYLLABLE YUOX" #xA47A) + ("YI SYLLABLE YUO" #xA47B) + ("YI SYLLABLE YUOP" #xA47C) + ("YI SYLLABLE YOT" #xA47D) + ("YI SYLLABLE YOX" #xA47E) + ("YI SYLLABLE YO" #xA47F) + ("YI SYLLABLE YOP" #xA480) + ("YI SYLLABLE YUT" #xA481) + ("YI SYLLABLE YUX" #xA482) + ("YI SYLLABLE YU" #xA483) + ("YI SYLLABLE YUP" #xA484) + ("YI SYLLABLE YURX" #xA485) + ("YI SYLLABLE YUR" #xA486) + ("YI SYLLABLE YYT" #xA487) + ("YI SYLLABLE YYX" #xA488) + ("YI SYLLABLE YY" #xA489) + ("YI SYLLABLE YYP" #xA48A) + ("YI SYLLABLE YYRX" #xA48B) + ("YI SYLLABLE YYR" #xA48C) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/0A490-0A4CF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,57 @@ +(nxml-define-char-name-set 'yi-radicals + '(("YI RADICAL QOT" #xA490) + ("YI RADICAL LI" #xA491) + ("YI RADICAL KIT" #xA492) + ("YI RADICAL NYIP" #xA493) + ("YI RADICAL CYP" #xA494) + ("YI RADICAL SSI" #xA495) + ("YI RADICAL GGOP" #xA496) + ("YI RADICAL GEP" #xA497) + ("YI RADICAL MI" #xA498) + ("YI RADICAL HXIT" #xA499) + ("YI RADICAL LYR" #xA49A) + ("YI RADICAL BBUT" #xA49B) + ("YI RADICAL MOP" #xA49C) + ("YI RADICAL YO" #xA49D) + ("YI RADICAL PUT" #xA49E) + ("YI RADICAL HXUO" #xA49F) + ("YI RADICAL TAT" #xA4A0) + ("YI RADICAL GA" #xA4A1) + ("YI RADICAL ZUP" #xA4A2) + ("YI RADICAL CYT" #xA4A3) + ("YI RADICAL DDUR" #xA4A4) + ("YI RADICAL BUR" #xA4A5) + ("YI RADICAL GGUO" #xA4A6) + ("YI RADICAL NYOP" #xA4A7) + ("YI RADICAL TU" #xA4A8) + ("YI RADICAL OP" #xA4A9) + ("YI RADICAL JJUT" #xA4AA) + ("YI RADICAL ZOT" #xA4AB) + ("YI RADICAL PYT" #xA4AC) + ("YI RADICAL HMO" #xA4AD) + ("YI RADICAL YIT" #xA4AE) + ("YI RADICAL VUR" #xA4AF) + ("YI RADICAL SHY" #xA4B0) + ("YI RADICAL VEP" #xA4B1) + ("YI RADICAL ZA" #xA4B2) + ("YI RADICAL JO" #xA4B3) + ("YI RADICAL NZUP" #xA4B4) + ("YI RADICAL JJY" #xA4B5) + ("YI RADICAL GOT" #xA4B6) + ("YI RADICAL JJIE" #xA4B7) + ("YI RADICAL WO" #xA4B8) + ("YI RADICAL DU" #xA4B9) + ("YI RADICAL SHUR" #xA4BA) + ("YI RADICAL LIE" #xA4BB) + ("YI RADICAL CY" #xA4BC) + ("YI RADICAL CUOP" #xA4BD) + ("YI RADICAL CIP" #xA4BE) + ("YI RADICAL HXOP" #xA4BF) + ("YI RADICAL SHAT" #xA4C0) + ("YI RADICAL ZUR" #xA4C1) + ("YI RADICAL SHOP" #xA4C2) + ("YI RADICAL CHE" #xA4C3) + ("YI RADICAL ZZIET" #xA4C4) + ("YI RADICAL NBIE" #xA4C5) + ("YI RADICAL KE" #xA4C6) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/0FB00-0FB4F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,60 @@ +(nxml-define-char-name-set 'alphabetic-presentation-forms + '(("LATIN SMALL LIGATURE FF" #xFB00) + ("LATIN SMALL LIGATURE FI" #xFB01) + ("LATIN SMALL LIGATURE FL" #xFB02) + ("LATIN SMALL LIGATURE FFI" #xFB03) + ("LATIN SMALL LIGATURE FFL" #xFB04) + ("LATIN SMALL LIGATURE LONG S T" #xFB05) + ("LATIN SMALL LIGATURE ST" #xFB06) + ("ARMENIAN SMALL LIGATURE MEN NOW" #xFB13) + ("ARMENIAN SMALL LIGATURE MEN ECH" #xFB14) + ("ARMENIAN SMALL LIGATURE MEN INI" #xFB15) + ("ARMENIAN SMALL LIGATURE VEW NOW" #xFB16) + ("ARMENIAN SMALL LIGATURE MEN XEH" #xFB17) + ("HEBREW LETTER YOD WITH HIRIQ" #xFB1D) + ("HEBREW POINT JUDEO-SPANISH VARIKA" #xFB1E) + ("HEBREW LIGATURE YIDDISH YOD YOD PATAH" #xFB1F) + ("HEBREW LETTER ALTERNATIVE AYIN" #xFB20) + ("HEBREW LETTER WIDE ALEF" #xFB21) + ("HEBREW LETTER WIDE DALET" #xFB22) + ("HEBREW LETTER WIDE HE" #xFB23) + ("HEBREW LETTER WIDE KAF" #xFB24) + ("HEBREW LETTER WIDE LAMED" #xFB25) + ("HEBREW LETTER WIDE FINAL MEM" #xFB26) + ("HEBREW LETTER WIDE RESH" #xFB27) + ("HEBREW LETTER WIDE TAV" #xFB28) + ("HEBREW LETTER ALTERNATIVE PLUS SIGN" #xFB29) + ("HEBREW LETTER SHIN WITH SHIN DOT" #xFB2A) + ("HEBREW LETTER SHIN WITH SIN DOT" #xFB2B) + ("HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT" #xFB2C) + ("HEBREW LETTER SHIN WITH DAGESH AND SIN DOT" #xFB2D) + ("HEBREW LETTER ALEF WITH PATAH" #xFB2E) + ("HEBREW LETTER ALEF WITH QAMATS" #xFB2F) + ("HEBREW LETTER ALEF WITH MAPIQ" #xFB30) + ("HEBREW LETTER BET WITH DAGESH" #xFB31) + ("HEBREW LETTER GIMEL WITH DAGESH" #xFB32) + ("HEBREW LETTER DALET WITH DAGESH" #xFB33) + ("HEBREW LETTER HE WITH MAPIQ" #xFB34) + ("HEBREW LETTER VAV WITH DAGESH" #xFB35) + ("HEBREW LETTER ZAYIN WITH DAGESH" #xFB36) + ("HEBREW LETTER TET WITH DAGESH" #xFB38) + ("HEBREW LETTER YOD WITH DAGESH" #xFB39) + ("HEBREW LETTER FINAL KAF WITH DAGESH" #xFB3A) + ("HEBREW LETTER KAF WITH DAGESH" #xFB3B) + ("HEBREW LETTER LAMED WITH DAGESH" #xFB3C) + ("HEBREW LETTER MEM WITH DAGESH" #xFB3E) + ("HEBREW LETTER NUN WITH DAGESH" #xFB40) + ("HEBREW LETTER SAMEKH WITH DAGESH" #xFB41) + ("HEBREW LETTER FINAL PE WITH DAGESH" #xFB43) + ("HEBREW LETTER PE WITH DAGESH" #xFB44) + ("HEBREW LETTER TSADI WITH DAGESH" #xFB46) + ("HEBREW LETTER QOF WITH DAGESH" #xFB47) + ("HEBREW LETTER RESH WITH DAGESH" #xFB48) + ("HEBREW LETTER SHIN WITH DAGESH" #xFB49) + ("HEBREW LETTER TAV WITH DAGESH" #xFB4A) + ("HEBREW LETTER VAV WITH HOLAM" #xFB4B) + ("HEBREW LETTER BET WITH RAFE" #xFB4C) + ("HEBREW LETTER KAF WITH RAFE" #xFB4D) + ("HEBREW LETTER PE WITH RAFE" #xFB4E) + ("HEBREW LIGATURE ALEF LAMED" #xFB4F) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/0FB50-0FDFF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,596 @@ +(nxml-define-char-name-set 'arabic-presentation-forms-a + '(("ARABIC LETTER ALEF WASLA ISOLATED FORM" #xFB50) + ("ARABIC LETTER ALEF WASLA FINAL FORM" #xFB51) + ("ARABIC LETTER BEEH ISOLATED FORM" #xFB52) + ("ARABIC LETTER BEEH FINAL FORM" #xFB53) + ("ARABIC LETTER BEEH INITIAL FORM" #xFB54) + ("ARABIC LETTER BEEH MEDIAL FORM" #xFB55) + ("ARABIC LETTER PEH ISOLATED FORM" #xFB56) + ("ARABIC LETTER PEH FINAL FORM" #xFB57) + ("ARABIC LETTER PEH INITIAL FORM" #xFB58) + ("ARABIC LETTER PEH MEDIAL FORM" #xFB59) + ("ARABIC LETTER BEHEH ISOLATED FORM" #xFB5A) + ("ARABIC LETTER BEHEH FINAL FORM" #xFB5B) + ("ARABIC LETTER BEHEH INITIAL FORM" #xFB5C) + ("ARABIC LETTER BEHEH MEDIAL FORM" #xFB5D) + ("ARABIC LETTER TTEHEH ISOLATED FORM" #xFB5E) + ("ARABIC LETTER TTEHEH FINAL FORM" #xFB5F) + ("ARABIC LETTER TTEHEH INITIAL FORM" #xFB60) + ("ARABIC LETTER TTEHEH MEDIAL FORM" #xFB61) + ("ARABIC LETTER TEHEH ISOLATED FORM" #xFB62) + ("ARABIC LETTER TEHEH FINAL FORM" #xFB63) + ("ARABIC LETTER TEHEH INITIAL FORM" #xFB64) + ("ARABIC LETTER TEHEH MEDIAL FORM" #xFB65) + ("ARABIC LETTER TTEH ISOLATED FORM" #xFB66) + ("ARABIC LETTER TTEH FINAL FORM" #xFB67) + ("ARABIC LETTER TTEH INITIAL FORM" #xFB68) + ("ARABIC LETTER TTEH MEDIAL FORM" #xFB69) + ("ARABIC LETTER VEH ISOLATED FORM" #xFB6A) + ("ARABIC LETTER VEH FINAL FORM" #xFB6B) + ("ARABIC LETTER VEH INITIAL FORM" #xFB6C) + ("ARABIC LETTER VEH MEDIAL FORM" #xFB6D) + ("ARABIC LETTER PEHEH ISOLATED FORM" #xFB6E) + ("ARABIC LETTER PEHEH FINAL FORM" #xFB6F) + ("ARABIC LETTER PEHEH INITIAL FORM" #xFB70) + ("ARABIC LETTER PEHEH MEDIAL FORM" #xFB71) + ("ARABIC LETTER DYEH ISOLATED FORM" #xFB72) + ("ARABIC LETTER DYEH FINAL FORM" #xFB73) + ("ARABIC LETTER DYEH INITIAL FORM" #xFB74) + ("ARABIC LETTER DYEH MEDIAL FORM" #xFB75) + ("ARABIC LETTER NYEH ISOLATED FORM" #xFB76) + ("ARABIC LETTER NYEH FINAL FORM" #xFB77) + ("ARABIC LETTER NYEH INITIAL FORM" #xFB78) + ("ARABIC LETTER NYEH MEDIAL FORM" #xFB79) + ("ARABIC LETTER TCHEH ISOLATED FORM" #xFB7A) + ("ARABIC LETTER TCHEH FINAL FORM" #xFB7B) + ("ARABIC LETTER TCHEH INITIAL FORM" #xFB7C) + ("ARABIC LETTER TCHEH MEDIAL FORM" #xFB7D) + ("ARABIC LETTER TCHEHEH ISOLATED FORM" #xFB7E) + ("ARABIC LETTER TCHEHEH FINAL FORM" #xFB7F) + ("ARABIC LETTER TCHEHEH INITIAL FORM" #xFB80) + ("ARABIC LETTER TCHEHEH MEDIAL FORM" #xFB81) + ("ARABIC LETTER DDAHAL ISOLATED FORM" #xFB82) + ("ARABIC LETTER DDAHAL FINAL FORM" #xFB83) + ("ARABIC LETTER DAHAL ISOLATED FORM" #xFB84) + ("ARABIC LETTER DAHAL FINAL FORM" #xFB85) + ("ARABIC LETTER DUL ISOLATED FORM" #xFB86) + ("ARABIC LETTER DUL FINAL FORM" #xFB87) + ("ARABIC LETTER DDAL ISOLATED FORM" #xFB88) + ("ARABIC LETTER DDAL FINAL FORM" #xFB89) + ("ARABIC LETTER JEH ISOLATED FORM" #xFB8A) + ("ARABIC LETTER JEH FINAL FORM" #xFB8B) + ("ARABIC LETTER RREH ISOLATED FORM" #xFB8C) + ("ARABIC LETTER RREH FINAL FORM" #xFB8D) + ("ARABIC LETTER KEHEH ISOLATED FORM" #xFB8E) + ("ARABIC LETTER KEHEH FINAL FORM" #xFB8F) + ("ARABIC LETTER KEHEH INITIAL FORM" #xFB90) + ("ARABIC LETTER KEHEH MEDIAL FORM" #xFB91) + ("ARABIC LETTER GAF ISOLATED FORM" #xFB92) + ("ARABIC LETTER GAF FINAL FORM" #xFB93) + ("ARABIC LETTER GAF INITIAL FORM" #xFB94) + ("ARABIC LETTER GAF MEDIAL FORM" #xFB95) + ("ARABIC LETTER GUEH ISOLATED FORM" #xFB96) + ("ARABIC LETTER GUEH FINAL FORM" #xFB97) + ("ARABIC LETTER GUEH INITIAL FORM" #xFB98) + ("ARABIC LETTER GUEH MEDIAL FORM" #xFB99) + ("ARABIC LETTER NGOEH ISOLATED FORM" #xFB9A) + ("ARABIC LETTER NGOEH FINAL FORM" #xFB9B) + ("ARABIC LETTER NGOEH INITIAL FORM" #xFB9C) + ("ARABIC LETTER NGOEH MEDIAL FORM" #xFB9D) + ("ARABIC LETTER NOON GHUNNA ISOLATED FORM" #xFB9E) + ("ARABIC LETTER NOON GHUNNA FINAL FORM" #xFB9F) + ("ARABIC LETTER RNOON ISOLATED FORM" #xFBA0) + ("ARABIC LETTER RNOON FINAL FORM" #xFBA1) + ("ARABIC LETTER RNOON INITIAL FORM" #xFBA2) + ("ARABIC LETTER RNOON MEDIAL FORM" #xFBA3) + ("ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM" #xFBA4) + ("ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM" #xFBA5) + ("ARABIC LETTER HEH GOAL ISOLATED FORM" #xFBA6) + ("ARABIC LETTER HEH GOAL FINAL FORM" #xFBA7) + ("ARABIC LETTER HEH GOAL INITIAL FORM" #xFBA8) + ("ARABIC LETTER HEH GOAL MEDIAL FORM" #xFBA9) + ("ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM" #xFBAA) + ("ARABIC LETTER HEH DOACHASHMEE FINAL FORM" #xFBAB) + ("ARABIC LETTER HEH DOACHASHMEE INITIAL FORM" #xFBAC) + ("ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM" #xFBAD) + ("ARABIC LETTER YEH BARREE ISOLATED FORM" #xFBAE) + ("ARABIC LETTER YEH BARREE FINAL FORM" #xFBAF) + ("ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM" #xFBB0) + ("ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM" #xFBB1) + ("ARABIC LETTER NG ISOLATED FORM" #xFBD3) + ("ARABIC LETTER NG FINAL FORM" #xFBD4) + ("ARABIC LETTER NG INITIAL FORM" #xFBD5) + ("ARABIC LETTER NG MEDIAL FORM" #xFBD6) + ("ARABIC LETTER U ISOLATED FORM" #xFBD7) + ("ARABIC LETTER U FINAL FORM" #xFBD8) + ("ARABIC LETTER OE ISOLATED FORM" #xFBD9) + ("ARABIC LETTER OE FINAL FORM" #xFBDA) + ("ARABIC LETTER YU ISOLATED FORM" #xFBDB) + ("ARABIC LETTER YU FINAL FORM" #xFBDC) + ("ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM" #xFBDD) + ("ARABIC LETTER VE ISOLATED FORM" #xFBDE) + ("ARABIC LETTER VE FINAL FORM" #xFBDF) + ("ARABIC LETTER KIRGHIZ OE ISOLATED FORM" #xFBE0) + ("ARABIC LETTER KIRGHIZ OE FINAL FORM" #xFBE1) + ("ARABIC LETTER KIRGHIZ YU ISOLATED FORM" #xFBE2) + ("ARABIC LETTER KIRGHIZ YU FINAL FORM" #xFBE3) + ("ARABIC LETTER E ISOLATED FORM" #xFBE4) + ("ARABIC LETTER E FINAL FORM" #xFBE5) + ("ARABIC LETTER E INITIAL FORM" #xFBE6) + ("ARABIC LETTER E MEDIAL FORM" #xFBE7) + ("ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM" #xFBE8) + ("ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM" #xFBE9) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM" #xFBEA) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM" #xFBEB) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM" #xFBEC) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM" #xFBED) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM" #xFBEE) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM" #xFBEF) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM" #xFBF0) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM" #xFBF1) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM" #xFBF2) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM" #xFBF3) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM" #xFBF4) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM" #xFBF5) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM" #xFBF6) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM" #xFBF7) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM" #xFBF8) + ("ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM" #xFBF9) + ("ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM" #xFBFA) + ("ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM" #xFBFB) + ("ARABIC LETTER FARSI YEH ISOLATED FORM" #xFBFC) + ("ARABIC LETTER FARSI YEH FINAL FORM" #xFBFD) + ("ARABIC LETTER FARSI YEH INITIAL FORM" #xFBFE) + ("ARABIC LETTER FARSI YEH MEDIAL FORM" #xFBFF) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM" #xFC00) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM" #xFC01) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM" #xFC02) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM" #xFC03) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM" #xFC04) + ("ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM" #xFC05) + ("ARABIC LIGATURE BEH WITH HAH ISOLATED FORM" #xFC06) + ("ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM" #xFC07) + ("ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM" #xFC08) + ("ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM" #xFC09) + ("ARABIC LIGATURE BEH WITH YEH ISOLATED FORM" #xFC0A) + ("ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM" #xFC0B) + ("ARABIC LIGATURE TEH WITH HAH ISOLATED FORM" #xFC0C) + ("ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM" #xFC0D) + ("ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM" #xFC0E) + ("ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM" #xFC0F) + ("ARABIC LIGATURE TEH WITH YEH ISOLATED FORM" #xFC10) + ("ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM" #xFC11) + ("ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM" #xFC12) + ("ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM" #xFC13) + ("ARABIC LIGATURE THEH WITH YEH ISOLATED FORM" #xFC14) + ("ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM" #xFC15) + ("ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM" #xFC16) + ("ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM" #xFC17) + ("ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM" #xFC18) + ("ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM" #xFC19) + ("ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM" #xFC1A) + ("ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM" #xFC1B) + ("ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM" #xFC1C) + ("ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM" #xFC1D) + ("ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM" #xFC1E) + ("ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM" #xFC1F) + ("ARABIC LIGATURE SAD WITH HAH ISOLATED FORM" #xFC20) + ("ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM" #xFC21) + ("ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM" #xFC22) + ("ARABIC LIGATURE DAD WITH HAH ISOLATED FORM" #xFC23) + ("ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM" #xFC24) + ("ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM" #xFC25) + ("ARABIC LIGATURE TAH WITH HAH ISOLATED FORM" #xFC26) + ("ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM" #xFC27) + ("ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM" #xFC28) + ("ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM" #xFC29) + ("ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM" #xFC2A) + ("ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM" #xFC2B) + ("ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM" #xFC2C) + ("ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM" #xFC2D) + ("ARABIC LIGATURE FEH WITH HAH ISOLATED FORM" #xFC2E) + ("ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM" #xFC2F) + ("ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM" #xFC30) + ("ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM" #xFC31) + ("ARABIC LIGATURE FEH WITH YEH ISOLATED FORM" #xFC32) + ("ARABIC LIGATURE QAF WITH HAH ISOLATED FORM" #xFC33) + ("ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM" #xFC34) + ("ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM" #xFC35) + ("ARABIC LIGATURE QAF WITH YEH ISOLATED FORM" #xFC36) + ("ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM" #xFC37) + ("ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM" #xFC38) + ("ARABIC LIGATURE KAF WITH HAH ISOLATED FORM" #xFC39) + ("ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM" #xFC3A) + ("ARABIC LIGATURE KAF WITH LAM ISOLATED FORM" #xFC3B) + ("ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM" #xFC3C) + ("ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM" #xFC3D) + ("ARABIC LIGATURE KAF WITH YEH ISOLATED FORM" #xFC3E) + ("ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM" #xFC3F) + ("ARABIC LIGATURE LAM WITH HAH ISOLATED FORM" #xFC40) + ("ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM" #xFC41) + ("ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM" #xFC42) + ("ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM" #xFC43) + ("ARABIC LIGATURE LAM WITH YEH ISOLATED FORM" #xFC44) + ("ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM" #xFC45) + ("ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM" #xFC46) + ("ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM" #xFC47) + ("ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM" #xFC48) + ("ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM" #xFC49) + ("ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM" #xFC4A) + ("ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM" #xFC4B) + ("ARABIC LIGATURE NOON WITH HAH ISOLATED FORM" #xFC4C) + ("ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM" #xFC4D) + ("ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM" #xFC4E) + ("ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM" #xFC4F) + ("ARABIC LIGATURE NOON WITH YEH ISOLATED FORM" #xFC50) + ("ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM" #xFC51) + ("ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM" #xFC52) + ("ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM" #xFC53) + ("ARABIC LIGATURE HEH WITH YEH ISOLATED FORM" #xFC54) + ("ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM" #xFC55) + ("ARABIC LIGATURE YEH WITH HAH ISOLATED FORM" #xFC56) + ("ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM" #xFC57) + ("ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM" #xFC58) + ("ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM" #xFC59) + ("ARABIC LIGATURE YEH WITH YEH ISOLATED FORM" #xFC5A) + ("ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM" #xFC5B) + ("ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM" #xFC5C) + ("ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM" #xFC5D) + ("ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM" #xFC5E) + ("ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM" #xFC5F) + ("ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM" #xFC60) + ("ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM" #xFC61) + ("ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM" #xFC62) + ("ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM" #xFC63) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM" #xFC64) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM" #xFC65) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM" #xFC66) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM" #xFC67) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM" #xFC68) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM" #xFC69) + ("ARABIC LIGATURE BEH WITH REH FINAL FORM" #xFC6A) + ("ARABIC LIGATURE BEH WITH ZAIN FINAL FORM" #xFC6B) + ("ARABIC LIGATURE BEH WITH MEEM FINAL FORM" #xFC6C) + ("ARABIC LIGATURE BEH WITH NOON FINAL FORM" #xFC6D) + ("ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM" #xFC6E) + ("ARABIC LIGATURE BEH WITH YEH FINAL FORM" #xFC6F) + ("ARABIC LIGATURE TEH WITH REH FINAL FORM" #xFC70) + ("ARABIC LIGATURE TEH WITH ZAIN FINAL FORM" #xFC71) + ("ARABIC LIGATURE TEH WITH MEEM FINAL FORM" #xFC72) + ("ARABIC LIGATURE TEH WITH NOON FINAL FORM" #xFC73) + ("ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM" #xFC74) + ("ARABIC LIGATURE TEH WITH YEH FINAL FORM" #xFC75) + ("ARABIC LIGATURE THEH WITH REH FINAL FORM" #xFC76) + ("ARABIC LIGATURE THEH WITH ZAIN FINAL FORM" #xFC77) + ("ARABIC LIGATURE THEH WITH MEEM FINAL FORM" #xFC78) + ("ARABIC LIGATURE THEH WITH NOON FINAL FORM" #xFC79) + ("ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM" #xFC7A) + ("ARABIC LIGATURE THEH WITH YEH FINAL FORM" #xFC7B) + ("ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM" #xFC7C) + ("ARABIC LIGATURE FEH WITH YEH FINAL FORM" #xFC7D) + ("ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM" #xFC7E) + ("ARABIC LIGATURE QAF WITH YEH FINAL FORM" #xFC7F) + ("ARABIC LIGATURE KAF WITH ALEF FINAL FORM" #xFC80) + ("ARABIC LIGATURE KAF WITH LAM FINAL FORM" #xFC81) + ("ARABIC LIGATURE KAF WITH MEEM FINAL FORM" #xFC82) + ("ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM" #xFC83) + ("ARABIC LIGATURE KAF WITH YEH FINAL FORM" #xFC84) + ("ARABIC LIGATURE LAM WITH MEEM FINAL FORM" #xFC85) + ("ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM" #xFC86) + ("ARABIC LIGATURE LAM WITH YEH FINAL FORM" #xFC87) + ("ARABIC LIGATURE MEEM WITH ALEF FINAL FORM" #xFC88) + ("ARABIC LIGATURE MEEM WITH MEEM FINAL FORM" #xFC89) + ("ARABIC LIGATURE NOON WITH REH FINAL FORM" #xFC8A) + ("ARABIC LIGATURE NOON WITH ZAIN FINAL FORM" #xFC8B) + ("ARABIC LIGATURE NOON WITH MEEM FINAL FORM" #xFC8C) + ("ARABIC LIGATURE NOON WITH NOON FINAL FORM" #xFC8D) + ("ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM" #xFC8E) + ("ARABIC LIGATURE NOON WITH YEH FINAL FORM" #xFC8F) + ("ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM" #xFC90) + ("ARABIC LIGATURE YEH WITH REH FINAL FORM" #xFC91) + ("ARABIC LIGATURE YEH WITH ZAIN FINAL FORM" #xFC92) + ("ARABIC LIGATURE YEH WITH MEEM FINAL FORM" #xFC93) + ("ARABIC LIGATURE YEH WITH NOON FINAL FORM" #xFC94) + ("ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM" #xFC95) + ("ARABIC LIGATURE YEH WITH YEH FINAL FORM" #xFC96) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM" #xFC97) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM" #xFC98) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM" #xFC99) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM" #xFC9A) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM" #xFC9B) + ("ARABIC LIGATURE BEH WITH JEEM INITIAL FORM" #xFC9C) + ("ARABIC LIGATURE BEH WITH HAH INITIAL FORM" #xFC9D) + ("ARABIC LIGATURE BEH WITH KHAH INITIAL FORM" #xFC9E) + ("ARABIC LIGATURE BEH WITH MEEM INITIAL FORM" #xFC9F) + ("ARABIC LIGATURE BEH WITH HEH INITIAL FORM" #xFCA0) + ("ARABIC LIGATURE TEH WITH JEEM INITIAL FORM" #xFCA1) + ("ARABIC LIGATURE TEH WITH HAH INITIAL FORM" #xFCA2) + ("ARABIC LIGATURE TEH WITH KHAH INITIAL FORM" #xFCA3) + ("ARABIC LIGATURE TEH WITH MEEM INITIAL FORM" #xFCA4) + ("ARABIC LIGATURE TEH WITH HEH INITIAL FORM" #xFCA5) + ("ARABIC LIGATURE THEH WITH MEEM INITIAL FORM" #xFCA6) + ("ARABIC LIGATURE JEEM WITH HAH INITIAL FORM" #xFCA7) + ("ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM" #xFCA8) + ("ARABIC LIGATURE HAH WITH JEEM INITIAL FORM" #xFCA9) + ("ARABIC LIGATURE HAH WITH MEEM INITIAL FORM" #xFCAA) + ("ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM" #xFCAB) + ("ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM" #xFCAC) + ("ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM" #xFCAD) + ("ARABIC LIGATURE SEEN WITH HAH INITIAL FORM" #xFCAE) + ("ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM" #xFCAF) + ("ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM" #xFCB0) + ("ARABIC LIGATURE SAD WITH HAH INITIAL FORM" #xFCB1) + ("ARABIC LIGATURE SAD WITH KHAH INITIAL FORM" #xFCB2) + ("ARABIC LIGATURE SAD WITH MEEM INITIAL FORM" #xFCB3) + ("ARABIC LIGATURE DAD WITH JEEM INITIAL FORM" #xFCB4) + ("ARABIC LIGATURE DAD WITH HAH INITIAL FORM" #xFCB5) + ("ARABIC LIGATURE DAD WITH KHAH INITIAL FORM" #xFCB6) + ("ARABIC LIGATURE DAD WITH MEEM INITIAL FORM" #xFCB7) + ("ARABIC LIGATURE TAH WITH HAH INITIAL FORM" #xFCB8) + ("ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM" #xFCB9) + ("ARABIC LIGATURE AIN WITH JEEM INITIAL FORM" #xFCBA) + ("ARABIC LIGATURE AIN WITH MEEM INITIAL FORM" #xFCBB) + ("ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM" #xFCBC) + ("ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM" #xFCBD) + ("ARABIC LIGATURE FEH WITH JEEM INITIAL FORM" #xFCBE) + ("ARABIC LIGATURE FEH WITH HAH INITIAL FORM" #xFCBF) + ("ARABIC LIGATURE FEH WITH KHAH INITIAL FORM" #xFCC0) + ("ARABIC LIGATURE FEH WITH MEEM INITIAL FORM" #xFCC1) + ("ARABIC LIGATURE QAF WITH HAH INITIAL FORM" #xFCC2) + ("ARABIC LIGATURE QAF WITH MEEM INITIAL FORM" #xFCC3) + ("ARABIC LIGATURE KAF WITH JEEM INITIAL FORM" #xFCC4) + ("ARABIC LIGATURE KAF WITH HAH INITIAL FORM" #xFCC5) + ("ARABIC LIGATURE KAF WITH KHAH INITIAL FORM" #xFCC6) + ("ARABIC LIGATURE KAF WITH LAM INITIAL FORM" #xFCC7) + ("ARABIC LIGATURE KAF WITH MEEM INITIAL FORM" #xFCC8) + ("ARABIC LIGATURE LAM WITH JEEM INITIAL FORM" #xFCC9) + ("ARABIC LIGATURE LAM WITH HAH INITIAL FORM" #xFCCA) + ("ARABIC LIGATURE LAM WITH KHAH INITIAL FORM" #xFCCB) + ("ARABIC LIGATURE LAM WITH MEEM INITIAL FORM" #xFCCC) + ("ARABIC LIGATURE LAM WITH HEH INITIAL FORM" #xFCCD) + ("ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM" #xFCCE) + ("ARABIC LIGATURE MEEM WITH HAH INITIAL FORM" #xFCCF) + ("ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM" #xFCD0) + ("ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM" #xFCD1) + ("ARABIC LIGATURE NOON WITH JEEM INITIAL FORM" #xFCD2) + ("ARABIC LIGATURE NOON WITH HAH INITIAL FORM" #xFCD3) + ("ARABIC LIGATURE NOON WITH KHAH INITIAL FORM" #xFCD4) + ("ARABIC LIGATURE NOON WITH MEEM INITIAL FORM" #xFCD5) + ("ARABIC LIGATURE NOON WITH HEH INITIAL FORM" #xFCD6) + ("ARABIC LIGATURE HEH WITH JEEM INITIAL FORM" #xFCD7) + ("ARABIC LIGATURE HEH WITH MEEM INITIAL FORM" #xFCD8) + ("ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM" #xFCD9) + ("ARABIC LIGATURE YEH WITH JEEM INITIAL FORM" #xFCDA) + ("ARABIC LIGATURE YEH WITH HAH INITIAL FORM" #xFCDB) + ("ARABIC LIGATURE YEH WITH KHAH INITIAL FORM" #xFCDC) + ("ARABIC LIGATURE YEH WITH MEEM INITIAL FORM" #xFCDD) + ("ARABIC LIGATURE YEH WITH HEH INITIAL FORM" #xFCDE) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM" #xFCDF) + ("ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM" #xFCE0) + ("ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM" #xFCE1) + ("ARABIC LIGATURE BEH WITH HEH MEDIAL FORM" #xFCE2) + ("ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM" #xFCE3) + ("ARABIC LIGATURE TEH WITH HEH MEDIAL FORM" #xFCE4) + ("ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM" #xFCE5) + ("ARABIC LIGATURE THEH WITH HEH MEDIAL FORM" #xFCE6) + ("ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM" #xFCE7) + ("ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM" #xFCE8) + ("ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM" #xFCE9) + ("ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM" #xFCEA) + ("ARABIC LIGATURE KAF WITH LAM MEDIAL FORM" #xFCEB) + ("ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM" #xFCEC) + ("ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM" #xFCED) + ("ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM" #xFCEE) + ("ARABIC LIGATURE NOON WITH HEH MEDIAL FORM" #xFCEF) + ("ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM" #xFCF0) + ("ARABIC LIGATURE YEH WITH HEH MEDIAL FORM" #xFCF1) + ("ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM" #xFCF2) + ("ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM" #xFCF3) + ("ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM" #xFCF4) + ("ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM" #xFCF5) + ("ARABIC LIGATURE TAH WITH YEH ISOLATED FORM" #xFCF6) + ("ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM" #xFCF7) + ("ARABIC LIGATURE AIN WITH YEH ISOLATED FORM" #xFCF8) + ("ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM" #xFCF9) + ("ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM" #xFCFA) + ("ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM" #xFCFB) + ("ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM" #xFCFC) + ("ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM" #xFCFD) + ("ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM" #xFCFE) + ("ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM" #xFCFF) + ("ARABIC LIGATURE HAH WITH YEH ISOLATED FORM" #xFD00) + ("ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM" #xFD01) + ("ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM" #xFD02) + ("ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM" #xFD03) + ("ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM" #xFD04) + ("ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM" #xFD05) + ("ARABIC LIGATURE SAD WITH YEH ISOLATED FORM" #xFD06) + ("ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM" #xFD07) + ("ARABIC LIGATURE DAD WITH YEH ISOLATED FORM" #xFD08) + ("ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM" #xFD09) + ("ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM" #xFD0A) + ("ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM" #xFD0B) + ("ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM" #xFD0C) + ("ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM" #xFD0D) + ("ARABIC LIGATURE SEEN WITH REH ISOLATED FORM" #xFD0E) + ("ARABIC LIGATURE SAD WITH REH ISOLATED FORM" #xFD0F) + ("ARABIC LIGATURE DAD WITH REH ISOLATED FORM" #xFD10) + ("ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM" #xFD11) + ("ARABIC LIGATURE TAH WITH YEH FINAL FORM" #xFD12) + ("ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM" #xFD13) + ("ARABIC LIGATURE AIN WITH YEH FINAL FORM" #xFD14) + ("ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM" #xFD15) + ("ARABIC LIGATURE GHAIN WITH YEH FINAL FORM" #xFD16) + ("ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM" #xFD17) + ("ARABIC LIGATURE SEEN WITH YEH FINAL FORM" #xFD18) + ("ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM" #xFD19) + ("ARABIC LIGATURE SHEEN WITH YEH FINAL FORM" #xFD1A) + ("ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM" #xFD1B) + ("ARABIC LIGATURE HAH WITH YEH FINAL FORM" #xFD1C) + ("ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM" #xFD1D) + ("ARABIC LIGATURE JEEM WITH YEH FINAL FORM" #xFD1E) + ("ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM" #xFD1F) + ("ARABIC LIGATURE KHAH WITH YEH FINAL FORM" #xFD20) + ("ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM" #xFD21) + ("ARABIC LIGATURE SAD WITH YEH FINAL FORM" #xFD22) + ("ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM" #xFD23) + ("ARABIC LIGATURE DAD WITH YEH FINAL FORM" #xFD24) + ("ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM" #xFD25) + ("ARABIC LIGATURE SHEEN WITH HAH FINAL FORM" #xFD26) + ("ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM" #xFD27) + ("ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM" #xFD28) + ("ARABIC LIGATURE SHEEN WITH REH FINAL FORM" #xFD29) + ("ARABIC LIGATURE SEEN WITH REH FINAL FORM" #xFD2A) + ("ARABIC LIGATURE SAD WITH REH FINAL FORM" #xFD2B) + ("ARABIC LIGATURE DAD WITH REH FINAL FORM" #xFD2C) + ("ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM" #xFD2D) + ("ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM" #xFD2E) + ("ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM" #xFD2F) + ("ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM" #xFD30) + ("ARABIC LIGATURE SEEN WITH HEH INITIAL FORM" #xFD31) + ("ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM" #xFD32) + ("ARABIC LIGATURE TAH WITH MEEM INITIAL FORM" #xFD33) + ("ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM" #xFD34) + ("ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM" #xFD35) + ("ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM" #xFD36) + ("ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM" #xFD37) + ("ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM" #xFD38) + ("ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM" #xFD39) + ("ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM" #xFD3A) + ("ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM" #xFD3B) + ("ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM" #xFD3C) + ("ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM" #xFD3D) + ("ORNATE LEFT PARENTHESIS" #xFD3E) + ("ORNATE RIGHT PARENTHESIS" #xFD3F) + ("ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM" #xFD50) + ("ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM" #xFD51) + ("ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM" #xFD52) + ("ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM" #xFD53) + ("ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM" #xFD54) + ("ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM" #xFD55) + ("ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM" #xFD56) + ("ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM" #xFD57) + ("ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM" #xFD58) + ("ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM" #xFD59) + ("ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM" #xFD5A) + ("ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM" #xFD5B) + ("ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM" #xFD5C) + ("ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM" #xFD5D) + ("ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM" #xFD5E) + ("ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM" #xFD5F) + ("ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM" #xFD60) + ("ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM" #xFD61) + ("ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM" #xFD62) + ("ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM" #xFD63) + ("ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM" #xFD64) + ("ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM" #xFD65) + ("ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM" #xFD66) + ("ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM" #xFD67) + ("ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM" #xFD68) + ("ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM" #xFD69) + ("ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM" #xFD6A) + ("ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM" #xFD6B) + ("ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM" #xFD6C) + ("ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM" #xFD6D) + ("ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM" #xFD6E) + ("ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM" #xFD6F) + ("ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM" #xFD70) + ("ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM" #xFD71) + ("ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM" #xFD72) + ("ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM" #xFD73) + ("ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM" #xFD74) + ("ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM" #xFD75) + ("ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM" #xFD76) + ("ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM" #xFD77) + ("ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM" #xFD78) + ("ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM" #xFD79) + ("ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM" #xFD7A) + ("ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM" #xFD7B) + ("ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM" #xFD7C) + ("ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM" #xFD7D) + ("ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM" #xFD7E) + ("ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM" #xFD7F) + ("ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM" #xFD80) + ("ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM" #xFD81) + ("ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM" #xFD82) + ("ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM" #xFD83) + ("ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM" #xFD84) + ("ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM" #xFD85) + ("ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM" #xFD86) + ("ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM" #xFD87) + ("ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM" #xFD88) + ("ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM" #xFD89) + ("ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM" #xFD8A) + ("ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM" #xFD8B) + ("ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM" #xFD8C) + ("ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM" #xFD8D) + ("ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM" #xFD8E) + ("ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM" #xFD8F) + ("ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM" #xFD92) + ("ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM" #xFD93) + ("ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM" #xFD94) + ("ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM" #xFD95) + ("ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM" #xFD96) + ("ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM" #xFD97) + ("ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM" #xFD98) + ("ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM" #xFD99) + ("ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM" #xFD9A) + ("ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM" #xFD9B) + ("ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM" #xFD9C) + ("ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM" #xFD9D) + ("ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM" #xFD9E) + ("ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM" #xFD9F) + ("ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM" #xFDA0) + ("ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM" #xFDA1) + ("ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM" #xFDA2) + ("ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM" #xFDA3) + ("ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM" #xFDA4) + ("ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM" #xFDA5) + ("ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM" #xFDA6) + ("ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM" #xFDA7) + ("ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM" #xFDA8) + ("ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM" #xFDA9) + ("ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM" #xFDAA) + ("ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM" #xFDAB) + ("ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM" #xFDAC) + ("ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM" #xFDAD) + ("ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM" #xFDAE) + ("ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM" #xFDAF) + ("ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM" #xFDB0) + ("ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM" #xFDB1) + ("ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM" #xFDB2) + ("ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM" #xFDB3) + ("ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM" #xFDB4) + ("ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM" #xFDB5) + ("ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM" #xFDB6) + ("ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM" #xFDB7) + ("ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM" #xFDB8) + ("ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM" #xFDB9) + ("ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM" #xFDBA) + ("ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM" #xFDBB) + ("ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM" #xFDBC) + ("ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM" #xFDBD) + ("ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM" #xFDBE) + ("ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM" #xFDBF) + ("ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM" #xFDC0) + ("ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM" #xFDC1) + ("ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM" #xFDC2) + ("ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM" #xFDC3) + ("ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM" #xFDC4) + ("ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM" #xFDC5) + ("ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM" #xFDC6) + ("ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM" #xFDC7) + ("ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM" #xFDF0) + ("ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM" #xFDF1) + ("ARABIC LIGATURE ALLAH ISOLATED FORM" #xFDF2) + ("ARABIC LIGATURE AKBAR ISOLATED FORM" #xFDF3) + ("ARABIC LIGATURE MOHAMMAD ISOLATED FORM" #xFDF4) + ("ARABIC LIGATURE SALAM ISOLATED FORM" #xFDF5) + ("ARABIC LIGATURE RASOUL ISOLATED FORM" #xFDF6) + ("ARABIC LIGATURE ALAYHE ISOLATED FORM" #xFDF7) + ("ARABIC LIGATURE WASALLAM ISOLATED FORM" #xFDF8) + ("ARABIC LIGATURE SALLA ISOLATED FORM" #xFDF9) + ("ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM" #xFDFA) + ("ARABIC LIGATURE JALLAJALALOUHOU" #xFDFB) + ("RIAL SIGN" #xFDFC) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/0FE00-0FE0F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,18 @@ +(nxml-define-char-name-set 'variation-selectors + '(("VARIATION SELECTOR-1" #xFE00) + ("VARIATION SELECTOR-2" #xFE01) + ("VARIATION SELECTOR-3" #xFE02) + ("VARIATION SELECTOR-4" #xFE03) + ("VARIATION SELECTOR-5" #xFE04) + ("VARIATION SELECTOR-6" #xFE05) + ("VARIATION SELECTOR-7" #xFE06) + ("VARIATION SELECTOR-8" #xFE07) + ("VARIATION SELECTOR-9" #xFE08) + ("VARIATION SELECTOR-10" #xFE09) + ("VARIATION SELECTOR-11" #xFE0A) + ("VARIATION SELECTOR-12" #xFE0B) + ("VARIATION SELECTOR-13" #xFE0C) + ("VARIATION SELECTOR-14" #xFE0D) + ("VARIATION SELECTOR-15" #xFE0E) + ("VARIATION SELECTOR-16" #xFE0F) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/0FE20-0FE2F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,6 @@ +(nxml-define-char-name-set 'combining-half-marks + '(("COMBINING LIGATURE LEFT HALF" #xFE20) + ("COMBINING LIGATURE RIGHT HALF" #xFE21) + ("COMBINING DOUBLE TILDE LEFT HALF" #xFE22) + ("COMBINING DOUBLE TILDE RIGHT HALF" #xFE23) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/0FE30-0FE4F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,32 @@ +(nxml-define-char-name-set 'cjk-compatibility-forms + '(("PRESENTATION FORM FOR VERTICAL TWO DOT LEADER" #xFE30) + ("PRESENTATION FORM FOR VERTICAL EM DASH" #xFE31) + ("PRESENTATION FORM FOR VERTICAL EN DASH" #xFE32) + ("PRESENTATION FORM FOR VERTICAL LOW LINE" #xFE33) + ("PRESENTATION FORM FOR VERTICAL WAVY LOW LINE" #xFE34) + ("PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS" #xFE35) + ("PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS" #xFE36) + ("PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET" #xFE37) + ("PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET" #xFE38) + ("PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET" #xFE39) + ("PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET" #xFE3A) + ("PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET" #xFE3B) + ("PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET" #xFE3C) + ("PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET" #xFE3D) + ("PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET" #xFE3E) + ("PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET" #xFE3F) + ("PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET" #xFE40) + ("PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET" #xFE41) + ("PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET" #xFE42) + ("PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET" #xFE43) + ("PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET" #xFE44) + ("SESAME DOT" #xFE45) + ("WHITE SESAME DOT" #xFE46) + ("DASHED OVERLINE" #xFE49) + ("CENTRELINE OVERLINE" #xFE4A) + ("WAVY OVERLINE" #xFE4B) + ("DOUBLE WAVY OVERLINE" #xFE4C) + ("DASHED LOW LINE" #xFE4D) + ("CENTRELINE LOW LINE" #xFE4E) + ("WAVY LOW LINE" #xFE4F) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/0FE50-0FE6F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,28 @@ +(nxml-define-char-name-set 'small-form-variants + '(("SMALL COMMA" #xFE50) + ("SMALL IDEOGRAPHIC COMMA" #xFE51) + ("SMALL FULL STOP" #xFE52) + ("SMALL SEMICOLON" #xFE54) + ("SMALL COLON" #xFE55) + ("SMALL QUESTION MARK" #xFE56) + ("SMALL EXCLAMATION MARK" #xFE57) + ("SMALL EM DASH" #xFE58) + ("SMALL LEFT PARENTHESIS" #xFE59) + ("SMALL RIGHT PARENTHESIS" #xFE5A) + ("SMALL LEFT CURLY BRACKET" #xFE5B) + ("SMALL RIGHT CURLY BRACKET" #xFE5C) + ("SMALL LEFT TORTOISE SHELL BRACKET" #xFE5D) + ("SMALL RIGHT TORTOISE SHELL BRACKET" #xFE5E) + ("SMALL NUMBER SIGN" #xFE5F) + ("SMALL AMPERSAND" #xFE60) + ("SMALL ASTERISK" #xFE61) + ("SMALL PLUS SIGN" #xFE62) + ("SMALL HYPHEN-MINUS" #xFE63) + ("SMALL LESS-THAN SIGN" #xFE64) + ("SMALL GREATER-THAN SIGN" #xFE65) + ("SMALL EQUALS SIGN" #xFE66) + ("SMALL REVERSE SOLIDUS" #xFE68) + ("SMALL DOLLAR SIGN" #xFE69) + ("SMALL PERCENT SIGN" #xFE6A) + ("SMALL COMMERCIAL AT" #xFE6B) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/0FE70-0FEFF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,143 @@ +(nxml-define-char-name-set 'arabic-presentation-forms-b + '(("ARABIC FATHATAN ISOLATED FORM" #xFE70) + ("ARABIC TATWEEL WITH FATHATAN ABOVE" #xFE71) + ("ARABIC DAMMATAN ISOLATED FORM" #xFE72) + ("ARABIC TAIL FRAGMENT" #xFE73) + ("ARABIC KASRATAN ISOLATED FORM" #xFE74) + ("ARABIC FATHA ISOLATED FORM" #xFE76) + ("ARABIC FATHA MEDIAL FORM" #xFE77) + ("ARABIC DAMMA ISOLATED FORM" #xFE78) + ("ARABIC DAMMA MEDIAL FORM" #xFE79) + ("ARABIC KASRA ISOLATED FORM" #xFE7A) + ("ARABIC KASRA MEDIAL FORM" #xFE7B) + ("ARABIC SHADDA ISOLATED FORM" #xFE7C) + ("ARABIC SHADDA MEDIAL FORM" #xFE7D) + ("ARABIC SUKUN ISOLATED FORM" #xFE7E) + ("ARABIC SUKUN MEDIAL FORM" #xFE7F) + ("ARABIC LETTER HAMZA ISOLATED FORM" #xFE80) + ("ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM" #xFE81) + ("ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM" #xFE82) + ("ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM" #xFE83) + ("ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM" #xFE84) + ("ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM" #xFE85) + ("ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM" #xFE86) + ("ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM" #xFE87) + ("ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM" #xFE88) + ("ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM" #xFE89) + ("ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM" #xFE8A) + ("ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM" #xFE8B) + ("ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM" #xFE8C) + ("ARABIC LETTER ALEF ISOLATED FORM" #xFE8D) + ("ARABIC LETTER ALEF FINAL FORM" #xFE8E) + ("ARABIC LETTER BEH ISOLATED FORM" #xFE8F) + ("ARABIC LETTER BEH FINAL FORM" #xFE90) + ("ARABIC LETTER BEH INITIAL FORM" #xFE91) + ("ARABIC LETTER BEH MEDIAL FORM" #xFE92) + ("ARABIC LETTER TEH MARBUTA ISOLATED FORM" #xFE93) + ("ARABIC LETTER TEH MARBUTA FINAL FORM" #xFE94) + ("ARABIC LETTER TEH ISOLATED FORM" #xFE95) + ("ARABIC LETTER TEH FINAL FORM" #xFE96) + ("ARABIC LETTER TEH INITIAL FORM" #xFE97) + ("ARABIC LETTER TEH MEDIAL FORM" #xFE98) + ("ARABIC LETTER THEH ISOLATED FORM" #xFE99) + ("ARABIC LETTER THEH FINAL FORM" #xFE9A) + ("ARABIC LETTER THEH INITIAL FORM" #xFE9B) + ("ARABIC LETTER THEH MEDIAL FORM" #xFE9C) + ("ARABIC LETTER JEEM ISOLATED FORM" #xFE9D) + ("ARABIC LETTER JEEM FINAL FORM" #xFE9E) + ("ARABIC LETTER JEEM INITIAL FORM" #xFE9F) + ("ARABIC LETTER JEEM MEDIAL FORM" #xFEA0) + ("ARABIC LETTER HAH ISOLATED FORM" #xFEA1) + ("ARABIC LETTER HAH FINAL FORM" #xFEA2) + ("ARABIC LETTER HAH INITIAL FORM" #xFEA3) + ("ARABIC LETTER HAH MEDIAL FORM" #xFEA4) + ("ARABIC LETTER KHAH ISOLATED FORM" #xFEA5) + ("ARABIC LETTER KHAH FINAL FORM" #xFEA6) + ("ARABIC LETTER KHAH INITIAL FORM" #xFEA7) + ("ARABIC LETTER KHAH MEDIAL FORM" #xFEA8) + ("ARABIC LETTER DAL ISOLATED FORM" #xFEA9) + ("ARABIC LETTER DAL FINAL FORM" #xFEAA) + ("ARABIC LETTER THAL ISOLATED FORM" #xFEAB) + ("ARABIC LETTER THAL FINAL FORM" #xFEAC) + ("ARABIC LETTER REH ISOLATED FORM" #xFEAD) + ("ARABIC LETTER REH FINAL FORM" #xFEAE) + ("ARABIC LETTER ZAIN ISOLATED FORM" #xFEAF) + ("ARABIC LETTER ZAIN FINAL FORM" #xFEB0) + ("ARABIC LETTER SEEN ISOLATED FORM" #xFEB1) + ("ARABIC LETTER SEEN FINAL FORM" #xFEB2) + ("ARABIC LETTER SEEN INITIAL FORM" #xFEB3) + ("ARABIC LETTER SEEN MEDIAL FORM" #xFEB4) + ("ARABIC LETTER SHEEN ISOLATED FORM" #xFEB5) + ("ARABIC LETTER SHEEN FINAL FORM" #xFEB6) + ("ARABIC LETTER SHEEN INITIAL FORM" #xFEB7) + ("ARABIC LETTER SHEEN MEDIAL FORM" #xFEB8) + ("ARABIC LETTER SAD ISOLATED FORM" #xFEB9) + ("ARABIC LETTER SAD FINAL FORM" #xFEBA) + ("ARABIC LETTER SAD INITIAL FORM" #xFEBB) + ("ARABIC LETTER SAD MEDIAL FORM" #xFEBC) + ("ARABIC LETTER DAD ISOLATED FORM" #xFEBD) + ("ARABIC LETTER DAD FINAL FORM" #xFEBE) + ("ARABIC LETTER DAD INITIAL FORM" #xFEBF) + ("ARABIC LETTER DAD MEDIAL FORM" #xFEC0) + ("ARABIC LETTER TAH ISOLATED FORM" #xFEC1) + ("ARABIC LETTER TAH FINAL FORM" #xFEC2) + ("ARABIC LETTER TAH INITIAL FORM" #xFEC3) + ("ARABIC LETTER TAH MEDIAL FORM" #xFEC4) + ("ARABIC LETTER ZAH ISOLATED FORM" #xFEC5) + ("ARABIC LETTER ZAH FINAL FORM" #xFEC6) + ("ARABIC LETTER ZAH INITIAL FORM" #xFEC7) + ("ARABIC LETTER ZAH MEDIAL FORM" #xFEC8) + ("ARABIC LETTER AIN ISOLATED FORM" #xFEC9) + ("ARABIC LETTER AIN FINAL FORM" #xFECA) + ("ARABIC LETTER AIN INITIAL FORM" #xFECB) + ("ARABIC LETTER AIN MEDIAL FORM" #xFECC) + ("ARABIC LETTER GHAIN ISOLATED FORM" #xFECD) + ("ARABIC LETTER GHAIN FINAL FORM" #xFECE) + ("ARABIC LETTER GHAIN INITIAL FORM" #xFECF) + ("ARABIC LETTER GHAIN MEDIAL FORM" #xFED0) + ("ARABIC LETTER FEH ISOLATED FORM" #xFED1) + ("ARABIC LETTER FEH FINAL FORM" #xFED2) + ("ARABIC LETTER FEH INITIAL FORM" #xFED3) + ("ARABIC LETTER FEH MEDIAL FORM" #xFED4) + ("ARABIC LETTER QAF ISOLATED FORM" #xFED5) + ("ARABIC LETTER QAF FINAL FORM" #xFED6) + ("ARABIC LETTER QAF INITIAL FORM" #xFED7) + ("ARABIC LETTER QAF MEDIAL FORM" #xFED8) + ("ARABIC LETTER KAF ISOLATED FORM" #xFED9) + ("ARABIC LETTER KAF FINAL FORM" #xFEDA) + ("ARABIC LETTER KAF INITIAL FORM" #xFEDB) + ("ARABIC LETTER KAF MEDIAL FORM" #xFEDC) + ("ARABIC LETTER LAM ISOLATED FORM" #xFEDD) + ("ARABIC LETTER LAM FINAL FORM" #xFEDE) + ("ARABIC LETTER LAM INITIAL FORM" #xFEDF) + ("ARABIC LETTER LAM MEDIAL FORM" #xFEE0) + ("ARABIC LETTER MEEM ISOLATED FORM" #xFEE1) + ("ARABIC LETTER MEEM FINAL FORM" #xFEE2) + ("ARABIC LETTER MEEM INITIAL FORM" #xFEE3) + ("ARABIC LETTER MEEM MEDIAL FORM" #xFEE4) + ("ARABIC LETTER NOON ISOLATED FORM" #xFEE5) + ("ARABIC LETTER NOON FINAL FORM" #xFEE6) + ("ARABIC LETTER NOON INITIAL FORM" #xFEE7) + ("ARABIC LETTER NOON MEDIAL FORM" #xFEE8) + ("ARABIC LETTER HEH ISOLATED FORM" #xFEE9) + ("ARABIC LETTER HEH FINAL FORM" #xFEEA) + ("ARABIC LETTER HEH INITIAL FORM" #xFEEB) + ("ARABIC LETTER HEH MEDIAL FORM" #xFEEC) + ("ARABIC LETTER WAW ISOLATED FORM" #xFEED) + ("ARABIC LETTER WAW FINAL FORM" #xFEEE) + ("ARABIC LETTER ALEF MAKSURA ISOLATED FORM" #xFEEF) + ("ARABIC LETTER ALEF MAKSURA FINAL FORM" #xFEF0) + ("ARABIC LETTER YEH ISOLATED FORM" #xFEF1) + ("ARABIC LETTER YEH FINAL FORM" #xFEF2) + ("ARABIC LETTER YEH INITIAL FORM" #xFEF3) + ("ARABIC LETTER YEH MEDIAL FORM" #xFEF4) + ("ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM" #xFEF5) + ("ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM" #xFEF6) + ("ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM" #xFEF7) + ("ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM" #xFEF8) + ("ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM" #xFEF9) + ("ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM" #xFEFA) + ("ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM" #xFEFB) + ("ARABIC LIGATURE LAM WITH ALEF FINAL FORM" #xFEFC) + ("ZERO WIDTH NO-BREAK SPACE" #xFEFF) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/0FF00-0FFEF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,227 @@ +(nxml-define-char-name-set 'halfwidth-and-fullwidth-forms + '(("FULLWIDTH EXCLAMATION MARK" #xFF01) + ("FULLWIDTH QUOTATION MARK" #xFF02) + ("FULLWIDTH NUMBER SIGN" #xFF03) + ("FULLWIDTH DOLLAR SIGN" #xFF04) + ("FULLWIDTH PERCENT SIGN" #xFF05) + ("FULLWIDTH AMPERSAND" #xFF06) + ("FULLWIDTH APOSTROPHE" #xFF07) + ("FULLWIDTH LEFT PARENTHESIS" #xFF08) + ("FULLWIDTH RIGHT PARENTHESIS" #xFF09) + ("FULLWIDTH ASTERISK" #xFF0A) + ("FULLWIDTH PLUS SIGN" #xFF0B) + ("FULLWIDTH COMMA" #xFF0C) + ("FULLWIDTH HYPHEN-MINUS" #xFF0D) + ("FULLWIDTH FULL STOP" #xFF0E) + ("FULLWIDTH SOLIDUS" #xFF0F) + ("FULLWIDTH DIGIT ZERO" #xFF10) + ("FULLWIDTH DIGIT ONE" #xFF11) + ("FULLWIDTH DIGIT TWO" #xFF12) + ("FULLWIDTH DIGIT THREE" #xFF13) + ("FULLWIDTH DIGIT FOUR" #xFF14) + ("FULLWIDTH DIGIT FIVE" #xFF15) + ("FULLWIDTH DIGIT SIX" #xFF16) + ("FULLWIDTH DIGIT SEVEN" #xFF17) + ("FULLWIDTH DIGIT EIGHT" #xFF18) + ("FULLWIDTH DIGIT NINE" #xFF19) + ("FULLWIDTH COLON" #xFF1A) + ("FULLWIDTH SEMICOLON" #xFF1B) + ("FULLWIDTH LESS-THAN SIGN" #xFF1C) + ("FULLWIDTH EQUALS SIGN" #xFF1D) + ("FULLWIDTH GREATER-THAN SIGN" #xFF1E) + ("FULLWIDTH QUESTION MARK" #xFF1F) + ("FULLWIDTH COMMERCIAL AT" #xFF20) + ("FULLWIDTH LATIN CAPITAL LETTER A" #xFF21) + ("FULLWIDTH LATIN CAPITAL LETTER B" #xFF22) + ("FULLWIDTH LATIN CAPITAL LETTER C" #xFF23) + ("FULLWIDTH LATIN CAPITAL LETTER D" #xFF24) + ("FULLWIDTH LATIN CAPITAL LETTER E" #xFF25) + ("FULLWIDTH LATIN CAPITAL LETTER F" #xFF26) + ("FULLWIDTH LATIN CAPITAL LETTER G" #xFF27) + ("FULLWIDTH LATIN CAPITAL LETTER H" #xFF28) + ("FULLWIDTH LATIN CAPITAL LETTER I" #xFF29) + ("FULLWIDTH LATIN CAPITAL LETTER J" #xFF2A) + ("FULLWIDTH LATIN CAPITAL LETTER K" #xFF2B) + ("FULLWIDTH LATIN CAPITAL LETTER L" #xFF2C) + ("FULLWIDTH LATIN CAPITAL LETTER M" #xFF2D) + ("FULLWIDTH LATIN CAPITAL LETTER N" #xFF2E) + ("FULLWIDTH LATIN CAPITAL LETTER O" #xFF2F) + ("FULLWIDTH LATIN CAPITAL LETTER P" #xFF30) + ("FULLWIDTH LATIN CAPITAL LETTER Q" #xFF31) + ("FULLWIDTH LATIN CAPITAL LETTER R" #xFF32) + ("FULLWIDTH LATIN CAPITAL LETTER S" #xFF33) + ("FULLWIDTH LATIN CAPITAL LETTER T" #xFF34) + ("FULLWIDTH LATIN CAPITAL LETTER U" #xFF35) + ("FULLWIDTH LATIN CAPITAL LETTER V" #xFF36) + ("FULLWIDTH LATIN CAPITAL LETTER W" #xFF37) + ("FULLWIDTH LATIN CAPITAL LETTER X" #xFF38) + ("FULLWIDTH LATIN CAPITAL LETTER Y" #xFF39) + ("FULLWIDTH LATIN CAPITAL LETTER Z" #xFF3A) + ("FULLWIDTH LEFT SQUARE BRACKET" #xFF3B) + ("FULLWIDTH REVERSE SOLIDUS" #xFF3C) + ("FULLWIDTH RIGHT SQUARE BRACKET" #xFF3D) + ("FULLWIDTH CIRCUMFLEX ACCENT" #xFF3E) + ("FULLWIDTH LOW LINE" #xFF3F) + ("FULLWIDTH GRAVE ACCENT" #xFF40) + ("FULLWIDTH LATIN SMALL LETTER A" #xFF41) + ("FULLWIDTH LATIN SMALL LETTER B" #xFF42) + ("FULLWIDTH LATIN SMALL LETTER C" #xFF43) + ("FULLWIDTH LATIN SMALL LETTER D" #xFF44) + ("FULLWIDTH LATIN SMALL LETTER E" #xFF45) + ("FULLWIDTH LATIN SMALL LETTER F" #xFF46) + ("FULLWIDTH LATIN SMALL LETTER G" #xFF47) + ("FULLWIDTH LATIN SMALL LETTER H" #xFF48) + ("FULLWIDTH LATIN SMALL LETTER I" #xFF49) + ("FULLWIDTH LATIN SMALL LETTER J" #xFF4A) + ("FULLWIDTH LATIN SMALL LETTER K" #xFF4B) + ("FULLWIDTH LATIN SMALL LETTER L" #xFF4C) + ("FULLWIDTH LATIN SMALL LETTER M" #xFF4D) + ("FULLWIDTH LATIN SMALL LETTER N" #xFF4E) + ("FULLWIDTH LATIN SMALL LETTER O" #xFF4F) + ("FULLWIDTH LATIN SMALL LETTER P" #xFF50) + ("FULLWIDTH LATIN SMALL LETTER Q" #xFF51) + ("FULLWIDTH LATIN SMALL LETTER R" #xFF52) + ("FULLWIDTH LATIN SMALL LETTER S" #xFF53) + ("FULLWIDTH LATIN SMALL LETTER T" #xFF54) + ("FULLWIDTH LATIN SMALL LETTER U" #xFF55) + ("FULLWIDTH LATIN SMALL LETTER V" #xFF56) + ("FULLWIDTH LATIN SMALL LETTER W" #xFF57) + ("FULLWIDTH LATIN SMALL LETTER X" #xFF58) + ("FULLWIDTH LATIN SMALL LETTER Y" #xFF59) + ("FULLWIDTH LATIN SMALL LETTER Z" #xFF5A) + ("FULLWIDTH LEFT CURLY BRACKET" #xFF5B) + ("FULLWIDTH VERTICAL LINE" #xFF5C) + ("FULLWIDTH RIGHT CURLY BRACKET" #xFF5D) + ("FULLWIDTH TILDE" #xFF5E) + ("FULLWIDTH LEFT WHITE PARENTHESIS" #xFF5F) + ("FULLWIDTH RIGHT WHITE PARENTHESIS" #xFF60) + ("HALFWIDTH IDEOGRAPHIC FULL STOP" #xFF61) + ("HALFWIDTH LEFT CORNER BRACKET" #xFF62) + ("HALFWIDTH RIGHT CORNER BRACKET" #xFF63) + ("HALFWIDTH IDEOGRAPHIC COMMA" #xFF64) + ("HALFWIDTH KATAKANA MIDDLE DOT" #xFF65) + ("HALFWIDTH KATAKANA LETTER WO" #xFF66) + ("HALFWIDTH KATAKANA LETTER SMALL A" #xFF67) + ("HALFWIDTH KATAKANA LETTER SMALL I" #xFF68) + ("HALFWIDTH KATAKANA LETTER SMALL U" #xFF69) + ("HALFWIDTH KATAKANA LETTER SMALL E" #xFF6A) + ("HALFWIDTH KATAKANA LETTER SMALL O" #xFF6B) + ("HALFWIDTH KATAKANA LETTER SMALL YA" #xFF6C) + ("HALFWIDTH KATAKANA LETTER SMALL YU" #xFF6D) + ("HALFWIDTH KATAKANA LETTER SMALL YO" #xFF6E) + ("HALFWIDTH KATAKANA LETTER SMALL TU" #xFF6F) + ("HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK" #xFF70) + ("HALFWIDTH KATAKANA LETTER A" #xFF71) + ("HALFWIDTH KATAKANA LETTER I" #xFF72) + ("HALFWIDTH KATAKANA LETTER U" #xFF73) + ("HALFWIDTH KATAKANA LETTER E" #xFF74) + ("HALFWIDTH KATAKANA LETTER O" #xFF75) + ("HALFWIDTH KATAKANA LETTER KA" #xFF76) + ("HALFWIDTH KATAKANA LETTER KI" #xFF77) + ("HALFWIDTH KATAKANA LETTER KU" #xFF78) + ("HALFWIDTH KATAKANA LETTER KE" #xFF79) + ("HALFWIDTH KATAKANA LETTER KO" #xFF7A) + ("HALFWIDTH KATAKANA LETTER SA" #xFF7B) + ("HALFWIDTH KATAKANA LETTER SI" #xFF7C) + ("HALFWIDTH KATAKANA LETTER SU" #xFF7D) + ("HALFWIDTH KATAKANA LETTER SE" #xFF7E) + ("HALFWIDTH KATAKANA LETTER SO" #xFF7F) + ("HALFWIDTH KATAKANA LETTER TA" #xFF80) + ("HALFWIDTH KATAKANA LETTER TI" #xFF81) + ("HALFWIDTH KATAKANA LETTER TU" #xFF82) + ("HALFWIDTH KATAKANA LETTER TE" #xFF83) + ("HALFWIDTH KATAKANA LETTER TO" #xFF84) + ("HALFWIDTH KATAKANA LETTER NA" #xFF85) + ("HALFWIDTH KATAKANA LETTER NI" #xFF86) + ("HALFWIDTH KATAKANA LETTER NU" #xFF87) + ("HALFWIDTH KATAKANA LETTER NE" #xFF88) + ("HALFWIDTH KATAKANA LETTER NO" #xFF89) + ("HALFWIDTH KATAKANA LETTER HA" #xFF8A) + ("HALFWIDTH KATAKANA LETTER HI" #xFF8B) + ("HALFWIDTH KATAKANA LETTER HU" #xFF8C) + ("HALFWIDTH KATAKANA LETTER HE" #xFF8D) + ("HALFWIDTH KATAKANA LETTER HO" #xFF8E) + ("HALFWIDTH KATAKANA LETTER MA" #xFF8F) + ("HALFWIDTH KATAKANA LETTER MI" #xFF90) + ("HALFWIDTH KATAKANA LETTER MU" #xFF91) + ("HALFWIDTH KATAKANA LETTER ME" #xFF92) + ("HALFWIDTH KATAKANA LETTER MO" #xFF93) + ("HALFWIDTH KATAKANA LETTER YA" #xFF94) + ("HALFWIDTH KATAKANA LETTER YU" #xFF95) + ("HALFWIDTH KATAKANA LETTER YO" #xFF96) + ("HALFWIDTH KATAKANA LETTER RA" #xFF97) + ("HALFWIDTH KATAKANA LETTER RI" #xFF98) + ("HALFWIDTH KATAKANA LETTER RU" #xFF99) + ("HALFWIDTH KATAKANA LETTER RE" #xFF9A) + ("HALFWIDTH KATAKANA LETTER RO" #xFF9B) + ("HALFWIDTH KATAKANA LETTER WA" #xFF9C) + ("HALFWIDTH KATAKANA LETTER N" #xFF9D) + ("HALFWIDTH KATAKANA VOICED SOUND MARK" #xFF9E) + ("HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK" #xFF9F) + ("HALFWIDTH HANGUL FILLER" #xFFA0) + ("HALFWIDTH HANGUL LETTER KIYEOK" #xFFA1) + ("HALFWIDTH HANGUL LETTER SSANGKIYEOK" #xFFA2) + ("HALFWIDTH HANGUL LETTER KIYEOK-SIOS" #xFFA3) + ("HALFWIDTH HANGUL LETTER NIEUN" #xFFA4) + ("HALFWIDTH HANGUL LETTER NIEUN-CIEUC" #xFFA5) + ("HALFWIDTH HANGUL LETTER NIEUN-HIEUH" #xFFA6) + ("HALFWIDTH HANGUL LETTER TIKEUT" #xFFA7) + ("HALFWIDTH HANGUL LETTER SSANGTIKEUT" #xFFA8) + ("HALFWIDTH HANGUL LETTER RIEUL" #xFFA9) + ("HALFWIDTH HANGUL LETTER RIEUL-KIYEOK" #xFFAA) + ("HALFWIDTH HANGUL LETTER RIEUL-MIEUM" #xFFAB) + ("HALFWIDTH HANGUL LETTER RIEUL-PIEUP" #xFFAC) + ("HALFWIDTH HANGUL LETTER RIEUL-SIOS" #xFFAD) + ("HALFWIDTH HANGUL LETTER RIEUL-THIEUTH" #xFFAE) + ("HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH" #xFFAF) + ("HALFWIDTH HANGUL LETTER RIEUL-HIEUH" #xFFB0) + ("HALFWIDTH HANGUL LETTER MIEUM" #xFFB1) + ("HALFWIDTH HANGUL LETTER PIEUP" #xFFB2) + ("HALFWIDTH HANGUL LETTER SSANGPIEUP" #xFFB3) + ("HALFWIDTH HANGUL LETTER PIEUP-SIOS" #xFFB4) + ("HALFWIDTH HANGUL LETTER SIOS" #xFFB5) + ("HALFWIDTH HANGUL LETTER SSANGSIOS" #xFFB6) + ("HALFWIDTH HANGUL LETTER IEUNG" #xFFB7) + ("HALFWIDTH HANGUL LETTER CIEUC" #xFFB8) + ("HALFWIDTH HANGUL LETTER SSANGCIEUC" #xFFB9) + ("HALFWIDTH HANGUL LETTER CHIEUCH" #xFFBA) + ("HALFWIDTH HANGUL LETTER KHIEUKH" #xFFBB) + ("HALFWIDTH HANGUL LETTER THIEUTH" #xFFBC) + ("HALFWIDTH HANGUL LETTER PHIEUPH" #xFFBD) + ("HALFWIDTH HANGUL LETTER HIEUH" #xFFBE) + ("HALFWIDTH HANGUL LETTER A" #xFFC2) + ("HALFWIDTH HANGUL LETTER AE" #xFFC3) + ("HALFWIDTH HANGUL LETTER YA" #xFFC4) + ("HALFWIDTH HANGUL LETTER YAE" #xFFC5) + ("HALFWIDTH HANGUL LETTER EO" #xFFC6) + ("HALFWIDTH HANGUL LETTER E" #xFFC7) + ("HALFWIDTH HANGUL LETTER YEO" #xFFCA) + ("HALFWIDTH HANGUL LETTER YE" #xFFCB) + ("HALFWIDTH HANGUL LETTER O" #xFFCC) + ("HALFWIDTH HANGUL LETTER WA" #xFFCD) + ("HALFWIDTH HANGUL LETTER WAE" #xFFCE) + ("HALFWIDTH HANGUL LETTER OE" #xFFCF) + ("HALFWIDTH HANGUL LETTER YO" #xFFD2) + ("HALFWIDTH HANGUL LETTER U" #xFFD3) + ("HALFWIDTH HANGUL LETTER WEO" #xFFD4) + ("HALFWIDTH HANGUL LETTER WE" #xFFD5) + ("HALFWIDTH HANGUL LETTER WI" #xFFD6) + ("HALFWIDTH HANGUL LETTER YU" #xFFD7) + ("HALFWIDTH HANGUL LETTER EU" #xFFDA) + ("HALFWIDTH HANGUL LETTER YI" #xFFDB) + ("HALFWIDTH HANGUL LETTER I" #xFFDC) + ("FULLWIDTH CENT SIGN" #xFFE0) + ("FULLWIDTH POUND SIGN" #xFFE1) + ("FULLWIDTH NOT SIGN" #xFFE2) + ("FULLWIDTH MACRON" #xFFE3) + ("FULLWIDTH BROKEN BAR" #xFFE4) + ("FULLWIDTH YEN SIGN" #xFFE5) + ("FULLWIDTH WON SIGN" #xFFE6) + ("HALFWIDTH FORMS LIGHT VERTICAL" #xFFE8) + ("HALFWIDTH LEFTWARDS ARROW" #xFFE9) + ("HALFWIDTH UPWARDS ARROW" #xFFEA) + ("HALFWIDTH RIGHTWARDS ARROW" #xFFEB) + ("HALFWIDTH DOWNWARDS ARROW" #xFFEC) + ("HALFWIDTH BLACK SQUARE" #xFFED) + ("HALFWIDTH WHITE CIRCLE" #xFFEE) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/0FFF0-0FFFF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,7 @@ +(nxml-define-char-name-set 'specials + '(("INTERLINEAR ANNOTATION ANCHOR" #xFFF9) + ("INTERLINEAR ANNOTATION SEPARATOR" #xFFFA) + ("INTERLINEAR ANNOTATION TERMINATOR" #xFFFB) + ("OBJECT REPLACEMENT CHARACTER" #xFFFC) + ("REPLACEMENT CHARACTER" #xFFFD) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/10300-1032F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,37 @@ +(nxml-define-char-name-set 'old-italic + '(("OLD ITALIC LETTER A" #x10300) + ("OLD ITALIC LETTER BE" #x10301) + ("OLD ITALIC LETTER KE" #x10302) + ("OLD ITALIC LETTER DE" #x10303) + ("OLD ITALIC LETTER E" #x10304) + ("OLD ITALIC LETTER VE" #x10305) + ("OLD ITALIC LETTER ZE" #x10306) + ("OLD ITALIC LETTER HE" #x10307) + ("OLD ITALIC LETTER THE" #x10308) + ("OLD ITALIC LETTER I" #x10309) + ("OLD ITALIC LETTER KA" #x1030A) + ("OLD ITALIC LETTER EL" #x1030B) + ("OLD ITALIC LETTER EM" #x1030C) + ("OLD ITALIC LETTER EN" #x1030D) + ("OLD ITALIC LETTER ESH" #x1030E) + ("OLD ITALIC LETTER O" #x1030F) + ("OLD ITALIC LETTER PE" #x10310) + ("OLD ITALIC LETTER SHE" #x10311) + ("OLD ITALIC LETTER KU" #x10312) + ("OLD ITALIC LETTER ER" #x10313) + ("OLD ITALIC LETTER ES" #x10314) + ("OLD ITALIC LETTER TE" #x10315) + ("OLD ITALIC LETTER U" #x10316) + ("OLD ITALIC LETTER EKS" #x10317) + ("OLD ITALIC LETTER PHE" #x10318) + ("OLD ITALIC LETTER KHE" #x10319) + ("OLD ITALIC LETTER EF" #x1031A) + ("OLD ITALIC LETTER ERS" #x1031B) + ("OLD ITALIC LETTER CHE" #x1031C) + ("OLD ITALIC LETTER II" #x1031D) + ("OLD ITALIC LETTER UU" #x1031E) + ("OLD ITALIC NUMERAL ONE" #x10320) + ("OLD ITALIC NUMERAL FIVE" #x10321) + ("OLD ITALIC NUMERAL TEN" #x10322) + ("OLD ITALIC NUMERAL FIFTY" #x10323) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/10330-1034F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,29 @@ +(nxml-define-char-name-set 'gothic + '(("GOTHIC LETTER AHSA" #x10330) + ("GOTHIC LETTER BAIRKAN" #x10331) + ("GOTHIC LETTER GIBA" #x10332) + ("GOTHIC LETTER DAGS" #x10333) + ("GOTHIC LETTER AIHVUS" #x10334) + ("GOTHIC LETTER QAIRTHRA" #x10335) + ("GOTHIC LETTER IUJA" #x10336) + ("GOTHIC LETTER HAGL" #x10337) + ("GOTHIC LETTER THIUTH" #x10338) + ("GOTHIC LETTER EIS" #x10339) + ("GOTHIC LETTER KUSMA" #x1033A) + ("GOTHIC LETTER LAGUS" #x1033B) + ("GOTHIC LETTER MANNA" #x1033C) + ("GOTHIC LETTER NAUTHS" #x1033D) + ("GOTHIC LETTER JER" #x1033E) + ("GOTHIC LETTER URUS" #x1033F) + ("GOTHIC LETTER PAIRTHRA" #x10340) + ("GOTHIC LETTER NINETY" #x10341) + ("GOTHIC LETTER RAIDA" #x10342) + ("GOTHIC LETTER SAUIL" #x10343) + ("GOTHIC LETTER TEIWS" #x10344) + ("GOTHIC LETTER WINJA" #x10345) + ("GOTHIC LETTER FAIHU" #x10346) + ("GOTHIC LETTER IGGWS" #x10347) + ("GOTHIC LETTER HWAIR" #x10348) + ("GOTHIC LETTER OTHAL" #x10349) + ("GOTHIC LETTER NINE HUNDRED" #x1034A) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/10400-1044F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,78 @@ +(nxml-define-char-name-set 'deseret + '(("DESERET CAPITAL LETTER LONG I" #x10400) + ("DESERET CAPITAL LETTER LONG E" #x10401) + ("DESERET CAPITAL LETTER LONG A" #x10402) + ("DESERET CAPITAL LETTER LONG AH" #x10403) + ("DESERET CAPITAL LETTER LONG O" #x10404) + ("DESERET CAPITAL LETTER LONG OO" #x10405) + ("DESERET CAPITAL LETTER SHORT I" #x10406) + ("DESERET CAPITAL LETTER SHORT E" #x10407) + ("DESERET CAPITAL LETTER SHORT A" #x10408) + ("DESERET CAPITAL LETTER SHORT AH" #x10409) + ("DESERET CAPITAL LETTER SHORT O" #x1040A) + ("DESERET CAPITAL LETTER SHORT OO" #x1040B) + ("DESERET CAPITAL LETTER AY" #x1040C) + ("DESERET CAPITAL LETTER OW" #x1040D) + ("DESERET CAPITAL LETTER WU" #x1040E) + ("DESERET CAPITAL LETTER YEE" #x1040F) + ("DESERET CAPITAL LETTER H" #x10410) + ("DESERET CAPITAL LETTER PEE" #x10411) + ("DESERET CAPITAL LETTER BEE" #x10412) + ("DESERET CAPITAL LETTER TEE" #x10413) + ("DESERET CAPITAL LETTER DEE" #x10414) + ("DESERET CAPITAL LETTER CHEE" #x10415) + ("DESERET CAPITAL LETTER JEE" #x10416) + ("DESERET CAPITAL LETTER KAY" #x10417) + ("DESERET CAPITAL LETTER GAY" #x10418) + ("DESERET CAPITAL LETTER EF" #x10419) + ("DESERET CAPITAL LETTER VEE" #x1041A) + ("DESERET CAPITAL LETTER ETH" #x1041B) + ("DESERET CAPITAL LETTER THEE" #x1041C) + ("DESERET CAPITAL LETTER ES" #x1041D) + ("DESERET CAPITAL LETTER ZEE" #x1041E) + ("DESERET CAPITAL LETTER ESH" #x1041F) + ("DESERET CAPITAL LETTER ZHEE" #x10420) + ("DESERET CAPITAL LETTER ER" #x10421) + ("DESERET CAPITAL LETTER EL" #x10422) + ("DESERET CAPITAL LETTER EM" #x10423) + ("DESERET CAPITAL LETTER EN" #x10424) + ("DESERET CAPITAL LETTER ENG" #x10425) + ("DESERET SMALL LETTER LONG I" #x10428) + ("DESERET SMALL LETTER LONG E" #x10429) + ("DESERET SMALL LETTER LONG A" #x1042A) + ("DESERET SMALL LETTER LONG AH" #x1042B) + ("DESERET SMALL LETTER LONG O" #x1042C) + ("DESERET SMALL LETTER LONG OO" #x1042D) + ("DESERET SMALL LETTER SHORT I" #x1042E) + ("DESERET SMALL LETTER SHORT E" #x1042F) + ("DESERET SMALL LETTER SHORT A" #x10430) + ("DESERET SMALL LETTER SHORT AH" #x10431) + ("DESERET SMALL LETTER SHORT O" #x10432) + ("DESERET SMALL LETTER SHORT OO" #x10433) + ("DESERET SMALL LETTER AY" #x10434) + ("DESERET SMALL LETTER OW" #x10435) + ("DESERET SMALL LETTER WU" #x10436) + ("DESERET SMALL LETTER YEE" #x10437) + ("DESERET SMALL LETTER H" #x10438) + ("DESERET SMALL LETTER PEE" #x10439) + ("DESERET SMALL LETTER BEE" #x1043A) + ("DESERET SMALL LETTER TEE" #x1043B) + ("DESERET SMALL LETTER DEE" #x1043C) + ("DESERET SMALL LETTER CHEE" #x1043D) + ("DESERET SMALL LETTER JEE" #x1043E) + ("DESERET SMALL LETTER KAY" #x1043F) + ("DESERET SMALL LETTER GAY" #x10440) + ("DESERET SMALL LETTER EF" #x10441) + ("DESERET SMALL LETTER VEE" #x10442) + ("DESERET SMALL LETTER ETH" #x10443) + ("DESERET SMALL LETTER THEE" #x10444) + ("DESERET SMALL LETTER ES" #x10445) + ("DESERET SMALL LETTER ZEE" #x10446) + ("DESERET SMALL LETTER ESH" #x10447) + ("DESERET SMALL LETTER ZHEE" #x10448) + ("DESERET SMALL LETTER ER" #x10449) + ("DESERET SMALL LETTER EL" #x1044A) + ("DESERET SMALL LETTER EM" #x1044B) + ("DESERET SMALL LETTER EN" #x1044C) + ("DESERET SMALL LETTER ENG" #x1044D) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/1D000-1D0FF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,248 @@ +(nxml-define-char-name-set 'byzantine-musical-symbols + '(("BYZANTINE MUSICAL SYMBOL PSILI" #x1D000) + ("BYZANTINE MUSICAL SYMBOL DASEIA" #x1D001) + ("BYZANTINE MUSICAL SYMBOL PERISPOMENI" #x1D002) + ("BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON" #x1D003) + ("BYZANTINE MUSICAL SYMBOL OXEIA DIPLI" #x1D004) + ("BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON" #x1D005) + ("BYZANTINE MUSICAL SYMBOL VAREIA DIPLI" #x1D006) + ("BYZANTINE MUSICAL SYMBOL KATHISTI" #x1D007) + ("BYZANTINE MUSICAL SYMBOL SYRMATIKI" #x1D008) + ("BYZANTINE MUSICAL SYMBOL PARAKLITIKI" #x1D009) + ("BYZANTINE MUSICAL SYMBOL YPOKRISIS" #x1D00A) + ("BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI" #x1D00B) + ("BYZANTINE MUSICAL SYMBOL KREMASTI" #x1D00C) + ("BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON" #x1D00D) + ("BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON" #x1D00E) + ("BYZANTINE MUSICAL SYMBOL TELEIA" #x1D00F) + ("BYZANTINE MUSICAL SYMBOL KENTIMATA" #x1D010) + ("BYZANTINE MUSICAL SYMBOL APOSTROFOS" #x1D011) + ("BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI" #x1D012) + ("BYZANTINE MUSICAL SYMBOL SYNEVMA" #x1D013) + ("BYZANTINE MUSICAL SYMBOL THITA" #x1D014) + ("BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION" #x1D015) + ("BYZANTINE MUSICAL SYMBOL GORGON ARCHAION" #x1D016) + ("BYZANTINE MUSICAL SYMBOL PSILON" #x1D017) + ("BYZANTINE MUSICAL SYMBOL CHAMILON" #x1D018) + ("BYZANTINE MUSICAL SYMBOL VATHY" #x1D019) + ("BYZANTINE MUSICAL SYMBOL ISON ARCHAION" #x1D01A) + ("BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION" #x1D01B) + ("BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION" #x1D01C) + ("BYZANTINE MUSICAL SYMBOL SAXIMATA" #x1D01D) + ("BYZANTINE MUSICAL SYMBOL PARICHON" #x1D01E) + ("BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA" #x1D01F) + ("BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION" #x1D020) + ("BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION" #x1D021) + ("BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION" #x1D022) + ("BYZANTINE MUSICAL SYMBOL APOTHEMA" #x1D023) + ("BYZANTINE MUSICAL SYMBOL KLASMA" #x1D024) + ("BYZANTINE MUSICAL SYMBOL REVMA" #x1D025) + ("BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION" #x1D026) + ("BYZANTINE MUSICAL SYMBOL TINAGMA" #x1D027) + ("BYZANTINE MUSICAL SYMBOL ANATRICHISMA" #x1D028) + ("BYZANTINE MUSICAL SYMBOL SEISMA" #x1D029) + ("BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION" #x1D02A) + ("BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU" #x1D02B) + ("BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION" #x1D02C) + ("BYZANTINE MUSICAL SYMBOL THEMA" #x1D02D) + ("BYZANTINE MUSICAL SYMBOL LEMOI" #x1D02E) + ("BYZANTINE MUSICAL SYMBOL DYO" #x1D02F) + ("BYZANTINE MUSICAL SYMBOL TRIA" #x1D030) + ("BYZANTINE MUSICAL SYMBOL TESSERA" #x1D031) + ("BYZANTINE MUSICAL SYMBOL KRATIMATA" #x1D032) + ("BYZANTINE MUSICAL SYMBOL APESO EXO NEO" #x1D033) + ("BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION" #x1D034) + ("BYZANTINE MUSICAL SYMBOL IMIFTHORA" #x1D035) + ("BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION" #x1D036) + ("BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON" #x1D037) + ("BYZANTINE MUSICAL SYMBOL PELASTON" #x1D038) + ("BYZANTINE MUSICAL SYMBOL PSIFISTON" #x1D039) + ("BYZANTINE MUSICAL SYMBOL KONTEVMA" #x1D03A) + ("BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION" #x1D03B) + ("BYZANTINE MUSICAL SYMBOL RAPISMA" #x1D03C) + ("BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION" #x1D03D) + ("BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION" #x1D03E) + ("BYZANTINE MUSICAL SYMBOL ICHADIN" #x1D03F) + ("BYZANTINE MUSICAL SYMBOL NANA" #x1D040) + ("BYZANTINE MUSICAL SYMBOL PETASMA" #x1D041) + ("BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO" #x1D042) + ("BYZANTINE MUSICAL SYMBOL TROMIKON ALLO" #x1D043) + ("BYZANTINE MUSICAL SYMBOL STRAGGISMATA" #x1D044) + ("BYZANTINE MUSICAL SYMBOL GRONTHISMATA" #x1D045) + ("BYZANTINE MUSICAL SYMBOL ISON NEO" #x1D046) + ("BYZANTINE MUSICAL SYMBOL OLIGON NEO" #x1D047) + ("BYZANTINE MUSICAL SYMBOL OXEIA NEO" #x1D048) + ("BYZANTINE MUSICAL SYMBOL PETASTI" #x1D049) + ("BYZANTINE MUSICAL SYMBOL KOUFISMA" #x1D04A) + ("BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA" #x1D04B) + ("BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA" #x1D04C) + ("BYZANTINE MUSICAL SYMBOL PELASTON NEO" #x1D04D) + ("BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO" #x1D04E) + ("BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO" #x1D04F) + ("BYZANTINE MUSICAL SYMBOL YPSILI" #x1D050) + ("BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO" #x1D051) + ("BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO" #x1D052) + ("BYZANTINE MUSICAL SYMBOL YPORROI" #x1D053) + ("BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON" #x1D054) + ("BYZANTINE MUSICAL SYMBOL ELAFRON" #x1D055) + ("BYZANTINE MUSICAL SYMBOL CHAMILI" #x1D056) + ("BYZANTINE MUSICAL SYMBOL MIKRON ISON" #x1D057) + ("BYZANTINE MUSICAL SYMBOL VAREIA NEO" #x1D058) + ("BYZANTINE MUSICAL SYMBOL PIASMA NEO" #x1D059) + ("BYZANTINE MUSICAL SYMBOL PSIFISTON NEO" #x1D05A) + ("BYZANTINE MUSICAL SYMBOL OMALON" #x1D05B) + ("BYZANTINE MUSICAL SYMBOL ANTIKENOMA" #x1D05C) + ("BYZANTINE MUSICAL SYMBOL LYGISMA" #x1D05D) + ("BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO" #x1D05E) + ("BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO" #x1D05F) + ("BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA" #x1D060) + ("BYZANTINE MUSICAL SYMBOL KYLISMA" #x1D061) + ("BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA" #x1D062) + ("BYZANTINE MUSICAL SYMBOL TROMIKON NEO" #x1D063) + ("BYZANTINE MUSICAL SYMBOL EKSTREPTON" #x1D064) + ("BYZANTINE MUSICAL SYMBOL SYNAGMA NEO" #x1D065) + ("BYZANTINE MUSICAL SYMBOL SYRMA" #x1D066) + ("BYZANTINE MUSICAL SYMBOL CHOREVMA NEO" #x1D067) + ("BYZANTINE MUSICAL SYMBOL EPEGERMA" #x1D068) + ("BYZANTINE MUSICAL SYMBOL SEISMA NEO" #x1D069) + ("BYZANTINE MUSICAL SYMBOL XIRON KLASMA" #x1D06A) + ("BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON" #x1D06B) + ("BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA" #x1D06C) + ("BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA" #x1D06D) + ("BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA" #x1D06E) + ("BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA" #x1D06F) + ("BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA" #x1D070) + ("BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA" #x1D071) + ("BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON" #x1D072) + ("BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON" #x1D073) + ("BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON" #x1D074) + ("BYZANTINE MUSICAL SYMBOL OYRANISMA NEO" #x1D075) + ("BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO" #x1D076) + ("BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO" #x1D077) + ("BYZANTINE MUSICAL SYMBOL THEMA APLOUN" #x1D078) + ("BYZANTINE MUSICAL SYMBOL THES KAI APOTHES" #x1D079) + ("BYZANTINE MUSICAL SYMBOL KATAVASMA" #x1D07A) + ("BYZANTINE MUSICAL SYMBOL ENDOFONON" #x1D07B) + ("BYZANTINE MUSICAL SYMBOL YFEN KATO" #x1D07C) + ("BYZANTINE MUSICAL SYMBOL YFEN ANO" #x1D07D) + ("BYZANTINE MUSICAL SYMBOL STAVROS" #x1D07E) + ("BYZANTINE MUSICAL SYMBOL KLASMA ANO" #x1D07F) + ("BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION" #x1D080) + ("BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION" #x1D081) + ("BYZANTINE MUSICAL SYMBOL KRATIMA ALLO" #x1D082) + ("BYZANTINE MUSICAL SYMBOL KRATIMA NEO" #x1D083) + ("BYZANTINE MUSICAL SYMBOL APODERMA NEO" #x1D084) + ("BYZANTINE MUSICAL SYMBOL APLI" #x1D085) + ("BYZANTINE MUSICAL SYMBOL DIPLI" #x1D086) + ("BYZANTINE MUSICAL SYMBOL TRIPLI" #x1D087) + ("BYZANTINE MUSICAL SYMBOL TETRAPLI" #x1D088) + ("BYZANTINE MUSICAL SYMBOL KORONIS" #x1D089) + ("BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU" #x1D08A) + ("BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON" #x1D08B) + ("BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON" #x1D08C) + ("BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON" #x1D08D) + ("BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU" #x1D08E) + ("BYZANTINE MUSICAL SYMBOL GORGON NEO ANO" #x1D08F) + ("BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA" #x1D090) + ("BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA" #x1D091) + ("BYZANTINE MUSICAL SYMBOL DIGORGON" #x1D092) + ("BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO" #x1D093) + ("BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO" #x1D094) + ("BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA" #x1D095) + ("BYZANTINE MUSICAL SYMBOL TRIGORGON" #x1D096) + ("BYZANTINE MUSICAL SYMBOL ARGON" #x1D097) + ("BYZANTINE MUSICAL SYMBOL IMIDIARGON" #x1D098) + ("BYZANTINE MUSICAL SYMBOL DIARGON" #x1D099) + ("BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI" #x1D09A) + ("BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI" #x1D09B) + ("BYZANTINE MUSICAL SYMBOL AGOGI ARGI" #x1D09C) + ("BYZANTINE MUSICAL SYMBOL AGOGI METRIA" #x1D09D) + ("BYZANTINE MUSICAL SYMBOL AGOGI MESI" #x1D09E) + ("BYZANTINE MUSICAL SYMBOL AGOGI GORGI" #x1D09F) + ("BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI" #x1D0A0) + ("BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI" #x1D0A1) + ("BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS" #x1D0A2) + ("BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS" #x1D0A3) + ("BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS" #x1D0A4) + ("BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS" #x1D0A5) + ("BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS" #x1D0A6) + ("BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS" #x1D0A7) + ("BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS" #x1D0A8) + ("BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS" #x1D0A9) + ("BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS" #x1D0AA) + ("BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS" #x1D0AB) + ("BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS" #x1D0AC) + ("BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS" #x1D0AD) + ("BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS" #x1D0AE) + ("BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS" #x1D0AF) + ("BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS" #x1D0B0) + ("BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS" #x1D0B1) + ("BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS" #x1D0B2) + ("BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS" #x1D0B3) + ("BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN" #x1D0B4) + ("BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN" #x1D0B5) + ("BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU" #x1D0B6) + ("BYZANTINE MUSICAL SYMBOL IMIFONON" #x1D0B7) + ("BYZANTINE MUSICAL SYMBOL IMIFTHORON" #x1D0B8) + ("BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU" #x1D0B9) + ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA" #x1D0BA) + ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA" #x1D0BB) + ("BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS" #x1D0BC) + ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI" #x1D0BD) + ("BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI" #x1D0BE) + ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE" #x1D0BF) + ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO" #x1D0C0) + ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO" #x1D0C1) + ("BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO" #x1D0C2) + ("BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS" #x1D0C3) + ("BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS" #x1D0C4) + ("BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS" #x1D0C5) + ("BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI" #x1D0C6) + ("BYZANTINE MUSICAL SYMBOL FTHORA NENANO" #x1D0C7) + ("BYZANTINE MUSICAL SYMBOL CHROA ZYGOS" #x1D0C8) + ("BYZANTINE MUSICAL SYMBOL CHROA KLITON" #x1D0C9) + ("BYZANTINE MUSICAL SYMBOL CHROA SPATHI" #x1D0CA) + ("BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION" #x1D0CB) + ("BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA" #x1D0CC) + ("BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION" #x1D0CD) + ("BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION" #x1D0CE) + ("BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION" #x1D0CF) + ("BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA" #x1D0D0) + ("BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA" #x1D0D1) + ("BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA" #x1D0D2) + ("BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA" #x1D0D3) + ("BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA" #x1D0D4) + ("BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA" #x1D0D5) + ("BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA" #x1D0D6) + ("BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA" #x1D0D7) + ("BYZANTINE MUSICAL SYMBOL GENIKI DIESIS" #x1D0D8) + ("BYZANTINE MUSICAL SYMBOL GENIKI YFESIS" #x1D0D9) + ("BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI" #x1D0DA) + ("BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI" #x1D0DB) + ("BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI" #x1D0DC) + ("BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS" #x1D0DD) + ("BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS" #x1D0DE) + ("BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU" #x1D0DF) + ("BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU" #x1D0E0) + ("BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU" #x1D0E1) + ("BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS" #x1D0E2) + ("BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU" #x1D0E3) + ("BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU" #x1D0E4) + ("BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU" #x1D0E5) + ("BYZANTINE MUSICAL SYMBOL DIGRAMMA GG" #x1D0E6) + ("BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU" #x1D0E7) + ("BYZANTINE MUSICAL SYMBOL STIGMA" #x1D0E8) + ("BYZANTINE MUSICAL SYMBOL ARKTIKO PA" #x1D0E9) + ("BYZANTINE MUSICAL SYMBOL ARKTIKO VOU" #x1D0EA) + ("BYZANTINE MUSICAL SYMBOL ARKTIKO GA" #x1D0EB) + ("BYZANTINE MUSICAL SYMBOL ARKTIKO DI" #x1D0EC) + ("BYZANTINE MUSICAL SYMBOL ARKTIKO KE" #x1D0ED) + ("BYZANTINE MUSICAL SYMBOL ARKTIKO ZO" #x1D0EE) + ("BYZANTINE MUSICAL SYMBOL ARKTIKO NI" #x1D0EF) + ("BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO" #x1D0F0) + ("BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO" #x1D0F1) + ("BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO" #x1D0F2) + ("BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO" #x1D0F3) + ("BYZANTINE MUSICAL SYMBOL KLASMA KATO" #x1D0F4) + ("BYZANTINE MUSICAL SYMBOL GORGON NEO KATO" #x1D0F5) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/1D100-1D1FF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,221 @@ +(nxml-define-char-name-set 'musical-symbols + '(("MUSICAL SYMBOL SINGLE BARLINE" #x1D100) + ("MUSICAL SYMBOL DOUBLE BARLINE" #x1D101) + ("MUSICAL SYMBOL FINAL BARLINE" #x1D102) + ("MUSICAL SYMBOL REVERSE FINAL BARLINE" #x1D103) + ("MUSICAL SYMBOL DASHED BARLINE" #x1D104) + ("MUSICAL SYMBOL SHORT BARLINE" #x1D105) + ("MUSICAL SYMBOL LEFT REPEAT SIGN" #x1D106) + ("MUSICAL SYMBOL RIGHT REPEAT SIGN" #x1D107) + ("MUSICAL SYMBOL REPEAT DOTS" #x1D108) + ("MUSICAL SYMBOL DAL SEGNO" #x1D109) + ("MUSICAL SYMBOL DA CAPO" #x1D10A) + ("MUSICAL SYMBOL SEGNO" #x1D10B) + ("MUSICAL SYMBOL CODA" #x1D10C) + ("MUSICAL SYMBOL REPEATED FIGURE-1" #x1D10D) + ("MUSICAL SYMBOL REPEATED FIGURE-2" #x1D10E) + ("MUSICAL SYMBOL REPEATED FIGURE-3" #x1D10F) + ("MUSICAL SYMBOL FERMATA" #x1D110) + ("MUSICAL SYMBOL FERMATA BELOW" #x1D111) + ("MUSICAL SYMBOL BREATH MARK" #x1D112) + ("MUSICAL SYMBOL CAESURA" #x1D113) + ("MUSICAL SYMBOL BRACE" #x1D114) + ("MUSICAL SYMBOL BRACKET" #x1D115) + ("MUSICAL SYMBOL ONE-LINE STAFF" #x1D116) + ("MUSICAL SYMBOL TWO-LINE STAFF" #x1D117) + ("MUSICAL SYMBOL THREE-LINE STAFF" #x1D118) + ("MUSICAL SYMBOL FOUR-LINE STAFF" #x1D119) + ("MUSICAL SYMBOL FIVE-LINE STAFF" #x1D11A) + ("MUSICAL SYMBOL SIX-LINE STAFF" #x1D11B) + ("MUSICAL SYMBOL SIX-STRING FRETBOARD" #x1D11C) + ("MUSICAL SYMBOL FOUR-STRING FRETBOARD" #x1D11D) + ("MUSICAL SYMBOL G CLEF" #x1D11E) + ("MUSICAL SYMBOL G CLEF OTTAVA ALTA" #x1D11F) + ("MUSICAL SYMBOL G CLEF OTTAVA BASSA" #x1D120) + ("MUSICAL SYMBOL C CLEF" #x1D121) + ("MUSICAL SYMBOL F CLEF" #x1D122) + ("MUSICAL SYMBOL F CLEF OTTAVA ALTA" #x1D123) + ("MUSICAL SYMBOL F CLEF OTTAVA BASSA" #x1D124) + ("MUSICAL SYMBOL DRUM CLEF-1" #x1D125) + ("MUSICAL SYMBOL DRUM CLEF-2" #x1D126) + ("MUSICAL SYMBOL DOUBLE SHARP" #x1D12A) + ("MUSICAL SYMBOL DOUBLE FLAT" #x1D12B) + ("MUSICAL SYMBOL FLAT UP" #x1D12C) + ("MUSICAL SYMBOL FLAT DOWN" #x1D12D) + ("MUSICAL SYMBOL NATURAL UP" #x1D12E) + ("MUSICAL SYMBOL NATURAL DOWN" #x1D12F) + ("MUSICAL SYMBOL SHARP UP" #x1D130) + ("MUSICAL SYMBOL SHARP DOWN" #x1D131) + ("MUSICAL SYMBOL QUARTER TONE SHARP" #x1D132) + ("MUSICAL SYMBOL QUARTER TONE FLAT" #x1D133) + ("MUSICAL SYMBOL COMMON TIME" #x1D134) + ("MUSICAL SYMBOL CUT TIME" #x1D135) + ("MUSICAL SYMBOL OTTAVA ALTA" #x1D136) + ("MUSICAL SYMBOL OTTAVA BASSA" #x1D137) + ("MUSICAL SYMBOL QUINDICESIMA ALTA" #x1D138) + ("MUSICAL SYMBOL QUINDICESIMA BASSA" #x1D139) + ("MUSICAL SYMBOL MULTI REST" #x1D13A) + ("MUSICAL SYMBOL WHOLE REST" #x1D13B) + ("MUSICAL SYMBOL HALF REST" #x1D13C) + ("MUSICAL SYMBOL QUARTER REST" #x1D13D) + ("MUSICAL SYMBOL EIGHTH REST" #x1D13E) + ("MUSICAL SYMBOL SIXTEENTH REST" #x1D13F) + ("MUSICAL SYMBOL THIRTY-SECOND REST" #x1D140) + ("MUSICAL SYMBOL SIXTY-FOURTH REST" #x1D141) + ("MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST" #x1D142) + ("MUSICAL SYMBOL X NOTEHEAD" #x1D143) + ("MUSICAL SYMBOL PLUS NOTEHEAD" #x1D144) + ("MUSICAL SYMBOL CIRCLE X NOTEHEAD" #x1D145) + ("MUSICAL SYMBOL SQUARE NOTEHEAD WHITE" #x1D146) + ("MUSICAL SYMBOL SQUARE NOTEHEAD BLACK" #x1D147) + ("MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE" #x1D148) + ("MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK" #x1D149) + ("MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE" #x1D14A) + ("MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK" #x1D14B) + ("MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE" #x1D14C) + ("MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK" #x1D14D) + ("MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE" #x1D14E) + ("MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK" #x1D14F) + ("MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE" #x1D150) + ("MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK" #x1D151) + ("MUSICAL SYMBOL MOON NOTEHEAD WHITE" #x1D152) + ("MUSICAL SYMBOL MOON NOTEHEAD BLACK" #x1D153) + ("MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE" #x1D154) + ("MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK" #x1D155) + ("MUSICAL SYMBOL PARENTHESIS NOTEHEAD" #x1D156) + ("MUSICAL SYMBOL VOID NOTEHEAD" #x1D157) + ("MUSICAL SYMBOL NOTEHEAD BLACK" #x1D158) + ("MUSICAL SYMBOL NULL NOTEHEAD" #x1D159) + ("MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE" #x1D15A) + ("MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK" #x1D15B) + ("MUSICAL SYMBOL BREVE" #x1D15C) + ("MUSICAL SYMBOL WHOLE NOTE" #x1D15D) + ("MUSICAL SYMBOL HALF NOTE" #x1D15E) + ("MUSICAL SYMBOL QUARTER NOTE" #x1D15F) + ("MUSICAL SYMBOL EIGHTH NOTE" #x1D160) + ("MUSICAL SYMBOL SIXTEENTH NOTE" #x1D161) + ("MUSICAL SYMBOL THIRTY-SECOND NOTE" #x1D162) + ("MUSICAL SYMBOL SIXTY-FOURTH NOTE" #x1D163) + ("MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE" #x1D164) + ("MUSICAL SYMBOL COMBINING STEM" #x1D165) + ("MUSICAL SYMBOL COMBINING SPRECHGESANG STEM" #x1D166) + ("MUSICAL SYMBOL COMBINING TREMOLO-1" #x1D167) + ("MUSICAL SYMBOL COMBINING TREMOLO-2" #x1D168) + ("MUSICAL SYMBOL COMBINING TREMOLO-3" #x1D169) + ("MUSICAL SYMBOL FINGERED TREMOLO-1" #x1D16A) + ("MUSICAL SYMBOL FINGERED TREMOLO-2" #x1D16B) + ("MUSICAL SYMBOL FINGERED TREMOLO-3" #x1D16C) + ("MUSICAL SYMBOL COMBINING AUGMENTATION DOT" #x1D16D) + ("MUSICAL SYMBOL COMBINING FLAG-1" #x1D16E) + ("MUSICAL SYMBOL COMBINING FLAG-2" #x1D16F) + ("MUSICAL SYMBOL COMBINING FLAG-3" #x1D170) + ("MUSICAL SYMBOL COMBINING FLAG-4" #x1D171) + ("MUSICAL SYMBOL COMBINING FLAG-5" #x1D172) + ("MUSICAL SYMBOL BEGIN BEAM" #x1D173) + ("MUSICAL SYMBOL END BEAM" #x1D174) + ("MUSICAL SYMBOL BEGIN TIE" #x1D175) + ("MUSICAL SYMBOL END TIE" #x1D176) + ("MUSICAL SYMBOL BEGIN SLUR" #x1D177) + ("MUSICAL SYMBOL END SLUR" #x1D178) + ("MUSICAL SYMBOL BEGIN PHRASE" #x1D179) + ("MUSICAL SYMBOL END PHRASE" #x1D17A) + ("MUSICAL SYMBOL COMBINING ACCENT" #x1D17B) + ("MUSICAL SYMBOL COMBINING STACCATO" #x1D17C) + ("MUSICAL SYMBOL COMBINING TENUTO" #x1D17D) + ("MUSICAL SYMBOL COMBINING STACCATISSIMO" #x1D17E) + ("MUSICAL SYMBOL COMBINING MARCATO" #x1D17F) + ("MUSICAL SYMBOL COMBINING MARCATO-STACCATO" #x1D180) + ("MUSICAL SYMBOL COMBINING ACCENT-STACCATO" #x1D181) + ("MUSICAL SYMBOL COMBINING LOURE" #x1D182) + ("MUSICAL SYMBOL ARPEGGIATO UP" #x1D183) + ("MUSICAL SYMBOL ARPEGGIATO DOWN" #x1D184) + ("MUSICAL SYMBOL COMBINING DOIT" #x1D185) + ("MUSICAL SYMBOL COMBINING RIP" #x1D186) + ("MUSICAL SYMBOL COMBINING FLIP" #x1D187) + ("MUSICAL SYMBOL COMBINING SMEAR" #x1D188) + ("MUSICAL SYMBOL COMBINING BEND" #x1D189) + ("MUSICAL SYMBOL COMBINING DOUBLE TONGUE" #x1D18A) + ("MUSICAL SYMBOL COMBINING TRIPLE TONGUE" #x1D18B) + ("MUSICAL SYMBOL RINFORZANDO" #x1D18C) + ("MUSICAL SYMBOL SUBITO" #x1D18D) + ("MUSICAL SYMBOL Z" #x1D18E) + ("MUSICAL SYMBOL PIANO" #x1D18F) + ("MUSICAL SYMBOL MEZZO" #x1D190) + ("MUSICAL SYMBOL FORTE" #x1D191) + ("MUSICAL SYMBOL CRESCENDO" #x1D192) + ("MUSICAL SYMBOL DECRESCENDO" #x1D193) + ("MUSICAL SYMBOL GRACE NOTE SLASH" #x1D194) + ("MUSICAL SYMBOL GRACE NOTE NO SLASH" #x1D195) + ("MUSICAL SYMBOL TR" #x1D196) + ("MUSICAL SYMBOL TURN" #x1D197) + ("MUSICAL SYMBOL INVERTED TURN" #x1D198) + ("MUSICAL SYMBOL TURN SLASH" #x1D199) + ("MUSICAL SYMBOL TURN UP" #x1D19A) + ("MUSICAL SYMBOL ORNAMENT STROKE-1" #x1D19B) + ("MUSICAL SYMBOL ORNAMENT STROKE-2" #x1D19C) + ("MUSICAL SYMBOL ORNAMENT STROKE-3" #x1D19D) + ("MUSICAL SYMBOL ORNAMENT STROKE-4" #x1D19E) + ("MUSICAL SYMBOL ORNAMENT STROKE-5" #x1D19F) + ("MUSICAL SYMBOL ORNAMENT STROKE-6" #x1D1A0) + ("MUSICAL SYMBOL ORNAMENT STROKE-7" #x1D1A1) + ("MUSICAL SYMBOL ORNAMENT STROKE-8" #x1D1A2) + ("MUSICAL SYMBOL ORNAMENT STROKE-9" #x1D1A3) + ("MUSICAL SYMBOL ORNAMENT STROKE-10" #x1D1A4) + ("MUSICAL SYMBOL ORNAMENT STROKE-11" #x1D1A5) + ("MUSICAL SYMBOL HAUPTSTIMME" #x1D1A6) + ("MUSICAL SYMBOL NEBENSTIMME" #x1D1A7) + ("MUSICAL SYMBOL END OF STIMME" #x1D1A8) + ("MUSICAL SYMBOL DEGREE SLASH" #x1D1A9) + ("MUSICAL SYMBOL COMBINING DOWN BOW" #x1D1AA) + ("MUSICAL SYMBOL COMBINING UP BOW" #x1D1AB) + ("MUSICAL SYMBOL COMBINING HARMONIC" #x1D1AC) + ("MUSICAL SYMBOL COMBINING SNAP PIZZICATO" #x1D1AD) + ("MUSICAL SYMBOL PEDAL MARK" #x1D1AE) + ("MUSICAL SYMBOL PEDAL UP MARK" #x1D1AF) + ("MUSICAL SYMBOL HALF PEDAL MARK" #x1D1B0) + ("MUSICAL SYMBOL GLISSANDO UP" #x1D1B1) + ("MUSICAL SYMBOL GLISSANDO DOWN" #x1D1B2) + ("MUSICAL SYMBOL WITH FINGERNAILS" #x1D1B3) + ("MUSICAL SYMBOL DAMP" #x1D1B4) + ("MUSICAL SYMBOL DAMP ALL" #x1D1B5) + ("MUSICAL SYMBOL MAXIMA" #x1D1B6) + ("MUSICAL SYMBOL LONGA" #x1D1B7) + ("MUSICAL SYMBOL BREVIS" #x1D1B8) + ("MUSICAL SYMBOL SEMIBREVIS WHITE" #x1D1B9) + ("MUSICAL SYMBOL SEMIBREVIS BLACK" #x1D1BA) + ("MUSICAL SYMBOL MINIMA" #x1D1BB) + ("MUSICAL SYMBOL MINIMA BLACK" #x1D1BC) + ("MUSICAL SYMBOL SEMIMINIMA WHITE" #x1D1BD) + ("MUSICAL SYMBOL SEMIMINIMA BLACK" #x1D1BE) + ("MUSICAL SYMBOL FUSA WHITE" #x1D1BF) + ("MUSICAL SYMBOL FUSA BLACK" #x1D1C0) + ("MUSICAL SYMBOL LONGA PERFECTA REST" #x1D1C1) + ("MUSICAL SYMBOL LONGA IMPERFECTA REST" #x1D1C2) + ("MUSICAL SYMBOL BREVIS REST" #x1D1C3) + ("MUSICAL SYMBOL SEMIBREVIS REST" #x1D1C4) + ("MUSICAL SYMBOL MINIMA REST" #x1D1C5) + ("MUSICAL SYMBOL SEMIMINIMA REST" #x1D1C6) + ("MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA" #x1D1C7) + ("MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA" #x1D1C8) + ("MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1" #x1D1C9) + ("MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA" #x1D1CA) + ("MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA" #x1D1CB) + ("MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1" #x1D1CC) + ("MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2" #x1D1CD) + ("MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3" #x1D1CE) + ("MUSICAL SYMBOL CROIX" #x1D1CF) + ("MUSICAL SYMBOL GREGORIAN C CLEF" #x1D1D0) + ("MUSICAL SYMBOL GREGORIAN F CLEF" #x1D1D1) + ("MUSICAL SYMBOL SQUARE B" #x1D1D2) + ("MUSICAL SYMBOL VIRGA" #x1D1D3) + ("MUSICAL SYMBOL PODATUS" #x1D1D4) + ("MUSICAL SYMBOL CLIVIS" #x1D1D5) + ("MUSICAL SYMBOL SCANDICUS" #x1D1D6) + ("MUSICAL SYMBOL CLIMACUS" #x1D1D7) + ("MUSICAL SYMBOL TORCULUS" #x1D1D8) + ("MUSICAL SYMBOL PORRECTUS" #x1D1D9) + ("MUSICAL SYMBOL PORRECTUS FLEXUS" #x1D1DA) + ("MUSICAL SYMBOL SCANDICUS FLEXUS" #x1D1DB) + ("MUSICAL SYMBOL TORCULUS RESUPINUS" #x1D1DC) + ("MUSICAL SYMBOL PES SUBPUNCTIS" #x1D1DD) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/1D400-1D7FF.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,993 @@ +(nxml-define-char-name-set 'mathematical-alphanumeric-symbols + '(("MATHEMATICAL BOLD CAPITAL A" #x1D400) + ("MATHEMATICAL BOLD CAPITAL B" #x1D401) + ("MATHEMATICAL BOLD CAPITAL C" #x1D402) + ("MATHEMATICAL BOLD CAPITAL D" #x1D403) + ("MATHEMATICAL BOLD CAPITAL E" #x1D404) + ("MATHEMATICAL BOLD CAPITAL F" #x1D405) + ("MATHEMATICAL BOLD CAPITAL G" #x1D406) + ("MATHEMATICAL BOLD CAPITAL H" #x1D407) + ("MATHEMATICAL BOLD CAPITAL I" #x1D408) + ("MATHEMATICAL BOLD CAPITAL J" #x1D409) + ("MATHEMATICAL BOLD CAPITAL K" #x1D40A) + ("MATHEMATICAL BOLD CAPITAL L" #x1D40B) + ("MATHEMATICAL BOLD CAPITAL M" #x1D40C) + ("MATHEMATICAL BOLD CAPITAL N" #x1D40D) + ("MATHEMATICAL BOLD CAPITAL O" #x1D40E) + ("MATHEMATICAL BOLD CAPITAL P" #x1D40F) + ("MATHEMATICAL BOLD CAPITAL Q" #x1D410) + ("MATHEMATICAL BOLD CAPITAL R" #x1D411) + ("MATHEMATICAL BOLD CAPITAL S" #x1D412) + ("MATHEMATICAL BOLD CAPITAL T" #x1D413) + ("MATHEMATICAL BOLD CAPITAL U" #x1D414) + ("MATHEMATICAL BOLD CAPITAL V" #x1D415) + ("MATHEMATICAL BOLD CAPITAL W" #x1D416) + ("MATHEMATICAL BOLD CAPITAL X" #x1D417) + ("MATHEMATICAL BOLD CAPITAL Y" #x1D418) + ("MATHEMATICAL BOLD CAPITAL Z" #x1D419) + ("MATHEMATICAL BOLD SMALL A" #x1D41A) + ("MATHEMATICAL BOLD SMALL B" #x1D41B) + ("MATHEMATICAL BOLD SMALL C" #x1D41C) + ("MATHEMATICAL BOLD SMALL D" #x1D41D) + ("MATHEMATICAL BOLD SMALL E" #x1D41E) + ("MATHEMATICAL BOLD SMALL F" #x1D41F) + ("MATHEMATICAL BOLD SMALL G" #x1D420) + ("MATHEMATICAL BOLD SMALL H" #x1D421) + ("MATHEMATICAL BOLD SMALL I" #x1D422) + ("MATHEMATICAL BOLD SMALL J" #x1D423) + ("MATHEMATICAL BOLD SMALL K" #x1D424) + ("MATHEMATICAL BOLD SMALL L" #x1D425) + ("MATHEMATICAL BOLD SMALL M" #x1D426) + ("MATHEMATICAL BOLD SMALL N" #x1D427) + ("MATHEMATICAL BOLD SMALL O" #x1D428) + ("MATHEMATICAL BOLD SMALL P" #x1D429) + ("MATHEMATICAL BOLD SMALL Q" #x1D42A) + ("MATHEMATICAL BOLD SMALL R" #x1D42B) + ("MATHEMATICAL BOLD SMALL S" #x1D42C) + ("MATHEMATICAL BOLD SMALL T" #x1D42D) + ("MATHEMATICAL BOLD SMALL U" #x1D42E) + ("MATHEMATICAL BOLD SMALL V" #x1D42F) + ("MATHEMATICAL BOLD SMALL W" #x1D430) + ("MATHEMATICAL BOLD SMALL X" #x1D431) + ("MATHEMATICAL BOLD SMALL Y" #x1D432) + ("MATHEMATICAL BOLD SMALL Z" #x1D433) + ("MATHEMATICAL ITALIC CAPITAL A" #x1D434) + ("MATHEMATICAL ITALIC CAPITAL B" #x1D435) + ("MATHEMATICAL ITALIC CAPITAL C" #x1D436) + ("MATHEMATICAL ITALIC CAPITAL D" #x1D437) + ("MATHEMATICAL ITALIC CAPITAL E" #x1D438) + ("MATHEMATICAL ITALIC CAPITAL F" #x1D439) + ("MATHEMATICAL ITALIC CAPITAL G" #x1D43A) + ("MATHEMATICAL ITALIC CAPITAL H" #x1D43B) + ("MATHEMATICAL ITALIC CAPITAL I" #x1D43C) + ("MATHEMATICAL ITALIC CAPITAL J" #x1D43D) + ("MATHEMATICAL ITALIC CAPITAL K" #x1D43E) + ("MATHEMATICAL ITALIC CAPITAL L" #x1D43F) + ("MATHEMATICAL ITALIC CAPITAL M" #x1D440) + ("MATHEMATICAL ITALIC CAPITAL N" #x1D441) + ("MATHEMATICAL ITALIC CAPITAL O" #x1D442) + ("MATHEMATICAL ITALIC CAPITAL P" #x1D443) + ("MATHEMATICAL ITALIC CAPITAL Q" #x1D444) + ("MATHEMATICAL ITALIC CAPITAL R" #x1D445) + ("MATHEMATICAL ITALIC CAPITAL S" #x1D446) + ("MATHEMATICAL ITALIC CAPITAL T" #x1D447) + ("MATHEMATICAL ITALIC CAPITAL U" #x1D448) + ("MATHEMATICAL ITALIC CAPITAL V" #x1D449) + ("MATHEMATICAL ITALIC CAPITAL W" #x1D44A) + ("MATHEMATICAL ITALIC CAPITAL X" #x1D44B) + ("MATHEMATICAL ITALIC CAPITAL Y" #x1D44C) + ("MATHEMATICAL ITALIC CAPITAL Z" #x1D44D) + ("MATHEMATICAL ITALIC SMALL A" #x1D44E) + ("MATHEMATICAL ITALIC SMALL B" #x1D44F) + ("MATHEMATICAL ITALIC SMALL C" #x1D450) + ("MATHEMATICAL ITALIC SMALL D" #x1D451) + ("MATHEMATICAL ITALIC SMALL E" #x1D452) + ("MATHEMATICAL ITALIC SMALL F" #x1D453) + ("MATHEMATICAL ITALIC SMALL G" #x1D454) + ("MATHEMATICAL ITALIC SMALL I" #x1D456) + ("MATHEMATICAL ITALIC SMALL J" #x1D457) + ("MATHEMATICAL ITALIC SMALL K" #x1D458) + ("MATHEMATICAL ITALIC SMALL L" #x1D459) + ("MATHEMATICAL ITALIC SMALL M" #x1D45A) + ("MATHEMATICAL ITALIC SMALL N" #x1D45B) + ("MATHEMATICAL ITALIC SMALL O" #x1D45C) + ("MATHEMATICAL ITALIC SMALL P" #x1D45D) + ("MATHEMATICAL ITALIC SMALL Q" #x1D45E) + ("MATHEMATICAL ITALIC SMALL R" #x1D45F) + ("MATHEMATICAL ITALIC SMALL S" #x1D460) + ("MATHEMATICAL ITALIC SMALL T" #x1D461) + ("MATHEMATICAL ITALIC SMALL U" #x1D462) + ("MATHEMATICAL ITALIC SMALL V" #x1D463) + ("MATHEMATICAL ITALIC SMALL W" #x1D464) + ("MATHEMATICAL ITALIC SMALL X" #x1D465) + ("MATHEMATICAL ITALIC SMALL Y" #x1D466) + ("MATHEMATICAL ITALIC SMALL Z" #x1D467) + ("MATHEMATICAL BOLD ITALIC CAPITAL A" #x1D468) + ("MATHEMATICAL BOLD ITALIC CAPITAL B" #x1D469) + ("MATHEMATICAL BOLD ITALIC CAPITAL C" #x1D46A) + ("MATHEMATICAL BOLD ITALIC CAPITAL D" #x1D46B) + ("MATHEMATICAL BOLD ITALIC CAPITAL E" #x1D46C) + ("MATHEMATICAL BOLD ITALIC CAPITAL F" #x1D46D) + ("MATHEMATICAL BOLD ITALIC CAPITAL G" #x1D46E) + ("MATHEMATICAL BOLD ITALIC CAPITAL H" #x1D46F) + ("MATHEMATICAL BOLD ITALIC CAPITAL I" #x1D470) + ("MATHEMATICAL BOLD ITALIC CAPITAL J" #x1D471) + ("MATHEMATICAL BOLD ITALIC CAPITAL K" #x1D472) + ("MATHEMATICAL BOLD ITALIC CAPITAL L" #x1D473) + ("MATHEMATICAL BOLD ITALIC CAPITAL M" #x1D474) + ("MATHEMATICAL BOLD ITALIC CAPITAL N" #x1D475) + ("MATHEMATICAL BOLD ITALIC CAPITAL O" #x1D476) + ("MATHEMATICAL BOLD ITALIC CAPITAL P" #x1D477) + ("MATHEMATICAL BOLD ITALIC CAPITAL Q" #x1D478) + ("MATHEMATICAL BOLD ITALIC CAPITAL R" #x1D479) + ("MATHEMATICAL BOLD ITALIC CAPITAL S" #x1D47A) + ("MATHEMATICAL BOLD ITALIC CAPITAL T" #x1D47B) + ("MATHEMATICAL BOLD ITALIC CAPITAL U" #x1D47C) + ("MATHEMATICAL BOLD ITALIC CAPITAL V" #x1D47D) + ("MATHEMATICAL BOLD ITALIC CAPITAL W" #x1D47E) + ("MATHEMATICAL BOLD ITALIC CAPITAL X" #x1D47F) + ("MATHEMATICAL BOLD ITALIC CAPITAL Y" #x1D480) + ("MATHEMATICAL BOLD ITALIC CAPITAL Z" #x1D481) + ("MATHEMATICAL BOLD ITALIC SMALL A" #x1D482) + ("MATHEMATICAL BOLD ITALIC SMALL B" #x1D483) + ("MATHEMATICAL BOLD ITALIC SMALL C" #x1D484) + ("MATHEMATICAL BOLD ITALIC SMALL D" #x1D485) + ("MATHEMATICAL BOLD ITALIC SMALL E" #x1D486) + ("MATHEMATICAL BOLD ITALIC SMALL F" #x1D487) + ("MATHEMATICAL BOLD ITALIC SMALL G" #x1D488) + ("MATHEMATICAL BOLD ITALIC SMALL H" #x1D489) + ("MATHEMATICAL BOLD ITALIC SMALL I" #x1D48A) + ("MATHEMATICAL BOLD ITALIC SMALL J" #x1D48B) + ("MATHEMATICAL BOLD ITALIC SMALL K" #x1D48C) + ("MATHEMATICAL BOLD ITALIC SMALL L" #x1D48D) + ("MATHEMATICAL BOLD ITALIC SMALL M" #x1D48E) + ("MATHEMATICAL BOLD ITALIC SMALL N" #x1D48F) + ("MATHEMATICAL BOLD ITALIC SMALL O" #x1D490) + ("MATHEMATICAL BOLD ITALIC SMALL P" #x1D491) + ("MATHEMATICAL BOLD ITALIC SMALL Q" #x1D492) + ("MATHEMATICAL BOLD ITALIC SMALL R" #x1D493) + ("MATHEMATICAL BOLD ITALIC SMALL S" #x1D494) + ("MATHEMATICAL BOLD ITALIC SMALL T" #x1D495) + ("MATHEMATICAL BOLD ITALIC SMALL U" #x1D496) + ("MATHEMATICAL BOLD ITALIC SMALL V" #x1D497) + ("MATHEMATICAL BOLD ITALIC SMALL W" #x1D498) + ("MATHEMATICAL BOLD ITALIC SMALL X" #x1D499) + ("MATHEMATICAL BOLD ITALIC SMALL Y" #x1D49A) + ("MATHEMATICAL BOLD ITALIC SMALL Z" #x1D49B) + ("MATHEMATICAL SCRIPT CAPITAL A" #x1D49C) + ("MATHEMATICAL SCRIPT CAPITAL C" #x1D49E) + ("MATHEMATICAL SCRIPT CAPITAL D" #x1D49F) + ("MATHEMATICAL SCRIPT CAPITAL G" #x1D4A2) + ("MATHEMATICAL SCRIPT CAPITAL J" #x1D4A5) + ("MATHEMATICAL SCRIPT CAPITAL K" #x1D4A6) + ("MATHEMATICAL SCRIPT CAPITAL N" #x1D4A9) + ("MATHEMATICAL SCRIPT CAPITAL O" #x1D4AA) + ("MATHEMATICAL SCRIPT CAPITAL P" #x1D4AB) + ("MATHEMATICAL SCRIPT CAPITAL Q" #x1D4AC) + ("MATHEMATICAL SCRIPT CAPITAL S" #x1D4AE) + ("MATHEMATICAL SCRIPT CAPITAL T" #x1D4AF) + ("MATHEMATICAL SCRIPT CAPITAL U" #x1D4B0) + ("MATHEMATICAL SCRIPT CAPITAL V" #x1D4B1) + ("MATHEMATICAL SCRIPT CAPITAL W" #x1D4B2) + ("MATHEMATICAL SCRIPT CAPITAL X" #x1D4B3) + ("MATHEMATICAL SCRIPT CAPITAL Y" #x1D4B4) + ("MATHEMATICAL SCRIPT CAPITAL Z" #x1D4B5) + ("MATHEMATICAL SCRIPT SMALL A" #x1D4B6) + ("MATHEMATICAL SCRIPT SMALL B" #x1D4B7) + ("MATHEMATICAL SCRIPT SMALL C" #x1D4B8) + ("MATHEMATICAL SCRIPT SMALL D" #x1D4B9) + ("MATHEMATICAL SCRIPT SMALL F" #x1D4BB) + ("MATHEMATICAL SCRIPT SMALL H" #x1D4BD) + ("MATHEMATICAL SCRIPT SMALL I" #x1D4BE) + ("MATHEMATICAL SCRIPT SMALL J" #x1D4BF) + ("MATHEMATICAL SCRIPT SMALL K" #x1D4C0) + ("MATHEMATICAL SCRIPT SMALL M" #x1D4C2) + ("MATHEMATICAL SCRIPT SMALL N" #x1D4C3) + ("MATHEMATICAL SCRIPT SMALL P" #x1D4C5) + ("MATHEMATICAL SCRIPT SMALL Q" #x1D4C6) + ("MATHEMATICAL SCRIPT SMALL R" #x1D4C7) + ("MATHEMATICAL SCRIPT SMALL S" #x1D4C8) + ("MATHEMATICAL SCRIPT SMALL T" #x1D4C9) + ("MATHEMATICAL SCRIPT SMALL U" #x1D4CA) + ("MATHEMATICAL SCRIPT SMALL V" #x1D4CB) + ("MATHEMATICAL SCRIPT SMALL W" #x1D4CC) + ("MATHEMATICAL SCRIPT SMALL X" #x1D4CD) + ("MATHEMATICAL SCRIPT SMALL Y" #x1D4CE) + ("MATHEMATICAL SCRIPT SMALL Z" #x1D4CF) + ("MATHEMATICAL BOLD SCRIPT CAPITAL A" #x1D4D0) + ("MATHEMATICAL BOLD SCRIPT CAPITAL B" #x1D4D1) + ("MATHEMATICAL BOLD SCRIPT CAPITAL C" #x1D4D2) + ("MATHEMATICAL BOLD SCRIPT CAPITAL D" #x1D4D3) + ("MATHEMATICAL BOLD SCRIPT CAPITAL E" #x1D4D4) + ("MATHEMATICAL BOLD SCRIPT CAPITAL F" #x1D4D5) + ("MATHEMATICAL BOLD SCRIPT CAPITAL G" #x1D4D6) + ("MATHEMATICAL BOLD SCRIPT CAPITAL H" #x1D4D7) + ("MATHEMATICAL BOLD SCRIPT CAPITAL I" #x1D4D8) + ("MATHEMATICAL BOLD SCRIPT CAPITAL J" #x1D4D9) + ("MATHEMATICAL BOLD SCRIPT CAPITAL K" #x1D4DA) + ("MATHEMATICAL BOLD SCRIPT CAPITAL L" #x1D4DB) + ("MATHEMATICAL BOLD SCRIPT CAPITAL M" #x1D4DC) + ("MATHEMATICAL BOLD SCRIPT CAPITAL N" #x1D4DD) + ("MATHEMATICAL BOLD SCRIPT CAPITAL O" #x1D4DE) + ("MATHEMATICAL BOLD SCRIPT CAPITAL P" #x1D4DF) + ("MATHEMATICAL BOLD SCRIPT CAPITAL Q" #x1D4E0) + ("MATHEMATICAL BOLD SCRIPT CAPITAL R" #x1D4E1) + ("MATHEMATICAL BOLD SCRIPT CAPITAL S" #x1D4E2) + ("MATHEMATICAL BOLD SCRIPT CAPITAL T" #x1D4E3) + ("MATHEMATICAL BOLD SCRIPT CAPITAL U" #x1D4E4) + ("MATHEMATICAL BOLD SCRIPT CAPITAL V" #x1D4E5) + ("MATHEMATICAL BOLD SCRIPT CAPITAL W" #x1D4E6) + ("MATHEMATICAL BOLD SCRIPT CAPITAL X" #x1D4E7) + ("MATHEMATICAL BOLD SCRIPT CAPITAL Y" #x1D4E8) + ("MATHEMATICAL BOLD SCRIPT CAPITAL Z" #x1D4E9) + ("MATHEMATICAL BOLD SCRIPT SMALL A" #x1D4EA) + ("MATHEMATICAL BOLD SCRIPT SMALL B" #x1D4EB) + ("MATHEMATICAL BOLD SCRIPT SMALL C" #x1D4EC) + ("MATHEMATICAL BOLD SCRIPT SMALL D" #x1D4ED) + ("MATHEMATICAL BOLD SCRIPT SMALL E" #x1D4EE) + ("MATHEMATICAL BOLD SCRIPT SMALL F" #x1D4EF) + ("MATHEMATICAL BOLD SCRIPT SMALL G" #x1D4F0) + ("MATHEMATICAL BOLD SCRIPT SMALL H" #x1D4F1) + ("MATHEMATICAL BOLD SCRIPT SMALL I" #x1D4F2) + ("MATHEMATICAL BOLD SCRIPT SMALL J" #x1D4F3) + ("MATHEMATICAL BOLD SCRIPT SMALL K" #x1D4F4) + ("MATHEMATICAL BOLD SCRIPT SMALL L" #x1D4F5) + ("MATHEMATICAL BOLD SCRIPT SMALL M" #x1D4F6) + ("MATHEMATICAL BOLD SCRIPT SMALL N" #x1D4F7) + ("MATHEMATICAL BOLD SCRIPT SMALL O" #x1D4F8) + ("MATHEMATICAL BOLD SCRIPT SMALL P" #x1D4F9) + ("MATHEMATICAL BOLD SCRIPT SMALL Q" #x1D4FA) + ("MATHEMATICAL BOLD SCRIPT SMALL R" #x1D4FB) + ("MATHEMATICAL BOLD SCRIPT SMALL S" #x1D4FC) + ("MATHEMATICAL BOLD SCRIPT SMALL T" #x1D4FD) + ("MATHEMATICAL BOLD SCRIPT SMALL U" #x1D4FE) + ("MATHEMATICAL BOLD SCRIPT SMALL V" #x1D4FF) + ("MATHEMATICAL BOLD SCRIPT SMALL W" #x1D500) + ("MATHEMATICAL BOLD SCRIPT SMALL X" #x1D501) + ("MATHEMATICAL BOLD SCRIPT SMALL Y" #x1D502) + ("MATHEMATICAL BOLD SCRIPT SMALL Z" #x1D503) + ("MATHEMATICAL FRAKTUR CAPITAL A" #x1D504) + ("MATHEMATICAL FRAKTUR CAPITAL B" #x1D505) + ("MATHEMATICAL FRAKTUR CAPITAL D" #x1D507) + ("MATHEMATICAL FRAKTUR CAPITAL E" #x1D508) + ("MATHEMATICAL FRAKTUR CAPITAL F" #x1D509) + ("MATHEMATICAL FRAKTUR CAPITAL G" #x1D50A) + ("MATHEMATICAL FRAKTUR CAPITAL J" #x1D50D) + ("MATHEMATICAL FRAKTUR CAPITAL K" #x1D50E) + ("MATHEMATICAL FRAKTUR CAPITAL L" #x1D50F) + ("MATHEMATICAL FRAKTUR CAPITAL M" #x1D510) + ("MATHEMATICAL FRAKTUR CAPITAL N" #x1D511) + ("MATHEMATICAL FRAKTUR CAPITAL O" #x1D512) + ("MATHEMATICAL FRAKTUR CAPITAL P" #x1D513) + ("MATHEMATICAL FRAKTUR CAPITAL Q" #x1D514) + ("MATHEMATICAL FRAKTUR CAPITAL S" #x1D516) + ("MATHEMATICAL FRAKTUR CAPITAL T" #x1D517) + ("MATHEMATICAL FRAKTUR CAPITAL U" #x1D518) + ("MATHEMATICAL FRAKTUR CAPITAL V" #x1D519) + ("MATHEMATICAL FRAKTUR CAPITAL W" #x1D51A) + ("MATHEMATICAL FRAKTUR CAPITAL X" #x1D51B) + ("MATHEMATICAL FRAKTUR CAPITAL Y" #x1D51C) + ("MATHEMATICAL FRAKTUR SMALL A" #x1D51E) + ("MATHEMATICAL FRAKTUR SMALL B" #x1D51F) + ("MATHEMATICAL FRAKTUR SMALL C" #x1D520) + ("MATHEMATICAL FRAKTUR SMALL D" #x1D521) + ("MATHEMATICAL FRAKTUR SMALL E" #x1D522) + ("MATHEMATICAL FRAKTUR SMALL F" #x1D523) + ("MATHEMATICAL FRAKTUR SMALL G" #x1D524) + ("MATHEMATICAL FRAKTUR SMALL H" #x1D525) + ("MATHEMATICAL FRAKTUR SMALL I" #x1D526) + ("MATHEMATICAL FRAKTUR SMALL J" #x1D527) + ("MATHEMATICAL FRAKTUR SMALL K" #x1D528) + ("MATHEMATICAL FRAKTUR SMALL L" #x1D529) + ("MATHEMATICAL FRAKTUR SMALL M" #x1D52A) + ("MATHEMATICAL FRAKTUR SMALL N" #x1D52B) + ("MATHEMATICAL FRAKTUR SMALL O" #x1D52C) + ("MATHEMATICAL FRAKTUR SMALL P" #x1D52D) + ("MATHEMATICAL FRAKTUR SMALL Q" #x1D52E) + ("MATHEMATICAL FRAKTUR SMALL R" #x1D52F) + ("MATHEMATICAL FRAKTUR SMALL S" #x1D530) + ("MATHEMATICAL FRAKTUR SMALL T" #x1D531) + ("MATHEMATICAL FRAKTUR SMALL U" #x1D532) + ("MATHEMATICAL FRAKTUR SMALL V" #x1D533) + ("MATHEMATICAL FRAKTUR SMALL W" #x1D534) + ("MATHEMATICAL FRAKTUR SMALL X" #x1D535) + ("MATHEMATICAL FRAKTUR SMALL Y" #x1D536) + ("MATHEMATICAL FRAKTUR SMALL Z" #x1D537) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL A" #x1D538) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL B" #x1D539) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL D" #x1D53B) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL E" #x1D53C) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL F" #x1D53D) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL G" #x1D53E) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL I" #x1D540) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL J" #x1D541) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL K" #x1D542) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL L" #x1D543) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL M" #x1D544) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL O" #x1D546) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL S" #x1D54A) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL T" #x1D54B) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL U" #x1D54C) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL V" #x1D54D) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL W" #x1D54E) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL X" #x1D54F) + ("MATHEMATICAL DOUBLE-STRUCK CAPITAL Y" #x1D550) + ("MATHEMATICAL DOUBLE-STRUCK SMALL A" #x1D552) + ("MATHEMATICAL DOUBLE-STRUCK SMALL B" #x1D553) + ("MATHEMATICAL DOUBLE-STRUCK SMALL C" #x1D554) + ("MATHEMATICAL DOUBLE-STRUCK SMALL D" #x1D555) + ("MATHEMATICAL DOUBLE-STRUCK SMALL E" #x1D556) + ("MATHEMATICAL DOUBLE-STRUCK SMALL F" #x1D557) + ("MATHEMATICAL DOUBLE-STRUCK SMALL G" #x1D558) + ("MATHEMATICAL DOUBLE-STRUCK SMALL H" #x1D559) + ("MATHEMATICAL DOUBLE-STRUCK SMALL I" #x1D55A) + ("MATHEMATICAL DOUBLE-STRUCK SMALL J" #x1D55B) + ("MATHEMATICAL DOUBLE-STRUCK SMALL K" #x1D55C) + ("MATHEMATICAL DOUBLE-STRUCK SMALL L" #x1D55D) + ("MATHEMATICAL DOUBLE-STRUCK SMALL M" #x1D55E) + ("MATHEMATICAL DOUBLE-STRUCK SMALL N" #x1D55F) + ("MATHEMATICAL DOUBLE-STRUCK SMALL O" #x1D560) + ("MATHEMATICAL DOUBLE-STRUCK SMALL P" #x1D561) + ("MATHEMATICAL DOUBLE-STRUCK SMALL Q" #x1D562) + ("MATHEMATICAL DOUBLE-STRUCK SMALL R" #x1D563) + ("MATHEMATICAL DOUBLE-STRUCK SMALL S" #x1D564) + ("MATHEMATICAL DOUBLE-STRUCK SMALL T" #x1D565) + ("MATHEMATICAL DOUBLE-STRUCK SMALL U" #x1D566) + ("MATHEMATICAL DOUBLE-STRUCK SMALL V" #x1D567) + ("MATHEMATICAL DOUBLE-STRUCK SMALL W" #x1D568) + ("MATHEMATICAL DOUBLE-STRUCK SMALL X" #x1D569) + ("MATHEMATICAL DOUBLE-STRUCK SMALL Y" #x1D56A) + ("MATHEMATICAL DOUBLE-STRUCK SMALL Z" #x1D56B) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL A" #x1D56C) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL B" #x1D56D) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL C" #x1D56E) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL D" #x1D56F) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL E" #x1D570) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL F" #x1D571) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL G" #x1D572) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL H" #x1D573) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL I" #x1D574) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL J" #x1D575) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL K" #x1D576) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL L" #x1D577) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL M" #x1D578) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL N" #x1D579) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL O" #x1D57A) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL P" #x1D57B) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL Q" #x1D57C) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL R" #x1D57D) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL S" #x1D57E) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL T" #x1D57F) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL U" #x1D580) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL V" #x1D581) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL W" #x1D582) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL X" #x1D583) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL Y" #x1D584) + ("MATHEMATICAL BOLD FRAKTUR CAPITAL Z" #x1D585) + ("MATHEMATICAL BOLD FRAKTUR SMALL A" #x1D586) + ("MATHEMATICAL BOLD FRAKTUR SMALL B" #x1D587) + ("MATHEMATICAL BOLD FRAKTUR SMALL C" #x1D588) + ("MATHEMATICAL BOLD FRAKTUR SMALL D" #x1D589) + ("MATHEMATICAL BOLD FRAKTUR SMALL E" #x1D58A) + ("MATHEMATICAL BOLD FRAKTUR SMALL F" #x1D58B) + ("MATHEMATICAL BOLD FRAKTUR SMALL G" #x1D58C) + ("MATHEMATICAL BOLD FRAKTUR SMALL H" #x1D58D) + ("MATHEMATICAL BOLD FRAKTUR SMALL I" #x1D58E) + ("MATHEMATICAL BOLD FRAKTUR SMALL J" #x1D58F) + ("MATHEMATICAL BOLD FRAKTUR SMALL K" #x1D590) + ("MATHEMATICAL BOLD FRAKTUR SMALL L" #x1D591) + ("MATHEMATICAL BOLD FRAKTUR SMALL M" #x1D592) + ("MATHEMATICAL BOLD FRAKTUR SMALL N" #x1D593) + ("MATHEMATICAL BOLD FRAKTUR SMALL O" #x1D594) + ("MATHEMATICAL BOLD FRAKTUR SMALL P" #x1D595) + ("MATHEMATICAL BOLD FRAKTUR SMALL Q" #x1D596) + ("MATHEMATICAL BOLD FRAKTUR SMALL R" #x1D597) + ("MATHEMATICAL BOLD FRAKTUR SMALL S" #x1D598) + ("MATHEMATICAL BOLD FRAKTUR SMALL T" #x1D599) + ("MATHEMATICAL BOLD FRAKTUR SMALL U" #x1D59A) + ("MATHEMATICAL BOLD FRAKTUR SMALL V" #x1D59B) + ("MATHEMATICAL BOLD FRAKTUR SMALL W" #x1D59C) + ("MATHEMATICAL BOLD FRAKTUR SMALL X" #x1D59D) + ("MATHEMATICAL BOLD FRAKTUR SMALL Y" #x1D59E) + ("MATHEMATICAL BOLD FRAKTUR SMALL Z" #x1D59F) + ("MATHEMATICAL SANS-SERIF CAPITAL A" #x1D5A0) + ("MATHEMATICAL SANS-SERIF CAPITAL B" #x1D5A1) + ("MATHEMATICAL SANS-SERIF CAPITAL C" #x1D5A2) + ("MATHEMATICAL SANS-SERIF CAPITAL D" #x1D5A3) + ("MATHEMATICAL SANS-SERIF CAPITAL E" #x1D5A4) + ("MATHEMATICAL SANS-SERIF CAPITAL F" #x1D5A5) + ("MATHEMATICAL SANS-SERIF CAPITAL G" #x1D5A6) + ("MATHEMATICAL SANS-SERIF CAPITAL H" #x1D5A7) + ("MATHEMATICAL SANS-SERIF CAPITAL I" #x1D5A8) + ("MATHEMATICAL SANS-SERIF CAPITAL J" #x1D5A9) + ("MATHEMATICAL SANS-SERIF CAPITAL K" #x1D5AA) + ("MATHEMATICAL SANS-SERIF CAPITAL L" #x1D5AB) + ("MATHEMATICAL SANS-SERIF CAPITAL M" #x1D5AC) + ("MATHEMATICAL SANS-SERIF CAPITAL N" #x1D5AD) + ("MATHEMATICAL SANS-SERIF CAPITAL O" #x1D5AE) + ("MATHEMATICAL SANS-SERIF CAPITAL P" #x1D5AF) + ("MATHEMATICAL SANS-SERIF CAPITAL Q" #x1D5B0) + ("MATHEMATICAL SANS-SERIF CAPITAL R" #x1D5B1) + ("MATHEMATICAL SANS-SERIF CAPITAL S" #x1D5B2) + ("MATHEMATICAL SANS-SERIF CAPITAL T" #x1D5B3) + ("MATHEMATICAL SANS-SERIF CAPITAL U" #x1D5B4) + ("MATHEMATICAL SANS-SERIF CAPITAL V" #x1D5B5) + ("MATHEMATICAL SANS-SERIF CAPITAL W" #x1D5B6) + ("MATHEMATICAL SANS-SERIF CAPITAL X" #x1D5B7) + ("MATHEMATICAL SANS-SERIF CAPITAL Y" #x1D5B8) + ("MATHEMATICAL SANS-SERIF CAPITAL Z" #x1D5B9) + ("MATHEMATICAL SANS-SERIF SMALL A" #x1D5BA) + ("MATHEMATICAL SANS-SERIF SMALL B" #x1D5BB) + ("MATHEMATICAL SANS-SERIF SMALL C" #x1D5BC) + ("MATHEMATICAL SANS-SERIF SMALL D" #x1D5BD) + ("MATHEMATICAL SANS-SERIF SMALL E" #x1D5BE) + ("MATHEMATICAL SANS-SERIF SMALL F" #x1D5BF) + ("MATHEMATICAL SANS-SERIF SMALL G" #x1D5C0) + ("MATHEMATICAL SANS-SERIF SMALL H" #x1D5C1) + ("MATHEMATICAL SANS-SERIF SMALL I" #x1D5C2) + ("MATHEMATICAL SANS-SERIF SMALL J" #x1D5C3) + ("MATHEMATICAL SANS-SERIF SMALL K" #x1D5C4) + ("MATHEMATICAL SANS-SERIF SMALL L" #x1D5C5) + ("MATHEMATICAL SANS-SERIF SMALL M" #x1D5C6) + ("MATHEMATICAL SANS-SERIF SMALL N" #x1D5C7) + ("MATHEMATICAL SANS-SERIF SMALL O" #x1D5C8) + ("MATHEMATICAL SANS-SERIF SMALL P" #x1D5C9) + ("MATHEMATICAL SANS-SERIF SMALL Q" #x1D5CA) + ("MATHEMATICAL SANS-SERIF SMALL R" #x1D5CB) + ("MATHEMATICAL SANS-SERIF SMALL S" #x1D5CC) + ("MATHEMATICAL SANS-SERIF SMALL T" #x1D5CD) + ("MATHEMATICAL SANS-SERIF SMALL U" #x1D5CE) + ("MATHEMATICAL SANS-SERIF SMALL V" #x1D5CF) + ("MATHEMATICAL SANS-SERIF SMALL W" #x1D5D0) + ("MATHEMATICAL SANS-SERIF SMALL X" #x1D5D1) + ("MATHEMATICAL SANS-SERIF SMALL Y" #x1D5D2) + ("MATHEMATICAL SANS-SERIF SMALL Z" #x1D5D3) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL A" #x1D5D4) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL B" #x1D5D5) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL C" #x1D5D6) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL D" #x1D5D7) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL E" #x1D5D8) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL F" #x1D5D9) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL G" #x1D5DA) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL H" #x1D5DB) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL I" #x1D5DC) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL J" #x1D5DD) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL K" #x1D5DE) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL L" #x1D5DF) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL M" #x1D5E0) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL N" #x1D5E1) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL O" #x1D5E2) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL P" #x1D5E3) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL Q" #x1D5E4) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL R" #x1D5E5) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL S" #x1D5E6) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL T" #x1D5E7) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL U" #x1D5E8) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL V" #x1D5E9) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL W" #x1D5EA) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL X" #x1D5EB) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL Y" #x1D5EC) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL Z" #x1D5ED) + ("MATHEMATICAL SANS-SERIF BOLD SMALL A" #x1D5EE) + ("MATHEMATICAL SANS-SERIF BOLD SMALL B" #x1D5EF) + ("MATHEMATICAL SANS-SERIF BOLD SMALL C" #x1D5F0) + ("MATHEMATICAL SANS-SERIF BOLD SMALL D" #x1D5F1) + ("MATHEMATICAL SANS-SERIF BOLD SMALL E" #x1D5F2) + ("MATHEMATICAL SANS-SERIF BOLD SMALL F" #x1D5F3) + ("MATHEMATICAL SANS-SERIF BOLD SMALL G" #x1D5F4) + ("MATHEMATICAL SANS-SERIF BOLD SMALL H" #x1D5F5) + ("MATHEMATICAL SANS-SERIF BOLD SMALL I" #x1D5F6) + ("MATHEMATICAL SANS-SERIF BOLD SMALL J" #x1D5F7) + ("MATHEMATICAL SANS-SERIF BOLD SMALL K" #x1D5F8) + ("MATHEMATICAL SANS-SERIF BOLD SMALL L" #x1D5F9) + ("MATHEMATICAL SANS-SERIF BOLD SMALL M" #x1D5FA) + ("MATHEMATICAL SANS-SERIF BOLD SMALL N" #x1D5FB) + ("MATHEMATICAL SANS-SERIF BOLD SMALL O" #x1D5FC) + ("MATHEMATICAL SANS-SERIF BOLD SMALL P" #x1D5FD) + ("MATHEMATICAL SANS-SERIF BOLD SMALL Q" #x1D5FE) + ("MATHEMATICAL SANS-SERIF BOLD SMALL R" #x1D5FF) + ("MATHEMATICAL SANS-SERIF BOLD SMALL S" #x1D600) + ("MATHEMATICAL SANS-SERIF BOLD SMALL T" #x1D601) + ("MATHEMATICAL SANS-SERIF BOLD SMALL U" #x1D602) + ("MATHEMATICAL SANS-SERIF BOLD SMALL V" #x1D603) + ("MATHEMATICAL SANS-SERIF BOLD SMALL W" #x1D604) + ("MATHEMATICAL SANS-SERIF BOLD SMALL X" #x1D605) + ("MATHEMATICAL SANS-SERIF BOLD SMALL Y" #x1D606) + ("MATHEMATICAL SANS-SERIF BOLD SMALL Z" #x1D607) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL A" #x1D608) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL B" #x1D609) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL C" #x1D60A) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL D" #x1D60B) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL E" #x1D60C) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL F" #x1D60D) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL G" #x1D60E) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL H" #x1D60F) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL I" #x1D610) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL J" #x1D611) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL K" #x1D612) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL L" #x1D613) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL M" #x1D614) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL N" #x1D615) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL O" #x1D616) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL P" #x1D617) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q" #x1D618) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL R" #x1D619) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL S" #x1D61A) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL T" #x1D61B) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL U" #x1D61C) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL V" #x1D61D) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL W" #x1D61E) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL X" #x1D61F) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y" #x1D620) + ("MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z" #x1D621) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL A" #x1D622) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL B" #x1D623) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL C" #x1D624) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL D" #x1D625) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL E" #x1D626) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL F" #x1D627) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL G" #x1D628) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL H" #x1D629) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL I" #x1D62A) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL J" #x1D62B) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL K" #x1D62C) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL L" #x1D62D) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL M" #x1D62E) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL N" #x1D62F) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL O" #x1D630) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL P" #x1D631) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL Q" #x1D632) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL R" #x1D633) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL S" #x1D634) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL T" #x1D635) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL U" #x1D636) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL V" #x1D637) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL W" #x1D638) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL X" #x1D639) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL Y" #x1D63A) + ("MATHEMATICAL SANS-SERIF ITALIC SMALL Z" #x1D63B) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A" #x1D63C) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B" #x1D63D) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C" #x1D63E) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D" #x1D63F) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E" #x1D640) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F" #x1D641) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G" #x1D642) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H" #x1D643) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I" #x1D644) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J" #x1D645) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K" #x1D646) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L" #x1D647) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M" #x1D648) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N" #x1D649) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O" #x1D64A) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P" #x1D64B) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q" #x1D64C) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R" #x1D64D) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S" #x1D64E) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T" #x1D64F) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U" #x1D650) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V" #x1D651) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W" #x1D652) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X" #x1D653) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y" #x1D654) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z" #x1D655) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A" #x1D656) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B" #x1D657) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C" #x1D658) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D" #x1D659) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E" #x1D65A) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F" #x1D65B) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G" #x1D65C) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H" #x1D65D) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I" #x1D65E) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J" #x1D65F) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K" #x1D660) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L" #x1D661) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M" #x1D662) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N" #x1D663) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O" #x1D664) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P" #x1D665) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q" #x1D666) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R" #x1D667) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S" #x1D668) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T" #x1D669) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U" #x1D66A) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V" #x1D66B) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W" #x1D66C) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X" #x1D66D) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y" #x1D66E) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z" #x1D66F) + ("MATHEMATICAL MONOSPACE CAPITAL A" #x1D670) + ("MATHEMATICAL MONOSPACE CAPITAL B" #x1D671) + ("MATHEMATICAL MONOSPACE CAPITAL C" #x1D672) + ("MATHEMATICAL MONOSPACE CAPITAL D" #x1D673) + ("MATHEMATICAL MONOSPACE CAPITAL E" #x1D674) + ("MATHEMATICAL MONOSPACE CAPITAL F" #x1D675) + ("MATHEMATICAL MONOSPACE CAPITAL G" #x1D676) + ("MATHEMATICAL MONOSPACE CAPITAL H" #x1D677) + ("MATHEMATICAL MONOSPACE CAPITAL I" #x1D678) + ("MATHEMATICAL MONOSPACE CAPITAL J" #x1D679) + ("MATHEMATICAL MONOSPACE CAPITAL K" #x1D67A) + ("MATHEMATICAL MONOSPACE CAPITAL L" #x1D67B) + ("MATHEMATICAL MONOSPACE CAPITAL M" #x1D67C) + ("MATHEMATICAL MONOSPACE CAPITAL N" #x1D67D) + ("MATHEMATICAL MONOSPACE CAPITAL O" #x1D67E) + ("MATHEMATICAL MONOSPACE CAPITAL P" #x1D67F) + ("MATHEMATICAL MONOSPACE CAPITAL Q" #x1D680) + ("MATHEMATICAL MONOSPACE CAPITAL R" #x1D681) + ("MATHEMATICAL MONOSPACE CAPITAL S" #x1D682) + ("MATHEMATICAL MONOSPACE CAPITAL T" #x1D683) + ("MATHEMATICAL MONOSPACE CAPITAL U" #x1D684) + ("MATHEMATICAL MONOSPACE CAPITAL V" #x1D685) + ("MATHEMATICAL MONOSPACE CAPITAL W" #x1D686) + ("MATHEMATICAL MONOSPACE CAPITAL X" #x1D687) + ("MATHEMATICAL MONOSPACE CAPITAL Y" #x1D688) + ("MATHEMATICAL MONOSPACE CAPITAL Z" #x1D689) + ("MATHEMATICAL MONOSPACE SMALL A" #x1D68A) + ("MATHEMATICAL MONOSPACE SMALL B" #x1D68B) + ("MATHEMATICAL MONOSPACE SMALL C" #x1D68C) + ("MATHEMATICAL MONOSPACE SMALL D" #x1D68D) + ("MATHEMATICAL MONOSPACE SMALL E" #x1D68E) + ("MATHEMATICAL MONOSPACE SMALL F" #x1D68F) + ("MATHEMATICAL MONOSPACE SMALL G" #x1D690) + ("MATHEMATICAL MONOSPACE SMALL H" #x1D691) + ("MATHEMATICAL MONOSPACE SMALL I" #x1D692) + ("MATHEMATICAL MONOSPACE SMALL J" #x1D693) + ("MATHEMATICAL MONOSPACE SMALL K" #x1D694) + ("MATHEMATICAL MONOSPACE SMALL L" #x1D695) + ("MATHEMATICAL MONOSPACE SMALL M" #x1D696) + ("MATHEMATICAL MONOSPACE SMALL N" #x1D697) + ("MATHEMATICAL MONOSPACE SMALL O" #x1D698) + ("MATHEMATICAL MONOSPACE SMALL P" #x1D699) + ("MATHEMATICAL MONOSPACE SMALL Q" #x1D69A) + ("MATHEMATICAL MONOSPACE SMALL R" #x1D69B) + ("MATHEMATICAL MONOSPACE SMALL S" #x1D69C) + ("MATHEMATICAL MONOSPACE SMALL T" #x1D69D) + ("MATHEMATICAL MONOSPACE SMALL U" #x1D69E) + ("MATHEMATICAL MONOSPACE SMALL V" #x1D69F) + ("MATHEMATICAL MONOSPACE SMALL W" #x1D6A0) + ("MATHEMATICAL MONOSPACE SMALL X" #x1D6A1) + ("MATHEMATICAL MONOSPACE SMALL Y" #x1D6A2) + ("MATHEMATICAL MONOSPACE SMALL Z" #x1D6A3) + ("MATHEMATICAL BOLD CAPITAL ALPHA" #x1D6A8) + ("MATHEMATICAL BOLD CAPITAL BETA" #x1D6A9) + ("MATHEMATICAL BOLD CAPITAL GAMMA" #x1D6AA) + ("MATHEMATICAL BOLD CAPITAL DELTA" #x1D6AB) + ("MATHEMATICAL BOLD CAPITAL EPSILON" #x1D6AC) + ("MATHEMATICAL BOLD CAPITAL ZETA" #x1D6AD) + ("MATHEMATICAL BOLD CAPITAL ETA" #x1D6AE) + ("MATHEMATICAL BOLD CAPITAL THETA" #x1D6AF) + ("MATHEMATICAL BOLD CAPITAL IOTA" #x1D6B0) + ("MATHEMATICAL BOLD CAPITAL KAPPA" #x1D6B1) + ("MATHEMATICAL BOLD CAPITAL LAMDA" #x1D6B2) + ("MATHEMATICAL BOLD CAPITAL MU" #x1D6B3) + ("MATHEMATICAL BOLD CAPITAL NU" #x1D6B4) + ("MATHEMATICAL BOLD CAPITAL XI" #x1D6B5) + ("MATHEMATICAL BOLD CAPITAL OMICRON" #x1D6B6) + ("MATHEMATICAL BOLD CAPITAL PI" #x1D6B7) + ("MATHEMATICAL BOLD CAPITAL RHO" #x1D6B8) + ("MATHEMATICAL BOLD CAPITAL THETA SYMBOL" #x1D6B9) + ("MATHEMATICAL BOLD CAPITAL SIGMA" #x1D6BA) + ("MATHEMATICAL BOLD CAPITAL TAU" #x1D6BB) + ("MATHEMATICAL BOLD CAPITAL UPSILON" #x1D6BC) + ("MATHEMATICAL BOLD CAPITAL PHI" #x1D6BD) + ("MATHEMATICAL BOLD CAPITAL CHI" #x1D6BE) + ("MATHEMATICAL BOLD CAPITAL PSI" #x1D6BF) + ("MATHEMATICAL BOLD CAPITAL OMEGA" #x1D6C0) + ("MATHEMATICAL BOLD NABLA" #x1D6C1) + ("MATHEMATICAL BOLD SMALL ALPHA" #x1D6C2) + ("MATHEMATICAL BOLD SMALL BETA" #x1D6C3) + ("MATHEMATICAL BOLD SMALL GAMMA" #x1D6C4) + ("MATHEMATICAL BOLD SMALL DELTA" #x1D6C5) + ("MATHEMATICAL BOLD SMALL EPSILON" #x1D6C6) + ("MATHEMATICAL BOLD SMALL ZETA" #x1D6C7) + ("MATHEMATICAL BOLD SMALL ETA" #x1D6C8) + ("MATHEMATICAL BOLD SMALL THETA" #x1D6C9) + ("MATHEMATICAL BOLD SMALL IOTA" #x1D6CA) + ("MATHEMATICAL BOLD SMALL KAPPA" #x1D6CB) + ("MATHEMATICAL BOLD SMALL LAMDA" #x1D6CC) + ("MATHEMATICAL BOLD SMALL MU" #x1D6CD) + ("MATHEMATICAL BOLD SMALL NU" #x1D6CE) + ("MATHEMATICAL BOLD SMALL XI" #x1D6CF) + ("MATHEMATICAL BOLD SMALL OMICRON" #x1D6D0) + ("MATHEMATICAL BOLD SMALL PI" #x1D6D1) + ("MATHEMATICAL BOLD SMALL RHO" #x1D6D2) + ("MATHEMATICAL BOLD SMALL FINAL SIGMA" #x1D6D3) + ("MATHEMATICAL BOLD SMALL SIGMA" #x1D6D4) + ("MATHEMATICAL BOLD SMALL TAU" #x1D6D5) + ("MATHEMATICAL BOLD SMALL UPSILON" #x1D6D6) + ("MATHEMATICAL BOLD SMALL PHI" #x1D6D7) + ("MATHEMATICAL BOLD SMALL CHI" #x1D6D8) + ("MATHEMATICAL BOLD SMALL PSI" #x1D6D9) + ("MATHEMATICAL BOLD SMALL OMEGA" #x1D6DA) + ("MATHEMATICAL BOLD PARTIAL DIFFERENTIAL" #x1D6DB) + ("MATHEMATICAL BOLD EPSILON SYMBOL" #x1D6DC) + ("MATHEMATICAL BOLD THETA SYMBOL" #x1D6DD) + ("MATHEMATICAL BOLD KAPPA SYMBOL" #x1D6DE) + ("MATHEMATICAL BOLD PHI SYMBOL" #x1D6DF) + ("MATHEMATICAL BOLD RHO SYMBOL" #x1D6E0) + ("MATHEMATICAL BOLD PI SYMBOL" #x1D6E1) + ("MATHEMATICAL ITALIC CAPITAL ALPHA" #x1D6E2) + ("MATHEMATICAL ITALIC CAPITAL BETA" #x1D6E3) + ("MATHEMATICAL ITALIC CAPITAL GAMMA" #x1D6E4) + ("MATHEMATICAL ITALIC CAPITAL DELTA" #x1D6E5) + ("MATHEMATICAL ITALIC CAPITAL EPSILON" #x1D6E6) + ("MATHEMATICAL ITALIC CAPITAL ZETA" #x1D6E7) + ("MATHEMATICAL ITALIC CAPITAL ETA" #x1D6E8) + ("MATHEMATICAL ITALIC CAPITAL THETA" #x1D6E9) + ("MATHEMATICAL ITALIC CAPITAL IOTA" #x1D6EA) + ("MATHEMATICAL ITALIC CAPITAL KAPPA" #x1D6EB) + ("MATHEMATICAL ITALIC CAPITAL LAMDA" #x1D6EC) + ("MATHEMATICAL ITALIC CAPITAL MU" #x1D6ED) + ("MATHEMATICAL ITALIC CAPITAL NU" #x1D6EE) + ("MATHEMATICAL ITALIC CAPITAL XI" #x1D6EF) + ("MATHEMATICAL ITALIC CAPITAL OMICRON" #x1D6F0) + ("MATHEMATICAL ITALIC CAPITAL PI" #x1D6F1) + ("MATHEMATICAL ITALIC CAPITAL RHO" #x1D6F2) + ("MATHEMATICAL ITALIC CAPITAL THETA SYMBOL" #x1D6F3) + ("MATHEMATICAL ITALIC CAPITAL SIGMA" #x1D6F4) + ("MATHEMATICAL ITALIC CAPITAL TAU" #x1D6F5) + ("MATHEMATICAL ITALIC CAPITAL UPSILON" #x1D6F6) + ("MATHEMATICAL ITALIC CAPITAL PHI" #x1D6F7) + ("MATHEMATICAL ITALIC CAPITAL CHI" #x1D6F8) + ("MATHEMATICAL ITALIC CAPITAL PSI" #x1D6F9) + ("MATHEMATICAL ITALIC CAPITAL OMEGA" #x1D6FA) + ("MATHEMATICAL ITALIC NABLA" #x1D6FB) + ("MATHEMATICAL ITALIC SMALL ALPHA" #x1D6FC) + ("MATHEMATICAL ITALIC SMALL BETA" #x1D6FD) + ("MATHEMATICAL ITALIC SMALL GAMMA" #x1D6FE) + ("MATHEMATICAL ITALIC SMALL DELTA" #x1D6FF) + ("MATHEMATICAL ITALIC SMALL EPSILON" #x1D700) + ("MATHEMATICAL ITALIC SMALL ZETA" #x1D701) + ("MATHEMATICAL ITALIC SMALL ETA" #x1D702) + ("MATHEMATICAL ITALIC SMALL THETA" #x1D703) + ("MATHEMATICAL ITALIC SMALL IOTA" #x1D704) + ("MATHEMATICAL ITALIC SMALL KAPPA" #x1D705) + ("MATHEMATICAL ITALIC SMALL LAMDA" #x1D706) + ("MATHEMATICAL ITALIC SMALL MU" #x1D707) + ("MATHEMATICAL ITALIC SMALL NU" #x1D708) + ("MATHEMATICAL ITALIC SMALL XI" #x1D709) + ("MATHEMATICAL ITALIC SMALL OMICRON" #x1D70A) + ("MATHEMATICAL ITALIC SMALL PI" #x1D70B) + ("MATHEMATICAL ITALIC SMALL RHO" #x1D70C) + ("MATHEMATICAL ITALIC SMALL FINAL SIGMA" #x1D70D) + ("MATHEMATICAL ITALIC SMALL SIGMA" #x1D70E) + ("MATHEMATICAL ITALIC SMALL TAU" #x1D70F) + ("MATHEMATICAL ITALIC SMALL UPSILON" #x1D710) + ("MATHEMATICAL ITALIC SMALL PHI" #x1D711) + ("MATHEMATICAL ITALIC SMALL CHI" #x1D712) + ("MATHEMATICAL ITALIC SMALL PSI" #x1D713) + ("MATHEMATICAL ITALIC SMALL OMEGA" #x1D714) + ("MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL" #x1D715) + ("MATHEMATICAL ITALIC EPSILON SYMBOL" #x1D716) + ("MATHEMATICAL ITALIC THETA SYMBOL" #x1D717) + ("MATHEMATICAL ITALIC KAPPA SYMBOL" #x1D718) + ("MATHEMATICAL ITALIC PHI SYMBOL" #x1D719) + ("MATHEMATICAL ITALIC RHO SYMBOL" #x1D71A) + ("MATHEMATICAL ITALIC PI SYMBOL" #x1D71B) + ("MATHEMATICAL BOLD ITALIC CAPITAL ALPHA" #x1D71C) + ("MATHEMATICAL BOLD ITALIC CAPITAL BETA" #x1D71D) + ("MATHEMATICAL BOLD ITALIC CAPITAL GAMMA" #x1D71E) + ("MATHEMATICAL BOLD ITALIC CAPITAL DELTA" #x1D71F) + ("MATHEMATICAL BOLD ITALIC CAPITAL EPSILON" #x1D720) + ("MATHEMATICAL BOLD ITALIC CAPITAL ZETA" #x1D721) + ("MATHEMATICAL BOLD ITALIC CAPITAL ETA" #x1D722) + ("MATHEMATICAL BOLD ITALIC CAPITAL THETA" #x1D723) + ("MATHEMATICAL BOLD ITALIC CAPITAL IOTA" #x1D724) + ("MATHEMATICAL BOLD ITALIC CAPITAL KAPPA" #x1D725) + ("MATHEMATICAL BOLD ITALIC CAPITAL LAMDA" #x1D726) + ("MATHEMATICAL BOLD ITALIC CAPITAL MU" #x1D727) + ("MATHEMATICAL BOLD ITALIC CAPITAL NU" #x1D728) + ("MATHEMATICAL BOLD ITALIC CAPITAL XI" #x1D729) + ("MATHEMATICAL BOLD ITALIC CAPITAL OMICRON" #x1D72A) + ("MATHEMATICAL BOLD ITALIC CAPITAL PI" #x1D72B) + ("MATHEMATICAL BOLD ITALIC CAPITAL RHO" #x1D72C) + ("MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL" #x1D72D) + ("MATHEMATICAL BOLD ITALIC CAPITAL SIGMA" #x1D72E) + ("MATHEMATICAL BOLD ITALIC CAPITAL TAU" #x1D72F) + ("MATHEMATICAL BOLD ITALIC CAPITAL UPSILON" #x1D730) + ("MATHEMATICAL BOLD ITALIC CAPITAL PHI" #x1D731) + ("MATHEMATICAL BOLD ITALIC CAPITAL CHI" #x1D732) + ("MATHEMATICAL BOLD ITALIC CAPITAL PSI" #x1D733) + ("MATHEMATICAL BOLD ITALIC CAPITAL OMEGA" #x1D734) + ("MATHEMATICAL BOLD ITALIC NABLA" #x1D735) + ("MATHEMATICAL BOLD ITALIC SMALL ALPHA" #x1D736) + ("MATHEMATICAL BOLD ITALIC SMALL BETA" #x1D737) + ("MATHEMATICAL BOLD ITALIC SMALL GAMMA" #x1D738) + ("MATHEMATICAL BOLD ITALIC SMALL DELTA" #x1D739) + ("MATHEMATICAL BOLD ITALIC SMALL EPSILON" #x1D73A) + ("MATHEMATICAL BOLD ITALIC SMALL ZETA" #x1D73B) + ("MATHEMATICAL BOLD ITALIC SMALL ETA" #x1D73C) + ("MATHEMATICAL BOLD ITALIC SMALL THETA" #x1D73D) + ("MATHEMATICAL BOLD ITALIC SMALL IOTA" #x1D73E) + ("MATHEMATICAL BOLD ITALIC SMALL KAPPA" #x1D73F) + ("MATHEMATICAL BOLD ITALIC SMALL LAMDA" #x1D740) + ("MATHEMATICAL BOLD ITALIC SMALL MU" #x1D741) + ("MATHEMATICAL BOLD ITALIC SMALL NU" #x1D742) + ("MATHEMATICAL BOLD ITALIC SMALL XI" #x1D743) + ("MATHEMATICAL BOLD ITALIC SMALL OMICRON" #x1D744) + ("MATHEMATICAL BOLD ITALIC SMALL PI" #x1D745) + ("MATHEMATICAL BOLD ITALIC SMALL RHO" #x1D746) + ("MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA" #x1D747) + ("MATHEMATICAL BOLD ITALIC SMALL SIGMA" #x1D748) + ("MATHEMATICAL BOLD ITALIC SMALL TAU" #x1D749) + ("MATHEMATICAL BOLD ITALIC SMALL UPSILON" #x1D74A) + ("MATHEMATICAL BOLD ITALIC SMALL PHI" #x1D74B) + ("MATHEMATICAL BOLD ITALIC SMALL CHI" #x1D74C) + ("MATHEMATICAL BOLD ITALIC SMALL PSI" #x1D74D) + ("MATHEMATICAL BOLD ITALIC SMALL OMEGA" #x1D74E) + ("MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL" #x1D74F) + ("MATHEMATICAL BOLD ITALIC EPSILON SYMBOL" #x1D750) + ("MATHEMATICAL BOLD ITALIC THETA SYMBOL" #x1D751) + ("MATHEMATICAL BOLD ITALIC KAPPA SYMBOL" #x1D752) + ("MATHEMATICAL BOLD ITALIC PHI SYMBOL" #x1D753) + ("MATHEMATICAL BOLD ITALIC RHO SYMBOL" #x1D754) + ("MATHEMATICAL BOLD ITALIC PI SYMBOL" #x1D755) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA" #x1D756) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA" #x1D757) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA" #x1D758) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA" #x1D759) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON" #x1D75A) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA" #x1D75B) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA" #x1D75C) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA" #x1D75D) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA" #x1D75E) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA" #x1D75F) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA" #x1D760) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL MU" #x1D761) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL NU" #x1D762) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL XI" #x1D763) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON" #x1D764) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL PI" #x1D765) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO" #x1D766) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL" #x1D767) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA" #x1D768) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU" #x1D769) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON" #x1D76A) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI" #x1D76B) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI" #x1D76C) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI" #x1D76D) + ("MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA" #x1D76E) + ("MATHEMATICAL SANS-SERIF BOLD NABLA" #x1D76F) + ("MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA" #x1D770) + ("MATHEMATICAL SANS-SERIF BOLD SMALL BETA" #x1D771) + ("MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA" #x1D772) + ("MATHEMATICAL SANS-SERIF BOLD SMALL DELTA" #x1D773) + ("MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON" #x1D774) + ("MATHEMATICAL SANS-SERIF BOLD SMALL ZETA" #x1D775) + ("MATHEMATICAL SANS-SERIF BOLD SMALL ETA" #x1D776) + ("MATHEMATICAL SANS-SERIF BOLD SMALL THETA" #x1D777) + ("MATHEMATICAL SANS-SERIF BOLD SMALL IOTA" #x1D778) + ("MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA" #x1D779) + ("MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA" #x1D77A) + ("MATHEMATICAL SANS-SERIF BOLD SMALL MU" #x1D77B) + ("MATHEMATICAL SANS-SERIF BOLD SMALL NU" #x1D77C) + ("MATHEMATICAL SANS-SERIF BOLD SMALL XI" #x1D77D) + ("MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON" #x1D77E) + ("MATHEMATICAL SANS-SERIF BOLD SMALL PI" #x1D77F) + ("MATHEMATICAL SANS-SERIF BOLD SMALL RHO" #x1D780) + ("MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA" #x1D781) + ("MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA" #x1D782) + ("MATHEMATICAL SANS-SERIF BOLD SMALL TAU" #x1D783) + ("MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON" #x1D784) + ("MATHEMATICAL SANS-SERIF BOLD SMALL PHI" #x1D785) + ("MATHEMATICAL SANS-SERIF BOLD SMALL CHI" #x1D786) + ("MATHEMATICAL SANS-SERIF BOLD SMALL PSI" #x1D787) + ("MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA" #x1D788) + ("MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL" #x1D789) + ("MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL" #x1D78A) + ("MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL" #x1D78B) + ("MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL" #x1D78C) + ("MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL" #x1D78D) + ("MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL" #x1D78E) + ("MATHEMATICAL SANS-SERIF BOLD PI SYMBOL" #x1D78F) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA" #x1D790) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA" #x1D791) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA" #x1D792) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA" #x1D793) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON" #x1D794) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA" #x1D795) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA" #x1D796) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA" #x1D797) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA" #x1D798) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA" #x1D799) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA" #x1D79A) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU" #x1D79B) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU" #x1D79C) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI" #x1D79D) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON" #x1D79E) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI" #x1D79F) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO" #x1D7A0) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL" #x1D7A1) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA" #x1D7A2) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU" #x1D7A3) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON" #x1D7A4) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI" #x1D7A5) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI" #x1D7A6) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI" #x1D7A7) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA" #x1D7A8) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA" #x1D7A9) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA" #x1D7AA) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA" #x1D7AB) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA" #x1D7AC) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA" #x1D7AD) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON" #x1D7AE) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA" #x1D7AF) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA" #x1D7B0) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA" #x1D7B1) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA" #x1D7B2) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA" #x1D7B3) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA" #x1D7B4) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU" #x1D7B5) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU" #x1D7B6) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI" #x1D7B7) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON" #x1D7B8) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI" #x1D7B9) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO" #x1D7BA) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA" #x1D7BB) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA" #x1D7BC) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU" #x1D7BD) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON" #x1D7BE) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI" #x1D7BF) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI" #x1D7C0) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI" #x1D7C1) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA" #x1D7C2) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL" #x1D7C3) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL" #x1D7C4) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL" #x1D7C5) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL" #x1D7C6) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL" #x1D7C7) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL" #x1D7C8) + ("MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL" #x1D7C9) + ("MATHEMATICAL BOLD DIGIT ZERO" #x1D7CE) + ("MATHEMATICAL BOLD DIGIT ONE" #x1D7CF) + ("MATHEMATICAL BOLD DIGIT TWO" #x1D7D0) + ("MATHEMATICAL BOLD DIGIT THREE" #x1D7D1) + ("MATHEMATICAL BOLD DIGIT FOUR" #x1D7D2) + ("MATHEMATICAL BOLD DIGIT FIVE" #x1D7D3) + ("MATHEMATICAL BOLD DIGIT SIX" #x1D7D4) + ("MATHEMATICAL BOLD DIGIT SEVEN" #x1D7D5) + ("MATHEMATICAL BOLD DIGIT EIGHT" #x1D7D6) + ("MATHEMATICAL BOLD DIGIT NINE" #x1D7D7) + ("MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO" #x1D7D8) + ("MATHEMATICAL DOUBLE-STRUCK DIGIT ONE" #x1D7D9) + ("MATHEMATICAL DOUBLE-STRUCK DIGIT TWO" #x1D7DA) + ("MATHEMATICAL DOUBLE-STRUCK DIGIT THREE" #x1D7DB) + ("MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR" #x1D7DC) + ("MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE" #x1D7DD) + ("MATHEMATICAL DOUBLE-STRUCK DIGIT SIX" #x1D7DE) + ("MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN" #x1D7DF) + ("MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT" #x1D7E0) + ("MATHEMATICAL DOUBLE-STRUCK DIGIT NINE" #x1D7E1) + ("MATHEMATICAL SANS-SERIF DIGIT ZERO" #x1D7E2) + ("MATHEMATICAL SANS-SERIF DIGIT ONE" #x1D7E3) + ("MATHEMATICAL SANS-SERIF DIGIT TWO" #x1D7E4) + ("MATHEMATICAL SANS-SERIF DIGIT THREE" #x1D7E5) + ("MATHEMATICAL SANS-SERIF DIGIT FOUR" #x1D7E6) + ("MATHEMATICAL SANS-SERIF DIGIT FIVE" #x1D7E7) + ("MATHEMATICAL SANS-SERIF DIGIT SIX" #x1D7E8) + ("MATHEMATICAL SANS-SERIF DIGIT SEVEN" #x1D7E9) + ("MATHEMATICAL SANS-SERIF DIGIT EIGHT" #x1D7EA) + ("MATHEMATICAL SANS-SERIF DIGIT NINE" #x1D7EB) + ("MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO" #x1D7EC) + ("MATHEMATICAL SANS-SERIF BOLD DIGIT ONE" #x1D7ED) + ("MATHEMATICAL SANS-SERIF BOLD DIGIT TWO" #x1D7EE) + ("MATHEMATICAL SANS-SERIF BOLD DIGIT THREE" #x1D7EF) + ("MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR" #x1D7F0) + ("MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE" #x1D7F1) + ("MATHEMATICAL SANS-SERIF BOLD DIGIT SIX" #x1D7F2) + ("MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN" #x1D7F3) + ("MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT" #x1D7F4) + ("MATHEMATICAL SANS-SERIF BOLD DIGIT NINE" #x1D7F5) + ("MATHEMATICAL MONOSPACE DIGIT ZERO" #x1D7F6) + ("MATHEMATICAL MONOSPACE DIGIT ONE" #x1D7F7) + ("MATHEMATICAL MONOSPACE DIGIT TWO" #x1D7F8) + ("MATHEMATICAL MONOSPACE DIGIT THREE" #x1D7F9) + ("MATHEMATICAL MONOSPACE DIGIT FOUR" #x1D7FA) + ("MATHEMATICAL MONOSPACE DIGIT FIVE" #x1D7FB) + ("MATHEMATICAL MONOSPACE DIGIT SIX" #x1D7FC) + ("MATHEMATICAL MONOSPACE DIGIT SEVEN" #x1D7FD) + ("MATHEMATICAL MONOSPACE DIGIT EIGHT" #x1D7FE) + ("MATHEMATICAL MONOSPACE DIGIT NINE" #x1D7FF) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/char-name/unicode/E0000-E007F.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,99 @@ +(nxml-define-char-name-set 'tags + '(("LANGUAGE TAG" #xE0001) + ("TAG SPACE" #xE0020) + ("TAG EXCLAMATION MARK" #xE0021) + ("TAG QUOTATION MARK" #xE0022) + ("TAG NUMBER SIGN" #xE0023) + ("TAG DOLLAR SIGN" #xE0024) + ("TAG PERCENT SIGN" #xE0025) + ("TAG AMPERSAND" #xE0026) + ("TAG APOSTROPHE" #xE0027) + ("TAG LEFT PARENTHESIS" #xE0028) + ("TAG RIGHT PARENTHESIS" #xE0029) + ("TAG ASTERISK" #xE002A) + ("TAG PLUS SIGN" #xE002B) + ("TAG COMMA" #xE002C) + ("TAG HYPHEN-MINUS" #xE002D) + ("TAG FULL STOP" #xE002E) + ("TAG SOLIDUS" #xE002F) + ("TAG DIGIT ZERO" #xE0030) + ("TAG DIGIT ONE" #xE0031) + ("TAG DIGIT TWO" #xE0032) + ("TAG DIGIT THREE" #xE0033) + ("TAG DIGIT FOUR" #xE0034) + ("TAG DIGIT FIVE" #xE0035) + ("TAG DIGIT SIX" #xE0036) + ("TAG DIGIT SEVEN" #xE0037) + ("TAG DIGIT EIGHT" #xE0038) + ("TAG DIGIT NINE" #xE0039) + ("TAG COLON" #xE003A) + ("TAG SEMICOLON" #xE003B) + ("TAG LESS-THAN SIGN" #xE003C) + ("TAG EQUALS SIGN" #xE003D) + ("TAG GREATER-THAN SIGN" #xE003E) + ("TAG QUESTION MARK" #xE003F) + ("TAG COMMERCIAL AT" #xE0040) + ("TAG LATIN CAPITAL LETTER A" #xE0041) + ("TAG LATIN CAPITAL LETTER B" #xE0042) + ("TAG LATIN CAPITAL LETTER C" #xE0043) + ("TAG LATIN CAPITAL LETTER D" #xE0044) + ("TAG LATIN CAPITAL LETTER E" #xE0045) + ("TAG LATIN CAPITAL LETTER F" #xE0046) + ("TAG LATIN CAPITAL LETTER G" #xE0047) + ("TAG LATIN CAPITAL LETTER H" #xE0048) + ("TAG LATIN CAPITAL LETTER I" #xE0049) + ("TAG LATIN CAPITAL LETTER J" #xE004A) + ("TAG LATIN CAPITAL LETTER K" #xE004B) + ("TAG LATIN CAPITAL LETTER L" #xE004C) + ("TAG LATIN CAPITAL LETTER M" #xE004D) + ("TAG LATIN CAPITAL LETTER N" #xE004E) + ("TAG LATIN CAPITAL LETTER O" #xE004F) + ("TAG LATIN CAPITAL LETTER P" #xE0050) + ("TAG LATIN CAPITAL LETTER Q" #xE0051) + ("TAG LATIN CAPITAL LETTER R" #xE0052) + ("TAG LATIN CAPITAL LETTER S" #xE0053) + ("TAG LATIN CAPITAL LETTER T" #xE0054) + ("TAG LATIN CAPITAL LETTER U" #xE0055) + ("TAG LATIN CAPITAL LETTER V" #xE0056) + ("TAG LATIN CAPITAL LETTER W" #xE0057) + ("TAG LATIN CAPITAL LETTER X" #xE0058) + ("TAG LATIN CAPITAL LETTER Y" #xE0059) + ("TAG LATIN CAPITAL LETTER Z" #xE005A) + ("TAG LEFT SQUARE BRACKET" #xE005B) + ("TAG REVERSE SOLIDUS" #xE005C) + ("TAG RIGHT SQUARE BRACKET" #xE005D) + ("TAG CIRCUMFLEX ACCENT" #xE005E) + ("TAG LOW LINE" #xE005F) + ("TAG GRAVE ACCENT" #xE0060) + ("TAG LATIN SMALL LETTER A" #xE0061) + ("TAG LATIN SMALL LETTER B" #xE0062) + ("TAG LATIN SMALL LETTER C" #xE0063) + ("TAG LATIN SMALL LETTER D" #xE0064) + ("TAG LATIN SMALL LETTER E" #xE0065) + ("TAG LATIN SMALL LETTER F" #xE0066) + ("TAG LATIN SMALL LETTER G" #xE0067) + ("TAG LATIN SMALL LETTER H" #xE0068) + ("TAG LATIN SMALL LETTER I" #xE0069) + ("TAG LATIN SMALL LETTER J" #xE006A) + ("TAG LATIN SMALL LETTER K" #xE006B) + ("TAG LATIN SMALL LETTER L" #xE006C) + ("TAG LATIN SMALL LETTER M" #xE006D) + ("TAG LATIN SMALL LETTER N" #xE006E) + ("TAG LATIN SMALL LETTER O" #xE006F) + ("TAG LATIN SMALL LETTER P" #xE0070) + ("TAG LATIN SMALL LETTER Q" #xE0071) + ("TAG LATIN SMALL LETTER R" #xE0072) + ("TAG LATIN SMALL LETTER S" #xE0073) + ("TAG LATIN SMALL LETTER T" #xE0074) + ("TAG LATIN SMALL LETTER U" #xE0075) + ("TAG LATIN SMALL LETTER V" #xE0076) + ("TAG LATIN SMALL LETTER W" #xE0077) + ("TAG LATIN SMALL LETTER X" #xE0078) + ("TAG LATIN SMALL LETTER Y" #xE0079) + ("TAG LATIN SMALL LETTER Z" #xE007A) + ("TAG LEFT CURLY BRACKET" #xE007B) + ("TAG VERTICAL LINE" #xE007C) + ("TAG RIGHT CURLY BRACKET" #xE007D) + ("TAG TILDE" #xE007E) + ("CANCEL TAG" #xE007F) + ))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/nxml-enc.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,167 @@ +;;; nxml-enc.el --- XML encoding auto-detection + +;; Copyright (C) 2003 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 2 of +;; the License, or (at your option) any later version. + +;; This program is distributed in the hope that it will be +;; useful, but WITHOUT ANY WARRANTY; without even the implied +;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +;; PURPOSE. See the GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public +;; License along with this program; if not, write to the Free +;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, +;; MA 02111-1307 USA + +;;; Commentary: + +;; User entry points are nxml-start-auto-coding and +;; nxml-stop-auto-coding. This is separate from nxml-mode, because +;; this cannot be autoloaded. It may use +;; `xmltok-get-declared-encoding-position' which can be autoloaded. +;; It's separate from rng-auto.el so it can be byte-compiled, and +;; because it provides independent, useful functionality. + +;;; Code: + +(defvar nxml-file-name-ignore-case + (memq system-type '(vax-vms windows-nt))) + +(defvar nxml-cached-file-name-auto-coding-regexp nil) +(defvar nxml-cached-auto-mode-alist nil) + +(defun nxml-file-name-auto-coding-regexp () + "Return regexp for filenames for which XML auto-coding should be done." + (if (eq auto-mode-alist nxml-cached-auto-mode-alist) + nxml-cached-file-name-auto-coding-regexp + (let ((alist auto-mode-alist) + (case-fold-search nxml-file-name-ignore-case) + regexps) + (setq nxml-cached-auto-mode-alist alist) + (while alist + (when (eq (cdar alist) 'nxml-mode) + (setq regexps (cons (caar alist) regexps))) + (setq alist (cdr alist))) + (setq nxml-cached-file-name-auto-coding-regexp + (if (null (cdr regexps)) + (car regexps) + (mapconcat (lambda (r) + (concat "\\(?:" r "\\)")) + regexps + "\\|")))))) + +(defvar nxml-non-xml-set-auto-coding-function nil + "The function that `set-auto-coding-function' should call for non-XML files.") +(defun nxml-set-auto-coding (file-name size) + (if (let ((case-fold-search nxml-file-name-ignore-case) + (regexp (nxml-file-name-auto-coding-regexp))) + (and regexp + (string-match regexp file-name))) + (nxml-set-xml-coding file-name size) + (and nxml-non-xml-set-auto-coding-function + (funcall nxml-non-xml-set-auto-coding-function file-name size)))) + +(defun nxml-set-xml-coding (file-name size) + "Function to use as `set-auto-coding-function' when file is known to be XML." + (nxml-detect-coding-system (+ (point) (min size 1024)))) + +(defun nxml-detect-coding-system (limit) + (if (< limit (+ (point) 2)) + (if (eq (char-after) 0) 'no-conversion 'utf-8) + (let ((first-two-chars (list (char-after) + (char-after (1+ (point)))))) + (cond ((equal first-two-chars '(#xFE #xFF)) + (and (coding-system-p 'utf-16-be) 'utf-16-be)) + ((equal first-two-chars '(#xFF #xFE)) + (and (coding-system-p 'utf-16-le) 'utf-16-le)) + ((memq 0 first-two-chars) + ;; Certainly not well-formed XML; + ;; perhaps UTF-16 without BOM. + ;; In any case, we can't handle it. + ;; no-conversion gives the user a chance to fix it. + 'no-conversion) + ;; There are other things we might try here in the future + ;; eg UTF-8 BOM, UTF-16 with no BOM + ;; translate to EBCDIC + (t + (let ((enc-pos (xmltok-get-declared-encoding-position limit))) + (cond ((consp enc-pos) + (or (nxml-mime-charset-coding-system + (buffer-substring-no-properties (car enc-pos) + (cdr enc-pos))) + ;; We have an encoding whose name we don't recognize. + ;; What to do? + ;; raw-text seems the best bet: since we got + ;; the XML decl it must be a superset of ASCII, + ;; so we don't need to go to no-conversion + 'raw-text)) + (enc-pos 'utf-8) + ;; invalid XML declaration + (t nil)))))))) + +(defun nxml-mime-charset-coding-system (charset) + (let ((charset-sym (intern (downcase charset))) + (coding-systems (coding-system-list t)) + coding-system ret) + (while (and coding-systems (not ret)) + (setq coding-system (car coding-systems)) + (if (eq (coding-system-get coding-system 'mime-charset) + charset-sym) + (setq ret coding-system) + (setq coding-systems (cdr coding-systems)))) + ret)) + +(defun nxml-start-auto-coding () + "Do encoding auto-detection as specified in the XML standard. +Applied to any files that `auto-mode-alist' says should be handled by +`nxml-mode'." + (interactive) + (unless (eq set-auto-coding-function 'nxml-set-auto-coding) + (let ((inhibit-quit t)) + (setq nxml-non-xml-set-auto-coding-function set-auto-coding-function) + (setq set-auto-coding-function 'nxml-set-auto-coding)))) + +(defun nxml-stop-auto-coding () + "Stop doing encoding auto-detection as specified in the XML standard." + (interactive) + (when (eq set-auto-coding-function 'nxml-set-auto-coding) + (let ((inhibit-quit t)) + (setq set-auto-coding-function nxml-non-xml-set-auto-coding-function) + (setq nxml-non-xml-set-auto-coding-function nil)))) + +(unless (coding-system-p 'us-ascii) + (make-coding-system + ;; Unicode Emacs uses ?- last time I looked + 'us-ascii 2 ?- + "ISO 2022 based 7-bit encoding for ASCII (MIME:US-ASCII)" + '(ascii) + '((safe-charsets ascii) + (mime-charset . us-ascii)))) + +;; Emacs 21.3.50 makes us-ascii an alias for iso-safe without +;; giving it a mime-charset property. +(unless (coding-system-get 'us-ascii 'mime-charset) + (coding-system-put 'us-ascii 'mime-charset 'us-ascii)) + +;; Work around bug in Emacs 21.3 + +(when (and (coding-system-p 'utf-16-le) + (eq (coding-system-get 'utf-16-le 'pre-write-conversion) + 'utf-16-le-pre-write-conversion)) + (coding-system-put 'utf-16-le 'pre-write-conversion nil)) + +(when (and (coding-system-p 'utf-16-le) + (eq (coding-system-get 'utf-16-be 'pre-write-conversion) + 'utf-16-be-pre-write-conversion)) + (coding-system-put 'utf-16-be 'pre-write-conversion nil)) + +(provide 'nxml-enc) + +;;; nxml-enc.el ends here
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/nxml-glyph.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,418 @@ +;;; nxml-glyph.el --- glyph-handling for nxml-mode + +;; Copyright (C) 2003 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 2 of +;; the License, or (at your option) any later version. + +;; This program is distributed in the hope that it will be +;; useful, but WITHOUT ANY WARRANTY; without even the implied +;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +;; PURPOSE. See the GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public +;; License along with this program; if not, write to the Free +;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, +;; MA 02111-1307 USA + +;;; Commentary: + +;; The entry point to this file is `nxml-glyph-display-string'. +;; The current implementation is heuristic due to a lack of +;; Emacs primitives necessary to implement it properly. The user +;; can tweak the heuristics using `nxml-glyph-set-hook'. + +;;; Code: + +(defconst nxml-ascii-glyph-set + [(#x0020 . #x007E)]) + +(defconst nxml-latin1-glyph-set + [(#x0020 . #x007E) + (#x00A0 . #x00FF)]) + +;; These were generated by using nxml-insert-target-repertoire-glyph-set +;; on the TARGET[123] files in +;; http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz + +(defconst nxml-misc-fixed-1-glyph-set + [(#x0020 . #x007E) + (#x00A0 . #x00FF) + (#x0100 . #x017F) + #x018F #x0192 + (#x0218 . #x021B) + #x0259 + (#x02C6 . #x02C7) + (#x02D8 . #x02DD) + (#x0374 . #x0375) + #x037A #x037E + (#x0384 . #x038A) + #x038C + (#x038E . #x03A1) + (#x03A3 . #x03CE) + (#x0401 . #x040C) + (#x040E . #x044F) + (#x0451 . #x045C) + (#x045E . #x045F) + (#x0490 . #x0491) + (#x05D0 . #x05EA) + (#x1E02 . #x1E03) + (#x1E0A . #x1E0B) + (#x1E1E . #x1E1F) + (#x1E40 . #x1E41) + (#x1E56 . #x1E57) + (#x1E60 . #x1E61) + (#x1E6A . #x1E6B) + (#x1E80 . #x1E85) + (#x1EF2 . #x1EF3) + (#x2010 . #x2022) + #x2026 #x2030 + (#x2039 . #x203A) + #x20AC #x2116 #x2122 #x2126 + (#x215B . #x215E) + (#x2190 . #x2193) + #x2260 + (#x2264 . #x2265) + (#x23BA . #x23BD) + (#x2409 . #x240D) + #x2424 #x2500 #x2502 #x250C #x2510 #x2514 #x2518 #x251C #x2524 #x252C #x2534 #x253C #x2592 #x25C6 #x266A #xFFFD] + "Glyph set for TARGET1 glyph repertoire of misc-fixed-* font. +This repertoire is supported for the bold and oblique fonts.") + +(defconst nxml-misc-fixed-2-glyph-set + [(#x0020 . #x007E) + (#x00A0 . #x00FF) + (#x0100 . #x017F) + #x018F #x0192 + (#x01FA . #x01FF) + (#x0218 . #x021B) + #x0259 + (#x02C6 . #x02C7) + #x02C9 + (#x02D8 . #x02DD) + (#x0300 . #x0311) + (#x0374 . #x0375) + #x037A #x037E + (#x0384 . #x038A) + #x038C + (#x038E . #x03A1) + (#x03A3 . #x03CE) + #x03D1 + (#x03D5 . #x03D6) + #x03F1 + (#x0401 . #x040C) + (#x040E . #x044F) + (#x0451 . #x045C) + (#x045E . #x045F) + (#x0490 . #x0491) + (#x05D0 . #x05EA) + (#x1E02 . #x1E03) + (#x1E0A . #x1E0B) + (#x1E1E . #x1E1F) + (#x1E40 . #x1E41) + (#x1E56 . #x1E57) + (#x1E60 . #x1E61) + (#x1E6A . #x1E6B) + (#x1E80 . #x1E85) + (#x1EF2 . #x1EF3) + (#x2010 . #x2022) + #x2026 #x2030 + (#x2032 . #x2034) + (#x2039 . #x203A) + #x203C #x203E #x2044 + (#x2070 . #x2071) + (#x2074 . #x208E) + (#x20A3 . #x20A4) + #x20A7 #x20AC + (#x20D0 . #x20D7) + #x2102 #x2105 #x2113 + (#x2115 . #x2116) + #x211A #x211D #x2122 #x2124 #x2126 #x212E + (#x215B . #x215E) + (#x2190 . #x2195) + (#x21A4 . #x21A8) + (#x21D0 . #x21D5) + (#x2200 . #x2209) + (#x220B . #x220C) + #x220F + (#x2211 . #x2213) + #x2215 + (#x2218 . #x221A) + (#x221D . #x221F) + #x2221 + (#x2224 . #x222B) + #x222E #x223C #x2243 #x2245 + (#x2248 . #x2249) + #x2259 + (#x225F . #x2262) + (#x2264 . #x2265) + (#x226A . #x226B) + (#x2282 . #x228B) + #x2295 #x2297 + (#x22A4 . #x22A7) + (#x22C2 . #x22C3) + #x22C5 #x2300 #x2302 + (#x2308 . #x230B) + #x2310 + (#x2320 . #x2321) + (#x2329 . #x232A) + (#x23BA . #x23BD) + (#x2409 . #x240D) + #x2424 #x2500 #x2502 #x250C #x2510 #x2514 #x2518 #x251C #x2524 #x252C #x2534 #x253C + (#x254C . #x2573) + (#x2580 . #x25A1) + (#x25AA . #x25AC) + (#x25B2 . #x25B3) + #x25BA #x25BC #x25C4 #x25C6 + (#x25CA . #x25CB) + #x25CF + (#x25D8 . #x25D9) + #x25E6 + (#x263A . #x263C) + #x2640 #x2642 #x2660 #x2663 + (#x2665 . #x2666) + (#x266A . #x266B) + (#xFB01 . #xFB02) + #xFFFD] + "Glyph set for TARGET2 glyph repertoire of the misc-fixed-* fonts. +This repertoire is supported for the following fonts: +5x7.bdf 5x8.bdf 6x9.bdf 6x10.bdf 6x12.bdf 7x13.bdf 7x14.bdf clR6x12.bdf") + +(defconst nxml-misc-fixed-3-glyph-set + [(#x0020 . #x007E) + (#x00A0 . #x00FF) + (#x0100 . #x01FF) + (#x0200 . #x0220) + (#x0222 . #x0233) + (#x0250 . #x02AD) + (#x02B0 . #x02EE) + (#x0300 . #x034F) + (#x0360 . #x036F) + (#x0374 . #x0375) + #x037A #x037E + (#x0384 . #x038A) + #x038C + (#x038E . #x03A1) + (#x03A3 . #x03CE) + (#x03D0 . #x03F6) + (#x0400 . #x0486) + (#x0488 . #x04CE) + (#x04D0 . #x04F5) + (#x04F8 . #x04F9) + (#x0500 . #x050F) + (#x0531 . #x0556) + (#x0559 . #x055F) + (#x0561 . #x0587) + (#x0589 . #x058A) + (#x05B0 . #x05B9) + (#x05BB . #x05C4) + (#x05D0 . #x05EA) + (#x05F0 . #x05F4) + (#x10D0 . #x10F8) + #x10FB + (#x1E00 . #x1E9B) + (#x1EA0 . #x1EF9) + (#x1F00 . #x1F15) + (#x1F18 . #x1F1D) + (#x1F20 . #x1F45) + (#x1F48 . #x1F4D) + (#x1F50 . #x1F57) + #x1F59 #x1F5B #x1F5D + (#x1F5F . #x1F7D) + (#x1F80 . #x1FB4) + (#x1FB6 . #x1FC4) + (#x1FC6 . #x1FD3) + (#x1FD6 . #x1FDB) + (#x1FDD . #x1FEF) + (#x1FF2 . #x1FF4) + (#x1FF6 . #x1FFE) + (#x2000 . #x200A) + (#x2010 . #x2027) + (#x202F . #x2052) + #x2057 + (#x205F . #x2063) + (#x2070 . #x2071) + (#x2074 . #x208E) + (#x20A0 . #x20B1) + (#x20D0 . #x20EA) + (#x2100 . #x213A) + (#x213D . #x214B) + (#x2153 . #x2183) + (#x2190 . #x21FF) + (#x2200 . #x22FF) + (#x2300 . #x23CE) + (#x2400 . #x2426) + (#x2440 . #x244A) + (#x2500 . #x25FF) + (#x2600 . #x2613) + (#x2616 . #x2617) + (#x2619 . #x267D) + (#x2680 . #x2689) + (#x27E6 . #x27EB) + (#x27F5 . #x27FF) + (#x2A00 . #x2A06) + #x2A1D #x2A3F #x303F + (#xFB00 . #xFB06) + (#xFB13 . #xFB17) + (#xFB1D . #xFB36) + (#xFB38 . #xFB3C) + #xFB3E + (#xFB40 . #xFB41) + (#xFB43 . #xFB44) + (#xFB46 . #xFB4F) + (#xFE20 . #xFE23) + (#xFF61 . #xFF9F) + #xFFFD] + "Glyph set for TARGET3 glyph repertoire of the misc-fixed-* fonts. +This repertoire is supported for the following fonts: +6x13.bdf 8x13.bdf 9x15.bdf 9x18.bdf 10x20.bdf") + +(defconst nxml-wgl4-glyph-set + [(#x0020 . #x007E) + (#x00A0 . #x017F) + #x0192 + (#x01FA . #x01FF) + (#x02C6 . #x02C7) + #x02C9 + (#x02D8 . #x02DB) + #x02DD + (#x0384 . #x038A) + #x038C + (#x038E . #x03A1) + (#x03A3 . #x03CE) + (#x0401 . #x040C) + (#x040E . #x044F) + (#x0451 . #x045C) + (#x045E . #x045F) + (#x0490 . #x0491) + (#x1E80 . #x1E85) + (#x1EF2 . #x1EF3) + (#x2013 . #x2015) + (#x2017 . #x201E) + (#x2020 . #x2022) + #x2026 #x2030 + (#x2032 . #x2033) + (#x2039 . #x203A) + #x203C #x203E #x2044 #x207F + (#x20A3 . #x20A4) + #x20A7 #x20AC #x2105 #x2113 #x2116 #x2122 #x2126 #x212E + (#x215B . #x215E) + (#x2190 . #x2195) + #x21A8 #x2202 #x2206 #x220F + (#x2211 . #x2212) + #x2215 + (#x2219 . #x221A) + (#x221E . #x221F) + #x2229 #x222B #x2248 + (#x2260 . #x2261) + (#x2264 . #x2265) + #x2302 #x2310 + (#x2320 . #x2321) + #x2500 #x2502 #x250C #x2510 #x2514 #x2518 #x251C #x2524 + #x252C #x2534 #x253C + (#x2550 . #x256C) + #x2580 #x2584 #x2588 #x258C + (#x2590 . #x2593) + (#x25A0 . #x25A1) + (#x25AA . #x25AC) + #x25B2 #x25BA #x25BC #x25C4 + (#x25CA . #x25CB) + #x25CF + (#x25D8 . #x25D9) + #x25E6 + (#x263A . #x263C) + #x2640 #x2642 #x2660 #x2663 + (#x2665 . #x2666) + (#x266A . #x266B) + (#xFB01 . #xFB02)] + "Glyph set corresponding to Windows Glyph List 4.") + +(defvar nxml-glyph-set-hook nil + "*Hook for determining the set of glyphs in a face. +The hook will receive a single argument FACE. If it can determine the +set of glyphs representable by FACE, it must set the variable +`nxml-glyph-set' and return non-nil. Otherwise, it must return +nil. The hook will be run until success. The constants +`nxml-ascii-glyph-set', `nxml-latin1-glyph-set', +`nxml-misc-fixed-1-glyph-set', `nxml-misc-fixed-2-glyph-set', +`nxml-misc-fixed-3-glyph-set' and `nxml-wgl4-glyph-set' are predefined +for use by `nxml-glyph-set-hook'.") + +(defvar nxml-glyph-set nil + "Used by `nxml-glyph-set-hook' to return set of glyphs in a FACE. +This should dynamically bound by any function that runs +`nxml-glyph-set-hook'. The value must be either nil representing an +empty set or a vector. Each member of the vector is either a single +integer or a cons (FIRST . LAST) representing the range of integers +from FIRST to LAST. An integer represents a glyph with that Unicode +code-point. The vector must be ordered.") + +(defun nxml-x-set-glyph-set (face) + (setq nxml-glyph-set + (if (equal (face-attribute face :family) "misc-fixed") + nxml-misc-fixed-3-glyph-set + nxml-wgl4-glyph-set))) + +(defun nxml-w32-set-glyph-set (face) + (setq nxml-glyph-set nxml-wgl4-glyph-set)) + +(defun nxml-window-system-set-glyph-set (face) + (setq nxml-glyph-set nxml-latin1-glyph-set)) + +(defun nxml-terminal-set-glyph-set (face) + (setq nxml-glyph-set nxml-ascii-glyph-set)) + +(add-hook 'nxml-glyph-set-hook + (or (cdr (assq window-system + '((x . nxml-x-set-glyph-set) + (w32 . nxml-w32-set-glyph-set) + (nil . nxml-terminal-set-glyph-set)))) + 'nxml-window-system-set-glyph-set) + t) + +;;;###autoload +(defun nxml-glyph-display-string (n face) + "Return a string that can display a glyph for Unicode code-point N. +FACE gives the face that will be used for displaying the string. +Return nil if the face cannot display a glyph for N." + (let ((nxml-glyph-set nil)) + (run-hook-with-args-until-success 'nxml-glyph-set-hook face) + (and nxml-glyph-set + (nxml-glyph-set-contains-p n nxml-glyph-set) + (let ((ch (decode-char 'ucs n))) + (and ch (string ch)))))) + +(defun nxml-glyph-set-contains-p (n v) + (let ((start 0) + (end (length v)) + found mid mid-val mid-start-val mid-end-val) + (while (> end start) + (setq mid (+ start + (/ (- end start) 2))) + (setq mid-val (aref v mid)) + (if (consp mid-val) + (setq mid-start-val (car mid-val) + mid-end-val (cdr mid-val)) + (setq mid-start-val mid-val + mid-end-val mid-val)) + (cond ((and (<= mid-start-val n) + (<= n mid-end-val)) + (setq found t) + (setq start end)) + ((< n mid-start-val) + (setq end mid)) + (t + (setq start + (if (eq start mid) + end + mid))))) + found)) + +(provide 'nxml-glyph) + +;;; nxml-glyph.el ends here
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/nxml-maint.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,106 @@ +;;; nxml-maint.el --- commands for maintainers of nxml-*.el + +;; Copyright (C) 2003 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 2 of +;; the License, or (at your option) any later version. + +;; This program is distributed in the hope that it will be +;; useful, but WITHOUT ANY WARRANTY; without even the implied +;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +;; PURPOSE. See the GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public +;; License along with this program; if not, write to the Free +;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, +;; MA 02111-1307 USA + +;;; Commentary: + +;;; Code: + +;;; Generating files with Unicode char names. + +(require 'nxml-uchnm) + +(defun nxml-create-unicode-char-name-sets (file) + "Generate files containing char names from Unicode standard." + (interactive "fUnicodeData file: ") + (mapcar (lambda (block) + (let ((nameset (nxml-unicode-block-char-name-set (nth 0 block)))) + (save-excursion + (find-file (concat (get nameset 'nxml-char-name-set-file) + ".el")) + (erase-buffer) + (insert "(nxml-define-char-name-set '") + (prin1 nameset (current-buffer)) + (insert "\n '())\n") + (goto-char (- (point) 3))))) + nxml-unicode-blocks) + (save-excursion + (find-file file) + (goto-char (point-min)) + (let ((blocks nxml-unicode-blocks) + code name) + (while (re-search-forward "^\\([0-9A-F]+\\);\\([^<;][^;]*\\);" + nil + t) + (setq code (string-to-number (match-string 1) 16)) + (setq name (match-string 2)) + (while (and blocks + (> code (nth 2 (car blocks)))) + (setq blocks (cdr blocks))) + (when (and (<= (nth 1 (car blocks)) code) + (<= code (nth 2 (car blocks)))) + (save-excursion + (find-file (concat (get (nxml-unicode-block-char-name-set + (nth 0 (car blocks))) + 'nxml-char-name-set-file) + ".el")) + (insert "(") + (prin1 name (current-buffer)) + (insert (format " #x%04X)\n " code)))))))) + +;;; Parsing target repertoire files from ucs-fonts. +;; This is for converting the TARGET? files in +;; http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz +;; into a glyph set. + +(defun nxml-insert-target-repertoire-glyph-set (file var) + (interactive "fTarget file: \nSVariable name: ") + (let (lst head) + (save-excursion + (set-buffer (find-file-noselect file)) + (goto-char (point-min)) + (while (re-search-forward "^ *\\([a-FA-F0-9]\\{2\\}\\)[ \t]+" nil t) + (let ((row (match-string 1)) + (eol (save-excursion (end-of-line) (point)))) + (while (re-search-forward "\\([a-FA-F0-9]\\{2\\}\\)-\\([a-FA-F0-9]\\{2\\}\\)\\|\\([a-FA-F0-9]\\{2\\}\\)" eol t) + (setq lst + (cons (if (match-beginning 3) + (concat "#x" row (match-string 3)) + (concat "(#x" row (match-string 1) + " . #x" row (match-string 2) ")")) + lst)))))) + (setq lst (nreverse lst)) + (insert (format "(defconst %s\n [" var)) + (while lst + (setq head (car lst)) + (setq lst (cdr lst)) + (insert head) + (when (= (length head) 6) + (while (and lst (= (length (car lst)) 6)) + (insert " ") + (insert (car lst)) + (setq lst (cdr lst)))) + (when lst (insert "\n "))) + (insert "])\n"))) + +(provide 'nxml-maint) + +;;; nxml-maint.el ends here
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/nxml-mode.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,2665 @@ +;;; nxml-mode.el --- a new XML mode + +;; Copyright (C) 2003, 2004 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 2 of +;; the License, or (at your option) any later version. + +;; This program is distributed in the hope that it will be +;; useful, but WITHOUT ANY WARRANTY; without even the implied +;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +;; PURPOSE. See the GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public +;; License along with this program; if not, write to the Free +;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, +;; MA 02111-1307 USA + +;;; Commentary: + +;; To use this include rng-auto.el in your .emacs. + +;; See nxml-rap.el for description of parsing strategy. + +;; The font locking here is independent of font-lock.el. We want to +;; do more sophisticated handling of changes and we want to use the +;; same xmltok rather than regexps for parsing so that we parse +;; consistently and correctly. + +;;; Code: + +(when (featurep 'mucs) + (error "nxml-mode is not compatible with Mule-UCS")) + +(require 'xmltok) +(require 'nxml-enc) +(require 'nxml-glyph) +(require 'nxml-util) +(require 'nxml-rap) +(require 'nxml-outln) + +;;; Customization + +(defgroup nxml nil + "New XML editing mode" + :group 'languages + :group 'wp) + +(defgroup nxml-highlighting-faces nil + "Faces for XML syntax highlighting." + :group 'nxml + :group 'font-lock-highlighting-faces) + +(defcustom nxml-syntax-highlight-flag t + "*Non-nil means nxml-mode should perform syntax highlighting." + :group 'nxml + :type 'boolean) + +(defcustom nxml-char-ref-display-glyph-flag t + "*Non-nil means display glyph following character reference. +The glyph is displayed in `nxml-glyph-face'. The hook +`nxml-glyph-set-hook' can be used to customize for which characters +glyphs are displayed." + :group 'nxml + :type 'boolean) + +(defcustom nxml-mode-hook nil + "Hook run by command `nxml-mode'." + :group 'nxml + :type 'hook) + +(defcustom nxml-sexp-element-flag nil + "*Non-nil means sexp commands treat an element as a single expression." + :group 'nxml + :type 'boolean) + +(defcustom nxml-slash-auto-complete-flag nil + "*Non-nil means typing a slash automatically completes the end-tag. +This is used by `nxml-electric-slash'." + :group 'nxml + :type 'boolean) + +(defcustom nxml-child-indent 2 + "*Indentation for the children of an element relative to the start-tag. +This only applies when the line or lines containing the start-tag contains +nothing else other than that start-tag." + :group 'nxml + :type 'integer) + +(defcustom nxml-attribute-indent 4 + "*Indentation for the attributes of an element relative to the start-tag. +This only applies when the first attribute of a tag starts a line. In other +cases, the first attribute on one line is indented the same as the first +attribute on the previous line." + :group 'nxml + :type 'integer) + +(defvar nxml-fontify-chunk-size 500) + +(defcustom nxml-bind-meta-tab-to-complete-flag (not window-system) + "*Non-nil means bind M-TAB in `nxml-mode-map' to `nxml-complete'. +C-return will be bound to `nxml-complete' in any case. +M-TAB gets swallowed by many window systems/managers, and +`documentation' will show M-TAB rather than C-return as the +binding `rng-complete' when both are bound. So it's better +to bind M-TAB only when it will work." + :group 'nxml + :set (lambda (sym flag) + (set-default sym flag) + (when (and (boundp 'nxml-mode-map) nxml-mode-map) + (define-key nxml-mode-map "\M-\t" (and flag 'nxml-complete)))) + :type 'boolean) + +(defcustom nxml-prefer-utf-16-to-utf-8-flag nil + "*Non-nil means prefer UTF-16 to UTF-8 when saving a buffer. +This is used only when a buffer does not contain an encoding declaration +and when its current `buffer-file-coding-system' specifies neither UTF-16 +nor UTF-8." + :group 'nxml + :type 'boolean) + +(defcustom nxml-prefer-utf-16-little-to-big-endian-flag (eq system-type + 'windows-nt) + "*Non-nil means prefer little-endian to big-endian byte-order for UTF-16. +This is used only for saving a buffer; when reading the byte-order is +auto-detected. It may be relevant both when there is no encoding declaration +and when the encoding declaration specifies `UTF-16'." + :group 'nxml + :type 'boolean) + +(defcustom nxml-default-buffer-file-coding-system nil + "*Default value for `buffer-file-coding-system' for a buffer for a new file. +Nil means use the default value of `buffer-file-coding-system' as normal. +A buffer's `buffer-file-coding-system' affects what \\[nxml-insert-xml-declaration] inserts." + :group 'nxml + :type 'coding-system) + +(defcustom nxml-auto-insert-xml-declaration-flag nil + "*Non-nil means automatically insert an XML declaration in a new file. +The XML declaration is inserted using `nxml-insert-xml-declaration'." + :group 'nxml + :type 'boolean) + +;; The following are the colors we use with a light background. +;; The two blues have the same hue but contrasting saturation/value. +;; The hue of the green is 120 degrees different from that of the +;; blue. The red used for highlighting errors is 120 degrees +;; different again. We use the light blue only for refs and +;; delimiters, since these are short (long stretches in a light color +;; would be too hard to read). The dark blue is closest to black +;; (which we use by default for text), so we use it for attribute +;; values, which are similar to text. + +(defconst nxml-light-blue-color "#9292C9") ; hue 240 +(defconst nxml-dark-blue-color "#3A3A7B") ; hue 240 +(defconst nxml-green-color "#257A25") ; hue 120 + +;; Similar principles apply with a dark background. However, +;; we switch green and blue, because darker blues are very hard to +;; read (for me anyway) on a dark background. + +(defconst nxml-sky-blue-color "#ACACFC") ; hue 240 +(defconst nxml-dark-green-color "#00AD00") ; hue 120 +(defconst nxml-light-green-color "#70F170") ; hue 120 + +(defface nxml-delimited-data-face + `((((class color) (background light)) (:foreground ,nxml-dark-blue-color)) + (((class color) (background dark)) (:foreground ,nxml-light-green-color))) + "Face used to highlight data enclosed between delimiters. +By default, this is inherited by `nxml-attribute-value-face' +and `nxml-processing-instruction-content-face'." + :group 'nxml-highlighting-faces) + +(defface nxml-name-face + `((((class color) (background light)) (:foreground ,nxml-green-color)) + (((class color) (background dark)) (:foreground ,nxml-sky-blue-color))) + "Face used to highlight various names. +This includes element and attribute names, processing +instruction targets and the CDATA keyword in a CDATA section. +This is not used directly, but only via inheritance by other faces." + :group 'nxml-highlighting-faces) + +(defface nxml-ref-face + `((((class color) (background light)) (:foreground ,nxml-light-blue-color)) + (((class color) (background dark)) (:foreground ,nxml-dark-green-color))) + "Face used to highlight character and entity references. +This is not used directly, but only via inheritance by other faces." + :group 'nxml-highlighting-faces) + +(defface nxml-delimiter-face + `((((class color) (background light)) (:foreground ,nxml-light-blue-color)) + (((class color) (background dark)) (:foreground ,nxml-dark-green-color)) + (t (:bold t))) + "Face used to highlight delimiters. +This is not used directly, but only via inheritance by other faces." + :group 'nxml-highlighting-faces) + +(defface nxml-text-face + nil + "Face used to highlight text." + :group 'nxml-highlighting-faces) + +(defface nxml-comment-content-face + '((t (:italic t))) + "Face used to highlight the content of comments." + :group 'nxml-highlighting-faces) + +(defface nxml-comment-delimiter-face + '((t (:inherit nxml-delimiter-face))) + "Face used for the delimiters of comments, i.e <!-- and -->." + :group 'nxml-highlighting-faces) + +(defface nxml-processing-instruction-delimiter-face + '((t (:inherit nxml-delimiter-face))) + "Face used for the delimiters of processing instructions, i.e <? and ?>." + :group 'nxml-highlighting-faces) + +(defface nxml-processing-instruction-target-face + '((t (:inherit nxml-name-face))) + "Face used for the target of processing instructions." + :group 'nxml-highlighting-faces) + +(defface nxml-processing-instruction-content-face + '((t (:inherit nxml-delimited-data-face))) + "Face used for the content of processing instructions." + :group 'nxml-highlighting-faces) + +(defface nxml-cdata-section-delimiter-face + '((t (:inherit nxml-delimiter-face))) + "Face used for the delimiters of CDATA sections, i.e <![, [, and ]]>." + :group 'nxml-highlighting-faces) + +(defface nxml-cdata-section-CDATA-face + '((t (:inherit nxml-name-face))) + "Face used for the CDATA keyword in CDATA sections." + :group 'nxml-highlighting-faces) + +(defface nxml-cdata-section-content-face + '((t (:inherit nxml-text-face))) + "Face used for the content of CDATA sections." + :group 'nxml-highlighting-faces) + +(defface nxml-char-ref-number-face + '((t (:inherit nxml-ref-face))) + "Face used for the number in character references. +This includes ths `x' in hex references." + :group 'nxml-highlighting-faces) + +(defface nxml-char-ref-delimiter-face + '((t (:inherit nxml-ref-face))) + "Face used for the delimiters of character references, i.e &# and ;." + :group 'nxml-highlighting-faces) + +(defface nxml-entity-ref-name-face + '((t (:inherit nxml-ref-face))) + "Face used for the entity name in general entity references." + :group 'nxml-highlighting-faces) + +(defface nxml-entity-ref-delimiter-face + '((t (:inherit nxml-ref-face))) + "Face used for the delimiters of entity references, i.e & and ;." + :group 'nxml-highlighting-faces) + +(defface nxml-tag-delimiter-face + '((t (:inherit nxml-delimiter-face))) + "Face used for the angle brackets delimiting tags. +`nxml-tag-slash-face' is used for slashes." + :group 'nxml-highlighting-faces) + +(defface nxml-tag-slash-face + '((t (:inherit nxml-name-face))) + "Face used for slashes in tags, both in end-tags and empty-elements." + :group 'nxml-highlighting-faces) + +(defface nxml-element-prefix-face + '((t (:inherit nxml-name-face))) + "Face used for the prefix of elements." + :group 'nxml-highlighting-faces) + +(defface nxml-element-colon-face + '((t (:inherit nxml-name-face))) + "Face used for the colon in element names." + :group 'nxml-highlighting-faces) + +(defface nxml-element-local-name-face + '((t (:inherit nxml-name-face))) + "Face used for the local name of elements." + :group 'nxml-highlighting-faces) + +(defface nxml-attribute-prefix-face + '((t (:inherit nxml-name-face))) + "Face used for the prefix of attributes." + :group 'nxml-highlighting-faces) + +(defface nxml-attribute-colon-face + '((t (:inherit nxml-name-face))) + "Face used for the colon in attribute names." + :group 'nxml-highlighting-faces) + +(defface nxml-attribute-local-name-face + '((t (:inherit nxml-name-face))) + "Face used for the local name of attributes." + :group 'nxml-highlighting-faces) + +(defface nxml-namespace-attribute-xmlns-face + '((t (:inherit nxml-name-face))) + "Face used for `xmlns' in namespace attributes." + :group 'nxml-highlighting-faces) + +(defface nxml-namespace-attribute-colon-face + '((t (:inherit nxml-name-face))) + "Face used for the colon in namespace attributes." + :group 'nxml-highlighting-faces) + +(defface nxml-namespace-attribute-prefix-face + '((t (:inherit nxml-name-face))) + "Face used for the prefix declared in namespace attributes." + :group 'nxml-highlighting-faces) + +(defface nxml-attribute-value-face + '((t (:inherit nxml-delimited-data-face))) + "Face used for the value of attributes." + :group 'nxml-highlighting-faces) + +(defface nxml-attribute-value-delimiter-face + '((t (:inherit nxml-delimiter-face))) + "Face used for the delimiters of attribute values." + :group 'nxml-highlighting-faces) + +(defface nxml-namespace-attribute-value-face + '((t (:inherit nxml-attribute-value-face))) + "Face used for the value of namespace attributes." + :group 'nxml-highlighting-faces) + +(defface nxml-namespace-attribute-value-delimiter-face + '((t (:inherit nxml-attribute-value-delimiter-face))) + "Face used for the delimiters of namespace attribute values." + :group 'nxml-highlighting-faces) + +(defface nxml-prolog-literal-delimiter-face + '((t (:inherit nxml-delimiter-face))) + "Face used for the delimiters of literals in the prolog." + :group 'nxml-highlighting-faces) + +(defface nxml-prolog-literal-content-face + '((t (:inherit nxml-delimited-data-face))) + "Face used for the content of literals in the prolog." + :group 'nxml-highlighting-faces) + +(defface nxml-prolog-keyword-face + '((t (:inherit nxml-name-face))) + "Face used for keywords in the prolog." + :group 'nxml-highlighting-faces) + +(defface nxml-markup-declaration-delimiter-face + '((t (:inherit nxml-delimiter-face))) + "Face used for the delimiters of markup declarations in the prolog. +The delimiters are <! and >." + :group 'nxml-highlighting-faces) + +(defface nxml-hash-face + '((t (:inherit nxml-name-face))) + "Face used for # before a name in the prolog." + :group 'nxml-highlighting-faces) + +(defface nxml-glyph-face + '((((type x)) + (:family + "misc-fixed" + :background + "light grey" + :foreground + "black" + :weight + normal + :slant + normal)) + (t + (:background + "light grey" + :foreground + "black" + :weight + normal + :slant + normal))) + "Face used for glyph for char references." + :group 'nxml-highlighting-faces) + +;;; Global variables + +;; This is initialized in rng-auto.el. +(defvar nxml-version nil + "*The version of nxml-mode that is being used.") + +(defvar nxml-prolog-regions nil + "List of regions in the prolog to be fontified. +See the function `xmltok-forward-prolog' for more information.") +(make-variable-buffer-local 'nxml-prolog-regions) + +(defvar nxml-last-fontify-end nil + "Position where fontification last ended. +Nil if the buffer changed since the last fontification.") +(make-variable-buffer-local 'nxml-last-fontify-end) + +(defvar nxml-degraded nil + "Non-nil if currently operating in degraded mode. +Degraded mode is enabled when an internal error is encountered in the +fontification or after-change functions.") +(make-variable-buffer-local 'nxml-degraded) + +(defvar nxml-completion-hook nil + "Hook run by `nxml-complete'. +This hook is run until success.") + +(defvar nxml-in-mixed-content-hook nil + "Hook to determine whether point is in mixed content. +The hook is called without arguments. It should return nil if it is +definitely not mixed; non-nil otherwise. The hook will be run until +one of the functions returns nil.") + +(defvar nxml-mixed-scan-distance 4000 + "Maximum distance from point to scan when checking for mixed content.") + +(defvar nxml-end-tag-indent-scan-distance 4000 + "Maximum distance from point to scan backwards when indenting end-tag.") + +(defvar nxml-char-ref-extra-display t + "Non-nil means display extra information for character references. +The extra information consists of a tooltip with the character name +and, if `nxml-char-ref-display-glyph-flag' is non-nil, a glyph +corresponding to the referenced character following the character +reference.") +(make-variable-buffer-local 'nxml-char-ref-extra-display) + +(defvar nxml-mode-map + (let ((map (make-sparse-keymap))) + (define-key map "\M-\C-u" 'nxml-backward-up-element) + (define-key map "\M-\C-d" 'nxml-down-element) + (define-key map "\M-\C-n" 'nxml-forward-element) + (define-key map "\M-\C-p" 'nxml-backward-element) + (define-key map "\M-{" 'nxml-backward-paragraph) + (define-key map "\M-}" 'nxml-forward-paragraph) + (define-key map "\M-h" 'nxml-mark-paragraph) + (define-key map "\C-c\C-f" 'nxml-finish-element) + (define-key map "\C-c\C-m" 'nxml-split-element) + (define-key map "\C-c\C-b" 'nxml-balanced-close-start-tag-block) + (define-key map "\C-c\C-i" 'nxml-balanced-close-start-tag-inline) + (define-key map "\C-c\C-x" 'nxml-insert-xml-declaration) + (define-key map "\C-c\C-d" 'nxml-dynamic-markup-word) + ;; u is for Unicode + (define-key map "\C-c\C-u" 'nxml-insert-named-char) + (define-key map "\C-c\C-o" nxml-outline-prefix-map) + (define-key map [S-mouse-2] 'nxml-mouse-hide-direct-text-content) + (define-key map "/" 'nxml-electric-slash) + (define-key map [C-return] 'nxml-complete) + (when nxml-bind-meta-tab-to-complete-flag + (define-key map "\M-\t" 'nxml-complete)) + map) + "Keymap for nxml-mode.") + +(defsubst nxml-set-face (start end face) + (when (and face (< start end)) + (put-text-property start end 'face face))) + +(defun nxml-clear-face (start end) + (remove-text-properties start end '(face nil)) + (nxml-clear-char-ref-extra-display start end)) + +(defsubst nxml-set-fontified (start end) + (put-text-property start end 'fontified t)) + +(defsubst nxml-clear-fontified (start end) + (remove-text-properties start end '(fontified nil))) + +;;;###autoload +(defun nxml-mode () + ;; We use C-c C-i instead of \\[nxml-balanced-close-start-tag-inline] + ;; because Emacs turns C-c C-i into C-c TAB which is hard to type and + ;; not mnemonic. + "Major mode for editing XML. + +Syntax highlighting is performed unless the variable +`nxml-syntax-highlight-flag' is nil. + +\\[nxml-finish-element] finishes the current element by inserting an end-tag. +C-c C-i closes a start-tag with `>' and then inserts a balancing end-tag +leaving point between the start-tag and end-tag. +\\[nxml-balanced-close-start-tag-block] is similar but for block rather than inline elements: +the start-tag, point, and end-tag are all left on separate lines. +If `nxml-slash-auto-complete-flag' is non-nil, then inserting a `</' +automatically inserts the rest of the end-tag. + +\\[nxml-complete] performs completion on the symbol preceding point. + +\\[nxml-dynamic-markup-word] uses the contents of the current buffer +to choose a tag to put around the word preceding point. + +Sections of the document can be displayed in outline form. The +variable `nxml-section-element-name-regexp' controls when an element +is recognized as a section. The same key sequences that change +visibility in outline mode are used except that they start with C-c C-o +instead of C-c. + +Validation is provided by the related minor-mode `rng-validate-mode'. +This also makes completion schema- and context- sensitive. Element +names, attribute names, attribute values and namespace URIs can all be +completed. By default, `rng-validate-mode' is automatically enabled by +`rng-nxml-mode-init' which is normally added to `nxml-mode-hook'. You +can toggle it using \\[rng-validate-mode]. + +\\[indent-for-tab-command] indents the current line appropriately. +This can be customized using the variable `nxml-child-indent' +and the variable `nxml-attribute-indent'. + +\\[nxml-insert-named-char] inserts a character reference using +the character's name (by default, the Unicode name). \\[universal-argument] \\[nxml-insert-named-char] +inserts the character directly. + +The Emacs commands that normally operate on balanced expressions will +operate on XML markup items. Thus \\[forward-sexp] will move forward +across one markup item; \\[backward-sexp] will move backward across +one markup item; \\[kill-sexp] will kill the following markup item; +\\[mark-sexp] will mark the following markup item. By default, each +tag each treated as a single markup item; to make the complete element +be treated as a single markup item, set the variable +`nxml-sexp-element-flag' to t. For more details, see the function +`nxml-forward-balanced-item'. + +\\[nxml-backward-up-element] and \\[nxml-down-element] move up and down the element structure. + +Many aspects this mode can be customized using +\\[customize-group] nxml RET." + (interactive) + (kill-all-local-variables) + (setq major-mode 'nxml-mode) + (setq mode-name "nXML") + ;; We'll determine the fill prefix ourselves + (make-local-variable 'adaptive-fill-mode) + (setq adaptive-fill-mode nil) + (make-local-variable 'forward-sexp-function) + (setq forward-sexp-function 'nxml-forward-balanced-item) + (make-local-variable 'indent-line-function) + (setq indent-line-function 'nxml-indent-line) + (make-local-variable 'fill-paragraph-function) + (setq fill-paragraph-function 'nxml-do-fill-paragraph) + ;; Comment support + ;; This doesn't seem to work too well; + ;; I think we should probably roll our own nxml-comment-dwim function. + (make-local-variable 'comment-indent-function) + (setq comment-indent-function 'nxml-indent-line) + (make-local-variable 'comment-start) + (setq comment-start "<!--") + (make-local-variable 'comment-start-skip) + (setq comment-start-skip "<!--[ \t\r\n]*") + (make-local-variable 'comment-end) + (setq comment-end "-->") + (make-local-variable 'comment-end-skip) + (setq comment-end-skip "[ \t\r\n]*-->") + (make-local-variable 'comment-line-break-function) + (setq comment-line-break-function 'nxml-newline-and-indent) + (use-local-map nxml-mode-map) + (save-excursion + (save-restriction + (widen) + (nxml-clear-dependent-regions (point-min) (point-max)) + (setq nxml-scan-end (copy-marker (point-min) nil)) + (nxml-with-unmodifying-text-property-changes + (when nxml-syntax-highlight-flag + (nxml-clear-fontified (point-min) (point-max))) + (nxml-clear-inside (point-min) (point-max)) + (nxml-with-invisible-motion + (nxml-scan-prolog))))) + (when nxml-syntax-highlight-flag + (add-hook 'fontification-functions 'nxml-fontify nil t)) + (add-hook 'after-change-functions 'nxml-after-change nil t) + (add-hook 'write-contents-hooks 'nxml-prepare-to-save) + (when (not (and (buffer-file-name) (file-exists-p (buffer-file-name)))) + (when (and nxml-default-buffer-file-coding-system + (not (local-variable-p 'buffer-file-coding-system))) + (setq buffer-file-coding-system nxml-default-buffer-file-coding-system)) + (when nxml-auto-insert-xml-declaration-flag + (nxml-insert-xml-declaration))) + (run-hooks 'nxml-mode-hook)) + +(defun nxml-degrade (context err) + (message "Internal nXML mode error in %s (%s), degrading" + context + (error-message-string err)) + (ding) + (setq nxml-degraded t) + (setq nxml-prolog-end 1) + (save-excursion + (save-restriction + (widen) + (nxml-with-unmodifying-text-property-changes + (nxml-clear-face (point-min) (point-max)) + (nxml-set-fontified (point-min) (point-max)) + (nxml-clear-inside (point-min) (point-max))) + (setq mode-name "nXML/degraded")))) + +;;; Change management + +(defun nxml-after-change (start end pre-change-length) + ;; Work around bug in insert-file-contents. + (when (> end (1+ (buffer-size))) + (setq start 1) + (setq end (1+ (buffer-size)))) + (unless nxml-degraded + (condition-case err + (save-excursion + (save-restriction + (widen) + (save-match-data + (nxml-with-invisible-motion + (nxml-with-unmodifying-text-property-changes + (nxml-after-change1 start end pre-change-length)))))) + (error + (nxml-degrade 'nxml-after-change err))))) + +(defun nxml-after-change1 (start end pre-change-length) + (setq nxml-last-fontify-end nil) + (let ((pre-change-end (+ start pre-change-length))) + (setq start + (nxml-adjust-start-for-dependent-regions start + end + pre-change-length)) + (when (<= start + ;; Add 2 so as to include the < and following char + ;; that start the instance, since changing these + ;; can change where the prolog ends. + (+ nxml-prolog-end 2)) + ;; end must be extended to at least the end of the old prolog + (when (< pre-change-end nxml-prolog-end) + (setq end + ;; don't let end get out of range even if pre-change-length + ;; is bogus + (min (point-max) + (+ end (- nxml-prolog-end pre-change-end))))) + (nxml-scan-prolog))) + (cond ((<= end nxml-prolog-end) + (setq end nxml-prolog-end) + (goto-char start) + ;; This is so that Emacs redisplay works + (setq start (line-beginning-position))) + ((and (<= start nxml-scan-end) + (> start (point-min)) + (nxml-get-inside (1- start))) + ;; The closing delimiter might have been removed. + ;; So we may need to redisplay from the beginning + ;; of the token. + (goto-char (1- start)) + (nxml-move-outside-backwards) + ;; This is so that Emacs redisplay works + (setq start (line-beginning-position)) + (setq end (max (nxml-scan-after-change (point) end) + end))) + (t + (goto-char start) + ;; This is both for redisplay and to move back + ;; past any incomplete opening delimiters + (setq start (line-beginning-position)) + (setq end (max (nxml-scan-after-change start end) + end)))) + (when nxml-syntax-highlight-flag + (when (>= start end) + ;; Must clear at least one char so as to trigger redisplay. + (cond ((< start (point-max)) + (setq end (1+ start))) + (t + (setq end (point-max)) + (goto-char end) + (setq start (line-beginning-position))))) + (nxml-clear-fontified start end))) + +;;; Encodings + +(defun nxml-insert-xml-declaration () + "Insert an XML declaration at the beginning of buffer. +The XML declaration will declare an encoding depending on the buffer's +`buffer-file-coding-system'." + (interactive "*") + (let ((coding-system + (if (and buffer-file-coding-system + (coding-system-p buffer-file-coding-system) + (coding-system-get buffer-file-coding-system + 'mime-charset)) + buffer-file-coding-system + (nxml-choose-utf-coding-system)))) + (goto-char (point-min)) + (insert (format "<?xml version=\"1.0\" encoding=\"%s\"?>\n" + (nxml-coding-system-name coding-system))))) + +(defun nxml-prepare-to-save () + (unless (and (not enable-multibyte-characters) + (local-variable-p 'buffer-file-coding-system) + buffer-file-coding-system + (or (eq (coding-system-type buffer-file-coding-system) 5) + (eq buffer-file-coding-system 'no-conversion))) + (save-excursion + (setq buffer-file-coding-system (nxml-select-coding-system)))) + ;; nil from a function in `write-contents-hooks' means + ;; to continue and write the file as normal + nil) + +(defun nxml-select-coding-system () + (let* ((suitable-coding-systems + (find-coding-systems-region (point-min) (point-max))) + (enc-pos (progn + (goto-char (point-min)) + (xmltok-get-declared-encoding-position))) + (enc-name + (and (consp enc-pos) + (buffer-substring-no-properties (car enc-pos) + (cdr enc-pos)))) + (coding-system + (cond (enc-name + (if (string= (downcase enc-name) "utf-16") + (nxml-choose-utf-16-coding-system) + (nxml-mime-charset-coding-system enc-name))) + (enc-pos (nxml-choose-utf-coding-system))))) + ;; Make sure we have a coding-system + (unless coding-system + (setq coding-system + (and (not buffer-read-only) + (nxml-choose-suitable-coding-system + suitable-coding-systems))) + (let ((message + (if enc-name + (format "Unknown encoding %s" enc-name) + "XML declaration is not well-formed"))) + (cond ((not coding-system) + (error "%s" message)) + ((y-or-n-p + (concat message + ". " + (format (if enc-name + "Save with %s" + "Modify and save with encoding %s") + (nxml-coding-system-name coding-system)) + " ")) + (nxml-fix-encoding-declaration enc-pos coding-system)) + (t (signal 'quit nil))))) + ;; Make sure it can encode all the characters in the buffer + (unless (or (memq (coding-system-base coding-system) + suitable-coding-systems) + (equal suitable-coding-systems '(undecided))) + (let ((message + (nxml-unsuitable-coding-system-message coding-system + enc-name))) + (setq coding-system + (and (not buffer-read-only) + (nxml-choose-suitable-coding-system + suitable-coding-systems))) + (cond ((not coding-system) (error "%s" message)) + ((y-or-n-p (concat message + (format ". Save with %s " + (nxml-coding-system-name + coding-system)))) + (nxml-fix-encoding-declaration enc-pos coding-system)) + (t (signal 'quit nil))))) + ;; Merge the newline type of our existing encoding + (let ((current-eol-type + (coding-system-eol-type buffer-file-coding-system))) + (when (and current-eol-type (integerp current-eol-type)) + (setq coding-system + (coding-system-change-eol-conversion coding-system + current-eol-type)))) + coding-system)) + +(defun nxml-unsuitable-coding-system-message (coding-system &optional enc-name) + (if (nxml-coding-system-unicode-p coding-system) + "Cannot translate some characters to Unicode" + (format "Cannot encode some characters with %s" + (or enc-name + (nxml-coding-system-name coding-system))))) + +(defconst nxml-utf-16-coding-systems (and (coding-system-p 'utf-16-be) + (coding-system-p 'utf-16-le) + '(utf-16-be utf-16-le))) + +(defconst nxml-utf-coding-systems (cons 'utf-8 nxml-utf-16-coding-systems)) + +(defun nxml-coding-system-unicode-p (coding-system) + (nxml-coding-system-member (coding-system-base coding-system) + nxml-utf-coding-systems)) + +(defun nxml-coding-system-name (coding-system) + (setq coding-system (coding-system-base coding-system)) + (symbol-name + (if (nxml-coding-system-member coding-system nxml-utf-16-coding-systems) + 'utf-16 + (or (coding-system-get coding-system 'mime-charset) + coding-system)))) + +(defun nxml-fix-encoding-declaration (enc-pos coding-system) + (let ((charset (nxml-coding-system-name coding-system))) + (cond ((consp enc-pos) + (delete-region (car enc-pos) (cdr enc-pos)) + (goto-char (car enc-pos)) + (insert charset)) + ((integerp enc-pos) + (goto-char enc-pos) + (insert " encoding=\"" charset ?\")) + (t + (goto-char (point-min)) + (insert "<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\n") + (when (and (not enc-pos) + (let ((case-fold-search t)) + (looking-at xmltok-bad-xml-decl-regexp))) + (delete-region (point) (match-end 0))))))) + +(defun nxml-choose-suitable-coding-system (suitable-coding-systems) + (let (ret coding-system) + (if (and buffer-file-coding-system + (memq (coding-system-base buffer-file-coding-system) + suitable-coding-systems)) + buffer-file-coding-system + (while (and suitable-coding-systems (not ret)) + (setq coding-system (car suitable-coding-systems)) + (if (coding-system-get coding-system 'mime-charset) + (setq ret coding-system) + (setq suitable-coding-systems (cdr suitable-coding-systems)))) + ret))) + +(defun nxml-choose-utf-coding-system () + (let ((cur (and (local-variable-p 'buffer-file-coding-system) + buffer-file-coding-system + (coding-system-base buffer-file-coding-system)))) + (cond ((car (nxml-coding-system-member cur nxml-utf-coding-systems))) + ((and nxml-prefer-utf-16-to-utf-8-flag + (coding-system-p 'utf-16-le) + (coding-system-p 'utf-16-be)) + (if nxml-prefer-utf-16-little-to-big-endian-flag + 'utf-16-le + 'utf-16-be)) + (t 'utf-8)))) + +(defun nxml-choose-utf-16-coding-system () + (let ((cur (and (local-variable-p 'buffer-file-coding-system) + buffer-file-coding-system + (coding-system-base buffer-file-coding-system)))) + (cond ((car (nxml-coding-system-member cur nxml-utf-16-coding-systems))) + (nxml-prefer-utf-16-little-to-big-endian-flag + (and (coding-system-p 'utf-16-le) 'utf-16-le)) + (t (and (coding-system-p 'utf-16-be) 'utf-16-be))))) + +(defun nxml-coding-system-member (coding-system coding-systems) + (let (ret) + (while (and coding-systems (not ret)) + (if (coding-system-equal coding-system + (car coding-systems)) + (setq ret coding-systems) + (setq coding-systems (cdr coding-systems)))) + ret)) + +;;; Fontification + +(defun nxml-fontify (start) + (condition-case err + (save-excursion + (save-restriction + (widen) + (save-match-data + (nxml-with-invisible-motion + (nxml-with-unmodifying-text-property-changes + (if (or nxml-degraded + ;; just in case we get called in the wrong buffer + (not nxml-prolog-end)) + (nxml-set-fontified start (point-max)) + (nxml-fontify1 start))))))) + (error + (nxml-degrade 'nxml-fontify err)))) + +(defun nxml-fontify1 (start) + (cond ((< start nxml-prolog-end) + (nxml-fontify-prolog) + (nxml-set-fontified (point-min) + nxml-prolog-end)) + (t + (goto-char start) + (when (not (eq nxml-last-fontify-end start)) + (when (not (equal (char-after) ?\<)) + (search-backward "<" nxml-prolog-end t)) + (nxml-ensure-scan-up-to-date) + (nxml-move-outside-backwards)) + (let ((start (point))) + (nxml-do-fontify (min (point-max) + (+ start nxml-fontify-chunk-size))) + (setq nxml-last-fontify-end (point)) + (nxml-set-fontified start nxml-last-fontify-end))))) + +(defun nxml-fontify-buffer () + (interactive) + (save-excursion + (save-restriction + (widen) + (nxml-with-invisible-motion + (goto-char (point-min)) + (nxml-with-unmodifying-text-property-changes + (nxml-fontify-prolog) + (goto-char nxml-prolog-end) + (nxml-do-fontify)))))) + +(defun nxml-fontify-prolog () + "Fontify the prolog. +The buffer is assumed to be prepared for fontification. +This does not set the fontified property, but it does clear +faces appropriately." + (let ((regions nxml-prolog-regions)) + (nxml-clear-face (point-min) nxml-prolog-end) + (while regions + (let ((region (car regions))) + (nxml-apply-fontify-rule (aref region 0) + (aref region 1) + (aref region 2))) + (setq regions (cdr regions))))) + +(defun nxml-do-fontify (&optional bound) + "Fontify at least as far as bound. +Leave point after last fontified position." + (unless bound (setq bound (point-max))) + (let (xmltok-dependent-regions + xmltok-errors) + (while (and (< (point) bound) + (nxml-tokenize-forward)) + (nxml-clear-face xmltok-start (point)) + (nxml-apply-fontify-rule)))) + +;; Vectors identify a substring of the token to be highlighted in some face. + +;; Token types returned by xmltok-forward. + +(put 'start-tag + 'nxml-fontify-rule + '([nil 1 nxml-tag-delimiter-face] + [-1 nil nxml-tag-delimiter-face] + (element-qname . 1) + attributes)) + +(put 'partial-start-tag + 'nxml-fontify-rule + '([nil 1 nxml-tag-delimiter-face] + (element-qname . 1) + attributes)) + +(put 'end-tag + 'nxml-fontify-rule + '([nil 1 nxml-tag-delimiter-face] + [1 2 nxml-tag-slash-face] + [-1 nil nxml-tag-delimiter-face] + (element-qname . 2))) + +(put 'partial-end-tag + 'nxml-fontify-rule + '([nil 1 nxml-tag-delimiter-face] + [1 2 nxml-tag-slash-face] + (element-qname . 2))) + +(put 'empty-element + 'nxml-fontify-rule + '([nil 1 nxml-tag-delimiter-face] + [-2 -1 nxml-tag-slash-face] + [-1 nil nxml-tag-delimiter-face] + (element-qname . 1) + attributes)) + +(put 'partial-empty-element + 'nxml-fontify-rule + '([nil 1 nxml-tag-delimiter-face] + [-1 nil nxml-tag-slash-face] + (element-qname . 1) + attributes)) + +(put 'char-ref + 'nxml-fontify-rule + '([nil 2 nxml-char-ref-delimiter-face] + [2 -1 nxml-char-ref-number-face] + [-1 nil nxml-char-ref-delimiter-face] + char-ref)) + +(put 'entity-ref + 'nxml-fontify-rule + '([nil 1 nxml-entity-ref-delimiter-face] + [1 -1 nxml-entity-ref-name-face] + [-1 nil nxml-entity-ref-delimiter-face])) + +(put 'comment + 'nxml-fontify-rule + '([nil 4 nxml-comment-delimiter-face] + [4 -3 nxml-comment-content-face] + [-3 nil nxml-comment-delimiter-face])) + +(put 'processing-instruction + 'nxml-fontify-rule + '([nil 2 nxml-processing-instruction-delimiter-face] + [-2 nil nxml-processing-instruction-delimiter-face] + processing-instruction-content)) + +(put 'cdata-section + 'nxml-fontify-rule + '([nil 3 nxml-cdata-section-delimiter-face] ; <![ + [3 8 nxml-cdata-section-CDATA-face] ; CDATA + [8 9 nxml-cdata-section-delimiter-face] ; [ + [9 -3 nxml-cdata-section-content-face] ; ]]> + [-3 nil nxml-cdata-section-delimiter-face])) + +(put 'data + 'nxml-fontify-rule + '([nil nil nxml-text-face])) + +;; Prolog region types in list returned by xmltok-forward-prolog. + +(put 'xml-declaration + 'nxml-fontify-rule + '([nil 2 nxml-processing-instruction-delimiter-face] + [2 5 nxml-processing-instruction-target-face] + [-2 nil nxml-processing-instruction-delimiter-face])) + +(put 'xml-declaration-attribute-name + 'nxml-fontify-rule + '([nil nil nxml-attribute-local-name-face])) + +(put 'xml-declaration-attribute-value + 'nxml-fontify-rule + '([nil 1 nxml-attribute-value-delimiter-face] + [1 -1 nxml-attribute-value-face] + [-1 nil nxml-attribute-value-delimiter-face])) + +(put 'processing-instruction-left + 'nxml-fontify-rule + '([nil 2 nxml-processing-instruction-delimiter-face] + [2 nil nxml-processing-instruction-target-face])) + +(put 'processing-instruction-right + 'nxml-fontify-rule + '([nil -2 nxml-processing-instruction-content-face] + [-2 nil nxml-processing-instruction-delimiter-face])) + +(put 'literal + 'nxml-fontify-rule + '([nil 1 nxml-prolog-literal-delimiter-face] + [1 -1 nxml-prolog-literal-content-face] + [-1 nil nxml-prolog-literal-delimiter-face])) + +(put 'keyword + 'nxml-fontify-rule + '([nil nil nxml-prolog-keyword-face])) + +(put 'markup-declaration-open + 'nxml-fontify-rule + '([0 2 nxml-markup-declaration-delimiter-face] + [2 nil nxml-prolog-keyword-face])) + +(put 'markup-declaration-close + 'nxml-fontify-rule + '([nil nil nxml-markup-declaration-delimiter-face])) + +(put 'internal-subset-open + 'nxml-fontify-rule + '([nil nil nxml-markup-declaration-delimiter-face])) + +(put 'internal-subset-close + 'nxml-fontify-rule + '([nil 1 nxml-markup-declaration-delimiter-face] + [-1 nil nxml-markup-declaration-delimiter-face])) + +(put 'hash-name + 'nxml-fontify-rule + '([nil 1 nxml-hash-face] + [1 nil nxml-prolog-keyword-face])) + +(defun nxml-apply-fontify-rule (&optional type start end) + (let ((rule (get (or type xmltok-type) 'nxml-fontify-rule))) + (unless start (setq start xmltok-start)) + (unless end (setq end (point))) + (while rule + (let* ((action (car rule))) + (setq rule (cdr rule)) + (cond ((vectorp action) + (nxml-set-face (let ((offset (aref action 0))) + (cond ((not offset) start) + ((< offset 0) (+ end offset)) + (t (+ start offset)))) + (let ((offset (aref action 1))) + (cond ((not offset) end) + ((< offset 0) (+ end offset)) + (t (+ start offset)))) + (aref action 2))) + ((and (consp action) + (eq (car action) 'element-qname)) + (when xmltok-name-end ; maybe nil in partial-end-tag case + (nxml-fontify-qname (+ start (cdr action)) + xmltok-name-colon + xmltok-name-end + 'nxml-element-prefix-face + 'nxml-element-colon-face + 'nxml-element-local-name-face))) + ((eq action 'attributes) + (nxml-fontify-attributes)) + ((eq action 'processing-instruction-content) + (nxml-set-face (+ start 2) + xmltok-name-end + 'nxml-processing-instruction-target-face) + (nxml-set-face (save-excursion + (goto-char xmltok-name-end) + (skip-chars-forward " \t\r\n") + (point)) + (- end 2) + 'nxml-processing-instruction-content-face)) + ((eq action 'char-ref) + (nxml-char-ref-display-extra start + end + (xmltok-char-number start end))) + (t (error "Invalid nxml-fontify-rule action %s" action))))))) + +(defun nxml-fontify-attributes () + (while xmltok-namespace-attributes + (nxml-fontify-attribute (car xmltok-namespace-attributes) + 'namespace) + (setq xmltok-namespace-attributes + (cdr xmltok-namespace-attributes))) + (while xmltok-attributes + (nxml-fontify-attribute (car xmltok-attributes)) + (setq xmltok-attributes + (cdr xmltok-attributes)))) + +(defun nxml-fontify-attribute (att &optional namespace-declaration) + (if namespace-declaration + (nxml-fontify-qname (xmltok-attribute-name-start att) + (xmltok-attribute-name-colon att) + (xmltok-attribute-name-end att) + 'nxml-namespace-attribute-xmlns-face + 'nxml-namespace-attribute-colon-face + 'nxml-namespace-attribute-prefix-face + 'nxml-namespace-attribute-xmlns-face) + (nxml-fontify-qname (xmltok-attribute-name-start att) + (xmltok-attribute-name-colon att) + (xmltok-attribute-name-end att) + 'nxml-attribute-prefix-face + 'nxml-attribute-colon-face + 'nxml-attribute-local-name-face)) + (let ((start (xmltok-attribute-value-start att)) + (end (xmltok-attribute-value-end att)) + (refs (xmltok-attribute-refs att)) + (delimiter-face (if namespace-declaration + 'nxml-namespace-attribute-value-delimiter-face + 'nxml-attribute-value-delimiter-face)) + (value-face (if namespace-declaration + 'nxml-namespace-attribute-value-face + 'nxml-attribute-value-face))) + (when start + (nxml-set-face (1- start) start delimiter-face) + (nxml-set-face end (1+ end) delimiter-face) + (while refs + (let* ((ref (car refs)) + (ref-type (aref ref 0)) + (ref-start (aref ref 1)) + (ref-end (aref ref 2))) + (nxml-set-face start ref-start value-face) + (nxml-apply-fontify-rule ref-type ref-start ref-end) + (setq start ref-end)) + (setq refs (cdr refs))) + (nxml-set-face start end value-face)))) + +(defun nxml-fontify-qname (start + colon + end + prefix-face + colon-face + local-name-face + &optional + unprefixed-face) + (cond (colon (nxml-set-face start colon prefix-face) + (nxml-set-face colon (1+ colon) colon-face) + (nxml-set-face (1+ colon) end local-name-face)) + (t (nxml-set-face start end (or unprefixed-face + local-name-face))))) + +;;; Editing + +(defun nxml-electric-slash (arg) + "Insert a slash. + +With a prefix ARG, do nothing other than insert the slash. + +Otherwise, if `nxml-slash-auto-complete-flag' is non-nil, insert the +rest of the end-tag or empty-element if the slash is potentially part +of an end-tag or the close of an empty-element. + +If the slash is part of an end-tag that is the first non-whitespace +on the line, reindent the line." + (interactive "*P") + (nxml-ensure-scan-up-to-date) + (let* ((slash-pos (point)) + (end-tag-p (and (eq (char-before slash-pos) ?<) + (not (nxml-get-inside slash-pos)))) + (at-indentation (save-excursion + (back-to-indentation) + (eq (point) (1- slash-pos))))) + (self-insert-command (prefix-numeric-value arg)) + (unless arg + (if nxml-slash-auto-complete-flag + (if end-tag-p + (condition-case err + (let ((start-tag-end + (nxml-scan-element-backward (1- slash-pos) t))) + (when start-tag-end + (insert (xmltok-start-tag-qname) ">") + ;; copy the indentation of the start-tag + (when (and at-indentation + (save-excursion + (goto-char xmltok-start) + (back-to-indentation) + (eq (point) xmltok-start))) + (save-excursion + (indent-line-to (save-excursion + (goto-char xmltok-start) + (current-column))))))) + (nxml-scan-error nil)) + (when (and (eq (nxml-token-before) (point)) + (eq xmltok-type 'partial-empty-element)) + (insert ">"))) + (when (and end-tag-p at-indentation) + (nxml-indent-line)))))) + +(defun nxml-balanced-close-start-tag-block () + "Close the start-tag before point with `>' and insert a balancing end-tag. +Point is left between the start-tag and the end-tag. +If there is nothing but whitespace before the `<' that opens the +start-tag, then put point on a blank line, and put the end-tag on +another line aligned with the start-tag." + (interactive "*") + (nxml-balanced-close-start-tag 'block)) + +(defun nxml-balanced-close-start-tag-inline () + "Close the start-tag before point with `>' and insert a balancing end-tag. +Point is left between the start-tag and the end-tag. +No extra whitespace is inserted." + (interactive "*") + (nxml-balanced-close-start-tag 'inline)) + +(defun nxml-balanced-close-start-tag (block-or-inline) + (let ((token-end (nxml-token-before)) + (pos (1+ (point)))) + (unless (or (eq xmltok-type 'partial-start-tag) + (and (memq xmltok-type '(start-tag + empty-element + partial-empty-element)) + (>= token-end pos))) + (error "Not in a start-tag")) + (insert "></" + (buffer-substring-no-properties (+ xmltok-start 1) + (min xmltok-name-end (point))) + ">") + (if (eq block-or-inline 'inline) + (goto-char pos) + (goto-char xmltok-start) + (back-to-indentation) + (if (= (point) xmltok-start) + (let ((indent (current-column))) + (goto-char pos) + (insert "\n") + (indent-line-to indent) + (goto-char pos) + (insert "\n") + (indent-line-to (+ nxml-child-indent indent))) + (goto-char pos))))) + +(defun nxml-finish-element () + "Finish the current element by inserting an end-tag." + (interactive "*") + (nxml-finish-element-1 nil)) + +(defvar nxml-last-split-position nil + "Position where `nxml-split-element' split the current element.") + +(defun nxml-split-element () + "Split the current element by inserting an end-tag and a start-tag. +Point is left after the newly inserted start-tag. When repeated, +split immediately before the previously inserted start-tag and leave +point unchanged." + (interactive "*") + (setq nxml-last-split-position + (if (and (eq last-command this-command) + nxml-last-split-position) + (save-excursion + (goto-char nxml-last-split-position) + (nxml-finish-element-1 t)) + (nxml-finish-element-1 t)))) + +(defun nxml-finish-element-1 (startp) + "Insert an end-tag for the current element and optionally a start-tag. +The start-tag is inserted if STARTP is non-nil. Return the position +of the inserted start-tag or nil if none was inserted." + (interactive "*") + (let* ((token-end (nxml-token-before)) + (start-tag-end + (save-excursion + (when (and (< (point) token-end) + (memq xmltok-type + '(cdata-section + processing-instruction + comment + start-tag + end-tag + empty-element))) + (error "Point is inside a %s" + (nxml-token-type-friendly-name xmltok-type))) + (nxml-scan-element-backward token-end t))) + (starts-line + (save-excursion + (unless (eq xmltok-type 'start-tag) + (error "No matching start-tag")) + (goto-char xmltok-start) + (back-to-indentation) + (eq (point) xmltok-start))) + (ends-line + (save-excursion + (goto-char start-tag-end) + (looking-at "[ \t\r\n]*$"))) + (start-tag-indent (save-excursion + (goto-char xmltok-start) + (current-column))) + (qname (xmltok-start-tag-qname)) + inserted-start-tag-pos) + (when (and starts-line ends-line) + ;; start-tag is on a line by itself + ;; => put the end-tag on a line by itself + (unless (<= (point) + (save-excursion + (back-to-indentation) + (point))) + (insert "\n")) + (indent-line-to start-tag-indent)) + (insert "</" qname ">") + (when startp + (when starts-line + (insert "\n") + (indent-line-to start-tag-indent)) + (setq inserted-start-tag-pos (point)) + (insert "<" qname ">") + (when (and starts-line ends-line) + (insert "\n") + (indent-line-to (save-excursion + (goto-char xmltok-start) + (forward-line 1) + (back-to-indentation) + (if (= (current-column) + (+ start-tag-indent nxml-child-indent)) + (+ start-tag-indent nxml-child-indent) + start-tag-indent))))) + inserted-start-tag-pos)) + +;;; Indentation + +(defun nxml-indent-line () + "Indent current line as XML." + (let ((indent (nxml-compute-indent)) + (from-end (- (point-max) (point)))) + (when indent + (beginning-of-line) + (let ((bol (point))) + (skip-chars-forward " \t") + (delete-region bol (point))) + (indent-to indent) + (when (> (- (point-max) from-end) (point)) + (goto-char (- (point-max) from-end)))))) + +(defun nxml-compute-indent () + "Return the indent for the line containing point." + (or (nxml-compute-indent-from-matching-start-tag) + (nxml-compute-indent-from-previous-line))) + +(defun nxml-compute-indent-from-matching-start-tag () + "Compute the indent for a line with an end-tag using the matching start-tag. +When the line containing point ends with an end-tag and does not start +in the middle of a token, return the indent of the line containing the +matching start-tag, if there is one and it occurs at the beginning of +its line. Otherwise return nil." + (save-excursion + (back-to-indentation) + (let ((bol (point))) + (let ((inhibit-field-text-motion t)) + (end-of-line)) + (skip-chars-backward " \t") + (and (= (nxml-token-before) (point)) + (memq xmltok-type '(end-tag partial-end-tag)) + ;; start of line must not be inside a token + (or (= xmltok-start bol) + (save-excursion + (goto-char bol) + (nxml-token-after) + (= xmltok-start bol)) + (eq xmltok-type 'data)) + (condition-case err + (nxml-scan-element-backward + (point) + nil + (- (point) + nxml-end-tag-indent-scan-distance)) + (nxml-scan-error nil)) + (< xmltok-start bol) + (progn + (goto-char xmltok-start) + (skip-chars-backward " \t") + (bolp)) + (current-indentation))))) + +(defun nxml-compute-indent-from-previous-line () + "Compute the indent for a line using the indentation of a previous line." + (save-excursion + (end-of-line) + (let ((eol (point)) + bol prev-bol ref + before-context after-context) + (back-to-indentation) + (setq bol (point)) + (catch 'indent + ;; Move backwards until the start of a non-blank line that is + ;; not inside a token. + (while (progn + (when (= (forward-line -1) -1) + (throw 'indent 0)) + (back-to-indentation) + (if (looking-at "[ \t]*$") + t + (or prev-bol + (setq prev-bol (point))) + (nxml-token-after) + (not (or (= xmltok-start (point)) + (eq xmltok-type 'data)))))) + (setq ref (point)) + ;; Now scan over tokens until the end of the line to be indented. + ;; Determine the context before and after the beginning of the + ;; line. + (while (< (point) eol) + (nxml-tokenize-forward) + (cond ((<= bol xmltok-start) + (setq after-context + (nxml-merge-indent-context-type after-context))) + ((and (<= (point) bol) + (not (and (eq xmltok-type 'partial-start-tag) + (= (point) bol)))) + (setq before-context + (nxml-merge-indent-context-type before-context))) + ((eq xmltok-type 'data) + (setq before-context + (nxml-merge-indent-context-type before-context)) + (setq after-context + (nxml-merge-indent-context-type after-context))) + ;; If in the middle of a token that looks inline, + ;; then indent relative to the previous non-blank line + ((eq (nxml-merge-indent-context-type before-context) + 'mixed) + (goto-char prev-bol) + (throw 'indent (current-column))) + (t + (throw 'indent + (nxml-compute-indent-in-token bol)))) + (skip-chars-forward " \t\r\n")) + (goto-char ref) + (+ (current-column) + (* nxml-child-indent + (+ (if (eq before-context 'start-tag) 1 0) + (if (eq after-context 'end-tag) -1 0)))))))) + +(defun nxml-merge-indent-context-type (context) + "Merge the indent context type CONTEXT with the token in `xmltok-type'. +Return the merged indent context type. An indent context type is +either nil or one of the symbols start-tag, end-tag, markup, comment, +mixed." + (cond ((memq xmltok-type '(start-tag partial-start-tag)) + (if (memq context '(nil start-tag comment)) + 'start-tag + 'mixed)) + ((memq xmltok-type '(end-tag partial-end-tag)) + (if (memq context '(nil end-tag comment)) + 'end-tag + 'mixed)) + ((eq xmltok-type 'comment) + (cond ((memq context '(start-tag end-tag comment)) + context) + (context 'mixed) + (t 'comment))) + (context 'mixed) + (t 'markup))) + +(defun nxml-compute-indent-in-token (pos) + "Return the indent for a line that starts inside a token. +POS is the position of the first non-whitespace character of the line. +This expects the xmltok-* variables to be set up as by `xmltok-forward'." + (cond ((memq xmltok-type '(start-tag + partial-start-tag + empty-element + partial-empty-element)) + (nxml-compute-indent-in-start-tag pos)) + ((eq xmltok-type 'comment) + (nxml-compute-indent-in-delimited-token pos "<!--" "-->")) + ((eq xmltok-type 'cdata-section) + (nxml-compute-indent-in-delimited-token pos "<![CDATA[" "]]>")) + ((eq xmltok-type 'processing-instruction) + (nxml-compute-indent-in-delimited-token pos "<?" "?>")) + (t + (goto-char pos) + (if (and (= (forward-line -1) 0) + (< xmltok-start (point))) + (back-to-indentation) + (goto-char xmltok-start)) + (current-column)))) + +(defun nxml-compute-indent-in-start-tag (pos) + "Return the indent for a line that starts inside a start-tag. +Also for a line that starts inside an empty element. +POS is the position of the first non-whitespace character of the line. +This expects the xmltok-* variables to be set up as by `xmltok-forward'." + (let ((value-boundary (nxml-attribute-value-boundary pos)) + (off 0)) + (if value-boundary + ;; inside an attribute value + (let ((value-start (car value-boundary)) + (value-end (cdr value-boundary))) + (goto-char pos) + (forward-line -1) + (if (< (point) value-start) + (goto-char value-start) + (back-to-indentation))) + ;; outside an attribute value + (goto-char pos) + (while (and (= (forward-line -1) 0) + (nxml-attribute-value-boundary (point)))) + (cond ((<= (point) xmltok-start) + (goto-char xmltok-start) + (setq off nxml-attribute-indent) + (let ((atts (xmltok-merge-attributes))) + (when atts + (let* ((att (car atts)) + (start (xmltok-attribute-name-start att))) + (when (< start pos) + (goto-char start) + (setq off 0)))))) + (t + (back-to-indentation)))) + (+ (current-column) off))) + +(defun nxml-attribute-value-boundary (pos) + "Return a pair (START . END) if POS is inside an attribute value. +Otherwise return nil. START and END are the positions of the start +and end of the attribute value containing POS. This expects the +xmltok-* variables to be set up as by `xmltok-forward'." + (let ((atts (xmltok-merge-attributes)) + att value-start value-end value-boundary) + (while atts + (setq att (car atts)) + (setq value-start (xmltok-attribute-value-start att)) + (setq value-end (xmltok-attribute-value-end att)) + (cond ((and value-start (< pos value-start)) + (setq atts nil)) + ((and value-start value-end (<= pos value-end)) + (setq value-boundary (cons value-start value-end)) + (setq atts nil)) + (t (setq atts (cdr atts))))) + value-boundary)) + +(defun nxml-compute-indent-in-delimited-token (pos open-delim close-delim) + "Return the indent for a line that starts inside a token with delimiters. +OPEN-DELIM and CLOSE-DELIM are strings giving the opening and closing +delimiters. POS is the position of the first non-whitespace character +of the line. This expects the xmltok-* variables to be set up as by +`xmltok-forward'." + (cond ((let ((end (+ pos (length close-delim)))) + (and (<= end (point-max)) + (string= (buffer-substring-no-properties pos end) + close-delim))) + (goto-char xmltok-start)) + ((progn + (goto-char pos) + (forward-line -1) + (<= (point) xmltok-start)) + (goto-char (+ xmltok-start (length open-delim))) + (when (and (string= open-delim "<!--") + (looking-at " ")) + (goto-char (1+ (point))))) + (t (back-to-indentation))) + (current-column)) + +;;; Completion + +(defun nxml-complete () + "Perform completion on the symbol preceding point. + +Inserts as many characters as can be completed. However, if not even +one character can be completed, then a buffer with the possibilities +is popped up and the symbol is read from the minibuffer with +completion. If the symbol is complete, then any characters that must +follow the symbol are also inserted. + +The name space used for completion and what is treated as a symbol +depends on the context. The contexts in which completion is performed +depend on `nxml-completion-hook'." + (interactive) + (unless (run-hook-with-args-until-success 'nxml-completion-hook) + ;; Eventually we will complete on entity names here. + (ding) + (message "Cannot complete in this context"))) + +;;; Movement + +(defun nxml-forward-balanced-item (&optional arg) + "Move forward across one balanced item. +With ARG, do it that many times. Negative arg -N means +move backward across N balanced expressions. +This is the equivalent of `forward-sexp' for XML. + +An element contains as items strings with no markup, tags, processing +instructions, comments, CDATA sections, entity references and +characters references. However, if the variable +`nxml-sexp-element-flag' is non-nil, then an element is treated as a +single markup item. A start-tag contains an element name followed by +one or more attributes. An end-tag contains just an element name. An +attribute value literals contains strings with no markup, entity +references and character references. A processing instruction +consists of a target and a content string. A comment or a CDATA +section contains a single string. An entity reference contains a +single name. A character reference contains a character number." + (interactive "p") + (or arg (setq arg 1)) + (cond ((> arg 0) + (while (progn + (nxml-forward-single-balanced-item) + (> (setq arg (1- arg)) 0)))) + ((< arg 0) + (while (progn + (nxml-backward-single-balanced-item) + (< (setq arg (1+ arg)) 0)))))) + +(defun nxml-forward-single-balanced-item () + (condition-case err + (goto-char (let ((end (nxml-token-after))) + (save-excursion + (while (eq xmltok-type 'space) + (goto-char end) + (setq end (nxml-token-after))) + (cond ((/= (point) xmltok-start) + (nxml-scan-forward-within end)) + ((and nxml-sexp-element-flag + (eq xmltok-type 'start-tag)) + ;; can't ever return nil here + (nxml-scan-element-forward xmltok-start)) + ((and nxml-sexp-element-flag + (memq xmltok-type + '(end-tag partial-end-tag))) + (error "Already at end of element")) + (t end))))) + (nxml-scan-error + (goto-char (cadr err)) + (apply 'error (cddr err))))) + +(defun nxml-backward-single-balanced-item () + (condition-case err + (goto-char (let ((end (nxml-token-before))) + (save-excursion + (while (eq xmltok-type 'space) + (goto-char xmltok-start) + (setq end (nxml-token-before))) + (cond ((/= (point) end) + (nxml-scan-backward-within end)) + ((and nxml-sexp-element-flag + (eq xmltok-type 'end-tag)) + ;; can't ever return nil here + (nxml-scan-element-backward end) + xmltok-start) + ((and nxml-sexp-element-flag + (eq xmltok-type 'start-tag)) + (error "Already at start of element")) + (t xmltok-start))))) + (nxml-scan-error + (goto-char (cadr err)) + (apply 'error (cddr err))))) + +(defun nxml-scan-forward-within (end) + (setq end (- end (nxml-end-delimiter-length xmltok-type))) + (when (<= end (point)) + (error "Already at end of %s" + (nxml-token-type-friendly-name xmltok-type))) + (cond ((memq xmltok-type '(start-tag + empty-element + partial-start-tag + partial-empty-element)) + (if (< (point) xmltok-name-end) + xmltok-name-end + (let ((att (nxml-find-following-attribute))) + (cond ((not att) end) + ((and (xmltok-attribute-value-start att) + (<= (xmltok-attribute-value-start att) + (point))) + (nxml-scan-forward-in-attribute-value att)) + ((xmltok-attribute-value-end att) + (1+ (xmltok-attribute-value-end att))) + ((save-excursion + (goto-char (xmltok-attribute-name-end att)) + (looking-at "[ \t\r\n]*=")) + (match-end 0)) + (t (xmltok-attribute-name-end att)))))) + ((and (eq xmltok-type 'processing-instruction) + (< (point) xmltok-name-end)) + xmltok-name-end) + (t end))) + +(defun nxml-scan-backward-within (end) + (setq xmltok-start + (+ xmltok-start + (nxml-start-delimiter-length xmltok-type))) + (when (<= (point) xmltok-start) + (error "Already at start of %s" + (nxml-token-type-friendly-name xmltok-type))) + (cond ((memq xmltok-type '(start-tag + empty-element + partial-start-tag + partial-empty-element)) + (let ((att (nxml-find-preceding-attribute))) + (cond ((not att) xmltok-start) + ((and (xmltok-attribute-value-start att) + (<= (xmltok-attribute-value-start att) + (point)) + (<= (point) + (xmltok-attribute-value-end att))) + (nxml-scan-backward-in-attribute-value att)) + (t (xmltok-attribute-name-start att))))) + ((and (eq xmltok-type 'processing-instruction) + (let ((content-start (save-excursion + (goto-char xmltok-name-end) + (skip-chars-forward " \r\t\n") + (point)))) + (and (< content-start (point)) + content-start)))) + (t xmltok-start))) + +(defun nxml-scan-forward-in-attribute-value (att) + (when (= (point) (xmltok-attribute-value-end att)) + (error "Already at end of attribute value")) + (let ((refs (xmltok-attribute-refs att)) + ref) + (while refs + (setq ref (car refs)) + (if (< (point) (aref ref 2)) + (setq refs nil) + (setq ref nil) + (setq refs (cdr refs)))) + (cond ((not ref) + (xmltok-attribute-value-end att)) + ((< (point) (aref ref 1)) + (aref ref 1)) + ((= (point) (aref ref 1)) + (aref ref 2)) + (t + (let ((end (- (aref ref 2) + (nxml-end-delimiter-length (aref ref 0))))) + (if (< (point) end) + end + (error "Already at end of %s" + (nxml-token-type-friendly-name (aref ref 0))))))))) + +(defun nxml-scan-backward-in-attribute-value (att) + (when (= (point) (xmltok-attribute-value-start att)) + (error "Already at start of attribute value")) + (let ((refs (reverse (xmltok-attribute-refs att))) + ref) + (while refs + (setq ref (car refs)) + (if (< (aref ref 1) (point)) + (setq refs nil) + (setq ref nil) + (setq refs (cdr refs)))) + (cond ((not ref) + (xmltok-attribute-value-start att)) + ((< (aref ref 2) (point)) + (aref ref 2)) + ((= (point) (aref ref 2)) + (aref ref 1)) + (t + (let ((start (+ (aref ref 1) + (nxml-start-delimiter-length (aref ref 0))))) + (if (< start (point)) + start + (error "Already at start of %s" + (nxml-token-type-friendly-name (aref ref 0))))))))) + +(defun nxml-find-following-attribute () + (let ((ret nil) + (atts (or xmltok-attributes xmltok-namespace-attributes)) + (more-atts (and xmltok-attributes xmltok-namespace-attributes))) + (while atts + (let* ((att (car atts)) + (name-start (xmltok-attribute-name-start att))) + (cond ((and (<= name-start (point)) + (xmltok-attribute-value-end att) + ;; <= because end is before quote + (<= (point) (xmltok-attribute-value-end att))) + (setq atts nil) + (setq ret att)) + ((and (< (point) name-start) + (or (not ret) + (< name-start + (xmltok-attribute-name-start ret)))) + (setq ret att)))) + (setq atts (cdr atts)) + (unless atts + (setq atts more-atts) + (setq more-atts nil))) + ret)) + +(defun nxml-find-preceding-attribute () + (let ((ret nil) + (atts (or xmltok-attributes xmltok-namespace-attributes)) + (more-atts (and xmltok-attributes xmltok-namespace-attributes))) + (while atts + (let* ((att (car atts)) + (name-start (xmltok-attribute-name-start att))) + (cond ((and (< name-start (point)) + (xmltok-attribute-value-end att) + ;; <= because end is before quote + (<= (point) (xmltok-attribute-value-end att))) + (setq atts nil) + (setq ret att)) + ((and (< name-start (point)) + (or (not ret) + (< (xmltok-attribute-name-start ret) + name-start))) + (setq ret att)))) + (setq atts (cdr atts)) + (unless atts + (setq atts more-atts) + (setq more-atts nil))) + ret)) + +(defun nxml-up-element (&optional arg) + (interactive "p") + (or arg (setq arg 1)) + (if (< arg 0) + (nxml-backward-up-element (- arg)) + (condition-case err + (while (and (> arg 0) + (< (point) (point-max))) + (let ((token-end (nxml-token-after))) + (goto-char (cond ((or (memq xmltok-type '(end-tag + partial-end-tag)) + (and (memq xmltok-type + '(empty-element + partial-empty-element)) + (< xmltok-start (point)))) + token-end) + ((nxml-scan-element-forward + (if (and (eq xmltok-type 'start-tag) + (= (point) xmltok-start)) + xmltok-start + token-end) + t)) + (t (error "No parent element"))))) + (setq arg (1- arg))) + (nxml-scan-error + (goto-char (cadr err)) + (apply 'error (cddr err)))))) + +(defun nxml-backward-up-element (&optional arg) + (interactive "p") + (or arg (setq arg 1)) + (if (< arg 0) + (nxml-up-element (- arg)) + (condition-case err + (while (and (> arg 0) + (< (point-min) (point))) + (let ((token-end (nxml-token-before))) + (goto-char (cond ((or (memq xmltok-type '(start-tag + partial-start-tag)) + (and (memq xmltok-type + '(empty-element + partial-empty-element)) + (< (point) token-end))) + xmltok-start) + ((nxml-scan-element-backward + (if (and (eq xmltok-type 'end-tag) + (= (point) token-end)) + token-end + xmltok-start) + t) + xmltok-start) + (t (error "No parent element"))))) + (setq arg (1- arg))) + (nxml-scan-error + (goto-char (cadr err)) + (apply 'error (cddr err)))))) + +(defun nxml-down-element (&optional arg) + "Move forward down into the content of an element. +With ARG, do this that many times. +Negative ARG means move backward but still down." + (interactive "p") + (or arg (setq arg 1)) + (if (< arg 0) + (nxml-backward-down-element (- arg)) + (while (> arg 0) + (goto-char + (let ((token-end (nxml-token-after))) + (save-excursion + (goto-char token-end) + (while (progn + (when (memq xmltok-type '(nil end-tag partial-end-tag)) + (error "No following start-tags in this element")) + (not (memq xmltok-type '(start-tag partial-start-tag)))) + (nxml-tokenize-forward)) + (point)))) + (setq arg (1- arg))))) + +(defun nxml-backward-down-element (&optional arg) + (interactive "p") + (or arg (setq arg 1)) + (if (< arg 0) + (nxml-down-element (- arg)) + (while (> arg 0) + (goto-char + (save-excursion + (nxml-token-before) + (goto-char xmltok-start) + (while (progn + (when (memq xmltok-type '(start-tag + partial-start-tag + prolog + nil)) + (error "No preceding end-tags in this element")) + (not (memq xmltok-type '(end-tag partial-end-tag)))) + (if (or (<= (point) nxml-prolog-end) + (not (search-backward "<" nxml-prolog-end t))) + (setq xmltok-type nil) + (nxml-move-outside-backwards) + (xmltok-forward))) + xmltok-start)) + (setq arg (1- arg))))) + +(defun nxml-forward-element (&optional arg) + "Move forward over one element. +With ARG, do it that many times. +Negative ARG means move backward." + (interactive "p") + (or arg (setq arg 1)) + (if (< arg 0) + (nxml-backward-element (- arg)) + (condition-case err + (while (and (> arg 0) + (< (point) (point-max))) + (goto-char + (or (nxml-scan-element-forward (nxml-token-before)) + (error "No more elements"))) + (setq arg (1- arg))) + (nxml-scan-error + (goto-char (cadr err)) + (apply 'error (cddr err)))))) + +(defun nxml-backward-element (&optional arg) + "Move backward over one element. +With ARG, do it that many times. +Negative ARG means move forward." + (interactive "p") + (or arg (setq arg 1)) + (if (< arg 0) + (nxml-forward-element (- arg)) + (condition-case err + (while (and (> arg 0) + (< (point-min) (point))) + (goto-char + (or (and (nxml-scan-element-backward (progn + (nxml-token-after) + xmltok-start)) + xmltok-start) + (error "No preceding elements"))) + (setq arg (1- arg))) + (nxml-scan-error + (goto-char (cadr err)) + (apply 'error (cddr err)))))) + +(defun nxml-mark-token-after () + (interactive) + (push-mark (nxml-token-after) nil t) + (goto-char xmltok-start) + (message "Marked %s" xmltok-type)) + +;;; Paragraphs + +(defun nxml-mark-paragraph () + "Put point at beginning of this paragraph, mark at end. +The paragraph marked is the one that contains point or follows point." + (interactive) + (nxml-forward-paragraph) + (push-mark nil t t) + (nxml-backward-paragraph)) + +(defun nxml-forward-paragraph (&optional arg) + (interactive "p") + (or arg (setq arg 1)) + (cond ((< arg 0) + (nxml-backward-paragraph (- arg))) + ((> arg 0) + (forward-line 0) + (while (and (nxml-forward-single-paragraph) + (> (setq arg (1- arg)) 0)))))) + +(defun nxml-backward-paragraph (&optional arg) + (interactive "p") + (or arg (setq arg 1)) + (cond ((< arg 0) + (nxml-forward-paragraph (- arg))) + ((> arg 0) + (unless (bolp) + (let ((inhibit-field-text-motion t)) + (end-of-line))) + (while (and (nxml-backward-single-paragraph) + (> (setq arg (1- arg)) 0)))))) + +(defun nxml-forward-single-paragraph () + "Move forward over a single paragraph. +Return nil at end of buffer, t otherwise." + (let* ((token-end (nxml-token-after)) + (offset (- (point) xmltok-start)) + pos had-data) + (goto-char token-end) + (while (and (< (point) (point-max)) + (not (setq pos + (nxml-paragraph-end-pos had-data offset)))) + (when (nxml-token-contains-data-p offset) + (setq had-data t)) + (nxml-tokenize-forward) + (setq offset 0)) + (when pos (goto-char pos)))) + +(defun nxml-backward-single-paragraph () + "Move backward over a single paragraph. +Return nil at start of buffer, t otherwise." + (let* ((token-end (nxml-token-before)) + (offset (- token-end (point))) + (last-tag-pos xmltok-start) + pos had-data last-data-pos) + (goto-char token-end) + (unless (setq pos (nxml-paragraph-start-pos nil offset)) + (setq had-data (nxml-token-contains-data-p nil offset)) + (goto-char xmltok-start) + (while (and (not pos) (< (point-min) (point))) + (cond ((search-backward "<" nxml-prolog-end t) + (nxml-move-outside-backwards) + (save-excursion + (while (< (point) last-tag-pos) + (xmltok-forward) + (when (and (not had-data) (nxml-token-contains-data-p)) + (setq pos nil) + (setq last-data-pos xmltok-start)) + (let ((tem (nxml-paragraph-start-pos had-data 0))) + (when tem (setq pos tem))))) + (when (and (not had-data) last-data-pos (not pos)) + (setq had-data t) + (save-excursion + (while (< (point) last-data-pos) + (xmltok-forward)) + (let ((tem (nxml-paragraph-start-pos had-data 0))) + (when tem (setq pos tem))))) + (setq last-tag-pos (point))) + (t (goto-char (point-min)))))) + (when pos (goto-char pos)))) + +(defun nxml-token-contains-data-p (&optional start end) + (setq start (+ xmltok-start (or start 0))) + (setq end (- (point) (or end 0))) + (when (eq xmltok-type 'cdata-section) + (setq start (max start (+ xmltok-start 9))) + (setq end (min end (- (point) 3)))) + (or (and (eq xmltok-type 'data) + (eq start xmltok-start) + (eq end (point))) + (eq xmltok-type 'char-ref) + (and (memq xmltok-type '(data cdata-section)) + (< start end) + (save-excursion + (goto-char start) + (re-search-forward "[^ \t\r\n]" end t))))) + +(defun nxml-paragraph-end-pos (had-data offset) + "Return the position of the paragraph end if contained in the current token. +Return nil if the current token does not contain the paragraph end. +Only characters after OFFSET from the start of the token are eligible. +HAD-DATA says whether there have been non-whitespace data characters yet." + (cond ((not had-data) + (cond ((memq xmltok-type '(data cdata-section)) + (save-excursion + (let ((end (point))) + (goto-char (+ xmltok-start + (max (if (eq xmltok-type 'cdata-section) + 9 + 0) + offset))) + (and (re-search-forward "[^ \t\r\n]" end t) + (re-search-forward "^[ \t]*$" end t) + (match-beginning 0))))) + ((and (eq xmltok-type 'comment) + (nxml-token-begins-line-p) + (nxml-token-ends-line-p)) + (save-excursion + (let ((end (point))) + (goto-char (+ xmltok-start (max 4 offset))) + (when (re-search-forward "[^ \t\r\n]" (- end 3) t) + (if (re-search-forward "^[ \t]*$" end t) + (match-beginning 0) + (goto-char (- end 3)) + (skip-chars-backward " \t") + (unless (bolp) + (beginning-of-line 2)) + (point)))))))) + ((memq xmltok-type '(data space cdata-section)) + (save-excursion + (let ((end (point))) + (goto-char (+ xmltok-start offset)) + (and (re-search-forward "^[ \t]*$" end t) + (match-beginning 0))))) + ((and (memq xmltok-type '(start-tag + end-tag + empty-element + comment + processing-instruction + entity-ref)) + (nxml-token-begins-line-p) + (nxml-token-ends-line-p)) + (save-excursion + (goto-char xmltok-start) + (skip-chars-backward " \t") + (point))) + ((and (eq xmltok-type 'end-tag) + (looking-at "[ \t]*$") + (not (nxml-in-mixed-content-p t))) + (save-excursion + (or (search-forward "\n" nil t) + (point-max)))))) + +(defun nxml-paragraph-start-pos (had-data offset) + "Return the position of the paragraph start if contained in the current token. +Return nil if the current token does not contain the paragraph start. +Only characters before OFFSET from the end of the token are eligible. +HAD-DATA says whether there have been non-whitespace data characters yet." + (cond ((not had-data) + (cond ((memq xmltok-type '(data cdata-section)) + (save-excursion + (goto-char (- (point) + (max (if (eq xmltok-type 'cdata-section) + 3 + 0) + offset))) + (and (re-search-backward "[^ \t\r\n]" xmltok-start t) + (re-search-backward "^[ \t]*$" xmltok-start t) + (match-beginning 0)))) + ((and (eq xmltok-type 'comment) + (nxml-token-ends-line-p) + (nxml-token-begins-line-p)) + (save-excursion + (goto-char (- (point) (max 3 offset))) + (when (and (< (+ xmltok-start 4) (point)) + (re-search-backward "[^ \t\r\n]" + (+ xmltok-start 4) + t)) + (if (re-search-backward "^[ \t]*$" xmltok-start t) + (match-beginning 0) + (goto-char xmltok-start) + (if (looking-at "<!--[ \t]*\n") + (match-end 0) + (skip-chars-backward " \t") + (point)))))))) + ((memq xmltok-type '(data space cdata-section)) + (save-excursion + (goto-char (- (point) offset)) + (and (re-search-backward "^[ \t]*$" xmltok-start t) + (match-beginning 0)))) + ((and (memq xmltok-type '(start-tag + end-tag + empty-element + comment + processing-instruction + entity-ref)) + (nxml-token-ends-line-p) + (nxml-token-begins-line-p)) + (or (search-forward "\n" nil t) + (point-max))) + ((and (eq xmltok-type 'start-tag) + (nxml-token-begins-line-p) + (not (save-excursion + (goto-char xmltok-start) + (nxml-in-mixed-content-p nil)))) + (save-excursion + (goto-char xmltok-start) + (skip-chars-backward " \t") + ;; include any blank line before + (or (and (eq (char-before) ?\n) + (save-excursion + (goto-char (1- (point))) + (skip-chars-backward " \t") + (and (bolp) (point)))) + (point)))))) + +(defun nxml-token-ends-line-p () (looking-at "[ \t]*$")) + +(defun nxml-token-begins-line-p () + (save-excursion + (goto-char xmltok-start) + (skip-chars-backward " \t") + (bolp))) + +(defun nxml-in-mixed-content-p (endp) + "Return non-nil if point is in mixed content. +Point must be after an end-tag or before a start-tag. +ENDP is t in the former case, nil in the latter." + (let (matching-tag-pos) + (cond ((not (run-hook-with-args-until-failure + 'nxml-in-mixed-content-hook)) + nil) + ;; See if the matching tag does not start or end a line. + ((condition-case err + (progn + (setq matching-tag-pos + (xmltok-save + (if endp + (and (nxml-scan-element-backward (point)) + xmltok-start) + (nxml-scan-element-forward (point))))) + (and matching-tag-pos + (save-excursion + (goto-char matching-tag-pos) + (not (if endp + (progn + (skip-chars-backward " \t") + (bolp)) + (looking-at "[ \t]*$")))))) + (nxml-scan-error nil)) + t) + ;; See if there's data at the same level. + ((let (start end) + (if endp + (setq start matching-tag-pos + end (point)) + (setq start (point) + end matching-tag-pos)) + (save-excursion + (or (when start + (goto-char start) + (nxml-preceding-sibling-data-p)) + (when end + (goto-char end) + (nxml-following-sibling-data-p))))) + t) + ;; Otherwise, treat as not mixed + (t nil)))) + +(defun nxml-preceding-sibling-data-p () + "Return non-nil if there is a previous sibling that is data." + (let ((lim (max (- (point) nxml-mixed-scan-distance) + nxml-prolog-end)) + (level 0) + found end) + (xmltok-save + (save-excursion + (while (and (< lim (point)) + (>= level 0) + (not found) + (progn + (setq end (point)) + (search-backward "<" lim t))) + (nxml-move-outside-backwards) + (save-excursion + (xmltok-forward) + (let ((prev-level level)) + (cond ((eq xmltok-type 'end-tag) + (setq level (1+ level))) + ((eq xmltok-type 'start-tag) + (setq level (1- level)))) + (when (eq prev-level 0) + (while (and (< (point) end) (not found)) + (xmltok-forward) + (when (memq xmltok-type '(data cdata-section char-ref)) + (setq found t))))))))) + found)) + +(defun nxml-following-sibling-data-p () + (let ((lim (min (+ (point) nxml-mixed-scan-distance) + (point-max))) + (level 0) + found) + (xmltok-save + (save-excursion + (while (and (< (point) lim) + (>= level 0) + (nxml-tokenize-forward) + (not found)) + (cond ((eq xmltok-type 'start-tag) + (setq level (1+ level))) + ((eq xmltok-type 'end-tag) + (setq level (1- level))) + ((and (eq level 0) + (memq xmltok-type '(data cdata-section char-ref))) + (setq found t)))))) + found)) + +;;; Filling + +(defun nxml-do-fill-paragraph (arg) + (let (fill-paragraph-function + fill-prefix + start end) + (save-excursion + (nxml-forward-paragraph) + (setq end (point)) + (nxml-backward-paragraph) + (skip-chars-forward " \t\r\n") + (setq start (point)) + (beginning-of-line) + (setq fill-prefix (buffer-substring-no-properties (point) start)) + (when (and (not (nxml-get-inside (point))) + (looking-at "[ \t]*<!--")) + (setq fill-prefix (concat fill-prefix " "))) + (fill-region-as-paragraph start end arg)) + (skip-line-prefix fill-prefix) + fill-prefix)) + +(defun nxml-newline-and-indent (soft) + (delete-horizontal-space) + (if soft (insert-and-inherit ?\n) (newline 1)) + (nxml-indent-line)) + + +;;; Dynamic markup + +(defvar nxml-dynamic-markup-prev-pos nil) +(defvar nxml-dynamic-markup-prev-lengths nil) +(defvar nxml-dynamic-markup-prev-found-marker nil) +(defvar nxml-dynamic-markup-prev-start-tags (make-hash-table :test 'equal)) + +(defun nxml-dynamic-markup-word () + "Dynamically markup the word before point. +This attempts to find a tag to put around the word before point based +on the contents of the current buffer. The end-tag will be inserted at +point. The start-tag will be inserted at or before the beginning of +the word before point; the contents of the current buffer is used to +decide where. + +It works in a similar way to \\[dabbrev-expand]. It searches first +backwards from point, then forwards from point for an element whose +content is a string which matches the contents of the buffer before +point and which includes at least the word before point. It then +copies the start- and end-tags from that element and uses them to +surround the matching string before point. + +Repeating \\[nxml-dynamic-markup-word] immediately after successful +\\[nxml-dynamic-markup-word] removes the previously inserted markup +and attempts to find another possible way to do the markup." + (interactive "*") + (let (search-start-pos done) + (if (and (integerp nxml-dynamic-markup-prev-pos) + (= nxml-dynamic-markup-prev-pos (point)) + (eq last-command this-command) + nxml-dynamic-markup-prev-lengths) + (let* ((end-tag-open-pos + (- nxml-dynamic-markup-prev-pos + (nth 2 nxml-dynamic-markup-prev-lengths))) + (start-tag-close-pos + (- end-tag-open-pos + (nth 1 nxml-dynamic-markup-prev-lengths))) + (start-tag-open-pos + (- start-tag-close-pos + (nth 0 nxml-dynamic-markup-prev-lengths)))) + (delete-region end-tag-open-pos nxml-dynamic-markup-prev-pos) + (delete-region start-tag-open-pos start-tag-close-pos) + (setq search-start-pos + (marker-position nxml-dynamic-markup-prev-found-marker))) + (clrhash nxml-dynamic-markup-prev-start-tags)) + (setq nxml-dynamic-markup-prev-pos nil) + (setq nxml-dynamic-markup-prev-lengths nil) + (setq nxml-dynamic-markup-prev-found-marker nil) + (goto-char + (save-excursion + (let* ((pos (point)) + (word (progn + (backward-word 1) + (unless (< (point) pos) + (error "No word to markup")) + (buffer-substring-no-properties (point) pos))) + (search (concat word "</")) + done) + (when search-start-pos + (goto-char search-start-pos)) + (while (and (not done) + (or (and (< (point) pos) + (or (search-backward search nil t) + (progn (goto-char pos) nil))) + (search-forward search nil t))) + (goto-char (- (match-end 0) 2)) + (setq done (nxml-try-copy-markup pos))) + (or done + (error (if (zerop (hash-table-count + nxml-dynamic-markup-prev-start-tags)) + "No possible markup found for `%s'" + "No more markup possibilities found for `%s'") + word))))))) + +(defun nxml-try-copy-markup (word-end-pos) + (save-excursion + (let ((end-tag-pos (point))) + (when (and (not (nxml-get-inside end-tag-pos)) + (search-backward "<" nil t) + (not (nxml-get-inside (point)))) + (xmltok-forward) + (when (and (eq xmltok-type 'start-tag) + (< (point) end-tag-pos)) + (let* ((start-tag-close-pos (point)) + (start-tag + (buffer-substring-no-properties xmltok-start + start-tag-close-pos)) + (words + (nreverse + (split-string + (buffer-substring-no-properties start-tag-close-pos + end-tag-pos) + "[ \t\r\n]+")))) + (goto-char word-end-pos) + (while (and words + (re-search-backward (concat + (regexp-quote (car words)) + "\\=") + nil + t)) + (setq words (cdr words)) + (skip-chars-backward " \t\r\n")) + (when (and (not words) + (progn + (skip-chars-forward " \t\r\n") + (not (gethash (cons (point) start-tag) + nxml-dynamic-markup-prev-start-tags))) + (or (< end-tag-pos (point)) + (< word-end-pos xmltok-start))) + (setq nxml-dynamic-markup-prev-found-marker + (copy-marker end-tag-pos t)) + (puthash (cons (point) start-tag) + t + nxml-dynamic-markup-prev-start-tags) + (setq nxml-dynamic-markup-prev-lengths + (list (- start-tag-close-pos xmltok-start) + (- word-end-pos (point)) + (+ (- xmltok-name-end xmltok-start) 2))) + (let ((name (xmltok-start-tag-qname))) + (insert start-tag) + (goto-char (+ word-end-pos + (- start-tag-close-pos xmltok-start))) + (insert "</" name ">") + (setq nxml-dynamic-markup-prev-pos (point)))))))))) + + +;;; Character names + +(defvar nxml-char-name-ignore-case nil) + +(defvar nxml-char-name-alist nil + "Alist of character names. +Each member of the list has the form (NAME CODE . NAMESET), +where NAME is a string naming a character, NAMESET is a symbol +identifying a set of names and CODE is an integer specifying the +Unicode scalar value of the named character. +The NAME will only be used for completion if NAMESET has +a non-nil `nxml-char-name-set-enabled' property. +If NAMESET does does not have `nxml-char-name-set-defined' property, +then it must have a `nxml-char-name-set-file' property and `load' +will be applied to the value of this property if the nameset +is enabled.") + +(defvar nxml-char-name-table (make-hash-table :test 'eq) + "Hash table for mapping char codes to names. +Each key is a Unicode scalar value. +Each value is a list of pairs of the form (NAMESET . NAME), +where NAMESET is a symbol identifying a set of names, +and NAME is a string naming a character.") + +(defvar nxml-autoload-char-name-set-list nil + "List of char namesets that can be autoloaded.") + +(defun nxml-enable-char-name-set (nameset) + (put nameset 'nxml-char-name-set-enabled t)) + +(defun nxml-disable-char-name-set (nameset) + (put nameset 'nxml-char-name-set-enabled nil)) + +(defun nxml-char-name-set-enabled-p (nameset) + (get nameset 'nxml-char-name-set-enabled)) + +(defun nxml-autoload-char-name-set (nameset file) + (unless (memq nameset nxml-autoload-char-name-set-list) + (setq nxml-autoload-char-name-set-list + (cons nameset nxml-autoload-char-name-set-list))) + (put nameset 'nxml-char-name-set-file file)) + +(defun nxml-define-char-name-set (nameset alist) + "Define a set of character names. +NAMESET is a symbol identifying the set. +Alist is a list where each member has the form (NAME CODE), +where NAME is a string naming a character and code +is an integer giving the Unicode scalar value of the character." + (when (get nameset 'nxml-char-name-set-defined) + (error "Nameset `%s' already defined" nameset)) + (let ((iter alist)) + (while iter + (let* ((name-code (car iter)) + (name (car name-code)) + (code (cadr name-code))) + (puthash code + (cons (cons nameset name) + (gethash code nxml-char-name-table)) + nxml-char-name-table)) + (setcdr (cdr (car iter)) nameset) + (setq iter (cdr iter)))) + (setq nxml-char-name-alist + (nconc alist nxml-char-name-alist)) + (put nameset 'nxml-char-name-set-defined t)) + +(defun nxml-get-char-name (code) + (mapcar 'nxml-maybe-load-char-name-set nxml-autoload-char-name-set-list) + (let ((names (gethash code nxml-char-name-table)) + name) + (while (and names (not name)) + (if (nxml-char-name-set-enabled-p (caar names)) + (setq name (cdar names)) + (setq names (cdr names)))) + name)) + +(defvar nxml-named-char-history nil) + +(defun nxml-insert-named-char (arg) + "Insert a character using its name. +The name is read from the minibuffer. +Normally, inserts the character as a numeric character reference. +With a prefix argument, inserts the character directly." + (interactive "*P") + (mapcar 'nxml-maybe-load-char-name-set nxml-autoload-char-name-set-list) + (let ((name + (let ((completion-ignore-case nxml-char-name-ignore-case)) + (completing-read "Character name: " + nxml-char-name-alist + (lambda (member) + (get (cddr member) 'nxml-char-name-set-enabled)) + t + nil + 'nxml-named-char-history))) + (alist nxml-char-name-alist) + elt code) + (while (and alist (not code)) + (setq elt (assoc name alist)) + (if (get (cddr elt) 'nxml-char-name-set-enabled) + (setq code (cadr elt)) + (setq alist (cdr (member elt alist))))) + (when code + (insert (if arg + (or (decode-char 'ucs code) + (error "Character %x is not supported by Emacs" + code)) + (format "&#x%X;" code)))))) + +(defun nxml-maybe-load-char-name-set (sym) + (when (and (get sym 'nxml-char-name-set-enabled) + (not (get sym 'nxml-char-name-set-defined)) + (stringp (get sym 'nxml-char-name-set-file))) + (load (get sym 'nxml-char-name-set-file)))) + +(defun nxml-toggle-char-ref-extra-display (arg) + "*Toggle the display of extra information for character references." + (interactive "P") + (let ((new (if (null arg) + (not nxml-char-ref-extra-display) + (> (prefix-numeric-value arg) 0)))) + (when (not (eq new nxml-char-ref-extra-display)) + (setq nxml-char-ref-extra-display new) + (save-excursion + (save-restriction + (widen) + (if nxml-char-ref-extra-display + (nxml-with-unmodifying-text-property-changes + (nxml-clear-fontified (point-min) (point-max))) + (nxml-clear-char-ref-extra-display (point-min) (point-max)))))))) + +(put 'nxml-char-ref 'evaporate t) + +(defun nxml-char-ref-display-extra (start end n) + (when nxml-char-ref-extra-display + (let ((name (nxml-get-char-name n)) + (glyph-string (and nxml-char-ref-display-glyph-flag + (nxml-glyph-display-string n 'nxml-glyph-face))) + ov) + (when (or name glyph-string) + (setq ov (make-overlay start end nil t)) + (overlay-put ov 'category 'nxml-char-ref) + (when name + (overlay-put ov 'help-echo name)) + (when glyph-string + (overlay-put ov + 'after-string + (propertize glyph-string 'face 'nxml-glyph-face))))))) + +(defun nxml-clear-char-ref-extra-display (start end) + (let ((ov (overlays-in start end))) + (while ov + (when (eq (overlay-get (car ov) 'category) 'nxml-char-ref) + (delete-overlay (car ov))) + (setq ov (cdr ov))))) + +;;; Versioning + +(defun nxml-version () + "Show the version of nXML mode that is being used." + (interactive) + (if nxml-version + (message "nXML mode version %s" nxml-version) + (message "nXML mode version unknown"))) + + +(defun nxml-start-delimiter-length (type) + (or (get type 'nxml-start-delimiter-length) + 0)) + +(put 'cdata-section 'nxml-start-delimiter-length 9) +(put 'comment 'nxml-start-delimiter-length 4) +(put 'processing-instruction 'nxml-start-delimiter-length 2) +(put 'start-tag 'nxml-start-delimiter-length 1) +(put 'empty-element 'nxml-start-delimiter-length 1) +(put 'partial-empty-element 'nxml-start-delimiter-length 1) +(put 'entity-ref 'nxml-start-delimiter-length 1) +(put 'char-ref 'nxml-start-delimiter-length 2) + +(defun nxml-end-delimiter-length (type) + (or (get type 'nxml-end-delimiter-length) + 0)) + +(put 'cdata-section 'nxml-end-delimiter-length 3) +(put 'comment 'nxml-end-delimiter-length 3) +(put 'processing-instruction 'nxml-end-delimiter-length 2) +(put 'start-tag 'nxml-end-delimiter-length 1) +(put 'empty-element 'nxml-end-delimiter-length 2) +(put 'partial-empty-element 'nxml-end-delimiter-length 1) +(put 'entity-ref 'nxml-end-delimiter-length 1) +(put 'char-ref 'nxml-end-delimiter-length 1) + +(defun nxml-token-type-friendly-name (type) + (or (get type 'nxml-friendly-name) + (symbol-name type))) + +(put 'cdata-section 'nxml-friendly-name "CDATA section") +(put 'processing-instruction 'nxml-friendly-name "processing instruction") +(put 'entity-ref 'nxml-friendly-name "entity reference") +(put 'char-ref 'nxml-friendly-name "character reference") + +(provide 'nxml-mode) + +;;; nxml-mode.el ends here
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/nxml-ns.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,148 @@ +;;; nxml-ns.el --- XML namespace processing + +;; Copyright (C) 2003 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 2 of +;; the License, or (at your option) any later version. + +;; This program is distributed in the hope that it will be +;; useful, but WITHOUT ANY WARRANTY; without even the implied +;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +;; PURPOSE. See the GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public +;; License along with this program; if not, write to the Free +;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, +;; MA 02111-1307 USA + +;;; Commentary: + +;; This file uses a prefix of `nxml-ns'. + +;;; Code: + +(require 'nxml-util) + +(defvar nxml-ns-state nil + "Contains the state of namespace processing. The state +is never modified destructively and so can be saved and restored +without copying. + +The value is a stack represented by a list. The list has length N + 1 +where N is the number of open elements. Each member of the list +represents the bindings in effect for a particular element. Each +member is itself a list whose car is the default namespace +\(a symbol or nil) and whose cdr is an alist of (PREFIX . NS) pairs +where PREFIX is a string (never nil) and NS is the namespace URI +symbol.") + +(defconst nxml-ns-initial-state + (list (list nil (cons "xml" nxml-xml-namespace-uri))) + "A list to be used as the initial value of nxml-ns-state. This +represents the state with no open elements and with the default +namespace bindings (no default namespace and only the xml prefix bound).") + +(defsubst nxml-ns-state () nxml-ns-state) + +(defsubst nxml-ns-set-state (state) + (setq nxml-ns-state state)) + +(defsubst nxml-ns-state-equal (state) + (equal nxml-ns-state state)) + +(defmacro nxml-ns-save (&rest body) + `(let ((nxml-ns-state nxml-ns-initial-state)) + ,@body)) + +(put 'nxml-ns-save 'lisp-indent-function 0) +(def-edebug-spec nxml-ns-save t) + +(defun nxml-ns-init () + (setq nxml-ns-state nxml-ns-initial-state)) + +(defun nxml-ns-push-state () + "Change the state by starting a new element. Namespace declarations +are inherited from the parent state." + (setq nxml-ns-state (cons (car nxml-ns-state) nxml-ns-state))) + +(defun nxml-ns-pop-state () + "Change the state by ending an element. The behaviour is undefined +if there is no open element." + (setq nxml-ns-state (cdr nxml-ns-state))) + +(defun nxml-ns-get-prefix (prefix) + "Return the symbol for namespace bound to PREFIX, or nil if PREFIX +is unbound. PREFIX is a string, never nil." + (let ((binding (assoc prefix (cdar nxml-ns-state)))) + (and binding (cdr binding)))) + +(defun nxml-ns-set-prefix (prefix ns) + "Change the binding of PREFIX. PREFIX is a string (never nil). NS +is a symbol (never nil). The change will be in effect until the end of +the current element." + (setq nxml-ns-state + (let ((bindings (car nxml-ns-state))) + (cons (cons (car bindings) + (cons (cons prefix ns) (cdr bindings))) + (cdr nxml-ns-state))))) + +(defun nxml-ns-get-default () + "Return the current default namespace as a symbol, or nil +if there is no default namespace." + (caar nxml-ns-state)) + +(defun nxml-ns-set-default (ns) + "Changes the current default namespace. The change +will be in effect until the end of the current element. +NS is a symbol or nil." + (setq nxml-ns-state + (cons (cons ns (cdar nxml-ns-state)) + (cdr nxml-ns-state)))) + +(defun nxml-ns-get-context () + (car nxml-ns-state)) + +(defun nxml-ns-prefixes-for (ns &optional attributep) + (let ((current (car nxml-ns-state)) + prefixes) + (when (if attributep + (not ns) + (eq (car current) ns)) + (setq prefixes '(nil))) + (setq current (cdr current)) + (while (let ((binding (rassq ns current))) + (when binding + (when (eq (nxml-ns-get-prefix (car binding)) ns) + (add-to-list 'prefixes + (car binding))) + (setq current + (cdr (member binding current)))))) + prefixes)) + +(defun nxml-ns-prefix-for (ns) + (car (rassq ns (cdar nxml-ns-state)))) + +(defun nxml-ns-changed-prefixes () + (let ((old (cadr nxml-ns-state)) + (new (car nxml-ns-state)) + changed) + (if (eq old new) + nil + (unless (eq (car new) (car old)) + (setq changed '(nil))) + (setq new (cdr new)) + (setq old (cdr old)) + (while (not (eq new old)) + (setq changed + (cons (caar new) changed)) + (setq new (cdr new)))) + changed)) + +(provide 'nxml-ns) + +;;; nxml-ns.el ends here
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/nxml-outln.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,1040 @@ +;;; nxml-outln.el --- outline support for nXML mode + +;; Copyright (C) 2004 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 2 of +;; the License, or (at your option) any later version. + +;; This program is distributed in the hope that it will be +;; useful, but WITHOUT ANY WARRANTY; without even the implied +;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +;; PURPOSE. See the GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public +;; License along with this program; if not, write to the Free +;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, +;; MA 02111-1307 USA + +;;; Commentary: + +;; A section can be in one of three states +;; 1. display normally; this displays each child section +;; according to its state; anything not part of child sections is also +;; displayed normally +;; 2. display just the title specially; child sections are not displayed +;; regardless of their state; anything not part of child sections is +;; not displayed +;; 3. display the title specially and display child sections +;; according to their state; anything not part of the child section is +;; not displayed +;; The state of a section is determined by the value of the +;; nxml-outline-state text property of the < character that starts +;; the section. +;; For state 1 the value is nil or absent. +;; For state 2 it is the symbol hide-children. +;; For state 3 it is t. +;; The special display is achieved by using overlays. The overlays +;; are computed from the nxml-outline-state property by +;; `nxml-refresh-outline'. There overlays all have a category property +;; with an nxml-outline-display property with value t. +;; +;; For a section to be recognized as such, the following conditions must +;; be satisfied: +;; - its start-tag must occur at the start of a line (possibly indented) +;; - its local name must match `nxml-section-element-name-regexp' +;; - it must have a heading element; a heading element is an +;; element whose name matches `nxml-heading-element-name-regexp', +;; and that occurs as, or as a descendant of, the first child element +;; of the section +;; +;; XXX What happens if an nxml-outline-state property is attached to a +;; character that doesn't start a section element? +;; +;; An outlined section (an section with a non-nil nxml-outline-state +;; property) can be displayed in either single-line or multi-line +;; form. Single-line form is used when the outline state is hide-children +;; or there are no child sections; multi-line form is used otherwise. +;; There are two flavors of single-line form: with children and without. +;; The with-childen flavor is used when there are child sections. +;; Single line with children looks like +;; <+section>A section title...</> +;; Single line without children looks like +;; <-section>A section title...</> +;; Multi line looks likes +;; <-section>A section title... +;; [child sections displayed here] +;; </-section> +;; The indent of an outlined section is computed relative to the +;; outermost containing outlined element. The indent of the +;; outermost containing element comes from the non-outlined +;; indent of the section start-tag. + +;;; Code: + +(require 'xmltok) +(require 'nxml-util) +(require 'nxml-rap) + +(defcustom nxml-section-element-name-regexp + "article\\|\\(sub\\)*section\\|chapter\\|div\\|appendix\\|part\\|preface\\|reference\\|simplesect\\|bibliography\\|bibliodiv\\|glossary\\|glossdiv" + "*Regular expression matching the name of elements used as sections. +An XML element is treated as a section if: + +- its local name (that is, the name without the prefix) matches +this regexp; + +- either its first child element or a descendant of that first child +element has a local name matching the variable +`nxml-heading-element-name-regexp'; and + +- its start-tag occurs at the beginning of a line (possibly indented)." + :group 'nxml + :type 'regexp) + +(defcustom nxml-heading-element-name-regexp "title\\|head" + "*Regular expression matching the name of elements used as headings. +An XML element is only recognized as a heading if it occurs as or +within the first child of an element that is recognized as a section. +See the variable `nxml-section-element-name-regexp' for more details." + :group 'nxml + :type 'regexp) + +(defcustom nxml-outline-child-indent 2 + "*Indentation in an outline for child element relative to parent element." + :group 'nxml + :type 'integer) + +(defface nxml-heading-face + '((t (:weight bold))) + "Face used for the contents of abbreviated heading elements." + :group 'nxml-highlighting-faces) + +(defface nxml-outline-indicator-face + '((t (:inherit default))) + "Face used for `+' or `-' before element names in outlines." + :group 'nxml-highlighting-faces) + +(defface nxml-outline-active-indicator-face + '((t (:box t :inherit nxml-outline-indicator-face))) + "Face used for clickable `+' or `-' before element names in outlines." + :group 'nxml-highlighting-faces) + +(defface nxml-outline-ellipsis-face + '((t (:bold t :inherit default))) + "Face used for `...' in outlines." + :group 'nxml-highlighting-faces) + +(defvar nxml-heading-scan-distance 1000 + "Maximum distance from section to scan for heading.") + +(defvar nxml-outline-prefix-map + (let ((map (make-sparse-keymap))) + (define-key map "\C-a" 'nxml-show-all) + (define-key map "\C-t" 'nxml-hide-all-text-content) + (define-key map "\C-r" 'nxml-refresh-outline) + (define-key map "\C-c" 'nxml-hide-direct-text-content) + (define-key map "\C-e" 'nxml-show-direct-text-content) + (define-key map "\C-d" 'nxml-hide-subheadings) + (define-key map "\C-s" 'nxml-show) + (define-key map "\C-k" 'nxml-show-subheadings) + (define-key map "\C-l" 'nxml-hide-text-content) + (define-key map "\C-i" 'nxml-show-direct-subheadings) + (define-key map "\C-o" 'nxml-hide-other) + map)) + +;;; Commands for changing visibility + +(defun nxml-show-all () + "Show all elements in the buffer normally." + (interactive) + (nxml-with-unmodifying-text-property-changes + (remove-text-properties (point-min) + (point-max) + '(nxml-outline-state nil))) + (nxml-outline-set-overlay nil (point-min) (point-max))) + +(defun nxml-hide-all-text-content () + "Hide all text content in the buffer. +Anything that is in a section but is not a heading will be hidden. +The visibility of headings at any level will not be changed. See the +variable `nxml-section-element-name-regexp' for more details on how to +customize which elements are recognized as sections and headings." + (interactive) + (nxml-transform-buffer-outline '((nil . t)))) + +(defun nxml-show-direct-text-content () + "Show the text content that is directly part of the section containing point. +Each subsection will be shown according to its individual state, which +will not be changed. The section containing point is the innermost +section that contains the character following point. See the variable +`nxml-section-element-name-regexp' for more details on how to +customize which elements are recognized as sections and headings." + (interactive) + (nxml-outline-pre-adjust-point) + (nxml-set-outline-state (nxml-section-start-position) nil) + (nxml-refresh-outline) + (nxml-outline-adjust-point)) + +(defun nxml-show-direct-subheadings () + "Show the immediate subheadings of the section containing point. +The section containing point is the innermost section that contains +the character following point. See the variable +`nxml-section-element-name-regexp' for more details on how to +customize which elements are recognized as sections and headings." + (interactive) + (let ((pos (nxml-section-start-position))) + (when (eq (nxml-get-outline-state pos) 'hide-children) + (nxml-set-outline-state pos t))) + (nxml-refresh-outline) + (nxml-outline-adjust-point)) + +(defun nxml-hide-direct-text-content () + "Hide the text content that is directly part of the section containing point. +The heading of the section will remain visible. The state of +subsections will not be changed. The section containing point is the +innermost section that contains the character following point. See the +variable `nxml-section-element-name-regexp' for more details on how to +customize which elements are recognized as sections and headings." + (interactive) + (let ((pos (nxml-section-start-position))) + (when (null (nxml-get-outline-state pos)) + (nxml-set-outline-state pos t))) + (nxml-refresh-outline) + (nxml-outline-adjust-point)) + +(defun nxml-hide-subheadings () + "Hide the subheadings that are part of the section containing point. +The text content will also be hidden, leaving only the heading of the +section itself visible. The state of the subsections will also be +changed to hide their headings, so that \\[nxml-show-direct-text-content] +would show only the heading of the subsections. The section containing +point is the innermost section that contains the character following +point. See the variable `nxml-section-element-name-regexp' for more +details on how to customize which elements are recognized as sections +and headings." + (interactive) + (nxml-transform-subtree-outline '((nil . hide-children) + (t . hide-children)))) + +(defun nxml-show () + "Show the section containing point normally, without hiding anything. +This includes everything in the section at any level. The section +containing point is the innermost section that contains the character +following point. See the variable `nxml-section-element-name-regexp' +for more details on how to customize which elements are recognized as +sections and headings." + (interactive) + (nxml-transform-subtree-outline '((hide-children . nil) + (t . nil)))) + +(defun nxml-hide-text-content () + "Hide text content at all levels in the section containing point. +The section containing point is the innermost section that contains +the character following point. See the variable +`nxml-section-element-name-regexp' for more details on how to +customize which elements are recognized as sections and headings." + (interactive) + (nxml-transform-subtree-outline '((nil . t)))) + +(defun nxml-show-subheadings () + "Show the subheadings at all levels of the section containing point. +The visibility of the text content at all levels in the section is not +changed. The section containing point is the innermost section that +contains the character following point. See the variable +`nxml-section-element-name-regexp' for more details on how to +customize which elements are recognized as sections and headings." + (interactive) + (nxml-transform-subtree-outline '((hide-children . t)))) + +(defun nxml-hide-other () + "Hide text content other than that directly in the section containing point. +Hide headings other than those of ancestors of that section and their +immediate subheadings. The section containing point is the innermost +section that contains the character following point. See the variable +`nxml-section-element-name-regexp' for more details on how to +customize which elements are recognized as sections and headings." + (interactive) + (let ((nxml-outline-state-transform-exceptions nil)) + (save-excursion + (while (and (condition-case err + (nxml-back-to-section-start) + (nxml-outline-error (nxml-report-outline-error + "Couldn't find containing section: %s" + err))) + (progn + (when (and nxml-outline-state-transform-exceptions + (null (nxml-get-outline-state (point)))) + (nxml-set-outline-state (point) t)) + (setq nxml-outline-state-transform-exceptions + (cons (point) + nxml-outline-state-transform-exceptions)) + (< nxml-prolog-end (point)))) + (goto-char (1- (point))))) + (nxml-transform-buffer-outline '((nil . hide-children) + (t . hide-children))))) + +;; These variables are dynamically bound. They are use to pass information to +;; nxml-section-tag-transform-outline-state. + +(defvar nxml-outline-state-transform-exceptions nil) +(defvar nxml-target-section-pos nil) +(defvar nxml-depth-in-target-section nil) +(defvar nxml-outline-state-transform-alist nil) + +(defun nxml-transform-buffer-outline (alist) + (let ((nxml-target-section-pos nil) + (nxml-depth-in-target-section 0) + (nxml-outline-state-transform-alist alist) + (nxml-outline-display-section-tag-function + 'nxml-section-tag-transform-outline-state)) + (nxml-refresh-outline)) + (nxml-outline-adjust-point)) + +(defun nxml-transform-subtree-outline (alist) + (let ((nxml-target-section-pos (nxml-section-start-position)) + (nxml-depth-in-target-section nil) + (nxml-outline-state-transform-alist alist) + (nxml-outline-display-section-tag-function + 'nxml-section-tag-transform-outline-state)) + (nxml-refresh-outline)) + (nxml-outline-adjust-point)) + +(defun nxml-outline-pre-adjust-point () + (cond ((and (< (point-min) (point)) + (get-char-property (1- (point)) 'invisible) + (not (get-char-property (point) 'invisible)) + (let ((str (or (get-char-property (point) 'before-string) + (get-char-property (point) 'display)))) + (and (stringp str) + (>= (length str) 3) + (string= (substring str 0 3) "...")))) + ;; The ellipsis is a display property on a visible character + ;; following an invisible region. The position of the event + ;; will be the position before that character. We want to + ;; move point to the other side of the invisible region, i.e. + ;; following the last visible character before that invisible + ;; region. + (goto-char (previous-single-char-property-change (1- (point)) + 'invisible))) + ((and (< (point) (point-max)) + (get-char-property (point) 'display) + (get-char-property (1+ (point)) 'invisible)) + (goto-char (next-single-char-property-change (1+ (point)) + 'invisible))) + ((and (< (point) (point-max)) + (get-char-property (point) 'invisible)) + (goto-char (next-single-char-property-change (point) + 'invisible))))) + +(defun nxml-outline-adjust-point () + "Adjust point after showing or hiding elements." + (when (and (get-char-property (point) 'invisible) + (< (point-min) (point)) + (get-char-property (1- (point)) 'invisible)) + (goto-char (previous-single-char-property-change (point) + 'invisible + nil + nxml-prolog-end)))) + +(defun nxml-transform-outline-state (section-start-pos) + (let* ((old-state + (nxml-get-outline-state section-start-pos)) + (change (assq old-state + nxml-outline-state-transform-alist))) + (when change + (nxml-set-outline-state section-start-pos + (cdr change))))) + +(defun nxml-section-tag-transform-outline-state (startp + section-start-pos + &optional + heading-start-pos) + (if (not startp) + (setq nxml-depth-in-target-section + (and nxml-depth-in-target-section + (> nxml-depth-in-target-section 0) + (1- nxml-depth-in-target-section))) + (cond (nxml-depth-in-target-section + (setq nxml-depth-in-target-section + (1+ nxml-depth-in-target-section))) + ((= section-start-pos nxml-target-section-pos) + (setq nxml-depth-in-target-section 0))) + (when (and nxml-depth-in-target-section + (not (member section-start-pos + nxml-outline-state-transform-exceptions))) + (nxml-transform-outline-state section-start-pos)))) + +(defun nxml-get-outline-state (pos) + (get-text-property pos 'nxml-outline-state)) + +(defun nxml-set-outline-state (pos state) + (nxml-with-unmodifying-text-property-changes + (if state + (put-text-property pos (1+ pos) 'nxml-outline-state state) + (remove-text-properties pos (1+ pos) '(nxml-outline-state nil))))) + +;;; Mouse interface + +(defun nxml-mouse-show-direct-text-content (event) + "Do the same as \\[nxml-show-direct-text-content] from a mouse click." + (interactive "e") + (and (nxml-mouse-set-point event) + (nxml-show-direct-text-content))) + +(defun nxml-mouse-hide-direct-text-content (event) + "Do the same as \\[nxml-hide-direct-text-content] from a mouse click." + (interactive "e") + (and (nxml-mouse-set-point event) + (nxml-hide-direct-text-content))) + +(defun nxml-mouse-hide-subheadings (event) + "Do the same as \\[nxml-hide-subheadings] from a mouse click." + (interactive "e") + (and (nxml-mouse-set-point event) + (nxml-hide-subheadings))) + +(defun nxml-mouse-show-direct-subheadings (event) + "Do the same as \\[nxml-show-direct-subheadings] from a mouse click." + (interactive "e") + (and (nxml-mouse-set-point event) + (nxml-show-direct-subheadings))) + +(defun nxml-mouse-set-point (event) + (mouse-set-point event) + (and nxml-prolog-end t)) + +;; Display + +(defun nxml-refresh-outline () + "Refresh the outline to correspond to the current XML element structure." + (interactive) + (save-excursion + (goto-char (point-min)) + (kill-local-variable 'line-move-ignore-invisible) + (make-local-variable 'line-move-ignore-invisible) + (condition-case err + (nxml-outline-display-rest nil nil nil) + (nxml-outline-error + (nxml-report-outline-error "Cannot display outline: %s" err))))) + +(defvar nxml-outline-display-section-tag-function nil) + +(defun nxml-outline-display-rest (outline-state start-tag-indent tag-qnames) + "Display up to and including the end of the current element. +OUTLINE-STATE can be nil, t, hide-children. START-TAG-INDENT is the +indent of the start-tag of the current element, or nil if no +containing element has a non-nil OUTLINE-STATE. TAG-QNAMES is a list +of the qnames of the open elements. Point is after the title content. +Leave point after the closing end-tag Return t if we had a +non-transparent child section." + (let ((last-pos (point)) + (transparent-depth 0) + ;; don't want ellipsis before root element + (had-children (not tag-qnames))) + (while + (cond ((not (nxml-section-tag-forward)) + (if (null tag-qnames) + nil + (nxml-outline-error "missing end-tag %s" + (car tag-qnames)))) + ;; section end-tag + ((nxml-token-end-tag-p) + (when nxml-outline-display-section-tag-function + (funcall nxml-outline-display-section-tag-function + nil + xmltok-start)) + (let ((qname (xmltok-end-tag-qname))) + (unless tag-qnames + (nxml-outline-error "extra end-tag %s" qname)) + (unless (string= (car tag-qnames) qname) + (nxml-outline-error "mismatched end-tag; expected %s, got %s" + (car tag-qnames) + qname))) + (cond ((> transparent-depth 0) + (setq transparent-depth (1- transparent-depth)) + (setq tag-qnames (cdr tag-qnames)) + t) + ((not outline-state) + (nxml-outline-set-overlay nil last-pos (point)) + nil) + ((or (not had-children) + (eq outline-state 'hide-children)) + (nxml-outline-display-single-line-end-tag last-pos) + nil) + (t + (nxml-outline-display-multi-line-end-tag last-pos + start-tag-indent) + nil))) + ;; section start-tag + (t + (let* ((qname (xmltok-start-tag-qname)) + (section-start-pos xmltok-start) + (heading-start-pos + (and (or nxml-outline-display-section-tag-function + (not (eq outline-state 'had-children)) + (not had-children)) + (nxml-token-starts-line-p) + (nxml-heading-start-position)))) + (when nxml-outline-display-section-tag-function + (funcall nxml-outline-display-section-tag-function + t + section-start-pos + heading-start-pos)) + (setq tag-qnames (cons qname tag-qnames)) + (if (or (not heading-start-pos) + (and (eq outline-state 'hide-children) + (setq had-children t))) + (setq transparent-depth (1+ transparent-depth)) + (nxml-display-section last-pos + section-start-pos + heading-start-pos + start-tag-indent + outline-state + had-children + tag-qnames) + (setq had-children t) + (setq tag-qnames (cdr tag-qnames)) + (setq last-pos (point)))) + t))) + had-children)) + +(defconst nxml-highlighted-less-than + (propertize "<" 'face 'nxml-tag-delimiter-face)) + +(defconst nxml-highlighted-greater-than + (propertize ">" 'face 'nxml-tag-delimiter-face)) + +(defconst nxml-highlighted-colon + (propertize ":" 'face 'nxml-element-colon-face)) + +(defconst nxml-highlighted-slash + (propertize "/" 'face 'nxml-tag-slash-face)) + +(defconst nxml-highlighted-ellipsis + (propertize "..." 'face 'nxml-outline-ellipsis-face)) + +(defconst nxml-highlighted-empty-end-tag + (concat nxml-highlighted-ellipsis + nxml-highlighted-less-than + nxml-highlighted-slash + nxml-highlighted-greater-than)) + +(defconst nxml-highlighted-inactive-minus + (propertize "-" 'face 'nxml-outline-indicator-face)) + +(defconst nxml-highlighted-active-minus + (propertize "-" 'face 'nxml-outline-active-indicator-face)) + +(defconst nxml-highlighted-active-plus + (propertize "+" 'face 'nxml-outline-active-indicator-face)) + +(defun nxml-display-section (last-pos + section-start-pos + heading-start-pos + parent-indent + parent-outline-state + had-children + tag-qnames) + (let* ((section-start-pos-bol + (save-excursion + (goto-char section-start-pos) + (skip-chars-backward " \t") + (point))) + (outline-state (nxml-get-outline-state section-start-pos)) + (newline-before-section-start-category + (cond ((and (not had-children) parent-outline-state) + 'nxml-outline-display-ellipsis) + (outline-state 'nxml-outline-display-show) + (t nil)))) + (nxml-outline-set-overlay (and parent-outline-state + 'nxml-outline-display-hide) + last-pos + (1- section-start-pos-bol) + nil + t) + (if outline-state + (let* ((indent (if parent-indent + (+ parent-indent nxml-outline-child-indent) + (save-excursion + (goto-char section-start-pos) + (current-column)))) + start-tag-overlay) + (nxml-outline-set-overlay newline-before-section-start-category + (1- section-start-pos-bol) + section-start-pos-bol + t) + (nxml-outline-set-overlay 'nxml-outline-display-hide + section-start-pos-bol + section-start-pos) + (setq start-tag-overlay + (nxml-outline-set-overlay 'nxml-outline-display-show + section-start-pos + (1+ section-start-pos) + t)) + ;; line motion commands don't work right if start-tag-overlay + ;; covers multiple lines + (nxml-outline-set-overlay 'nxml-outline-display-hide + (1+ section-start-pos) + heading-start-pos) + (goto-char heading-start-pos) + (nxml-end-of-heading) + (nxml-outline-set-overlay 'nxml-outline-display-heading + heading-start-pos + (point)) + (let* ((had-children + (nxml-outline-display-rest outline-state + indent + tag-qnames))) + (overlay-put start-tag-overlay + 'display + (concat + ;; indent + (make-string indent ?\ ) + ;; < + nxml-highlighted-less-than + ;; + or - indicator + (cond ((not had-children) + nxml-highlighted-inactive-minus) + ((eq outline-state 'hide-children) + (overlay-put start-tag-overlay + 'category + 'nxml-outline-display-hiding-tag) + nxml-highlighted-active-plus) + (t + (overlay-put start-tag-overlay + 'category + 'nxml-outline-display-showing-tag) + nxml-highlighted-active-minus)) + ;; qname + (nxml-highlighted-qname (car tag-qnames)) + ;; > + nxml-highlighted-greater-than)))) + ;; outline-state nil + (goto-char heading-start-pos) + (nxml-end-of-heading) + (nxml-outline-set-overlay newline-before-section-start-category + (1- section-start-pos-bol) + (point) + t) + (nxml-outline-display-rest outline-state + (and parent-indent + (+ parent-indent + nxml-outline-child-indent)) + tag-qnames)))) + +(defun nxml-highlighted-qname (qname) + (let ((colon (string-match ":" qname))) + (if colon + (concat (propertize (substring qname 0 colon) + 'face + 'nxml-element-prefix-face) + nxml-highlighted-colon + (propertize (substring qname (1+ colon)) + 'face + 'nxml-element-local-name-face)) + (propertize qname + 'face + 'nxml-element-local-name-face)))) + +(defun nxml-outline-display-single-line-end-tag (last-pos) + (nxml-outline-set-overlay 'nxml-outline-display-hide + last-pos + xmltok-start + nil + t) + (overlay-put (nxml-outline-set-overlay 'nxml-outline-display-show + xmltok-start + (point) + t) + 'display + nxml-highlighted-empty-end-tag)) + +(defun nxml-outline-display-multi-line-end-tag (last-pos start-tag-indent) + (let ((indentp (save-excursion + (goto-char last-pos) + (skip-chars-forward " \t") + (and (eq (char-after) ?\n) + (progn + (goto-char (1+ (point))) + (nxml-outline-set-overlay nil last-pos (point)) + (setq last-pos (point)) + (goto-char xmltok-start) + (beginning-of-line) + t)))) + end-tag-overlay) + (nxml-outline-set-overlay 'nxml-outline-display-hide + last-pos + xmltok-start + nil + t) + (setq end-tag-overlay + (nxml-outline-set-overlay 'nxml-outline-display-showing-tag + xmltok-start + (point) + t)) + (overlay-put end-tag-overlay + 'display + (concat (if indentp + (make-string start-tag-indent ?\ ) + "") + nxml-highlighted-less-than + nxml-highlighted-slash + nxml-highlighted-active-minus + (nxml-highlighted-qname (xmltok-end-tag-qname)) + nxml-highlighted-greater-than)))) + +(defvar nxml-outline-show-map + (let ((map (make-sparse-keymap))) + (define-key map "\C-m" 'nxml-show-direct-text-content) + (define-key map [mouse-2] 'nxml-mouse-show-direct-text-content) + map)) + +(defvar nxml-outline-show-help "mouse-2: show") + +(put 'nxml-outline-display-show 'nxml-outline-display t) +(put 'nxml-outline-display-show 'evaporate t) +(put 'nxml-outline-display-show 'keymap nxml-outline-show-map) +(put 'nxml-outline-display-show 'help-echo nxml-outline-show-help) + +(put 'nxml-outline-display-hide 'nxml-outline-display t) +(put 'nxml-outline-display-hide 'evaporate t) +(put 'nxml-outline-display-hide 'invisible t) +(put 'nxml-outline-display-hide 'keymap nxml-outline-show-map) +(put 'nxml-outline-display-hide 'help-echo nxml-outline-show-help) + +(put 'nxml-outline-display-ellipsis 'nxml-outline-display t) +(put 'nxml-outline-display-ellipsis 'evaporate t) +(put 'nxml-outline-display-ellipsis 'keymap nxml-outline-show-map) +(put 'nxml-outline-display-ellipsis 'help-echo nxml-outline-show-help) +(put 'nxml-outline-display-ellipsis 'before-string nxml-highlighted-ellipsis) + +(put 'nxml-outline-display-heading 'keymap nxml-outline-show-map) +(put 'nxml-outline-display-heading 'help-echo nxml-outline-show-help) +(put 'nxml-outline-display-heading 'nxml-outline-display t) +(put 'nxml-outline-display-heading 'evaporate t) +(put 'nxml-outline-display-heading 'face 'nxml-heading-face) + +(defvar nxml-outline-hiding-tag-map + (let ((map (make-sparse-keymap))) + (define-key map [mouse-1] 'nxml-mouse-show-direct-subheadings) + (define-key map [mouse-2] 'nxml-mouse-show-direct-text-content) + (define-key map "\C-m" 'nxml-show-direct-text-content) + map)) + +(defvar nxml-outline-hiding-tag-help + "mouse-1: show subheadings, mouse-2: show text content") + +(put 'nxml-outline-display-hiding-tag 'nxml-outline-display t) +(put 'nxml-outline-display-hiding-tag 'evaporate t) +(put 'nxml-outline-display-hiding-tag 'keymap nxml-outline-hiding-tag-map) +(put 'nxml-outline-display-hiding-tag 'help-echo nxml-outline-hiding-tag-help) + +(defvar nxml-outline-showing-tag-map + (let ((map (make-sparse-keymap))) + (define-key map [mouse-1] 'nxml-mouse-hide-subheadings) + (define-key map [mouse-2] 'nxml-mouse-show-direct-text-content) + (define-key map "\C-m" 'nxml-show-direct-text-content) + map)) + +(defvar nxml-outline-showing-tag-help + "mouse-1: hide subheadings, mouse-2: show text content") + +(put 'nxml-outline-display-showing-tag 'nxml-outline-display t) +(put 'nxml-outline-display-showing-tag 'evaporate t) +(put 'nxml-outline-display-showing-tag 'keymap nxml-outline-showing-tag-map) +(put 'nxml-outline-display-showing-tag + 'help-echo + nxml-outline-showing-tag-help) + +(defun nxml-outline-set-overlay (category + start + end + &optional + front-advance + rear-advance) + "Replace any nxml-outline-display overlays between START and END. +Overlays are removed if they overlay the region between START and END, +and have a non-nil nxml-outline-display property (typically via their +category). If CATEGORY is non-nil, they will be replaced with a new overlay +with that category from START to END. If CATEGORY is nil, no new +overlay will be created." + (when (< start end) + (let ((overlays (overlays-in start end)) + overlay) + (while overlays + (setq overlay (car overlays)) + (setq overlays (cdr overlays)) + (when (overlay-get overlay 'nxml-outline-display) + (delete-overlay overlay)))) + (and category + (let ((overlay (make-overlay start + end + nil + front-advance + rear-advance))) + (overlay-put overlay 'category category) + (setq line-move-ignore-invisible t) + overlay)))) + +(defun nxml-end-of-heading () + "Move from the start of the content of the heading to the end. +Do not move past the end of the line." + (let ((pos (condition-case err + (and (nxml-scan-element-forward (point) t) + xmltok-start) + nil))) + (end-of-line) + (skip-chars-backward " \t") + (cond ((not pos) + (setq pos (nxml-token-before)) + (when (eq xmltok-type 'end-tag) + (goto-char pos))) + ((< pos (point)) + (goto-char pos))) + (skip-chars-backward " \t") + (point))) + +;;; Navigating section structure + +(defsubst nxml-token-start-tag-p () + (or (eq xmltok-type 'start-tag) + (eq xmltok-type 'partial-start-tag))) + +(defsubst nxml-token-end-tag-p () + (or (eq xmltok-type 'end-tag) + (eq xmltok-type 'partial-end-tag))) + +(defun nxml-token-starts-line-p () + (save-excursion + (goto-char xmltok-start) + (skip-chars-backward " \t") + (bolp))) + +(defvar nxml-cached-section-tag-regexp nil) +(defvar nxml-cached-section-element-name-regexp nil) + +(defsubst nxml-make-section-tag-regexp () + (if (eq nxml-cached-section-element-name-regexp + nxml-section-element-name-regexp) + nxml-cached-section-tag-regexp + (nxml-make-section-tag-regexp-1))) + +(defun nxml-make-section-tag-regexp-1 () + (setq nxml-cached-section-element-name-regexp nil) + (setq nxml-cached-section-tag-regexp + (concat "</?\\(" + "\\(" xmltok-ncname-regexp ":\\)?" + nxml-section-element-name-regexp + "\\)[ \t\r\n>]")) + (setq nxml-cached-section-element-name-regexp + nxml-section-element-name-regexp) + nxml-cached-section-tag-regexp) + +(defun nxml-section-tag-forward () + "Move forward past the first tag that is a section start- or end-tag. +Return xmltok-type for tag. +If no tag found, return nil and move to the end of the buffer." + (let ((case-fold-search nil) + (tag-regexp (nxml-make-section-tag-regexp)) + match-end) + (when (< (point) nxml-prolog-end) + (goto-char nxml-prolog-end)) + (while (cond ((not (re-search-forward tag-regexp nil 'move)) + (setq xmltok-type nil) + nil) + ((progn + (goto-char (match-beginning 0)) + (setq match-end (match-end 0)) + (nxml-ensure-scan-up-to-date) + (let ((end (nxml-inside-end (point)))) + (when end + (goto-char end) + t)))) + ((progn + (xmltok-forward) + (and (memq xmltok-type '(start-tag + partial-start-tag + end-tag + partial-end-tag)) + ;; just in case wildcard matched non-name chars + (= xmltok-name-end (1- match-end)))) + nil) + (t)))) + xmltok-type) + +(defun nxml-section-tag-backward () + "Move backward to the end of a tag that is a section start- or end-tag. +The position of the end of the tag must be <= point +Point is at the end of the tag. `xmltok-start' is the start." + (let ((case-fold-search nil) + (start (point)) + (tag-regexp (nxml-make-section-tag-regexp)) + match-end) + (if (< (point) nxml-prolog-end) + (progn + (goto-char (point-min)) + nil) + (while (cond ((not (re-search-backward tag-regexp + nxml-prolog-end + 'move)) + (setq xmltok-type nil) + (goto-char (point-min)) + nil) + ((progn + (goto-char (match-beginning 0)) + (setq match-end (match-end 0)) + (nxml-ensure-scan-up-to-date) + (let ((pos (nxml-inside-start (point)))) + (when pos + (goto-char (1- pos)) + t)))) + ((progn + (xmltok-forward) + (and (<= (point) start) + (memq xmltok-type '(start-tag + partial-start-tag + end-tag + partial-end-tag)) + ;; just in case wildcard matched non-name chars + (= xmltok-name-end (1- match-end)))) + nil) + (t (goto-char xmltok-start) + t))) + xmltok-type))) + +(defun nxml-section-start-position () + "Return the position of the start of the section containing point. +Signal an error on failure." + (condition-case err + (save-excursion (if (nxml-back-to-section-start) + (point) + (error "Not in section"))) + (nxml-outline-error + (nxml-report-outline-error "Couldn't determine containing section: %s" + err)))) + +(defun nxml-back-to-section-start (&optional invisible-ok) + "Try to move back to the start of the section containing point. +The start of the section must be <= point. +Only visible sections are included unless INVISIBLE-OK is non-nil. +If found, return t. Otherwise move to point-min and return nil. +If unbalanced section tags are found, signal an `nxml-outline-error'." + (when (or (nxml-after-section-start-tag) + (nxml-section-tag-backward)) + (let (open-tags found) + (while (let (section-start-pos) + (setq section-start-pos xmltok-start) + (if (nxml-token-end-tag-p) + (setq open-tags (cons (xmltok-end-tag-qname) + open-tags)) + (if (not open-tags) + (when (and (nxml-token-starts-line-p) + (or invisible-ok + (not (get-char-property section-start-pos + 'invisible))) + (nxml-heading-start-position)) + (setq found t)) + (let ((qname (xmltok-start-tag-qname))) + (unless (string= (car open-tags) qname) + (nxml-outline-error "mismatched end-tag")) + (setq open-tags (cdr open-tags))))) + (goto-char section-start-pos) + (and (not found) + (nxml-section-tag-backward)))) + found))) + +(defun nxml-after-section-start-tag () + "If the character after point is in a section start-tag, move after it. +Return the token type. Otherwise return nil. +Set up variables like `xmltok-forward'." + (let ((pos (nxml-token-after)) + (case-fold-search nil)) + (when (and (memq xmltok-type '(start-tag partial-start-tag)) + (save-excursion + (goto-char xmltok-start) + (looking-at (nxml-make-section-tag-regexp)))) + (goto-char pos) + xmltok-type))) + +(defun nxml-heading-start-position () + "Return the position of the start of the content of a heading element. +Adjust the position to be after initial leading whitespace. +Return nil if no heading element is found. Requires point to be +immediately after the section's start-tag." + (let ((depth 0) + (heading-regexp (concat "\\`\\(" + nxml-heading-element-name-regexp + "\\)\\'")) + + (section-regexp (concat "\\`\\(" + nxml-section-element-name-regexp + "\\)\\'")) + (start (point)) + found) + (save-excursion + (while (and (xmltok-forward) + (cond ((memq xmltok-type '(end-tag partial-end-tag)) + (and (not (string-match section-regexp + (xmltok-end-tag-local-name))) + (> depth 0) + (setq depth (1- depth)))) + ;; XXX Not sure whether this is a good idea + ;;((eq xmltok-type 'empty-element) + ;; nil) + ((not (memq xmltok-type + '(start-tag partial-start-tag))) + t) + ((string-match section-regexp + (xmltok-start-tag-local-name)) + nil) + ((string-match heading-regexp + (xmltok-start-tag-local-name)) + (skip-chars-forward " \t\r\n") + (setq found (point)) + nil) + (t + (setq depth (1+ depth)) + t)) + (<= (- (point) start) nxml-heading-scan-distance)))) + found)) + +;;; Error handling + +(defun nxml-report-outline-error (msg err) + (error msg (apply 'format (cdr err)))) + +(defun nxml-outline-error (&rest args) + (signal 'nxml-outline-error args)) + +(put 'nxml-outline-error + 'error-conditions + '(error nxml-error nxml-outline-error)) + +(put 'nxml-outline-error + 'error-message + "Cannot create outline of buffer that is not well-formed") + +;;; Debugging + +(defun nxml-debug-overlays () + (interactive) + (let ((overlays (nreverse (overlays-in (point-min) (point-max)))) + overlay) + (while overlays + (setq overlay (car overlays)) + (setq overlays (cdr overlays)) + (when (overlay-get overlay 'nxml-outline-display) + (message "overlay %s: %s...%s (%s)" + (overlay-get overlay 'category) + (overlay-start overlay) + (overlay-end overlay) + (overlay-get overlay 'display)))))) + +(provide 'nxml-outln) + +;;; nxml-outln.el ends here
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/nxml-parse.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,320 @@ +;;; nxml-parse.el --- XML parser, sharing infrastructure with nxml-mode + +;; Copyright (C) 2003 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 2 of +;; the License, or (at your option) any later version. + +;; This program is distributed in the hope that it will be +;; useful, but WITHOUT ANY WARRANTY; without even the implied +;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +;; PURPOSE. See the GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public +;; License along with this program; if not, write to the Free +;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, +;; MA 02111-1307 USA + +;;; Commentary: + +;; Entry point is `nxml-parse-file'. + +;;; Code: + +(require 'nxml-util) +(require 'xmltok) +(require 'nxml-enc) +(require 'nxml-ns) + +(defvar nxml-parse-file-name nil) + +(defvar nxml-validate-function nil + "Nil or a function to be called by `nxml-parse-file' to perform validation. +The function will be called once for each start-tag or end-tag. The +function is passed two arguments TEXT and START-TAG. For a start-tag, +START-TAG is a list (NAME ATTRIBUTES) where NAME and ATTRIBUTES are in +the same form as returned by `nxml-parse-file. For an end-tag, +START-TAG is nil. TEXT is a string containing the text immediately +preceding the tag, or nil if there was no such text. An empty element +is treated as a start-tag followed by an end-tag. + +For a start-tag, the namespace state will be the state after +processing the namespace declarations in the start-tag. For an +end-tag, the namespace state will be the state before popping the +namespace declarations for the corresponding start-tag. + +The function must return nil if no error is detected or a +cons (MESSAGE . LOCATION) where MESSAGE is a string containing +an error message and LOCATION indicates what caused the error +as follows: + +- nil indicates the tag as whole caused it; this is always allowed; + +- text indicates the text caused it; this is allowed only if +TEXT is non-nil; + +- tag-close indicates the close of the tag caused it; this is +allowed only if START-TAG is non-nil; + +- (attribute-name . N) indicates that the name of the Nth attribute +caused it; N counts from 0; this is allowed only if START-TAG is non-nil +and N must be less than the number of attributes; + +- (attribute-value . N) indicates that the value of the Nth attribute +caused it; N counts from 0; this is allowed only if START-TAG is non-nil +and N must be less than the number of attributes.") + +(defun nxml-parse-file (file) + "Parse the XML document in FILE and return it as a list. +An XML element is represented as a list (NAME ATTRIBUTES . CHILDREN). +NAME is either a string, in the case where the name does not have a +namespace, or a cons (NAMESPACE . LOCAL-NAME), where NAMESPACE is a +symbol and LOCAL-NAME is a string, in the case where the name does +have a namespace. NAMESPACE is a keyword whose name is `:URI', where +URI is the namespace name. ATTRIBUTES is an alist of attributes where +each attribute has the form (NAME . VALUE), where NAME has the same +form as an element name, and VALUE is a string. A namespace +declaration is represented as an attribute whose name is +\(:http://www.w3.org/2000/xmlns/ . LOCAL-NAME). CHILDREN is a list +containing strings and child elements; CHILDREN never contains two +consecutive strings and never contains an empty string. Processing +instructions and comments are not represented. The return value is a +list representing the document element. + +If the XML document is not well-formed, an error having the condition +`nxml-file-parse-error' will be signaled; the error data will be a +list of the \(FILE POSITION MESSAGE), where POSITION is an integer +specifying the position where the error was detected, and MESSAGE is a +string describing the error. + +The current contents of FILE will be parsed even if there is a +modified buffer currently visiting FILE. + +If the variable `nxml-validation-function' is non-nil, it will be +called twice for each element, and any reported error will be signaled +in the same way as well-formedness error." + (save-excursion + (set-buffer (nxml-parse-find-file file)) + (unwind-protect + (let ((nxml-parse-file-name file)) + (nxml-parse-instance)) + (kill-buffer nil)))) + +(defun nxml-parse-find-file (file) + (save-excursion + (set-buffer (get-buffer-create " *nXML Parse*")) + (erase-buffer) + (let ((set-auto-coding-function 'nxml-set-xml-coding)) + (insert-file-contents file)) + (current-buffer))) + +(defun nxml-parse-instance () + (let (xmltok-dtd) + (xmltok-save + (xmltok-forward-prolog) + (nxml-check-xmltok-errors) + (nxml-ns-save + (nxml-parse-instance-1))))) + +(defun nxml-parse-instance-1 () + (let* ((top (cons nil nil)) + ;; tail is a cons cell, whose cdr is nil + ;; additional elements will destructively appended to tail + (tail top) + ;; stack of tails one for each open element + tail-stack + ;; list of QNames of open elements + open-element-tags + ;; list of strings buffering a text node, in reverse order + text + ;; position of beginning of first (in buffer) string in text + text-pos) + (while (xmltok-forward) + (nxml-check-xmltok-errors) + (cond ((memq xmltok-type '(start-tag end-tag empty-element)) + (when text + (setq text (apply 'concat (nreverse text))) + (setcdr tail (cons text nil)) + (setq tail (cdr tail))) + (when (not (eq xmltok-type 'end-tag)) + (when (and (not open-element-tags) + (not (eq tail top))) + (nxml-parse-error nil "Multiple top-level elements")) + (setq open-element-tags + (cons (xmltok-start-tag-qname) + open-element-tags)) + (nxml-ns-push-state) + (let ((tag (nxml-parse-start-tag))) + (nxml-validate-tag text text-pos tag) + (setq text nil) + (setcdr tail (cons tag nil)) + (setq tail (cdr tail)) + (setq tail-stack (cons tail tail-stack)) + (setq tail (last tag)))) + (when (not (eq xmltok-type 'start-tag)) + (or (eq xmltok-type 'empty-element) + (equal (car open-element-tags) + (xmltok-end-tag-qname)) + (if open-element-tags + (nxml-parse-error nil + "Unbalanced end-tag; expected </%s>" + (car open-element-tags)) + (nxml-parse-error nil "Extra end-tag"))) + (nxml-validate-tag text text-pos nil) + (setq text nil) + (nxml-ns-pop-state) + (setq open-element-tags (cdr open-element-tags)) + (setq tail (car tail-stack)) + (setq tail-stack (cdr tail-stack))) + (setq text-pos nil)) + ((memq xmltok-type '(space data entity-ref char-ref cdata-section)) + (cond (open-element-tags + (unless text-pos + (setq text-pos xmltok-start)) + (setq text + (cons (nxml-current-text-string) text))) + ((not (eq xmltok-type 'space)) + (nxml-parse-error + nil + "%s at top-level" + (cdr (assq xmltok-type + '((data . "Text characters") + (entity-ref . "Entity reference") + (char-ref . "Character reference") + (cdata-section . "CDATA section")))))))))) + (unless (cdr top) + (nxml-parse-error (point-max) "Missing document element")) + (cadr top))) + +(defun nxml-parse-start-tag () + (let (parsed-attributes + parsed-namespace-attributes + atts att prefixes prefix ns value name) + (setq atts xmltok-namespace-attributes) + (while atts + (setq att (car atts)) + (setq value (or (xmltok-attribute-value att) + (nxml-parse-error nil "Invalid attribute value"))) + (setq ns (nxml-make-namespace value)) + (setq prefix (and (xmltok-attribute-prefix att) + (xmltok-attribute-local-name att))) + (cond ((member prefix prefixes) + (nxml-parse-error nil "Duplicate namespace declaration")) + ((not prefix) + (nxml-ns-set-default ns)) + (ns + (nxml-ns-set-prefix prefix ns)) + (t (nxml-parse-error nil "Cannot undeclare namespace prefix"))) + (setq prefixes (cons prefix prefixes)) + (setq parsed-namespace-attributes + (cons (cons (nxml-make-name nxml-xmlns-namespace-uri + (xmltok-attribute-local-name att)) + value) + parsed-namespace-attributes)) + (setq atts (cdr atts))) + (setq name + (nxml-make-name + (let ((prefix (xmltok-start-tag-prefix))) + (if prefix + (or (nxml-ns-get-prefix prefix) + (nxml-parse-error (1+ xmltok-start) + "Prefix `%s' undeclared" + prefix)) + (nxml-ns-get-default))) + (xmltok-start-tag-local-name))) + (setq atts xmltok-attributes) + (while atts + (setq att (car atts)) + (setq ns + (let ((prefix (xmltok-attribute-prefix att))) + (and prefix + (or (nxml-ns-get-prefix prefix) + (nxml-parse-error (xmltok-attribute-name-start att) + "Prefix `%s' undeclared" + prefix))))) + (setq parsed-attributes + (let ((nm (nxml-make-name ns + (xmltok-attribute-local-name att)))) + (when (assoc nm parsed-attributes) + (nxml-parse-error (xmltok-attribute-name-start att) + "Duplicate attribute")) + (cons (cons nm (or (xmltok-attribute-value att) + (nxml-parse-error nil "Invalid attribute value"))) + parsed-attributes))) + (setq atts (cdr atts))) + ;; We want to end up with the attributes followed by the + ;; the namespace attributes in the same order as + ;; xmltok-attributes and xmltok-namespace-attributes respectively. + (when parsed-namespace-attributes + (setq parsed-attributes + (nconc parsed-namespace-attributes parsed-attributes))) + (list name (nreverse parsed-attributes)))) + +(defun nxml-validate-tag (text text-pos tag) + (when nxml-validate-function + (let ((err (funcall nxml-validate-function text tag)) + pos) + (when err + (setq pos (nxml-validate-error-position (cdr err) + (and text text-pos) + tag)) + (or pos (error "Incorrect return value from %s" + nxml-validate-function)) + (nxml-parse-error pos (car err)))))) + +(defun nxml-validate-error-position (location text-pos tag) + (cond ((null location) xmltok-start) + ((eq location 'text) text-pos) + ((eq location 'tag-close) + (and tag (- (point) (if (eq xmltok-type 'empty-element ) 2 1)))) + ((consp location) + (let ((att (nth (cdr location) xmltok-attributes))) + (when (not att) + (setq att (nth (- (cdr location) (length xmltok-attributes)) + xmltok-namespace-attributes))) + (cond ((not att)) + ((eq (car location) 'attribute-name) + (xmltok-attribute-name-start att)) + ((eq (car location) 'attribute-value) + (xmltok-attribute-value-start att))))))) + +(defun nxml-make-name (ns local-name) + (if ns + (cons ns local-name) + local-name)) + +(defun nxml-current-text-string () + (cond ((memq xmltok-type '(space data)) + (buffer-substring-no-properties xmltok-start + (point))) + ((eq xmltok-type 'cdata-section) + (buffer-substring-no-properties (+ xmltok-start 9) + (- (point) 3))) + ((memq xmltok-type '(char-ref entity-ref)) + (unless xmltok-replacement + (nxml-parse-error nil + (if (eq xmltok-type 'char-ref) + "Reference to unsupported Unicode character" + "Unresolvable entity reference"))) + xmltok-replacement))) + +(defun nxml-parse-error (position &rest args) + (nxml-signal-file-parse-error nxml-parse-file-name + (or position xmltok-start) + (apply 'format args))) + +(defun nxml-check-xmltok-errors () + (when xmltok-errors + (let ((err (car (last xmltok-errors)))) + (nxml-signal-file-parse-error nxml-parse-file-name + (xmltok-error-start err) + (xmltok-error-message err))))) + +(provide 'nxml-parse) + +;;; nxml-parse.el ends here
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/nxml-rap.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,467 @@ +;;; nxml-rap.el --- low-level support for random access parsing for nXML mode + +;; Copyright (C) 2003, 2004 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 2 of +;; the License, or (at your option) any later version. + +;; This program is distributed in the hope that it will be +;; useful, but WITHOUT ANY WARRANTY; without even the implied +;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +;; PURPOSE. See the GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public +;; License along with this program; if not, write to the Free +;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, +;; MA 02111-1307 USA + +;;; Commentary: + +;; This uses xmltok.el to do XML parsing. The fundamental problem is +;; how to handle changes. We don't want to maintain a complete parse +;; tree. We also don't want to reparse from the start of the document +;; on every keystroke. However, it is not possible in general to +;; parse an XML document correctly starting at a random point in the +;; middle. The main problems are comments, CDATA sections and +;; processing instructions: these can all contain things that are +;; indistinguishable from elements. Literals in the prolog are also a +;; problem. Attribute value literals are not a problem because +;; attribute value literals cannot contain less-than signs. +;; +;; Our strategy is to keep track of just the problematic things. +;; Specifically, we keep track of all comments, CDATA sections and +;; processing instructions in the instance. We do this by marking all +;; except the first character of these with a non-nil nxml-inside text +;; property. The value of the nxml-inside property is comment, +;; cdata-section or processing-instruction. The first character does +;; not have the nxml-inside property so we can find the beginning of +;; the construct by looking for a change in a text property value +;; (Emacs provides primitives for this). We use text properties +;; rather than overlays, since the implementation of overlays doesn't +;; look like it scales to large numbers of overlays in a buffer. +;; +;; We don't in fact track all these constructs, but only track them in +;; some initial part of the instance. The variable `nxml-scan-end' +;; contains the limit of where we have scanned up to for them. +;; +;; Thus to parse some random point in the file we first ensure that we +;; have scanned up to that point. Then we search backwards for a +;; <. Then we check whether the < has an nxml-inside property. If it +;; does we go backwards to first character that does not have an +;; nxml-inside property (this character must be a <). Then we start +;; parsing forward from the < we have found. +;; +;; The prolog has to be parsed specially, so we also keep track of the +;; end of the prolog in `nxml-prolog-end'. The prolog is reparsed on +;; every change to the prolog. This won't work well if people try to +;; edit huge internal subsets. Hopefully that will be rare. +;; +;; We keep track of the changes by adding to the buffer's +;; after-change-functions hook. Scanning is also done as a +;; prerequisite to fontification by adding to fontification-functions +;; (in the same way as jit-lock). This means that scanning for these +;; constructs had better be quick. Fortunately it is. Firstly, the +;; typical proportion of comments, CDATA sections and processing +;; instructions is small relative to other things. Secondly, to scan +;; we just search for the regexp <[!?]. +;; +;; One problem is unclosed comments, processing instructions and CDATA +;; sections. Suppose, for example, we encounter a <!-- but there's no +;; matching -->. This is not an unexpected situation if the user is +;; creating a comment. It is not helpful to treat the whole of the +;; file starting from the <!-- onwards as a single unclosed comment +;; token. Instead we treat just the <!-- as a piece of not well-formed +;; markup and continue. The problem is that if at some later stage a +;; --> gets added to the buffer after the unclosed <!--, we will need +;; to reparse the buffer starting from the <!--. We need to keep +;; track of these reparse dependencies; they are called dependent +;; regions in the code. + +;;; Code: + +(require 'xmltok) +(require 'nxml-util) + +(defvar nxml-prolog-end nil + "Integer giving position following end of the prolog.") +(make-variable-buffer-local 'nxml-prolog-end) + +(defvar nxml-scan-end nil + "Marker giving position up to which we have scanned. +nxml-scan-end must be >= nxml-prolog-end. Furthermore, nxml-scan-end +must not an inside position in the following sense. A position is +inside if the following character is a part of, but not the first +character of, a CDATA section, comment or processing instruction. +Furthermore all positions >= nxml-prolog-end and < nxml-scan-end that +are inside positions must have a non-nil nxml-inside property whose +value is a symbol specifying what it is inside. Any characters with a +non-nil fontified property must have position < nxml-scan-end and the +correct face. Dependent regions must also be established for any +unclosed constructs starting before nxml-scan-end. +There must be no nxml-inside properties after nxml-scan-end.") +(make-variable-buffer-local 'nxml-scan-end) + +(defsubst nxml-get-inside (pos) + (get-text-property pos 'nxml-inside)) + +(defsubst nxml-clear-inside (start end) + (remove-text-properties start end '(nxml-inside nil))) + +(defsubst nxml-set-inside (start end type) + (put-text-property start end 'nxml-inside type)) + +(defun nxml-inside-end (pos) + "Return the end of the inside region containing POS. +Return nil if the character at POS is not inside." + (if (nxml-get-inside pos) + (or (next-single-property-change pos 'nxml-inside) + (point-max)) + nil)) + +(defun nxml-inside-start (pos) + "Return the start of the inside region containing POS. +Return nil if the character at POS is not inside." + (if (nxml-get-inside pos) + (or (previous-single-property-change (1+ pos) 'nxml-inside) + (point-min)) + nil)) + +;;; Change management + +(defun nxml-scan-after-change (start end) + "Restore `nxml-scan-end' invariants after a change. +The change happened between START and END. +Return position after which lexical state is unchanged. +END must be > nxml-prolog-end." + (if (>= start nxml-scan-end) + nxml-scan-end + (goto-char start) + (nxml-move-outside-backwards) + (setq start (point)) + (let ((inside-remove-start start) + xmltok-errors + xmltok-dependent-regions) + (while (or (when (xmltok-forward-special (min end nxml-scan-end)) + (when (memq xmltok-type + '(comment + cdata-section + processing-instruction)) + (nxml-clear-inside inside-remove-start + (1+ xmltok-start)) + (nxml-set-inside (1+ xmltok-start) + (point) + xmltok-type) + (setq inside-remove-start (point))) + (if (< (point) (min end nxml-scan-end)) + t + (setq end (point)) + nil)) + ;; The end of the change was inside but is now outside. + ;; Imagine something really weird like + ;; <![CDATA[foo <!-- bar ]]> <![CDATA[ stuff --> <!-- ]]> --> + ;; and suppose we deleted "<![CDATA[f" + (let ((inside-end (nxml-inside-end end))) + (when inside-end + (setq end inside-end) + t)))) + (nxml-clear-inside inside-remove-start end) + (nxml-clear-dependent-regions start end) + (nxml-mark-parse-dependent-regions)) + (when (> end nxml-scan-end) + (set-marker nxml-scan-end end)) + end)) + +(defun nxml-scan-prolog () + (goto-char (point-min)) + (let (xmltok-dtd + xmltok-errors + xmltok-dependent-regions) + (setq nxml-prolog-regions (xmltok-forward-prolog)) + (setq nxml-prolog-end (point)) + (nxml-clear-inside (point-min) nxml-prolog-end) + (nxml-clear-dependent-regions (point-min) nxml-prolog-end) + (nxml-mark-parse-dependent-regions)) + (when (< nxml-scan-end nxml-prolog-end) + (set-marker nxml-scan-end nxml-prolog-end))) + + +;;; Dependent regions + +(defun nxml-adjust-start-for-dependent-regions (start end pre-change-length) + (let ((overlays (overlays-in (1- start) start)) + (adjusted-start start)) + (while overlays + (let* ((overlay (car overlays)) + (ostart (overlay-start overlay))) + (when (and (eq (overlay-get overlay 'category) 'nxml-dependent) + (< ostart adjusted-start)) + (let ((funargs (overlay-get overlay 'nxml-funargs))) + (when (apply (car funargs) + (append (list start + end + pre-change-length + ostart + (overlay-end overlay)) + (cdr funargs))) + (setq adjusted-start ostart))))) + (setq overlays (cdr overlays))) + adjusted-start)) + +(defun nxml-mark-parse-dependent-regions () + (while xmltok-dependent-regions + (apply 'nxml-mark-parse-dependent-region + (car xmltok-dependent-regions)) + (setq xmltok-dependent-regions + (cdr xmltok-dependent-regions)))) + +(defun nxml-mark-parse-dependent-region (fun start end &rest args) + (let ((overlay (make-overlay start end nil t t))) + (overlay-put overlay 'category 'nxml-dependent) + (overlay-put overlay 'nxml-funargs (cons fun args)))) + +(put 'nxml-dependent 'evaporate t) + +(defun nxml-clear-dependent-regions (start end) + (let ((overlays (overlays-in start end))) + (while overlays + (let* ((overlay (car overlays)) + (category (overlay-get overlay 'category))) + (when (and (eq category 'nxml-dependent) + (<= start (overlay-start overlay))) + (delete-overlay overlay))) + (setq overlays (cdr overlays))))) + +;;; Random access parsing + +(defun nxml-token-after () + "Return the position after the token containing the char after point. +Sets up the variables `xmltok-type', `xmltok-start', +`xmltok-name-end', `xmltok-name-colon', `xmltok-attributes', +`xmltok-namespace-attributes' in the same was as does +`xmltok-forward'. The prolog will be treated as a single token with +type `prolog'." + (let ((pos (point))) + (if (< pos nxml-prolog-end) + (progn + (setq xmltok-type 'prolog + xmltok-start (point-min)) + (min nxml-prolog-end (point-max))) + (nxml-ensure-scan-up-to-date) + (if (nxml-get-inside pos) + (save-excursion + (nxml-move-outside-backwards) + (xmltok-forward) + (point)) + (save-excursion + (if (or (eq (char-after) ?<) + (search-backward "<" + (max (point-min) nxml-prolog-end) + t)) + (nxml-move-outside-backwards) + (goto-char (if (<= (point-min) nxml-prolog-end) + nxml-prolog-end + (or (nxml-inside-end (point-min)) + (point-min))))) + (while (and (nxml-tokenize-forward) + (<= (point) pos))) + (point)))))) + +(defun nxml-token-before () + "Return the position after the token containing the char before point. +Sets variables like `nxml-token-after'." + (if (/= (point-min) (point)) + (save-excursion + (goto-char (1- (point))) + (nxml-token-after)) + (setq xmltok-start (point)) + (setq xmltok-type nil) + (point))) + +(defun nxml-tokenize-forward () + (let (xmltok-dependent-regions + xmltok-errors) + (when (and (xmltok-forward) + (> (point) nxml-scan-end)) + (cond ((memq xmltok-type '(comment + cdata-section + processing-instruction)) + (nxml-with-unmodifying-text-property-changes + (nxml-set-inside (1+ xmltok-start) (point) xmltok-type))) + (xmltok-dependent-regions + (nxml-mark-parse-dependent-regions))) + (set-marker nxml-scan-end (point))) + xmltok-type)) + +(defun nxml-move-outside-backwards () + "Move point to first character of the containing special thing. +Leave point unmoved if it is not inside anything special." + (let ((start (nxml-inside-start (point)))) + (when start + (goto-char (1- start)) + (when (nxml-get-inside (point)) + (error "Char before inside-start at %s had nxml-inside property %s" + (point) + (nxml-get-inside (point))))))) + +(defun nxml-ensure-scan-up-to-date () + (let ((pos (point))) + (when (< nxml-scan-end pos) + (save-excursion + (goto-char nxml-scan-end) + (let (xmltok-errors + xmltok-dependent-regions) + (while (when (xmltok-forward-special pos) + (when (memq xmltok-type + '(comment + processing-instruction + cdata-section)) + (nxml-with-unmodifying-text-property-changes + (nxml-set-inside (1+ xmltok-start) + (point) + xmltok-type))) + (if (< (point) pos) + t + (setq pos (point)) + nil))) + (nxml-clear-dependent-regions nxml-scan-end pos) + (nxml-mark-parse-dependent-regions) + (set-marker nxml-scan-end pos)))))) + +;;; Element scanning + +(defun nxml-scan-element-forward (from &optional up) + "Scan forward from FROM over a single balanced element. +Point must between tokens. Return the position of the end of the tag +that ends the element. `xmltok-start' will contain the position of the +start of the tag. If UP is non-nil, then scan past end-tag of element +containing point. If no element is found, return nil. If a +well-formedness error prevents scanning, signal an nxml-scan-error. +Point is not moved." + (let ((open-tags (and up t)) + found) + (save-excursion + (goto-char from) + (while (cond ((not (nxml-tokenize-forward)) + (when (consp open-tags) + (nxml-scan-error (cadr open-tags) + "Start-tag has no end-tag")) + nil) + ((eq xmltok-type 'start-tag) + (setq open-tags + (cons (xmltok-start-tag-qname) + (cons xmltok-start + open-tags))) + t) + ((eq xmltok-type 'end-tag) + (cond ((not open-tags) nil) + ((not (consp open-tags)) (setq found (point)) nil) + ((not (string= (car open-tags) + (xmltok-end-tag-qname))) + (nxml-scan-error (+ 2 xmltok-start) + "Mismatched end-tag; \ +expected `%s'" + (car open-tags))) + ((setq open-tags (cddr open-tags)) t) + (t (setq found (point)) nil))) + ((memq xmltok-type '(empty-element + partial-empty-element)) + (if open-tags + t + (setq found (point)) + nil)) + ((eq xmltok-type 'partial-end-tag) + (cond ((not open-tags) nil) + ((not (consp open-tags)) (setq found (point)) nil) + ((setq open-tags (cddr open-tags)) t) + (t (setq found (point)) nil))) + ((eq xmltok-type 'partial-start-tag) + (nxml-scan-error xmltok-start + "Missing `>'")) + (t t)))) + found)) + +(defun nxml-scan-element-backward (from &optional up bound) + "Scan backward from FROM over a single balanced element. +Point must between tokens. Return the position of the end of the tag +that starts the element. `xmltok-start' will contain the position of +the start of the tag. If UP is non-nil, then scan past start-tag of +element containing point. If BOUND is non-nil, then don't scan back +past BOUND. If no element is found, return nil. If a well-formedness +error prevents scanning, signal an nxml-scan-error. Point is not +moved." + (let ((open-tags (and up t)) + token-end found) + (save-excursion + (goto-char from) + (while (cond ((or (< (point) nxml-prolog-end) + (not (search-backward "<" + (max (or bound 0) + nxml-prolog-end) + t))) + (when (and (consp open-tags) (not bound)) + (nxml-scan-error (cadr open-tags) + "End-tag has no start-tag")) + nil) + ((progn + (nxml-move-outside-backwards) + (save-excursion + (nxml-tokenize-forward) + (setq token-end (point))) + (eq xmltok-type 'end-tag)) + (setq open-tags + (cons (xmltok-end-tag-qname) + (cons xmltok-start open-tags))) + t) + ((eq xmltok-type 'start-tag) + (cond ((not open-tags) nil) + ((not (consp open-tags)) + (setq found token-end) + nil) + ((and (car open-tags) + (not (string= (car open-tags) + (xmltok-start-tag-qname)))) + (nxml-scan-error (1+ xmltok-start) + "Mismatched start-tag; \ +expected `%s'" + (car open-tags))) + ((setq open-tags (cddr open-tags)) t) + (t (setq found token-end) nil))) + ((memq xmltok-type '(empty-element + partial-empty-element)) + (if open-tags + t + (setq found token-end) + nil)) + ((eq xmltok-type 'partial-end-tag) + (setq open-tags + (cons nil (cons xmltok-start open-tags))) + t) + ((eq xmltok-type 'partial-start-tag) + ;; if we have only a partial-start-tag + ;; then it's unlikely that there's a matching + ;; end-tag, so it's probably not helpful + ;; to treat it as a complete start-tag + (nxml-scan-error xmltok-start + "Missing `>'")) + (t t)))) + found)) + +(defun nxml-scan-error (&rest args) + (signal 'nxml-scan-error args)) + +(put 'nxml-scan-error + 'error-conditions + '(error nxml-error nxml-scan-error)) + +(put 'nxml-scan-error + 'error-message + "Scan over element that is not well-formed") + +(provide 'nxml-rap) + +;;; nxml-rap.el ends here
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/nxml-uchnm.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,257 @@ +;;; nxml-uchnm.el --- support for Unicode standard cha names in nxml-mode + +;; Copyright (C) 2003 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 2 of +;; the License, or (at your option) any later version. + +;; This program is distributed in the hope that it will be +;; useful, but WITHOUT ANY WARRANTY; without even the implied +;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +;; PURPOSE. See the GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public +;; License along with this program; if not, write to the Free +;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, +;; MA 02111-1307 USA + +;;; Commentary: + +;; This enables the use of the character names defined in the Unicode +;; Standard. The use of the names can be controlled on a per-block +;; basis, so as both to reduce memory usage and loading time, +;; and to make completion work better. +;; The main entry point is `nxml-enable-unicode-char-name-sets'. Typically, +;; this is added to `nxml-mode-hook' (rng-auto.el does this already). +;; To customize the blocks for which names are used + +;;; Code: + +(require 'nxml-mode) + +(defconst nxml-unicode-blocks + '(("Basic Latin" #x0000 #x007F) + ("Latin-1 Supplement" #x0080 #x00FF) + ("Latin Extended-A" #x0100 #x017F) + ("Latin Extended-B" #x0180 #x024F) + ("IPA Extensions" #x0250 #x02AF) + ("Spacing Modifier Letters" #x02B0 #x02FF) + ("Combining Diacritical Marks" #x0300 #x036F) + ("Greek and Coptic" #x0370 #x03FF) + ("Cyrillic" #x0400 #x04FF) + ("Cyrillic Supplementary" #x0500 #x052F) + ("Armenian" #x0530 #x058F) + ("Hebrew" #x0590 #x05FF) + ("Arabic" #x0600 #x06FF) + ("Syriac" #x0700 #x074F) + ("Thaana" #x0780 #x07BF) + ("Devanagari" #x0900 #x097F) + ("Bengali" #x0980 #x09FF) + ("Gurmukhi" #x0A00 #x0A7F) + ("Gujarati" #x0A80 #x0AFF) + ("Oriya" #x0B00 #x0B7F) + ("Tamil" #x0B80 #x0BFF) + ("Telugu" #x0C00 #x0C7F) + ("Kannada" #x0C80 #x0CFF) + ("Malayalam" #x0D00 #x0D7F) + ("Sinhala" #x0D80 #x0DFF) + ("Thai" #x0E00 #x0E7F) + ("Lao" #x0E80 #x0EFF) + ("Tibetan" #x0F00 #x0FFF) + ("Myanmar" #x1000 #x109F) + ("Georgian" #x10A0 #x10FF) + ("Hangul Jamo" #x1100 #x11FF) + ("Ethiopic" #x1200 #x137F) + ("Cherokee" #x13A0 #x13FF) + ("Unified Canadian Aboriginal Syllabics" #x1400 #x167F) + ("Ogham" #x1680 #x169F) + ("Runic" #x16A0 #x16FF) + ("Tagalog" #x1700 #x171F) + ("Hanunoo" #x1720 #x173F) + ("Buhid" #x1740 #x175F) + ("Tagbanwa" #x1760 #x177F) + ("Khmer" #x1780 #x17FF) + ("Mongolian" #x1800 #x18AF) + ("Latin Extended Additional" #x1E00 #x1EFF) + ("Greek Extended" #x1F00 #x1FFF) + ("General Punctuation" #x2000 #x206F) + ("Superscripts and Subscripts" #x2070 #x209F) + ("Currency Symbols" #x20A0 #x20CF) + ("Combining Diacritical Marks for Symbols" #x20D0 #x20FF) + ("Letterlike Symbols" #x2100 #x214F) + ("Number Forms" #x2150 #x218F) + ("Arrows" #x2190 #x21FF) + ("Mathematical Operators" #x2200 #x22FF) + ("Miscellaneous Technical" #x2300 #x23FF) + ("Control Pictures" #x2400 #x243F) + ("Optical Character Recognition" #x2440 #x245F) + ("Enclosed Alphanumerics" #x2460 #x24FF) + ("Box Drawing" #x2500 #x257F) + ("Block Elements" #x2580 #x259F) + ("Geometric Shapes" #x25A0 #x25FF) + ("Miscellaneous Symbols" #x2600 #x26FF) + ("Dingbats" #x2700 #x27BF) + ("Miscellaneous Mathematical Symbols-A" #x27C0 #x27EF) + ("Supplemental Arrows-A" #x27F0 #x27FF) + ("Braille Patterns" #x2800 #x28FF) + ("Supplemental Arrows-B" #x2900 #x297F) + ("Miscellaneous Mathematical Symbols-B" #x2980 #x29FF) + ("Supplemental Mathematical Operators" #x2A00 #x2AFF) + ("CJK Radicals Supplement" #x2E80 #x2EFF) + ("Kangxi Radicals" #x2F00 #x2FDF) + ("Ideographic Description Characters" #x2FF0 #x2FFF) + ("CJK Symbols and Punctuation" #x3000 #x303F) + ("Hiragana" #x3040 #x309F) + ("Katakana" #x30A0 #x30FF) + ("Bopomofo" #x3100 #x312F) + ("Hangul Compatibility Jamo" #x3130 #x318F) + ("Kanbun" #x3190 #x319F) + ("Bopomofo Extended" #x31A0 #x31BF) + ("Katakana Phonetic Extensions" #x31F0 #x31FF) + ("Enclosed CJK Letters and Months" #x3200 #x32FF) + ("CJK Compatibility" #x3300 #x33FF) + ("CJK Unified Ideographs Extension A" #x3400 #x4DBF) + ;;("CJK Unified Ideographs" #x4E00 #x9FFF) + ("Yi Syllables" #xA000 #xA48F) + ("Yi Radicals" #xA490 #xA4CF) + ;;("Hangul Syllables" #xAC00 #xD7AF) + ;;("High Surrogates" #xD800 #xDB7F) + ;;("High Private Use Surrogates" #xDB80 #xDBFF) + ;;("Low Surrogates" #xDC00 #xDFFF) + ;;("Private Use Area" #xE000 #xF8FF) + ;;("CJK Compatibility Ideographs" #xF900 #xFAFF) + ("Alphabetic Presentation Forms" #xFB00 #xFB4F) + ("Arabic Presentation Forms-A" #xFB50 #xFDFF) + ("Variation Selectors" #xFE00 #xFE0F) + ("Combining Half Marks" #xFE20 #xFE2F) + ("CJK Compatibility Forms" #xFE30 #xFE4F) + ("Small Form Variants" #xFE50 #xFE6F) + ("Arabic Presentation Forms-B" #xFE70 #xFEFF) + ("Halfwidth and Fullwidth Forms" #xFF00 #xFFEF) + ("Specials" #xFFF0 #xFFFF) + ("Old Italic" #x10300 #x1032F) + ("Gothic" #x10330 #x1034F) + ("Deseret" #x10400 #x1044F) + ("Byzantine Musical Symbols" #x1D000 #x1D0FF) + ("Musical Symbols" #x1D100 #x1D1FF) + ("Mathematical Alphanumeric Symbols" #x1D400 #x1D7FF) + ;;("CJK Unified Ideographs Extension B" #x20000 #x2A6DF) + ;;("CJK Compatibility Ideographs Supplement" #x2F800 #x2FA1F) + ("Tags" #xE0000 #xE007F) + ;;("Supplementary Private Use Area-A" #xF0000 #xFFFFF) + ;;("Supplementary Private Use Area-B" #x100000 #x10FFFF) + ) + "List of Unicode blocks. +For each block there is a list (NAME FIRST LAST), where +NAME is a string giving the offical name of the block, +FIRST is the first code-point and LAST is the last code-point. +Blocks containing only characters with algorithmic names or no names +are omitted.") + +(defun nxml-unicode-block-char-name-set (name) + "Return a symbol for a block whose offical Unicode name is NAME. +The symbol is generated by downcasing and replacing each space +by a hyphen." + (intern (replace-regexp-in-string " " "-" (downcase name)))) + +;; This is intended to be a superset of the coverage +;; of existing standard entity sets. +(defvar nxml-enabled-unicode-blocks-default + '(basic-latin + latin-1-supplement + latin-extended-a + latin-extended-b + ipa-extensions + spacing-modifier-letters + combining-diacritical-marks + greek-and-coptic + cyrillic + general-punctuation + superscripts-and-subscripts + currency-symbols + combining-diacritical-marks-for-symbols + letterlike-symbols + number-forms + arrows + mathematical-operators + miscellaneous-technical + control-pictures + optical-character-recognition + enclosed-alphanumerics + box-drawing + block-elements + geometric-shapes + miscellaneous-symbols + dingbats + miscellaneous-mathematical-symbols-a + supplemental-arrows-a + supplemental-arrows-b + miscellaneous-mathematical-symbols-b + supplemental-mathematical-operators + cjk-symbols-and-punctuation + alphabetic-presentation-forms + variation-selectors + small-form-variants + specials + mathematical-alphanumeric-symbols) + "Default value for `nxml-enabled-unicode-blocks'.") + +(let ((dir (file-name-directory load-file-name))) + (mapcar (lambda (block) + (let ((sym (nxml-unicode-block-char-name-set (car block)))) + (nxml-autoload-char-name-set + sym + (expand-file-name + (format "char-name/unicode/%05X-%05X" + (nth 1 block) + (nth 2 block)) + dir)))) + nxml-unicode-blocks)) + +(defvar nxml-enable-unicode-char-name-sets-flag nil) + +(defcustom nxml-enabled-unicode-blocks nxml-enabled-unicode-blocks-default + "List of Unicode blocks for which Unicode character names are enabled. +Each block is identified by a symbol derived from the name +of the block by downcasing and replacing each space by a hyphen." + :set (lambda (sym value) + (set-default 'nxml-enabled-unicode-blocks value) + (when nxml-enable-unicode-char-name-sets-flag + (nxml-enable-unicode-char-name-sets-1))) + :type (cons 'set + (mapcar (lambda (block) + `(const :tag ,(format "%s (%04X-%04X)" + (nth 0 block) + (nth 1 block) + (nth 2 block)) + ,(nxml-unicode-block-char-name-set + (nth 0 block)))) + nxml-unicode-blocks))) + +;;;###autoload +(defun nxml-enable-unicode-char-name-sets () + "Enable the use of Unicode standard names for characters. +The Unicode blocks for which names are enabled is controlled by +the variable `nxml-enabled-unicode-blocks'." + (interactive) + (setq nxml-char-name-ignore-case t) + (setq nxml-enable-unicode-char-name-sets-flag t) + (nxml-enable-unicode-char-name-sets-1)) + +(defun nxml-enable-unicode-char-name-sets-1 () + (mapcar (lambda (block) + (nxml-disable-char-name-set + (nxml-unicode-block-char-name-set (car block)))) + nxml-unicode-blocks) + (mapcar (lambda (nameset) + (nxml-enable-char-name-set nameset)) + nxml-enabled-unicode-blocks)) + +(provide 'nxml-uchnm) + +;;; nxml-uchnm.el ends here
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/nxml-util.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,100 @@ +;;; nxml-util.el --- utility functions for nxml-*.el + +;; Copyright (C) 2003 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 2 of +;; the License, or (at your option) any later version. + +;; This program is distributed in the hope that it will be +;; useful, but WITHOUT ANY WARRANTY; without even the implied +;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +;; PURPOSE. See the GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public +;; License along with this program; if not, write to the Free +;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, +;; MA 02111-1307 USA + +;;; Commentary: + +;;; Code: + +(defun nxml-make-namespace (str) + "Return a symbol for the namespace URI STR. +STR must be a string. If STR is the empty string, return nil. +Otherwise, return the symbol whose name is STR prefixed with a colon." + (if (string-equal str "") + nil + (intern (concat ":" str)))) + +(defun nxml-namespace-name (ns) + "Return the namespace URI corresponding to the symbol NS. +This is the inverse of `nxml-make-namespace'." + (and ns (substring (symbol-name ns) 1))) + +(defconst nxml-xml-namespace-uri + (nxml-make-namespace "http://www.w3.org/XML/1998/namespace")) + +(defconst nxml-xmlns-namespace-uri + (nxml-make-namespace "http://www.w3.org/2000/xmlns/")) + +(defmacro nxml-with-unmodifying-text-property-changes (&rest body) + "Evaluate BODY without any text property changes modifying the buffer. +Any text properties changes happen as usual but the changes are not treated as +modifications to the buffer." + (let ((modified (make-symbol "modified"))) + `(let ((,modified (buffer-modified-p)) + (inhibit-read-only t) + (inhibit-modification-hooks t) + (buffer-undo-list t) + (deactivate-mark nil) + ;; Apparently these avoid file locking problems. + (buffer-file-name nil) + (buffer-file-truename nil)) + (unwind-protect + (progn ,@body) + (unless ,modified + (restore-buffer-modified-p nil)))))) + +(put 'nxml-with-unmodifying-text-property-changes 'lisp-indent-function 0) +(def-edebug-spec nxml-with-unmodifying-text-property-changes t) + +(defmacro nxml-with-invisible-motion (&rest body) + "Evaluate body without calling any point motion hooks." + `(let ((inhibit-point-motion-hooks t)) + ,@body)) + +(put 'nxml-with-invisible-motion 'lisp-indent-function 0) +(def-edebug-spec nxml-with-invisible-motion t) + +(defun nxml-display-file-parse-error (err) + (let* ((filename (nth 1 err)) + (buffer (find-file-noselect filename)) + (pos (nth 2 err)) + (message (nth 3 err))) + (pop-to-buffer buffer) + ;; What's the right thing to do if the buffer's modified? + ;; The position in the saved file could be completely different. + (goto-char (if (buffer-modified-p) 1 pos)) + (error "%s" message))) + +(defun nxml-signal-file-parse-error (file pos message &optional error-symbol) + (signal (or error-symbol 'nxml-file-parse-error) + (list file pos message))) + +(put 'nxml-file-parse-error + 'error-conditions + '(error nxml-file-parse-error)) + +(put 'nxml-parse-file-error + 'error-message + "Error parsing file") + +(provide 'nxml-util) + +;;; nxml-util.el ends here
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/rng-auto.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,244 @@ +;;; rng-auto.el --- automatically extracted autoloads for RELAX NG + +;; Copyright (C) 2003 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML, RelaxNG + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 2 of +;; the License, or (at your option) any later version. + +;; This program is distributed in the hope that it will be +;; useful, but WITHOUT ANY WARRANTY; without even the implied +;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +;; PURPOSE. See the GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public +;; License along with this program; if not, write to the Free +;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, +;; MA 02111-1307 USA + +(setq nxml-version "20041004") + +(when (featurep 'mucs) + (error "nxml-mode is not compatible with Mule-UCS")) + +(let* ((dir (file-name-directory load-file-name)) + (schema-dir (file-name-as-directory + (expand-file-name "schemas" data-directory)))) + (unless (member dir load-path) + (setq load-path (cons dir load-path))) + (setq rng-schema-locating-files-default + (list "schemas.xml" + (abbreviate-file-name + (expand-file-name "schemas.xml" schema-dir)))) + (setq rng-schema-locating-file-schema-file + (expand-file-name "locate.rnc" schema-dir))) + +;; Users shouldn't edit this. +;; Instead they should customize `rng-preferred-prefix-alist'. + +(setq rng-preferred-prefix-alist-default + ;; For XHTML and RELAX NG, prefer no prefix + '(("http://www.w3.org/1999/XSL/Transform" . "xsl") + ("http://www.w3.org/1999/02/22-rdf-syntax-ns#" . "rdf"))) + +(add-hook 'nxml-mode-hook 'rng-nxml-mode-init) +(add-hook 'nxml-mode-hook 'nxml-enable-unicode-char-name-sets) + +(setq rng-schema-loader-alist '(("rnc" . rng-c-load-schema))) + +(require 'nxml-enc) +;; Install our own `set-auto-coding-function'. +(nxml-start-auto-coding) + + +;;;### (autoloads (nxml-glyph-display-string) "nxml-glyph" "nxml-glyph.el" +;;;;;; (16278 18099)) +;;; Generated autoloads from nxml-glyph.el + +(autoload (quote nxml-glyph-display-string) "nxml-glyph" "\ +Return a string that can display a glyph for Unicode code-point N. +FACE gives the face that will be used for displaying the string. +Return nil if the face cannot display a glyph for N." nil nil) + +;;;*** + +;;;### (autoloads (nxml-mode) "nxml-mode" "nxml-mode.el" (16702 54517)) +;;; Generated autoloads from nxml-mode.el + +(autoload (quote nxml-mode) "nxml-mode" "\ +Major mode for editing XML. + +Syntax highlighting is performed unless the variable +`nxml-syntax-highlight-flag' is nil. + +\\[nxml-finish-element] finishes the current element by inserting an end-tag. +C-c C-i closes a start-tag with `>' and then inserts a balancing end-tag +leaving point between the start-tag and end-tag. +\\[nxml-balanced-close-start-tag-block] is similar but for block rather than inline elements: +the start-tag, point, and end-tag are all left on separate lines. +If `nxml-slash-auto-complete-flag' is non-nil, then inserting a `</' +automatically inserts the rest of the end-tag. + +\\[nxml-complete] performs completion on the symbol preceding point. + +\\[nxml-dynamic-markup-word] uses the contents of the current buffer +to choose a tag to put around the word preceding point. + +Validation is provided by the related minor-mode `rng-validate-mode'. +This also makes completion schema- and context- sensitive. Element +names, attribute names, attribute values and namespace URIs can all be +completed. By default, `rng-validate-mode' is automatically enabled by +`rng-nxml-mode-init' which is normally added to `nxml-mode-hook'. You +can toggle it using \\[rng-validate-mode]. + +\\[indent-for-tab-command] indents the current line appropriately. +This can be customized using the variable `nxml-child-indent' +and the variable `nxml-attribute-indent'. + +\\[nxml-insert-named-char] inserts a character reference using +the character's name (by default, the Unicode name). \\[universal-argument] \\[nxml-insert-named-char] +inserts the character directly. + +The Emacs commands that normally operate on balanced expressions will +operate on XML markup items. Thus \\[forward-sexp] will move forward +across one markup item; \\[backward-sexp] will move backward across +one markup item; \\[kill-sexp] will kill the following markup item; +\\[mark-sexp] will mark the following markup item. By default, each +tag each treated as a single markup item; to make the complete element +be treated as a single markup item, set the variable +`nxml-sexp-element-flag' to t. For more details, see the function +`nxml-forward-balanced-item'. + +\\[nxml-backward-up-element] and \\[nxml-down-element] move up and +down the element structure. + +Many aspects this mode can be customized using +\\[customize-group] nxml RET." t nil) + +;;;*** + +;;;### (autoloads (nxml-enable-unicode-char-name-sets) "nxml-uchnm" +;;;;;; "nxml-uchnm.el" (16270 38352)) +;;; Generated autoloads from nxml-uchnm.el + +(autoload (quote nxml-enable-unicode-char-name-sets) "nxml-uchnm" "\ +Enable the use of Unicode standard names for characters. +The Unicode blocks for which names are enabled is controlled by +the variable `nxml-enabled-unicode-blocks'." t nil) + +;;;*** + +;;;### (autoloads (rng-c-load-schema) "rng-cmpct" "rng-cmpct.el" +;;;;;; (16280 36493)) +;;; Generated autoloads from rng-cmpct.el + +(autoload (quote rng-c-load-schema) "rng-cmpct" "\ +Load a schema in RELAX NG compact syntax from FILENAME. +Return a pattern." nil nil) + +;;;*** + +;;;### (autoloads (rng-write-version rng-format-manual rng-byte-compile-load +;;;;;; rng-update-autoloads) "rng-maint" "rng-maint.el" (16279 23645)) +;;; Generated autoloads from rng-maint.el + +(autoload (quote rng-update-autoloads) "rng-maint" "\ +Update the autoloads in rng-auto.el." t nil) + +(autoload (quote rng-byte-compile-load) "rng-maint" "\ +Byte-compile and load all of the RELAX NG library in an appropriate order." t nil) + +(autoload (quote rng-format-manual) "rng-maint" "\ +Create manual.texi from manual.xml." t nil) + +(autoload (quote rng-write-version) "rng-maint" nil nil nil) + +;;;*** + +;;;### (autoloads (rng-nxml-mode-init) "rng-nxml" "rng-nxml.el" (16294 +;;;;;; 8571)) +;;; Generated autoloads from rng-nxml.el + +(autoload (quote rng-nxml-mode-init) "rng-nxml" "\ +Initialize `nxml-mode' to take advantage of `rng-validate-mode'. +This is typically called from `nxml-mode-hook'. +Validation will be enabled if `rng-nxml-auto-validate-flag' is non-nil." t nil) + +;;;*** + +;;;### (autoloads (rng-validate-mode) "rng-valid" "rng-valid.el" +;;;;;; (16664 9855)) +;;; Generated autoloads from rng-valid.el + +(autoload (quote rng-validate-mode) "rng-valid" "\ +Minor mode performing continual validation against a RELAX NG schema. + +Checks whether the buffer is a well-formed XML 1.0 document, +conforming to the XML Namespaces Recommendation and valid against a +RELAX NG schema. The mode-line indicates whether it is or not. Any +parts of the buffer that cause it not to be are considered errors and +are highlighted with `rng-error-face'. A description of each error is +available as a tooltip. \\[rng-next-error] goes to the next error +after point. Clicking mouse-1 on the word `Invalid' in the mode-line +goes to the first error in the buffer. If the buffer changes, then it +will be automatically rechecked when Emacs becomes idle; the +rechecking will be paused whenever there is input pending.. + +By default, uses a vacuous schema that allows any well-formed XML +document. A schema can be specified explictly using +\\[rng-set-schema-file-and-validate], or implicitly based on the buffer's +file name or on the root element name. In each case the schema must +be a RELAX NG schema using the compact schema (such schemas +conventionally have a suffix of `.rnc'). The variable +`rng-schema-locating-files' specifies files containing rules +to use for finding the schema." t nil) + +;;;*** + +;;;### (autoloads (rng-xsd-compile) "rng-xsd" "rng-xsd.el" (16216 +;;;;;; 26672)) +;;; Generated autoloads from rng-xsd.el + +(put (quote http://www\.w3\.org/2001/XMLSchema-datatypes) (quote rng-dt-compile) (quote rng-xsd-compile)) + +(autoload (quote rng-xsd-compile) "rng-xsd" "\ +Provides W3C XML Schema as a RELAX NG datatypes library. NAME is a +symbol giving the local name of the datatype. PARAMS is a list of +pairs (PARAM-NAME . PARAM-VALUE) where PARAM-NAME is a symbol giving +the name of the parameter and PARAM-VALUE is a string giving its +value. If NAME or PARAMS are invalid, it calls rng-dt-error passing +it arguments in the same style as format; the value from rng-dt-error +will be returned. Otherwise, it returns a list. The first member of +the list is t if any string is a legal value for the datatype and nil +otherwise. The second argument is a symbol; this symbol will be +called as a function passing it a string followed by the remaining +members of the list. The function must return an object representing +the value of the datatype that was represented by the string, or nil +if the string is not a representation of any value. The object +returned can be any convenient non-nil value, provided that, if two +strings represent the same value, the returned objects must be equal." nil nil) + +;;;*** + +;;;### (autoloads (xmltok-get-declared-encoding-position) "xmltok" +;;;;;; "xmltok.el" (16664 8418)) +;;; Generated autoloads from xmltok.el + +(autoload (quote xmltok-get-declared-encoding-position) "xmltok" "\ +Return the position of the encoding in the XML declaration at point. +If there is a well-formed XML declaration starting at point and it +contains an encoding declaration, then return (START . END) +where START and END are the positions of the start and the end +of the encoding name; if there is no encoding declaration return +the position where and encoding declaration could be inserted. +If there is XML that is not well-formed that looks like an XML declaration, +return nil. Otherwise, return t. +If LIMIT is non-nil, then do not consider characters beyond LIMIT." nil nil) + +;;;*** + +;;; rng-auto.el ends here
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/rng-cmpct.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,937 @@ +;;; rng-cmpct.el --- parsing of RELAX NG Compact Syntax schemas + +;; Copyright (C) 2003 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML, RelaxNG + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 2 of +;; the License, or (at your option) any later version. + +;; This program is distributed in the hope that it will be +;; useful, but WITHOUT ANY WARRANTY; without even the implied +;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +;; PURPOSE. See the GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public +;; License along with this program; if not, write to the Free +;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, +;; MA 02111-1307 USA + +;;; Commentary: + +;; This parses a RELAX NG Compact Syntax schema into the form +;; specified in rng-pttrn.el. +;; +;; RELAX NG Compact Syntax is specified by +;; http://relaxng.org/compact.html +;; +;; This file uses the prefix "rng-c-". + +;;; Code: + +(require 'nxml-util) +(require 'rng-util) +(require 'rng-uri) +(require 'rng-pttrn) + +;;;###autoload +(defun rng-c-load-schema (filename) + "Load a schema in RELAX NG compact syntax from FILENAME. +Return a pattern." + (rng-c-parse-file filename)) + +;;; Error handling + +(put 'rng-c-incorrect-schema + 'error-conditions + '(error rng-error nxml-file-parse-error rng-c-incorrect-schema)) + +(put 'rng-c-incorrect-schema + 'error-message + "Incorrect schema") + +(defun rng-c-signal-incorrect-schema (filename pos message) + (nxml-signal-file-parse-error filename + pos + message + 'rng-c-incorrect-schema)) + +;;; Lexing + +(defconst rng-c-keywords + '("attribute" + "default" + "datatypes" + "div" + "element" + "empty" + "external" + "grammar" + "include" + "inherit" + "list" + "mixed" + "namespace" + "notAllowed" + "parent" + "start" + "string" + "text" + "token") + "List of strings that are keywords in the compact syntax.") + +(defconst rng-c-anchored-keyword-re + (concat "\\`\\(" (regexp-opt rng-c-keywords) "\\)\\'") + "Regular expression to match a keyword in the compact syntax.") + +(defvar rng-c-syntax-table nil + "Syntax table for parsing the compact syntax.") + +(if rng-c-syntax-table + () + (setq rng-c-syntax-table (make-syntax-table)) + (modify-syntax-entry ?# "<" rng-c-syntax-table) + (modify-syntax-entry ?\n ">" rng-c-syntax-table) + (modify-syntax-entry ?- "w" rng-c-syntax-table) + (modify-syntax-entry ?. "w" rng-c-syntax-table) + (modify-syntax-entry ?_ "w" rng-c-syntax-table) + (modify-syntax-entry ?: "_" rng-c-syntax-table)) + +(defconst rng-c-literal-1-re + "'\\(''\\([^']\\|'[^']\\|''[^']\\)*''\\|[^'\n]*\\)'" + "Regular expression to match a single-quoted literal.") + +(defconst rng-c-literal-2-re + (replace-regexp-in-string "'" "\"" rng-c-literal-1-re) + "Regular expression to match a double-quoted literal.") + +(defconst rng-c-ncname-re "\\w+") + +(defconst rng-c-anchored-ncname-re + (concat "\\`" rng-c-ncname-re "\\'")) + +(defconst rng-c-token-re + (concat "[&|]=" "\\|" + "[][()|&,*+?{}~=-]" "\\|" + rng-c-literal-1-re "\\|" + rng-c-literal-2-re "\\|" + rng-c-ncname-re "\\(:\\(\\*\\|" rng-c-ncname-re "\\)\\)?" "\\|" + "\\\\" rng-c-ncname-re "\\|" + ">>") + "Regular expression to match a token in the compact syntax.") + +(defun rng-c-init-buffer () + (setq case-fold-search nil) ; automatically becomes buffer-local when set + (set-buffer-multibyte t) + (set-syntax-table rng-c-syntax-table)) + +(defvar rng-c-current-token nil) +(make-variable-buffer-local 'rng-c-current-token) + +(defun rng-c-advance () + (cond ((looking-at rng-c-token-re) + (setq rng-c-current-token (match-string 0)) + (goto-char (match-end 0)) + (forward-comment (point-max))) + ((= (point) (point-max)) + (setq rng-c-current-token "")) + (t (rng-c-error "Invalid token")))) + +(defconst rng-c-anchored-datatype-name-re + (concat "\\`" rng-c-ncname-re ":" rng-c-ncname-re "\\'")) + +(defsubst rng-c-current-token-keyword-p () + (string-match rng-c-anchored-keyword-re rng-c-current-token)) + +(defsubst rng-c-current-token-prefixed-name-p () + (string-match rng-c-anchored-datatype-name-re rng-c-current-token)) + +(defsubst rng-c-current-token-literal-p () + (string-match "\\`['\"]" rng-c-current-token)) + +(defsubst rng-c-current-token-quoted-identifier-p () + (string-match "\\`\\\\" rng-c-current-token)) + +(defsubst rng-c-current-token-ncname-p () + (string-match rng-c-anchored-ncname-re rng-c-current-token)) + +(defsubst rng-c-current-token-ns-name-p () + (let ((len (length rng-c-current-token))) + (and (> len 0) + (= (aref rng-c-current-token (- len 1)) ?*)))) + +;;; Namespaces + +(defvar rng-c-inherit-namespace nil) + +(defvar rng-c-default-namespace nil) + +(defvar rng-c-default-namespace-declared nil) + +(defvar rng-c-namespace-decls nil + "Alist of namespace declarations.") + +(defconst rng-c-no-namespace nil) + +(defun rng-c-declare-standard-namespaces () + (setq rng-c-namespace-decls + (cons (cons "xml" nxml-xml-namespace-uri) + rng-c-namespace-decls)) + (when (and (not rng-c-default-namespace-declared) + rng-c-inherit-namespace) + (setq rng-c-default-namespace rng-c-inherit-namespace))) + +(defun rng-c-expand-name (prefixed-name) + (let ((i (string-match ":" prefixed-name))) + (rng-make-name (rng-c-lookup-prefix (substring prefixed-name + 0 + i)) + (substring prefixed-name (+ i 1))))) + +(defun rng-c-lookup-prefix (prefix) + (let ((binding (assoc prefix rng-c-namespace-decls))) + (or binding (rng-c-error "Undefined prefix %s" prefix)) + (cdr binding))) + +(defun rng-c-unqualified-namespace (attribute) + (if attribute + rng-c-no-namespace + rng-c-default-namespace)) + +(defun rng-c-make-context () + (cons rng-c-default-namespace rng-c-namespace-decls)) + +;;; Datatypes + +(defconst rng-string-datatype + (rng-make-datatype rng-builtin-datatypes-uri "string")) + +(defconst rng-token-datatype + (rng-make-datatype rng-builtin-datatypes-uri "token")) + +(defvar rng-c-datatype-decls nil + "Alist of datatype declarations. +Contains a list of pairs (PREFIX . URI) where PREFIX is a string +and URI is a symbol.") + +(defun rng-c-declare-standard-datatypes () + (setq rng-c-datatype-decls + (cons (cons "xsd" rng-xsd-datatypes-uri) + rng-c-datatype-decls))) + +(defun rng-c-lookup-datatype-prefix (prefix) + (let ((binding (assoc prefix rng-c-datatype-decls))) + (or binding (rng-c-error "Undefined prefix %s" prefix)) + (cdr binding))) + +(defun rng-c-expand-datatype (prefixed-name) + (let ((i (string-match ":" prefixed-name))) + (rng-make-datatype + (rng-c-lookup-datatype-prefix (substring prefixed-name 0 i)) + (substring prefixed-name (+ i 1))))) + +;;; Grammars + +(defvar rng-c-current-grammar nil) +(defvar rng-c-parent-grammar nil) + +(defun rng-c-make-grammar () + (make-hash-table :test 'equal)) + +(defconst rng-c-about-override-slot 0) +(defconst rng-c-about-combine-slot 1) + +(defun rng-c-lookup-create (name grammar) + "Return a def object for NAME. A def object is a pair +\(ABOUT . REF) where REF is returned by `rng-make-ref'. ABOUT is a +two-element vector [OVERRIDE COMBINE]. COMBINE is either nil, choice +or interleave. OVERRIDE is either nil, require or t." + (let ((def (gethash name grammar))) + (if def + def + (progn + (setq def (cons (vector nil nil) (rng-make-ref name))) + (puthash name def grammar) + def)))) + +(defun rng-c-make-ref (name) + (or rng-c-current-grammar + (rng-c-error "Reference not in a grammar")) + (cdr (rng-c-lookup-create name rng-c-current-grammar))) + +(defun rng-c-make-parent-ref (name) + (or rng-c-parent-grammar + (rng-c-error "Reference to non-existent parent grammar")) + (cdr (rng-c-lookup-create name rng-c-parent-grammar))) + +(defvar rng-c-overrides nil + "Contains a list of (NAME . DEF) pairs.") + +(defun rng-c-merge-combine (def combine name) + (let* ((about (car def)) + (current-combine (aref about rng-c-about-combine-slot))) + (if combine + (if current-combine + (or (eq combine current-combine) + (rng-c-error "Inconsistent combine for %s" name)) + (aset about rng-c-about-combine-slot combine)) + current-combine))) + +(defun rng-c-prepare-define (name combine in-include) + (let* ((def (rng-c-lookup-create name rng-c-current-grammar)) + (about (car def)) + (overridden (aref about rng-c-about-override-slot))) + (and in-include + (setq rng-c-overrides (cons (cons name def) rng-c-overrides))) + (cond (overridden (and (eq overridden 'require) + (aset about rng-c-about-override-slot t)) + nil) + (t (setq combine (rng-c-merge-combine def combine name)) + (and (rng-ref-get (cdr def)) + (not combine) + (rng-c-error "Duplicate definition of %s" name)) + def)))) + +(defun rng-c-start-include (overrides) + (mapcar (lambda (name-def) + (let* ((def (cdr name-def)) + (about (car def)) + (save (aref about rng-c-about-override-slot))) + (aset about rng-c-about-override-slot 'require) + (cons save name-def))) + overrides)) + +(defun rng-c-end-include (overrides) + (mapcar (lambda (o) + (let* ((saved (car o)) + (name-def (cdr o)) + (name (car name-def)) + (def (cdr name-def)) + (about (car def))) + (and (eq (aref about rng-c-about-override-slot) 'require) + (rng-c-error "Definition of %s in include did not override definition in included file" name)) + (aset about rng-c-about-override-slot saved))) + overrides)) + +(defun rng-c-define (def value) + (and def + (let ((current-value (rng-ref-get (cdr def)))) + (rng-ref-set (cdr def) + (if current-value + (if (eq (aref (car def) rng-c-about-combine-slot) + 'choice) + (rng-make-choice (list current-value value)) + (rng-make-interleave (list current-value value))) + value))))) + +(defun rng-c-finish-grammar () + (maphash (lambda (key def) + (or (rng-ref-get (cdr def)) + (rng-c-error "Reference to undefined pattern %s" key))) + rng-c-current-grammar) + (rng-ref-get (cdr (or (gethash 'start rng-c-current-grammar) + (rng-c-error "No definition of start"))))) + +;;; Parsing + +(defvar rng-c-escape-positions nil) +(make-variable-buffer-local 'rng-c-escape-positions) + +(defvar rng-c-file-name nil) +(make-variable-buffer-local 'rng-c-file-name) + +(defvar rng-c-file-index nil) + +(defun rng-c-parse-file (filename &optional context) + (save-excursion + (set-buffer (get-buffer-create (rng-c-buffer-name context))) + (erase-buffer) + (rng-c-init-buffer) + (setq rng-c-file-name + (car (insert-file-contents filename))) + (setq rng-c-escape-positions nil) + (rng-c-process-escapes) + (rng-c-parse-top-level context))) + +(defun rng-c-buffer-name (context) + (concat " *RNC Input" + (if context + (concat "<" + (number-to-string (setq rng-c-file-index + (1+ rng-c-file-index))) + ">*") + (setq rng-c-file-index 1) + "*"))) + +(defun rng-c-process-escapes () + ;; Check for any nuls, since we will use nul chars + ;; for internal purposes. + (let ((pos (search-forward "\C-@" nil t))) + (and pos + (rng-c-error "Nul character found (binary file?)"))) + (let ((offset 0)) + (while (re-search-forward "\\\\x+{\\([0-9a-fA-F]+\\)}" + (point-max) + t) + (let* ((ch (decode-char 'ucs (string-to-number (match-string 1) 16)))) + (if (and ch (> ch 0)) + (let ((begin (match-beginning 0)) + (end (match-end 0))) + (delete-region begin end) + ;; Represent an escaped newline by nul, so + ;; that we can distinguish it from a literal newline. + ;; We will translate it back into a real newline later. + (insert (if (eq ch ?\n) 0 ch)) + (setq offset (+ offset (- end begin 1))) + (setq rng-c-escape-positions + (cons (cons (point) offset) + rng-c-escape-positions))) + (rng-c-error "Invalid character escape"))))) + (goto-char 1)) + +(defun rng-c-translate-position (pos) + (let ((tem rng-c-escape-positions)) + (while (and tem + (> (caar tem) pos)) + (setq tem (cdr tem))) + (if tem + (+ pos (cdar tem)) + pos))) + +(defun rng-c-error (&rest args) + (rng-c-signal-incorrect-schema rng-c-file-name + (rng-c-translate-position (point)) + (apply 'format args))) + +(defun rng-c-parse-top-level (context) + (let ((rng-c-namespace-decls nil) + (rng-c-default-namespace nil) + (rng-c-datatype-decls nil)) + (goto-char (point-min)) + (forward-comment (point-max)) + (rng-c-advance) + (rng-c-parse-decls) + (let ((p (if (eq context 'include) + (if (rng-c-implicit-grammar-p) + (rng-c-parse-grammar-body "") + (rng-c-parse-included-grammar)) + (if (rng-c-implicit-grammar-p) + (rng-c-parse-implicit-grammar) + (rng-c-parse-pattern))))) + (or (string-equal rng-c-current-token "") + (rng-c-error "Unexpected characters after pattern")) + p))) + +(defun rng-c-parse-included-grammar () + (or (string-equal rng-c-current-token "grammar") + (rng-c-error "Included schema is not a grammar")) + (rng-c-advance) + (rng-c-expect "{") + (rng-c-parse-grammar-body "}")) + +(defun rng-c-implicit-grammar-p () + (or (and (or (rng-c-current-token-prefixed-name-p) + (rng-c-current-token-quoted-identifier-p) + (and (rng-c-current-token-ncname-p) + (not (rng-c-current-token-keyword-p)))) + (looking-at "\\[")) + (and (string-equal rng-c-current-token "[") + (rng-c-parse-lead-annotation) + nil) + (member rng-c-current-token '("div" "include" "")) + (looking-at "[|&]?="))) + +(defun rng-c-parse-decls () + (setq rng-c-default-namespace-declared nil) + (while (progn + (let ((binding + (assoc rng-c-current-token + '(("namespace" . rng-c-parse-namespace) + ("datatypes" . rng-c-parse-datatypes) + ("default" . rng-c-parse-default))))) + (if binding + (progn + (rng-c-advance) + (funcall (cdr binding)) + t) + nil)))) + (rng-c-declare-standard-datatypes) + (rng-c-declare-standard-namespaces)) + +(defun rng-c-parse-datatypes () + (let ((prefix (rng-c-parse-identifier-or-keyword))) + (or (not (assoc prefix rng-c-datatype-decls)) + (rng-c-error "Duplicate datatypes declaration for prefix %s" prefix)) + (rng-c-expect "=") + (setq rng-c-datatype-decls + (cons (cons prefix + (rng-make-datatypes-uri (rng-c-parse-literal))) + rng-c-datatype-decls)))) + +(defun rng-c-parse-namespace () + (rng-c-declare-namespace nil + (rng-c-parse-identifier-or-keyword))) + +(defun rng-c-parse-default () + (rng-c-expect "namespace") + (rng-c-declare-namespace t + (if (string-equal rng-c-current-token "=") + nil + (rng-c-parse-identifier-or-keyword)))) + +(defun rng-c-declare-namespace (declare-default prefix) + (rng-c-expect "=") + (let ((ns (cond ((string-equal rng-c-current-token "inherit") + (rng-c-advance) + rng-c-inherit-namespace) + (t + (nxml-make-namespace (rng-c-parse-literal)))))) + (and prefix + (or (not (assoc prefix rng-c-namespace-decls)) + (rng-c-error "Duplicate namespace declaration for prefix %s" + prefix)) + (setq rng-c-namespace-decls + (cons (cons prefix ns) rng-c-namespace-decls))) + (and declare-default + (or (not rng-c-default-namespace-declared) + (rng-c-error "Duplicate default namespace declaration")) + (setq rng-c-default-namespace-declared t) + (setq rng-c-default-namespace ns)))) + +(defun rng-c-parse-implicit-grammar () + (let* ((rng-c-parent-grammar rng-c-current-grammar) + (rng-c-current-grammar (rng-c-make-grammar))) + (rng-c-parse-grammar-body "") + (rng-c-finish-grammar))) + +(defun rng-c-parse-grammar-body (close-token &optional in-include) + (while (not (string-equal rng-c-current-token close-token)) + (cond ((rng-c-current-token-keyword-p) + (let ((kw (intern rng-c-current-token))) + (cond ((eq kw 'start) + (rng-c-parse-define 'start in-include)) + ((eq kw 'div) + (rng-c-advance) + (rng-c-parse-div in-include)) + ((eq kw 'include) + (and in-include + (rng-c-error "Nested include")) + (rng-c-advance) + (rng-c-parse-include)) + (t (rng-c-error "Invalid grammar keyword"))))) + ((rng-c-current-token-ncname-p) + (if (looking-at "\\[") + (rng-c-parse-annotation-element) + (rng-c-parse-define rng-c-current-token + in-include))) + ((rng-c-current-token-quoted-identifier-p) + (if (looking-at "\\[") + (rng-c-parse-annotation-element) + (rng-c-parse-define (substring rng-c-current-token 1) + in-include))) + ((rng-c-current-token-prefixed-name-p) + (rng-c-parse-annotation-element)) + ((string-equal rng-c-current-token "[") + (rng-c-parse-lead-annotation) + (and (string-equal rng-c-current-token close-token) + (rng-c-error "Missing annotation subject")) + (and (looking-at "\\[") + (rng-c-error "Leading annotation applied to annotation"))) + (t (rng-c-error "Invalid grammar content")))) + (or (string-equal rng-c-current-token "") + (rng-c-advance))) + +(defun rng-c-parse-div (in-include) + (rng-c-expect "{") + (rng-c-parse-grammar-body "}" in-include)) + +(defun rng-c-parse-include () + (let* ((filename (rng-c-expand-file (rng-c-parse-literal))) + (rng-c-inherit-namespace (rng-c-parse-opt-inherit)) + overrides) + (cond ((string-equal rng-c-current-token "{") + (rng-c-advance) + (let ((rng-c-overrides nil)) + (rng-c-parse-grammar-body "}" t) + (setq overrides rng-c-overrides)) + (setq overrides (rng-c-start-include overrides)) + (rng-c-parse-file filename 'include) + (rng-c-end-include overrides)) + (t (rng-c-parse-file filename 'include))))) + +(defun rng-c-parse-define (name in-include) + (rng-c-advance) + (let ((assign (assoc rng-c-current-token + '(("=" . nil) + ("|=" . choice) + ("&=" . interleave))))) + (or assign + (rng-c-error "Expected assignment operator")) + (rng-c-advance) + (let ((ref (rng-c-prepare-define name (cdr assign) in-include))) + (rng-c-define ref (rng-c-parse-pattern))))) + +(defvar rng-c-had-except nil) + +(defun rng-c-parse-pattern () + (let* ((rng-c-had-except nil) + (p (rng-c-parse-repeated)) + (op (assoc rng-c-current-token + '(("|" . rng-make-choice) + ("," . rng-make-group) + ("&" . rng-make-interleave))))) + (if op + (if rng-c-had-except + (rng-c-error "Parentheses required around pattern using -") + (let* ((patterns (cons p nil)) + (tail patterns) + (connector rng-c-current-token)) + (while (progn + (rng-c-advance) + (let ((newcdr (cons (rng-c-parse-repeated) nil))) + (setcdr tail newcdr) + (setq tail newcdr)) + (string-equal rng-c-current-token connector))) + (funcall (cdr op) patterns))) + p))) + +(defun rng-c-parse-repeated () + (let ((p (rng-c-parse-follow-annotations + (rng-c-parse-primary))) + (op (assoc rng-c-current-token + '(("*" . rng-make-zero-or-more) + ("+" . rng-make-one-or-more) + ("?" . rng-make-optional))))) + (if op + (if rng-c-had-except + (rng-c-error "Parentheses required around pattern using -") + (rng-c-parse-follow-annotations + (progn + (rng-c-advance) + (funcall (cdr op) p)))) + p))) + +(defun rng-c-parse-primary () + "Parse a primary expression. The current token must be the first +token of the expression. After parsing the current token should be +token following the primary expression." + (cond ((rng-c-current-token-keyword-p) + (let ((parse-function (get (intern rng-c-current-token) + 'rng-c-pattern))) + (or parse-function + (rng-c-error "Keyword %s does not introduce a pattern" + rng-c-current-token)) + (rng-c-advance) + (funcall parse-function))) + ((rng-c-current-token-ncname-p) + (rng-c-advance-with (rng-c-make-ref rng-c-current-token))) + ((string-equal rng-c-current-token "(") + (rng-c-advance) + (let ((p (rng-c-parse-pattern))) + (rng-c-expect ")") + p)) + ((rng-c-current-token-prefixed-name-p) + (let ((name (rng-c-expand-datatype rng-c-current-token))) + (rng-c-advance) + (rng-c-parse-data name))) + ((rng-c-current-token-literal-p) + (rng-make-value rng-token-datatype (rng-c-parse-literal) nil)) + ((rng-c-current-token-quoted-identifier-p) + (rng-c-advance-with + (rng-c-make-ref (substring rng-c-current-token 1)))) + ((string-equal rng-c-current-token "[") + (rng-c-parse-lead-annotation) + (rng-c-parse-primary)) + (t (rng-c-error "Invalid pattern")))) + +(defun rng-c-parse-parent () + (and (rng-c-current-token-keyword-p) + (rng-c-error "Keyword following parent was not quoted" + rng-c-current-token)) + (rng-c-make-parent-ref (rng-c-parse-identifier-or-keyword))) + +(defun rng-c-parse-literal () + (rng-c-fix-escaped-newlines + (apply 'concat (rng-c-parse-literal-segments)))) + +(defun rng-c-parse-literal-segments () + (let ((str (rng-c-parse-literal-segment))) + (cons str + (cond ((string-equal rng-c-current-token "~") + (rng-c-advance) + (rng-c-parse-literal-segments)) + (t nil))))) + +(defun rng-c-parse-literal-segment () + (or (rng-c-current-token-literal-p) + (rng-c-error "Expected a literal")) + (rng-c-advance-with + (let ((n (if (and (>= (length rng-c-current-token) 6) + (eq (aref rng-c-current-token 0) + (aref rng-c-current-token 1))) + 3 + 1))) + (substring rng-c-current-token n (- n))))) + +(defun rng-c-fix-escaped-newlines (str) + (let ((pos 0)) + (while (progn + (let ((n (string-match "\C-@" str pos))) + (and n + (aset str n ?\n) + (setq pos (1+ n))))))) + str) + +(defun rng-c-parse-identifier-or-keyword () + (cond ((rng-c-current-token-ncname-p) + (rng-c-advance-with rng-c-current-token)) + ((rng-c-current-token-quoted-identifier-p) + (rng-c-advance-with (substring rng-c-current-token 1))) + (t (rng-c-error "Expected identifier or keyword")))) + +(put 'string 'rng-c-pattern 'rng-c-parse-string) +(put 'token 'rng-c-pattern 'rng-c-parse-token) +(put 'element 'rng-c-pattern 'rng-c-parse-element) +(put 'attribute 'rng-c-pattern 'rng-c-parse-attribute) +(put 'list 'rng-c-pattern 'rng-c-parse-list) +(put 'mixed 'rng-c-pattern 'rng-c-parse-mixed) +(put 'text 'rng-c-pattern 'rng-c-parse-text) +(put 'empty 'rng-c-pattern 'rng-c-parse-empty) +(put 'notAllowed 'rng-c-pattern 'rng-c-parse-not-allowed) +(put 'grammar 'rng-c-pattern 'rng-c-parse-grammar) +(put 'parent 'rng-c-pattern 'rng-c-parse-parent) +(put 'external 'rng-c-pattern 'rng-c-parse-external) + +(defun rng-c-parse-element () + (let ((name-class (rng-c-parse-name-class nil))) + (rng-c-expect "{") + (let ((pattern (rng-c-parse-pattern))) + (rng-c-expect "}") + (rng-make-element name-class pattern)))) + +(defun rng-c-parse-attribute () + (let ((name-class (rng-c-parse-name-class 'attribute))) + (rng-c-expect "{") + (let ((pattern (rng-c-parse-pattern))) + (rng-c-expect "}") + (rng-make-attribute name-class pattern)))) + +(defun rng-c-parse-name-class (attribute) + (let* ((rng-c-had-except nil) + (name-class + (rng-c-parse-follow-annotations + (rng-c-parse-primary-name-class attribute)))) + (if (string-equal rng-c-current-token "|") + (let* ((name-classes (cons name-class nil)) + (tail name-classes)) + (or (not rng-c-had-except) + (rng-c-error "Parentheses required around name-class using - operator")) + (while (progn + (rng-c-advance) + (let ((newcdr + (cons (rng-c-parse-follow-annotations + (rng-c-parse-primary-name-class attribute)) + nil))) + (setcdr tail newcdr) + (setq tail newcdr)) + (string-equal rng-c-current-token "|"))) + (rng-make-choice-name-class name-classes)) + name-class))) + +(defun rng-c-parse-primary-name-class (attribute) + (cond ((rng-c-current-token-ncname-p) + (rng-c-advance-with + (rng-make-name-name-class + (rng-make-name (rng-c-unqualified-namespace attribute) + rng-c-current-token)))) + ((rng-c-current-token-prefixed-name-p) + (rng-c-advance-with + (rng-make-name-name-class + (rng-c-expand-name rng-c-current-token)))) + ((string-equal rng-c-current-token "*") + (let ((except (rng-c-parse-opt-except-name-class attribute))) + (if except + (rng-make-any-name-except-name-class except) + (rng-make-any-name-name-class)))) + ((rng-c-current-token-ns-name-p) + (let* ((ns + (rng-c-lookup-prefix (substring rng-c-current-token + 0 + -2))) + (except (rng-c-parse-opt-except-name-class attribute))) + (if except + (rng-make-ns-name-except-name-class ns except) + (rng-make-ns-name-name-class ns)))) + ((string-equal rng-c-current-token "(") + (rng-c-advance) + (let ((name-class (rng-c-parse-name-class attribute))) + (rng-c-expect ")") + name-class)) + ((rng-c-current-token-quoted-identifier-p) + (rng-c-advance-with + (rng-make-name-name-class + (rng-make-name (rng-c-unqualified-namespace attribute) + (substring rng-c-current-token 1))))) + ((string-equal rng-c-current-token "[") + (rng-c-parse-lead-annotation) + (rng-c-parse-primary-name-class attribute)) + (t (rng-c-error "Bad name class")))) + +(defun rng-c-parse-opt-except-name-class (attribute) + (rng-c-advance) + (and (string-equal rng-c-current-token "-") + (or (not rng-c-had-except) + (rng-c-error "Parentheses required around name-class using - operator")) + (setq rng-c-had-except t) + (progn + (rng-c-advance) + (rng-c-parse-primary-name-class attribute)))) + +(defun rng-c-parse-mixed () + (rng-c-expect "{") + (let ((pattern (rng-make-mixed (rng-c-parse-pattern)))) + (rng-c-expect "}") + pattern)) + +(defun rng-c-parse-list () + (rng-c-expect "{") + (let ((pattern (rng-make-list (rng-c-parse-pattern)))) + (rng-c-expect "}") + pattern)) + +(defun rng-c-parse-text () + (rng-make-text)) + +(defun rng-c-parse-empty () + (rng-make-empty)) + +(defun rng-c-parse-not-allowed () + (rng-make-not-allowed)) + +(defun rng-c-parse-string () + (rng-c-parse-data rng-string-datatype)) + +(defun rng-c-parse-token () + (rng-c-parse-data rng-token-datatype)) + +(defun rng-c-parse-data (name) + (if (rng-c-current-token-literal-p) + (rng-make-value name + (rng-c-parse-literal) + (and (car name) + (rng-c-make-context))) + (let ((params (rng-c-parse-optional-params))) + (if (string-equal rng-c-current-token "-") + (progn + (if rng-c-had-except + (rng-c-error "Parentheses required around pattern using -") + (setq rng-c-had-except t)) + (rng-c-advance) + (rng-make-data-except name + params + (rng-c-parse-primary))) + (rng-make-data name params))))) + +(defun rng-c-parse-optional-params () + (and (string-equal rng-c-current-token "{") + (let* ((head (cons nil nil)) + (tail head)) + (rng-c-advance) + (while (not (string-equal rng-c-current-token "}")) + (and (string-equal rng-c-current-token "[") + (rng-c-parse-lead-annotation)) + (let ((name (rng-c-parse-identifier-or-keyword))) + (rng-c-expect "=") + (let ((newcdr (cons (cons (intern name) + (rng-c-parse-literal)) + nil))) + (setcdr tail newcdr) + (setq tail newcdr)))) + (rng-c-advance) + (cdr head)))) + +(defun rng-c-parse-external () + (let* ((filename (rng-c-expand-file (rng-c-parse-literal))) + (rng-c-inherit-namespace (rng-c-parse-opt-inherit))) + (rng-c-parse-file filename 'external))) + +(defun rng-c-expand-file (uri) + (condition-case err + (rng-uri-file-name (rng-uri-resolve uri + (rng-file-name-uri rng-c-file-name))) + (rng-uri-error + (rng-c-error (cadr err))))) + +(defun rng-c-parse-opt-inherit () + (cond ((string-equal rng-c-current-token "inherit") + (rng-c-advance) + (rng-c-expect "=") + (rng-c-lookup-prefix (rng-c-parse-identifier-or-keyword))) + (t rng-c-default-namespace))) + +(defun rng-c-parse-grammar () + (rng-c-expect "{") + (let* ((rng-c-parent-grammar rng-c-current-grammar) + (rng-c-current-grammar (rng-c-make-grammar))) + (rng-c-parse-grammar-body "}") + (rng-c-finish-grammar))) + +(defun rng-c-parse-lead-annotation () + (rng-c-parse-annotation-body) + (and (string-equal rng-c-current-token "[") + (rng-c-error "Multiple leading annotations"))) + +(defun rng-c-parse-follow-annotations (obj) + (while (string-equal rng-c-current-token ">>") + (rng-c-advance) + (if (rng-c-current-token-prefixed-name-p) + (rng-c-advance) + (rng-c-parse-identifier-or-keyword)) + (rng-c-parse-annotation-body t)) + obj) + +(defun rng-c-parse-annotation-element () + (rng-c-advance) + (rng-c-parse-annotation-body t)) + +;; XXX need stricter checking of attribute names +;; XXX don't allow attributes after text + +(defun rng-c-parse-annotation-body (&optional allow-text) + "Current token is [. Parse up to matching ]. Current token after +parse is token following ]." + (or (string-equal rng-c-current-token "[") + (rng-c-error "Expected [")) + (rng-c-advance) + (while (not (string-equal rng-c-current-token "]")) + (cond ((rng-c-current-token-literal-p) + (or allow-text + (rng-c-error "Out of place text within annotation")) + (rng-c-parse-literal)) + (t + (if (rng-c-current-token-prefixed-name-p) + (rng-c-advance) + (rng-c-parse-identifier-or-keyword)) + (cond ((string-equal rng-c-current-token "[") + (rng-c-parse-annotation-body t)) + ((string-equal rng-c-current-token "=") + (rng-c-advance) + (rng-c-parse-literal)) + (t (rng-c-error "Expected = or [")))))) + (rng-c-advance)) + +(defun rng-c-advance-with (pattern) + (rng-c-advance) + pattern) + +(defun rng-c-expect (str) + (or (string-equal rng-c-current-token str) + (rng-c-error "Expected `%s' but got `%s'" str rng-c-current-token)) + (rng-c-advance)) + +(provide 'rng-cmpct) + +;;; rng-cmpct.el
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/rng-dt.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,64 @@ +;;; rng-dt.el --- datatype library interface for RELAX NG + +;; Copyright (C) 2003 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML, RelaxNG + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 2 of +;; the License, or (at your option) any later version. + +;; This program is distributed in the hope that it will be +;; useful, but WITHOUT ANY WARRANTY; without even the implied +;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +;; PURPOSE. See the GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public +;; License along with this program; if not, write to the Free +;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, +;; MA 02111-1307 USA + +;;; Commentary: + +;;; Code: + +(require 'rng-util) + +(defvar rng-dt-error-reporter nil) + +(defun rng-dt-error (string &rest objs) + (if rng-dt-error-reporter + (apply rng-dt-error-reporter (cons string objs)) + nil)) + +(defvar rng-dt-namespace-context-getter nil + "A list used by datatype libraries to expand names. The car of the +list is a symbol which is the name of a function. This function is +applied to the cdr of the list. The function must return a list whose +car is the default namespace and whose cdr is an alist of (PREFIX +. NAMESPACE) pairs, where PREFIX is a string and NAMESPACE is a +symbol. This must be dynamically bound before calling a datatype +library.") + +(defsubst rng-dt-make-value (dt str) + (apply (car dt) (cons str (cdr dt)))) + +(defun rng-dt-builtin-compile (name params) + (cond ((eq name 'string) + (if (null params) + '(t identity) + (rng-dt-error "The string datatype does not take any parameters"))) + ((eq name 'token) + (if (null params) + '(t rng-collapse-space) + (rng-dt-error "The token datatype does not take any parameters"))) + (t + (rng-dt-error "There is no built-in datatype %s" name)))) + +(put (rng-make-datatypes-uri "") 'rng-dt-compile 'rng-dt-builtin-compile) + +(provide 'rng-dt) + +;;; rng-dt.el ends here
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/rng-loc.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,548 @@ +;;; rng-loc.el --- locate the schema to use for validation + +;; Copyright (C) 2003 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML, RelaxNG + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 2 of +;; the License, or (at your option) any later version. + +;; This program is distributed in the hope that it will be +;; useful, but WITHOUT ANY WARRANTY; without even the implied +;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +;; PURPOSE. See the GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public +;; License along with this program; if not, write to the Free +;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, +;; MA 02111-1307 USA + +;;; Commentary: + +;;; Code: + +(require 'nxml-util) +(require 'nxml-parse) +(require 'rng-parse) +(require 'rng-uri) +(require 'rng-util) +(require 'xmltok) + +(defvar rng-current-schema-file-name nil + "Filename of schema being used for current buffer. +Nil if using a vacuous schema.") +(make-variable-buffer-local 'rng-current-schema-file-name) + +(defvar rng-schema-locating-files-default nil + "Default value for variable `rng-schema-locating-files'.") + +(defvar rng-schema-locating-file-schema-file nil + "File containing schema for schema locating files.") + +(defvar rng-schema-locating-file-schema nil + "Schema for schema locating files or nil if not yet loaded.") + +(defcustom rng-schema-locating-files rng-schema-locating-files-default + "*List of schema locating files." + :type '(repeat file) + :group 'relax-ng) + +(defvar rng-schema-loader-alist nil + "Alist of schema extensions vs schema loader functions.") + +(defvar rng-cached-document-element nil) + +(defvar rng-document-type-history nil) + +(defun rng-set-document-type (type-id) + (interactive (list (rng-read-type-id))) + (condition-case err + (when (not (string= type-id "")) + (let ((schema-file (rng-locate-schema-file type-id))) + (unless schema-file + (error "Could not locate schema for type id `%s'" type-id)) + (rng-set-schema-file-1 schema-file)) + (rng-save-schema-location-1 t type-id) + (rng-what-schema)) + (nxml-file-parse-error + (nxml-display-file-parse-error err)))) + +(defun rng-read-type-id () + (condition-case err + (let ((type-ids (rng-possible-type-ids)) + (completion-ignore-case nil)) + (completing-read "Document type id: " + (mapcar (lambda (x) (cons x nil)) + type-ids) + nil + t + nil + 'rng-document-type-history)) + (nxml-file-parse-error + (nxml-display-file-parse-error err)))) + +(defun rng-set-schema-file (filename) + "Set the schema for the current buffer to the schema in FILENAME. +FILENAME must be the name of a file containing a schema. +The extension of FILENAME is used to determine what kind of schema it +is. The variable `rng-schema-loader-alist' maps from schema +extensions to schema loader functions. The function +`rng-c-load-schema' is the loader for RELAX NG compact syntax. The +association is between the buffer and the schema: the association is +lost when the buffer is killed." + (interactive "fSchema file: ") + (condition-case err + (progn + (rng-set-schema-file-1 filename) + (rng-save-schema-location-1 t)) + (nxml-file-parse-error + (nxml-display-file-parse-error err)))) + +(defun rng-set-vacuous-schema () + "Set the schema for the current buffer to allow any well-formed XML." + (interactive) + (rng-set-schema-file-1 nil) + (rng-what-schema)) + +(defun rng-set-schema-file-1 (filename) + (setq filename (and filename (expand-file-name filename))) + (setq rng-current-schema + (if filename + (rng-load-schema filename) + rng-any-element)) + (setq rng-current-schema-file-name filename) + (run-hooks 'rng-schema-change-hook)) + +(defun rng-load-schema (filename) + (let* ((extension (file-name-extension filename)) + (loader (cdr (assoc extension rng-schema-loader-alist)))) + (or loader + (if extension + (error "No schema loader available for file extension `%s'" + extension) + (error "No schema loader available for null file extension"))) + (funcall loader filename))) + +(defun rng-what-schema () + "Display a message saying what schema `rng-validate-mode' is using." + (interactive) + (if rng-current-schema-file-name + (message "Using schema %s" + (abbreviate-file-name rng-current-schema-file-name)) + (message "Using vacuous schema"))) + +(defun rng-auto-set-schema (&optional no-display-error) + "Set the schema for this buffer based on the buffer's contents and file-name." + (interactive) + (condition-case err + (progn + (rng-set-schema-file-1 (rng-locate-schema-file)) + (rng-what-schema)) + (nxml-file-parse-error + (if no-display-error + (error "%s at position %s in %s" + (nth 3 err) + (nth 2 err) + (abbreviate-file-name (nth 1 err))) + (nxml-display-file-parse-error err))))) + +(defun rng-locate-schema-file (&optional type-id) + "Return the file-name of the schema to use for the current buffer. +Return nil if no schema could be located. +If TYPE-ID is non-nil, then locate the schema for this TYPE-ID." + (let* ((rng-cached-document-element nil) + (schema + (if type-id + (cons type-id nil) + (rng-locate-schema-file-using rng-schema-locating-files))) + files type-ids) + (while (consp schema) + (setq files rng-schema-locating-files) + (setq type-id (car schema)) + (setq schema nil) + (when (member type-id type-ids) + (error "Type-id loop for type-id `%s'" type-id)) + (setq type-ids (cons type-id type-ids)) + (while (and files (not schema)) + (setq schema + (rng-locate-schema-file-from-type-id type-id + (car files))) + (setq files (cdr files)))) + (and schema + (rng-uri-file-name schema)))) + +(defun rng-possible-type-ids () + "Return a list of the known type IDs." + (let ((files rng-schema-locating-files) + type-ids) + (while files + (setq type-ids (rng-possible-type-ids-using (car files) type-ids)) + (setq files (cdr files))) + (rng-uniquify-equal (sort type-ids 'string<)))) + +(defun rng-locate-schema-file-using (files) + "Locate a schema using the schema locating files FILES. +FILES is a list of file-names. +Return either a URI, a list (TYPE-ID) where TYPE-ID is a string +or nil." + (let (rules + ;; List of types that override normal order-based + ;; priority, most important first + preferred-types + ;; Best result found so far; same form as return value. + best-so-far) + (while (and (progn + (while (and (not rules) files) + (setq rules (rng-get-parsed-schema-locating-file + (car files))) + (setq files (cdr files))) + rules) + (or (not best-so-far) preferred-types)) + (let* ((rule (car rules)) + (rule-type (car rule)) + (rule-matcher (get rule-type 'rng-rule-matcher))) + (setq rules (cdr rules)) + (cond (rule-matcher + (when (and (or (not best-so-far) + (memq rule-type preferred-types))) + (setq best-so-far + (funcall rule-matcher (cdr rule))) + preferred-types) + (setq preferred-types + (nbutlast preferred-types + (length (memq rule-type preferred-types))))) + ((eq rule-type 'applyFollowingRules) + (when (not best-so-far) + (let ((prefer (cdr (assq 'ruleType (cdr rule))))) + (when (and prefer + (not (memq (setq prefer (intern prefer)) + preferred-types))) + (setq preferred-types + (nconc preferred-types (list prefer))))))) + ((eq rule-type 'include) + (let ((uri (cdr (assq 'rules (cdr rule))))) + (when uri + (setq rules + (append (rng-get-parsed-schema-locating-file + (rng-uri-file-name uri)) + rules)))))))) + best-so-far)) + +(put 'documentElement 'rng-rule-matcher 'rng-match-document-element-rule) +(put 'namespace 'rng-rule-matcher 'rng-match-namespace-rule) +(put 'uri 'rng-rule-matcher 'rng-match-uri-rule) +(put 'transformURI 'rng-rule-matcher 'rng-match-transform-uri-rule) +(put 'default 'rng-rule-matcher 'rng-match-default-rule) + +(defun rng-match-document-element-rule (props) + (let ((document-element (rng-document-element)) + (prefix (cdr (assq 'prefix props))) + (local-name (cdr (assq 'localName props)))) + (and (or (not prefix) + (if (= (length prefix) 0) + (not (nth 1 document-element)) + (string= prefix (nth 1 document-element)))) + (or (not local-name) + (string= local-name + (nth 2 document-element))) + (rng-match-default-rule props)))) + +(defun rng-match-namespace-rule (props) + (let ((document-element (rng-document-element)) + (ns (cdr (assq 'ns props)))) + (and document-element + ns + (eq (nth 0 document-element) + (if (string= ns "") + nil + (nxml-make-namespace ns))) + (rng-match-default-rule props)))) + +(defun rng-document-element () + "Return a list (NS PREFIX LOCAL-NAME). +NS is t if the document has a non-nil, but not otherwise known namespace." + (or rng-cached-document-element + (setq rng-cached-document-element + (save-excursion + (save-restriction + (widen) + (goto-char (point-min)) + (let (xmltok-dtd) + (xmltok-save + (xmltok-forward-prolog) + (xmltok-forward) + (when (memq xmltok-type '(start-tag + partial-start-tag + empty-element + partial-empty-element)) + (list (rng-get-start-tag-namespace) + (xmltok-start-tag-prefix) + (xmltok-start-tag-local-name)))))))))) + +(defun rng-get-start-tag-namespace () + (let ((prefix (xmltok-start-tag-prefix)) + namespace att value) + (while xmltok-namespace-attributes + (setq att (car xmltok-namespace-attributes)) + (setq xmltok-namespace-attributes (cdr xmltok-namespace-attributes)) + (when (if prefix + (and (xmltok-attribute-prefix att) + (string= (xmltok-attribute-local-name att) + prefix)) + (not (xmltok-attribute-prefix att))) + (setq value (xmltok-attribute-value att)) + (setq namespace (if value (nxml-make-namespace value) t)))) + (if (and prefix (not namespace)) + t + namespace))) + +(defun rng-match-transform-uri-rule (props) + (let ((from-pattern (cdr (assq 'fromPattern props))) + (to-pattern (cdr (assq 'toPattern props))) + (file-name (buffer-file-name))) + (and file-name + (setq file-name (expand-file-name file-name)) + (rng-file-name-matches-uri-pattern-p file-name from-pattern) + (condition-case () + (let ((new-file-name + (replace-match + (save-match-data + (rng-uri-pattern-file-name-replace-match to-pattern)) + t + nil + file-name))) + (and (file-name-absolute-p new-file-name) + (file-exists-p new-file-name) + (rng-file-name-uri new-file-name))) + (rng-uri-error nil))))) + +(defun rng-match-uri-rule (props) + (let ((resource (cdr (assq 'resource props))) + (pattern (cdr (assq 'pattern props))) + (file-name (buffer-file-name))) + (and file-name + (setq file-name (expand-file-name file-name)) + (cond (resource + (condition-case () + (eq (compare-strings (rng-uri-file-name resource) + 0 + nil + (expand-file-name file-name) + 0 + nil + nxml-file-name-ignore-case) + t) + (rng-uri-error nil))) + (pattern + (rng-file-name-matches-uri-pattern-p file-name + pattern))) + (rng-match-default-rule props)))) + +(defun rng-file-name-matches-uri-pattern-p (file-name pattern) + (condition-case () + (and (let ((case-fold-search nxml-file-name-ignore-case)) + (string-match (rng-uri-pattern-file-name-regexp pattern) + file-name)) + t) + (rng-uri-error nil))) + +(defun rng-match-default-rule (props) + (or (cdr (assq 'uri props)) + (let ((type-id (cdr (assq 'typeId props)))) + (and type-id + (cons (rng-collapse-space type-id) nil))))) + +(defun rng-possible-type-ids-using (file type-ids) + (let ((rules (rng-get-parsed-schema-locating-file file)) + rule) + (while rules + (setq rule (car rules)) + (setq rules (cdr rules)) + (cond ((eq (car rule) 'typeId) + (let ((id (cdr (assq 'id (cdr rule))))) + (when id + (setq type-ids + (cons (rng-collapse-space id) + type-ids))))) + ((eq (car rule) 'include) + (let ((uri (cdr (assq 'rules (cdr rule))))) + (when uri + (setq type-ids + (rng-possible-type-ids-using + (rng-get-parsed-schema-locating-file + (rng-uri-file-name uri)) + type-ids))))))) + type-ids)) + +(defun rng-locate-schema-file-from-type-id (type-id file) + "Locate the schema for type id TYPE-ID using schema locating file FILE. +Return either a URI, a list (TYPE-ID) where TYPE-ID is a string +or nil." + (let ((rules (rng-get-parsed-schema-locating-file file)) + schema rule) + (while (and rules (not schema)) + (setq rule (car rules)) + (setq rules (cdr rules)) + (cond ((and (eq (car rule) 'typeId) + (let ((id (assq 'id (cdr rule)))) + (and id + (string= (rng-collapse-space (cdr id)) type-id)))) + (setq schema (rng-match-default-rule (cdr rule)))) + ((eq (car rule) 'include) + (let ((uri (cdr (assq 'rules (cdr rule))))) + (when uri + (setq schema + (rng-locate-schema-file-from-type-id + type-id + (rng-uri-file-name uri)))))))) + schema)) + +(defvar rng-schema-locating-file-alist nil) + +(defun rng-get-parsed-schema-locating-file (file) + "Return a list of rules for the schema locating file FILE." + (setq file (expand-file-name file)) + (let ((cached (assoc file rng-schema-locating-file-alist)) + (mtime (nth 5 (file-attributes file))) + parsed) + (cond ((not mtime) + (when cached + (setq rng-schema-locating-file-alist + (delq cached rng-schema-locating-file-alist))) + nil) + ((and cached (equal (nth 1 cached) mtime)) + (nth 2 cached)) + (t + (setq parsed (rng-parse-schema-locating-file file)) + (if cached + (setcdr cached (list mtime parsed)) + (setq rng-schema-locating-file-alist + (cons (list file mtime parsed) + rng-schema-locating-file-alist))) + parsed)))) + +(defconst rng-locate-namespace-uri + (nxml-make-namespace "http://thaiopensource.com/ns/locating-rules/1.0")) + +(defun rng-parse-schema-locating-file (file) + "Return list of rules. +Each rule has the form (TYPE (ATTR . VAL) ...), where +TYPE is a symbol for the element name, ATTR is a symbol for the attribute +and VAL is a string for the value. +Attribute values representing URIs are made absolute and xml:base +attributes are removed." + (when (and (not rng-schema-locating-file-schema) + rng-schema-locating-file-schema-file) + (setq rng-schema-locating-file-schema + (rng-load-schema rng-schema-locating-file-schema-file))) + (let* ((element + (if rng-schema-locating-file-schema + (rng-parse-validate-file rng-schema-locating-file-schema + file) + (nxml-parse-file file))) + (children (cddr element)) + (base-uri (rng-file-name-uri file)) + child name rules atts att props prop-name prop-value) + (when (equal (car element) + (cons rng-locate-namespace-uri "locatingRules")) + (while children + (setq child (car children)) + (setq children (cdr children)) + (when (consp child) + (setq name (car child)) + (when (eq (car name) rng-locate-namespace-uri) + (setq atts (cadr child)) + (setq props nil) + (while atts + (setq att (car atts)) + (when (stringp (car att)) + (setq prop-name (intern (car att))) + (setq prop-value (cdr att)) + (when (memq prop-name '(uri rules resource)) + (setq prop-value + (rng-uri-resolve prop-value base-uri))) + (setq props (cons (cons prop-name prop-value) + props))) + (setq atts (cdr atts))) + (setq rules + (cons (cons (intern (cdr name)) (nreverse props)) + rules)))))) + (nreverse rules))) + +(defun rng-save-schema-location () + "Save the association between the buffer's file and the current schema. +This ensures that the schema that is currently being used will be used +if the file is edited in a future session. The association will be +saved to the first writable file in `rng-schema-locating-files'." + (interactive) + (rng-save-schema-location-1 nil)) + +(defun rng-save-schema-location-1 (prompt &optional type-id) + (unless (or rng-current-schema-file-name type-id) + (error "Buffer is using a vacuous schema")) + (let ((files rng-schema-locating-files) + (document-file-name (buffer-file-name)) + (schema-file-name rng-current-schema-file-name) + file) + (while (and files (not file)) + (if (file-writable-p (car files)) + (setq file (expand-file-name (car files))) + (setq files (cdr files)))) + (cond ((not file) + (if prompt + nil + (error "No writable schema locating file configured"))) + ((not document-file-name) + (if prompt + nil + (error "Buffer does not have a filename"))) + ((and prompt + (not (y-or-n-p (format "Save %s to %s " + (if type-id + "type identifier" + "schema location") + file))))) + (t + (save-excursion + (set-buffer (find-file-noselect file)) + (let ((modified (buffer-modified-p))) + (if (> (buffer-size) 0) + (let (xmltok-dtd) + (goto-char (point-min)) + (xmltok-save + (xmltok-forward-prolog) + (xmltok-forward) + (unless (eq xmltok-type 'start-tag) + (error "Locating file `%s' invalid" file)))) + (insert "<?xml version=\"1.0\"?>\n" + "<locatingRules xmlns=\"" + (nxml-namespace-name rng-locate-namespace-uri) + "\">") + (let ((pos (point))) + (insert "\n</locatingRules>\n") + (goto-char pos))) + (insert "\n") + (insert (let ((locating-file-uri (rng-file-name-uri file))) + (format "<uri resource=\"%s\" %s=\"%s\"/>" + (rng-escape-string + (rng-relative-uri + (rng-file-name-uri document-file-name) + locating-file-uri)) + (if type-id "typeId" "uri") + (rng-escape-string + (or type-id + (rng-relative-uri + (rng-file-name-uri schema-file-name) + locating-file-uri)))))) + (indent-according-to-mode) + (when (or (not modified) + (y-or-n-p (format "Save file %s " + (buffer-file-name)))) + (save-buffer)))))))) + +(provide 'rng-loc) + +;;; rng-loc.el ends here
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/rng-maint.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,343 @@ +;;; rng-maint.el --- commands for RELAX NG maintainers + +;; Copyright (C) 2003 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML, RelaxNG + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 2 of +;; the License, or (at your option) any later version. + +;; This program is distributed in the hope that it will be +;; useful, but WITHOUT ANY WARRANTY; without even the implied +;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +;; PURPOSE. See the GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public +;; License along with this program; if not, write to the Free +;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, +;; MA 02111-1307 USA + +;;; Commentary: + +;;; Code: + +(require 'xmltok) +(require 'nxml-mode) +(require 'texnfo-upd) + +(defvar rng-dir (file-name-directory load-file-name)) + +(defconst rng-autoload-modules + '(xmltok + nxml-mode + nxml-uchnm + nxml-glyph + rng-cmpct + rng-maint + rng-valid + rng-xsd + rng-nxml)) + +;;;###autoload +(defun rng-update-autoloads () + "Update the autoloads in rng-auto.el." + (interactive) + (let* ((generated-autoload-file (expand-file-name "rng-auto.el" + rng-dir))) + (mapcar (lambda (x) + (update-file-autoloads + (expand-file-name (concat (symbol-name x) ".el") rng-dir))) + rng-autoload-modules))) + + +(defconst rng-compile-modules + '(xmltok + nxml-util + nxml-enc + nxml-glyph + nxml-rap + nxml-outln + nxml-mode + nxml-uchnm + nxml-ns + nxml-parse + nxml-maint + xsd-regexp + rng-util + rng-dt + rng-xsd + rng-uri + rng-pttrn + rng-cmpct + rng-match + rng-parse + rng-loc + rng-valid + rng-nxml + rng-maint)) + +;;;###autoload +(defun rng-byte-compile-load () + "Byte-compile and load all of the RELAX NG library in an appropriate order." + (interactive) + (mapcar (lambda (x) + (byte-compile-file (expand-file-name (concat (symbol-name x) ".el") + rng-dir) + t)) + rng-compile-modules)) + + +;;; Conversion from XML to texinfo. +;; This is all a hack and is just enough to make the conversion work. +;; It's not intended for public use. + +(defvar rng-manual-base "nxml-mode") +(defvar rng-manual-xml (concat rng-manual-base ".xml")) +(defvar rng-manual-texi (concat rng-manual-base ".texi")) +(defvar rng-manual-info (concat rng-manual-base ".info")) + +;;;###autoload +(defun rng-format-manual () + "Create manual.texi from manual.xml." + (interactive) + (let ((xml-buf (find-file-noselect (expand-file-name rng-manual-xml + rng-dir))) + (texi-buf (find-file-noselect (expand-file-name rng-manual-texi + rng-dir)))) + (save-excursion + (set-buffer texi-buf) + (erase-buffer) + (let ((standard-output texi-buf)) + (princ (format "\\input texinfo @c -*- texinfo -*-\n\ +@c %%**start of header\n\ +@setfilename %s\n\ +@settitle \n\ +@c %%**end of header\n" rng-manual-info)) + (set-buffer xml-buf) + (goto-char (point-min)) + (xmltok-save + (xmltok-forward-prolog) + (rng-process-tokens)) + (princ "\n@bye\n")) + (set-buffer texi-buf) + (rng-manual-fixup) + (texinfo-insert-node-lines (point-min) (point-max) t) + (texinfo-all-menus-update) + (save-buffer)))) + +(defun rng-manual-fixup () + (goto-char (point-min)) + (search-forward "@top ") + (let ((pos (point))) + (search-forward "\n") + (let ((title (buffer-substring-no-properties pos (1- (point))))) + (goto-char (point-min)) + (search-forward "@settitle ") + (insert title) + (search-forward "@node") + (goto-char (match-beginning 0)) + (insert "@dircategory Emacs\n" + "@direntry\n* " + title + ": (" + rng-manual-info + ").\n@end direntry\n\n")))) + +(defvar rng-manual-inline-elements '(kbd key samp code var emph uref point)) + +(defun rng-process-tokens () + (let ((section-depth 0) + ;; stack of per-element space treatment + ;; t means keep, nil means discard, fill means no blank lines + (keep-space-stack (list nil)) + (ignore-following-newline nil) + (want-blank-line nil) + name startp endp data keep-space-for-children) + (while (xmltok-forward) + (cond ((memq xmltok-type '(start-tag empty-element end-tag)) + (setq startp (memq xmltok-type '(start-tag empty-element))) + (setq endp (memq xmltok-type '(end-tag empty-element))) + (setq name (intern (if startp + (xmltok-start-tag-qname) + (xmltok-end-tag-qname)))) + (setq keep-space-for-children nil) + (setq ignore-following-newline nil) + (cond ((memq name rng-manual-inline-elements) + (when startp + (when want-blank-line + (rng-manual-output-force-blank-line) + (when (eq want-blank-line 'noindent) + (princ "@noindent\n")) + (setq want-blank-line nil)) + (setq keep-space-for-children t) + (princ (format "@%s{" name))) + (when endp (princ "}"))) + ((eq name 'ulist) + (when startp + (rng-manual-output-force-blank-line) + (setq want-blank-line nil) + (princ "@itemize @bullet\n")) + (when endp + (rng-manual-output-force-new-line) + (setq want-blank-line 'noindent) + (princ "@end itemize\n"))) + ((eq name 'item) + (rng-manual-output-force-new-line) + (setq want-blank-line endp) + (when startp (princ "@item\n"))) + ((memq name '(example display)) + (when startp + (setq ignore-following-newline t) + (rng-manual-output-force-blank-line) + (setq want-blank-line nil) + (setq keep-space-for-children t) + (princ (format "@%s\n" name))) + (when endp + (rng-manual-output-force-new-line) + (setq want-blank-line 'noindent) + (princ (format "@end %s\n" name)))) + ((eq name 'para) + (rng-manual-output-force-new-line) + (when startp + (when want-blank-line + (setq want-blank-line t)) + (setq keep-space-for-children 'fill)) + (when endp (setq want-blank-line t))) + ((eq name 'section) + (when startp + (rng-manual-output-force-blank-line) + (when (eq section-depth 0) + (princ "@node Top\n")) + (princ "@") + (princ (nth section-depth '(top + chapter + section + subsection + subsubsection))) + (princ " ") + (setq want-blank-line nil) + (setq section-depth (1+ section-depth))) + (when endp + (rng-manual-output-force-new-line) + (setq want-blank-line nil) + (setq section-depth (1- section-depth)))) + ((eq name 'title) + (when startp + (setq keep-space-for-children 'fill)) + (when endp + (setq want-blank-line t) + (princ "\n")))) + (when startp + (setq keep-space-stack (cons keep-space-for-children + keep-space-stack))) + (when endp + (setq keep-space-stack (cdr keep-space-stack)))) + ((memq xmltok-type '(data + space + char-ref + entity-ref + cdata-section)) + (setq data nil) + (cond ((memq xmltok-type '(data space)) + (setq data (buffer-substring-no-properties xmltok-start + (point)))) + ((and (memq xmltok-type '(char-ref entity-ref)) + xmltok-replacement) + (setq data xmltok-replacement)) + ((eq xmltok-type 'cdata-section) + (setq data + (buffer-substring-no-properties (+ xmltok-start 9) + (- (point) 3))))) + (when (and data (car keep-space-stack)) + (setq data (replace-regexp-in-string "[@{}]" + "@\\&" + data + t)) + (when ignore-following-newline + (setq data (replace-regexp-in-string "\\`\n" "" data t))) + (setq ignore-following-newline nil) +;; (when (eq (car keep-space-stack) 'fill) +;; (setq data (replace-regexp-in-string "\n" " " data t))) + (when (eq want-blank-line 'noindent) + (setq data (replace-regexp-in-string "\\`\n*" "" data t))) + (when (> (length data) 0) + (when want-blank-line + (rng-manual-output-force-blank-line) + (when (eq want-blank-line 'noindent) + (princ "@noindent\n")) + (setq want-blank-line nil)) + (princ data)))) + )))) + +(defun rng-manual-output-force-new-line () + (save-excursion + (set-buffer standard-output) + (unless (eq (char-before) ?\n) + (insert ?\n)))) + +(defun rng-manual-output-force-blank-line () + (save-excursion + (set-buffer standard-output) + (if (eq (char-before) ?\n) + (unless (eq (char-before (1- (point))) ?\n) + (insert ?\n)) + (insert "\n\n")))) + +;;; Versioning + +;;;###autoload +(defun rng-write-version () + (find-file "VERSION") + (erase-buffer) + (insert nxml-version "\n") + (save-buffer)) + +;;; Timing + +(defun rng-time-to-float (time) + (+ (* (nth 0 time) 65536.0) + (nth 1 time) + (/ (nth 2 time) 1000000.0))) + +(defun rng-time-function (function &rest args) + (let* ((start (current-time)) + (val (apply function args)) + (end (current-time))) + (message "%s ran in %g seconds" + function + (- (rng-time-to-float end) + (rng-time-to-float start))) + val)) + +(defun rng-time-tokenize-buffer () + (interactive) + (rng-time-function 'rng-tokenize-buffer)) + +(defun rng-tokenize-buffer () + (save-excursion + (goto-char (point-min)) + (xmltok-save + (xmltok-forward-prolog) + (while (xmltok-forward))))) + +(defun rng-time-validate-buffer () + (interactive) + (rng-time-function 'rng-validate-buffer)) + +(defun rng-validate-buffer () + (save-restriction + (widen) + (nxml-with-unmodifying-text-property-changes + (rng-clear-cached-state (point-min) (point-max))) + ;; 1+ to clear empty overlays at (point-max) + (rng-clear-overlays (point-min) (1+ (point-max)))) + (setq rng-validate-up-to-date-end 1) + (rng-clear-conditional-region) + (setq rng-error-count 0) + (while (rng-do-some-validation + (lambda () t)))) + +;;; rng-maint.el ends here
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/rng-match.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,1739 @@ +;;; rng-match.el --- matching of RELAX NG patterns against XML events + +;; Copyright (C) 2003 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML, RelaxNG + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 2 of +;; the License, or (at your option) any later version. + +;; This program is distributed in the hope that it will be +;; useful, but WITHOUT ANY WARRANTY; without even the implied +;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +;; PURPOSE. See the GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public +;; License along with this program; if not, write to the Free +;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, +;; MA 02111-1307 USA + +;;; Commentary: + +;; This uses the algorithm described in +;; http://www.thaiopensource.com/relaxng/derivative.html +;; +;; The schema to be used is contained in the variable +;; rng-current-schema. It has the form described in the file +;; rng-pttrn.el. +;; +;;; Code: + +(require 'rng-pttrn) +(require 'rng-util) +(require 'rng-dt) + +(defvar rng-not-allowed-ipattern nil) +(defvar rng-empty-ipattern nil) +(defvar rng-text-ipattern nil) + +(defvar rng-compile-table nil) + +(defvar rng-being-compiled nil + "Contains a list of ref patterns currently being compiled. +Used to detect illegal recursive references.") + +(defvar rng-ipattern-table nil) + +(defvar rng-last-ipattern-index nil) + +(defvar rng-match-state nil + "An ipattern representing the current state of validation.") + +;;; Inline functions + +(defsubst rng-update-match-state (new-state) + (if (and (eq new-state rng-not-allowed-ipattern) + (not (eq rng-match-state rng-not-allowed-ipattern))) + nil + (setq rng-match-state new-state) + t)) + +;;; Interned patterns + +(eval-when-compile + (defun rng-ipattern-slot-accessor-name (slot-name) + (intern (concat "rng-ipattern-get-" + (symbol-name slot-name)))) + + (defun rng-ipattern-slot-setter-name (slot-name) + (intern (concat "rng-ipattern-set-" + (symbol-name slot-name))))) + +(defmacro rng-ipattern-defslot (slot-name index) + `(progn + (defsubst ,(rng-ipattern-slot-accessor-name slot-name) (ipattern) + (aref ipattern ,index)) + (defsubst ,(rng-ipattern-slot-setter-name slot-name) (ipattern value) + (aset ipattern ,index value)))) + +(rng-ipattern-defslot type 0) +(rng-ipattern-defslot index 1) +(rng-ipattern-defslot name-class 2) +(rng-ipattern-defslot datatype 2) +(rng-ipattern-defslot after 2) +(rng-ipattern-defslot child 3) +(rng-ipattern-defslot value-object 3) +(rng-ipattern-defslot nullable 4) +(rng-ipattern-defslot memo-text-typed 5) +(rng-ipattern-defslot memo-map-start-tag-open-deriv 6) +(rng-ipattern-defslot memo-map-start-attribute-deriv 7) +(rng-ipattern-defslot memo-start-tag-close-deriv 8) +(rng-ipattern-defslot memo-text-only-deriv 9) +(rng-ipattern-defslot memo-mixed-text-deriv 10) +(rng-ipattern-defslot memo-map-data-deriv 11) +(rng-ipattern-defslot memo-end-tag-deriv 12) + +(defconst rng-memo-map-alist-max 10) + +(defsubst rng-memo-map-get (key mm) + "Return the value associated with KEY in memo-map MM." + (let ((found (assoc key mm))) + (if found + (cdr found) + (and mm + (let ((head (car mm))) + (and (hash-table-p head) + (gethash key head))))))) + +(defun rng-memo-map-add (key value mm &optional weakness) + "Associate KEY with VALUE in memo-map MM and return the new memo-map. +The new memo-map may or may not be a different object from MM. + +Alists are better for small maps. Hash tables are better for large +maps. A memo-map therefore starts off as an alist and switches to a +hash table for large memo-maps. A memo-map is always a list. An empty +memo-map is represented by nil. A large memo-map is represented by a +list containing just a hash-table. A small memo map is represented by +a list whose cdr is an alist and whose car is the number of entries in +the alist. The complete memo-map can be passed to assoc without +problems: assoc ignores any members that are not cons cells. There is +therefore minimal overhead in successful lookups on small lists +\(which is the most common case)." + (if (null mm) + (list 1 (cons key value)) + (let ((head (car mm))) + (cond ((hash-table-p head) + (puthash key value head) + mm) + ((>= head rng-memo-map-alist-max) + (let ((ht (make-hash-table :test 'equal + :weakness weakness + :size (* 2 rng-memo-map-alist-max)))) + (setq mm (cdr mm)) + (while mm + (setq head (car mm)) + (puthash (car head) (cdr head) ht) + (setq mm (cdr mm))) + (cons ht nil))) + (t (cons (1+ head) + (cons (cons key value) + (cdr mm)))))))) + +(defsubst rng-make-ipattern (type index name-class child nullable) + (vector type index name-class child nullable + ;; 5 memo-text-typed + 'unknown + ;; 6 memo-map-start-tag-open-deriv + nil + ;; 7 memo-map-start-attribute-deriv + nil + ;; 8 memo-start-tag-close-deriv + nil + ;; 9 memo-text-only-deriv + nil + ;; 10 memo-mixed-text-deriv + nil + ;; 11 memo-map-data-deriv + nil + ;; 12 memo-end-tag-deriv + nil)) + +(defun rng-ipattern-maybe-init () + (unless rng-ipattern-table + (setq rng-ipattern-table (make-hash-table :test 'equal)) + (setq rng-last-ipattern-index -1))) + +(defun rng-ipattern-clear () + (when rng-ipattern-table + (clrhash rng-ipattern-table)) + (setq rng-last-ipattern-index -1)) + +(defsubst rng-gen-ipattern-index () + (setq rng-last-ipattern-index (1+ rng-last-ipattern-index))) + +(defun rng-put-ipattern (key type name-class child nullable) + (let ((ipattern + (rng-make-ipattern type + (rng-gen-ipattern-index) + name-class + child + nullable))) + (puthash key ipattern rng-ipattern-table) + ipattern)) + +(defun rng-get-ipattern (key) + (gethash key rng-ipattern-table)) + +(or rng-not-allowed-ipattern + (setq rng-not-allowed-ipattern + (rng-make-ipattern 'not-allowed -3 nil nil nil))) + +(or rng-empty-ipattern + (setq rng-empty-ipattern + (rng-make-ipattern 'empty -2 nil nil t))) + +(or rng-text-ipattern + (setq rng-text-ipattern + (rng-make-ipattern 'text -1 nil nil t))) + +(defconst rng-const-ipatterns + (list rng-not-allowed-ipattern + rng-empty-ipattern + rng-text-ipattern)) + +(defun rng-intern-after (child after) + (if (eq child rng-not-allowed-ipattern) + rng-not-allowed-ipattern + (let ((key (list 'after + (rng-ipattern-get-index child) + (rng-ipattern-get-index after)))) + (or (rng-get-ipattern key) + (rng-put-ipattern key + 'after + after + child + nil))))) + +(defun rng-intern-attribute (name-class ipattern) + (if (eq ipattern rng-not-allowed-ipattern) + rng-not-allowed-ipattern + (let ((key (list 'attribute + name-class + (rng-ipattern-get-index ipattern)))) + (or (rng-get-ipattern key) + (rng-put-ipattern key + 'attribute + name-class + ipattern + nil))))) + +(defun rng-intern-data (dt matches-anything) + (let ((key (list 'data dt))) + (or (rng-get-ipattern key) + (let ((ipattern (rng-put-ipattern key + 'data + dt + nil + matches-anything))) + (rng-ipattern-set-memo-text-typed ipattern + (not matches-anything)) + ipattern)))) + +(defun rng-intern-data-except (dt ipattern) + (let ((key (list 'data-except dt ipattern))) + (or (rng-get-ipattern key) + (rng-put-ipattern key + 'data-except + dt + ipattern + nil)))) + +(defun rng-intern-value (dt obj) + (let ((key (list 'value dt obj))) + (or (rng-get-ipattern key) + (rng-put-ipattern key + 'value + dt + obj + nil)))) + +(defun rng-intern-one-or-more (ipattern) + (or (rng-intern-one-or-more-shortcut ipattern) + (let ((key (cons 'one-or-more + (list (rng-ipattern-get-index ipattern))))) + (or (rng-get-ipattern key) + (rng-put-ipattern key + 'one-or-more + nil + ipattern + (rng-ipattern-get-nullable ipattern)))))) + +(defun rng-intern-one-or-more-shortcut (ipattern) + (cond ((eq ipattern rng-not-allowed-ipattern) + rng-not-allowed-ipattern) + ((eq ipattern rng-empty-ipattern) + rng-empty-ipattern) + ((eq (rng-ipattern-get-type ipattern) 'one-or-more) + ipattern) + (t nil))) + +(defun rng-intern-list (ipattern) + (if (eq ipattern rng-not-allowed-ipattern) + rng-not-allowed-ipattern + (let ((key (cons 'list + (list (rng-ipattern-get-index ipattern))))) + (or (rng-get-ipattern key) + (rng-put-ipattern key + 'list + nil + ipattern + nil))))) + +(defun rng-intern-group (ipatterns) + "Return a ipattern for the list of group members in IPATTERNS." + (or (rng-intern-group-shortcut ipatterns) + (let* ((tem (rng-normalize-group-list ipatterns)) + (normalized (cdr tem))) + (or (rng-intern-group-shortcut normalized) + (let ((key (cons 'group + (mapcar 'rng-ipattern-get-index normalized)))) + (or (rng-get-ipattern key) + (rng-put-ipattern key + 'group + nil + normalized + (car tem)))))))) + +(defun rng-intern-group-shortcut (ipatterns) + "Try to shortcut interning a group list. If successful, return the +interned pattern. Otherwise return nil." + (while (and ipatterns + (eq (car ipatterns) rng-empty-ipattern)) + (setq ipatterns (cdr ipatterns))) + (if ipatterns + (let ((ret (car ipatterns))) + (if (eq ret rng-not-allowed-ipattern) + rng-not-allowed-ipattern + (setq ipatterns (cdr ipatterns)) + (while (and ipatterns ret) + (let ((tem (car ipatterns))) + (cond ((eq tem rng-not-allowed-ipattern) + (setq ret tem) + (setq ipatterns nil)) + ((eq tem rng-empty-ipattern) + (setq ipatterns (cdr ipatterns))) + (t + ;; Stop here rather than continuing + ;; looking for not-allowed patterns. + ;; We do a complete scan elsewhere. + (setq ret nil))))) + ret)) + rng-empty-ipattern)) + +(defun rng-normalize-group-list (ipatterns) + "Normalize a list containing members of a group. +Expands nested groups, removes empty members, handles notAllowed. +Returns a pair whose car says whether the list is nullable and whose +cdr is the normalized list." + (let ((nullable t) + (result nil) + member) + (while ipatterns + (setq member (car ipatterns)) + (setq ipatterns (cdr ipatterns)) + (when nullable + (setq nullable (rng-ipattern-get-nullable member))) + (cond ((eq (rng-ipattern-get-type member) 'group) + (setq result + (nconc (reverse (rng-ipattern-get-child member)) + result))) + ((eq member rng-not-allowed-ipattern) + (setq result (list rng-not-allowed-ipattern)) + (setq ipatterns nil)) + ((not (eq member rng-empty-ipattern)) + (setq result (cons member result))))) + (cons nullable (nreverse result)))) + +(defun rng-intern-interleave (ipatterns) + (or (rng-intern-group-shortcut ipatterns) + (let* ((tem (rng-normalize-interleave-list ipatterns)) + (normalized (cdr tem))) + (or (rng-intern-group-shortcut normalized) + (let ((key (cons 'interleave + (mapcar 'rng-ipattern-get-index normalized)))) + (or (rng-get-ipattern key) + (rng-put-ipattern key + 'interleave + nil + normalized + (car tem)))))))) + +(defun rng-normalize-interleave-list (ipatterns) + "Normalize a list containing members of an interleave. +Expands nested groups, removes empty members, handles notAllowed. +Returns a pair whose car says whether the list is nullable and whose +cdr is the normalized list." + (let ((nullable t) + (result nil) + member) + (while ipatterns + (setq member (car ipatterns)) + (setq ipatterns (cdr ipatterns)) + (when nullable + (setq nullable (rng-ipattern-get-nullable member))) + (cond ((eq (rng-ipattern-get-type member) 'interleave) + (setq result + (append (rng-ipattern-get-child member) + result))) + ((eq member rng-not-allowed-ipattern) + (setq result (list rng-not-allowed-ipattern)) + (setq ipatterns nil)) + ((not (eq member rng-empty-ipattern)) + (setq result (cons member result))))) + (cons nullable (sort result 'rng-compare-ipattern)))) + +;; Would be cleaner if this didn't modify IPATTERNS. + +(defun rng-intern-choice (ipatterns) + "Return a choice ipattern for the list of choices in IPATTERNS. +May alter IPATTERNS." + (or (rng-intern-choice-shortcut ipatterns) + (let* ((tem (rng-normalize-choice-list ipatterns)) + (normalized (cdr tem))) + (or (rng-intern-choice-shortcut normalized) + (rng-intern-choice1 normalized (car tem)))))) + +(defun rng-intern-optional (ipattern) + (cond ((rng-ipattern-get-nullable ipattern) ipattern) + ((eq ipattern rng-not-allowed-ipattern) rng-empty-ipattern) + (t (rng-intern-choice1 + ;; This is sorted since the empty pattern + ;; is before everything except not allowed. + ;; It cannot have a duplicate empty pattern, + ;; since it is not nullable. + (cons rng-empty-ipattern + (if (eq (rng-ipattern-get-type ipattern) 'choice) + (rng-ipattern-get-child ipattern) + (list ipattern))) + t)))) + + +(defun rng-intern-choice1 (normalized nullable) + (let ((key (cons 'choice + (mapcar 'rng-ipattern-get-index normalized)))) + (or (rng-get-ipattern key) + (rng-put-ipattern key + 'choice + nil + normalized + nullable)))) + +(defun rng-intern-choice-shortcut (ipatterns) + "Try to shortcut interning a choice list. If successful, return the +interned pattern. Otherwise return nil." + (while (and ipatterns + (eq (car ipatterns) + rng-not-allowed-ipattern)) + (setq ipatterns (cdr ipatterns))) + (if ipatterns + (let ((ret (car ipatterns))) + (setq ipatterns (cdr ipatterns)) + (while (and ipatterns ret) + (or (eq (car ipatterns) rng-not-allowed-ipattern) + (eq (car ipatterns) ret) + (setq ret nil)) + (setq ipatterns (cdr ipatterns))) + ret) + rng-not-allowed-ipattern)) + +(defun rng-normalize-choice-list (ipatterns) + "Normalize a list of choices, expanding nested choices, removing +not-allowed members, sorting by index and removing duplicates. Return +a pair whose car says whether the list is nullable and whose cdr is +the normalized list." + (let ((sorted t) + (nullable nil) + (head (cons nil ipatterns))) + (let ((tail head) + (final-tail nil) + (prev-index -100) + (cur ipatterns) + member) + ;; the cdr of tail is always cur + (while cur + (setq member (car cur)) + (or nullable + (setq nullable (rng-ipattern-get-nullable member))) + (cond ((eq (rng-ipattern-get-type member) 'choice) + (setq final-tail + (append (rng-ipattern-get-child member) + final-tail)) + (setq cur (cdr cur)) + (setq sorted nil) + (setcdr tail cur)) + ((eq member rng-not-allowed-ipattern) + (setq cur (cdr cur)) + (setcdr tail cur)) + (t + (if (and sorted + (let ((cur-index (rng-ipattern-get-index member))) + (if (>= prev-index cur-index) + (or (= prev-index cur-index) ; will remove it + (setq sorted nil)) ; won't remove it + (setq prev-index cur-index) + ;; won't remove it + nil))) + (progn + ;; remove it + (setq cur (cdr cur)) + (setcdr tail cur)) + ;; don't remove it + (setq tail cur) + (setq cur (cdr cur)))))) + (setcdr tail final-tail)) + (setq head (cdr head)) + (cons nullable + (if sorted + head + (rng-uniquify-eq (sort head 'rng-compare-ipattern)))))) + +(defun rng-compare-ipattern (p1 p2) + (< (rng-ipattern-get-index p1) + (rng-ipattern-get-index p2))) + +;;; Name classes + +(defsubst rng-name-class-contains (nc nm) + (if (consp nc) + (equal nm nc) + (rng-name-class-contains1 nc nm))) + +(defun rng-name-class-contains1 (nc nm) + (let ((type (aref nc 0))) + (cond ((eq type 'any-name) t) + ((eq type 'any-name-except) + (not (rng-name-class-contains (aref nc 1) nm))) + ((eq type 'ns-name) + (eq (car nm) (aref nc 1))) + ((eq type 'ns-name-except) + (and (eq (car nm) (aref nc 1)) + (not (rng-name-class-contains (aref nc 2) nm)))) + ((eq type 'choice) + (let ((choices (aref nc 1)) + (ret nil)) + (while choices + (if (rng-name-class-contains (car choices) nm) + (progn + (setq choices nil) + (setq ret t)) + (setq choices (cdr choices)))) + ret))))) + +(defun rng-name-class-possible-names (nc accum) + "Return a list of possible names that nameclass NC can match. + +Each possible name should be returned as a (NAMESPACE . LOCAL-NAME) +pair, where NAMESPACE is a symbol or nil and LOCAL-NAME is a string. +nil for NAMESPACE matches the absent namespace. ACCUM is a list of +names which should be appended to the returned list. The returned list +may contain duplicates." + (if (consp nc) + (cons nc accum) + (when (eq (aref nc 0) 'choice) + (let ((members (aref nc 1)) member) + (while members + (setq member (car members)) + (setq accum + (if (consp member) + (cons member accum) + (rng-name-class-possible-names member + accum))) + (setq members (cdr members))))) + accum)) + +;;; Debugging utilities + +(defun rng-ipattern-to-string (ipattern) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((eq type 'after) + (concat (rng-ipattern-to-string + (rng-ipattern-get-child ipattern)) + " </> " + (rng-ipattern-to-string + (rng-ipattern-get-after ipattern)))) + ((eq type 'element) + (concat "element " + (rng-name-class-to-string + (rng-ipattern-get-name-class ipattern)) + ;; we can get cycles with elements so don't print it out + " {...}")) + ((eq type 'attribute) + (concat "attribute " + (rng-name-class-to-string + (rng-ipattern-get-name-class ipattern)) + " { " + (rng-ipattern-to-string + (rng-ipattern-get-child ipattern)) + " } ")) + ((eq type 'empty) "empty") + ((eq type 'text) "text") + ((eq type 'not-allowed) "notAllowed") + ((eq type 'one-or-more) + (concat (rng-ipattern-to-string + (rng-ipattern-get-child ipattern)) + "+")) + ((eq type 'choice) + (concat "(" + (mapconcat 'rng-ipattern-to-string + (rng-ipattern-get-child ipattern) + " | ") + ")")) + ((eq type 'group) + (concat "(" + (mapconcat 'rng-ipattern-to-string + (rng-ipattern-get-child ipattern) + ", ") + ")")) + ((eq type 'interleave) + (concat "(" + (mapconcat 'rng-ipattern-to-string + (rng-ipattern-get-child ipattern) + " & ") + ")")) + (t (symbol-name type))))) + +(defun rng-name-class-to-string (nc) + (if (consp nc) + (cdr nc) + (let ((type (aref nc 0))) + (cond ((eq type 'choice) + (mapconcat 'rng-name-class-to-string + (aref nc 1) + "|")) + (t (concat (symbol-name type) "*")))))) + + +;;; Compiling + +(defun rng-compile-maybe-init () + (unless rng-compile-table + (setq rng-compile-table (make-hash-table :test 'eq)))) + +(defun rng-compile-clear () + (when rng-compile-table + (clrhash rng-compile-table))) + +(defun rng-compile (pattern) + (or (gethash pattern rng-compile-table) + (let ((ipattern (apply (get (car pattern) 'rng-compile) + (cdr pattern)))) + (puthash pattern ipattern rng-compile-table) + ipattern))) + +(put 'empty 'rng-compile 'rng-compile-empty) +(put 'text 'rng-compile 'rng-compile-text) +(put 'not-allowed 'rng-compile 'rng-compile-not-allowed) +(put 'element 'rng-compile 'rng-compile-element) +(put 'attribute 'rng-compile 'rng-compile-attribute) +(put 'choice 'rng-compile 'rng-compile-choice) +(put 'optional 'rng-compile 'rng-compile-optional) +(put 'group 'rng-compile 'rng-compile-group) +(put 'interleave 'rng-compile 'rng-compile-interleave) +(put 'ref 'rng-compile 'rng-compile-ref) +(put 'one-or-more 'rng-compile 'rng-compile-one-or-more) +(put 'zero-or-more 'rng-compile 'rng-compile-zero-or-more) +(put 'mixed 'rng-compile 'rng-compile-mixed) +(put 'data 'rng-compile 'rng-compile-data) +(put 'data-except 'rng-compile 'rng-compile-data-except) +(put 'value 'rng-compile 'rng-compile-value) +(put 'list 'rng-compile 'rng-compile-list) + +(defun rng-compile-not-allowed () rng-not-allowed-ipattern) +(defun rng-compile-empty () rng-empty-ipattern) +(defun rng-compile-text () rng-text-ipattern) + +(defun rng-compile-element (name-class pattern) + ;; don't intern + (rng-make-ipattern 'element + (rng-gen-ipattern-index) + (rng-compile-name-class name-class) + pattern ; compile lazily + nil)) + +(defun rng-element-get-child (element) + (let ((tem (rng-ipattern-get-child element))) + (if (vectorp tem) + tem + (rng-ipattern-set-child element (rng-compile tem))))) + +(defun rng-compile-attribute (name-class pattern) + (rng-intern-attribute (rng-compile-name-class name-class) + (rng-compile pattern))) + +(defun rng-compile-ref (pattern name) + (and (memq pattern rng-being-compiled) + (rng-compile-error "Reference loop on symbol %s" name)) + (setq rng-being-compiled + (cons pattern rng-being-compiled)) + (unwind-protect + (rng-compile pattern) + (setq rng-being-compiled + (cdr rng-being-compiled)))) + +(defun rng-compile-one-or-more (pattern) + (rng-intern-one-or-more (rng-compile pattern))) + +(defun rng-compile-zero-or-more (pattern) + (rng-intern-optional + (rng-intern-one-or-more (rng-compile pattern)))) + +(defun rng-compile-optional (pattern) + (rng-intern-optional (rng-compile pattern))) + +(defun rng-compile-mixed (pattern) + (rng-intern-interleave (cons rng-text-ipattern + (list (rng-compile pattern))))) + +(defun rng-compile-list (pattern) + (rng-intern-list (rng-compile pattern))) + +(defun rng-compile-choice (&rest patterns) + (rng-intern-choice (mapcar 'rng-compile patterns))) + +(defun rng-compile-group (&rest patterns) + (rng-intern-group (mapcar 'rng-compile patterns))) + +(defun rng-compile-interleave (&rest patterns) + (rng-intern-interleave (mapcar 'rng-compile patterns))) + +(defun rng-compile-dt (name params) + (let ((rng-dt-error-reporter 'rng-compile-error)) + (funcall (let ((uri (car name))) + (or (get uri 'rng-dt-compile) + (rng-compile-error "Unknown datatype library %s" uri))) + (cdr name) + params))) + +(defun rng-compile-data (name params) + (let ((dt (rng-compile-dt name params))) + (rng-intern-data (cdr dt) (car dt)))) + +(defun rng-compile-data-except (name params pattern) + (rng-intern-data-except (cdr (rng-compile-dt name params)) + (rng-compile pattern))) + +(defun rng-compile-value (name str context) + (let* ((dt (cdr (rng-compile-dt name '()))) + (rng-dt-namespace-context-getter (list 'identity context)) + (obj (rng-dt-make-value dt str))) + (if obj + (rng-intern-value dt obj) + (rng-compile-error "Value %s is not a valid instance of the datatype %s" + str + name)))) + +(defun rng-compile-name-class (nc) + (let ((type (car nc))) + (cond ((eq type 'name) (nth 1 nc)) + ((eq type 'any-name) [any-name]) + ((eq type 'any-name-except) + (vector 'any-name-except + (rng-compile-name-class (nth 1 nc)))) + ((eq type 'ns-name) + (vector 'ns-name (nth 1 nc))) + ((eq type 'ns-name-except) + (vector 'ns-name-except + (nth 1 nc) + (rng-compile-name-class (nth 2 nc)))) + ((eq type 'choice) + (vector 'choice + (mapcar 'rng-compile-name-class (cdr nc)))) + (t (error "Bad name-class type %s" type))))) + +;;; Searching patterns + +;; We write this non-recursively to avoid hitting max-lisp-eval-depth +;; on large schemas. + +(defun rng-map-element-attribute (function pattern accum &rest args) + (let ((searched (make-hash-table :test 'eq)) + type todo patterns) + (while (progn + (setq type (car pattern)) + (cond ((memq type '(element attribute)) + (setq accum + (apply function + (cons pattern + (cons accum args)))) + (setq pattern (nth 2 pattern))) + ((eq type 'ref) + (setq pattern (nth 1 pattern)) + (if (gethash pattern searched) + (setq pattern nil) + (puthash pattern t searched))) + ((memq type '(choice group interleave)) + (setq todo (cons (cdr pattern) todo)) + (setq pattern nil)) + ((memq type '(one-or-more + zero-or-more + optional + mixed)) + (setq pattern (nth 1 pattern))) + (t (setq pattern nil))) + (cond (pattern) + (patterns + (setq pattern (car patterns)) + (setq patterns (cdr patterns)) + t) + (todo + (setq patterns (car todo)) + (setq todo (cdr todo)) + (setq pattern (car patterns)) + (setq patterns (cdr patterns)) + t)))) + accum)) + +(defun rng-find-element-content-pattern (pattern accum name) + (if (and (eq (car pattern) 'element) + (rng-search-name name (nth 1 pattern))) + (cons (rng-compile (nth 2 pattern)) accum) + accum)) + +(defun rng-search-name (name nc) + (let ((type (car nc))) + (cond ((eq type 'name) + (equal (cadr nc) name)) + ((eq type 'choice) + (let ((choices (cdr nc)) + (found nil)) + (while (and choices (not found)) + (if (rng-search-name name (car choices)) + (setq found t) + (setq choices (cdr choices)))) + found)) + (t nil)))) + +(defun rng-find-name-class-uris (nc accum) + (let ((type (car nc))) + (cond ((eq type 'name) + (rng-accum-namespace-uri (car (nth 1 nc)) accum)) + ((memq type '(ns-name ns-name-except)) + (rng-accum-namespace-uri (nth 1 nc) accum)) + ((eq type 'choice) + (let ((choices (cdr nc))) + (while choices + (setq accum + (rng-find-name-class-uris (car choices) accum)) + (setq choices (cdr choices)))) + accum) + (t accum)))) + +(defun rng-accum-namespace-uri (ns accum) + (if (and ns (not (memq ns accum))) + (cons ns accum) + accum)) + +;;; Derivatives + +(defun rng-ipattern-text-typed-p (ipattern) + (let ((memo (rng-ipattern-get-memo-text-typed ipattern))) + (if (eq memo 'unknown) + (rng-ipattern-set-memo-text-typed + ipattern + (rng-ipattern-compute-text-typed-p ipattern)) + memo))) + +(defun rng-ipattern-compute-text-typed-p (ipattern) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((eq type 'choice) + (let ((cur (rng-ipattern-get-child ipattern)) + (ret nil)) + (while (and cur (not ret)) + (if (rng-ipattern-text-typed-p (car cur)) + (setq ret t) + (setq cur (cdr cur)))) + ret)) + ((eq type 'group) + (let ((cur (rng-ipattern-get-child ipattern)) + (ret nil) + member) + (while (and cur (not ret)) + (setq member (car cur)) + (if (rng-ipattern-text-typed-p member) + (setq ret t)) + (setq cur + (and (rng-ipattern-get-nullable member) + (cdr cur)))) + ret)) + ((eq type 'after) + (rng-ipattern-text-typed-p (rng-ipattern-get-child ipattern))) + (t (and (memq type '(value list data data-except)) t))))) + +(defun rng-start-tag-open-deriv (ipattern nm) + (or (rng-memo-map-get + nm + (rng-ipattern-get-memo-map-start-tag-open-deriv ipattern)) + (rng-ipattern-memo-start-tag-open-deriv + ipattern + nm + (rng-compute-start-tag-open-deriv ipattern nm)))) + +(defun rng-ipattern-memo-start-tag-open-deriv (ipattern nm deriv) + (or (memq ipattern rng-const-ipatterns) + (rng-ipattern-set-memo-map-start-tag-open-deriv + ipattern + (rng-memo-map-add nm + deriv + (rng-ipattern-get-memo-map-start-tag-open-deriv + ipattern)))) + deriv) + +(defun rng-compute-start-tag-open-deriv (ipattern nm) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((eq type 'choice) + (rng-transform-choice `(lambda (p) + (rng-start-tag-open-deriv p ',nm)) + ipattern)) + ((eq type 'element) + (if (rng-name-class-contains + (rng-ipattern-get-name-class ipattern) + nm) + (rng-intern-after (rng-element-get-child ipattern) + rng-empty-ipattern) + rng-not-allowed-ipattern)) + ((eq type 'group) + (rng-transform-group-nullable + `(lambda (p) (rng-start-tag-open-deriv p ',nm)) + 'rng-cons-group-after + ipattern)) + ((eq type 'interleave) + (rng-transform-interleave-single + `(lambda (p) (rng-start-tag-open-deriv p ',nm)) + 'rng-subst-interleave-after + ipattern)) + ((eq type 'one-or-more) + (rng-apply-after + `(lambda (p) + (rng-intern-group (list p ,(rng-intern-optional ipattern)))) + (rng-start-tag-open-deriv (rng-ipattern-get-child ipattern) + nm))) + ((eq type 'after) + (rng-apply-after + `(lambda (p) + (rng-intern-after p + ,(rng-ipattern-get-after ipattern))) + (rng-start-tag-open-deriv (rng-ipattern-get-child ipattern) + nm))) + (t rng-not-allowed-ipattern)))) + +(defun rng-start-attribute-deriv (ipattern nm) + (or (rng-memo-map-get + nm + (rng-ipattern-get-memo-map-start-attribute-deriv ipattern)) + (rng-ipattern-memo-start-attribute-deriv + ipattern + nm + (rng-compute-start-attribute-deriv ipattern nm)))) + +(defun rng-ipattern-memo-start-attribute-deriv (ipattern nm deriv) + (or (memq ipattern rng-const-ipatterns) + (rng-ipattern-set-memo-map-start-attribute-deriv + ipattern + (rng-memo-map-add + nm + deriv + (rng-ipattern-get-memo-map-start-attribute-deriv ipattern)))) + deriv) + +(defun rng-compute-start-attribute-deriv (ipattern nm) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((eq type 'choice) + (rng-transform-choice `(lambda (p) + (rng-start-attribute-deriv p ',nm)) + ipattern)) + ((eq type 'attribute) + (if (rng-name-class-contains + (rng-ipattern-get-name-class ipattern) + nm) + (rng-intern-after (rng-ipattern-get-child ipattern) + rng-empty-ipattern) + rng-not-allowed-ipattern)) + ((eq type 'group) + (rng-transform-interleave-single + `(lambda (p) (rng-start-attribute-deriv p ',nm)) + 'rng-subst-group-after + ipattern)) + ((eq type 'interleave) + (rng-transform-interleave-single + `(lambda (p) (rng-start-attribute-deriv p ',nm)) + 'rng-subst-interleave-after + ipattern)) + ((eq type 'one-or-more) + (rng-apply-after + `(lambda (p) + (rng-intern-group (list p ,(rng-intern-optional ipattern)))) + (rng-start-attribute-deriv (rng-ipattern-get-child ipattern) + nm))) + ((eq type 'after) + (rng-apply-after + `(lambda (p) + (rng-intern-after p ,(rng-ipattern-get-after ipattern))) + (rng-start-attribute-deriv (rng-ipattern-get-child ipattern) + nm))) + (t rng-not-allowed-ipattern)))) + +(defun rng-cons-group-after (x y) + (rng-apply-after `(lambda (p) (rng-intern-group (cons p ',y))) + x)) + +(defun rng-subst-group-after (new old list) + (rng-apply-after `(lambda (p) + (rng-intern-group (rng-substq p ,old ',list))) + new)) + +(defun rng-subst-interleave-after (new old list) + (rng-apply-after `(lambda (p) + (rng-intern-interleave (rng-substq p ,old ',list))) + new)) + +(defun rng-apply-after (f ipattern) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((eq type 'after) + (rng-intern-after + (rng-ipattern-get-child ipattern) + (funcall f + (rng-ipattern-get-after ipattern)))) + ((eq type 'choice) + (rng-transform-choice `(lambda (x) (rng-apply-after ,f x)) + ipattern)) + (t rng-not-allowed-ipattern)))) + +(defun rng-start-tag-close-deriv (ipattern) + (or (rng-ipattern-get-memo-start-tag-close-deriv ipattern) + (rng-ipattern-set-memo-start-tag-close-deriv + ipattern + (rng-compute-start-tag-close-deriv ipattern)))) + +(defconst rng-transform-map + '((choice . rng-transform-choice) + (group . rng-transform-group) + (interleave . rng-transform-interleave) + (one-or-more . rng-transform-one-or-more) + (after . rng-transform-after-child))) + +(defun rng-compute-start-tag-close-deriv (ipattern) + (let* ((type (rng-ipattern-get-type ipattern))) + (if (eq type 'attribute) + rng-not-allowed-ipattern + (let ((transform (assq type rng-transform-map))) + (if transform + (funcall (cdr transform) + 'rng-start-tag-close-deriv + ipattern) + ipattern))))) + +(defun rng-ignore-attributes-deriv (ipattern) + (let* ((type (rng-ipattern-get-type ipattern))) + (if (eq type 'attribute) + rng-empty-ipattern + (let ((transform (assq type rng-transform-map))) + (if transform + (funcall (cdr transform) + 'rng-ignore-attributes-deriv + ipattern) + ipattern))))) + +(defun rng-text-only-deriv (ipattern) + (or (rng-ipattern-get-memo-text-only-deriv ipattern) + (rng-ipattern-set-memo-text-only-deriv + ipattern + (rng-compute-text-only-deriv ipattern)))) + +(defun rng-compute-text-only-deriv (ipattern) + (let* ((type (rng-ipattern-get-type ipattern))) + (if (eq type 'element) + rng-not-allowed-ipattern + (let ((transform (assq type + '((choice . rng-transform-choice) + (group . rng-transform-group) + (interleave . rng-transform-interleave) + (one-or-more . rng-transform-one-or-more) + (after . rng-transform-after-child))))) + (if transform + (funcall (cdr transform) + 'rng-text-only-deriv + ipattern) + ipattern))))) + +(defun rng-mixed-text-deriv (ipattern) + (or (rng-ipattern-get-memo-mixed-text-deriv ipattern) + (rng-ipattern-set-memo-mixed-text-deriv + ipattern + (rng-compute-mixed-text-deriv ipattern)))) + +(defun rng-compute-mixed-text-deriv (ipattern) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((eq type 'text) ipattern) + ((eq type 'after) + (rng-transform-after-child 'rng-mixed-text-deriv + ipattern)) + ((eq type 'choice) + (rng-transform-choice 'rng-mixed-text-deriv + ipattern)) + ((eq type 'one-or-more) + (rng-intern-group + (list (rng-mixed-text-deriv + (rng-ipattern-get-child ipattern)) + (rng-intern-optional ipattern)))) + ((eq type 'group) + (rng-transform-group-nullable + 'rng-mixed-text-deriv + (lambda (x y) (rng-intern-group (cons x y))) + ipattern)) + ((eq type 'interleave) + (rng-transform-interleave-single + 'rng-mixed-text-deriv + (lambda (new old list) (rng-intern-interleave + (rng-substq new old list))) + ipattern)) + ((and (eq type 'data) + (not (rng-ipattern-get-memo-text-typed ipattern))) + ipattern) + (t rng-not-allowed-ipattern)))) + +(defun rng-end-tag-deriv (ipattern) + (or (rng-ipattern-get-memo-end-tag-deriv ipattern) + (rng-ipattern-set-memo-end-tag-deriv + ipattern + (rng-compute-end-tag-deriv ipattern)))) + +(defun rng-compute-end-tag-deriv (ipattern) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((eq type 'choice) + (rng-intern-choice + (mapcar 'rng-end-tag-deriv + (rng-ipattern-get-child ipattern)))) + ((eq type 'after) + (if (rng-ipattern-get-nullable + (rng-ipattern-get-child ipattern)) + (rng-ipattern-get-after ipattern) + rng-not-allowed-ipattern)) + (t rng-not-allowed-ipattern)))) + +(defun rng-data-deriv (ipattern value) + (or (rng-memo-map-get value + (rng-ipattern-get-memo-map-data-deriv ipattern)) + (and (rng-memo-map-get + (cons value (rng-namespace-context-get-no-trace)) + (rng-ipattern-get-memo-map-data-deriv ipattern)) + (rng-memo-map-get + (cons value (apply (car rng-dt-namespace-context-getter) + (cdr rng-dt-namespace-context-getter))) + (rng-ipattern-get-memo-map-data-deriv ipattern))) + (let* ((used-context (vector nil)) + (rng-dt-namespace-context-getter + (cons 'rng-namespace-context-tracer + (cons used-context + rng-dt-namespace-context-getter))) + (deriv (rng-compute-data-deriv ipattern value))) + (rng-ipattern-memo-data-deriv ipattern + value + (aref used-context 0) + deriv)))) + +(defun rng-namespace-context-tracer (used getter &rest args) + (let ((context (apply getter args))) + (aset used 0 context) + context)) + +(defun rng-namespace-context-get-no-trace () + (let ((tem rng-dt-namespace-context-getter)) + (while (and tem (eq (car tem) 'rng-namespace-context-tracer)) + (setq tem (cddr tem))) + (apply (car tem) (cdr tem)))) + +(defconst rng-memo-data-deriv-max-length 80 + "Don't memoize data-derivs for values longer than this.") + +(defun rng-ipattern-memo-data-deriv (ipattern value context deriv) + (or (memq ipattern rng-const-ipatterns) + (> (length value) rng-memo-data-deriv-max-length) + (rng-ipattern-set-memo-map-data-deriv + ipattern + (rng-memo-map-add (if context (cons value context) value) + deriv + (rng-ipattern-get-memo-map-data-deriv ipattern) + t))) + deriv) + +(defun rng-compute-data-deriv (ipattern value) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((eq type 'text) ipattern) + ((eq type 'choice) + (rng-transform-choice `(lambda (p) (rng-data-deriv p ,value)) + ipattern)) + ((eq type 'group) + (rng-transform-group-nullable + `(lambda (p) (rng-data-deriv p ,value)) + (lambda (x y) (rng-intern-group (cons x y))) + ipattern)) + ((eq type 'one-or-more) + (rng-intern-group (list (rng-data-deriv + (rng-ipattern-get-child ipattern) + value) + (rng-intern-optional ipattern)))) + ((eq type 'after) + (let ((child (rng-ipattern-get-child ipattern))) + (if (or (rng-ipattern-get-nullable + (rng-data-deriv child value)) + (and (rng-ipattern-get-nullable child) + (rng-blank-p value))) + (rng-ipattern-get-after ipattern) + rng-not-allowed-ipattern))) + ((eq type 'data) + (if (rng-dt-make-value (rng-ipattern-get-datatype ipattern) + value) + rng-empty-ipattern + rng-not-allowed-ipattern)) + ((eq type 'data-except) + (if (and (rng-dt-make-value (rng-ipattern-get-datatype ipattern) + value) + (not (rng-ipattern-get-nullable + (rng-data-deriv + (rng-ipattern-get-child ipattern) + value)))) + rng-empty-ipattern + rng-not-allowed-ipattern)) + ((eq type 'value) + (if (equal (rng-dt-make-value (rng-ipattern-get-datatype ipattern) + value) + (rng-ipattern-get-value-object ipattern)) + rng-empty-ipattern + rng-not-allowed-ipattern)) + ((eq type 'list) + (let ((tokens (split-string value)) + (state (rng-ipattern-get-child ipattern))) + (while (and tokens + (not (eq state rng-not-allowed-ipattern))) + (setq state (rng-data-deriv state (car tokens))) + (setq tokens (cdr tokens))) + (if (rng-ipattern-get-nullable state) + rng-empty-ipattern + rng-not-allowed-ipattern))) + ;; don't think interleave can occur + ;; since we do text-only-deriv first + (t rng-not-allowed-ipattern)))) + +(defun rng-transform-multi (f ipattern interner) + (let* ((members (rng-ipattern-get-child ipattern)) + (transformed (mapcar f members))) + (if (rng-members-eq members transformed) + ipattern + (funcall interner transformed)))) + +(defun rng-transform-choice (f ipattern) + (rng-transform-multi f ipattern 'rng-intern-choice)) + +(defun rng-transform-group (f ipattern) + (rng-transform-multi f ipattern 'rng-intern-group)) + +(defun rng-transform-interleave (f ipattern) + (rng-transform-multi f ipattern 'rng-intern-interleave)) + +(defun rng-transform-one-or-more (f ipattern) + (let* ((child (rng-ipattern-get-child ipattern)) + (transformed (funcall f child))) + (if (eq child transformed) + ipattern + (rng-intern-one-or-more transformed)))) + +(defun rng-transform-after-child (f ipattern) + (let* ((child (rng-ipattern-get-child ipattern)) + (transformed (funcall f child))) + (if (eq child transformed) + ipattern + (rng-intern-after transformed + (rng-ipattern-get-after ipattern))))) + +(defun rng-transform-interleave-single (f subster ipattern) + (let ((children (rng-ipattern-get-child ipattern)) + found) + (while (and children (not found)) + (let* ((child (car children)) + (transformed (funcall f child))) + (if (eq transformed rng-not-allowed-ipattern) + (setq children (cdr children)) + (setq found + (funcall subster + transformed + child + (rng-ipattern-get-child ipattern)))))) + (or found + rng-not-allowed-ipattern))) + +(defun rng-transform-group-nullable (f conser ipattern) + "Given a group x1,...,xn,y1,...,yn where the xs are all +nullable and y1 isn't, return a choice + (conser f(x1) x2,...,xm,y1,...,yn) + |(conser f(x2) x3,...,xm,y1,...,yn) + |... + |(conser f(xm) y1,...,yn) + |(conser f(y1) y2,...,yn)" + (rng-intern-choice + (rng-transform-group-nullable-gen-choices + f + conser + (rng-ipattern-get-child ipattern)))) + +(defun rng-transform-group-nullable-gen-choices (f conser members) + (let ((head (car members)) + (tail (cdr members))) + (if tail + (cons (funcall conser (funcall f head) tail) + (if (rng-ipattern-get-nullable head) + (rng-transform-group-nullable-gen-choices f conser tail) + nil)) + (list (funcall f head))))) + +(defun rng-members-eq (list1 list2) + (while (and list1 + list2 + (eq (car list1) (car list2))) + (setq list1 (cdr list1)) + (setq list2 (cdr list2))) + (and (null list1) (null list2))) + + +(defun rng-ipattern-after (ipattern) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((eq type 'choice) + (rng-transform-choice 'rng-ipattern-after ipattern)) + ((eq type 'after) + (rng-ipattern-get-after ipattern)) + ((eq type 'not-allowed) + ipattern) + (t (error "Internal error in rng-ipattern-after: unexpected type %s" type))))) + +(defun rng-unknown-start-tag-open-deriv (ipattern) + (rng-intern-after (rng-compile rng-any-content) ipattern)) + +(defun rng-ipattern-optionalize-elements (ipattern) + (let* ((type (rng-ipattern-get-type ipattern)) + (transform (assq type rng-transform-map))) + (cond (transform + (funcall (cdr transform) + 'rng-ipattern-optionalize-elements + ipattern)) + ((eq type 'element) + (rng-intern-optional ipattern)) + (t ipattern)))) + +(defun rng-ipattern-empty-before-p (ipattern) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((eq type 'after) + (eq (rng-ipattern-get-child ipattern) rng-empty-ipattern)) + ((eq type 'choice) + (let ((members (rng-ipattern-get-child ipattern)) + (ret t)) + (while (and members ret) + (or (rng-ipattern-empty-before-p (car members)) + (setq ret nil)) + (setq members (cdr members))) + ret)) + (t nil)))) + +(defun rng-ipattern-possible-start-tags (ipattern accum) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((eq type 'after) + (rng-ipattern-possible-start-tags + (rng-ipattern-get-child ipattern) + accum)) + ((memq type '(choice interleave)) + (let ((members (rng-ipattern-get-child ipattern))) + (while members + (setq accum + (rng-ipattern-possible-start-tags (car members) + accum)) + (setq members (cdr members)))) + accum) + ((eq type 'group) + (let ((members (rng-ipattern-get-child ipattern))) + (while members + (setq accum + (rng-ipattern-possible-start-tags (car members) + accum)) + (setq members + (and (rng-ipattern-get-nullable (car members)) + (cdr members))))) + accum) + ((eq type 'element) + (if (eq (rng-element-get-child ipattern) rng-not-allowed-ipattern) + accum + (rng-name-class-possible-names + (rng-ipattern-get-name-class ipattern) + accum))) + ((eq type 'one-or-more) + (rng-ipattern-possible-start-tags + (rng-ipattern-get-child ipattern) + accum)) + (t accum)))) + +(defun rng-ipattern-start-tag-possible-p (ipattern) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((memq type '(after one-or-more)) + (rng-ipattern-start-tag-possible-p + (rng-ipattern-get-child ipattern))) + ((memq type '(choice interleave)) + (let ((members (rng-ipattern-get-child ipattern)) + (possible nil)) + (while (and members (not possible)) + (setq possible + (rng-ipattern-start-tag-possible-p (car members))) + (setq members (cdr members))) + possible)) + ((eq type 'group) + (let ((members (rng-ipattern-get-child ipattern)) + (possible nil)) + (while (and members (not possible)) + (setq possible + (rng-ipattern-start-tag-possible-p (car members))) + (setq members + (and (rng-ipattern-get-nullable (car members)) + (cdr members)))) + possible)) + ((eq type 'element) + (not (eq (rng-element-get-child ipattern) + rng-not-allowed-ipattern))) + (t nil)))) + +(defun rng-ipattern-possible-attributes (ipattern accum) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((eq type 'after) + (rng-ipattern-possible-attributes (rng-ipattern-get-child ipattern) + accum)) + ((memq type '(choice interleave group)) + (let ((members (rng-ipattern-get-child ipattern))) + (while members + (setq accum + (rng-ipattern-possible-attributes (car members) + accum)) + (setq members (cdr members)))) + accum) + ((eq type 'attribute) + (rng-name-class-possible-names + (rng-ipattern-get-name-class ipattern) + accum)) + ((eq type 'one-or-more) + (rng-ipattern-possible-attributes + (rng-ipattern-get-child ipattern) + accum)) + (t accum)))) + +(defun rng-ipattern-possible-values (ipattern accum) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((eq type 'after) + (rng-ipattern-possible-values (rng-ipattern-get-child ipattern) + accum)) + ((eq type 'choice) + (let ((members (rng-ipattern-get-child ipattern))) + (while members + (setq accum + (rng-ipattern-possible-values (car members) + accum)) + (setq members (cdr members)))) + accum) + ((eq type 'value) + (let ((value-object (rng-ipattern-get-value-object ipattern))) + (if (stringp value-object) + (cons value-object accum) + accum))) + (t accum)))) + +(defun rng-ipattern-required-element (ipattern) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((memq type '(after one-or-more)) + (rng-ipattern-required-element (rng-ipattern-get-child ipattern))) + ((eq type 'choice) + (let* ((members (rng-ipattern-get-child ipattern)) + (required (rng-ipattern-required-element (car members)))) + (while (and required + (setq members (cdr members))) + (unless (equal required + (rng-ipattern-required-element (car members))) + (setq required nil))) + required)) + ((eq type 'group) + (let ((members (rng-ipattern-get-child ipattern)) + required) + (while (and (not (setq required + (rng-ipattern-required-element + (car members)))) + (rng-ipattern-get-nullable (car members)) + (setq members (cdr members)))) + required)) + ((eq type 'interleave) + (let ((members (rng-ipattern-get-child ipattern)) + required) + (while members + (let ((tem (rng-ipattern-required-element (car members)))) + (cond ((not tem) + (setq members (cdr members))) + ((not required) + (setq required tem) + (setq members (cdr members))) + ((equal required tem) + (setq members (cdr members))) + (t + (setq required nil) + (setq members nil))))) + required)) + ((eq type 'element) + (let ((nc (rng-ipattern-get-name-class ipattern))) + (and (consp nc) + (not (eq (rng-element-get-child ipattern) + rng-not-allowed-ipattern)) + nc)))))) + +(defun rng-ipattern-required-attributes (ipattern accum) + (let ((type (rng-ipattern-get-type ipattern))) + (cond ((eq type 'after) + (rng-ipattern-required-attributes (rng-ipattern-get-child ipattern) + accum)) + ((memq type '(interleave group)) + (let ((members (rng-ipattern-get-child ipattern))) + (while members + (setq accum + (rng-ipattern-required-attributes (car members) + accum)) + (setq members (cdr members)))) + accum) + ((eq type 'choice) + (let ((members (rng-ipattern-get-child ipattern)) + in-all in-this new-in-all) + (setq in-all + (rng-ipattern-required-attributes (car members) + nil)) + (while (and in-all (setq members (cdr members))) + (setq in-this + (rng-ipattern-required-attributes (car members) nil)) + (setq new-in-all nil) + (while in-this + (when (member (car in-this) in-all) + (setq new-in-all + (cons (car in-this) new-in-all))) + (setq in-this (cdr in-this))) + (setq in-all new-in-all)) + (append in-all accum))) + ((eq type 'attribute) + (let ((nc (rng-ipattern-get-name-class ipattern))) + (if (consp nc) + (cons nc accum) + accum))) + ((eq type 'one-or-more) + (rng-ipattern-required-attributes (rng-ipattern-get-child ipattern) + accum)) + (t accum)))) + +(defun rng-compile-error (&rest args) + (signal 'rng-compile-error + (list (apply 'format args)))) + +(put 'rng-compile-error + 'error-conditions + '(error rng-error rng-compile-error)) + +(put 'rng-compile-error + 'error-message + "Incorrect schema") + + +;;; External API + +(defsubst rng-match-state () rng-match-state) + +(defsubst rng-set-match-state (state) + (setq rng-match-state state)) + +(defsubst rng-match-state-equal (state) + (eq state rng-match-state)) + +(defun rng-schema-changed () + (rng-ipattern-clear) + (rng-compile-clear)) + +(defun rng-match-init-buffer () + (make-local-variable 'rng-compile-table) + (make-local-variable 'rng-ipattern-table) + (make-local-variable 'rng-last-ipattern-index)) + +(defun rng-match-start-document () + (rng-ipattern-maybe-init) + (rng-compile-maybe-init) + (add-hook 'rng-schema-change-hook 'rng-schema-changed nil t) + (setq rng-match-state (rng-compile rng-current-schema))) + +(defun rng-match-start-tag-open (name) + (rng-update-match-state (rng-start-tag-open-deriv rng-match-state + name))) + +(defun rng-match-attribute-name (name) + (rng-update-match-state (rng-start-attribute-deriv rng-match-state + name))) + +(defun rng-match-attribute-value (value) + (rng-update-match-state (rng-data-deriv rng-match-state + value))) + +(defun rng-match-element-value (value) + (and (rng-update-match-state (rng-text-only-deriv rng-match-state)) + (rng-update-match-state (rng-data-deriv rng-match-state + value)))) + +(defun rng-match-start-tag-close () + (rng-update-match-state (rng-start-tag-close-deriv rng-match-state))) + +(defun rng-match-mixed-text () + (rng-update-match-state (rng-mixed-text-deriv rng-match-state))) + +(defun rng-match-end-tag () + (rng-update-match-state (rng-end-tag-deriv rng-match-state))) + +(defun rng-match-after () + (rng-update-match-state + (rng-ipattern-after rng-match-state))) + +(defun rng-match-out-of-context-start-tag-open (name) + (let* ((found (rng-map-element-attribute 'rng-find-element-content-pattern + rng-current-schema + nil + name)) + (content-pattern (if found + (rng-intern-choice found) + rng-not-allowed-ipattern))) + (rng-update-match-state + (rng-intern-after content-pattern rng-match-state)))) + +(defun rng-match-possible-namespace-uris () + "Return a list of all the namespace URIs used in the current schema. +The absent URI is not included, so the result is always list of symbols." + (rng-map-element-attribute (lambda (pattern accum) + (rng-find-name-class-uris (nth 1 pattern) + accum)) + rng-current-schema + nil)) + +(defun rng-match-unknown-start-tag-open () + (rng-update-match-state + (rng-unknown-start-tag-open-deriv rng-match-state))) + +(defun rng-match-optionalize-elements () + (rng-update-match-state + (rng-ipattern-optionalize-elements rng-match-state))) + +(defun rng-match-ignore-attributes () + (rng-update-match-state + (rng-ignore-attributes-deriv rng-match-state))) + +(defun rng-match-text-typed-p () + (rng-ipattern-text-typed-p rng-match-state)) + +(defun rng-match-empty-content () + (if (rng-match-text-typed-p) + (rng-match-element-value "") + (rng-match-end-tag))) + +(defun rng-match-empty-before-p () + "Return non-nil if what can be matched before an end-tag is empty. +In other words, return non-nil if the pattern for what can be matched +for an end-tag is equivalent to empty." + (rng-ipattern-empty-before-p rng-match-state)) + +(defun rng-match-infer-start-tag-namespace (local-name) + (let ((ncs (rng-ipattern-possible-start-tags rng-match-state nil)) + (nc nil) + (ns nil)) + (while ncs + (setq nc (car ncs)) + (if (and (equal (cdr nc) local-name) + (symbolp (car nc))) + (cond ((not ns) + ;; first possible namespace + (setq ns (car nc)) + (setq ncs (cdr ncs))) + ((equal ns (car nc)) + ;; same as first namespace + (setq ncs (cdr ncs))) + (t + ;; more than one possible namespace + (setq ns nil) + (setq ncs nil))) + (setq ncs (cdr ncs)))) + ns)) + +(defun rng-match-nullable-p () + (rng-ipattern-get-nullable rng-match-state)) + +(defun rng-match-possible-start-tag-names () + "Return a list of possible names that would be valid for start-tags. + +Each possible name is returned as a (NAMESPACE . LOCAL-NAME) pair, +where NAMESPACE is a symbol or nil (meaning the absent namespace) and +LOCAL-NAME is a string. The returned list may contain duplicates." + (rng-ipattern-possible-start-tags rng-match-state nil)) + +;; This is no longer used. It might be useful so leave it in for now. +(defun rng-match-start-tag-possible-p () + "Return non-nil if a start-tag is possible." + (rng-ipattern-start-tag-possible-p rng-match-state)) + +(defun rng-match-possible-attribute-names () + "Return a list of possible names that would be valid for attributes. + +See the function `rng-match-possible-start-tag-names' for +more information." + (rng-ipattern-possible-attributes rng-match-state nil)) + +(defun rng-match-possible-value-strings () + "Return a list of strings that would be valid as content. +The list may contain duplicates. Typically, the list will not +be exhaustive." + (rng-ipattern-possible-values rng-match-state nil)) + +(defun rng-match-required-element-name () + "Return the name of an element which must occur, or nil if none." + (rng-ipattern-required-element rng-match-state)) + +(defun rng-match-required-attribute-names () + "Return a list of names of attributes which must all occur." + (rng-ipattern-required-attributes rng-match-state nil)) + +(defmacro rng-match-save (&rest body) + (let ((state (make-symbol "state"))) + `(let ((,state rng-match-state)) + (unwind-protect + (progn ,@body) + (setq rng-match-state ,state))))) + +(put 'rng-match-save 'lisp-indent-function 0) +(def-edebug-spec rng-match-save t) + +(defmacro rng-match-with-schema (schema &rest body) + `(let ((rng-current-schema ,schema) + rng-match-state + rng-compile-table + rng-ipattern-table + rng-last-ipattern-index) + (rng-ipattern-maybe-init) + (rng-compile-maybe-init) + (setq rng-match-state (rng-compile rng-current-schema)) + ,@body)) + +(put 'rng-match-with-schema 'lisp-indent-function 1) +(def-edebug-spec rng-match-with-schema t) + +(provide 'rng-match) + +;;; rng-match.el ends here
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/rng-nxml.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,591 @@ +;;; rng-nxml.el --- make nxml-mode take advantage of rng-validate-mode + +;; Copyright (C) 2003 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML, RelaxNG + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 2 of +;; the License, or (at your option) any later version. + +;; This program is distributed in the hope that it will be +;; useful, but WITHOUT ANY WARRANTY; without even the implied +;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +;; PURPOSE. See the GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public +;; License along with this program; if not, write to the Free +;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, +;; MA 02111-1307 USA + +;;; Commentary: + +;;; Code: + +(require 'easymenu) +(require 'xmltok) +(require 'nxml-util) +(require 'nxml-ns) +(require 'rng-match) +(require 'rng-util) +(require 'rng-valid) +(require 'nxml-mode) +(require 'rng-loc) + +(defcustom rng-nxml-auto-validate-flag t + "*Non-nil means automatically turn on validation with nxml-mode." + :type 'boolean + :group 'relax-ng) + +(defvar rng-preferred-prefix-alist-default nil + "Default value for variable `rng-preferred-prefix-alist'.") + +(defcustom rng-preferred-prefix-alist rng-preferred-prefix-alist-default + "*Alist of namespaces vs preferred prefixes." + :type '(repeat (cons :tag "With" + (string :tag "this namespace URI") + (string :tag "use this prefix"))) + :group 'relax-ng) + +(defvar rng-complete-end-tags-after-< t + "*Non-nil means immediately after < complete on end-tag names. +Complete on start-tag names regardless.") + +(defvar rng-nxml-easy-menu + '("XML" + ["Show Outline Only" nxml-hide-all-text-content] + ["Show Everything" nxml-show-all] + "---" + ["Validation" rng-validate-mode + :style toggle + :selected rng-validate-mode] + "---" + ("Set Schema" + ["Automatically" rng-auto-set-schema] + ("For Document Type" + :filter (lambda (menu) + (mapcar (lambda (type-id) + (vector type-id + (list 'rng-set-document-type + type-id))) + (rng-possible-type-ids)))) + ["Any Well-Formed XML" rng-set-vacuous-schema] + ["File..." rng-set-schema-file]) + ["Show Schema Location" rng-what-schema] + ["Save Schema Location" rng-save-schema-location :help + "Save the location of the schema currently being used for this buffer"] + "---" + ["First Error" rng-first-error :active rng-validate-mode] + ["Next Error" rng-next-error :active rng-validate-mode] + "---" + ["Customize nXML" (customize-group 'nxml)] + "---" + ["Show nXML Version" nxml-version])) + +;;;###autoload +(defun rng-nxml-mode-init () + "Initialize `nxml-mode' to take advantage of `rng-validate-mode'. +This is typically called from `nxml-mode-hook'. +Validation will be enabled if `rng-nxml-auto-validate-flag' is non-nil." + (interactive) + (define-key nxml-mode-map "\C-c\C-v" 'rng-validate-mode) + (define-key nxml-mode-map "\C-c\C-s\C-w" 'rng-what-schema) + (define-key nxml-mode-map "\C-c\C-s\C-a" 'rng-auto-set-schema-and-validate) + (define-key nxml-mode-map "\C-c\C-s\C-f" 'rng-set-schema-file-and-validate) + (define-key nxml-mode-map "\C-c\C-s\C-l" 'rng-save-schema-location) + (define-key nxml-mode-map "\C-c\C-s\C-t" 'rng-set-document-type-and-validate) + (define-key nxml-mode-map "\C-c\C-n" 'rng-next-error) + (easy-menu-define rng-nxml-menu nxml-mode-map + "Menu for nxml-mode used with rng-validate-mode." + rng-nxml-easy-menu) + (setq mode-line-process + '(rng-validate-mode (:eval (rng-compute-mode-line-string)))) + (cond (rng-nxml-auto-validate-flag + (rng-validate-mode 1) + (add-hook 'nxml-completion-hook 'rng-complete nil t) + (add-hook 'nxml-in-mixed-content-hook 'rng-in-mixed-content-p nil t)) + (t + (rng-validate-mode 0) + (remove-hook 'nxml-completion-hook 'rng-complete t) + (remove-hook 'nxml-in-mixed-content-hook 'rng-in-mixed-content-p t)))) + +(defvar rng-tag-history nil) +(defvar rng-attribute-name-history nil) +(defvar rng-attribute-value-history nil) + +(defvar rng-complete-target-names nil) +(defvar rng-complete-name-attribute-flag nil) +(defvar rng-complete-extra-strings nil) + +(defun rng-complete () + "Complete the string before point using the current schema. +Return non-nil if in a context it understands." + (interactive) + (and rng-validate-mode + (let ((lt-pos (save-excursion (search-backward "<" nil t))) + xmltok-dtd) + (and lt-pos + (= (rng-set-state-after lt-pos) lt-pos) + (or (rng-complete-tag lt-pos) + (rng-complete-end-tag lt-pos) + (rng-complete-attribute-name lt-pos) + (rng-complete-attribute-value lt-pos)))))) + +(defconst rng-in-start-tag-name-regex + (replace-regexp-in-string + "w" + xmltok-ncname-regexp + "<\\(?:w\\(?::w?\\)?\\)?\\=" + t + t)) + +(defun rng-complete-tag (lt-pos) + (let (rng-complete-extra-strings) + (when (and (= lt-pos (1- (point))) + rng-complete-end-tags-after-< + rng-open-elements + (not (eq (car rng-open-elements) t)) + (or rng-collecting-text + (rng-match-save + (rng-match-end-tag)))) + (setq rng-complete-extra-strings + (cons (concat "/" + (if (caar rng-open-elements) + (concat (caar rng-open-elements) + ":" + (cdar rng-open-elements)) + (cdar rng-open-elements))) + rng-complete-extra-strings))) + (when (save-excursion + (re-search-backward rng-in-start-tag-name-regex + lt-pos + t)) + (and rng-collecting-text (rng-flush-text)) + (let ((completion + (let ((rng-complete-target-names + (rng-match-possible-start-tag-names)) + (rng-complete-name-attribute-flag nil)) + (rng-complete-before-point (1+ lt-pos) + 'rng-complete-qname-function + "Tag: " + nil + 'rng-tag-history))) + name) + (when completion + (cond ((rng-qname-p completion) + (setq name (rng-expand-qname completion + t + 'rng-start-tag-expand-recover)) + (when (and name + (rng-match-start-tag-open name) + (or (not (rng-match-start-tag-close)) + ;; need a namespace decl on the root element + (and (car name) + (not rng-open-elements)))) + ;; attributes are required + (insert " "))) + ((member completion rng-complete-extra-strings) + (insert ">"))))) + t))) + +(defconst rng-in-end-tag-name-regex + (replace-regexp-in-string + "w" + xmltok-ncname-regexp + "</\\(?:w\\(?::w?\\)?\\)?\\=" + t + t)) + +(defun rng-complete-end-tag (lt-pos) + (when (save-excursion + (re-search-backward rng-in-end-tag-name-regex + lt-pos + t)) + (cond ((or (not rng-open-elements) + (eq (car rng-open-elements) t)) + (message "No matching start-tag") + (ding)) + (t + (let ((start-tag-name + (if (caar rng-open-elements) + (concat (caar rng-open-elements) + ":" + (cdar rng-open-elements)) + (cdar rng-open-elements))) + (end-tag-name + (buffer-substring-no-properties (+ (match-beginning 0) 2) + (point)))) + (cond ((or (> (length end-tag-name) + (length start-tag-name)) + (not (string= (substring start-tag-name + 0 + (length end-tag-name)) + end-tag-name))) + (message "Expected end-tag %s" + (rng-quote-string + (concat "</" start-tag-name ">"))) + (ding)) + (t + (delete-region (- (point) (length end-tag-name)) + (point)) + (insert start-tag-name ">") + (when (not (or rng-collecting-text + (rng-match-end-tag))) + (message "Element %s is incomplete" + (rng-quote-string start-tag-name)))))))) + t)) + +(defconst rng-in-attribute-regex + (replace-regexp-in-string + "w" + xmltok-ncname-regexp + "<w\\(?::w\\)?\ +\\(?:[ \t\r\n]+w\\(?::w\\)?[ \t\r\n]*=\ +[ \t\r\n]*\\(?:\"[^\"]*\"\\|'[^']*'\\)\\)*\ +[ \t\r\n]+\\(\\(?:w\\(?::w?\\)?\\)?\\)\\=" + t + t)) + +(defvar rng-undeclared-prefixes nil) + +(defun rng-complete-attribute-name (lt-pos) + (when (save-excursion + (re-search-backward rng-in-attribute-regex lt-pos t)) + (let ((attribute-start (match-beginning 1)) + rng-undeclared-prefixes) + (and (rng-adjust-state-for-attribute lt-pos + attribute-start) + (let ((rng-complete-target-names + (rng-match-possible-attribute-names)) + (rng-complete-extra-strings + (mapcar (lambda (prefix) + (if prefix + (concat "xmlns:" prefix) + "xmlns")) + rng-undeclared-prefixes)) + (rng-complete-name-attribute-flag t)) + (rng-complete-before-point attribute-start + 'rng-complete-qname-function + "Attribute: " + nil + 'rng-attribute-name-history)) + (insert "=\""))) + t)) + +(defconst rng-in-attribute-value-regex + (replace-regexp-in-string + "w" + xmltok-ncname-regexp + "<w\\(?::w\\)?\ +\\(?:[ \t\r\n]+w\\(?::w\\)?[ \t\r\n]*=\ +[ \t\r\n]*\\(?:\"[^\"]*\"\\|'[^']*'\\)\\)*\ +[ \t\r\n]+\\(w\\(:w\\)?\\)[ \t\r\n]*=[ \t\r\n]*\ +\\(\"[^\"]*\\|'[^']*\\)\\=" + t + t)) + +(defun rng-complete-attribute-value (lt-pos) + (when (save-excursion + (re-search-backward rng-in-attribute-value-regex lt-pos t)) + (let ((name-start (match-beginning 1)) + (name-end (match-end 1)) + (colon (match-beginning 2)) + (value-start (1+ (match-beginning 3)))) + (and (rng-adjust-state-for-attribute lt-pos + name-start) + (if (string= (buffer-substring-no-properties name-start + (or colon name-end)) + "xmlns") + (rng-complete-before-point + value-start + (rng-strings-to-completion-alist + (rng-possible-namespace-uris + (and colon + (buffer-substring-no-properties (1+ colon) name-end)))) + "Namespace URI: " + nil + 'rng-namespace-uri-history) + (rng-adjust-state-for-attribute-value name-start + colon + name-end) + (rng-complete-before-point + value-start + (rng-strings-to-completion-alist + (rng-match-possible-value-strings)) + "Value: " + nil + 'rng-attribute-value-history)) + (insert (char-before value-start)))) + t)) + +(defun rng-possible-namespace-uris (prefix) + (let ((ns (if prefix (nxml-ns-get-prefix prefix) + (nxml-ns-get-default)))) + (if (and ns (memq prefix (nxml-ns-changed-prefixes))) + (list (nxml-namespace-name ns)) + (mapcar 'nxml-namespace-name + (delq nxml-xml-namespace-uri + (rng-match-possible-namespace-uris)))))) + +(defconst rng-qname-regexp + (concat "\\`" + xmltok-ncname-regexp + "\\(?:" ":" xmltok-ncname-regexp "\\)" "?" "\\'")) + +(defun rng-qname-p (string) + (and (string-match rng-qname-regexp string) t)) + +(defun rng-expand-qname (qname &optional defaultp recover-fun) + (setq qname (rng-split-qname qname)) + (let ((prefix (car qname))) + (if prefix + (let ((ns (nxml-ns-get-prefix qname))) + (cond (ns (cons ns (cdr qname))) + (recover-fun (funcall recover-fun prefix (cdr qname))))) + (cons (and defaultp (nxml-ns-get-default)) (cdr qname))))) + +(defun rng-start-tag-expand-recover (prefix local-name) + (let ((ns (rng-match-infer-start-tag-namespace local-name))) + (and ns + (cons ns local-name)))) + +(defun rng-split-qname (qname) + (if (string-match ":" qname) + (cons (substring qname 0 (match-beginning 0)) + (substring qname (match-end 0))) + (cons nil qname))) + +(defun rng-in-mixed-content-p () + "Return non-nil if point is in mixed content. +Return nil only if point is definitely not in mixed content. +If unsure, return non-nil." + (if (eq rng-current-schema rng-any-element) + t + (rng-set-state-after) + (rng-match-mixed-text))) + +(defun rng-set-state-after (&optional pos) + "Set the state for after parsing the first token with endpoint >= POS. +This does not change the xmltok state or point. However, it does +set `xmltok-dtd'. Returns the position of the end of the token." + (unless pos (setq pos (point))) + (when (< rng-validate-up-to-date-end pos) + (message "Parsing...") + (while (and (rng-do-some-validation) + (< rng-validate-up-to-date-end pos)) + ;; Display percentage validated. + (force-mode-line-update) + ;; Force redisplay but don't allow idle timers to run. + (let ((timer-idle-list nil)) + (sit-for 0))) + (message "Parsing...done")) + (save-excursion + (save-restriction + (widen) + (nxml-with-invisible-motion + (if (= pos 1) + (rng-set-initial-state) + (let ((state (get-text-property (1- pos) 'rng-state))) + (cond (state + (rng-restore-state state) + (goto-char pos)) + (t + (let ((start (previous-single-property-change pos + 'rng-state))) + (cond (start + (rng-restore-state (get-text-property (1- start) + 'rng-state)) + (goto-char start)) + (t (rng-set-initial-state)))))))) + (xmltok-save + (if (= (point) 1) + (xmltok-forward-prolog) + (setq xmltok-dtd rng-dtd)) + (cond ((and (< pos (point)) + ;; This handles the case where the prolog ends + ;; with a < without any following name-start + ;; character. This will be treated by the parser + ;; as part of the prolog, but we want to treat + ;; it as the start of the instance. + (eq (char-after pos) ?<) + (<= (point) + (save-excursion + (goto-char (1+ pos)) + (skip-chars-forward " \t\r\n") + (point)))) + pos) + ((< (point) pos) + (let ((rng-dt-namespace-context-getter + '(nxml-ns-get-context)) + (rng-parsing-for-state t)) + (rng-forward pos)) + (point)) + (t pos))))))) + +(defun rng-adjust-state-for-attribute (lt-pos start) + (xmltok-save + (save-excursion + (goto-char lt-pos) + (when (memq (xmltok-forward) + '(start-tag + partial-start-tag + empty-element + partial-empty-element)) + (when (< start (point)) + (setq xmltok-namespace-attributes + (rng-prune-attribute-at start + xmltok-namespace-attributes)) + (setq xmltok-attributes + (rng-prune-attribute-at start + xmltok-attributes))) + (let ((rng-parsing-for-state t) + (rng-dt-namespace-context-getter '(nxml-ns-get-context))) + (rng-process-start-tag 'stop) + (rng-find-undeclared-prefixes) + t))))) + +(defun rng-find-undeclared-prefixes () + ;; Start with the newly effective namespace declarations. + ;; (Includes declarations added during recovery.) + (setq rng-undeclared-prefixes (nxml-ns-changed-prefixes)) + (let ((iter xmltok-attributes) + (ns-state (nxml-ns-state)) + att) + ;; Add namespace prefixes used in this tag, + ;; but not declared in the parent. + (nxml-ns-pop-state) + (while iter + (setq att (car iter)) + (let ((prefix (xmltok-attribute-prefix att))) + (when (and prefix + (not (member prefix rng-undeclared-prefixes)) + (not (nxml-ns-get-prefix prefix))) + (setq rng-undeclared-prefixes + (cons prefix rng-undeclared-prefixes)))) + (setq iter (cdr iter))) + (nxml-ns-set-state ns-state) + ;; Remove namespace prefixes explicitly declared. + (setq iter xmltok-namespace-attributes) + (while iter + (setq att (car iter)) + (setq rng-undeclared-prefixes + (delete (and (xmltok-attribute-prefix att) + (xmltok-attribute-local-name att)) + rng-undeclared-prefixes)) + (setq iter (cdr iter))))) + +(defun rng-prune-attribute-at (start atts) + (when atts + (let ((cur atts)) + (while (if (eq (xmltok-attribute-name-start (car cur)) start) + (progn + (setq atts (delq (car cur) atts)) + nil) + (setq cur (cdr cur))))) + atts)) + +(defun rng-adjust-state-for-attribute-value (name-start + colon + name-end) + (let* ((prefix (if colon + (buffer-substring-no-properties name-start colon) + nil)) + (local-name (buffer-substring-no-properties (if colon + (1+ colon) + name-start) + name-end)) + (ns (and prefix (nxml-ns-get-prefix prefix)))) + (and (or (not prefix) ns) + (rng-match-attribute-name (cons ns local-name))))) + +(defun rng-complete-qname-function (string predicate flag) + (let ((alist (mapcar (lambda (name) (cons name nil)) + (rng-generate-qname-list string)))) + (cond ((not flag) + (try-completion string alist predicate)) + ((eq flag t) + (all-completions string alist predicate)) + ((eq flag 'lambda) + (and (assoc string alist) t))))) + +(defun rng-generate-qname-list (&optional string) + (let ((forced-prefix (and string + (string-match ":" string) + (> (match-beginning 0) 0) + (substring string + 0 + (match-beginning 0)))) + (namespaces (mapcar 'car rng-complete-target-names)) + ns-prefixes-alist ns-prefixes iter ns prefer) + (while namespaces + (setq ns (car namespaces)) + (when ns + (setq ns-prefixes-alist + (cons (cons ns (nxml-ns-prefixes-for + ns + rng-complete-name-attribute-flag)) + ns-prefixes-alist))) + (setq namespaces (delq ns (cdr namespaces)))) + (setq iter ns-prefixes-alist) + (while iter + (setq ns-prefixes (car iter)) + (setq ns (car ns-prefixes)) + (when (null (cdr ns-prefixes)) + ;; No declared prefix for the namespace + (if forced-prefix + ;; If namespace non-nil and prefix undeclared, + ;; use forced prefix. + (when (and ns + (not (nxml-ns-get-prefix forced-prefix))) + (setcdr ns-prefixes (list forced-prefix))) + (setq prefer (rng-get-preferred-unused-prefix ns)) + (when prefer + (setcdr ns-prefixes (list prefer))) + ;; Unless it's an attribute with a non-nil namespace, + ;; allow no prefix for this namespace. + (unless rng-complete-name-attribute-flag + (setcdr ns-prefixes (cons nil (cdr ns-prefixes)))))) + (setq iter (cdr iter))) + (rng-uniquify-equal + (sort (apply 'append + (cons rng-complete-extra-strings + (mapcar (lambda (name) + (if (car name) + (mapcar (lambda (prefix) + (if prefix + (concat prefix + ":" + (cdr name)) + (cdr name))) + (cdr (assoc (car name) + ns-prefixes-alist))) + (list (cdr name)))) + rng-complete-target-names))) + 'string<)))) + +(defun rng-get-preferred-unused-prefix (ns) + (let ((ns-prefix (assoc (symbol-name ns) rng-preferred-prefix-alist)) + iter prefix) + (when ns-prefix + (setq prefix (cdr ns-prefix)) + (when (nxml-ns-get-prefix prefix) + ;; try to find an unused prefix + (setq iter (memq ns-prefix rng-preferred-prefix-alist)) + (while (and iter + (setq ns-prefix (assoc ns iter))) + (if (nxml-ns-get-prefix (cdr ns-prefix)) + (setq iter (memq ns-prefix iter)) + (setq prefix (cdr ns-prefix)) + nil)))) + prefix)) + +(defun rng-strings-to-completion-alist (strings) + (mapcar (lambda (s) (cons s s)) + (rng-uniquify-equal (sort (mapcar 'rng-escape-string strings) + 'string<)))) + +(provide 'rng-nxml) + +;;; rng-nxml.el ends here
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/rng-parse.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,104 @@ +;;; rng-parse.el --- parse an XML file and validate it against a schema + +;; Copyright (C) 2003 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML, RelaxNG + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 2 of +;; the License, or (at your option) any later version. + +;; This program is distributed in the hope that it will be +;; useful, but WITHOUT ANY WARRANTY; without even the implied +;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +;; PURPOSE. See the GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public +;; License along with this program; if not, write to the Free +;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, +;; MA 02111-1307 USA + +;;; Commentary: + +;; This combines the validation machinery in rng-match.el with the +;; parser in nxml-parse.el by using the `nxml-validate-function' hook. + +;;; Code: + +(require 'nxml-parse) +(require 'rng-match) +(require 'rng-dt) + +(defvar rng-parse-prev-was-start-tag nil) + +(defun rng-parse-validate-file (schema file) + "Parse and validate the XML document in FILE and return it as a list. +The returned list has the same form as that returned by +`nxml-parse-file'. SCHEMA is a list representing the schema to use +for validation, such as returned by the function `rng-c-load-schema'. +If the XML document is invalid with respect to schema, an error will +be signaled in the same way as when it is not well-formed." + (save-excursion + (set-buffer (nxml-parse-find-file file)) + (unwind-protect + (let ((nxml-parse-file-name file) + (nxml-validate-function 'rng-parse-do-validate) + (rng-dt-namespace-context-getter '(nxml-ns-get-context)) + rng-parse-prev-was-start-tag) + ;; We don't simply call nxml-parse-file, because + ;; we want to do rng-match-with-schema in the same + ;; buffer in which we will call the other rng-match-* functions. + (rng-match-with-schema schema + (nxml-parse-instance))) + (kill-buffer nil)))) + +(defun rng-parse-do-validate (text start-tag) + (cond ((and (let ((tem rng-parse-prev-was-start-tag)) + (setq rng-parse-prev-was-start-tag (and start-tag t)) + tem) + (not start-tag) + (rng-match-text-typed-p)) + (unless (rng-match-element-value (or text "")) + (cons "Invalid data" (and text 'text)))) + ((and text + (not (rng-blank-p text)) + (not (rng-match-mixed-text))) + (cons "Text not allowed" 'text)) + ((not start-tag) + (unless (rng-match-end-tag) + (cons "Missing elements" nil))) + ((not (rng-match-start-tag-open + (rng-parse-to-match-name (car start-tag)))) + (cons "Element not allowed" nil)) + (t + (let ((atts (cadr start-tag)) + (i 0) + att err) + (while (and atts (not err)) + (setq att (car atts)) + (when (not (and (consp (car att)) + (eq (caar att) nxml-xmlns-namespace-uri))) + (setq err + (cond ((not (rng-match-attribute-name + (rng-parse-to-match-name (car att)))) + (cons "Attribute not allowed" + (cons 'attribute-name i))) + ((not (rng-match-attribute-value (cdr att))) + (cons "Invalid attribute value" + (cons 'attribute-value i)))))) + (setq atts (cdr atts)) + (setq i (1+ i))) + (or err + (unless (rng-match-start-tag-close) + (cons "Missing attributes" 'tag-close))))))) + +(defun rng-parse-to-match-name (name) + (if (consp name) + name + (cons nil name))) + +(provide 'rng-parse) + +;;; rng-parse.el ends here
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/rng-pttrn.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,189 @@ +;;; rng-pttrn.el --- RELAX NG patterns + +;; Copyright (C) 2003 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML, RelaxNG + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 2 of +;; the License, or (at your option) any later version. + +;; This program is distributed in the hope that it will be +;; useful, but WITHOUT ANY WARRANTY; without even the implied +;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +;; PURPOSE. See the GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public +;; License along with this program; if not, write to the Free +;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, +;; MA 02111-1307 USA + +;;; Commentary: + +;; pattern ::= +;; (ref <pattern> <local-name>) +;; | (choice <pattern> <pattern> ...) +;; | (group <pattern> <pattern> ...) +;; | (interleave <pattern> <pattern> ...) +;; | (zero-or-more <pattern>) +;; | (one-or-more <pattern>) +;; | (optional <pattern>) +;; | (mixed <pattern>) +;; | (value <datatype> <string> <context>) +;; | (data <datatype> <params>) +;; | (data-except <datatype> <params> <pattern>) +;; | (list <pattern>) +;; | (element <name-class> <pattern>) +;; | (attribute <name-class> <pattern>) +;; | (text) +;; | (empty) +;; | (not-allowed) +;; +;; params ::= +;; ((<param-name> . <param-value> ) ...) +;; param-name ::= <symbol> +;; param-value ::= <string> +;; +;; name-class ::= +;; (name <name>) +;; | (any-name) +;; | (any-name-except <name-class>) +;; | (ns-name <ns>) +;; | (ns-name-except <ns> <name-class>) +;; | (choice <name-class> <name-class> ...) +;; +;; name ::= (<ns> . <local-name>) +;; ns ::= nil | <symbol> +;; local-name ::= <string> +;; datatype ::= (<datatype-uri> . <datatype-local-name>) +;; datatype-uri ::= nil | <symbol> +;; datatype-local-name ::= <symbol> + +;;; Code: + +(defvar rng-schema-change-hook nil + "Hook to be run after `rng-current-schema' changes.") + +(defvar rng-current-schema nil + "Pattern to be used as schema for the current buffer.") +(make-variable-buffer-local 'rng-current-schema) + +(defun rng-make-ref (name) + (list 'ref nil name)) + +(defun rng-ref-set (ref pattern) + (setcar (cdr ref) pattern)) + +(defun rng-ref-get (ref) (cadr ref)) + +(defun rng-make-choice (patterns) + (cons 'choice patterns)) + +(defun rng-make-group (patterns) + (cons 'group patterns)) + +(defun rng-make-interleave (patterns) + (cons 'interleave patterns)) + +(defun rng-make-zero-or-more (pattern) + (list 'zero-or-more pattern)) + +(defun rng-make-one-or-more (pattern) + (list 'one-or-more pattern)) + +(defun rng-make-optional (pattern) + (list 'optional pattern)) + +(defun rng-make-mixed (pattern) + (list 'mixed pattern)) + +(defun rng-make-value (datatype str context) + (list 'value datatype str context)) + +(defun rng-make-data (name params) + (list 'data name params)) + +(defun rng-make-data-except (name params pattern) + (list 'data-except name params pattern)) + +(defun rng-make-list (pattern) + (list 'list pattern)) + +(defun rng-make-element (name-class pattern) + (list 'element name-class pattern)) + +(defun rng-make-attribute (name-class pattern) + (list 'attribute name-class pattern)) + +(defun rng-make-text () + '(text)) + +(defun rng-make-empty () + '(empty)) + +(defun rng-make-not-allowed () + '(not-allowed)) + +(defun rng-make-any-name-name-class () + '(any-name)) + +(defun rng-make-any-name-except-name-class (name-class) + (list 'any-name-except name-class)) + +(defun rng-make-ns-name-name-class (ns) + (list 'ns-name ns)) + +(defun rng-make-ns-name-except-name-class (ns name-class) + (list 'ns-name-except ns name-class)) + +(defun rng-make-name-name-class (name) + (list 'name name)) + +(defun rng-make-choice-name-class (name-classes) + (cons 'choice name-classes)) + +(defconst rng-any-content + (let* ((ref (rng-make-ref "any-content")) + (pattern (rng-make-zero-or-more + (rng-make-choice + (list + (rng-make-text) + (rng-make-attribute (rng-make-any-name-name-class) + (rng-make-text)) + (rng-make-element (rng-make-any-name-name-class) + ref)))))) + (rng-ref-set ref pattern) + pattern) + "A pattern that matches the attributes and content of any element.") + +(defconst rng-any-element + (let* ((ref (rng-make-ref "any-element")) + (pattern + (rng-make-element + (rng-make-any-name-name-class) + (rng-make-zero-or-more + (rng-make-choice + (list + (rng-make-text) + (rng-make-attribute (rng-make-any-name-name-class) + (rng-make-text)) + ref)))))) + (rng-ref-set ref pattern) + pattern) + "A pattern that matches any element.") + +;;; Names + +(defun rng-make-name (ns local-name) + (cons ns local-name)) + +;;; Datatypes + +(defun rng-make-datatype (uri local-name) + (cons uri (intern local-name))) + +(provide 'rng-pttrn) + +;;; rng-pttrn.el ends here
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/rng-uri.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,355 @@ +;;; rng-uri.el --- URI parsing and manipulation + +;; Copyright (C) 2003 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 2 of +;; the License, or (at your option) any later version. + +;; This program is distributed in the hope that it will be +;; useful, but WITHOUT ANY WARRANTY; without even the implied +;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +;; PURPOSE. See the GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public +;; License along with this program; if not, write to the Free +;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, +;; MA 02111-1307 USA + +;;; Commentary: + +;;; Code: + +(defun rng-file-name-uri (f) + "Return a URI for the filename F. +Multibyte characters are left as is. Use `rng-uri-escape-multibyte' to +escape them using %HH." + (setq f (expand-file-name f)) + (let ((url + (replace-regexp-in-string "[\000-\032\177<>#%\"{}|\\^[]`%?;]" + 'rng-percent-encode + f))) + (concat "file:" + (if (and (> (length url) 0) + (= (aref url 0) ?/)) + "//" + "///") + url))) + +(defun rng-uri-escape-multibyte (uri) + "Escape multibyte characters in URI." + (replace-regexp-in-string "[:nonascii:]" + 'rng-percent-encode + (encode-coding-string uri 'utf-8))) + +(defun rng-percent-encode (str) + (apply 'concat + (mapcar (lambda (ch) + (format "%%%x%x" (/ ch 16) (% ch 16))) + (string-to-list str)))) + + +(defun rng-uri-file-name (uri) + "Return the filename represented by a URI. +Signal an error if URI is not a valid file URL." + (rng-uri-file-name-1 uri nil)) + +(defun rng-uri-pattern-file-name-regexp (pattern) + "Return a regexp for filenames represented by URIs that match PATTERN." + (rng-uri-file-name-1 pattern 'match)) + +(defun rng-uri-pattern-file-name-replace-match (pattern) + (rng-uri-file-name-1 pattern 'replace)) + +;; pattern is either nil or match or replace +(defun rng-uri-file-name-1 (uri pattern) + (unless (string-match "\\`\\(?:[^%]\\|%[0-9a-fA-F]{2}\\)*\\'" uri) + (rng-uri-error "Bad escapes in URI `%s'" uri)) + (setq uri (rng-uri-unescape-multibyte uri)) + (let* ((components + (or (rng-uri-split uri) + (rng-uri-error "Cannot split URI `%s' into its components" uri))) + (scheme (nth 0 components)) + (authority (nth 1 components)) + (path (nth 2 components)) + (absolutep (string-match "\\`/" path)) + (query (nth 3 components)) + (fragment-id (nth 4 components))) + (cond ((not scheme) + (unless pattern + (rng-uri-error "URI `%s' does not have a scheme" uri))) + ((not (string= (downcase scheme) "file")) + (rng-uri-error "URI `%s' does not use the `file:' scheme" uri))) + (when (not (member authority + (cons system-name '(nil "" "localhost")))) + (rng-uri-error "URI `%s' does not start with `file:///' or `file://localhost/'" + uri)) + (when query + (rng-uri-error "`?' not escaped in file URI `%s'" uri)) + (when fragment-id + (rng-uri-error "URI `%s' has a fragment identifier" uri)) + (when (string-match ";" path) + (rng-uri-error "`;' not escaped in URI `%s'" uri)) + (when (string-match "%2[fF]" path) ;; 2f is hex code of slash + (rng-uri-error "Escaped slash in URI `%s'" uri)) + (when (and (eq system-type 'windows-nt) + absolutep + (file-name-absolute-p (substring path 1))) + (setq path (substring path 1))) + (when (and pattern (string-match "\\`\\./" path)) + (setq path (substring path 2))) + (setq path + (cond ((eq pattern 'match) + (rng-uri-unescape-unibyte-match path)) + ((eq pattern 'replace) + (rng-uri-unescape-unibyte-replace path 2)) + (t + (rng-uri-unescape-unibyte path)))) + (when (string-match "\000" path) + (rng-uri-error "URI `%s' has NUL character in path" uri)) + (when (eq pattern 'match) + (setq path + (concat (if absolutep + "\\(\\)" + "\\(\\(?:[^/]*/\\)*\\)") + path))) + (cond ((eq pattern 'match) + (concat "\\`" path "\\'")) + ((and (eq pattern 'replace) + (not absolutep)) + (concat "\\1" path)) + (t path)))) + +(defun rng-uri-error (&rest args) + (signal 'rng-uri-error (list (apply 'format args)))) + +(put 'rng-uri-error 'error-conditions '(error rng-uri-error)) +(put 'rng-uri-error 'error-message "Invalid URI") + +(defun rng-uri-split (str) + (and (string-match "\\`\\(?:\\([^:/?#]+\\):\\)?\ +\\(?://\\([^/?#]*\\)\\)?\ +\\([^?#]*\\)\ +\\(?:\\?\\([^#]*\\)\\)?\ +\\(?:#\\(\\(?:.\\|\n\\)*\\)\\)?\\'" + str) + (list (match-string 1 str) + (match-string 2 str) + (match-string 3 str) + (match-string 4 str) + (match-string 5 str)))) + +(defun rng-uri-join (scheme authority path &optional query fragment-id) + (when path + (let (parts) + (when fragment-id + (setq parts (list "#" fragment-id))) + (when query + (setq parts + (cons "?" + (cons query parts)))) + (setq parts (cons path parts)) + (when authority + (setq parts + (cons "//" + (cons authority parts)))) + (when scheme + (setq parts + (cons scheme + (cons ":" parts)))) + (apply 'concat parts)))) + +(defun rng-uri-resolve (uri-ref base-uri) + "Resolve a possibly relative URI reference into absolute form. +URI-REF is the URI reference to be resolved. +BASE-URI is the base URI to use for resolving it. +The algorithm is specified by RFC 2396. +If there is some problem with URI-REF or BASE-URI, then +URI-REF will be returned." + (let* ((components (rng-uri-split uri-ref)) + (scheme (nth 0 components)) + (authority (nth 1 components)) + (path (nth 2 components)) + (query (nth 3 components)) + (fragment-id (nth 4 components)) + (base-components (rng-uri-split base-uri))) + (if (or (not components) + scheme + (not base-components) + (not (nth 0 base-components))) + uri-ref + (setq scheme (nth 0 base-components)) + (when (not authority) + (setq authority (nth 1 base-components)) + (if (and (equal path "") (not query)) + ;; Handle same document reference by returning + ;; same URI (RFC 2396bis does this too). + (setq path (nth 2 base-components) + query (nth 3 base-components)) + (setq path (rng-resolve-path path (nth 2 base-components))))) + (rng-uri-join scheme + authority + path + query + fragment-id)))) + +;; See RFC 2396 5.2, steps 5 and 6 +(defun rng-resolve-path (path base-path) + ;; Step 5 + (if (or (string-match "\\`/" path) + (not (string-match "\\`/" base-path))) + path + ;; Step 6 + ;; (a), (b) + (let ((segments (rng-split-path path)) + (base-segments (rng-split-path base-path))) + (if (> (length base-segments) 1) + (setq segments (nconc (nbutlast base-segments) + segments)) + (setcar segments + (concat (car base-segments) (car segments)))) + ;; (d) + (let ((last-segment (last segments))) + (when (equal (car last-segment) ".") + (setcar last-segment ""))) + ;; (c) + (setq segments (delete "." segments)) + ;; (e) + (let (iter matched) + (while (progn + (setq matched nil) + (setq iter (cdr segments)) + (while (and iter (not matched)) + (if (or (not (equal (cadr iter) "..")) + (equal (car iter) "..")) + (setq iter (cdr iter)) + (setcar iter nil) + (setcar (cdr iter) + ;; (f) + (if (cddr iter) nil "")) + (setq matched t) + (setq segments (delq nil segments)))) + matched))) + (rng-join-path segments)))) + +(defun rng-relative-uri (full base) + "Return a URI that relative to BASE is equivalent to FULL. +The returned URI will be relative if possible. +Both FULL and BASE must be absolute URIs." + (let* ((components (rng-uri-split full)) + (scheme (nth 0 components)) + (authority (nth 1 components)) + (path (nth 2 components)) + (query (nth 3 components)) + (fragment-id (nth 4 components)) + (base-components (rng-uri-split base))) + (if (and components + base-components + scheme + (equal scheme + (nth 0 base-components))) + (progn + (setq scheme nil) + (when (and authority + (equal authority + (nth 1 base-components))) + (setq authority nil) + (setq path (rng-relative-path path (nth 2 base-components)))) + (rng-uri-join scheme authority path query fragment-id)) + full))) + +(defun rng-relative-path (path base-path) + (let ((segments (rng-split-path path)) + (base-segments (rng-split-path base-path))) + (when (> (length base-segments) 1) + (setq base-segments (nbutlast base-segments))) + (if (or (member "." segments) + (member ".." segments) + (member "." base-segments) + (member ".." base-segments)) + path + (while (and segments + base-segments + (string= (car segments) + (car base-segments))) + (setq segments (cdr segments)) + (setq base-segments (cdr base-segments))) + (while base-segments + (setq base-segments (cdr base-segments)) + (setq segments (cons ".." segments))) + (when (equal (car segments) "") + (setq segments (cons "." segments))) + (rng-join-path segments)))) + +(defun rng-split-path (path) + (let ((start 0) + segments) + (while (string-match "/" path start) + (setq segments (cons (substring path start (match-beginning 0)) + segments)) + (setq start (match-end 0))) + (nreverse (cons (substring path start) segments)))) + +(defun rng-join-path (segments) + (and segments + (mapconcat 'identity segments "/"))) + +(defun rng-uri-unescape-multibyte (str) + (replace-regexp-in-string "\\(?:%[89a-fA-F][0-9a-fA-F]\\)+" + 'rng-multibyte-percent-decode + str)) + +(defun rng-multibyte-percent-decode (str) + (decode-coding-string (apply 'string + (mapcar (lambda (h) (string-to-number h 16)) + (split-string str "%"))) + 'utf-8)) + +(defun rng-uri-unescape-unibyte (str) + (replace-regexp-in-string "%[0-7][0-9a-fA-F]" + (lambda (h) + (string-to-number (substring h 1) 16)) + str + t + t)) + +(defun rng-uri-unescape-unibyte-match (str) + (replace-regexp-in-string "%[0-7][0-9a-fA-F]\\|[^%]" + (lambda (match) + (if (string= match "*") + "\\([^/]*\\)" + (regexp-quote + (if (= (length match) 1) + match + (string-to-number (substring match 1) + 16))))) + str + t + t)) + +(defun rng-uri-unescape-unibyte-replace (str next-match-index) + (replace-regexp-in-string + "%[0-7][0-9a-fA-F]\\|[^%]" + (lambda (match) + (if (string= match "*") + (let ((n next-match-index)) + (setq next-match-index (1+ n)) + (format "\\%s" n)) + (let ((ch (if (= (length match) 1) + (aref match 0) + (string-to-number (substring match 1) + 16)))) + (if (eq ch ?\\) + (string ?\\ ?\\) + (string ch))))) + str + t + t)) + +(provide 'rng-uri) + +;;; rng-uri.el ends here
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/rng-util.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,172 @@ +;;; rng-util.el --- utility functions for RELAX NG library + +;; Copyright (C) 2003 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML, RelaxNG + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 2 of +;; the License, or (at your option) any later version. + +;; This program is distributed in the hope that it will be +;; useful, but WITHOUT ANY WARRANTY; without even the implied +;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +;; PURPOSE. See the GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public +;; License along with this program; if not, write to the Free +;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, +;; MA 02111-1307 USA + +;;; Commentary: + +;;; Code: + +(defun rng-make-datatypes-uri (uri) + (if (string-equal uri "") + ;; The spec doesn't say to do this, but it's perfectly conformant + ;; and better than using nil, I think. + 'http://relaxng.org/ns/structure/1.0 + (intern uri))) + +(defconst rng-xsd-datatypes-uri + (rng-make-datatypes-uri "http://www.w3.org/2001/XMLSchema-datatypes")) + +(defconst rng-builtin-datatypes-uri (rng-make-datatypes-uri "")) + +(defun rng-uniquify-eq (list) + "Destructively remove any element from LIST that is eq to +its predecessor." + (and list + (let ((head list)) + (while (cdr head) + (if (eq (car head) (cadr head)) + (setcdr head (cddr head))) + (setq head (cdr head))) + list))) + +(defun rng-uniquify-equal (list) + "Destructively remove any element from LIST that is equal to +its predecessor." + (and list + (let ((head list)) + (while (cdr head) + (if (equal (car head) (cadr head)) + (setcdr head (cddr head))) + (setq head (cdr head))) + list))) + +(defun rng-blank-p (str) (string-match "\\`[ \t\n\r]*\\'" str)) + +(defun rng-substq (new old list) + "Replace first member of LIST (if any) that is eq to OLD by NEW. +LIST is not modified." + (cond ((null list) nil) + ((eq (car list) old) + (cons new (cdr list))) + (t + (let ((tail (cons (car list) + nil)) + (rest (cdr list))) + (setq list tail) + (while rest + (let ((item (car rest))) + (setq rest (cdr rest)) + (cond ((eq item old) + (setcdr tail + (cons new rest)) + (setq rest nil)) + (t + (setq tail + (setcdr tail + (cons item nil)))))))) + list))) + +(defun rng-complete-before-point (start table prompt &optional predicate hist) + "Complete text between START and point. +Replaces the text between START and point with a string chosen using a +completion table and, when needed, input read from the user with the +minibuffer. +Returns the new string if either a complete and unique completion was +determined automatically or input was read from the user. Otherwise, +returns nil. +TABLE is an alist, a symbol bound to a function or an obarray as with +the function `completing-read'. +PROMPT is the string to prompt with if user input is needed. +PREDICATE is nil or a function as with `completing-read'. +HIST, if non-nil, specifies a history list as with `completing-read'." + (let* ((orig (buffer-substring-no-properties start (point))) + (completion (try-completion orig table predicate))) + (cond ((not completion) + (if (string= orig "") + (message "No completions available") + (message "No completion for %s" (rng-quote-string orig))) + (ding) + nil) + ((eq completion t) orig) + ((not (string= completion orig)) + (delete-region start (point)) + (insert completion) + (cond ((not (rng-completion-exact-p completion table predicate)) + (message "Incomplete") + nil) + ((eq (try-completion completion table predicate) t) + completion) + (t + (message "Complete but not unique") + nil))) + (t + (setq completion + (let ((saved-minibuffer-setup-hook + (default-value 'minibuffer-setup-hook))) + (add-hook 'minibuffer-setup-hook + 'minibuffer-completion-help + t) + (unwind-protect + (completing-read prompt + table + predicate + nil + orig + hist) + (setq-default minibuffer-setup-hook + saved-minibuffer-setup-hook)))) + (delete-region start (point)) + (insert completion) + completion)))) + +(defun rng-completion-exact-p (string table predicate) + (cond ((symbolp table) + (funcall table string predicate 'lambda)) + ((vectorp table) + (intern-soft string table)) + (t (assoc string table)))) + +(defun rng-quote-string (s) + (concat "\"" s "\"")) + +(defun rng-escape-string (s) + (replace-regexp-in-string "[&\"<>]" + (lambda (match) + (cdr (assoc match + '(("&" . "&") + ("\"" . """) + (">" . ">") + ("<" . "<"))))) + s + t)) + +(defun rng-collapse-space (string) + (setq string + (replace-regexp-in-string "[ \t\r\n]+" " " string t t)) + (when (string-match "\\` " string) + (setq string (substring string 1))) + (when (string-match " \\'" string) + (setq string (substring string 0 -1))) + string) + +(provide 'rng-util) + +;;; rng-util.el ends here
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/rng-valid.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,1467 @@ +;;; rng-valid.el --- real-time validation of XML using RELAX NG + +;; Copyright (C) 2003 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML, RelaxNG + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 2 of +;; the License, or (at your option) any later version. + +;; This program is distributed in the hope that it will be +;; useful, but WITHOUT ANY WARRANTY; without even the implied +;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +;; PURPOSE. See the GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public +;; License along with this program; if not, write to the Free +;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, +;; MA 02111-1307 USA + +;;; Commentary: + +;; For usage information, see the documentation for rng-validate-mode. +;; +;; This file provides a minor mode that continually validates a buffer +;; against a RELAX NG schema. The validation state is used to support +;; schema-sensitive editing as well as validation. Validation is +;; performed while Emacs is idle. XML parsing is done using +;; xmltok.el. This file is responsible for checking that end-tags +;; match their start-tags. Namespace processing is handled by +;; nxml-ns.el. The RELAX NG Compact Syntax schema is parsed into +;; internal form by rng-cmpct.el. This internal form is described by +;; rng-pttrn.el. Validation of the document by matching against this +;; internal form is done by rng-match.el. Handling of W3C XML Schema +;; datatypes is delegated by rng-match.el to rng-xsd.el. The minor +;; mode is intended to be used in conjunction with the nxml major +;; mode, but does not have to be. +;; +;; The major responsibility of this file is to allow validation to +;; happen incrementally. If a buffer has been validated and is then +;; changed, we can often revalidate it without having to completely +;; parse and validate it from start to end. As we parse and validate +;; the buffer, we periodically cache the state. The state has three +;; components: the stack of open elements, the namespace processing +;; state and the RELAX NG validation state. The state is cached as the +;; value of the rng-state text property on the closing greater-than of +;; tags (but at intervals, not on every tag). We keep track of the +;; position up to which cached state is known to be correct by adding +;; a function to the buffer's after-change-functions. This is stored +;; in the rng-validate-up-to-date-end variable. The first way in +;; which we make validation incremental is obvious: we start +;; validation from the first cached state before +;; rng-validate-up-to-date-end. +;; +;; To make this work efficiently, we have to be able to copy the +;; current parsing and validation state efficiently. We do this by +;; minimizing destructive changes to the objects storing the state. +;; When state is changed, we use the old state to create new objects +;; representing the new state rather than destructively modifying the +;; objects representing the old state. Copying the state is just a +;; matter of making a list of three objects, one for each component of +;; the state; the three objects themselves can be shared and do not +;; need to be copied. +;; +;; There's one other idea that is used to make validation incremental. +;; Suppose we have a buffer that's 4000 bytes long and suppose we +;; validated it, caching state at positions 1000, 2000 and 3000. Now +;; suppose we make a change at position 1500 inserting 100 characters. +;; rng-validate-up-to-date-end will be changed to 1500. When Emacs +;; becomes idle and we revalidate, validation will restart using the +;; cached state at position 1000. However, we take advantage of the +;; cached state beyond rng-validate-up-to-date-end as follows. When +;; our validation reaches position 2100 (the current position of the +;; character that was at 2000), we compare our current state with the +;; cached state. If they are the same, then we can stop parsing +;; immediately and set rng-validate-up-to-date-end to the end of the +;; buffer: we already know that the state cached at position 3100 is +;; correct. If they are not the same, then we have to continue +;; parsing. After the change, but before revalidation, we call the +;; region from 1600 to the end of the buffer "conditionally +;; up-to-date". +;; +;; As well as the cached parsing and validation state, we also keep +;; track of the errors in the file. Errors are stored as overlays +;; with a category of rng-error. The number of such overlays in the +;; buffer must always be equal to rng-error-count. + +;;; Code: + +(require 'xmltok) +(require 'nxml-enc) +(require 'nxml-util) +(require 'nxml-ns) +(require 'rng-match) +(require 'rng-util) +(require 'rng-loc) + +;;; Customizable variables + +(defgroup relax-ng nil + "Validation of XML using RELAX NG." + :group 'wp + :group 'nxml + :group 'languages) + +(defface rng-error-face '((t (:underline "red"))) + "Face for highlighting XML errors." + :group 'relax-ng) + +(defcustom rng-state-cache-distance 2000 + "*Distance in characters between each parsing and validation state cache." + :type 'integer + :group 'relax-ng) + +(defcustom rng-validate-chunk-size 8000 + "*Number of characters in a RELAX NG validation chunk. +A validation chunk will be the smallest chunk that is at least this +size and ends with a tag. After validating a chunk, validation will +continue only if Emacs is still idle." + :type 'integer + :group 'relax-ng) + +(defcustom rng-validate-delay 1.5 + "*Time in seconds that Emacs must be idle before starting a full validation. +A full validation continues until either validation is up to date +or Emacs is no longer idle." + :type 'number + :group 'relax-ng) + +(defcustom rng-validate-quick-delay 0.3 + "*Time in seconds that Emacs must be idle before starting a quick validation. +A quick validation validates at most one chunk." + :type 'number + :group 'relax-ng) + +;; Global variables + +(defvar rng-validate-timer nil) +(make-variable-buffer-local 'rng-validate-timer) +;; ensure that we can cancel the timer even after a kill-all-local-variables +(put 'rng-validate-timer 'permanent-local t) + +(defvar rng-validate-quick-timer nil) +(make-variable-buffer-local 'rng-validate-quick-timer) +;; ensure that we can cancel the timer even after a kill-all-local-variables +(put 'rng-validate-quick-timer 'permanent-local t) + +(defvar rng-error-count nil + "Number of errors in the current buffer. Always equal to number of +overlays with category rng-error.") +(make-variable-buffer-local 'rng-error-count) + +(defvar rng-message-overlay nil + "Overlay in this buffer whose help-echo property was last printed. +Nil if none.") +(make-variable-buffer-local 'rng-message-overlay) + +(defvar rng-message-overlay-inhibit-point nil + "Position at which message from overlay should be inhibited. +If point is equal to this and the error overlay around +point is `rng-message-overlay', then the `help-echo' property +of the error overlay should not be printed with `message'.") +(make-variable-buffer-local 'rng-message-overlay-inhibit-point) + +(defvar rng-message-overlay-current nil + "Non-nil if `rng-message-overlay' is still the current message.") +(make-variable-buffer-local 'rng-message-overlay-current) + +(defvar rng-open-elements nil + "Stack of names of open elements represented as a list. +Each member of the list is either t or a (PREFIX . LOCAL-NAME) pair. +\(PREFIX . LOCAL-NAME) is pushed for a start-tag; t is pushed +for a mismatched end-tag.") + +(defvar rng-pending-contents nil + "Text content of current element that has yet to be processed. +Value is a list of segments (VALUE START END) positions in reverse +order. VALUE is a string or nil. If VALUE is nil, then the value is +the string between START and END. A segment can also be nil +indicating an unresolvable entity or character reference.") + +(defvar rng-collecting-text nil) + +(defvar rng-validate-up-to-date-end nil + "Last position where validation is known to be up to date.") +(make-variable-buffer-local 'rng-validate-up-to-date-end) + +(defvar rng-conditional-up-to-date-start nil + "Marker for the start of the conditionally up-to-date region. +Nil if there is no conditionally up-to-date region. The conditionally +up-to-date region must be such that for any cached state S with +position P in the conditionally up-to-date region, if at some point it +is determined that S becomes correct for P, then all states with +position >= P in the conditionally up to date region must also then be +correct and all errors between P and the end of the region must then +be correctly marked.") +(make-variable-buffer-local 'rng-conditional-up-to-date-start) + +(defvar rng-conditional-up-to-date-end nil + "Marker for the end of the conditionally up-to-date region. +Nil if there is no conditionally up-to-date region. See the variable +`rng-conditional-up-to-date-start'.") +(make-variable-buffer-local 'rng-conditional-up-to-date-end) + +(defvar rng-parsing-for-state nil + "Non-nil means we are currently parsing just to compute the state. +Should be dynamically bound.") + +(defvar rng-validate-mode nil) +(make-variable-buffer-local 'rng-validate-mode) + +(defvar rng-dtd nil) +(make-variable-buffer-local 'rng-dtd) + +;;;###autoload +(defun rng-validate-mode (&optional arg no-change-schema) + "Minor mode performing continual validation against a RELAX NG schema. + +Checks whether the buffer is a well-formed XML 1.0 document, +conforming to the XML Namespaces Recommendation and valid against a +RELAX NG schema. The mode-line indicates whether it is or not. Any +parts of the buffer that cause it not to be are considered errors and +are highlighted with `rng-error-face'. A description of each error is +available as a tooltip. \\[rng-next-error] goes to the next error +after point. Clicking mouse-1 on the word `Invalid' in the mode-line +goes to the first error in the buffer. If the buffer changes, then it +will be automatically rechecked when Emacs becomes idle; the +rechecking will be paused whenever there is input pending.. + +By default, uses a vacuous schema that allows any well-formed XML +document. A schema can be specified explictly using +\\[rng-set-schema-file-and-validate], or implicitly based on the buffer's +file name or on the root element name. In each case the schema must +be a RELAX NG schema using the compact schema \(such schemas +conventionally have a suffix of `.rnc'). The variable +`rng-schema-locating-files' specifies files containing rules +to use for finding the schema." + (interactive "P") + (setq rng-validate-mode + (if (null arg) + (not rng-validate-mode) + (> (prefix-numeric-value arg) 0))) + (save-restriction + (widen) + (nxml-with-unmodifying-text-property-changes + (rng-clear-cached-state (point-min) (point-max))) + ;; 1+ to clear empty overlays at (point-max) + (rng-clear-overlays (point-min) (1+ (point-max)))) + (setq rng-validate-up-to-date-end 1) + (rng-clear-conditional-region) + (setq rng-error-count 0) + ;; do this here to avoid infinite loop if we set the schema + (remove-hook 'rng-schema-change-hook 'rng-validate-clear t) + (cond (rng-validate-mode + (unwind-protect + (save-excursion + ;; An error can change the current buffer + (when (or (not rng-current-schema) + (and (eq rng-current-schema rng-any-element) + (not no-change-schema))) + (rng-auto-set-schema t))) + (unless rng-current-schema (rng-set-schema-file-1 nil)) + (add-hook 'rng-schema-change-hook 'rng-validate-clear nil t) + (add-hook 'after-change-functions 'rng-after-change-function nil t) + (add-hook 'kill-buffer-hook 'rng-kill-timers nil t) + (add-hook 'echo-area-clear-hook 'rng-echo-area-clear-function nil t) + (add-hook 'post-command-hook 'rng-maybe-echo-error-at-point nil t) + (rng-match-init-buffer) + (rng-activate-timers) + ;; Start validating right away if the buffer is visible. + ;; If it's not visible, don't do this, because the user + ;; won't get any progress indication. When the user finds + ;; a new file, then the buffer won't be visible + ;; when this is invoked. + (when (get-buffer-window (current-buffer) 'visible) + (rng-validate-while-idle (current-buffer))))) + (t + (rng-cancel-timers) + (force-mode-line-update) + (remove-hook 'kill-buffer-hook 'rng-cancel-timers t) + (remove-hook 'post-command-hook 'rng-maybe-echo-error-at-point t) + (remove-hook 'echo-area-clear-hook 'rng-echo-area-clear-function t) + (remove-hook 'after-change-functions 'rng-after-change-function t)))) + +(defun rng-set-schema-file-and-validate (filename) + "Sets the schema and turns on `rng-validate-mode' if not already on. +The schema is set like `rng-set-schema'." + (interactive "fSchema file: ") + (rng-set-schema-file filename) + (or rng-validate-mode (rng-validate-mode))) + +(defun rng-set-document-type-and-validate (type-id) + (interactive (list (rng-read-type-id))) + (and (rng-set-document-type type-id) + (or rng-validate-mode (rng-validate-mode)))) + +(defun rng-auto-set-schema-and-validate () + "Set the schema for this buffer automatically and turn on `rng-validate-mode'. +The schema is set like `rng-auto-set-schema'." + (interactive) + (rng-auto-set-schema) + (or rng-validate-mode (rng-validate-mode))) + +(defun rng-after-change-function (start end pre-change-len) + ;; Work around bug in insert-file-contents. + (when (> end (1+ (buffer-size))) + (setq start 1) + (setq end (1+ (buffer-size)))) + (setq rng-message-overlay-inhibit-point nil) + (nxml-with-unmodifying-text-property-changes + (rng-clear-cached-state start end)) + ;; rng-validate-up-to-date-end holds the position before the change + ;; Adjust it to reflect the change. + (if (< start rng-validate-up-to-date-end) + (setq rng-validate-up-to-date-end + (if (<= (+ start pre-change-len) rng-validate-up-to-date-end) + (+ rng-validate-up-to-date-end + (- end start pre-change-len)) + start))) + ;; Adjust the conditional zone + (cond (rng-conditional-up-to-date-start + (when (< rng-conditional-up-to-date-start end) + (if (< end rng-conditional-up-to-date-end) + (set-marker rng-conditional-up-to-date-start end) + (rng-clear-conditional-region)))) + ((< end rng-validate-up-to-date-end) + (setq rng-conditional-up-to-date-end + (copy-marker rng-validate-up-to-date-end nil)) + (setq rng-conditional-up-to-date-start + (copy-marker end t)))) + ;; Adjust rng-validate-up-to-date-end + (if (< start rng-validate-up-to-date-end) + (setq rng-validate-up-to-date-end start)) + ;; Must make rng-validate-up-to-date-end < point-max + ;; (unless the buffer is empty). + ;; otherwise validate-prepare will say there's nothing to do. + ;; Don't use (point-max) because we may be narrowed. + (if (> rng-validate-up-to-date-end (buffer-size)) + (setq rng-validate-up-to-date-end + (max 1 (1- rng-validate-up-to-date-end)))) + ;; Arrange to revalidate + (rng-activate-timers) + ;; Need to do this after activating the timer + (force-mode-line-update)) + +(defun rng-compute-mode-line-string () + (cond (rng-validate-timer + (concat " Validated:" + (number-to-string + ;; Use floor rather than round because we want + ;; to show 99% rather than 100% for changes near + ;; the end. + (floor (if (eq (buffer-size) 0) + 0.0 + (/ (* (- rng-validate-up-to-date-end 1) 100.0) + (buffer-size))))) + "%%")) + ((> rng-error-count 0) + (concat " " + (propertize "Invalid" + 'help-echo "mouse-1: go to first error" + 'local-map (make-mode-line-mouse-map + 'mouse-1 + 'rng-mouse-first-error)))) + (t " Valid"))) + +(defun rng-cancel-timers () + (let ((inhibit-quit t)) + (when rng-validate-timer + (cancel-timer rng-validate-timer) + (setq rng-validate-timer nil)) + (when rng-validate-quick-timer + (cancel-timer rng-validate-quick-timer) + (setq rng-validate-quick-timer nil)))) + +(defun rng-kill-timers () + ;; rng-validate-timer and rng-validate-quick-timer have the + ;; permanent-local property, so that the timers can be + ;; cancelled even after changing mode. + ;; This function takes care of cancelling the timers and + ;; then killing the local variables. + (when (local-variable-p 'rng-validate-timer) + (when rng-validate-timer + (cancel-timer rng-validate-timer)) + (kill-local-variable 'rng-validate-timer)) + (when (local-variable-p 'rng-validate-quick-timer) + (when rng-validate-quick-timer + (cancel-timer rng-validate-quick-timer)) + (kill-local-variable 'rng-validate-quick-timer))) + +(defun rng-activate-timers () + (unless rng-validate-timer + (let ((inhibit-quit t)) + (setq rng-validate-timer + (run-with-idle-timer rng-validate-delay + t + 'rng-validate-while-idle + (current-buffer))) + (setq rng-validate-quick-timer + (run-with-idle-timer rng-validate-quick-delay + t + 'rng-validate-quick-while-idle + (current-buffer)))))) + +(defun rng-validate-clear () + (rng-validate-mode 1 t)) + +;; These two variables are dynamically bound and used +;; to pass information between rng-validate-while-idle +;; and rng-validate-while-idle-continue-p. + +(defvar rng-validate-display-point nil) +(defvar rng-validate-display-modified-p nil) + +(defun rng-validate-while-idle-continue-p () + ;; input-pending-p and sit-for run timers that are + ;; ripe. Binding timer-idle-list to nil prevents + ;; this. If we don't do this, then any ripe timers + ;; will get run, and we won't get any chance to + ;; validate until Emacs becomes idle again or until + ;; the other lower priority timers finish (which + ;; can take a very long time in the case of + ;; jit-lock). + (let ((timer-idle-list nil)) + (and (not (input-pending-p)) + ;; Fake rng-validate-up-to-date-end so that the mode line + ;; shows progress. Also use this to save point. + (let ((rng-validate-up-to-date-end (point))) + (goto-char rng-validate-display-point) + (when (not rng-validate-display-modified-p) + (restore-buffer-modified-p nil)) + (force-mode-line-update) + (let ((continue (sit-for 0))) + (goto-char rng-validate-up-to-date-end) + continue))))) + +;; Calling rng-do-some-validation once with a continue-p function, as +;; opposed to calling it repeatedly, helps on initial validation of a +;; large buffer with lots of errors. The overlays for errors will all +;; get added when rng-do-some-validation returns and won't slow the +;; validation process down. + +(defun rng-validate-while-idle (buffer) + (with-current-buffer buffer + (if rng-validate-mode + (if (let ((rng-validate-display-point (point)) + (rng-validate-display-modified-p (buffer-modified-p))) + (rng-do-some-validation 'rng-validate-while-idle-continue-p)) + (force-mode-line-update) + (rng-validate-done)) + ;; must have done kill-all-local-variables + (rng-kill-timers)))) + +(defun rng-validate-quick-while-idle (buffer) + (with-current-buffer buffer + (if rng-validate-mode + (if (rng-do-some-validation) + (force-mode-line-update) + (rng-validate-done)) + ;; must have done kill-all-local-variables + (rng-kill-timers)))) + +(defun rng-validate-done () + (when (or (not (current-message)) + (rng-current-message-from-error-overlay-p)) + (rng-error-overlay-message (or (rng-error-overlay-after (point)) + (rng-error-overlay-after (1- (point)))))) + (rng-cancel-timers) + (force-mode-line-update)) + +(defun rng-do-some-validation (&optional continue-p-function) + "Do some validation work. Return t if more to do, nil otherwise." + (save-excursion + (save-restriction + (widen) + (nxml-with-invisible-motion + (condition-case err + (and (rng-validate-prepare) + (let ((rng-dt-namespace-context-getter '(nxml-ns-get-context))) + (nxml-with-unmodifying-text-property-changes + (rng-do-some-validation-1 continue-p-function)))) + ;; errors signalled from a function run by an idle timer + ;; are ignored; if we don't catch them, validation + ;; will get mysteriously stuck at a single place + (rng-compile-error + (message "Incorrect schema. %s" (nth 1 err)) + (rng-validate-mode 0) + nil) + (error + (message "Internal error in rng-validate-mode triggered at buffer position %d. %s" + (point) + (error-message-string err)) + (rng-validate-mode 0) + nil)))))) + +(defun rng-validate-prepare () + "Prepare to do some validation, initializing point and the state. +Return t if there is work to do, nil otherwise." + (cond ((= rng-validate-up-to-date-end (point-min)) + (rng-set-initial-state) + t) + ((= rng-validate-up-to-date-end (point-max)) + nil) + (t (let ((state (get-text-property (1- rng-validate-up-to-date-end) + 'rng-state))) + (cond (state + (rng-restore-state state) + (goto-char rng-validate-up-to-date-end)) + (t + (let ((pos (previous-single-property-change + rng-validate-up-to-date-end + 'rng-state))) + (cond (pos + (rng-restore-state + (or (get-text-property (1- pos) 'rng-state) + (error "Internal error: state null"))) + (goto-char pos)) + (t (rng-set-initial-state)))))))))) + + +(defun rng-do-some-validation-1 (&optional continue-p-function) + (let ((limit (+ rng-validate-up-to-date-end + rng-validate-chunk-size)) + (remove-start rng-validate-up-to-date-end) + (next-cache-point (+ (point) rng-state-cache-distance)) + (continue t) + (xmltok-dtd rng-dtd) + have-remaining-chars + xmltok-type + xmltok-start + xmltok-name-colon + xmltok-name-end + xmltok-replacement + xmltok-attributes + xmltok-namespace-attributes + xmltok-dependent-regions + xmltok-errors) + (when (= (point) 1) + (let ((regions (xmltok-forward-prolog))) + (rng-clear-overlays 1 (point)) + (while regions + (when (eq (aref (car regions) 0) 'encoding-name) + (rng-process-encoding-name (aref (car regions) 1) + (aref (car regions) 2))) + (setq regions (cdr regions)))) + (unless (equal rng-dtd xmltok-dtd) + (rng-clear-conditional-region)) + (setq rng-dtd xmltok-dtd)) + (while continue + (setq have-remaining-chars (rng-forward)) + (let ((pos (point))) + (setq continue + (and have-remaining-chars + (or (< pos limit) + (and continue-p-function + (funcall continue-p-function) + (setq limit (+ limit rng-validate-chunk-size)) + t)))) + (cond ((and rng-conditional-up-to-date-start + ;; > because we are getting the state from (1- pos) + (> pos rng-conditional-up-to-date-start) + (< pos rng-conditional-up-to-date-end) + (rng-state-matches-current (get-text-property (1- pos) + 'rng-state))) + (when (< remove-start (1- pos)) + (rng-clear-cached-state remove-start (1- pos))) + ;; sync up with cached validation state + (setq continue nil) + ;; do this before settting rng-validate-up-to-date-end + ;; in case we get a quit + (rng-mark-xmltok-errors) + (rng-mark-xmltok-dependent-regions) + (setq rng-validate-up-to-date-end + (marker-position rng-conditional-up-to-date-end)) + (rng-clear-conditional-region) + (setq have-remaining-chars + (< rng-validate-up-to-date-end (point-max)))) + ((or (>= pos next-cache-point) + (not continue)) + (setq next-cache-point (+ pos rng-state-cache-distance)) + (rng-clear-cached-state remove-start pos) + (when have-remaining-chars + (rng-cache-state (1- pos))) + (setq remove-start pos) + (unless continue + ;; if we have just blank chars skip to the end + (when have-remaining-chars + (skip-chars-forward " \t\r\n") + (when (= (point) (point-max)) + (rng-clear-overlays pos (point)) + (rng-clear-cached-state pos (point)) + (setq have-remaining-chars nil) + (setq pos (point)))) + (when (not have-remaining-chars) + (rng-process-end-document)) + (rng-mark-xmltok-errors) + (rng-mark-xmltok-dependent-regions) + (setq rng-validate-up-to-date-end pos) + (when rng-conditional-up-to-date-end + (cond ((<= rng-conditional-up-to-date-end pos) + (rng-clear-conditional-region)) + ((< rng-conditional-up-to-date-start pos) + (set-marker rng-conditional-up-to-date-start + pos))))))))) + have-remaining-chars)) + +(defun rng-clear-conditional-region () + (when rng-conditional-up-to-date-start + (set-marker rng-conditional-up-to-date-start nil) + (setq rng-conditional-up-to-date-start nil)) + (when rng-conditional-up-to-date-end + (set-marker rng-conditional-up-to-date-end nil) + (setq rng-conditional-up-to-date-end nil))) + +(defun rng-clear-cached-state (start end) + "Clear cached state between START and END." + (remove-text-properties start end '(rng-state nil))) + +(defun rng-cache-state (pos) + "Save the current state in a text property on the character at pos." + (put-text-property pos + (1+ pos) + 'rng-state + (rng-get-state))) + +(defun rng-state-matches-current (state) + (and state + (rng-match-state-equal (car state)) + (nxml-ns-state-equal (nth 1 state)) + (equal (nth 2 state) rng-open-elements))) + +(defun rng-get-state () + (list (rng-match-state) + (nxml-ns-state) + rng-open-elements)) + +(defun rng-restore-state (state) + (rng-set-match-state (car state)) + (setq state (cdr state)) + (nxml-ns-set-state (car state)) + (setq rng-open-elements (cadr state)) + (setq rng-pending-contents nil) + (setq rng-collecting-text (rng-match-text-typed-p))) + +(defun rng-set-initial-state () + (nxml-ns-init) + (rng-match-start-document) + (setq rng-open-elements nil) + (setq rng-pending-contents nil) + (goto-char (point-min))) + +(defun rng-clear-overlays (beg end) + (unless rng-parsing-for-state + (let ((overlays (overlays-in beg end))) + (while overlays + (let* ((overlay (car overlays)) + (category (overlay-get overlay 'category))) + (cond ((eq category 'rng-error) + (let ((inhibit-quit t)) + (when (eq overlay rng-message-overlay) + (rng-error-overlay-message nil)) + (delete-overlay overlay) + ;; rng-error-count could be nil + ;; if overlays left over from a previous use + ;; of rng-validate-mode that ended with a change of mode + (when rng-error-count + (setq rng-error-count (1- rng-error-count))))) + ((and (eq category 'rng-dependent) + (<= beg (overlay-start overlay))) + (delete-overlay overlay)))) + (setq overlays (cdr overlays)))))) + +;;; Dependent regions + +(defun rng-mark-xmltok-dependent-regions () + (while xmltok-dependent-regions + (apply 'rng-mark-xmltok-dependent-region + (car xmltok-dependent-regions)) + (setq xmltok-dependent-regions + (cdr xmltok-dependent-regions)))) + +(defun rng-mark-xmltok-dependent-region (fun start end &rest args) + (let ((overlay (make-overlay start end nil t t))) + (overlay-put overlay 'category 'rng-dependent) + (overlay-put overlay 'rng-funargs (cons fun args)))) + +(put 'rng-dependent 'evaporate t) +(put 'rng-dependent 'modification-hooks '(rng-dependent-region-changed)) +(put 'rng-dependent 'insert-behind-hooks '(rng-dependent-region-changed)) + +(defun rng-dependent-region-changed (overlay + after-p + change-start + change-end + &optional pre-change-length) + (when (and after-p + ;; Emacs sometimes appears to call deleted overlays + (overlay-start overlay) + (let ((funargs (overlay-get overlay 'rng-funargs))) + (save-match-data + (save-excursion + (save-restriction + (widen) + (apply (car funargs) + (append (list change-start + change-end + pre-change-length + (overlay-start overlay) + (overlay-end overlay)) + (cdr funargs)))))))) + (rng-after-change-function (overlay-start overlay) + change-end + (+ pre-change-length + (- (overlay-start overlay) + change-start))) + (delete-overlay overlay))) + +;;; Error state + +(defun rng-mark-xmltok-errors () + (while xmltok-errors + (let ((err (car xmltok-errors))) + (rng-mark-not-well-formed (xmltok-error-message err) + (xmltok-error-start err) + (xmltok-error-end err))) + (setq xmltok-errors (cdr xmltok-errors)))) + +(defun rng-mark-invalid (message beg end) + (rng-mark-error message beg end)) + +(defun rng-mark-not-well-formed (message beg end) + ;; Don't try to validate further + ;;(rng-set-match-state rng-not-allowed-ipattern) + (rng-mark-error message beg end)) + +(defun rng-mark-error (message beg end) + (unless rng-parsing-for-state + (let ((overlays (overlays-in beg end))) + (while (and overlays message) + (let ((o (car overlays))) + (when (and (eq (overlay-get o 'category) 'rng-error) + (= (overlay-start o) beg) + (= (overlay-end o) end)) + (overlay-put o + 'help-echo + (concat (overlay-get o 'help-echo) + "\n" + message)) + (setq message nil))) + (setq overlays (cdr overlays)))) + (when message + (let ((inhibit-quit t)) + (setq rng-error-count (1+ rng-error-count)) + (let ((overlay + (make-overlay beg end nil t + ;; Need to make the rear delimiter advance + ;; with the front delimiter when the overlay + ;; is empty, otherwise the front delimiter + ;; will move past the rear delimiter. + (= beg end)))) + ;; Ensure when we have two overlapping messages, the help-echo + ;; of the one that starts first is shown + (overlay-put overlay 'priority beg) + (overlay-put overlay 'category 'rng-error) + (overlay-put overlay 'help-echo message)))))) + +(put 'rng-error 'face 'rng-error-face) +(put 'rng-error 'modification-hooks '(rng-error-modified)) + +;; If we don't do this, then the front delimiter can move +;; past the end delimiter. +(defun rng-error-modified (overlay after-p beg end &optional pre-change-len) + (when (and after-p + (overlay-start overlay) ; check not deleted + (>= (overlay-start overlay) + (overlay-end overlay))) + (let ((inhibit-quit t)) + (delete-overlay overlay) + (setq rng-error-count (1- rng-error-count))))) + +(defun rng-echo-area-clear-function () + (setq rng-message-overlay-current nil)) + +;;; Error navigation + +(defun rng-maybe-echo-error-at-point () + (when (or (not (current-message)) + (rng-current-message-from-error-overlay-p)) + (rng-error-overlay-message (rng-error-overlay-after (point))))) + +(defun rng-error-overlay-after (pos) + (let ((overlays (overlays-in pos (1+ pos))) + (best nil)) + (while overlays + (let ((overlay (car overlays))) + (when (and (eq (overlay-get overlay 'category) + 'rng-error) + (or (not best) + (< (overlay-start best) + (overlay-start overlay)))) + (setq best overlay))) + (setq overlays (cdr overlays))) + best)) + +(defun rng-first-error () + "Go to the first validation error. +Turn on `rng-validate-mode' if it is not already on." + (interactive) + (or rng-validate-mode (rng-validate-mode)) + (when (and (eq rng-validate-up-to-date-end 1) + (< rng-validate-up-to-date-end (point-max))) + (rng-do-some-validation)) + (let ((err (rng-find-next-error-overlay (1- (point-min))))) + (if err + (rng-goto-error-overlay err) + (let ((pos (save-excursion + (goto-char (point-min)) + (rng-next-error 1)))) + (when pos + (goto-char pos)))))) + +(defun rng-mouse-first-error (event) + "Go to the first validation error from a mouse click." + (interactive "e") + (select-window (posn-window (event-start event))) + (rng-first-error)) + +(defun rng-next-error (arg) + "Go to the next validation error after point. +Turn on `rng-validate-mode' if it is not already on. +A prefix ARG specifies how many errors to move. A negative ARG +moves backwards. Just \\[universal-argument] as a prefix +means goto the first error." + (interactive "P") + (if (consp arg) + (rng-first-error) + (or rng-validate-mode (rng-validate-mode)) + (setq arg (prefix-numeric-value arg)) + (if (< arg 0) + (rng-previous-error-1 (- arg)) + (rng-next-error-1 arg)))) + +(defun rng-previous-error (arg) + "Go to the previous validation error before point. +Turn on `rng-validate-mode' if it is not already on. +A prefix ARG specifies how many errors to move. A negative ARG +moves forwards. Just \\[universal-argument] as a prefix +means goto the first error." + (interactive "P") + (if (consp arg) + (rng-first-error) + (or rng-validate-mode (rng-validate-mode)) + (setq arg (prefix-numeric-value arg)) + (if (< arg 0) + (rng-next-error-1 (- arg)) + (rng-previous-error-1 arg)))) + +(defun rng-next-error-1 (arg) + (let* ((pos (point)) + err last-err) + (while (and (> arg 0) + (setq err (rng-find-next-error-overlay pos))) + (setq arg (1- arg)) + (setq last-err err) + (setq pos (overlay-start err))) + (when (> arg 0) + (setq pos (max pos (1- rng-validate-up-to-date-end))) + (when (< rng-validate-up-to-date-end (point-max)) + (message "Parsing...") + (while (let ((more-to-do (rng-do-some-validation))) + (while (and (> arg 0) + (setq err (rng-find-next-error-overlay pos))) + (setq arg (1- arg)) + (setq last-err err) + (setq pos (overlay-start err))) + (when (and (> arg 0) + more-to-do + (< rng-validate-up-to-date-end (point-max))) + ;; Display percentage validated. + (force-mode-line-update) + ;; Force redisplay but don't allow idle timers to run. + (let ((timer-idle-list nil)) + (sit-for 0)) + (setq pos + (max pos (1- rng-validate-up-to-date-end))) + t))))) + (if last-err + (rng-goto-error-overlay last-err) + (message "No more errors") + nil))) + +(defun rng-previous-error-1 (arg) + (let* ((pos (point)) + err last-err) + (while (and (> arg 0) + (setq err (rng-find-previous-error-overlay pos))) + (setq pos (overlay-start err)) + (setq last-err err) + (setq arg (1- arg))) + (when (and (> arg 0) + (< rng-validate-up-to-date-end (min pos (point-max)))) + (message "Parsing...") + (while (and (rng-do-some-validation) + (< rng-validate-up-to-date-end (min pos (point-max)))) + (force-mode-line-update) + ;; Force redisplay but don't allow idle timers to run. + (let ((timer-idle-list nil)) + (sit-for 0))) + (while (and (> arg 0) + (setq err (rng-find-previous-error-overlay pos))) + (setq pos (overlay-start err)) + (setq last-err err) + (setq arg (1- arg)))) + (if last-err + (rng-goto-error-overlay last-err) + (message "No previous errors") + nil))) + +(defun rng-goto-error-overlay (err) + "Goto the start of error overlay ERR and print its message." + (goto-char (overlay-start err)) + (setq rng-message-overlay-inhibit-point nil) + (rng-error-overlay-message err)) + +(defun rng-error-overlay-message (err) + (if err + (unless (or (and (eq rng-message-overlay-inhibit-point (point)) + (eq rng-message-overlay err)) + (= (point-max) 1)) + (message "%s" (overlay-get err 'help-echo)) + (setq rng-message-overlay-current t) + (setq rng-message-overlay-inhibit-point (point))) + (when (rng-current-message-from-error-overlay-p) + (message nil)) + (setq rng-message-overlay-inhibit-point nil)) + (setq rng-message-overlay err)) + +(defun rng-current-message-from-error-overlay-p () + (and rng-message-overlay-current + rng-message-overlay + (equal (overlay-get rng-message-overlay 'help-echo) + (current-message)))) + +(defun rng-find-next-error-overlay (pos) + "Return the overlay for the next error starting after POS. +Return nil if there is no such overlay or it is out of date. +Do not do any additional validation." + (when rng-error-count + (let (done found overlays) + (while (not done) + (cond (overlays + (let ((overlay (car overlays))) + (setq overlays (cdr overlays)) + (when (and (eq (overlay-get overlay 'category) 'rng-error) + ;; Is it the first? + (= (overlay-start overlay) pos) + ;; Is it up to date? + (<= (overlay-end overlay) + rng-validate-up-to-date-end)) + (setq done t) + (setq found overlay)))) + ((or (= pos (point-max)) + (> (setq pos (next-overlay-change pos)) + rng-validate-up-to-date-end)) + (setq done t)) + (t (setq overlays (overlays-in pos (1+ pos)))))) + found))) + +(defun rng-find-previous-error-overlay (pos) + "Return the overlay for the last error starting before POS. +Return nil if there is no such overlay or it is out of date. +Do not do any additional validation." + (when (and rng-error-count + (<= pos rng-validate-up-to-date-end)) + (let (done found overlays) + (while (not done) + (cond (overlays + (let ((overlay (car overlays))) + (setq overlays (cdr overlays)) + (when (and (eq (overlay-get overlay 'category) 'rng-error) + ;; Is it the first? + (= (overlay-start overlay) pos)) + (setq done t) + (setq found overlay)))) + ((= pos (point-min)) + (setq done t)) + (t + (setq pos (previous-overlay-change pos)) + (setq overlays (overlays-in pos (1+ pos)))))) + found))) + +;;; Parsing + +(defun rng-forward (&optional limit) + "Move forward over one or more tokens updating the state. +If LIMIT is nil, stop after tags. +If LIMIT is non-nil, stop when end of last token parsed is >= LIMIT. +Return nil at end of buffer, t otherwise." + (let (type) + (while (progn + (setq type (xmltok-forward)) + (rng-clear-overlays xmltok-start (point)) + (let ((continue + (cond ((eq type 'start-tag) + (rng-process-start-tag 'start-tag) + nil) + ((eq type 'end-tag) + (rng-process-end-tag) + nil) + ((eq type 'empty-element) + (rng-process-start-tag 'empty-element) + nil) + ((eq type 'space) + (rng-process-text xmltok-start nil t) + t) + ((eq type 'data) + (rng-process-text xmltok-start nil nil) + t) + ((memq type '(entity-ref char-ref)) + (cond (xmltok-replacement + (rng-process-text xmltok-start + nil + 'maybe + xmltok-replacement)) + ((eq type 'char-ref) + (rng-process-unknown-char)) + (t + (rng-process-unknown-entity))) + t) + ((eq type 'cdata-section) + (rng-process-text (+ xmltok-start 9) ; "<![CDATA[" + (- (point) 3) ; "]]>" + 'maybe) + t) + ((eq type 'partial-start-tag) + (rng-process-start-tag 'partial-start-tag) + t) + ((eq type 'partial-empty-element) + (rng-process-start-tag 'empty-element) + t) + ((eq type 'partial-end-tag) + (rng-process-end-tag 'partial) + t) + (t type)))) + (if limit + (< (point) limit) + continue)))) + (and type t))) + +(defun rng-process-start-tag (tag-type) + "TAG-TYPE is `start-tag' for a start-tag, `empty-element' for +an empty element. partial-empty-element should be passed +as empty-element." + (and rng-collecting-text (rng-flush-text)) + (setq rng-collecting-text nil) + (setq rng-pending-contents nil) + (rng-process-namespaces) + (let ((tag (rng-process-tag-name))) + (rng-process-attributes) + ;; set the state appropriately + (cond ((eq tag-type 'empty-element) + (rng-process-start-tag-close) + ;; deal with missing content with empty element + (when (not (rng-match-empty-content)) + (rng-match-after) + (rng-mark-start-tag-close "Empty content not allowed")) + (nxml-ns-pop-state)) + ((eq tag-type 'start-tag) + (rng-process-start-tag-close) + (setq rng-collecting-text (rng-match-text-typed-p)) + (rng-push-tag tag)) + ((eq tag-type 'partial-start-tag) + (rng-process-start-tag-close) + (rng-match-after) + (nxml-ns-pop-state))))) + +(defun rng-process-namespaces () + (let ((nsatts xmltok-namespace-attributes) + prefixes) + (nxml-ns-push-state) + (while nsatts + (let* ((att (car nsatts)) + (value (xmltok-attribute-value att))) + (when value + (let ((ns (nxml-make-namespace value)) + (prefix (and (xmltok-attribute-prefix att) + (xmltok-attribute-local-name att)))) + (cond ((member prefix prefixes) + (rng-mark-invalid "Duplicate namespace declaration" + (xmltok-attribute-name-start att) + (xmltok-attribute-name-end att))) + ((not prefix) + (nxml-ns-set-default ns)) + (ns + (nxml-ns-set-prefix prefix ns)) + (t + ;; cannot have xmlns:foo="" + (rng-mark-invalid "Namespace prefix cannot be undeclared" + (1- (xmltok-attribute-value-start att)) + (1+ (xmltok-attribute-value-end att))))) + (setq prefixes (cons prefix prefixes))))) + (setq nsatts (cdr nsatts))))) + +(defun rng-process-tag-name () + (let* ((prefix (xmltok-start-tag-prefix)) + (local-name (xmltok-start-tag-local-name)) + (name + (if prefix + (let ((ns (nxml-ns-get-prefix prefix))) + (cond (ns (cons ns local-name)) + ((and (setq ns + (rng-match-infer-start-tag-namespace + local-name)) + (rng-match-start-tag-open (cons ns local-name))) + (nxml-ns-set-prefix prefix ns) + (rng-mark-start-tag-close "Missing xmlns:%s=\"%s\"" + prefix + (nxml-namespace-name ns)) + nil) + (t + (rng-recover-bad-element-prefix) + nil))) + (cons (nxml-ns-get-default) local-name)))) + (when (and name + (not (rng-match-start-tag-open name))) + (unless (and (not (car name)) + (let ((ns (rng-match-infer-start-tag-namespace (cdr name)))) + (and ns + (rng-match-start-tag-open (cons ns local-name)) + (progn + (nxml-ns-set-default ns) + ;; XXX need to check we don't have xmlns="" + (rng-mark-start-tag-close "Missing xmlns=\"%s\"" + (nxml-namespace-name ns)) + t)))) + (rng-recover-start-tag-open name))) + (cons prefix local-name))) + +(defun rng-process-attributes () + (let ((atts xmltok-attributes) + names) + (while atts + (let* ((att (car atts)) + (prefix (xmltok-attribute-prefix att)) + (local-name (xmltok-attribute-local-name att)) + (name + (if prefix + (let ((ns (nxml-ns-get-prefix prefix))) + (and ns + (cons ns local-name))) + (cons nil local-name)))) + (cond ((not name) + (rng-recover-bad-attribute-prefix att)) + ((member name names) + (rng-recover-duplicate-attribute-name att)) + ((not (rng-match-attribute-name name)) + (rng-recover-attribute-name att)) + ((rng-match-text-typed-p) + (let ((value (xmltok-attribute-value att))) + (if value + (or (rng-match-attribute-value value) + (rng-recover-attribute-value att)) + (rng-match-after)))) + (t (or (rng-match-end-tag) + (error "Internal error:\ + invalid on untyped attribute value")))) + (setq names (cons name names))) + (setq atts (cdr atts))))) + +(defun rng-process-start-tag-close () + ;; deal with missing attributes + (unless (rng-match-start-tag-close) + (rng-mark-start-tag-close (rng-missing-attributes-message)) + (rng-match-ignore-attributes))) + +(defun rng-mark-start-tag-close (&rest args) + (when (not (eq xmltok-type 'partial-start-tag)) + (rng-mark-invalid (apply 'format args) + (- (point) + (if (eq xmltok-type 'empty-element) + 2 + 1)) + (point)))) + +(defun rng-recover-bad-element-prefix () + (rng-mark-invalid "Prefix not declared" + (1+ xmltok-start) + xmltok-name-colon) + (rng-match-unknown-start-tag-open)) + +(defun rng-recover-bad-attribute-prefix (att) + (rng-mark-invalid "Prefix not declared" + (xmltok-attribute-name-start att) + (xmltok-attribute-name-colon att))) + +(defun rng-recover-duplicate-attribute-name (att) + (rng-mark-invalid "Duplicate attribute" + (xmltok-attribute-name-start att) + (xmltok-attribute-name-end att))) + +(defun rng-recover-start-tag-open (name) + (let ((required (rng-match-required-element-name))) + (cond ((and required + (rng-match-start-tag-open required) + (rng-match-after) + (rng-match-start-tag-open name)) + (rng-mark-invalid (concat "Missing element " + (rng-quote-string + (rng-name-to-string required))) + xmltok-start + (1+ xmltok-start))) + ((and (rng-match-optionalize-elements) + (rng-match-start-tag-open name)) + (rng-mark-invalid "Required elements missing" + xmltok-start + (1+ xmltok-start))) + ((rng-match-out-of-context-start-tag-open name) + (rng-mark-invalid "Element not allowed in this context" + (1+ xmltok-start) + xmltok-name-end)) + (t + (rng-match-unknown-start-tag-open) + (rng-mark-invalid "Unknown element" + (1+ xmltok-start) + xmltok-name-end))))) + +(defun rng-recover-attribute-value (att) + (let ((start (xmltok-attribute-value-start att)) + (end (xmltok-attribute-value-end att))) + (if (= start end) + (rng-mark-invalid "Empty attribute value invalid" start (1+ end)) + (rng-mark-invalid "Attribute value invalid" start end))) + (rng-match-after)) + +(defun rng-recover-attribute-name (att) + (rng-mark-invalid "Attribute not allowed" + (xmltok-attribute-name-start att) + (xmltok-attribute-name-end att))) + +(defun rng-missing-attributes-message () + (let ((required-attributes + (rng-match-required-attribute-names))) + (cond ((not required-attributes) + "Required attributes missing") + ((not (cdr required-attributes)) + (concat "Missing attribute " + (rng-quote-string + (rng-name-to-string (car required-attributes) t)))) + (t + (concat "Missing attributes " + (mapconcat (lambda (nm) + (rng-quote-string + (rng-name-to-string nm t))) + required-attributes + ", ")))))) + +(defun rng-process-end-tag (&optional partial) + (cond ((not rng-open-elements) + (rng-mark-not-well-formed "Extra end-tag" + xmltok-start + (point))) + ((or partial + (equal (cons (xmltok-end-tag-prefix) + (xmltok-end-tag-local-name)) + (car rng-open-elements))) + (rng-end-element)) + (t (rng-recover-mismatched-end-tag)))) + +(defun rng-end-element () + (if rng-collecting-text + (let ((contents (rng-contents-string))) + (cond ((not contents) (rng-match-after)) + ((not (rng-match-element-value contents)) + (let* ((region (rng-contents-region))) + (if (not region) + (rng-mark-invalid "Empty content not allowed" + xmltok-start + (+ xmltok-start 2)) + (rng-mark-invalid "Invalid data" + (car region) + (cdr region)))) + (rng-match-after))) + (setq rng-collecting-text nil) + (setq rng-pending-contents nil)) + (unless (rng-match-end-tag) + (rng-mark-invalid (rng-missing-element-message) + xmltok-start + (+ xmltok-start 2)) + (rng-match-after))) + (nxml-ns-pop-state) + (when (eq (car rng-open-elements) t) + (rng-pop-tag)) + (rng-pop-tag)) + +(defun rng-missing-element-message () + (let ((element (rng-match-required-element-name))) + (if element + (concat "Missing element " + (rng-quote-string (rng-name-to-string element))) + "Required child elements missing"))) + +(defun rng-recover-mismatched-end-tag () + (let* ((name (cons (xmltok-end-tag-prefix) + (xmltok-end-tag-local-name)))) + (cond ((member name (cdr rng-open-elements)) + (let* ((suppress-error (eq (car rng-open-elements) t)) + missing top) + (while (progn + (setq top (car rng-open-elements)) + (rng-pop-tag) + (unless (eq top t) + (setq missing (cons top missing)) + (nxml-ns-pop-state) + (rng-match-after)) + (not (equal top name)))) + (unless suppress-error + (rng-mark-missing-end-tags (cdr missing))))) + ((rng-match-empty-before-p) + (rng-mark-mismatched-end-tag) + (rng-end-element)) + (t (rng-mark-mismatched-end-tag) + (setq rng-open-elements + (cons t rng-open-elements)))))) + +(defun rng-mark-missing-end-tags (missing) + (rng-mark-not-well-formed + (format "Missing end-tag%s %s" + (if (null (cdr missing)) "" "s") + (mapconcat (lambda (name) + (rng-quote-string + (if (car name) + (concat (car name) + ":" + (cdr name)) + (cdr name)))) + missing + ", ")) + xmltok-start + (+ xmltok-start 2))) + +(defun rng-mark-mismatched-end-tag () + (rng-mark-not-well-formed "Mismatched end-tag" + (+ xmltok-start 2) + xmltok-name-end)) + +(defun rng-push-tag (prefix-local-name) + (setq rng-open-elements + (cons prefix-local-name rng-open-elements))) + +(defun rng-pop-tag () + (setq rng-open-elements (cdr rng-open-elements))) + +(defun rng-contents-string () + (let ((contents rng-pending-contents)) + (cond ((not contents) "") + ((memq nil contents) nil) + ((not (cdr contents)) + (rng-segment-string (car contents))) + (t (apply 'concat + (nreverse (mapcar 'rng-segment-string + contents))))))) + +(defun rng-segment-string (segment) + (or (car segment) + (apply 'buffer-substring-no-properties + (cdr segment)))) + +(defun rng-segment-blank-p (segment) + (if (car segment) + (rng-blank-p (car segment)) + (apply 'rng-region-blank-p + (cdr segment)))) + +(defun rng-contents-region () + (if (null rng-pending-contents) + nil + (let* ((contents rng-pending-contents) + (head (cdar contents)) + (start (car head)) + (end (cadr head))) + (while (setq contents (cdr contents)) + (setq start (car (cdar contents)))) + (cons start end)))) + +(defun rng-process-text (start end whitespace &optional value) + "Process characters between position START and END as text. +END nil means point. WHITESPACE t means known to be whitespace, nil +means known not to be, anything else means unknown whether whitespace +or not. END must not be nil if WHITESPACE is neither t nor nil. +VALUE is a string or nil; nil means the value is equal to the +string between START and END." + (cond (rng-collecting-text + (setq rng-pending-contents (cons (list value start (or end (point))) + rng-pending-contents))) + ((not (or (and whitespace + (or (eq whitespace t) + (if value + (rng-blank-p value) + (rng-region-blank-p start end)))) + (rng-match-mixed-text))) + (rng-mark-invalid "Text not allowed" start (or end (point)))))) + +(defun rng-process-unknown-char () + (when rng-collecting-text + (setq rng-pending-contents + (cons nil rng-pending-contents)))) + +(defun rng-process-unknown-entity () + (rng-process-unknown-char) + (rng-match-optionalize-elements)) + +(defun rng-region-blank-p (beg end) + (save-excursion + (goto-char beg) + (= (skip-chars-forward " \n\r\t" end) + (- end beg)))) + +(defun rng-flush-text () + (while rng-pending-contents + (let ((segment (car rng-pending-contents))) + (unless (or (rng-segment-blank-p segment) + (rng-match-mixed-text)) + (let ((region (cdr segment))) + (rng-mark-invalid "In this context text cannot be mixed with elements" + (car region) + (cadr region))))) + (setq rng-pending-contents (cdr rng-pending-contents)))) + +(defun rng-process-end-document () + ;; this is necessary to clear empty overlays at (point-max) + (rng-clear-overlays (point) (point)) + (let ((start (save-excursion + (skip-chars-backward " \t\r\n") + (point)))) + (cond (rng-open-elements + (unless (eq (car rng-open-elements) t) + (rng-mark-not-well-formed "Missing end-tag" + start + (point)))) + ((not (rng-match-nullable-p)) + (rng-mark-not-well-formed "No document element" + start + (point)))))) + +(defun rng-process-encoding-name (beg end) + (unless (let ((charset (buffer-substring-no-properties beg end))) + (or (nxml-mime-charset-coding-system charset) + (string= (downcase charset) "utf-16"))) + (rng-mark-not-well-formed "Unsupported encoding" beg end))) + +(defun rng-name-to-string (name &optional attributep) + (let ((ns (car name)) + (local-name (cdr name))) + (if (or (not ns) + (and (not attributep) + (eq (nxml-ns-get-default) ns))) + local-name + (let ((prefix (nxml-ns-prefix-for ns))) + (if prefix + (concat prefix ":" local-name) + (concat "{" (symbol-name ns) "}" local-name)))))) + +(provide 'rng-valid) + +;;; rng-valid.el ends here
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/rng-xsd.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,858 @@ +;;; rng-xsd.el --- W3C XML Schema datatypes library for RELAX NG + +;; Copyright (C) 2003 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML, RelaxNG + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 2 of +;; the License, or (at your option) any later version. + +;; This program is distributed in the hope that it will be +;; useful, but WITHOUT ANY WARRANTY; without even the implied +;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +;; PURPOSE. See the GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public +;; License along with this program; if not, write to the Free +;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, +;; MA 02111-1307 USA + +;;; Commentary: + +;; The main entry point is `rng-xsd-compile'. The validator +;; knows to use this for the datatype library with URI +;; http://www.w3.org/2001/XMLSchema-datatypes because it +;; is the value of the rng-dt-compile property on that URI +;; as a symbol. +;; +;; W3C XML Schema Datatypes are specified by +;; http://www.w3.org/TR/xmlschema-2/ +;; Guidelines for using them with RELAX NG are described in +;; http://relaxng.org/xsd.html + +;;; Code: + +(require 'rng-dt) +(require 'rng-util) +(require 'xsd-regexp) + +;;;###autoload +(put 'http://www.w3.org/2001/XMLSchema-datatypes + 'rng-dt-compile + 'rng-xsd-compile) + +;;;###autoload +(defun rng-xsd-compile (name params) + "Provides W3C XML Schema as a RELAX NG datatypes library. NAME is a +symbol giving the local name of the datatype. PARAMS is a list of +pairs (PARAM-NAME . PARAM-VALUE) where PARAM-NAME is a symbol giving +the name of the parameter and PARAM-VALUE is a string giving its +value. If NAME or PARAMS are invalid, it calls rng-dt-error passing +it arguments in the same style as format; the value from rng-dt-error +will be returned. Otherwise, it returns a list. The first member of +the list is t if any string is a legal value for the datatype and nil +otherwise. The second argument is a symbol; this symbol will be +called as a function passing it a string followed by the remaining +members of the list. The function must return an object representing +the value of the datatype that was represented by the string, or nil +if the string is not a representation of any value. The object +returned can be any convenient non-nil value, provided that, if two +strings represent the same value, the returned objects must be equal." + (let ((convert (get name 'rng-xsd-convert))) + (if (not convert) + (rng-dt-error "There is no XSD datatype named %s" name) + (rng-xsd-compile1 name params convert)))) + +;;; Parameters + +(defun rng-xsd-compile1 (name params convert) + (if (null params) + (cons (equal convert '(identity)) + (cond ((eq name 'string) convert) + ((eq name 'normalizedString) + (cons 'rng-xsd-replace-space convert)) + ((and (not (eq name 'string)) + (or (memq 'identity convert) + (memq 'rng-xsd-convert-any-uri convert) + (memq 'rng-xsd-check-pattern convert))) + (cons 'rng-xsd-collapse-space convert)) + (t convert))) + (let* ((param (car params)) + (param-name (car param)) + (param-value (cdr param))) + (cond ((memq param-name + '(minExclusive maxExclusive minInclusive maxInclusive)) + (let ((limit (apply (car convert) + (cons param-value + (cdr convert)))) + (less-than-fun (get name 'rng-xsd-less-than))) + (cond ((not limit) + (rng-dt-error "Minimum value %s is not valid" + param-value)) + ((not less-than-fun) + (rng-dt-error "Values of type %s are not ordered" + param-name)) + (t + (rng-xsd-compile1 name + (cdr params) + (cons (get param-name + 'rng-xsd-check) + (cons less-than-fun + (cons limit convert)))))))) + ((memq param-name '(length minLength maxLength)) + (let ((limit (rng-xsd-string-to-non-negative-integer param-value)) + (length-fun (get name 'rng-xsd-length))) + (cond ((not limit) + (rng-dt-error "Length %s is not valid" param-value)) + ((not length-fun) + (rng-dt-error "Values of type %s do not have a length" + param-name)) + (t + (rng-xsd-compile1 name + (cdr params) + (cons (get param-name + 'rng-xsd-check) + (cons length-fun + (cons limit convert)))))))) + ((memq param-name '(fractionDigits totalDigits)) + (let ((n (rng-xsd-string-to-non-negative-integer param-value))) + (cond ((not n) + (rng-dt-error "Number of digits %s is not valid" + param-value)) + (t + (rng-xsd-compile1 name + (cdr params) + (cons (get param-name + 'rng-xsd-check) + (cons n convert))))))) + ((eq param-name 'pattern) + (condition-case err + (rng-xsd-compile1 name + (cdr params) + (cons 'rng-xsd-check-pattern + (cons (concat + "\\`" + (xsdre-translate param-value) + "\\'") + convert))) + (xsdre-invalid-regexp + (rng-dt-error "Invalid regular expression (%s)" + (nth 1 err))))) + ((memq param-name '(enumeration whiteSpace)) + (rng-dt-error "Facet %s cannot be used in RELAX NG" param-name)) + (t (rng-dt-error "Unknown facet %s" param-name)))))) + +(defun rng-xsd-string-to-non-negative-integer (str) + (and (rng-xsd-convert-integer str) + (let ((n (string-to-number str))) + (and (integerp n) + (>= n 0) + n)))) + +(defun rng-xsd-collapse-space (str convert &rest args) + (apply convert (cons (mapconcat 'identity (split-string str "[ \t\n\r]+") + " ") + args))) + +(defun rng-xsd-replace-space (str convert &rest args) + (apply convert + (cons (let ((i 0) + copied) + (while (and (setq i (string-match "[\r\n\t]" str i)) + (or copied (setq copied (copy-sequence str))) + (aset copied i 32) + (setq i (1+ i)))) + (or copied str)) + args))) + +(put 'minExclusive 'rng-xsd-check 'rng-xsd-check-min-exclusive) +(put 'minInclusive 'rng-xsd-check 'rng-xsd-check-min-inclusive) +(put 'maxExclusive 'rng-xsd-check 'rng-xsd-check-max-exclusive) +(put 'maxInclusive 'rng-xsd-check 'rng-xsd-check-max-inclusive) +(put 'length 'rng-xsd-check 'rng-xsd-check-length) +(put 'minLength 'rng-xsd-check 'rng-xsd-check-min-length) +(put 'maxLength 'rng-xsd-check 'rng-xsd-check-max-length) +(put 'fractionDigits 'rng-xsd-check 'rng-xsd-check-fraction-digits) +(put 'totalDigits 'rng-xsd-check 'rng-xsd-check-total-digits) + +(defun rng-xsd-check-min-exclusive (str less-than-fun limit convert &rest args) + (let ((obj (apply convert (cons str args)))) + (and obj + (funcall less-than-fun limit obj) + obj))) + +(defun rng-xsd-check-min-inclusive (str less-than-fun limit convert &rest args) + (let ((obj (apply convert (cons str args)))) + (and obj + (or (funcall less-than-fun limit obj) + (equal limit obj)) + obj))) + +(defun rng-xsd-check-max-exclusive (str less-than-fun limit convert &rest args) + (let ((obj (apply convert (cons str args)))) + (and obj + (funcall less-than-fun obj limit) + obj))) + +(defun rng-xsd-check-max-inclusive (str less-than-fun limit convert &rest args) + (let ((obj (apply convert (cons str args)))) + (and obj + (or (funcall less-than-fun obj limit) + (equal obj limit)) + obj))) + +(defun rng-xsd-check-min-length (str length-fun limit convert &rest args) + (let ((obj (apply convert (cons str args)))) + (and obj + (>= (funcall length-fun obj) limit) + obj))) + +(defun rng-xsd-check-max-length (str length-fun limit convert &rest args) + (let ((obj (apply convert (cons str args)))) + (and obj + (<= (funcall length-fun obj) limit) + obj))) + +(defun rng-xsd-check-length (str length-fun len convert &rest args) + (let ((obj (apply convert (cons str args)))) + (and obj + (= (funcall length-fun obj) len) + obj))) + +(defun rng-xsd-check-fraction-digits (str n convert &rest args) + (let ((obj (apply convert (cons str args)))) + (and obj + (<= (length (aref obj 2)) n) + obj))) + +(defun rng-xsd-check-total-digits (str n convert &rest args) + (let ((obj (apply convert (cons str args)))) + (and obj + (<= (+ (length (aref obj 1)) + (length (aref obj 2))) + n) + obj))) + +(defun rng-xsd-check-pattern (str regexp convert &rest args) + (and (string-match regexp str) + (apply convert (cons str args)))) + + +(defun rng-xsd-convert-boolean (string) + (and (string-match "\\`[ \t\n\r]*\\(?:\\(true\\|1\\)\\|false\\|0\\)[ \t\n\r]*\\'" string) + (if (match-beginning 1) 'true 'false))) + +(defun rng-xsd-convert-decimal (string) + "Convert a string representing a decimal to an object representing +its values. A decimal value is represented by a vector [SIGN +INTEGER-DIGITS FRACTION-DIGITS] where SIGN is 1 or -1, INTEGER-DIGITS +is a string containing zero or more digits, with no leading zero, and +FRACTION-DIGITS is a string containing zero or more digits with no +trailing digits. For example, -0021.0430 would be represented by [-1 +\"21\" \"043\"]." + (and (string-match "\\`[ \t\n\r]*\\([-+]\\)?\\(0*\\([1-9][0-9]*\\)?\\(\\.\\([0-9]*[1-9]\\)?0*\\)?\\)[ \t\n\r]*\\'" string) + (let ((digits (match-string 2 string))) + (and (not (string= digits ".")) + (not (string= digits "")))) + (let ((integer-digits (match-string 3 string))) + (vector (if (and (equal (match-string 1 string) "-") + ;; Normalize -0 to 0 + integer-digits) + -1 + 1) + (or integer-digits "") + (or (match-string 5 string) ""))))) + +(defun rng-xsd-convert-integer (string) + (and (string-match "\\`[ \t\n\r]*\\([-+]\\)?\\(?:0*\\([1-9][0-9]*\\)\\|0+\\)[ \t\n\r]*\\'" string) + (let ((integer-digits (match-string 2 string))) + (vector (if (and (equal (match-string 1 string) "-") + ;; Normalize -0 to 0 + integer-digits) + -1 + 1) + (or integer-digits "") + "")))) + +(defun rng-xsd-decimal< (n1 n2) + (< (rng-xsd-compare-decimal n1 n2) 0)) + +(defun rng-xsd-compare-decimal (n1 n2) + "Return a < 0, 0, > 0 according as n1 < n2, n1 = n2 or n1 > n2." + (let* ((sign1 (aref n1 0)) + (sign2 (aref n2 0)) + (sign (- sign1 sign2))) + (if (= sign 0) + (* sign1 + (let* ((int1 (aref n1 1)) + (int2 (aref n2 1)) + (len1 (length int1)) + (len2 (length int2)) + (lencmp (- len1 len2))) + (if (eq lencmp 0) + (if (string= int1 int2) + (rng-xsd-strcmp (aref n1 2) (aref n2 2)) + (rng-xsd-strcmp int1 int2)) + lencmp))) + sign))) + +(defconst rng-xsd-float-regexp + (concat "\\`[ \r\n\t]*\\(?:" + "\\(" + "[-+]?\\(?:[0-9]+\\(?:\\.[0-9]*\\)?\\|\\.[0-9]+\\)" + "\\(?:[eE][-+]?[0-9]+\\)?" + "\\)" + "\\|\\(INF\\)" + "\\|\\(-INF\\)" + "\\|\\(NaN\\)" + "\\)[ \r\n\t]*\\'")) + +(defun rng-xsd-convert-float (string) + (cond ((not (string-match rng-xsd-float-regexp string)) nil) + ((match-beginning 1) + (float (string-to-number (match-string 1 string)))) + ((match-beginning 2) 1.0e+INF) + ((match-beginning 3) -1.0e+INF) + ;; Don't use a NaN float because we want NaN to be equal to NaN + ((match-beginning 4) 'NaN))) + +(defun rng-xsd-float< (f1 f2) + (and (not (eq f1 'NaN)) + (not (eq f2 'NaN)) + (< f1 f2))) + +(defun rng-xsd-convert-token (string regexp) + (and (string-match regexp string) + (match-string 1 string))) + +(defun rng-xsd-convert-hex-binary (string) + (and (string-match "\\`[ \r\n\t]*\\(\\(?:[0-9A-Fa-f][0-9A-Fa-f]\\)*\\)[ \r\n\t]*\\'" + string) + (downcase (match-string 1 string)))) + +(defun rng-xsd-hex-binary-length (obj) + (/ (length obj) 2)) + +(defconst rng-xsd-base64-binary-regexp + (let ((S "[ \t\r\n]*") + (B04 "[AQgw]") + (B16 "[AEIMQUYcgkosw048]") + (B64 "[A-Za-z0-9+/]")) + (concat "\\`" S "\\(?:\\(?:" B64 S "\\)\\{4\\}\\)*" + "\\(?:" B64 S B64 S B16 S "=" S + "\\|" B64 S B04 S "=" S "=" S "\\)?\\'"))) + +(defun rng-xsd-convert-base64-binary (string) + (and (string-match rng-xsd-base64-binary-regexp string) + (replace-regexp-in-string "[ \t\r\n]+" "" string t t))) + +(defun rng-xsd-base64-binary-length (obj) + (let ((n (* (/ (length obj) 4) 3))) + (if (and (> n 0) + (string= (substring obj -1) "=")) + (- n (if (string= (substring obj -2) "==") + 2 + 1)) + n))) + +(defun rng-xsd-convert-any-uri (string) + (and (string-match "\\`\\(?:[^%]\\|%[0-9a-fA-F][0-9a-fA-F]\\)?*\\'" string) + (string-match "\\`[^#]*\\(?:#[^#]*\\)?\\'" string) + (string-match "\\`\\(?:[a-zA-Z][-+.A-Za-z0-9]*:.+\\|[^:]*\\(?:[#/?].*\\)?\\)\\'" string) + string)) + +(defun rng-xsd-make-date-time-regexp (template) + "Returns a regular expression matching a ISO 8601 date/time. The +template is a string with Y standing for years field, M standing for +months, D standing for day of month, T standing for a literal T, t +standing for time and - standing for a literal hyphen. A time zone is +always allowed at the end. Regardless of the fields appearing in the +template, the regular expression will have twelve groups matching the +year sign, year, month, day of month, hours, minutes, integer seconds, +fractional seconds (including leading period), time zone, time zone +sign, time zone hours, time zone minutes." + (let ((i 0) + (len (length template)) + (parts nil) + first last c) + (while (< i len) + (setq c (aref template i)) + (setq parts + (cons (cond ((eq c ?Y) + (setq first 0) + (setq last 1) + "\\(-\\)?\\(\\(?:[1-9][0-9]*\\)?[0-9]\\{4\\}\\)") + ((eq c ?M) + (or first + (setq first 2)) + (setq last 2) + "\\([0-9][0-9]\\)") + ((eq c ?D) + (or first + (setq first 3)) + (setq last 3) + "\\([0-9][0-9]\\)") + ((eq c ?t) + (or first + (setq first 4)) + (setq last 7) + "\\([0-9][0-9]\\):\\([0-9][0-9]\\):\\([0-9][0-9]\\)\\(\\.[0-9]*\\)?") + (t (string c))) + parts)) + (setq i (1+ i))) + (while (< last 7) + (setq last (1+ last)) + ;; Add dummy fields that can never much but keep the group + ;; numbers uniform. + (setq parts (cons "\\(\\'X\\)?" parts))) + (setq parts (cons "\\(Z\\|\\([-+]\\)\\([0-9][0-9]\\):\\([0-5][0-9]\\)\\)?[ \t\n\r]*\\'" + parts)) + (setq parts (cons "\\`[ \t\n\r]*" (nreverse parts))) + (while (> first 0) + (setq first (1- first)) + (setq parts (cons "\\(X\\)?" parts))) + (apply 'concat parts))) + +(defconst rng-xsd-seconds-per-day (* 24 60 60)) +(defconst rng-xsd-days-in-month [31 28 31 30 31 30 31 31 30 31 30 31]) + +(defun rng-xsd-days-in-month (year month) + (if (and (= month 2) (rng-xsd-leap-year-p year)) + 29 + (aref rng-xsd-days-in-month (1- month)))) + +(defconst rng-xsd-months-to-days + (let ((v (make-vector 12 nil)) + (total 0) + (i 0)) + (while (< i 12) + (setq total (+ total (aref rng-xsd-days-in-month i))) + (aset v i total) + (setq i (1+ i))) + v)) + +(defun rng-xsd-convert-date-time (string regexp) + "Converts an XML Schema date/time to a list. Returns nil if +invalid. REGEXP is a regexp for parsing the date time as returned by +`rng-xsd-make-date-time-regexp'. The list has 4 members (HAS-TIME-ZONE +DAY SECOND SECOND-FRACTION), where HAS-TIME-ZONE is t or nil depending +on whether a time zone was specified, DAY is an integer giving a day +number (with Jan 1 1AD being day 1), SECOND is the second within that +day, and SECOND-FRACTION is a float giving the fractional part of the +second." + (and (string-match regexp string) + (let ((year-sign (match-string 1 string)) + (year (match-string 2 string)) + (month (match-string 3 string)) + (day (match-string 4 string)) + (hour (match-string 5 string)) + (minute (match-string 6 string)) + (second (match-string 7 string)) + (second-fraction (match-string 8 string)) + (has-time-zone (match-string 9 string)) + (time-zone-sign (match-string 10 string)) + (time-zone-hour (match-string 11 string)) + (time-zone-minute (match-string 12 string))) + (setq year-sign (if year-sign -1 1)) + (setq year + (if year + (* year-sign + (string-to-number year)) + 2000)) + (setq month + (if month (string-to-number month) 1)) + (setq day + (if day (string-to-number day) 1)) + (setq hour + (if hour (string-to-number hour) 0)) + (setq minute + (if minute (string-to-number minute) 0)) + (setq second + (if second (string-to-number second) 0)) + (setq second-fraction + (if second-fraction + (float (string-to-number second-fraction)) + 0.0)) + (setq has-time-zone (and has-time-zone t)) + (setq time-zone-sign + (if (equal time-zone-sign "-") -1 1)) + (setq time-zone-hour + (if time-zone-hour (string-to-number time-zone-hour) 0)) + (setq time-zone-minute + (if time-zone-minute (string-to-number time-zone-minute) 0)) + (and (>= month 1) + (<= month 12) + (>= day 1) + (<= day (rng-xsd-days-in-month year month)) + (<= hour 23) + (<= minute 59) + (<= second 60) ; leap second + (<= time-zone-hour 23) + (<= time-zone-minute 59) + (cons has-time-zone + (rng-xsd-add-seconds + (list (rng-xsd-date-to-days year month day) + (rng-xsd-time-to-seconds hour minute second) + second-fraction) + (* (rng-xsd-time-to-seconds time-zone-hour + time-zone-minute + 0) + (- time-zone-sign)))))))) + +(defun rng-xsd-leap-year-p (year) + (and (= (% year 4) 0) + (or (/= (% year 100) 0) + (= (% year 400) 0)))) + +(defun rng-xsd-time-to-seconds (hour minute second) + (+ (* (+ (* hour 60) + minute) + 60) + second)) + +(defconst rng-xsd-max-tz (rng-xsd-time-to-seconds 14 0 0)) + +(defun rng-xsd-date-time< (dt1 dt2) + (cond ((eq (car dt1) (car dt2)) + (rng-xsd-number-list< (cdr dt1) (cdr dt2))) + ((car dt1) + (rng-xsd-number-list< (cdr dt1) + (rng-xsd-add-seconds (cdr dt2) + (- rng-xsd-max-tz)))) + (t + (rng-xsd-number-list< (rng-xsd-add-seconds (cdr dt1) + rng-xsd-max-tz) + (cdr dt2))))) + +(defun rng-xsd-add-seconds (date offset) + (let ((day (nth 0 date)) + (second (+ (nth 1 date) offset)) + (fraction (nth 2 date))) + (cond ((< second 0) + (list (1- day) + (+ second rng-xsd-seconds-per-day) + fraction)) + ((>= second rng-xsd-seconds-per-day) + (list (1+ day) + (- second rng-xsd-seconds-per-day) + fraction)) + (t (list day second fraction))))) + +(defun rng-xsd-number-list< (numbers1 numbers2) + (while (and numbers1 (= (car numbers1) (car numbers2))) + (setq numbers1 (cdr numbers1)) + (setq numbers2 (cdr numbers2))) + (and numbers1 + (< (car numbers1) (car numbers2)))) + +(defun rng-xsd-date-to-days (year month day) + "Return a unique day number where Jan 1 1 AD is day 1" + (if (> year 0) ; AD + (+ (rng-xsd-days-in-years (- year 1)) + (rng-xsd-day-number-in-year year month day)) + (- (+ (- (rng-xsd-days-in-years (- 3 year)) + (rng-xsd-days-in-years 3)) + (- (if (rng-xsd-leap-year-p year) 366 365) + (rng-xsd-day-number-in-year year month day)))))) + +(defun rng-xsd-days-in-years (years) + "The number of days in YEARS years where the first year is 1AD." + (+ (* 365 years) + (/ years 4) + (- (/ years 100)) + (/ years 400))) + +(defun rng-xsd-day-number-in-year (year month day) + (+ (if (= month 1) + 0 + (aref rng-xsd-months-to-days (- month 2))) + day + (if (and (> month 2) + (rng-xsd-leap-year-p year)) + 1 + 0))) + +(defconst rng-xsd-duration-regexp + "\\`[ \t\r\n]*\\(-\\)?P\ +\\([0-9]+Y\\)?\\([0-9]+M\\)?\\([0-9]+D\\)?\ +\\(?:T\\([0-9]+H\\)?\\([0-9]+M\\)?\ +\\(\\([0-9]+\\(?:\\.[0-9]*\\)?\\|\\.[0-9]+\\)S\\)?\\)?\ +[ \t\r\n]*\\'") + + +(defun rng-xsd-convert-duration (string) + (and (string-match rng-xsd-duration-regexp string) + (let ((last (substring string -1))) + (not (or (string= last "P") + (string= last "T")))) + ;; years months days hours minutes seconds + (let ((v (make-vector 6 0)) + (sign (if (match-beginning 1) -1 1)) + (i 0)) + (while (< i 6) + (let ((start (match-beginning (+ i 2)))) + (when start + (aset v i (* sign + (string-to-number + (substring string + start + (1- (match-end (+ i 2))))))))) + (setq i (1+ i))) + ;; Force seconds to be float so that equal works properly. + (aset v 5 (float (aref v 5))) + v))) + +(defconst rng-xsd-min-seconds-per-month (* 28 rng-xsd-seconds-per-day)) + +(defun rng-xsd-duration< (d1 d2) + (let* ((months1 (rng-xsd-duration-months d1)) + (months2 (rng-xsd-duration-months d2)) + (seconds1 (rng-xsd-duration-seconds d1)) + (seconds2 (rng-xsd-duration-seconds d2))) + (cond ((< months1 months2) + (if (< (- seconds1 seconds2) rng-xsd-min-seconds-per-month) + t + (rng-xsd-months-seconds< months1 seconds1 months2 seconds2))) + ((> months1 months2) + (if (< (- seconds2 seconds1) rng-xsd-min-seconds-per-month) + nil + (rng-xsd-months-seconds< months1 seconds1 months2 seconds2))) + (t (< seconds1 seconds2))))) + +(defconst xsd-duration-reference-dates + '((1696 . 9) (1697 . 2) (1903 . 3) (1903 . 7))) + +(defun rng-xsd-months-seconds< (months1 seconds1 months2 seconds2) + (let ((ret t) + (ref-dates xsd-duration-reference-dates)) + (while (let* ((ref-date (car ref-dates)) + (ref-year (car ref-date)) + (ref-month (cdr ref-date))) + (unless (< (+ (rng-xsd-month-seconds months1 + ref-year + ref-month) + seconds1) + (+ (rng-xsd-month-seconds months2 + ref-year + ref-month) + seconds2)) + (setq ret nil)) + (and ret + (setq ref-dates (cdr ref-dates))))) + ret)) + + +(defun rng-xsd-month-seconds (months ref-year ref-month) + "Return the seconds in a number of months starting on a reference date. +Returns a floating point number." + (* (rng-xsd-month-days (abs months) ref-year ref-month) + (float rng-xsd-seconds-per-day) + (if (< months 0) -1.0 1.0))) + +(defconst rng-xsd-years-per-gregorian-cycle 400) +(defconst rng-xsd-months-per-gregorian-cycle + (* rng-xsd-years-per-gregorian-cycle 12)) +(defconst rng-xsd-leap-years-per-gregorian-cycle (- 100 (- 4 1))) +(defconst rng-xsd-days-per-gregorian-cycle + (+ (* 365 rng-xsd-years-per-gregorian-cycle) + rng-xsd-leap-years-per-gregorian-cycle)) + +(defun rng-xsd-month-days (months ref-year ref-month) + "Return the days in a number of months starting on a reference date. +MONTHS must be an integer >= 0." + (let ((days 0)) + (setq months (mod months rng-xsd-months-per-gregorian-cycle)) + ;; This may be rather slow, but it is highly unlikely + ;; ever to be used in real life. + (while (> months 0) + (setq days + (+ (rng-xsd-days-in-month ref-year ref-month) + days)) + (setq ref-month + (if (eq ref-month 12) + (progn + (setq ref-year (1+ ref-year)) + 1) + (1+ ref-month))) + (setq months (1- months))) + (+ (* (/ months rng-xsd-months-per-gregorian-cycle) + rng-xsd-days-per-gregorian-cycle) + days))) + +(defun rng-xsd-duration-months (d) + (+ (* (aref d 0) 12) + (aref d 1))) + +(defun rng-xsd-duration-seconds (d) + (+ (* (+ (* (+ (* (aref d 2) + 24.0) + (aref d 3)) + 60.0) + (aref d 4)) + 60.0) + (aref d 5))) + +(defun rng-xsd-convert-qname (string) + (and (string-match "\\`[ \r\n\t]*\\([_[:alpha:]][-._[:alnum:]]*\\(:[_[:alpha:]][-._[:alnum:]]*\\)?\\)[ \r\n\t]*\\'" string) + (let ((colon (match-beginning 2)) + (context (apply (car rng-dt-namespace-context-getter) + (cdr rng-dt-namespace-context-getter)))) + (if colon + (let* ((prefix (substring string + (match-beginning 1) + colon)) + (binding (assoc prefix (cdr context)))) + (and binding + (cons (cdr binding) + (substring string + (1+ colon) + (match-end 1))))) + (cons (car context) + (match-string 1 string)))))) + +(defun rng-xsd-convert-list (string convert &rest args) + (let* ((tokens (split-string string "[ \t\n\r]+")) + (tem tokens)) + (while tem + (let ((obj (apply convert + (cons (car tem) args)))) + (cond (obj + (setcar tem obj) + (setq tem (cdr tem))) + (t + (setq tokens nil) + (setq tem nil))))) + ;; Fortuitously this returns nil if the list is empty + ;; which is what we want since the list types + ;; have to have one or more members. + tokens)) + +(defun rng-xsd-strcmp (s1 s2) + (cond ((string= s1 s2) 0) + ((string< s1 s2) -1) + (t 1))) + +(put 'string 'rng-xsd-convert '(identity)) +(put 'string 'rng-xsd-length 'length) +(put 'string 'rng-xsd-matches-anything t) + +(put 'normalizedString 'rng-xsd-convert '(identity)) +(put 'normalizedString 'rng-xsd-length 'length) +(put 'normalizedString 'rng-xsd-matches-anything t) + +(put 'token 'rng-xsd-convert '(identity)) +(put 'token 'rng-xsd-length 'length) +(put 'token 'rng-xsd-matches-anything t) + +(put 'hexBinary 'rng-xsd-convert '(rng-xsd-convert-hex-binary)) +(put 'hexBinary 'rng-xsd-length 'rng-xsd-hex-binary-length) + +(put 'base64Binary 'rng-xsd-convert '(rng-xsd-convert-base64-binary)) +(put 'base64Binary 'rng-xsd-length 'rng-xsd-base64-binary-length) + +(put 'boolean 'rng-xsd-convert '(rng-xsd-convert-boolean)) + +(put 'float 'rng-xsd-convert '(rng-xsd-convert-float)) +(put 'float 'rng-xsd-less-than 'rng-xsd-float<) + +(put 'double 'rng-xsd-convert '(rng-xsd-convert-float)) +(put 'double 'rng-xsd-less-than 'rng-xsd-float<) + +(put 'decimal 'rng-xsd-convert '(rng-xsd-convert-decimal)) +(put 'decimal 'rng-xsd-less-than 'rng-xsd-decimal<) + +(put 'integer 'rng-xsd-convert '(rng-xsd-convert-integer)) +(put 'integer 'rng-xsd-less-than 'rng-xsd-decimal<) + +(defun rng-xsd-def-integer-type (name min max) + (put name 'rng-xsd-less-than 'rng-xsd-decimal<) + (put name + 'rng-xsd-convert + (cdr (rng-xsd-compile 'integer + (append (and min `((minInclusive . ,min))) + (and max `((maxInclusive . ,max)))))))) + +(defun rng-xsd-def-token-type (name regexp) + (put name 'rng-xsd-convert (list 'rng-xsd-convert-token + (concat "\\`[\r\n\t ]*\\(" + regexp + "\\)[\r\n\t ]*\\'"))) + (put name 'rng-xsd-length 'length)) + +(rng-xsd-def-token-type 'NMTOKEN "[-.:_[:alnum:]]+") +(rng-xsd-def-token-type 'Name "[:_[:alpha:]][-.:_[:alnum:]]*") +(rng-xsd-def-token-type 'NCName "[_[:alpha:]][-._[:alnum:]]*") +(rng-xsd-def-token-type 'language + "[a-zA-Z]\\{1,8\\}\\(?:-[a-zA-Z0-9]\\{1,8\\}\\)*") + +(put 'ENTITY 'rng-xsd-convert (get 'NCName 'rng-xsd-convert)) +(put 'ENTITY 'rng-xsd-length 'length) +(put 'ID 'rng-xsd-convert (get 'NCName 'rng-xsd-convert)) +(put 'ID 'rng-xsd-length 'length) +(put 'IDREF 'rng-xsd-convert (get 'NCName 'rng-xsd-convert)) +(put 'IDREF 'rng-xsd-length 'length) + +(defun rng-xsd-def-list-type (name member-name) + (put name 'rng-xsd-convert (cons 'rng-xsd-convert-list + (get member-name 'rng-xsd-convert))) + (put name 'rng-xsd-length 'length)) + +(rng-xsd-def-list-type 'NMTOKENS 'NMTOKEN) +(rng-xsd-def-list-type 'IDREFS 'IDREF) +(rng-xsd-def-list-type 'ENTITIES 'ENTITY) + +(put 'anyURI 'rng-xsd-convert '(rng-xsd-convert-any-uri)) +(put 'anyURI 'rng-xsd-length 'length) + +(put 'QName 'rng-xsd-convert '(rng-xsd-convert-qname)) +(put 'NOTATION 'rng-xsd-convert '(rng-xsd-convert-qname)) + +(defconst rng-xsd-long-max "9223372036854775807") +(defconst rng-xsd-long-min "-9223372036854775808") +(defconst rng-xsd-int-max "2147483647") +(defconst rng-xsd-int-min "-2147483648") +(defconst rng-xsd-short-max "32767") +(defconst rng-xsd-short-min "-32768") +(defconst rng-xsd-byte-max "127") +(defconst rng-xsd-byte-min "-128") +(defconst rng-xsd-unsigned-long-max "18446744073709551615") +(defconst rng-xsd-unsigned-int-max "4294967295") +(defconst rng-xsd-unsigned-short-max "65535") +(defconst rng-xsd-unsigned-byte-max "255") + +(rng-xsd-def-integer-type 'nonNegativeInteger "0" nil) +(rng-xsd-def-integer-type 'positiveInteger "1" nil) +(rng-xsd-def-integer-type 'nonPositiveInteger nil "0") +(rng-xsd-def-integer-type 'negativeInteger nil "-1") +(rng-xsd-def-integer-type 'long rng-xsd-long-min rng-xsd-long-max) +(rng-xsd-def-integer-type 'int rng-xsd-int-min rng-xsd-int-max) +(rng-xsd-def-integer-type 'short rng-xsd-short-min rng-xsd-short-max) +(rng-xsd-def-integer-type 'byte rng-xsd-byte-min rng-xsd-byte-max) +(rng-xsd-def-integer-type 'unsignedLong "0" rng-xsd-unsigned-long-max) +(rng-xsd-def-integer-type 'unsignedInt "0" rng-xsd-unsigned-int-max) +(rng-xsd-def-integer-type 'unsignedShort "0" rng-xsd-unsigned-short-max) +(rng-xsd-def-integer-type 'unsignedByte "0" rng-xsd-unsigned-byte-max) + +(defun rng-xsd-def-date-time-type (name template) + (put name 'rng-xsd-convert (list 'rng-xsd-convert-date-time + (rng-xsd-make-date-time-regexp template))) + (put name 'rng-xsd-less-than 'rng-xsd-date-time<)) + +(rng-xsd-def-date-time-type 'dateTime "Y-M-DTt") +(rng-xsd-def-date-time-type 'time "t") +(rng-xsd-def-date-time-type 'date "Y-M-D") +(rng-xsd-def-date-time-type 'gYearMonth "Y-M") +(rng-xsd-def-date-time-type 'gYear "Y") +(rng-xsd-def-date-time-type 'gMonthDay "--M-D") +(rng-xsd-def-date-time-type 'gDay "---D") +(rng-xsd-def-date-time-type 'gMonth "--M") + +(put 'duration 'rng-xsd-convert '(rng-xsd-convert-duration)) +(put 'duration 'rng-xsd-less-than 'rng-xsd-duration<) + +(provide 'rng-xsd) + +;;; rng-xsd.el ends here
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/subdirs.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,8 @@ +;; -*- no-byte-compile: t -*- +;; In load-path, after this directory should come +;; certain of its subdirectories. Here we specify them. +(normal-top-level-add-to-load-path '("char-name" )) +;; Local Variables: +;; version-control: never +;; no-byte-compile: t +;; End:
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/test.invalid.xml Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,8 @@ +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>An invalid document</title> + </head> + <body> + <p>This XHTML document is <span class="#foo">invalid</span>.</p> + </body> +</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/test.valid.xml Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,8 @@ +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title>A valid document</title> + </head> + <body> + <p>This is a valid, albeit boring, XHTML document.</p> + </body> +</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/xmltok.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,1925 @@ +;;; xmltok.el --- XML tokenization + +;; Copyright (C) 2003 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 2 of +;; the License, or (at your option) any later version. + +;; This program is distributed in the hope that it will be +;; useful, but WITHOUT ANY WARRANTY; without even the implied +;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +;; PURPOSE. See the GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public +;; License along with this program; if not, write to the Free +;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, +;; MA 02111-1307 USA + +;;; Commentary: + +;; This implements an XML 1.0 parser. It also implements the XML +;; Namespaces Recommendation. It is designed to be conforming, but it +;; works a bit differently from a normal XML parser. An XML document +;; consists of the prolog and an instance. The prolog is parsed as a +;; single unit using `xmltok-forward-prolog'. The instance is +;; considered as a sequence of tokens, where a token is something like +;; a start-tag, a comment, a chunk of data or a CDATA section. The +;; tokenization of the instance is stateless: the tokenization of one +;; part of the instance does not depend on tokenization of the +;; preceding part of the instance. This allows the instance to be +;; parsed incrementally. The main entry point is `xmltok-forward': +;; this can be called at any point in the instance provided it is +;; between tokens. The other entry point is `xmltok-forward-special' +;; which skips over tokens other comments, processing instructions or +;; CDATA sections (i.e. the constructs in an instance that can contain +;; less than signs that don't start a token). +;; +;; This is a non-validating XML 1.0 processor. It does not resolve +;; parameter entities (including the external DTD subset) and it does +;; not resolve external general entities. +;; +;; It is non-conformant by design in the following respects. +;; +;; 1. It expects the client to detect aspects of well-formedness that +;; are not internal to a single token, specifically checking that +;; end-tags match start-tags and that the instance contains exactly +;; one element. +;; +;; 2. It expects the client to detect duplicate attributes. Detection +;; of duplicate attributes after expansion of namespace prefixes +;; requires the namespace processing state. Detection of duplicate +;; attributes before expansion of namespace prefixes does not, but is +;; redundant given that the client will do detection of duplicate +;; attributes after expansion of namespace prefixes. +;; +;; 3. It allows the client to recover from well-formedness errors. +;; This is essential for use in applications where the document is +;; being parsed during the editing process. +;; +;; 4. It does not support documents that do not conform to the lexical +;; requirements of the XML Namespaces Recommendation (e.g. a document +;; with a colon in an entity name). +;; +;; There are also a number of things that have not yet been +;; implemented that make it non-conformant. +;; +;; 1. It does not implement default attributes. ATTLIST declarations +;; are parsed, but no checking is done on the content of attribute +;; value literals specifying default attribute values, and default +;; attribute values are not reported to the client. +;; +;; 2. It does not implement internal entities containing elements. If +;; an internal entity is referenced and parsing its replacement text +;; yields one or more tags, then it will skip the reference and +;; report this to the client. +;; +;; 3. It does not check the syntax of public identifiers in the DTD. +;; +;; 4. It allows some non-ASCII characters in certain situations where +;; it should not. For example, it only enforces XML 1.0's +;; restrictions on name characters strictly for ASCII characters. The +;; problem here is XML's character model is based squarely on Unicode, +;; whereas Emacs's is not (as of version 21). It is not clear what +;; the right thing to do is. + +;;; Code: + +(defvar xmltok-type nil) +(defvar xmltok-start nil) +(defvar xmltok-name-colon nil) +(defvar xmltok-name-end nil) +(defvar xmltok-replacement nil + "String containing replacement for a character or entity reference.") + +(defvar xmltok-attributes nil + "List containing attributes of last scanned element. +Each member of the list is a vector representing an attribute, which +can be accessed using the functions `xmltok-attribute-name-start', +`xmltok-attribute-name-colon', `xmltok-attribute-name-end', +`xmltok-attribute-value-start', `xmltok-attribute-value-end', +`xmltok-attribute-raw-normalized-value', `xmltok-attribute-refs'.") + +(defvar xmltok-namespace-attributes nil + "List containing namespace declarations of last scanned element. +List has same format as `xmltok-attributes'.") + +(defvar xmltok-dtd nil + "Information about the DTD used by `xmltok-forward'. +`xmltok-forward-prolog' sets this up. + +It consists of an alist of general entity names vs definitions. The +first member of the alist is t if references to entities not in the +alist are well-formed \(e.g. because there's an external subset that +wasn't parsed). + +Each general entity name is a string. The definition is either nil, a +symbol, a string, a cons cell. If the definition is nil, then it +means that it's an internal entity but the result of parsing it is +unknown. If it is a symbol, then the symbol is either `unparsed', +meaning the entity is an unparsed entity, `external', meaning the +entity is or references an external entity, `element', meaning the +entity includes one or more elements, or `not-well-formed', meaning +the replacement text is not well-formed. If the definition is a +string, then the replacement text of the entity is that string; this +happens only during the parsing of the prolog. If the definition is a +cons cell \(ER . AR), then ER specifies the string that results from +referencing the entity in element content and AR is either nil, +meaning the replacement text included a <, or a string which is the +normalized attribute value.") + +(defvar xmltok-dependent-regions nil + "List of descriptors of regions that a parsed token depends on. + +A token depends on a region if the region occurs after the token and a +change in the region may require the token to be reparsed. This only +happens with markup that is not well-formed. For example, if a <? +occurs without a matching ?>, then the <? is returned as a +not-well-formed token. However, this token is dependent on region +from the end of the token to the end of the buffer: if this ever +contains ?> then the buffer must be reparsed from the <?. + +A region descriptor is a list (FUN START END ARG ...), where FUN is a +function to be called when the region changes, START and END are +integers giving the start and end of the region, and ARG... are +additional arguments to be passed to FUN. FUN will be called with 5 +arguments followed by the additional arguments if any: the position of +the start of the changed area in the region, the position of the end +of the changed area in the region, the length of the changed area +before the change, the position of the start of the region, the +position of the end of the region. FUN must return non-nil if the +region needs reparsing. FUN will be called in a save-excursion with +match-data saved. + +`xmltok-forward', `xmltok-forward-special' and `xmltok-forward-prolog' +may add entries to the beginning of this list, but will not clear it. +`xmltok-forward' and `xmltok-forward-special' will only add entries +when returning tokens of type not-well-formed.") + +(defvar xmltok-errors nil + "List of errors detected by `xmltok-forward' and `xmltok-forward-prolog'. +When `xmltok-forward' and `xmltok-forward-prolog' detect a +well-formedness error, they will add an entry to the beginning of this +list. Each entry is a vector [MESSAGE START END], where MESSAGE is a +string giving the error message and START and END are integers +indicating the position of the error.") + +(defmacro xmltok-save (&rest body) + `(let (xmltok-type + xmltok-start + xmltok-name-colon + xmltok-name-end + xmltok-replacement + xmltok-attributes + xmltok-namespace-attributes + xmltok-dependent-regions + xmltok-errors) + ,@body)) + +(put 'xmltok-save 'lisp-indent-function 0) +(def-edebug-spec xmltok-save t) + +(defsubst xmltok-attribute-name-start (att) + (aref att 0)) + +(defsubst xmltok-attribute-name-colon (att) + (aref att 1)) + +(defsubst xmltok-attribute-name-end (att) + (aref att 2)) + +(defsubst xmltok-attribute-value-start (att) + (aref att 3)) + +(defsubst xmltok-attribute-value-end (att) + (aref att 4)) + +(defsubst xmltok-attribute-raw-normalized-value (att) + "Return an object representing the normalized value of ATT. +This can t indicating that the normalized value is the same as the +buffer substring from the start to the end of the value or nil +indicating that the value is not well-formed or a string." + (aref att 5)) + +(defsubst xmltok-attribute-refs (att) + "Return a list of the entity and character references in ATT. +Each member is a vector [TYPE START END] where TYPE is either char-ref +or entity-ref and START and END are integers giving the start and end +of the reference. Nested entity references are not included in the list." + (aref att 6)) + +(defun xmltok-attribute-prefix (att) + (let ((colon (xmltok-attribute-name-colon att))) + (and colon + (buffer-substring-no-properties (xmltok-attribute-name-start att) + colon)))) + +(defun xmltok-attribute-local-name (att) + (let ((colon (xmltok-attribute-name-colon att))) + (buffer-substring-no-properties (if colon + (1+ colon) + (xmltok-attribute-name-start att)) + (xmltok-attribute-name-end att)))) + +(defun xmltok-attribute-value (att) + (let ((rnv (xmltok-attribute-raw-normalized-value att))) + (and rnv + (if (stringp rnv) + rnv + (buffer-substring-no-properties (xmltok-attribute-value-start att) + (xmltok-attribute-value-end att)))))) + +(defun xmltok-start-tag-prefix () + (and xmltok-name-colon + (buffer-substring-no-properties (1+ xmltok-start) + xmltok-name-colon))) + +(defun xmltok-start-tag-local-name () + (buffer-substring-no-properties (1+ (or xmltok-name-colon + xmltok-start)) + xmltok-name-end)) + +(defun xmltok-end-tag-prefix () + (and xmltok-name-colon + (buffer-substring-no-properties (+ 2 xmltok-start) + xmltok-name-colon))) + +(defun xmltok-end-tag-local-name () + (buffer-substring-no-properties (if xmltok-name-colon + (1+ xmltok-name-colon) + (+ 2 xmltok-start)) + xmltok-name-end)) + +(defun xmltok-start-tag-qname () + (buffer-substring-no-properties (+ xmltok-start 1) xmltok-name-end)) + +(defun xmltok-end-tag-qname () + (buffer-substring-no-properties (+ xmltok-start 2) xmltok-name-end)) + +(defsubst xmltok-make-attribute (name-begin + name-colon + name-end + &optional + value-begin + value-end + raw-normalized-value) + "Make an attribute. RAW-NORMALIZED-VALUE is nil if the value is +not well-formed, t if the normalized value is the string between +VALUE-BEGIN and VALUE-END, otherwise a STRING giving the value." + (vector name-begin + name-colon + name-end + value-begin + value-end + raw-normalized-value + nil)) + +(defsubst xmltok-error-message (err) + (aref err 0)) + +(defsubst xmltok-error-start (err) + (aref err 1)) + +(defsubst xmltok-error-end (err) + (aref err 2)) + +(defsubst xmltok-make-error (message start end) + (vector message start end)) + +(defun xmltok-add-error (message &optional start end) + (setq xmltok-errors + (cons (xmltok-make-error message + (or start xmltok-start) + (or end (point))) + xmltok-errors))) + +(defun xmltok-add-dependent (fun &optional start end &rest args) + (setq xmltok-dependent-regions + (cons (cons fun + (cons (or start xmltok-start) + (cons (or end (point-max)) + args))) + xmltok-dependent-regions))) + +(defun xmltok-forward () + (setq xmltok-start (point)) + (let* ((case-fold-search nil) + (space-count (skip-chars-forward " \t\r\n")) + (ch (char-after))) + (cond ((eq ch ?\<) + (cond ((> space-count 0) + (setq xmltok-type 'space)) + (t + (goto-char (1+ (point))) + (xmltok-scan-after-lt)))) + ((eq ch ?\&) + (cond ((> space-count 0) + (setq xmltok-type 'space)) + (t + (goto-char (1+ (point))) + (xmltok-scan-after-amp + (lambda (start end) + (xmltok-handle-entity start end)))))) + ((re-search-forward "[<&]\\|\\(]]>\\)" nil t) + (cond ((not (match-beginning 1)) + (goto-char (match-beginning 0)) + ;; must have got a non-space char + (setq xmltok-type 'data)) + ((= (match-beginning 1) xmltok-start) + (xmltok-add-error "Found `]]>' not closing a CDATA section") + (setq xmltok-type 'not-well-formed)) + (t + (goto-char (match-beginning 0)) + (setq xmltok-type + (if (= (point) (+ xmltok-start space-count)) + 'space + 'data))))) + ((eq ch nil) + (setq xmltok-type + (if (> space-count 0) + 'space + nil))) + (t + (goto-char (point-max)) + (setq xmltok-type 'data))))) + +(defun xmltok-forward-special (bound) + "Scan forward past the first special token starting at or after point. +Return nil if there is no special token that starts before BOUND. +CDATA sections, processing instructions and comments (and indeed +anything starting with < following by ? or !) count +as special. Return the type of the token." + (when (re-search-forward "<[?!]" (1+ bound) t) + (setq xmltok-start (match-beginning 0)) + (goto-char (1+ xmltok-start)) + (let ((case-fold-search nil)) + (xmltok-scan-after-lt)))) + +(eval-when-compile + + ;; A symbolic regexp is represented by a list whose CAR is the string + ;; containing the regexp and whose cdr is a list of symbolic names + ;; for the groups in the string. + + ;; Construct a symbolic regexp from a regexp. + (defun xmltok-r (str) + (cons str nil)) + + ;; Concatenate zero of more regexps and symbolic regexps. + (defun xmltok+ (&rest args) + (let (strs names) + (while args + (let ((arg (car args))) + (if (stringp arg) + (setq strs (cons arg strs)) + (setq strs (cons (car arg) strs)) + (setq names (cons (cdr arg) names))) + (setq args (cdr args)))) + (cons (apply 'concat (nreverse strs)) + (apply 'append (nreverse names)))))) + +(eval-when-compile + ;; Make a symbolic group named NAME from the regexp R. + ;; R may be a symbolic regexp or an ordinary regexp. + (defmacro xmltok-g (name &rest r) + (let ((sym (make-symbol "r"))) + `(let ((,sym (xmltok+ ,@r))) + (if (stringp ,sym) + (cons (concat "\\(" ,sym "\\)") (cons ',name nil)) + (cons (concat "\\(" (car ,sym) "\\)") (cons ',name (cdr ,sym))))))) + + (defun xmltok-p (&rest r) (xmltok+ "\\(?:" + (apply 'xmltok+ r) + "\\)")) + + ;; Get the group index of ELEM in a LIST of symbols. + (defun xmltok-get-index (elem list) + (or elem + (error "Missing group name")) + (let ((found nil) + (i 1)) + (while list + (cond ((eq elem (car list)) + (setq found i) + (setq list nil)) + (t + (setq i (1+ i)) + (setq list (cdr list))))) + (or found + (error "Bad group name %s" elem)))) + + ;; Define a macro SYM using a symbolic regexp R. + ;; SYM can be called in three ways: + ;; (SYM regexp) + ;; expands to the regexp in R + ;; (SYM start G) + ;; expands to + ;; (match-beginning N) + ;; where N is the group index of G in R. + ;; (SYM end G) + ;; expands to + ;; (match-end N) + ;; where N is the group index of G in R. + (defmacro xmltok-defregexp (sym r) + `(defalias ',sym + (let ((r ,r)) + `(macro lambda (action &optional group-name) + (cond ((eq action 'regexp) + ,(car r)) + ((or (eq action 'start) (eq action 'beginning)) + (list 'match-beginning (xmltok-get-index group-name + ',(cdr r)))) + ((eq action 'end) + (list 'match-end (xmltok-get-index group-name + ',(cdr r)))) + ((eq action 'string) + (list 'match-string + (xmltok-get-index group-name ',(cdr r)))) + ((eq action 'string-no-properties) + (list 'match-string-no-properties + (xmltok-get-index group-name ',(cdr r)))) + (t (error "Invalid action: %s" action)))))))) + + +(eval-when-compile + (let* ((or "\\|") + (open "\\(?:") + (gopen "\\(") + (close "\\)") + (name-start-char "[_[:alpha:]]") + (name-continue-not-start-char "[-.[:digit:]]") + (name-continue-char "[-._[:alnum:]]") + (* "*") + (+ "+") + (opt "?") + (question "\\?") + (s "[ \r\t\n]") + (s+ (concat s +)) + (s* (concat s *)) + (ncname (concat name-start-char name-continue-char *)) + (entity-ref + (xmltok+ (xmltok-g entity-name ncname) + (xmltok-g entity-ref-close ";") opt)) + (decimal-ref + (xmltok+ (xmltok-g decimal "[0-9]" +) + (xmltok-g decimal-ref-close ";") opt)) + (hex-ref + (xmltok+ "x" open + (xmltok-g hex "[0-9a-fA-F]" +) + (xmltok-g hex-ref-close ";") opt + close opt)) + (char-ref + (xmltok+ (xmltok-g number-sign "#") + open decimal-ref or hex-ref close opt)) + (start-tag-close + (xmltok+ open (xmltok-g start-tag-close s* ">") + or open (xmltok-g empty-tag-slash s* "/") + (xmltok-g empty-tag-close ">") opt close + or (xmltok-g start-tag-s s+) + close)) + (start-tag + (xmltok+ (xmltok-g start-tag-name + ncname (xmltok-g start-tag-colon ":" ncname) opt) + start-tag-close opt)) + (end-tag + (xmltok+ (xmltok-g end-tag-slash "/") + open (xmltok-g end-tag-name + ncname + (xmltok-g end-tag-colon ":" ncname) opt) + (xmltok-g end-tag-close s* ">") opt + close opt)) + (comment + (xmltok+ (xmltok-g markup-declaration "!") + (xmltok-g comment-first-dash "-" + (xmltok-g comment-open "-") opt) opt)) + (cdata-section + (xmltok+ "!" + (xmltok-g marked-section-open "\\[") + open "C" + open "D" + open "A" + open "T" + open "A" + (xmltok-g cdata-section-open "\\[" ) opt + close opt ; A + close opt ; T + close opt ; A + close opt ; D + close opt)) ; C + (processing-instruction + (xmltok-g processing-instruction-question question))) + + (xmltok-defregexp xmltok-ncname (xmltok+ open ncname close)) + + (xmltok-defregexp xmltok-after-amp + (xmltok+ entity-ref or char-ref)) + (xmltok-defregexp xmltok-after-lt + (xmltok+ start-tag + or end-tag + ;; cdata-section must come before comment + ;; because we treat <! as a comment + ;; and Emacs doesn't do fully greedy matching + ;; by default + or cdata-section + or comment + or processing-instruction)) + (xmltok-defregexp + xmltok-attribute + (let* ((lit1 + (xmltok+ "'" + "[^<'&\r\n\t]*" + (xmltok-g complex1 "[&\r\n\t][^<']*") opt + "'")) + (lit2 (cons (replace-regexp-in-string "'" "\"" (car lit1)) + '(complex2))) + (literal (xmltok-g literal lit1 or lit2)) + (name (xmltok+ open (xmltok-g xmlns "xmlns") or ncname close + (xmltok-g colon ":" ncname) opt))) + (xmltok+ (xmltok-g name name) + s* "=" + ;; If the literal isn't followed by what it should be, + ;; then the closing delimiter is probably really the + ;; opening delimiter of another literal, so don't + ;; absorb the literal in this case. + open s* literal start-tag-close close opt))) + (xmltok-defregexp + xmltok-xml-declaration + (let* ((literal-content "[-._:a-zA-Z0-9]+") + (literal + (concat open "\"" literal-content "\"" + or "'" literal-content "'" close)) + (version-att + (xmltok+ open + s+ (xmltok-g version-name "version") + s* "=" + s* (xmltok-g version-value literal) + close opt)) + (encoding-att + (xmltok+ open + s+ (xmltok-g encoding-name "encoding") + s* "=" + s* (xmltok-g encoding-value literal) + close opt)) + (yes-no + (concat open "yes" or "no" close)) + (standalone-att + (xmltok+ open + s+ (xmltok-g standalone-name "standalone") + s* "=" + s* (xmltok-g standalone-value + "\"" yes-no "\"" or "'" yes-no "'") + close opt))) + (xmltok+ "<" question "xml" + version-att + encoding-att + standalone-att + s* question ">"))) + (xmltok-defregexp + xmltok-prolog + (let* ((single-char (xmltok-g single-char "[[|,(\"'>]")) + (internal-subset-close (xmltok-g internal-subset-close + "][ \t\r\n]*>")) + (starts-with-close-paren + (xmltok-g close-paren + ")" + (xmltok-p + (xmltok-g close-paren-occur "[+?]") + or + (xmltok-g close-paren-star "\\*")) + opt)) + (starts-with-percent + (xmltok-g percent + "%" (xmltok-g param-entity-ref + ncname + (xmltok-g param-entity-ref-close + ";") opt) opt)) + (starts-with-nmtoken-not-name + (xmltok-g nmtoken + (xmltok-p name-continue-not-start-char or ":") + (xmltok-p name-continue-char or ":") *)) + (nmtoken-after-colon + (xmltok+ + (xmltok-p name-continue-not-start-char or ":") + (xmltok-p name-continue-char or ":") * + or + name-start-char + name-continue-char * + ":" + (xmltok-p name-continue-char or ":") *)) + (after-ncname + (xmltok+ (xmltok-g ncname-nmtoken + ":" (xmltok-p nmtoken-after-colon)) + or (xmltok-p (xmltok-g colon ":" ncname) + (xmltok-g colon-name-occur "[?+*]") opt) + or (xmltok-g ncname-occur "[?+*]") + or (xmltok-g ncname-colon ":"))) + (starts-with-name + (xmltok-g name ncname (xmltok-p after-ncname) opt)) + (starts-with-hash + (xmltok-g pound + "#" (xmltok-g hash-name ncname))) + (markup-declaration + (xmltok-g markup-declaration + "!" (xmltok-p (xmltok-g comment-first-dash "-" + (xmltok-g comment-open "-") opt) + or (xmltok-g named-markup-declaration + ncname)) opt)) + (after-lt + (xmltok+ markup-declaration + or (xmltok-g processing-instruction-question + question) + or (xmltok-g instance-start + ncname))) + (starts-with-lt (xmltok-g less-than "<" (xmltok-p after-lt) opt))) + (xmltok+ starts-with-lt + or single-char + or starts-with-close-paren + or starts-with-percent + or starts-with-name + or starts-with-nmtoken-not-name + or starts-with-hash + or internal-subset-close))))) + +(defconst xmltok-ncname-regexp (xmltok-ncname regexp)) + +(defun xmltok-scan-after-lt () + (cond ((not (looking-at (xmltok-after-lt regexp))) + (xmltok-add-error "`<' that is not markup must be entered as `<'") + (setq xmltok-type 'not-well-formed)) + (t + (goto-char (match-end 0)) + (cond ((xmltok-after-lt start start-tag-close) + (setq xmltok-name-end + (xmltok-after-lt end start-tag-name)) + (setq xmltok-name-colon + (xmltok-after-lt start start-tag-colon)) + (setq xmltok-attributes nil) + (setq xmltok-namespace-attributes nil) + (setq xmltok-type 'start-tag)) + ((xmltok-after-lt start end-tag-close) + (setq xmltok-name-end + (xmltok-after-lt end end-tag-name)) + (setq xmltok-name-colon + (xmltok-after-lt start end-tag-colon)) + (setq xmltok-type 'end-tag)) + ((xmltok-after-lt start start-tag-s) + (setq xmltok-name-end + (xmltok-after-lt end start-tag-name)) + (setq xmltok-name-colon + (xmltok-after-lt start start-tag-colon)) + (setq xmltok-namespace-attributes nil) + (setq xmltok-attributes nil) + (xmltok-scan-attributes) + xmltok-type) + ((xmltok-after-lt start empty-tag-close) + (setq xmltok-name-end + (xmltok-after-lt end start-tag-name)) + (setq xmltok-name-colon + (xmltok-after-lt start start-tag-colon)) + (setq xmltok-attributes nil) + (setq xmltok-namespace-attributes nil) + (setq xmltok-type 'empty-element)) + ((xmltok-after-lt start cdata-section-open) + (setq xmltok-type + (if (search-forward "]]>" nil t) + 'cdata-section + (xmltok-add-error "No closing ]]>") + (xmltok-add-dependent 'xmltok-unclosed-reparse-p + nil + nil + "]]>") + 'not-well-formed))) + ((xmltok-after-lt start processing-instruction-question) + (xmltok-scan-after-processing-instruction-open)) + ((xmltok-after-lt start comment-open) + (xmltok-scan-after-comment-open)) + ((xmltok-after-lt start empty-tag-slash) + (setq xmltok-name-end + (xmltok-after-lt end start-tag-name)) + (setq xmltok-name-colon + (xmltok-after-lt start start-tag-colon)) + (setq xmltok-attributes nil) + (setq xmltok-namespace-attributes nil) + (xmltok-add-error "Expected `/>'" (1- (point))) + (setq xmltok-type 'partial-empty-element)) + ((xmltok-after-lt start start-tag-name) + (xmltok-add-error "Missing `>'" + nil + (1+ xmltok-start)) + (setq xmltok-name-end + (xmltok-after-lt end start-tag-name)) + (setq xmltok-name-colon + (xmltok-after-lt start start-tag-colon)) + (setq xmltok-namespace-attributes nil) + (setq xmltok-attributes nil) + (setq xmltok-type 'partial-start-tag)) + ((xmltok-after-lt start end-tag-name) + (setq xmltok-name-end (xmltok-after-lt end end-tag-name)) + (setq xmltok-name-colon + (xmltok-after-lt start end-tag-colon)) + (cond ((and (not xmltok-name-colon) + (eq (char-after) ?:)) + (goto-char (1+ (point))) + (xmltok-add-error "Expected name following `:'" + (1- (point)))) + (t + (xmltok-add-error "Missing `>'" + nil + (1+ xmltok-start)))) + (setq xmltok-type 'partial-end-tag)) + ((xmltok-after-lt start end-tag-slash) + (xmltok-add-error "Expected name following `</'") + (setq xmltok-name-end nil) + (setq xmltok-name-colon nil) + (setq xmltok-type 'partial-end-tag)) + ((xmltok-after-lt start marked-section-open) + (xmltok-add-error "Expected `CDATA[' after `<!['" + xmltok-start + (+ 3 xmltok-start)) + (setq xmltok-type 'not-well-formed)) + ((xmltok-after-lt start comment-first-dash) + (xmltok-add-error "Expected `-' after `<!-'" + xmltok-start + (+ 3 xmltok-start)) + (setq xmltok-type 'not-well-formed)) + ((xmltok-after-lt start markup-declaration) + (xmltok-add-error "Expected `[CDATA[' or `--' after `<!'" + xmltok-start + (+ 2 xmltok-start)) + (setq xmltok-type 'not-well-formed)) + (t + (xmltok-add-error "Not well-formed") + (setq xmltok-type 'not-well-formed)))))) + +;; XXX This should be unified with +;; xmltok-scan-prolog-after-processing-instruction-open +;; XXX maybe should include rest of line (up to any <,>) in unclosed PI +(defun xmltok-scan-after-processing-instruction-open () + (cond ((not (search-forward "?>" nil t)) + (xmltok-add-error "No closing ?>" + xmltok-start + (+ xmltok-start 2)) + (xmltok-add-dependent 'xmltok-unclosed-reparse-p + nil + nil + "?>") + (setq xmltok-type 'not-well-formed)) + (t + (cond ((not (save-excursion + (goto-char (+ 2 xmltok-start)) + (and (looking-at (xmltok-ncname regexp)) + (setq xmltok-name-end (match-end 0))))) + (setq xmltok-name-end (+ xmltok-start 2)) + (xmltok-add-error "<? not followed by name" + (+ xmltok-start 2) + (+ xmltok-start 3))) + ((not (or (memq (char-after xmltok-name-end) + '(?\n ?\t ?\r ? )) + (= xmltok-name-end (- (point) 2)))) + (xmltok-add-error "Target not followed by whitespace" + xmltok-name-end + (1+ xmltok-name-end))) + ((and (= xmltok-name-end (+ xmltok-start 5)) + (save-excursion + (goto-char (+ xmltok-start 2)) + (let ((case-fold-search t)) + (looking-at "xml")))) + (xmltok-add-error "Processing instruction target is xml" + (+ xmltok-start 2) + (+ xmltok-start 5)))) + (setq xmltok-type 'processing-instruction)))) + +(defun xmltok-scan-after-comment-open () + (setq xmltok-type + (cond ((not (search-forward "--" nil t)) + (xmltok-add-error "No closing -->") + (xmltok-add-dependent 'xmltok-unclosed-reparse-p + nil + nil + ;; not --> because + ;; -- is not allowed + ;; in comments in XML + "--") + 'not-well-formed) + ((eq (char-after) ?>) + (goto-char (1+ (point))) + 'comment) + (t + (xmltok-add-dependent + 'xmltok-semi-closed-reparse-p + nil + (point) + "--" + 2) + ;; just include the <!-- in the token + (goto-char (+ xmltok-start 4)) + ;; Need do this after the goto-char because + ;; marked error should just apply to <!-- + (xmltok-add-error "First following `--' not followed by `>'") + 'not-well-formed)))) + +(defun xmltok-scan-attributes () + (let ((recovering nil) + (atts-needing-normalization nil)) + (while (cond ((or (looking-at (xmltok-attribute regexp)) + ;; use non-greedy group + (when (looking-at (concat "[^<>\n]+?" + (xmltok-attribute regexp))) + (unless recovering + (xmltok-add-error "Malformed attribute" + (point) + (save-excursion + (goto-char (xmltok-attribute start + name)) + (skip-chars-backward "\r\n\t ") + (point)))) + t)) + (setq recovering nil) + (goto-char (match-end 0)) + (let ((att (xmltok-add-attribute))) + (when att + (setq atts-needing-normalization + (cons att atts-needing-normalization)))) + (cond ((xmltok-attribute start start-tag-s) t) + ((xmltok-attribute start start-tag-close) + (setq xmltok-type 'start-tag) + nil) + ((xmltok-attribute start empty-tag-close) + (setq xmltok-type 'empty-element) + nil) + ((xmltok-attribute start empty-tag-slash) + (setq xmltok-type 'partial-empty-element) + (xmltok-add-error "Expected `/>'" + (1- (point))) + nil) + ((looking-at "[ \t\r\n]*[\"']") + (goto-char (match-end 0)) + (xmltok-add-error "Missing closing delimiter" + (1- (point))) + (setq recovering t) + t) + ((looking-at "[ \t]*\\([^ \t\r\n\"'=<>/]+\\)[ \t\r\n/>]") + (goto-char (match-end 1)) + (xmltok-add-error "Attribute value not quoted" + (match-beginning 1)) + (setq recovering t) + t) + (t + (xmltok-add-error "Missing attribute value" + (1- (point))) + (setq recovering t) + t))) + ((looking-at "[^<>\n]*/>") + (let ((start (point))) + (goto-char (match-end 0)) + (unless recovering + (xmltok-add-error "Malformed empty-element" + start + (- (point) 2)))) + (setq xmltok-type 'empty-element) + nil) + ((looking-at "[^<>\n]*>") + (let ((start (point))) + (goto-char (match-end 0)) + (unless recovering + (xmltok-add-error "Malformed start-tag" + start + (1- (point))))) + (setq xmltok-type 'start-tag) + nil) + (t + (when recovering + (skip-chars-forward "^<>\n")) + (xmltok-add-error "Missing `>'" + xmltok-start + (1+ xmltok-start)) + (setq xmltok-type 'partial-start-tag) + nil))) + (while atts-needing-normalization + (xmltok-normalize-attribute (car atts-needing-normalization)) + (setq atts-needing-normalization (cdr atts-needing-normalization)))) + (setq xmltok-attributes + (nreverse xmltok-attributes)) + (setq xmltok-namespace-attributes + (nreverse xmltok-namespace-attributes))) + +(defun xmltok-add-attribute () + "Return the attribute if it needs normalizing, otherwise nil." + (let* ((needs-normalizing nil) + (att + (if (xmltok-attribute start literal) + (progn + (setq needs-normalizing + (or (xmltok-attribute start complex1) + (xmltok-attribute start complex2))) + (xmltok-make-attribute (xmltok-attribute start name) + (xmltok-attribute start colon) + (xmltok-attribute end name) + (1+ (xmltok-attribute start literal)) + (1- (xmltok-attribute end literal)) + (not needs-normalizing))) + (xmltok-make-attribute (xmltok-attribute start name) + (xmltok-attribute start colon) + (xmltok-attribute end name))))) + (if (xmltok-attribute start xmlns) + (setq xmltok-namespace-attributes + (cons att xmltok-namespace-attributes)) + (setq xmltok-attributes + (cons att xmltok-attributes))) + (and needs-normalizing + att))) + +(defun xmltok-normalize-attribute (att) + (let ((end (xmltok-attribute-value-end att)) + (well-formed t) + (value-parts nil) + (refs nil)) + (save-excursion + (goto-char (xmltok-attribute-value-start att)) + (while (progn + (let ((n (skip-chars-forward "^\r\t\n&" end))) + (when (> n 0) + (setq value-parts + (cons (buffer-substring-no-properties (- (point) n) + (point)) + value-parts)))) + (when (< (point) end) + (goto-char (1+ (point))) + (cond ((eq (char-before) ?\&) + (let ((xmltok-start (1- (point))) + xmltok-type xmltok-replacement) + (xmltok-scan-after-amp + (lambda (start end) + (xmltok-handle-entity start end t))) + (cond ((or (eq xmltok-type 'char-ref) + (eq xmltok-type 'entity-ref)) + (setq refs + (cons (vector xmltok-type + xmltok-start + (point)) + refs)) + (if xmltok-replacement + (setq value-parts + (cons xmltok-replacement + value-parts)) + (setq well-formed nil))) + (t (setq well-formed nil))))) + (t (setq value-parts + (cons " " value-parts))))) + (< (point) end)))) + (when well-formed + (aset att 5 (apply 'concat (nreverse value-parts)))) + (aset att 6 (nreverse refs)))) + +(defun xmltok-scan-after-amp (entity-handler) + (cond ((not (looking-at (xmltok-after-amp regexp))) + (xmltok-add-error "`&' that is not markup must be entered as `&'") + (setq xmltok-type 'not-well-formed)) + (t + (goto-char (match-end 0)) + (cond ((xmltok-after-amp start entity-ref-close) + (funcall entity-handler + (xmltok-after-amp start entity-name) + (xmltok-after-amp end entity-name)) + (setq xmltok-type 'entity-ref)) + ((xmltok-after-amp start decimal-ref-close) + (xmltok-scan-char-ref (xmltok-after-amp start decimal) + (xmltok-after-amp end decimal) + 10)) + ((xmltok-after-amp start hex-ref-close) + (xmltok-scan-char-ref (xmltok-after-amp start hex) + (xmltok-after-amp end hex) + 16)) + ((xmltok-after-amp start number-sign) + (xmltok-add-error "Missing character number") + (setq xmltok-type 'not-well-formed)) + (t + (xmltok-add-error "Missing closing `;'") + (setq xmltok-type 'not-well-formed)))))) + +(defconst xmltok-entity-error-messages + '((unparsed . "Referenced entity is unparsed") + (not-well-formed . "Referenced entity is not well-formed") + (external nil . "Referenced entity is external") + (element nil . "Referenced entity contains <"))) + +(defun xmltok-handle-entity (start end &optional attributep) + (let* ((name (buffer-substring-no-properties start end)) + (name-def (assoc name xmltok-dtd)) + (def (cdr name-def))) + (cond ((setq xmltok-replacement (and (consp def) + (if attributep + (cdr def) + (car def))))) + ((null name-def) + (unless (eq (car xmltok-dtd) t) + (xmltok-add-error "Referenced entity has not been defined" + start + end))) + ((and attributep (consp def)) + (xmltok-add-error "Referenced entity contains <" + start + end)) + (t + (let ((err (cdr (assq def xmltok-entity-error-messages)))) + (when (consp err) + (setq err (if attributep (cdr err) (car err)))) + (when err + (xmltok-add-error err start end))))))) + +(defun xmltok-scan-char-ref (start end base) + (setq xmltok-replacement + (let ((n (string-to-int (buffer-substring-no-properties start end) + base))) + (cond ((and (integerp n) (xmltok-valid-char-p n)) + (setq n (xmltok-unicode-to-char n)) + (and n (string n))) + (t + (xmltok-add-error "Invalid character code" start end) + nil)))) + (setq xmltok-type 'char-ref)) + +(defun xmltok-char-number (start end) + (let* ((base (if (eq (char-after (+ start 2)) ?x) + 16 + 10)) + (n (string-to-int + (buffer-substring-no-properties (+ start (if (= base 16) 3 2)) + (1- end)) + base))) + (and (integerp n) + (xmltok-valid-char-p n) + n))) + +(defun xmltok-unclosed-reparse-p (change-start + change-end + pre-change-length + start + end + delimiter) + (let ((len-1 (1- (length delimiter)))) + (goto-char (max start (- change-start len-1))) + (search-forward delimiter (min end (+ change-end len-1)) t))) + +;; Handles a <!-- with the next -- not followed by > + +(defun xmltok-semi-closed-reparse-p (change-start + change-end + pre-change-length + start + end + delimiter + delimiter-length) + (or (<= (- end delimiter-length) change-end) + (xmltok-unclosed-reparse-p change-start + change-end + pre-change-length + start + end + delimiter))) + +(defun xmltok-valid-char-p (n) + "Return non-nil if n is the Unicode code of a valid XML character." + (cond ((< n #x20) (memq n '(#xA #xD #x9))) + ((< n #xD800) t) + ((< n #xE000) nil) + ((< n #xFFFE) t) + (t (and (> n #xFFFF) + (< n #x110000))))) + +(defun xmltok-unicode-to-char (n) + "Return the character corresponding to Unicode scalar value N. +Return nil if unsupported in Emacs." + (decode-char 'ucs n)) + +;;; Prolog parsing + +(defvar xmltok-contains-doctype nil) +(defvar xmltok-doctype-external-subset-flag nil) +(defvar xmltok-internal-subset-start nil) +(defvar xmltok-had-param-entity-ref nil) +(defvar xmltok-prolog-regions nil) +(defvar xmltok-standalone nil + "Non-nil if there was an XML declaration specifying standalone=\"yes\",") +(defvar xmltok-markup-declaration-doctype-flag nil) + +(defconst xmltok-predefined-entity-alist + '(("lt" "<" . "<") + ("gt" ">" . ">") + ("amp" "&" . "&") + ("apos" "'" . "'") + ("quot" "\"" . "\""))) + +(defun xmltok-forward-prolog () + "Move forward to the end of the XML prolog. + +Returns a list of vectors [TYPE START END] where TYPE is a symbol and +START and END are integers giving the start and end of the region of +that type. TYPE can be one of xml-declaration, +xml-declaration-attribute-name, xml-declaration-attribute-value, +comment, processing-instruction-left, processing-instruction-right, +markup-declaration-open. markup-declaration-close, +internal-subset-open, internal-subset-close, hash-name, keyword, +literal, encoding-name. +Adds to `xmltok-errors' and `xmltok-dependent-regions' as appropriate." + (let ((case-fold-search nil) + xmltok-start + xmltok-type + xmltok-prolog-regions + xmltok-contains-doctype + xmltok-internal-subset-start + xmltok-had-param-entity-ref + xmltok-standalone + xmltok-doctype-external-subset-flag + xmltok-markup-declaration-doctype-flag) + (setq xmltok-dtd xmltok-predefined-entity-alist) + (xmltok-scan-xml-declaration) + (xmltok-next-prolog-token) + (while (condition-case err + (when (xmltok-parse-prolog-item) + (xmltok-next-prolog-token)) + (xmltok-markup-declaration-parse-error + (xmltok-skip-markup-declaration)))) + (when xmltok-internal-subset-start + (xmltok-add-error "No closing ]" + (1- xmltok-internal-subset-start) + xmltok-internal-subset-start)) + (xmltok-parse-entities) + ;; XXX prune dependent-regions for those entirely in prolog + (nreverse xmltok-prolog-regions))) + +(defconst xmltok-bad-xml-decl-regexp + "[ \t\r\n]*<\\?xml\\(?:[ \t\r\n]\\|\\?>\\)") + +;;;###autoload +(defun xmltok-get-declared-encoding-position (&optional limit) + "Return the position of the encoding in the XML declaration at point. +If there is a well-formed XML declaration starting at point and it +contains an encoding declaration, then return (START . END) +where START and END are the positions of the start and the end +of the encoding name; if there is no encoding declaration return +the position where and encoding declaration could be inserted. +If there is XML that is not well-formed that looks like an XML declaration, +return nil. Otherwise, return t. +If LIMIT is non-nil, then do not consider characters beyond LIMIT." + (cond ((let ((case-fold-search nil)) + (and (looking-at (xmltok-xml-declaration regexp)) + (or (not limit) (<= (match-end 0) limit)))) + (let ((end (xmltok-xml-declaration end encoding-value))) + (if end + (cons (1+ (xmltok-xml-declaration start encoding-value)) + (1- end)) + (or (xmltok-xml-declaration end version-value) + (+ (point) 5))))) + ((not (let ((case-fold-search t)) + (looking-at xmltok-bad-xml-decl-regexp)))))) + +(defun xmltok-scan-xml-declaration () + (when (looking-at (xmltok-xml-declaration regexp)) + (xmltok-add-prolog-region 'xml-declaration (point) (match-end 0)) + (goto-char (match-end 0)) + (when (xmltok-xml-declaration start version-name) + (xmltok-add-prolog-region 'xml-declaration-attribute-name + (xmltok-xml-declaration start version-name) + (xmltok-xml-declaration end version-name)) + (let ((start (xmltok-xml-declaration start version-value)) + (end (xmltok-xml-declaration end version-value))) + (xmltok-add-prolog-region 'xml-declaration-attribute-value + start + end))) + ;; XXX need to check encoding name + ;; Should start with letter, not contain colon + (when (xmltok-xml-declaration start encoding-name) + (xmltok-add-prolog-region 'xml-declaration-attribute-name + (xmltok-xml-declaration start encoding-name) + (xmltok-xml-declaration end encoding-name)) + (let ((start (xmltok-xml-declaration start encoding-value)) + (end (xmltok-xml-declaration end encoding-value))) + (xmltok-add-prolog-region 'encoding-name + (1+ start) + (1- end)) + (xmltok-add-prolog-region 'xml-declaration-attribute-value + start + end))) + (when (xmltok-xml-declaration start standalone-name) + (xmltok-add-prolog-region 'xml-declaration-attribute-name + (xmltok-xml-declaration start standalone-name) + (xmltok-xml-declaration end standalone-name)) + (let ((start (xmltok-xml-declaration start standalone-value)) + (end (xmltok-xml-declaration end standalone-value))) + (xmltok-add-prolog-region 'xml-declaration-attribute-value + start + end) + (setq xmltok-standalone + (string= (buffer-substring-no-properties (1+ start) (1- end)) + "yes")))) + t)) + +(defconst xmltok-markup-declaration-alist + '(("ELEMENT" . xmltok-parse-element-declaration) + ("ATTLIST" . xmltok-parse-attlist-declaration) + ("ENTITY" . xmltok-parse-entity-declaration) + ("NOTATION" . xmltok-parse-notation-declaration))) + +(defun xmltok-parse-prolog-item () + (cond ((eq xmltok-type 'comment) + (xmltok-add-prolog-region 'comment + xmltok-start + (point)) + t) + ((eq xmltok-type 'processing-instruction)) + ((eq xmltok-type 'named-markup-declaration) + (setq xmltok-markup-declaration-doctype-flag nil) + (xmltok-add-prolog-region 'markup-declaration-open + xmltok-start + (point)) + (let* ((name (buffer-substring-no-properties + (+ xmltok-start 2) + (point))) + (fun (cdr (assoc name xmltok-markup-declaration-alist)))) + (cond (fun + (unless xmltok-internal-subset-start + (xmltok-add-error + "Declaration allowed only in internal subset")) + (funcall fun)) + ((string= name "DOCTYPE") + (xmltok-parse-doctype)) + (t + (xmltok-add-error "Unknown markup declaration" + (+ xmltok-start 2)) + (xmltok-next-prolog-token) + (xmltok-markup-declaration-parse-error)))) + t) + ((or (eq xmltok-type 'end-prolog) + (not xmltok-type)) + nil) + ((eq xmltok-type 'internal-subset-close) + (xmltok-add-prolog-region 'internal-subset-close + xmltok-start + (1+ xmltok-start)) + (xmltok-add-prolog-region 'markup-declaration-close + (1- (point)) + (point)) + (if xmltok-internal-subset-start + (setq xmltok-internal-subset-start nil) + (xmltok-add-error "]> outside internal subset")) + t) + ((eq xmltok-type 'param-entity-ref) + (if xmltok-internal-subset-start + (setq xmltok-had-param-entity-ref t) + (xmltok-add-error "Parameter entity reference outside document type declaration")) + t) + ;; If we don't do this, we can get thousands of errors when + ;; a plain text file is parsed. + ((not xmltok-internal-subset-start) + (when (let ((err (car xmltok-errors))) + (or (not err) + (<= (xmltok-error-end err) xmltok-start))) + (goto-char xmltok-start)) + nil) + ((eq xmltok-type 'not-well-formed) t) + (t + (xmltok-add-error "Token allowed only inside markup declaration") + t))) + +(defun xmltok-parse-doctype () + (setq xmltok-markup-declaration-doctype-flag t) + (xmltok-next-prolog-token) + (when xmltok-internal-subset-start + (xmltok-add-error "DOCTYPE declaration not allowed in internal subset") + (xmltok-markup-declaration-parse-error)) + (when xmltok-contains-doctype + (xmltok-add-error "Duplicate DOCTYPE declaration") + (xmltok-markup-declaration-parse-error)) + (setq xmltok-contains-doctype t) + (xmltok-require-token 'name 'prefixed-name) + (xmltok-require-next-token "SYSTEM" "PUBLIC" ?\[ ?>) + (cond ((eq xmltok-type ?\[) + (setq xmltok-internal-subset-start (point))) + ((eq xmltok-type ?>)) + (t + (setq xmltok-doctype-external-subset-flag t) + (xmltok-parse-external-id) + (xmltok-require-token ?\[ ?>) + (when (eq xmltok-type ?\[) + (setq xmltok-internal-subset-start (point)))))) + +(defun xmltok-parse-attlist-declaration () + (xmltok-require-next-token 'prefixed-name 'name) + (while (progn + (xmltok-require-next-token ?> 'name 'prefixed-name) + (if (eq xmltok-type ?>) + nil + (xmltok-require-next-token ?\( + "CDATA" + "ID" + "IDREF" + "IDREFS" + "ENTITY" + "ENTITIES" + "NMTOKEN" + "NMTOKENS" + "NOTATION") + (cond ((eq xmltok-type ?\() + (xmltok-parse-nmtoken-group)) + ((string= (xmltok-current-token-string) + "NOTATION") + (xmltok-require-next-token ?\() + (xmltok-parse-nmtoken-group))) + (xmltok-require-next-token "#IMPLIED" + "#REQUIRED" + "#FIXED" + 'literal) + (when (string= (xmltok-current-token-string) "#FIXED") + (xmltok-require-next-token 'literal)) + t)))) + +(defun xmltok-parse-nmtoken-group () + (while (progn + (xmltok-require-next-token 'nmtoken 'prefixed-name 'name) + (xmltok-require-next-token ?| ?\)) + (eq xmltok-type ?|)))) + +(defun xmltok-parse-element-declaration () + (xmltok-require-next-token 'name 'prefixed-name) + (xmltok-require-next-token "EMPTY" "ANY" ?\() + (when (eq xmltok-type ?\() + (xmltok-require-next-token "#PCDATA" + 'name + 'prefixed-name + 'name-occur + ?\() + (cond ((eq xmltok-type 'hash-name) + (xmltok-require-next-token ?| ?\) 'close-paren-star) + (while (eq xmltok-type ?|) + (xmltok-require-next-token 'name 'prefixed-name) + (xmltok-require-next-token 'close-paren-star ?|))) + (t (xmltok-parse-model-group)))) + (xmltok-require-next-token ?>)) + +(defun xmltok-parse-model-group () + (xmltok-parse-model-group-member) + (xmltok-require-next-token ?| + ?, + ?\) + 'close-paren-star + 'close-paren-occur) + (when (memq xmltok-type '(?, ?|)) + (let ((connector xmltok-type)) + (while (progn + (xmltok-next-prolog-token) + (xmltok-parse-model-group-member) + (xmltok-require-next-token connector + ?\) + 'close-paren-star + 'close-paren-occur) + (eq xmltok-type connector)))))) + +(defun xmltok-parse-model-group-member () + (xmltok-require-token 'name + 'prefixed-name + 'name-occur + ?\() + (when (eq xmltok-type ?\() + (xmltok-next-prolog-token) + (xmltok-parse-model-group))) + +(defun xmltok-parse-entity-declaration () + (let (paramp name) + (xmltok-require-next-token 'name ?%) + (when (eq xmltok-type ?%) + (setq paramp t) + (xmltok-require-next-token 'name)) + (setq name (xmltok-current-token-string)) + (xmltok-require-next-token 'literal "SYSTEM" "PUBLIC") + (cond ((eq xmltok-type 'literal) + (let ((replacement (xmltok-parse-entity-value))) + (unless paramp + (xmltok-define-entity name replacement))) + (xmltok-require-next-token ?>)) + (t + (xmltok-parse-external-id) + (if paramp + (xmltok-require-token ?>) + (xmltok-require-token ?> "NDATA") + (if (eq xmltok-type ?>) + (xmltok-define-entity name 'external) + (xmltok-require-next-token 'name) + (xmltok-require-next-token ?>) + (xmltok-define-entity name 'unparsed))))))) + +(defun xmltok-define-entity (name value) + (when (and (or (not xmltok-had-param-entity-ref) + xmltok-standalone) + (not (assoc name xmltok-dtd))) + (setq xmltok-dtd + (cons (cons name value) xmltok-dtd)))) + +(defun xmltok-parse-entity-value () + (let ((lim (1- (point))) + (well-formed t) + value-parts + start) + (save-excursion + (goto-char (1+ xmltok-start)) + (setq start (point)) + (while (progn + (skip-chars-forward "^%&" lim) + (when (< (point) lim) + (goto-char (1+ (point))) + (cond ((eq (char-before) ?%) + (xmltok-add-error "Parameter entity references are not allowed in the internal subset" + (1- (point)) + (point)) + (setq well-formed nil)) + (t + (let ((xmltok-start (1- (point))) + xmltok-type xmltok-replacement) + (xmltok-scan-after-amp (lambda (start end))) + (cond ((eq xmltok-type 'char-ref) + (setq value-parts + (cons (buffer-substring-no-properties + start + xmltok-start) + value-parts)) + (setq value-parts + (cons xmltok-replacement + value-parts)) + (setq start (point))) + ((eq xmltok-type 'not-well-formed) + (setq well-formed nil)))))) + t)))) + (if (not well-formed) + nil + (apply 'concat + (nreverse (cons (buffer-substring-no-properties start lim) + value-parts)))))) + +(defun xmltok-parse-notation-declaration () + (xmltok-require-next-token 'name) + (xmltok-require-next-token "SYSTEM" "PUBLIC") + (let ((publicp (string= (xmltok-current-token-string) "PUBLIC"))) + (xmltok-require-next-token 'literal) + (cond (publicp + (xmltok-require-next-token 'literal ?>) + (unless (eq xmltok-type ?>) + (xmltok-require-next-token ?>))) + (t (xmltok-require-next-token ?>))))) + +(defun xmltok-parse-external-id () + (xmltok-require-token "SYSTEM" "PUBLIC") + (let ((publicp (string= (xmltok-current-token-string) "PUBLIC"))) + (xmltok-require-next-token 'literal) + (when publicp + (xmltok-require-next-token 'literal))) + (xmltok-next-prolog-token)) + +(defun xmltok-require-next-token (&rest types) + (xmltok-next-prolog-token) + (apply 'xmltok-require-token types)) + +(defun xmltok-require-token (&rest types) + ;; XXX Generate a more helpful error message + (while (and (not (let ((type (car types))) + (if (stringp (car types)) + (string= (xmltok-current-token-string) type) + (eq type xmltok-type)))) + (setq types (cdr types)))) + (unless types + (when (and xmltok-type + (not (eq xmltok-type 'not-well-formed))) + (xmltok-add-error "Unexpected token")) + (xmltok-markup-declaration-parse-error)) + (let ((region-type (xmltok-prolog-region-type (car types)))) + (when region-type + (xmltok-add-prolog-region region-type + xmltok-start + (point))))) + +(defun xmltok-current-token-string () + (buffer-substring-no-properties xmltok-start (point))) + +(put 'xmltok-markup-declaration-parse-error + 'error-conditions + '(error xmltok-markup-declaration-parse-error)) + +(put 'xmltok-markup-declaration-parse-error + 'error-message + "Syntax error in markup declaration") + +(defun xmltok-markup-declaration-parse-error () + (signal 'xmltok-markup-declaration-parse-error nil)) + +(defun xmltok-skip-markup-declaration () + (while (cond ((eq xmltok-type ?>) + (xmltok-next-prolog-token) + nil) + ((and xmltok-markup-declaration-doctype-flag + (eq xmltok-type ?\[)) + (setq xmltok-internal-subset-start (point)) + (xmltok-next-prolog-token) + nil) + ((memq xmltok-type '(nil + end-prolog + named-markup-declaration + comment + processing-instruction)) + nil) + ((and xmltok-internal-subset-start + (eq xmltok-type 'internal-subset-close)) + nil) + (t (xmltok-next-prolog-token) t))) + xmltok-type) + +(defun xmltok-prolog-region-type (required) + (cond ((cdr (assq xmltok-type + '((literal . literal) + (?> . markup-declaration-close) + (?\[ . internal-subset-open) + (hash-name . hash-name))))) + ((and (stringp required) (eq xmltok-type 'name)) + 'keyword))) + +;; Return new token type. + +(defun xmltok-next-prolog-token () + (skip-chars-forward " \t\r\n") + (setq xmltok-start (point)) + (cond ((not (and (looking-at (xmltok-prolog regexp)) + (goto-char (match-end 0)))) + (let ((ch (char-after))) + (cond (ch + (goto-char (1+ (point))) + (xmltok-add-error "Illegal char in prolog") + (setq xmltok-type 'not-well-formed)) + (t (setq xmltok-type nil))))) + ((or (xmltok-prolog start ncname-occur) + (xmltok-prolog start colon-name-occur)) + (setq xmltok-name-end (1- (point))) + (setq xmltok-name-colon (xmltok-prolog start colon)) + (setq xmltok-type 'name-occur)) + ((xmltok-prolog start colon) + (setq xmltok-name-end (point)) + (setq xmltok-name-colon (xmltok-prolog start colon)) + (unless (looking-at "[ \t\r\n>),|[%]") + (xmltok-add-error "Missing space after name")) + (setq xmltok-type 'prefixed-name)) + ((or (xmltok-prolog start ncname-nmtoken) + (xmltok-prolog start ncname-colon)) + (unless (looking-at "[ \t\r\n>),|[%]") + (xmltok-add-error "Missing space after name token")) + (setq xmltok-type 'nmtoken)) + ((xmltok-prolog start name) + (setq xmltok-name-end (point)) + (setq xmltok-name-colon nil) + (unless (looking-at "[ \t\r\n>),|[%]") + (xmltok-add-error "Missing space after name")) + (setq xmltok-type 'name)) + ((xmltok-prolog start hash-name) + (setq xmltok-name-end (point)) + (unless (looking-at "[ \t\r\n>)|%]") + (xmltok-add-error "Missing space after name")) + (setq xmltok-type 'hash-name)) + ((xmltok-prolog start processing-instruction-question) + (xmltok-scan-prolog-after-processing-instruction-open)) + ((xmltok-prolog start comment-open) + ;; XXX if not-well-formed, ignore some stuff + (xmltok-scan-after-comment-open)) + ((xmltok-prolog start named-markup-declaration) + (setq xmltok-type 'named-markup-declaration)) + ((xmltok-prolog start instance-start) + (goto-char xmltok-start) + (setq xmltok-type 'end-prolog)) + ((xmltok-prolog start close-paren-star) + (setq xmltok-type 'close-paren-star)) + ((xmltok-prolog start close-paren-occur) + (setq xmltok-type 'close-paren-occur)) + ((xmltok-prolog start close-paren) + (unless (looking-at "[ \t\r\n>,|)]") + (xmltok-add-error "Missing space after )")) + (setq xmltok-type ?\))) + ((xmltok-prolog start single-char) + (let ((ch (char-before))) + (cond ((memq ch '(?\" ?\')) + (xmltok-scan-prolog-literal)) + (t (setq xmltok-type ch))))) + ((xmltok-prolog start percent) + (cond ((xmltok-prolog start param-entity-ref-close) + (setq xmltok-name-end (1- (point))) + (setq xmltok-type 'param-entity-ref)) + ((xmltok-prolog start param-entity-ref) + (xmltok-add-error "Missing ;") + (setq xmltok-name-end (point)) + (setq xmltok-type 'param-entity-ref)) + ((looking-at "[ \t\r\n%]") + (setq xmltok-type ?%)) + (t + (xmltok-add-error "Expected name after %") + (setq xmltok-type 'not-well-formed)))) + ((xmltok-prolog start nmtoken) + (unless (looking-at "[ \t\r\n>),|[%]") + (xmltok-add-error "Missing space after name token")) + (setq xmltok-type 'nmtoken)) + ((xmltok-prolog start internal-subset-close) + (setq xmltok-type 'internal-subset-close)) + ((xmltok-prolog start pound) + (xmltok-add-error "Expected name after #") + (setq xmltok-type 'not-well-formed)) + ((xmltok-prolog start markup-declaration) + (xmltok-add-error "Expected name or -- after <!") + (setq xmltok-type 'not-well-formed)) + ((xmltok-prolog start comment-first-dash) + (xmltok-add-error "Expected <!--") + (setq xmltok-type 'not-well-formed)) + ((xmltok-prolog start less-than) + (xmltok-add-error "Incomplete markup") + (setq xmltok-type 'not-well-formed)) + (t (error "Unhandled token in prolog %s" + (match-string-no-properties 0))))) + +(defun xmltok-scan-prolog-literal () + (let* ((delim (string (char-before))) + (safe-end (save-excursion + (skip-chars-forward (concat "^<>[]" delim)) + (point))) + (end (save-excursion + (goto-char safe-end) + (search-forward delim nil t)))) + (or (cond ((not end) + (xmltok-add-dependent 'xmltok-unclosed-reparse-p + nil + nil + delim) + nil) + ((save-excursion + (goto-char end) + (looking-at "[ \t\r\n>%[]")) + (goto-char end) + (setq xmltok-type 'literal)) + ((eq (1+ safe-end) end) + (goto-char end) + (xmltok-add-error (format "Missing space after %s" delim) + safe-end) + (setq xmltok-type 'literal)) + (t + (xmltok-add-dependent 'xmltok-semi-closed-reparse-p + xmltok-start + (1+ end) + delim + 1) + nil)) + (progn + (xmltok-add-error (format "Missing closing %s" delim)) + (goto-char safe-end) + (skip-chars-backward " \t\r\n") + (setq xmltok-type 'not-well-formed))))) + +(defun xmltok-scan-prolog-after-processing-instruction-open () + (cond ((not (search-forward "?>" nil t)) + (xmltok-add-error "No closing ?>" + xmltok-start + (+ xmltok-start 2)) + (xmltok-add-dependent 'xmltok-unclosed-reparse-p + nil + nil + "?>") + (setq xmltok-type 'not-well-formed)) + (t + (let* ((end (point)) + (target + (save-excursion + (goto-char (+ xmltok-start 2)) + (and (looking-at (xmltok-ncname regexp)) + (or (memq (char-after (match-end 0)) + '(?\n ?\t ?\r ? )) + (= (match-end 0) (- end 2))) + (match-string-no-properties 0))))) + (cond ((not target) + (xmltok-add-error "\ +Processing instruction does not start with a name" + (+ xmltok-start 2) + (+ xmltok-start 3))) + ((not (and (= (length target) 3) + (let ((case-fold-search t)) + (string-match "xml" target))))) + ((= xmltok-start 1) + (xmltok-add-error "Invalid XML declaration" + xmltok-start + (point))) + ((save-excursion + (goto-char xmltok-start) + (looking-at (xmltok-xml-declaration regexp))) + (xmltok-add-error "XML declaration not at beginning of file" + xmltok-start + (point))) + (t + (xmltok-add-error "Processing instruction has target of xml" + (+ xmltok-start 2) + (+ xmltok-start 5)))) + (xmltok-add-prolog-region 'processing-instruction-left + xmltok-start + (+ xmltok-start + 2 + (if target + (length target) + 0))) + (xmltok-add-prolog-region 'processing-instruction-right + (if target + (save-excursion + (goto-char (+ xmltok-start + (length target) + 2)) + (skip-chars-forward " \t\r\n") + (point)) + (+ xmltok-start 2)) + (point))) + (setq xmltok-type 'processing-instruction)))) + +(defun xmltok-parse-entities () + (let ((todo xmltok-dtd)) + (when (and (or xmltok-had-param-entity-ref + xmltok-doctype-external-subset-flag) + (not xmltok-standalone)) + (setq xmltok-dtd (cons t xmltok-dtd))) + (while todo + (xmltok-parse-entity (car todo)) + (setq todo (cdr todo))))) + +(defun xmltok-parse-entity (name-def) + (let ((def (cdr name-def)) + ;; in case its value is buffer local + (xmltok-dtd xmltok-dtd) + buf) + (when (stringp def) + (if (string-match "\\`[^&<\t\r\n]*\\'" def) + (setcdr name-def (cons def def)) + (setcdr name-def 'not-well-formed) ; avoid infinite expansion loops + (setq buf (get-buffer-create + (format " *Entity %s*" (car name-def)))) + (save-excursion + (set-buffer buf) + (erase-buffer) + (insert def) + (goto-char (point-min)) + (setcdr name-def + (xmltok-parse-entity-replacement))) + (kill-buffer buf))))) + +(defun xmltok-parse-entity-replacement () + (let ((def (cons "" ""))) + (while (let* ((start (point)) + (found (re-search-forward "[<&\t\r\n]\\|]]>" nil t)) + (ch (and found (char-before))) + (str (buffer-substring-no-properties + start + (if found + (match-beginning 0) + (point-max))))) + (setq def + (xmltok-append-entity-def def + (cons str str))) + (cond ((not found) nil) + ((eq ch ?>) + (setq def 'not-well-formed) + nil) + ((eq ch ?<) + (xmltok-save + (setq xmltok-start (1- (point))) + (xmltok-scan-after-lt) + (setq def + (xmltok-append-entity-def + def + (cond ((memq xmltok-type + '(start-tag + end-tag + empty-element)) + 'element) + ((memq xmltok-type + '(comment + processing-instruction)) + (cons "" nil)) + ((eq xmltok-type + 'cdata-section) + (cons (buffer-substring-no-properties + (+ xmltok-start 9) + (- (point) 3)) + nil)) + (t 'not-well-formed))))) + t) + ((eq ch ?&) + (let ((xmltok-start (1- (point))) + xmltok-type + xmltok-replacement + xmltok-errors) + (xmltok-scan-after-amp 'xmltok-handle-nested-entity) + (cond ((eq xmltok-type 'entity-ref) + (setq def + (xmltok-append-entity-def + def + xmltok-replacement))) + ((eq xmltok-type 'char-ref) + (setq def + (xmltok-append-entity-def + def + (if xmltok-replacement + (cons xmltok-replacement + xmltok-replacement) + (and xmltok-errors 'not-well-formed))))) + (t + (setq def 'not-well-formed)))) + t) + (t + (setq def + (xmltok-append-entity-def + def + (cons (match-string-no-properties 0) + " "))) + t)))) + def)) + +(defun xmltok-handle-nested-entity (start end) + (let* ((name-def (assoc (buffer-substring-no-properties start end) + xmltok-dtd)) + (def (cdr name-def))) + (when (stringp def) + (xmltok-parse-entity name-def) + (setq def (cdr name-def))) + (setq xmltok-replacement + (cond ((null name-def) + (if (eq (car xmltok-dtd) t) + nil + 'not-well-formed)) + ((eq def 'unparsed) 'not-well-formed) + (t def))))) + +(defun xmltok-append-entity-def (d1 d2) + (cond ((consp d1) + (if (consp d2) + (cons (concat (car d1) (car d2)) + (and (cdr d1) + (cdr d2) + (concat (cdr d1) (cdr d2)))) + d2)) + ((consp d2) d1) + (t + (let ((defs '(not-well-formed external element))) + (while (not (or (eq (car defs) d1) + (eq (car defs) d2))) + (setq defs (cdr defs))) + (car defs))))) + +(defun xmltok-add-prolog-region (type start end) + (setq xmltok-prolog-regions + (cons (vector type start end) + xmltok-prolog-regions))) + +(defun xmltok-merge-attributes () + "Return a list merging `xmltok-attributes' and 'xmltok-namespace-attributes'. +The members of the merged list are in order of occurrence in the +document. The list may share list structure with `xmltok-attributes' +and `xmltok-namespace-attributes'." + (cond ((not xmltok-namespace-attributes) + xmltok-attributes) + ((not xmltok-attributes) + xmltok-namespace-attributes) + (t + (let ((atts1 xmltok-attributes) + (atts2 xmltok-namespace-attributes) + merged) + (while (and atts1 atts2) + (cond ((< (xmltok-attribute-name-start (car atts1)) + (xmltok-attribute-name-start (car atts2))) + (setq merged (cons (car atts1) merged)) + (setq atts1 (cdr atts1))) + (t + (setq merged (cons (car atts2) merged)) + (setq atts2 (cdr atts2))))) + (setq merged (nreverse merged)) + (cond (atts1 (setq merged (nconc merged atts1))) + (atts2 (setq merged (nconc merged atts2)))) + merged)))) + +;;; Testing + +(defun xmltok-forward-test () + (interactive) + (if (xmltok-forward) + (message "Scanned %s" xmltok-type) + (message "Scanned nothing"))) + +(defun xmltok-next-prolog-token-test () + (interactive) + (if (xmltok-next-prolog-token) + (message "Scanned %s" + (if (integerp xmltok-type) + (string xmltok-type) + xmltok-type)) + (message "Scanned end of file"))) + +(provide 'xmltok) + +;;; xmltok.el ends here
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/nxml/xsd-regexp.el Fri Nov 23 06:58:00 2007 +0000 @@ -0,0 +1,2121 @@ +;;; xsd-regexp.el --- translate W3C XML Schema regexps to Emacs regexps + +;; Copyright (C) 2003 Free Software Foundation, Inc. + +;; Author: James Clark +;; Keywords: XML, regexp + +;; This program is free software; you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation; either version 2 of +;; the License, or (at your option) any later version. + +;; This program is distributed in the hope that it will be +;; useful, but WITHOUT ANY WARRANTY; without even the implied +;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +;; PURPOSE. See the GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public +;; License along with this program; if not, write to the Free +;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, +;; MA 02111-1307 USA + +;;; Commentary: + +;; This handles the regular expressions in the syntax defined by: +;; W3C XML Schema Part 2: Datatypes +;; <http://www.w3.org/TR/xmlschema-2/#regexs> +;; +;; The main entry point is `xsdre-translate'. +;; +;; The features of XSD regexps that make this non-trivial are: +;; +;; - \p{PROP} escape for matching characters that have various +;; Unicode-defined properties +;; - character class subtraction:, e.g. [\p{L}-[abc]] matches +;; any character in the L category other than a, b and c. +;; +;; We compute the set of Unicode characters denoted by each XSD +;; char-class as a list of ranges. The regexp generated for a +;; single escape can be large (several thousand characters). +;; +;; XSD has non-traditional rules about when characters must be +;; and can be quoted with \. These are quite different from +;; the Emacs rules. +;; +;; The semantics of XSD regexps are defined in terms of Unicode. +;; Non-Unicode characters are not allowed in regular expressions and +;; will not match against the generated regular expressions. A +;; Unicode character means a character in one of the Mule charsets +;; ascii, latin-iso8859-1, mule-unicode-0100-24ff, +;; mule-unicode-2500-33ff, mule-unicode-e000-ffff, eight-bit-control +;; or a character translateable to such a character (i.e a character +;; for which `encode-char' will return non-nil). +;; +;; Using unify-8859-on-decoding-mode is probably a good idea here +;; (and generally with XML and other Unicode-oriented formats). +;; +;; Unfortunately, this means that this package is currently useless +;; for CJK characters, since there's no mule-unicode charset for the +;; CJK ranges of Unicode. We should devise a workaround for this +;; until the fabled Unicode version of Emacs makes an appearance. + +;;; Code: + +(defun xsdre-translate (regexp) + "Translate a W3C XML Schema Datatypes regexp to an Emacs regexp. +Returns a string. REGEXP is a string. If REGEXP is not a valid XSD +regexp, signal an `xsdre-invalid-regexp' condition." + (xsdre-from-symbolic + (xsdre-to-symbolic regexp))) + +(defvar xsdre-test-history nil) + +(defun xsdre-test-regexp () + (interactive) + (while + (let* ((str (read-from-minibuffer "Regexp: " + nil + nil + nil + 'xsdre-test-history)) + (symbolic + (xsdre-to-symbolic str))) + (with-output-to-temp-buffer "*XSD Regexp Test*" + (princ "XSD regexp: ") + (princ str) + (princ "\n") + (princ "Symbolic: ") + (princ "\n") + (pp symbolic) + (princ "\n") + (princ "Emacs regexp: ") + (princ (xsdre-from-symbolic symbolic))) + t))) + +;;; Range lists + +(defsubst xsdre-make-range (first last) + "Return a representation of a range of integers. +If the range contains a single integer, it is represented by that integer. +Otherwise, it is represented by a (FIRST . LAST) pair." + (if (= first last) + first + (cons first last))) + +(defsubst xsdre-range-first (r) + "Return the first integer in a range." + (if (consp r) (car r) r)) + +(defsubst xsdre-range-last (r) + "Return the last integer in a range." + (if (consp r) (cdr r) r)) + +(defun xsdre-make-range-list (list) + "Make a range-list from a list of ranges. +A range-list represents a set of integers by a list of ranges in a +canonical form, in which ranges are in increasing order, and adjacent +ranges are merged wherever possible." + (when list + (setq list + (sort list 'xsdre-range-less-than)) + (let* ((next (cdr list)) + (tail list) + (head (car list)) + (first (xsdre-range-first head)) + (last (xsdre-range-last head))) + (while next + (setq head (car next)) + (when (> (xsdre-range-last head) last) + (if (<= (xsdre-range-first head) (1+ last)) + (setq last (xsdre-range-last head)) + (setcar tail (xsdre-make-range first last)) + (setcdr tail next) + (setq tail next) + (setq first (xsdre-range-first head)) + (setq last (xsdre-range-last head)))) + (setq next (cdr next))) + (setcar tail (xsdre-make-range first last)) + (setcdr tail nil) + list))) + + +(defun xsdre-range-list-union (range-lists) + "Return a range-list the union of a list of range-lists." + (xsdre-make-range-list (apply 'append range-lists))) + +(defun xsdre-range-list-difference (orig subtract) + "Return a range-list for the difference of two range-lists." + (when orig + (let (new head next first last) + (while orig + (setq head (car orig)) + (setq first (xsdre-range-first head)) + (setq last (xsdre-range-last head)) + (while (and subtract + (< (xsdre-range-last (car subtract)) first)) + (setq subtract (cdr subtract))) + (while (and subtract + (<= first last) + (<= (xsdre-range-first (car subtract)) last)) + (when (< first (xsdre-range-first (car subtract))) + (setq new + (cons (xsdre-make-range + first + (1- (xsdre-range-first (car subtract)))) + new))) + (if (< (xsdre-range-last (car subtract)) last) + (progn + (setq first (1+ (xsdre-range-last (car subtract)))) + (setq subtract (cdr subtract))) + (setq first (1+ last)))) + (when (<= first last) + (setq new (cons (xsdre-make-range first last) new))) + (setq orig (cdr orig))) + (nreverse new)))) + +(defun xsdre-range-less-than (r1 r2) + "Return non-nil if range R1 is less than range R2." + (or (< (xsdre-range-first r1) (xsdre-range-first r2)) + (and (= (xsdre-range-first r1) (xsdre-range-first r2)) + (< (xsdre-range-last r1) (xsdre-range-last r2))))) + +(defun xsdre-check-range-list (range-list) + "Check that range-list is a range-list. +Signal an error if it is not." + (let ((last nil)) + (while range-list + (unless (consp range-list) + (error "Range list not a list")) + (let ((head (car range-list))) + (unless (or (integerp head) + (and (consp head) + (integerp (car head)) + (integerp (cdr head)))) + (error "Bad range %s" head)) + (when (and last + (not (< (1+ last) (xsdre-range-first head)))) + (error "Ranges not strictly increasing")) + (setq last (xsdre-range-last head))) + (setq range-list (cdr range-list)))) + t) + +;;; Compiling symbolic regexps to Emacs regexps + +(defun xsdre-from-symbolic (re) + "Return an Emacs regexp for the symbolic regexp RE." + (apply 'concat + (nreverse (xsdre-compile-regexp re nil)))) + +(defun xsdre-compile-regexp (re accum) + "Return a Emacs regular expression for the symbolic regexp RE. +Returns a list of strings whose head is the regexp for RE +and whose tail is ACCUM." + (cond ((not (consp re)) + (xsdre-compile-char-class re accum)) + ((eq (car re) 'choice) + (setq accum (cons "\\(?:" accum)) + (let ((choices (cdr re))) + (while choices + (setq accum + (xsdre-compile-regexp (car choices) + accum)) + (setq choices (cdr choices)) + (when choices + (setq accum + (cons "\\|" accum))))) + (cons "\\)" accum)) + ((eq (car re) 'sequence) + (let ((members (cdr re))) + (while members + (setq accum (xsdre-compile-regexp (car members) + accum)) + (setq members (cdr members)))) + accum) + ((eq (car re) 'repeat) + (let* ((sub (nth 1 re)) + (lower (nth 2 re)) + (upper (nth 3 re)) + (need-paren (and (consp sub) + (eq (car sub) 'sequence)))) + (when need-paren + (setq accum (cons "\\(?:" accum))) + (setq accum + (xsdre-compile-regexp sub accum)) + (when need-paren + (setq accum (cons "\\)" accum))) + (cond ((not upper) + (cond ((eq lower 0) + (cons "*" accum)) + ((eq lower 1) + (cons "+" accum)) + (t + (cons (concat "\\{" + (number-to-string lower) + ",\\}") + accum)))) + ((eq lower upper) + (cons (concat "\\{" + (number-to-string lower) + "\\}") + accum)) + ((and (eq lower 0) (eq upper 1)) + (cons "?" accum)) + (t + (cons (concat "\\{" + (number-to-string lower) + "," + (number-to-string upper) + "\\}") + accum))))) + (t (xsdre-compile-char-class re accum)))) + +(defun xsdre-compile-char-class (cc accum) + "Return a Emacs regular expression for the symbolic character class CC. +Returns a list of strings whose head is the regexp for CC +and whose tail is ACCUM." + (cons (if (integerp cc) + (xsdre-compile-single-char cc) + (let ((ranges (xsdre-range-list-mule-intersection + (xsdre-char-class-to-range-list cc)))) + (cond ((null ranges) "\001-\000") + ((and (null (cdr ranges)) + (= (xsdre-range-first (car ranges)) + (xsdre-range-last (car ranges)))) + (xsdre-compile-single-char + (xsdre-range-first (car ranges)))) + (t (xsdre-range-list-to-char-alternative ranges))))) + accum)) + +(defun xsdre-compile-single-char (ch) + (if (memq ch '(?. ?* ?+ ?? ?\[ ?\] ?^ ?$ ?\\)) + (string ?\\ ch) + (string (decode-char 'ucs ch)))) + +(defun xsdre-char-class-to-range-list (cc) + "Return a range-list for a symbolic char-class." + (cond ((integerp cc) (list cc)) + ((symbolp cc) + (or (get cc 'xsdre-ranges) + (xsdre-char-class-to-range-list (get cc 'xsdre-char-class)))) + ((integerp (car cc)) + (if (= (car cc) (cdr cc)) + (car cc) + cc)) + ((eq (car cc) 'union) + (xsdre-range-list-union (mapcar 'xsdre-char-class-to-range-list + (cdr cc)))) + ((eq (car cc) 'difference) + (xsdre-range-list-difference + (xsdre-char-class-to-range-list (nth 1 cc)) + (xsdre-char-class-to-range-list (nth 2 cc)))) + ((eq (car cc) 'range) + (list (xsdre-make-range (nth 1 cc) (nth 2 cc)))) + (t (error "Internal error in XSD regexp compilation: \ +unknown char-class %s" cc)))) + +(defconst xsdre-mule-char-set-ranges + '((0 . 127) + (128 . 159) + (160 . 255) + (#x0100 . #x24ff) + (#x2500 . #x33ff) + (#xe000 . #xffff)) + "List of ranges for the Mule character sets containing Unicode characters.") + +(defun xsdre-range-list-mule-intersection (range-list) + "Return the intersection of RANGE-LIST with the mule-supported ranges. +Also split ranges so that no range spans more that one mule charset." + (when range-list + (let* ((char-set-ranges (cdr xsdre-mule-char-set-ranges)) + (mule-ranges nil) + (char-set-first (caar xsdre-mule-char-set-ranges)) + (char-set-last (cdar xsdre-mule-char-set-ranges)) + (range (car range-list)) + (first (xsdre-range-first range)) + (last (xsdre-range-last range))) + (setq range-list (cdr range-list)) + (while (progn + (cond ((> first last) + (if (null range-list) + nil + (setq range (car range-list)) + (setq first (xsdre-range-first range)) + (setq last (xsdre-range-last range)) + (setq range-list (cdr range-list)) + t)) + ((< char-set-last first) + (if (null char-set-ranges) + nil + (setq char-set-first (caar char-set-ranges)) + (setq char-set-last (cdar char-set-ranges)) + (setq char-set-ranges (cdr char-set-ranges)) + t)) + ((< first char-set-first) + (setq first char-set-first)) + ;; Now we know that + ;; first <= last + ;; first <= char-set-last + ;; first >= char-set-first + ((<= last char-set-last) + (setq mule-ranges + (cons (xsdre-make-range first last) + mule-ranges)) + (setq first (1+ last)) + t) + (t + (setq mule-ranges + (cons (xsdre-make-range first char-set-last) + mule-ranges)) + (setq first (1+ char-set-last)) + t)))) + (nreverse mule-ranges)))) + +(defun xsdre-range-list-to-char-alternative (range-list) + "Return a char alternative for a range-list. +RANGE-LIST must contain more than integer. +The char alternative is a string containing an Emacs regexp +consisting of a single char alternative delimited with []." + (let (range caret close-bracket hyphen chars first last) + (while range-list + (setq range (car range-list)) + (setq first (xsdre-range-first range)) + (setq last (xsdre-range-last range)) + (while (and (cond ((eq first ?^) + (setq caret t) + (setq first (1+ first))) + ((eq first ?-) + (setq hyphen t) + (setq first (1+ first))) + ((eq first ?\]) + (setq close-bracket t) + (setq first (1+ first)))) + (<= first last))) + (when (<= first last) + (setq chars + (cons first chars)) + (when (< first last) + (setq chars + (if (and (eq last (1+ first)) + (not (eq last ?-))) + (cons last chars) + (cons last (cons ?- chars)))))) + (setq range-list (cdr range-list))) + (setq chars + (mapcar (lambda (c) + (decode-char 'ucs c)) + chars)) + (when caret + (setq chars (cons ?^ chars))) + (when hyphen + (setq chars (cons ?- chars))) + (setq chars (cons ?\] chars)) + (setq chars (nreverse chars)) + (when close-bracket + (setq chars (cons ?\] chars))) + (when (equal chars '(?^ ?- ?\])) + (setq chars '(?- ?^ ?\]))) + (setq chars (cons ?\[ chars)) + (apply 'string chars))) + +;;; Parsing + +(defvar xsdre-current-regexp nil + "List of characters remaining to be parsed. Dynamically bound.") + +(defun xsdre-to-symbolic (str) + "Convert a W3C XML Schema datatypes regexp to a symbolic form. + +The symbolic form has the following structure: + +REGEXP ::= + (sequence REGEXP ...) + | (choice REGEXP ...) + | (repeat REGEXP MIN MAX) + | CHAR-CLASS + +CHAR-CLASS ::= + CHAR + | SYMBOLIC-CHAR-CLASS + | RANGE + | (union CHAR-CLASS ...) + | (difference CHAR-CLASS CHAR-CLASS) + +RANGE ::= (range LOWER UPPER) + +MIN ::= INTEGER +MAX ::= INTEGER | nil +CHAR ::= UNICODE +LOWER ::= UNICODE +UPPER ::= UNICODE +SYMBOLIC-CHAR-CLASS ::= SYMBOL + +where UNICODE is a integer specifying a Unicode code-point and +SYMBOLIC-CHAR-CLASS is a symbol which has either a `xsdre-char-class' +property whose value is a CHAR-CLASS, or a `xsdre-ranges' property +whose value is a range-list." + (let ((xsdre-current-regexp (string-to-list str))) + (condition-case err + (let ((symbolic (xsdre-parse-regexp))) + (if xsdre-current-regexp + (xsdre-parse-error "Unexpected %c" (car xsdre-current-regexp)) + symbolic)) + (xsdre-parse-error + (signal 'xsdre-invalid-regexp + (list (apply 'format (cdr err)) + (- (length str) + (length xsdre-current-regexp)))))))) + +(put 'xsdre-invalid-regexp + 'error-conditions + '(error xsdre-invalid-regexp)) + +(put 'xsdre-invalid-regexp + 'error-message + "Invalid W3C XML Schema Datatypes regular expression") + +(defun xsdre-parse-regexp () + (let ((branches nil)) + (while (progn + (setq branches (cons (xsdre-parse-branch) branches)) + (when (eq (car xsdre-current-regexp) ?|) + (xsdre-advance) + t))) + (if (null (cdr branches)) + (car branches) + (cons 'choice (nreverse branches))))) + +(defun xsdre-parse-branch () + (let (items) + (while (let ((item (xsdre-try-parse-atom))) + (when item + (let ((quantifier (xsdre-try-parse-quantifier))) + (when quantifier + (setq item + (list 'repeat + item + (car quantifier) + (cdr quantifier))))) + (setq items (cons item items))))) + (cond ((null items) '(sequence)) + ((null (cdr items)) (car items)) + (t (cons 'sequence (nreverse items)))))) + +(defun xsdre-try-parse-quantifier () + (let ((ch (car xsdre-current-regexp))) + (cond ((eq ch ?*) (xsdre-advance) '(0 . nil)) + ((eq ch ?+) (xsdre-advance) '(1 . nil)) + ((eq ch ??) (xsdre-advance) '(0 . 1)) + ((eq ch ?{) + (xsdre-advance) + (let ((lower (xsdre-parse-bound))) + (setq ch (car xsdre-current-regexp)) + (cond ((eq ch ?}) + (xsdre-advance) + (cons lower lower)) + ((eq ch ?,) + (xsdre-advance) + (cond ((eq (car xsdre-current-regexp) ?}) + (xsdre-advance) + (cons lower nil)) + (t + (let ((upper (xsdre-parse-bound))) + (xsdre-expect ?}) + (cons lower upper))))) + (t (xsdre-parse-error "Expected , or }"))))) + (t nil)))) + +(defun xsdre-parse-bound () + (let ((n 0)) + (while (progn + (let* ((ch (car xsdre-current-regexp)) + (digit (memq ch '(?9 ?8 ?7 ?6 ?5 ?4 ?3 ?2 ?1 ?0)))) + (unless digit + (xsdre-parse-error "Expected a digit")) + (setq n (+ (* n 10) + (length (cdr digit))))) + (xsdre-advance) + (not (memq (car xsdre-current-regexp) '(?} ?,))))) + n)) + + +(defun xsdre-try-parse-atom () + (let ((ch (car xsdre-current-regexp))) + (cond ((memq ch '(nil ?? ?* ?+ ?\) ?\{ ?\} ?| ?\])) nil) + ((eq ch ?\\) + (xsdre-advance) + (xsdre-parse-escape)) + ((eq ch ?\() + (xsdre-advance) + (let ((ret (xsdre-parse-regexp))) + (xsdre-expect ?\)) + ret)) + ((eq ch ?\[) + (xsdre-parse-char-class)) + ((eq ch ?.) + (xsdre-advance) + 'dot) + (t + (let ((uc (encode-char ch 'ucs))) + (unless uc + (xsdre-parse-error "%c is not a Unicode character" ch)) + (xsdre-advance) uc))))) + +(defun xsdre-parse-char-class () + (xsdre-advance) + (let (compl members ret) + (when (eq (car xsdre-current-regexp) ?^) + (setq compl t) + (xsdre-advance)) + (while (let ((member (xsdre-parse-char-class-member)) + uc1 uc2) + (cond ((eq (car xsdre-current-regexp) ?\-) + (xsdre-advance) + (cond ((eq (car xsdre-current-regexp) ?\[) + (setq members (cons member members)) + nil) + ((not (integerp member)) + (xsdre-parse-error "Lower bound is not a single character")) + ((not (setq uc1 + (encode-char member 'ucs))) + (xsdre-parse-error "Lower bound %c is not a Unicode character" + member)) + (t + (let ((upper (xsdre-parse-char-class-member))) + (unless (integerp upper) + (xsdre-parse-error "Upper bound is not a single character")) + (unless (setq uc2 + (encode-char upper 'ucs)) + (xsdre-parse-error "Upper bound %c is not a Unicode character" upper)) + (setq members + (cons (list 'range uc1 uc2) + members))) + (not (eq (car xsdre-current-regexp) ?\]))))) + (t (setq members (cons member members)) + (not (eq (car xsdre-current-regexp) ?\])))))) + (setq members (nreverse members)) + (if (null (cdr members)) + (setq ret (car members)) + (setq ret (cons 'union members))) + (when compl + (setq ret (list 'difference 'any ret))) + (when (eq (car xsdre-current-regexp) ?\[) + (setq ret + (list 'difference ret (xsdre-parse-char-class)))) + (xsdre-expect ?\]) + ret)) + +(defun xsdre-parse-char-class-member () + (let ((ch (car xsdre-current-regexp))) + (cond ((null ch) + (xsdre-parse-error "Expected ]")) + ((eq ch ?\\) + (xsdre-advance) + (xsdre-parse-escape)) + ((memq ch '(?\[ ?\] ?-)) + (xsdre-parse-error "%c must be quoted in a character class" ch)) + (t (xsdre-advance) ch)))) + +(defconst xsdre-single-escape + '((?s . space) + (?i . name-initial) + (?c . name-continue) + (?d . digit) + (?w . word))) + +(defun xsdre-parse-escape () + (let ((ch (car xsdre-current-regexp))) + (xsdre-advance) + (cond ((memq ch '(?\\ ?| ?. ?- ?^ ?* ?+ ?( ?) ?{ ?} ?[ ?])) ch) + ((eq ch ?r) ?\r) + ((eq ch ?n) ?\n) + ((eq ch ?t) ?\t) + ((cdr (assq ch xsdre-single-escape))) + ((let ((positive + (cdr (assq (downcase ch) xsdre-single-escape)))) + (and positive + (list 'difference 'any positive)))) + ((eq ch ?p) (xsdre-parse-prop)) + ((eq ch ?P) (list 'difference 'any (xsdre-parse-prop))) + (t (if ch + (xsdre-parse-error "Missing char after \\") + (xsdre-parse-error "Bad escape %c" ch)))))) + +(defun xsdre-parse-prop () + (xsdre-expect ?{) + (let ((name nil)) + (while (not (eq (car xsdre-current-regexp) ?\})) + (unless xsdre-current-regexp + (xsdre-parse-error "Expected ?")) + (setq name (cons (car xsdre-current-regexp) + name)) + (xsdre-advance)) + (xsdre-advance) + (setq name (nreverse name)) + (cond ((null name) (xsdre-parse-error "Empty property name")) + ((null (cdr name)) + (let ((category (intern (string (car name))))) + (unless (get category 'xsdre-unicode-category) + (xsdre-parse-error "%s is not a category" category)) + category)) + ((null (cddr name)) + (let ((category (intern (string (car name) (cadr name))))) + (unless (get category 'xsdre-unicode-category) + (xsdre-parse-error "%s is not a category" category)) + category)) + ((not (and (eq (car name) ?I) + (eq (cadr name) ?s))) + (xsdre-parse-error "Block name does not start with Is")) + (t + (let ((block (intern (apply 'string (cddr name))))) + (unless (get block 'xsdre-unicode-block) + (xsdre-parse-error "%s is not a block name" block)) + block))))) + +(defun xsdre-expect (ch) + (if (eq (car xsdre-current-regexp) ch) + (xsdre-advance) + (xsdre-parse-error "Expected %c" ch))) + +(defun xsdre-advance () + (setq xsdre-current-regexp + (cdr xsdre-current-regexp))) + +(defun xsdre-parse-error (&rest args) + (signal 'xsdre-parse-error args)) + +;; This error condition is used only internally. + +(put 'xsdre-parse-error + 'error-conditions + '(error xsdre-parse-error)) + +(put 'xsdre-parse-error + 'error-message + "Internal error in parsing XSD regexp") + +;;; Character class data + +(put 'dot 'xsdre-char-class '(difference any (union #xA #xD))) +(put 'digit 'xsdre-char-class 'Nd) +(put 'word 'xsdre-char-class '(difference any (union P Z C))) +(put 'space 'xsdre-char-class '(union #x9 #xA #xD #x20)) +(put 'any 'xsdre-ranges '((#x0 . #x10FFFF))) + +(defconst xsdre-gen-categories + '(Lu Ll Lt Lm Lo Mn Mc Me Nd Nl No Pc Pd + Ps Pe Pi Pf Po Zs Zl Zp Sm Sc Sk So Cc Cf Co)) + +(defun xsdre-gen-categories (file) + "Use a UnicodeData file to generate code to initialize Unicode categories. +Code is inserted into the current buffer." + (interactive "fUnicodeData file: ") + (save-excursion + (set-buffer (find-file-noselect file)) + (goto-char (point-min)) + (mapcar (lambda (x) (put x 'xsdre-ranges nil)) xsdre-gen-categories) + (while (re-search-forward "^\\([0-9A-Fa-f]*\\);[^;]*;\\([A-Z][a-z]\\);" + nil + t) + (let* ((sym (intern (match-string-no-properties 2))) + (code (string-to-number (match-string-no-properties 1) + 16)) + (ranges (get sym 'xsdre-ranges)) + (last-range (car ranges)) + (forced-range (string= (buffer-substring-no-properties + (- (match-beginning 2) 6) + (1- (match-beginning 2))) + "Last>"))) + (cond ((and (integerp last-range) + (or forced-range + (eq code (1+ last-range)))) + (put sym + 'xsdre-ranges + (cons (cons last-range code) + (cdr ranges)))) + ((and (consp last-range) + (or forced-range + (eq code (1+ (cdr last-range))))) + (put sym + 'xsdre-ranges + (cons (cons (car last-range) code) + (cdr ranges)))) + (t + (put sym 'xsdre-ranges (cons code ranges)))))) + (mapcar (lambda (x) + (put x + 'xsdre-ranges + (nreverse (get x 'xsdre-ranges))) + nil) + xsdre-gen-categories)) + (mapcar (lambda (x) + (let ((start (point))) + (pp (list 'xsdre-def-primitive-category + (list 'quote x) + (list 'quote (get x 'xsdre-ranges))) + (current-buffer)) + (save-excursion + (goto-char start) + (down-list 2) + (while (condition-case err + (progn + (forward-sexp) + t) + (error nil)) + (when (and (< 70 (current-column)) + (not (looking-at ")"))) + (insert "\n") + (lisp-indent-line)))))) + xsdre-gen-categories)) + +(defun xsdre-def-primitive-category (sym ranges) + (put sym 'xsdre-ranges ranges) + (put sym 'xsdre-unicode-category t)) + +;;; Blocks + +(defun xsdre-def-block (sym ranges) + (put sym 'xsdre-ranges ranges) + (put sym 'xsdre-unicode-block t)) + +(xsdre-def-block 'BasicLatin '((#x0000 . #x007F))) +(xsdre-def-block 'Latin-1Supplement '((#x0080 . #x00FF))) +(xsdre-def-block 'LatinExtended-A '((#x0100 . #x017F))) +(xsdre-def-block 'LatinExtended-B '((#x0180 . #x024F))) +(xsdre-def-block 'IPAExtensions '((#x0250 . #x02AF))) +(xsdre-def-block 'SpacingModifierLetters '((#x02B0 . #x02FF))) +(xsdre-def-block 'CombiningDiacriticalMarks '((#x0300 . #x036F))) +(xsdre-def-block 'Greek '((#x0370 . #x03FF))) +(xsdre-def-block 'Cyrillic '((#x0400 . #x04FF))) +(xsdre-def-block 'Armenian '((#x0530 . #x058F))) +(xsdre-def-block 'Hebrew '((#x0590 . #x05FF))) +(xsdre-def-block 'Arabic '((#x0600 . #x06FF))) +(xsdre-def-block 'Syriac '((#x0700 . #x074F))) +(xsdre-def-block 'Thaana '((#x0780 . #x07BF))) +(xsdre-def-block 'Devanagari '((#x0900 . #x097F))) +(xsdre-def-block 'Bengali '((#x0980 . #x09FF))) +(xsdre-def-block 'Gurmukhi '((#x0A00 . #x0A7F))) +(xsdre-def-block 'Gujarati '((#x0A80 . #x0AFF))) +(xsdre-def-block 'Oriya '((#x0B00 . #x0B7F))) +(xsdre-def-block 'Tamil '((#x0B80 . #x0BFF))) +(xsdre-def-block 'Telugu '((#x0C00 . #x0C7F))) +(xsdre-def-block 'Kannada '((#x0C80 . #x0CFF))) +(xsdre-def-block 'Malayalam '((#x0D00 . #x0D7F))) +(xsdre-def-block 'Sinhala '((#x0D80 . #x0DFF))) +(xsdre-def-block 'Thai '((#x0E00 . #x0E7F))) +(xsdre-def-block 'Lao '((#x0E80 . #x0EFF))) +(xsdre-def-block 'Tibetan '((#x0F00 . #x0FFF))) +(xsdre-def-block 'Myanmar '((#x1000 . #x109F))) +(xsdre-def-block 'Georgian '((#x10A0 . #x10FF))) +(xsdre-def-block 'HangulJamo '((#x1100 . #x11FF))) +(xsdre-def-block 'Ethiopic '((#x1200 . #x137F))) +(xsdre-def-block 'Cherokee '((#x13A0 . #x13FF))) +(xsdre-def-block 'UnifiedCanadianAboriginalSyllabics '((#x1400 . #x167F))) +(xsdre-def-block 'Ogham '((#x1680 . #x169F))) +(xsdre-def-block 'Runic '((#x16A0 . #x16FF))) +(xsdre-def-block 'Khmer '((#x1780 . #x17FF))) +(xsdre-def-block 'Mongolian '((#x1800 . #x18AF))) +(xsdre-def-block 'LatinExtendedAdditional '((#x1E00 . #x1EFF))) +(xsdre-def-block 'GreekExtended '((#x1F00 . #x1FFF))) +(xsdre-def-block 'GeneralPunctuation '((#x2000 . #x206F))) +(xsdre-def-block 'SuperscriptsandSubscripts '((#x2070 . #x209F))) +(xsdre-def-block 'CurrencySymbols '((#x20A0 . #x20CF))) +(xsdre-def-block 'CombiningMarksforSymbols '((#x20D0 . #x20FF))) +(xsdre-def-block 'LetterlikeSymbols '((#x2100 . #x214F))) +(xsdre-def-block 'NumberForms '((#x2150 . #x218F))) +(xsdre-def-block 'Arrows '((#x2190 . #x21FF))) +(xsdre-def-block 'MathematicalOperators '((#x2200 . #x22FF))) +(xsdre-def-block 'MiscellaneousTechnical '((#x2300 . #x23FF))) +(xsdre-def-block 'ControlPictures '((#x2400 . #x243F))) +(xsdre-def-block 'OpticalCharacterRecognition '((#x2440 . #x245F))) +(xsdre-def-block 'EnclosedAlphanumerics '((#x2460 . #x24FF))) +(xsdre-def-block 'BoxDrawing '((#x2500 . #x257F))) +(xsdre-def-block 'BlockElements '((#x2580 . #x259F))) +(xsdre-def-block 'GeometricShapes '((#x25A0 . #x25FF))) +(xsdre-def-block 'MiscellaneousSymbols '((#x2600 . #x26FF))) +(xsdre-def-block 'Dingbats '((#x2700 . #x27BF))) +(xsdre-def-block 'BraillePatterns '((#x2800 . #x28FF))) +(xsdre-def-block 'CJKRadicalsSupplement '((#x2E80 . #x2EFF))) +(xsdre-def-block 'KangxiRadicals '((#x2F00 . #x2FDF))) +(xsdre-def-block 'IdeographicDescriptionCharacters '((#x2FF0 . #x2FFF))) +(xsdre-def-block 'CJKSymbolsandPunctuation '((#x3000 . #x303F))) +(xsdre-def-block 'Hiragana '((#x3040 . #x309F))) +(xsdre-def-block 'Katakana '((#x30A0 . #x30FF))) +(xsdre-def-block 'Bopomofo '((#x3100 . #x312F))) +(xsdre-def-block 'HangulCompatibilityJamo '((#x3130 . #x318F))) +(xsdre-def-block 'Kanbun '((#x3190 . #x319F))) +(xsdre-def-block 'BopomofoExtended '((#x31A0 . #x31BF))) +(xsdre-def-block 'EnclosedCJKLettersandMonths '((#x3200 . #x32FF))) +(xsdre-def-block 'CJKCompatibility '((#x3300 . #x33FF))) +(xsdre-def-block 'CJKUnifiedIdeographsExtensionA '((#x3400 . #x4DB5))) +(xsdre-def-block 'CJKUnifiedIdeographs '((#x4E00 . #x9FFF))) +(xsdre-def-block 'YiSyllables '((#xA000 . #xA48F))) +(xsdre-def-block 'YiRadicals '((#xA490 . #xA4CF))) +(xsdre-def-block 'HangulSyllables '((#xAC00 . #xD7A3))) +;;(xsdre-def-block 'HighSurrogates '((#xD800 . #xDB7F))) +;;(xsdre-def-block 'HighPrivateUseSurrogates '((#xDB80 . #xDBFF))) +;;(xsdre-def-block 'LowSurrogates '((#xDC00 . #xDFFF))) +(xsdre-def-block 'CJKCompatibilityIdeographs '((#xF900 . #xFAFF))) +(xsdre-def-block 'AlphabeticPresentationForms '((#xFB00 . #xFB4F))) +(xsdre-def-block 'ArabicPresentationForms-A '((#xFB50 . #xFDFF))) +(xsdre-def-block 'CombiningHalfMarks '((#xFE20 . #xFE2F))) +(xsdre-def-block 'CJKCompatibilityForms '((#xFE30 . #xFE4F))) +(xsdre-def-block 'SmallFormVariants '((#xFE50 . #xFE6F))) +(xsdre-def-block 'ArabicPresentationForms-B '((#xFE70 . #xFEFE))) +(xsdre-def-block 'Specials '((#xFEFF . #xFEFF))) +(xsdre-def-block 'HalfwidthandFullwidthForms '((#xFF00 . #xFFEF))) +(xsdre-def-block 'Specials '((#xFFF0 . #xFFFD))) +(xsdre-def-block 'OldItalic '((#x10300 . #x1032F))) +(xsdre-def-block 'Gothic '((#x10330 . #x1034F))) +(xsdre-def-block 'Deseret '((#x10400 . #x1044F))) +(xsdre-def-block 'ByzantineMusicalSymbols '((#x1D000 . #x1D0FF))) +(xsdre-def-block 'MusicalSymbols '((#x1D100 . #x1D1FF))) +(xsdre-def-block 'MathematicalAlphanumericSymbols '((#x1D400 . #x1D7FF))) +(xsdre-def-block 'CJKUnifiedIdeographsExtensionB '((#x20000 . #x2A6D6))) +(xsdre-def-block 'CJKCompatibilityIdeographsSupplement '((#x2F800 . #x2FA1F))) +(xsdre-def-block 'Tags '((#xE0000 . #xE007F))) +(xsdre-def-block 'PrivateUse '((#xE000 . #xF8FF) + (#xF0000 . #xFFFFD) + (#x100000 . #x10FFFD))) + +;;; Categories + +;;; Derived categories + +(defun xsdre-def-derived-category (sym char-class) + (put sym 'xsdre-char-class char-class) + (put sym 'xsdre-unicode-category t)) + +(xsdre-def-derived-category 'L '(union Lu Ll Lt Lm Lo)) +(xsdre-def-derived-category 'M '(union Mn Mc Me)) +(xsdre-def-derived-category 'N '(union Nd Nl No)) +(xsdre-def-derived-category 'P '(union Pc Pd Ps Pe Pi Pf Po)) +(xsdre-def-derived-category 'Z '(union Zs Zl Zp)) +(xsdre-def-derived-category 'S '(union Sm Sc Sk So)) +(xsdre-def-derived-category 'C '(union Cc Cf Co Cn)) +(xsdre-def-derived-category 'Cn '(difference any + (union L M N P Z S Cc Cf Co))) + +(xsdre-def-primitive-category + 'name-initial + '(#x003a + (#x0041 . #x005a) + #x005f + (#x0061 . #x007a) + (#x00c0 . #x00d6) + (#x00d8 . #x00f6) + (#x00f8 . #x0131) + (#x0134 . #x013e) + (#x0141 . #x0148) + (#x014a . #x017e) + (#x0180 . #x01c3) + (#x01cd . #x01f0) + (#x01f4 . #x01f5) + (#x01fa . #x0217) + (#x0250 . #x02a8) + (#x02bb . #x02c1) + #x0386 + (#x0388 . #x038a) + #x038c + (#x038e . #x03a1) + (#x03a3 . #x03ce) + (#x03d0 . #x03d6) + #x03da + #x03dc + #x03de + #x03e0 + (#x03e2 . #x03f3) + (#x0401 . #x040c) + (#x040e . #x044f) + (#x0451 . #x045c) + (#x045e . #x0481) + (#x0490 . #x04c4) + (#x04c7 . #x04c8) + (#x04cb . #x04cc) + (#x04d0 . #x04eb) + (#x04ee . #x04f5) + (#x04f8 . #x04f9) + (#x0531 . #x0556) + #x0559 + (#x0561 . #x0586) + (#x05d0 . #x05ea) + (#x05f0 . #x05f2) + (#x0621 . #x063a) + (#x0641 . #x064a) + (#x0671 . #x06b7) + (#x06ba . #x06be) + (#x06c0 . #x06ce) + (#x06d0 . #x06d3) + #x06d5 + (#x06e5 . #x06e6) + (#x0905 . #x0939) + #x093d + (#x0958 . #x0961) + (#x0985 . #x098c) + (#x098f . #x0990) + (#x0993 . #x09a8) + (#x09aa . #x09b0) + #x09b2 + (#x09b6 . #x09b9) + (#x09dc . #x09dd) + (#x09df . #x09e1) + (#x09f0 . #x09f1) + (#x0a05 . #x0a0a) + (#x0a0f . #x0a10) + (#x0a13 . #x0a28) + (#x0a2a . #x0a30) + (#x0a32 . #x0a33) + (#x0a35 . #x0a36) + (#x0a38 . #x0a39) + (#x0a59 . #x0a5c) + #x0a5e + (#x0a72 . #x0a74) + (#x0a85 . #x0a8b) + #x0a8d + (#x0a8f . #x0a91) + (#x0a93 . #x0aa8) + (#x0aaa . #x0ab0) + (#x0ab2 . #x0ab3) + (#x0ab5 . #x0ab9) + #x0abd + #x0ae0 + (#x0b05 . #x0b0c) + (#x0b0f . #x0b10) + (#x0b13 . #x0b28) + (#x0b2a . #x0b30) + (#x0b32 . #x0b33) + (#x0b36 . #x0b39) + #x0b3d + (#x0b5c . #x0b5d) + (#x0b5f . #x0b61) + (#x0b85 . #x0b8a) + (#x0b8e . #x0b90) + (#x0b92 . #x0b95) + (#x0b99 . #x0b9a) + #x0b9c + (#x0b9e . #x0b9f) + (#x0ba3 . #x0ba4) + (#x0ba8 . #x0baa) + (#x0bae . #x0bb5) + (#x0bb7 . #x0bb9) + (#x0c05 . #x0c0c) + (#x0c0e . #x0c10) + (#x0c12 . #x0c28) + (#x0c2a . #x0c33) + (#x0c35 . #x0c39) + (#x0c60 . #x0c61) + (#x0c85 . #x0c8c) + (#x0c8e . #x0c90) + (#x0c92 . #x0ca8) + (#x0caa . #x0cb3) + (#x0cb5 . #x0cb9) + #x0cde + (#x0ce0 . #x0ce1) + (#x0d05 . #x0d0c) + (#x0d0e . #x0d10) + (#x0d12 . #x0d28) + (#x0d2a . #x0d39) + (#x0d60 . #x0d61) + (#x0e01 . #x0e2e) + #x0e30 + (#x0e32 . #x0e33) + (#x0e40 . #x0e45) + (#x0e81 . #x0e82) + #x0e84 + (#x0e87 . #x0e88) + #x0e8a + #x0e8d + (#x0e94 . #x0e97) + (#x0e99 . #x0e9f) + (#x0ea1 . #x0ea3) + #x0ea5 + #x0ea7 + (#x0eaa . #x0eab) + (#x0ead . #x0eae) + #x0eb0 + (#x0eb2 . #x0eb3) + #x0ebd + (#x0ec0 . #x0ec4) + (#x0f40 . #x0f47) + (#x0f49 . #x0f69) + (#x10a0 . #x10c5) + (#x10d0 . #x10f6) + #x1100 + (#x1102 . #x1103) + (#x1105 . #x1107) + #x1109 + (#x110b . #x110c) + (#x110e . #x1112) + #x113c + #x113e + #x1140 + #x114c + #x114e + #x1150 + (#x1154 . #x1155) + #x1159 + (#x115f . #x1161) + #x1163 + #x1165 + #x1167 + #x1169 + (#x116d . #x116e) + (#x1172 . #x1173) + #x1175 + #x119e + #x11a8 + #x11ab + (#x11ae . #x11af) + (#x11b7 . #x11b8) + #x11ba + (#x11bc . #x11c2) + #x11eb + #x11f0 + #x11f9 + (#x1e00 . #x1e9b) + (#x1ea0 . #x1ef9) + (#x1f00 . #x1f15) + (#x1f18 . #x1f1d) + (#x1f20 . #x1f45) + (#x1f48 . #x1f4d) + (#x1f50 . #x1f57) + #x1f59 + #x1f5b + #x1f5d + (#x1f5f . #x1f7d) + (#x1f80 . #x1fb4) + (#x1fb6 . #x1fbc) + #x1fbe + (#x1fc2 . #x1fc4) + (#x1fc6 . #x1fcc) + (#x1fd0 . #x1fd3) + (#x1fd6 . #x1fdb) + (#x1fe0 . #x1fec) + (#x1ff2 . #x1ff4) + (#x1ff6 . #x1ffc) + #x2126 + (#x212a . #x212b) + #x212e + (#x2180 . #x2182) + #x3007 + (#x3021 . #x3029) + (#x3041 . #x3094) + (#x30a1 . #x30fa) + (#x3105 . #x312c) + (#x4e00 . #x9fa5) + (#xac00 . #xd7a3))) + +(xsdre-def-derived-category 'name-continue '(union name-initial + name-continue-not-initial)) + +(xsdre-def-primitive-category + 'name-continue-not-initial + '((#x002d . #x002e) + (#x0030 . #x0039) + #x00b7 + (#x02d0 . #x02d1) + (#x0300 . #x0345) + (#x0360 . #x0361) + #x0387 + (#x0483 . #x0486) + (#x0591 . #x05a1) + (#x05a3 . #x05b9) + (#x05bb . #x05bd) + #x05bf + (#x05c1 . #x05c2) + #x05c4 + #x0640 + (#x064b . #x0652) + (#x0660 . #x0669) + #x0670 + (#x06d6 . #x06dc) + (#x06dd . #x06df) + (#x06e0 . #x06e4) + (#x06e7 . #x06e8) + (#x06ea . #x06ed) + (#x06f0 . #x06f9) + (#x0901 . #x0903) + #x093c + (#x093e . #x094c) + #x094d + (#x0951 . #x0954) + (#x0962 . #x0963) + (#x0966 . #x096f) + (#x0981 . #x0983) + #x09bc + (#x09be . #x09bf) + (#x09c0 . #x09c4) + (#x09c7 . #x09c8) + (#x09cb . #x09cd) + #x09d7 + (#x09e2 . #x09e3) + (#x09e6 . #x09ef) + #x0a02 + #x0a3c + (#x0a3e . #x0a42) + (#x0a47 . #x0a48) + (#x0a4b . #x0a4d) + (#x0a66 . #x0a6f) + (#x0a70 . #x0a71) + (#x0a81 . #x0a83) + #x0abc + (#x0abe . #x0ac5) + (#x0ac7 . #x0ac9) + (#x0acb . #x0acd) + (#x0ae6 . #x0aef) + (#x0b01 . #x0b03) + #x0b3c + (#x0b3e . #x0b43) + (#x0b47 . #x0b48) + (#x0b4b . #x0b4d) + (#x0b56 . #x0b57) + (#x0b66 . #x0b6f) + (#x0b82 . #x0b83) + (#x0bbe . #x0bc2) + (#x0bc6 . #x0bc8) + (#x0bca . #x0bcd) + #x0bd7 + (#x0be7 . #x0bef) + (#x0c01 . #x0c03) + (#x0c3e . #x0c44) + (#x0c46 . #x0c48) + (#x0c4a . #x0c4d) + (#x0c55 . #x0c56) + (#x0c66 . #x0c6f) + (#x0c82 . #x0c83) + (#x0cbe . #x0cc4) + (#x0cc6 . #x0cc8) + (#x0cca . #x0ccd) + (#x0cd5 . #x0cd6) + (#x0ce6 . #x0cef) + (#x0d02 . #x0d03) + (#x0d3e . #x0d43) + (#x0d46 . #x0d48) + (#x0d4a . #x0d4d) + #x0d57 + (#x0d66 . #x0d6f) + #x0e31 + (#x0e34 . #x0e3a) + (#x0e46 . #x0e4e) + (#x0e50 . #x0e59) + #x0eb1 + (#x0eb4 . #x0eb9) + (#x0ebb . #x0ebc) + #x0ec6 + (#x0ec8 . #x0ecd) + (#x0ed0 . #x0ed9) + (#x0f18 . #x0f19) + (#x0f20 . #x0f29) + #x0f35 + #x0f37 + #x0f39 + (#x0f3e . #x0f3f) + (#x0f71 . #x0f84) + (#x0f86 . #x0f8b) + (#x0f90 . #x0f95) + #x0f97 + (#x0f99 . #x0fad) + (#x0fb1 . #x0fb7) + #x0fb9 + (#x20d0 . #x20dc) + #x20e1 + #x3005 + (#x302a . #x302f) + (#x3031 . #x3035) + #x3099 + #x309a + (#x309d . #x309e) + (#x30fc . #x30fe))) + +;;; Auto-generated section. + +;; The rest of the file was auto-generated by doing M-x xsdre-gen-categories +;; on UnicodeData-3.1.0.txt available from +;; http://www.unicode.org/Public/3.1-Update/UnicodeData-3.1.0.txt + +(xsdre-def-primitive-category 'Lu + '((65 . 90) + (192 . 214) + (216 . 222) + 256 258 260 262 264 266 268 270 272 274 276 + 278 280 282 284 286 288 290 292 294 296 298 + 300 302 304 306 308 310 313 315 317 319 321 + 323 325 327 330 332 334 336 338 340 342 344 + 346 348 350 352 354 356 358 360 362 364 366 + 368 370 372 374 + (376 . 377) + 379 381 + (385 . 386) + 388 + (390 . 391) + (393 . 395) + (398 . 401) + (403 . 404) + (406 . 408) + (412 . 413) + (415 . 416) + 418 420 + (422 . 423) + 425 428 + (430 . 431) + (433 . 435) + 437 + (439 . 440) + 444 452 455 458 461 463 465 467 469 471 473 + 475 478 480 482 484 486 488 490 492 494 497 + 500 + (502 . 504) + 506 508 510 512 514 516 518 520 522 524 526 + 528 530 532 534 536 538 540 542 546 548 550 + 552 554 556 558 560 562 902 + (904 . 906) + 908 + (910 . 911) + (913 . 929) + (931 . 939) + (978 . 980) + 986 988 990 992 994 996 998 1000 1002 1004 + 1006 1012 + (1024 . 1071) + 1120 1122 1124 1126 1128 1130 1132 1134 1136 + 1138 1140 1142 1144 1146 1148 1150 1152 1164 + 1166 1168 1170 1172 1174 1176 1178 1180 1182 + 1184 1186 1188 1190 1192 1194 1196 1198 1200 + 1202 1204 1206 1208 1210 1212 1214 + (1216 . 1217) + 1219 1223 1227 1232 1234 1236 1238 1240 1242 + 1244 1246 1248 1250 1252 1254 1256 1258 1260 + 1262 1264 1266 1268 1272 + (1329 . 1366) + (4256 . 4293) + 7680 7682 7684 7686 7688 7690 7692 7694 7696 + 7698 7700 7702 7704 7706 7708 7710 7712 7714 + 7716 7718 7720 7722 7724 7726 7728 7730 7732 + 7734 7736 7738 7740 7742 7744 7746 7748 7750 + 7752 7754 7756 7758 7760 7762 7764 7766 7768 + 7770 7772 7774 7776 7778 7780 7782 7784 7786 + 7788 7790 7792 7794 7796 7798 7800 7802 7804 + 7806 7808 7810 7812 7814 7816 7818 7820 7822 + 7824 7826 7828 7840 7842 7844 7846 7848 7850 + 7852 7854 7856 7858 7860 7862 7864 7866 7868 + 7870 7872 7874 7876 7878 7880 7882 7884 7886 + 7888 7890 7892 7894 7896 7898 7900 7902 7904 + 7906 7908 7910 7912 7914 7916 7918 7920 7922 + 7924 7926 7928 + (7944 . 7951) + (7960 . 7965) + (7976 . 7983) + (7992 . 7999) + (8008 . 8013) + 8025 8027 8029 8031 + (8040 . 8047) + (8120 . 8123) + (8136 . 8139) + (8152 . 8155) + (8168 . 8172) + (8184 . 8187) + 8450 8455 + (8459 . 8461) + (8464 . 8466) + 8469 + (8473 . 8477) + 8484 8486 8488 + (8490 . 8493) + (8496 . 8497) + 8499 + (65313 . 65338) + (66560 . 66597) + (119808 . 119833) + (119860 . 119885) + (119912 . 119937) + 119964 + (119966 . 119967) + 119970 + (119973 . 119974) + (119977 . 119980) + (119982 . 119989) + (120016 . 120041) + (120068 . 120069) + (120071 . 120074) + (120077 . 120084) + (120086 . 120092) + (120120 . 120121) + (120123 . 120126) + (120128 . 120132) + 120134 + (120138 . 120144) + (120172 . 120197) + (120224 . 120249) + (120276 . 120301) + (120328 . 120353) + (120380 . 120405) + (120432 . 120457) + (120488 . 120512) + (120546 . 120570) + (120604 . 120628) + (120662 . 120686) + (120720 . 120744))) +(xsdre-def-primitive-category 'Ll + '((97 . 122) + 170 181 186 + (223 . 246) + (248 . 255) + 257 259 261 263 265 267 269 271 273 275 277 + 279 281 283 285 287 289 291 293 295 297 299 + 301 303 305 307 309 + (311 . 312) + 314 316 318 320 322 324 326 + (328 . 329) + 331 333 335 337 339 341 343 345 347 349 351 + 353 355 357 359 361 363 365 367 369 371 373 + 375 378 380 + (382 . 384) + 387 389 392 + (396 . 397) + 402 405 + (409 . 411) + 414 417 419 421 424 + (426 . 427) + 429 432 436 438 + (441 . 442) + (445 . 447) + 454 457 460 462 464 466 468 470 472 474 + (476 . 477) + 479 481 483 485 487 489 491 493 + (495 . 496) + 499 501 505 507 509 511 513 515 517 519 521 + 523 525 527 529 531 533 535 537 539 541 543 + 547 549 551 553 555 557 559 561 563 + (592 . 685) + 912 + (940 . 974) + (976 . 977) + (981 . 983) + 987 989 991 993 995 997 999 1001 1003 1005 + + (1007 . 1011) + 1013 + (1072 . 1119) + 1121 1123 1125 1127 1129 1131 1133 1135 1137 + 1139 1141 1143 1145 1147 1149 1151 1153 1165 + 1167 1169 1171 1173 1175 1177 1179 1181 1183 + 1185 1187 1189 1191 1193 1195 1197 1199 1201 + 1203 1205 1207 1209 1211 1213 1215 1218 1220 + 1224 1228 1233 1235 1237 1239 1241 1243 1245 + 1247 1249 1251 1253 1255 1257 1259 1261 1263 + 1265 1267 1269 1273 + (1377 . 1415) + 7681 7683 7685 7687 7689 7691 7693 7695 7697 + 7699 7701 7703 7705 7707 7709 7711 7713 7715 + 7717 7719 7721 7723 7725 7727 7729 7731 7733 + 7735 7737 7739 7741 7743 7745 7747 7749 7751 + 7753 7755 7757 7759 7761 7763 7765 7767 7769 + 7771 7773 7775 7777 7779 7781 7783 7785 7787 + 7789 7791 7793 7795 7797 7799 7801 7803 7805 + 7807 7809 7811 7813 7815 7817 7819 7821 7823 + 7825 7827 + (7829 . 7835) + 7841 7843 7845 7847 7849 7851 7853 7855 7857 + 7859 7861 7863 7865 7867 7869 7871 7873 7875 + 7877 7879 7881 7883 7885 7887 7889 7891 7893 + 7895 7897 7899 7901 7903 7905 7907 7909 7911 + 7913 7915 7917 7919 7921 7923 7925 7927 7929 + + (7936 . 7943) + (7952 . 7957) + (7968 . 7975) + (7984 . 7991) + (8000 . 8005) + (8016 . 8023) + (8032 . 8039) + (8048 . 8061) + (8064 . 8071) + (8080 . 8087) + (8096 . 8103) + (8112 . 8116) + (8118 . 8119) + 8126 + (8130 . 8132) + (8134 . 8135) + (8144 . 8147) + (8150 . 8151) + (8160 . 8167) + (8178 . 8180) + (8182 . 8183) + 8319 8458 + (8462 . 8463) + 8467 8495 8500 8505 + (64256 . 64262) + (64275 . 64279) + (65345 . 65370) + (66600 . 66637) + (119834 . 119859) + (119886 . 119892) + (119894 . 119911) + (119938 . 119963) + (119990 . 119993) + 119995 + (119997 . 120000) + (120002 . 120003) + (120005 . 120015) + (120042 . 120067) + (120094 . 120119) + (120146 . 120171) + (120198 . 120223) + (120250 . 120275) + (120302 . 120327) + (120354 . 120379) + (120406 . 120431) + (120458 . 120483) + (120514 . 120538) + (120540 . 120545) + (120572 . 120596) + (120598 . 120603) + (120630 . 120654) + (120656 . 120661) + (120688 . 120712) + (120714 . 120719) + (120746 . 120770) + (120772 . 120777))) +(xsdre-def-primitive-category 'Lt + '(453 456 459 498 + (8072 . 8079) + (8088 . 8095) + (8104 . 8111) + 8124 8140 8188)) +(xsdre-def-primitive-category 'Lm + '((688 . 696) + (699 . 705) + (720 . 721) + (736 . 740) + 750 890 1369 1600 + (1765 . 1766) + 3654 3782 6211 12293 + (12337 . 12341) + (12445 . 12446) + (12540 . 12542) + 65392 + (65438 . 65439))) +(xsdre-def-primitive-category 'Lo + '(443 + (448 . 451) + (1488 . 1514) + (1520 . 1522) + (1569 . 1594) + (1601 . 1610) + (1649 . 1747) + 1749 + (1786 . 1788) + 1808 + (1810 . 1836) + (1920 . 1957) + (2309 . 2361) + 2365 2384 + (2392 . 2401) + (2437 . 2444) + (2447 . 2448) + (2451 . 2472) + (2474 . 2480) + 2482 + (2486 . 2489) + (2524 . 2525) + (2527 . 2529) + (2544 . 2545) + (2565 . 2570) + (2575 . 2576) + (2579 . 2600) + (2602 . 2608) + (2610 . 2611) + (2613 . 2614) + (2616 . 2617) + (2649 . 2652) + 2654 + (2674 . 2676) + (2693 . 2699) + 2701 + (2703 . 2705) + (2707 . 2728) + (2730 . 2736) + (2738 . 2739) + (2741 . 2745) + 2749 2768 2784 + (2821 . 2828) + (2831 . 2832) + (2835 . 2856) + (2858 . 2864) + (2866 . 2867) + (2870 . 2873) + 2877 + (2908 . 2909) + (2911 . 2913) + (2949 . 2954) + (2958 . 2960) + (2962 . 2965) + (2969 . 2970) + 2972 + (2974 . 2975) + (2979 . 2980) + (2984 . 2986) + (2990 . 2997) + (2999 . 3001) + (3077 . 3084) + (3086 . 3088) + (3090 . 3112) + (3114 . 3123) + (3125 . 3129) + (3168 . 3169) + (3205 . 3212) + (3214 . 3216) + (3218 . 3240) + (3242 . 3251) + (3253 . 3257) + 3294 + (3296 . 3297) + (3333 . 3340) + (3342 . 3344) + (3346 . 3368) + (3370 . 3385) + (3424 . 3425) + (3461 . 3478) + (3482 . 3505) + (3507 . 3515) + 3517 + (3520 . 3526) + (3585 . 3632) + (3634 . 3635) + (3648 . 3653) + (3713 . 3714) + 3716 + (3719 . 3720) + 3722 3725 + (3732 . 3735) + (3737 . 3743) + (3745 . 3747) + 3749 3751 + (3754 . 3755) + (3757 . 3760) + (3762 . 3763) + 3773 + (3776 . 3780) + (3804 . 3805) + 3840 + (3904 . 3911) + (3913 . 3946) + (3976 . 3979) + (4096 . 4129) + (4131 . 4135) + (4137 . 4138) + (4176 . 4181) + (4304 . 4342) + (4352 . 4441) + (4447 . 4514) + (4520 . 4601) + (4608 . 4614) + (4616 . 4678) + 4680 + (4682 . 4685) + (4688 . 4694) + 4696 + (4698 . 4701) + (4704 . 4742) + 4744 + (4746 . 4749) + (4752 . 4782) + 4784 + (4786 . 4789) + (4792 . 4798) + 4800 + (4802 . 4805) + (4808 . 4814) + (4816 . 4822) + (4824 . 4846) + (4848 . 4878) + 4880 + (4882 . 4885) + (4888 . 4894) + (4896 . 4934) + (4936 . 4954) + (5024 . 5108) + (5121 . 5740) + (5743 . 5750) + (5761 . 5786) + (5792 . 5866) + (6016 . 6067) + (6176 . 6210) + (6212 . 6263) + (6272 . 6312) + (8501 . 8504) + 12294 + (12353 . 12436) + (12449 . 12538) + (12549 . 12588) + (12593 . 12686) + (12704 . 12727) + (13312 . 19893) + (19968 . 40869) + (40960 . 42124) + (44032 . 55203) + (63744 . 64045) + 64285 + (64287 . 64296) + (64298 . 64310) + (64312 . 64316) + 64318 + (64320 . 64321) + (64323 . 64324) + (64326 . 64433) + (64467 . 64829) + (64848 . 64911) + (64914 . 64967) + (65008 . 65019) + (65136 . 65138) + 65140 + (65142 . 65276) + (65382 . 65391) + (65393 . 65437) + (65440 . 65470) + (65474 . 65479) + (65482 . 65487) + (65490 . 65495) + (65498 . 65500) + (66304 . 66334) + (66352 . 66377) + (131072 . 173782) + (194560 . 195101))) +(xsdre-def-primitive-category 'Mn + '((768 . 846) + (864 . 866) + (1155 . 1158) + (1425 . 1441) + (1443 . 1465) + (1467 . 1469) + 1471 + (1473 . 1474) + 1476 + (1611 . 1621) + 1648 + (1750 . 1756) + (1759 . 1764) + (1767 . 1768) + (1770 . 1773) + 1809 + (1840 . 1866) + (1958 . 1968) + (2305 . 2306) + 2364 + (2369 . 2376) + 2381 + (2385 . 2388) + (2402 . 2403) + 2433 2492 + (2497 . 2500) + 2509 + (2530 . 2531) + 2562 2620 + (2625 . 2626) + (2631 . 2632) + (2635 . 2637) + (2672 . 2673) + (2689 . 2690) + 2748 + (2753 . 2757) + (2759 . 2760) + 2765 2817 2876 2879 + (2881 . 2883) + 2893 2902 2946 3008 3021 + (3134 . 3136) + (3142 . 3144) + (3146 . 3149) + (3157 . 3158) + 3263 3270 + (3276 . 3277) + (3393 . 3395) + 3405 3530 + (3538 . 3540) + 3542 3633 + (3636 . 3642) + (3655 . 3662) + 3761 + (3764 . 3769) + (3771 . 3772) + (3784 . 3789) + (3864 . 3865) + 3893 3895 3897 + (3953 . 3966) + (3968 . 3972) + (3974 . 3975) + (3984 . 3991) + (3993 . 4028) + 4038 + (4141 . 4144) + 4146 + (4150 . 4151) + 4153 + (4184 . 4185) + (6071 . 6077) + 6086 + (6089 . 6099) + 6313 + (8400 . 8412) + 8417 + (12330 . 12335) + (12441 . 12442) + 64286 + (65056 . 65059) + (119143 . 119145) + (119163 . 119170) + (119173 . 119179) + (119210 . 119213))) +(xsdre-def-primitive-category 'Mc + '(2307 + (2366 . 2368) + (2377 . 2380) + (2434 . 2435) + (2494 . 2496) + (2503 . 2504) + (2507 . 2508) + 2519 + (2622 . 2624) + 2691 + (2750 . 2752) + 2761 + (2763 . 2764) + (2818 . 2819) + 2878 2880 + (2887 . 2888) + (2891 . 2892) + 2903 2947 + (3006 . 3007) + (3009 . 3010) + (3014 . 3016) + (3018 . 3020) + 3031 + (3073 . 3075) + (3137 . 3140) + (3202 . 3203) + 3262 + (3264 . 3268) + (3271 . 3272) + (3274 . 3275) + (3285 . 3286) + (3330 . 3331) + (3390 . 3392) + (3398 . 3400) + (3402 . 3404) + 3415 + (3458 . 3459) + (3535 . 3537) + (3544 . 3551) + (3570 . 3571) + (3902 . 3903) + 3967 4140 4145 4152 + (4182 . 4183) + (6068 . 6070) + (6078 . 6085) + (6087 . 6088) + (119141 . 119142) + (119149 . 119154))) +(xsdre-def-primitive-category 'Me + '((1160 . 1161) + (1757 . 1758) + (8413 . 8416) + (8418 . 8419))) +(xsdre-def-primitive-category 'Nd + '((48 . 57) + (1632 . 1641) + (1776 . 1785) + (2406 . 2415) + (2534 . 2543) + (2662 . 2671) + (2790 . 2799) + (2918 . 2927) + (3047 . 3055) + (3174 . 3183) + (3302 . 3311) + (3430 . 3439) + (3664 . 3673) + (3792 . 3801) + (3872 . 3881) + (4160 . 4169) + (4969 . 4977) + (6112 . 6121) + (6160 . 6169) + (65296 . 65305) + (120782 . 120831))) +(xsdre-def-primitive-category 'Nl + '((5870 . 5872) + (8544 . 8579) + 12295 + (12321 . 12329) + (12344 . 12346) + 66378)) +(xsdre-def-primitive-category 'No + '((178 . 179) + 185 + (188 . 190) + (2548 . 2553) + (3056 . 3058) + (3882 . 3891) + (4978 . 4988) + 8304 + (8308 . 8313) + (8320 . 8329) + (8531 . 8543) + (9312 . 9371) + 9450 + (10102 . 10131) + (12690 . 12693) + (12832 . 12841) + (12928 . 12937) + (66336 . 66339))) +(xsdre-def-primitive-category 'Pc + '(95 + (8255 . 8256) + 12539 + (65075 . 65076) + (65101 . 65103) + 65343 65381)) +(xsdre-def-primitive-category 'Pd + '(45 173 1418 6150 + (8208 . 8213) + 12316 12336 + (65073 . 65074) + 65112 65123 65293)) +(xsdre-def-primitive-category 'Ps + '(40 91 123 3898 3900 5787 8218 8222 8261 8317 + 8333 9001 12296 12298 12300 12302 12304 + 12308 12310 12312 12314 12317 64830 65077 + 65079 65081 65083 65085 65087 65089 65091 + 65113 65115 65117 65288 65339 65371 65378)) +(xsdre-def-primitive-category 'Pe + '(41 93 125 3899 3901 5788 8262 8318 8334 9002 + 12297 12299 12301 12303 12305 12309 12311 + 12313 12315 + (12318 . 12319) + 64831 65078 65080 65082 65084 65086 65088 + 65090 65092 65114 65116 65118 65289 65341 + 65373 65379)) +(xsdre-def-primitive-category 'Pi + '(171 8216 + (8219 . 8220) + 8223 8249)) +(xsdre-def-primitive-category 'Pf + '(187 8217 8221 8250)) +(xsdre-def-primitive-category 'Po + '((33 . 35) + (37 . 39) + 42 44 + (46 . 47) + (58 . 59) + (63 . 64) + 92 161 183 191 894 903 + (1370 . 1375) + 1417 1470 1472 1475 + (1523 . 1524) + 1548 1563 1567 + (1642 . 1645) + 1748 + (1792 . 1805) + (2404 . 2405) + 2416 3572 3663 + (3674 . 3675) + (3844 . 3858) + 3973 + (4170 . 4175) + 4347 + (4961 . 4968) + (5741 . 5742) + (5867 . 5869) + (6100 . 6106) + 6108 + (6144 . 6149) + (6151 . 6154) + (8214 . 8215) + (8224 . 8231) + (8240 . 8248) + (8251 . 8254) + (8257 . 8259) + (8264 . 8269) + (12289 . 12291) + 65072 + (65097 . 65100) + (65104 . 65106) + (65108 . 65111) + (65119 . 65121) + 65128 + (65130 . 65131) + (65281 . 65283) + (65285 . 65287) + 65290 65292 + (65294 . 65295) + (65306 . 65307) + (65311 . 65312) + 65340 65377 65380)) +(xsdre-def-primitive-category 'Zs + '(32 160 5760 + (8192 . 8203) + 8239 12288)) +(xsdre-def-primitive-category 'Zl + '(8232)) +(xsdre-def-primitive-category 'Zp + '(8233)) +(xsdre-def-primitive-category 'Sm + '(43 + (60 . 62) + 124 126 172 177 215 247 8260 + (8314 . 8316) + (8330 . 8332) + (8592 . 8596) + (8602 . 8603) + 8608 8611 8614 8622 + (8654 . 8655) + 8658 8660 + (8704 . 8945) + (8968 . 8971) + (8992 . 8993) + 9655 9665 9839 64297 65122 + (65124 . 65126) + 65291 + (65308 . 65310) + 65372 65374 65506 + (65513 . 65516) + 120513 120539 120571 120597 120629 120655 + 120687 120713 120745 120771)) +(xsdre-def-primitive-category 'Sc + '(36 + (162 . 165) + (2546 . 2547) + 3647 6107 + (8352 . 8367) + 65129 65284 + (65504 . 65505) + (65509 . 65510))) +(xsdre-def-primitive-category 'Sk + '(94 96 168 175 180 184 + (697 . 698) + (706 . 719) + (722 . 735) + (741 . 749) + (884 . 885) + (900 . 901) + 8125 + (8127 . 8129) + (8141 . 8143) + (8157 . 8159) + (8173 . 8175) + (8189 . 8190) + (12443 . 12444) + 65342 65344 65507)) +(xsdre-def-primitive-category 'So + '((166 . 167) + 169 174 176 182 1154 1769 + (1789 . 1790) + 2554 2928 + (3841 . 3843) + (3859 . 3863) + (3866 . 3871) + 3892 3894 3896 + (4030 . 4037) + (4039 . 4044) + 4047 + (8448 . 8449) + (8451 . 8454) + (8456 . 8457) + 8468 + (8470 . 8472) + (8478 . 8483) + 8485 8487 8489 8494 8498 8506 + (8597 . 8601) + (8604 . 8607) + (8609 . 8610) + (8612 . 8613) + (8615 . 8621) + (8623 . 8653) + (8656 . 8657) + 8659 + (8661 . 8691) + (8960 . 8967) + (8972 . 8991) + (8994 . 9000) + (9003 . 9083) + (9085 . 9114) + (9216 . 9254) + (9280 . 9290) + (9372 . 9449) + (9472 . 9621) + (9632 . 9654) + (9656 . 9664) + (9666 . 9719) + (9728 . 9747) + (9753 . 9838) + (9840 . 9841) + (9985 . 9988) + (9990 . 9993) + (9996 . 10023) + (10025 . 10059) + 10061 + (10063 . 10066) + 10070 + (10072 . 10078) + (10081 . 10087) + 10132 + (10136 . 10159) + (10161 . 10174) + (10240 . 10495) + (11904 . 11929) + (11931 . 12019) + (12032 . 12245) + (12272 . 12283) + 12292 + (12306 . 12307) + 12320 + (12342 . 12343) + (12350 . 12351) + (12688 . 12689) + (12694 . 12703) + (12800 . 12828) + (12842 . 12867) + (12896 . 12923) + 12927 + (12938 . 12976) + (12992 . 13003) + (13008 . 13054) + (13056 . 13174) + (13179 . 13277) + (13280 . 13310) + (42128 . 42145) + (42148 . 42163) + (42165 . 42176) + (42178 . 42180) + 42182 65508 65512 + (65517 . 65518) + (65532 . 65533) + (118784 . 119029) + (119040 . 119078) + (119082 . 119140) + (119146 . 119148) + (119171 . 119172) + (119180 . 119209) + (119214 . 119261))) +(xsdre-def-primitive-category 'Cc + '((0 . 31) + (127 . 159))) +(xsdre-def-primitive-category 'Cf + '(1807 + (6155 . 6158) + (8204 . 8207) + (8234 . 8238) + (8298 . 8303) + 65279 + (65529 . 65531) + (119155 . 119162) + 917505 + (917536 . 917631))) +(xsdre-def-primitive-category 'Co + '((57344 . 63743) + (983040 . 1048573) + (1048576 . 1114109))) + +(provide 'xsd-regexp) + +;;; xsd-regexp.el ends here