123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121 |
- ;;; xsd-regexp.el --- translate W3C XML Schema regexps to Emacs regexps
- ;; Copyright (C) 2003, 2007-2012 Free Software Foundation, Inc.
- ;; Author: James Clark
- ;; Keywords: XML, regexp
- ;; This file is part of GNU Emacs.
- ;; GNU Emacs 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 3 of the License, or
- ;; (at your option) any later version.
- ;; GNU Emacs 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 GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
- ;;; 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 translatable 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 CC."
- (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: ")
- (with-current-buffer (find-file-noselect file)
- (goto-char (point-min))
- (mapc (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))))))
- (mapc (lambda (x)
- (put x
- 'xsdre-ranges
- (nreverse (get x 'xsdre-ranges)))
- nil)
- xsdre-gen-categories))
- (mapc (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
|