diff options
| author | David Aspinall | 2003-01-02 13:51:59 +0000 |
|---|---|---|
| committer | David Aspinall | 2003-01-02 13:51:59 +0000 |
| commit | 10f9cbbd7daf47fa5f1a3678604a987180b0bac7 (patch) | |
| tree | 9888c7b5afd03da4264db758d619af199adb51f5 | |
| parent | 3a725ce723fcb78df3c1843f3f091ae008b9dfa2 (diff) | |
| parent | 54cb9e6a60fee26e74da1d81bba662a0b91f29b5 (diff) | |
This commit was generated by cvs2git to track changes on a CVS vendor
branch.
| -rw-r--r-- | x-symbol/lisp/x-symbol-sgml.el | 680 |
1 files changed, 680 insertions, 0 deletions
diff --git a/x-symbol/lisp/x-symbol-sgml.el b/x-symbol/lisp/x-symbol-sgml.el new file mode 100644 index 00000000..0b862f34 --- /dev/null +++ b/x-symbol/lisp/x-symbol-sgml.el @@ -0,0 +1,680 @@ +;;; x-symbol-sgml.el --- token language "SGML entity" for package x-symbol + +;; Copyright (C) 1996-1999, 2002 Free Software Foundation, Inc. +;; +;; Author: Christoph Wedler <wedler@users.sourceforge.net> +;; Maintainer: (Please use `M-x x-symbol-package-bug' to contact the maintainer) +;; Version: 4.4.X +;; Keywords: WYSIWYG, HTML, wp, math, internationalization +;; X-URL: http://x-symbol.sourceforge.net/ + +;; 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, 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., 675 Mass Ave, Cambridge, MA 02139, USA. + +;;; Commentary: + +;; If you want to use package x-symbol, please visit the URL (use +;; \\[x-symbol-package-web]) and read the info (use \\[x-symbol-package-info]). + +;; Token language sgml is registered in x-symbol-hooks. + +;;; Code: + +(provide 'x-symbol-sgml) + + +;;;=========================================================================== +;;; Auto-style +;;;=========================================================================== + +(defcustom x-symbol-sgml-auto-style + '((not (memq major-mode '(sgml-mode xml-mode))) + (x-symbol-auto-coding-alist x-symbol-sgml-auto-coding-alist) + x-symbol-coding (not x-symbol-mode) + x-symbol-mode x-symbol-mode) + "TODO" + :group 'x-symbol-sgml + :group 'x-symbol-mode + :type 'x-symbol-auto-style) + +(defcustom x-symbol-sgml-auto-coding-alist + '(("<meta\\s-+http-equiv\\s-*=\\s-*\"content-type\"\\s-*content\\s-*=\\s-*\"text/html\\s-*;\\s-*charset\\s-*=\\s-*\\([A-Za-z0-9---]+\\)\"\\s-*>" 1 + ("iso-8859-1" . iso-8859-1) + ("iso-8859-2" . iso-8859-2) + ("iso-8859-3" . iso-8859-3) + ("iso-8859-9" . iso-8859-9) + ("iso-8859-15" . iso-8859-15))) + "*Alist used to determine the file coding of SGML/HTML buffers. +Used in the default value of `x-symbol-auto-mode-alist'. See +variable `x-symbol-auto-coding-alist' for details." + :group 'x-symbol-sgml + :group 'x-symbol-mode + :type 'x-symbol-auto-coding) + + +;;;=========================================================================== +;;; Miscellaneous variables +;;;=========================================================================== + +(defface x-symbol-sgml-symbol-face + '((((class color) (background light)) + (:foreground "orange4"))) + "*Face used for entities with name representing non-Latin-1 characters. +Used in `x-symbol-sgml-class-face-alist'." + :group 'x-symbol-sgml + :group 'x-symbol-info-general) + +(defface x-symbol-sgml-noname-face + '((((class color) (background light)) + (:foreground "red4"))) + "*Face used for Latin-N character entities without name. +Used in `x-symbol-sgml-class-face-alist'." + :group 'x-symbol-sgml + :group 'x-symbol-info-general) + +(defcustom x-symbol-sgml-modeline-name "sgml" + "*String naming the language SGML in the modeline." + :group 'x-symbol-sgml + :type 'string) + +(defcustom x-symbol-sgml-header-groups-alist + '(("Operator" bigop operator) + ("Relation" relation) + ("Arrow, Punctuation" arrow triangle shape + white line dots punctuation quote parenthesis) + ("Symbol" symbol currency mathletter setsymbol) + ("Greek Letter" greek greek1) + ("Misc. Letter" letter slash) + ("Cedilla, Ogonek" cedilla ogonek) + ("Dotaccent, Ring" dotaccent ring) + ("Tilde, Breve" tilde breve) + ("Circumflex, Caron" circumflex caron) + ("Diaeresis, Umlaut" diaeresis hungarumlaut) + ("Acute, Grave" acute grave)) + "*If non-nil, used in SGML specific grid/menu. +See `x-symbol-header-groups-alist'." + :group 'x-symbol-sgml + :group 'x-symbol-input-init + :type 'x-symbol-headers) + +(defcustom x-symbol-sgml-class-alist + '((symbol) + (noname "SGML char-ref" (x-symbol-emph-info-face)) + (VALID "SGML entity" (x-symbol-info-face)) + (INVALID "no SGML entity" (x-symbol-emph-info-face))) + "Alist for SGML's token classes displayed by info in echo area. +See `x-symbol-language-access-alist' for details." + :group 'x-symbol-sgml + :group 'x-symbol-info-strings + :type 'x-symbol-class-info) + +(defcustom x-symbol-sgml-class-face-alist + '((symbol x-symbol-sgml-symbol-face (x-symbol-sgml-symbol-face)) + (noname x-symbol-sgml-noname-face (x-symbol-sgml-noname-face))) + "Alist for SGML's color scheme in SGML's grid and info. +See `x-symbol-language-access-alist' for details." + :group 'x-symbol-sgml + :group 'x-symbol-input-init + :group 'x-symbol-info-general + :type 'x-symbol-class-faces) + +(defcustom x-symbol-sgml-electric-ignore nil + "*Additional SGML version of `x-symbol-electric-ignore'." + :group 'x-symbol-sgml + :group 'x-symbol-input-control + :type 'x-symbol-function-or-regexp) + + +(defvar x-symbol-sgml-token-list 'x-symbol-sgml-token-list-name + "Function returning a list of SGML entities from table specification. +The TOKEN-SPEC in sgml table look like (NUMBER STRING...) where NUMBER +is the Unicode value. See `x-symbol-init-language', +`x-symbol-sgml-token-list-name', `x-symbol-sgml-token-list-code' and +`x-symbol-sgml-token-list-netscape'.") + +(defvar x-symbol-sgml-token-grammar + '(x-symbol-make-grammar + :decode-regexp "&[#0-9A-Za-z]+;" + :token-list x-symbol-sgml-default-token-list) + "Token grammar for language `sgml'.") + +(defvar x-symbol-sgml-input-token-grammar + '("&[#0-9A-Za-z]+;\\'") + "Grammar of input method Token for language `sgml'.") + +(defvar x-symbol-sgml-user-table nil + "User table defining SGML entities, used in `x-symbol-sgml-table'.") + +(defvar x-symbol-sgml-generated-data nil + "Internal.") + + +;;;=========================================================================== +;;; Image support +;;;=========================================================================== + +(defcustom x-symbol-sgml-master-directory 'ignore + "Function returning the directory of the master file or nil. +See `x-symbol-image-parse-buffer'." + :group 'x-symbol-sgml + :group 'x-symbol-image-language + :type 'function) + +(defcustom x-symbol-sgml-image-searchpath '("./") + "Search path used for implicitly relative image file names. +See `x-symbol-image-use-remote'." + :group 'x-symbol-sgml + :group 'x-symbol-image-language + :type '(repeat directory)) + +(defcustom x-symbol-sgml-image-cached-dirs '("images/" "pictures/") + "Directory parts of image file names stored in the memory cache. +See `x-symbol-image-use-remote'." + :group 'x-symbol-sgml + :group 'x-symbol-image-language + :type '(repeat string)) + +(defcustom x-symbol-sgml-image-file-truename-alist + '(("\\`file:" . "") + ("\\`[A-Za-z]+:")) + "Alist used to determine the file name of an image URL. +Each element looks like + (REGEXP) or + (REGEXP . NEWTEXT) or + (REGEXP FUNCTION ARG...) +If the the image file name is matched by REGEXP, the corresponding +element is processed, if no REGEXP matches, the image file name is used +as it is. With the first form, the image command will not be +highlighted. With the second form, replace text matched by REGEXP with +NEWTEXT, see `replace-match' for details. With the third form, +FUNCTION, call FUNCTION with the image file name and the remaining +arguments ARGs to get the true file name. + +E.g., I add the following element to this variable: + (\"\\\\`http://www\\\\.fmi\\\\.uni-passau\\\\.de/~wedler/\" \. \"~/public_html/\")" + :group 'x-symbol-sgml + :group 'x-symbol-image-language + :type '(repeat (cons :format "%v" + :value ("" . "") ; doesn't work (custom bug?) + regexp + (choice ;;:value "" + (const :tag "Not highlighted" nil) + (string :tag "Replace match with") + (cons :tag "Call" + function + (repeat :tag "With arguments" sexp)))))) + +(defcustom x-symbol-sgml-image-keywords + '("\\.\\(gif\\|png\\|jpe?g\\)\\'" + ("<img[ \t][^\n>]*src=\"\\([^\n\"]+\\)\"[^\n>]*>" + x-symbol-sgml-image-file-truename 1)) + "Keywords used to find image insertion commands. +See `x-symbol-image-parse-buffer'." + :group 'x-symbol-sgml + :group 'x-symbol-image-language + :type 'x-symbol-image-keywords) + +(defun x-symbol-sgml-image-file-truename (num) + "Return true image file name for last match. +Return text matched by the NUMth regexp group of the corresponding +keyword regexp, after being processed according to +`x-symbol-sgml-image-file-truename-alist'." + (x-symbol-match-in-alist (setq num (match-string num)) + x-symbol-sgml-image-file-truename-alist + num t)) + + +;;;=========================================================================== +;;; Super- and Subscripts +;;;=========================================================================== + +(defcustom x-symbol-sgml-subscript-matcher 'x-symbol-sgml-subscript-matcher + "TODO" + :group 'x-symbol-sgml + :type 'function) + +(defcustom x-symbol-sgml-font-lock-regexp "<su[bp]>" + "Regexp matching the start tag of SGML's super- and subscripts. +See also `x-symbol-sgml-font-lock-alist'." + :group 'x-symbol-sgml + :type 'regexp) + +(defcustom x-symbol-sgml-font-lock-limit-regexp "\n\\|</?su[bp]>" + "Regexp matching the end tag of SGML's super- and subscripts. +This regexp should match the end of line and the closing tags in +`x-symbol-sgml-font-lock-alist'." + :group 'x-symbol-sgml + :type 'regexp) + +(defcustom x-symbol-sgml-font-lock-contents-regexp "[^ \t\n\240]" + "*Regexp matching the super- and subscript contents. +This regexp should match the text between the opening and closing super- +or subscript tag." + :group 'x-symbol-sgml + :type 'regexp) + +(defcustom x-symbol-sgml-font-lock-alist + '(("<sub>" . "</sub>") ("<sup>" . "</sup>")) + "Alist for correct tag pairs for SGML's super- and subscripts. +Each element looks like (OPEN . CLOSE). All keys OPEN in this alist +should be matched by `x-symbol-sgml-font-lock-regexp', all CLOSEs should +be matched by `x-symbol-sgml-font-lock-limit-regexp'." + :group 'x-symbol-sgml + :type '(repeat (cons :format "%v" + (string :tag "Open tag") + (string :tag "Close tag")))) + + +;;;=========================================================================== +;;; The tables +;;;=========================================================================== + +(defun x-symbol-sgml-default-token-list (tokens) + (mapcar #'list + (and (car tokens) + (memq x-symbol-sgml-token-list + '(x-symbol-sgml-token-list-name + x-symbol-sgml-token-list-code + x-symbol-sgml-token-list-netscape)) + (if (or (eq x-symbol-sgml-token-list + 'x-symbol-sgml-token-list-name) + (and (eq x-symbol-sgml-token-list + 'x-symbol-sgml-token-list-netscape) + (< (car tokens) 256))) + (append (cdr tokens) (list (format "&#%d;" (car tokens)))) + (cons (format "&#%d;" (car tokens)) (cdr tokens)))))) + +;; http://www.w3.org/TR/REC-html40/sgml/entities.html +;; (query-replace-regexp "<!ENTITY[ \t]*\\([A-Za-z][A-Za-z0-9]*\\)[ \t]*CDATA[ \t]*\"&#\\([0-9]+\\);\"[ \t]*--\\(.+\\) -->[ \t]*.*$" " (\\1 () \\2 \"&\\1;\") ; \\3") + +(defvar x-symbol-sgml-latin1-table + '((nobreakspace () 160 " ") + (exclamdown () 161 "¡") + (cent () 162 "¢") + (sterling () 163 "£") + (currency () 164 "¤") + (yen () 165 "¥") + (brokenbar () 166 "¦" "&brkbar;") + (section () 167 "§") + (diaeresis () 168 "¨" "¨") + (copyright () 169 "©") + (ordfeminine () 170 "ª") + (guillemotleft () 171 "«") + (notsign () 172 "¬") + (hyphen () 173 "­") + (registered () 174 "®") + (macron () 175 "¯" "&hibar;") + (degree () 176 "°") + (plusminus () 177 "±") + (twosuperior () 178 "²") + (threesuperior () 179 "³") + (acute () 180 "´") + (mu1 () 181 "µ") + (paragraph () 182 "¶") + (periodcentered () 183 "·") + (cedilla () 184 "¸") + (onesuperior () 185 "¹") + (masculine () 186 "º") + (guillemotright () 187 "»") + (onequarter () 188 "¼") + (onehalf () 189 "½") + (threequarters () 190 "¾") + (questiondown () 191 "¿") + (Agrave () 192 "À") + (Aacute () 193 "Á") + (Acircumflex () 194 "Â") + (Atilde () 195 "Ã") + (Adiaeresis () 196 "Ä") + (Aring () 197 "Å") + (AE () 198 "Æ") + (Ccedilla () 199 "Ç") + (Egrave () 200 "È") + (Eacute () 201 "É") + (Ecircumflex () 202 "Ê") + (Ediaeresis () 203 "Ë") + (Igrave () 204 "Ì") + (Iacute () 205 "Í") + (Icircumflex () 206 "Î") + (Idiaeresis () 207 "Ï") + (ETH () 208 "Ð") ; "Đ" for Dbar (U0110) = latin2#208? + (Ntilde () 209 "Ñ") + (Ograve () 210 "Ò") + (Oacute () 211 "Ó") + (Ocircumflex () 212 "Ô") + (Otilde () 213 "Õ") + (Odiaeresis () 214 "Ö") + (multiply () 215 "×") + (Ooblique () 216 "Ø") + (Ugrave () 217 "Ù") + (Uacute () 218 "Ú") + (Ucircumflex () 219 "Û") + (Udiaeresis () 220 "Ü") + (Yacute () 221 "Ý") + (THORN () 222 "Þ") + (ssharp () 223 "ß") + (agrave () 224 "à") + (aacute () 225 "á") + (acircumflex () 226 "â") + (atilde () 227 "ã") + (adiaeresis () 228 "ä") + (aring () 229 "å") + (ae () 230 "æ") + (ccedilla () 231 "ç") + (egrave () 232 "è") + (eacute () 233 "é") + (ecircumflex () 234 "ê") + (ediaeresis () 235 "ë") + (igrave () 236 "ì") + (iacute () 237 "í") + (icircumflex () 238 "î") + (idiaeresis () 239 "ï") + (eth () 240 "ð") + (ntilde () 241 "ñ") + (ograve () 242 "ò") + (oacute () 243 "ó") + (ocircumflex () 244 "ô") + (otilde () 245 "õ") + (odiaeresis () 246 "ö") + (division () 247 "÷") + (oslash () 248 "ø") + (ugrave () 249 "ù") + (uacute () 250 "ú") + (ucircumflex () 251 "û") + (udiaeresis () 252 "ü") + (yacute () 253 "ý") + (thorn () 254 "þ") + (ydiaeresis () 255 "ÿ")) + "Table defining SGML entities, see `x-symbol-sgml-table'.") + +(defvar x-symbol-sgml-latinN-table + '((Aogonek (noname) 260) + (breve (noname) 728) + (Lslash (noname) 321) + (Lcaron (noname) 317) + (Sacute (noname) 346) + (Scaron (symbol) 352 "Š") + (Scedilla (noname) 350) + (Tcaron (noname) 356) + (Zacute (noname) 377) + (Zcaron (noname) 381) + (Zdotaccent (noname) 379) + (aogonek (noname) 261) + (ogonek (noname) 731) + (lslash (noname) 322) + (lcaron (noname) 318) + (sacute (noname) 347) + (caron (noname) 711) + (scaron (symbol) 353 "š") + (scedilla (noname) 351) + (tcaron (noname) 357) + (zacute (noname) 378) + (hungarumlaut (noname) 733) + (zcaron (noname) 382) + (zdotaccent (noname) 380) + (Racute (noname) 340) + (Abreve (noname) 258) + (Lacute (noname) 313) + (Cacute (noname) 262) + (Ccaron (noname) 268) + (Eogonek (noname) 280) + (Ecaron (noname) 282) + (Dcaron (noname) 270) + (Dbar (noname) 272) + (Nacute (noname) 323) + (Ncaron (noname) 327) + (Ohungarumlaut (noname) 336) + (Rcaron (noname) 344) + (Uring (noname) 366) + (Uhungarumlaut (noname) 368) + (Tcedilla (noname) 354) + (racute (noname) 341) + (abreve (noname) 259) + (lacute (noname) 314) + (cacute (noname) 263) + (ccaron (noname) 269) + (eogonek (noname) 281) + (ecaron (noname) 283) + (dcaron (noname) 271) + (dbar (noname) 273) + (nacute (noname) 324) + (ncaron (noname) 328) + (ohungarumlaut (noname) 337) + (rcaron (noname) 345) + (uring (noname) 367) + (uhungarumlaut (noname) 369) + (tcedilla (noname) 355) + (dotaccent (noname) 729) + (Hbar (noname) 294) + (Hcircumflex (noname) 292) + (Idotaccent (noname) 304) + (Gbreve (noname) 286) + (Jcircumflex (noname) 308) + (hbar (noname) 295) + (hcircumflex (noname) 293) + (dotlessi (noname) 305) + (gbreve (noname) 287) + (jcircumflex (noname) 309) + (Cdotaccent (noname) 266) + (Ccircumflex (noname) 264) + (Gdotaccent (noname) 288) + (Gcircumflex (noname) 284) + (Ubreve (noname) 364) + (Scircumflex (noname) 348) + (cdotaccent (noname) 267) + (ccircumflex (noname) 265) + (gdotaccent (noname) 289) + (gcircumflex (noname) 285) + (ubreve (noname) 365) + (scircumflex (noname) 349) + (euro (symbol) 8364 "€") + (OE (symbol) 338 "Œ") + (oe (symbol) 339 "œ") + (Ydiaeresis (symbol) 376 "Ÿ")) + "Table defining SGML entities, see `x-symbol-sgml-table'.") + +(defvar x-symbol-sgml-xsymb0-table + '((Delta (symbol) 916 "Δ") + (Phi (symbol) 934 "Φ") + (Gamma (symbol) 915 "Γ") + (theta1 (symbol) 977 "ϑ") + (Lambda (symbol) 923 "Λ") + (Pi (symbol) 928 "Π") + (Theta (symbol) 920 "Θ") + (Sigma (symbol) 931 "Σ") + (sigma1 (symbol) 962 "ς") + (Omega (symbol) 937 "Ω") + (Xi (symbol) 926 "Ξ") + (Psi (symbol) 936 "Ψ") + (alpha (symbol) 945 "α") + (beta (symbol) 946 "β") + (chi (symbol) 967 "χ") + (delta (symbol) 948 "δ") + (epsilon (symbol) 949 "ε") + (phi (symbol) 966 "φ") + (gamma (symbol) 947 "γ") + (eta (symbol) 951 "η") + (iota (symbol) 953 "ι") + (kappa (symbol) 954 "κ") + (lambda (symbol) 955 "λ") + (mu (symbol) 956 "μ") + (nu (symbol) 957 "ν") + (pi (symbol) 960 "π") + (theta (symbol) 952 "θ") + (rho (symbol) 961 "ρ") + (sigma (symbol) 963 "σ") + (tau (symbol) 964 "τ") + (upsilon (symbol) 965 "υ") + (omega1 (symbol) 982 "ϖ") + (omega (symbol) 969 "ω") + (xi (symbol) 958 "ξ") + (psi (symbol) 968 "ψ") + (zeta (symbol) 950 "ζ") + (Upsilon1 (symbol) 978 "ϒ") + + (florin (symbol) 402 "ƒ") + (bullet (symbol) 8226 "•") + (ellipsis (symbol) 8230 "…") + (minute (symbol) 8242 "′") + (second (symbol) 8243 "″") + (radicalex (symbol) 8254 "‾") + (fraction (symbol) 8260 "⁄") + (weierstrass (symbol) 8472 "℘") + (Ifraktur (symbol) 8465 "ℑ") + (Rfraktur (symbol) 8476 "ℜ") + (trademark (symbol) 8482 "™") + (aleph (symbol) 8501 "ℵ") + (arrowleft (symbol) 8592 "←") + (arrowup (symbol) 8593 "↑") + (arrowright (symbol) 8594 "→") + (arrowdown (symbol) 8595 "↓") + (arrowboth (symbol) 8596 "↔") + (carriagereturn (symbol) 8629 "↵") + (arrowdblleft (symbol) 8656 "⇐") + (arrowdblup (symbol) 8657 "⇑") + (arrowdblright (symbol) 8658 "⇒") + (arrowdbldown (symbol) 8659 "⇓") + (arrowdblboth (symbol) 8660 "⇔") + + (partialdiff (symbol) 8706 "∂") + (emptyset (symbol) 8709 "∅") + (gradient (symbol) 8711 "∇") + (element (symbol) 8712 "∈") + (notelement (symbol) 8713 "∉") + (suchthat (symbol) 8715 "∋") + (product (symbol) 8719 "∏") + (summation (symbol) 8721 "∑") + (minus1 (symbol) 8722 "−") + (asterisk1 (symbol) 8727 "∗") + (radical (symbol) 8730 "√") + (proportional (symbol) 8733 "∝") + (infinity (symbol) 8734 "∞") + (angle (symbol) 8736 "∠") + (logicaland (symbol) 8743 "∧") + (logicalor (symbol) 8744 "∨") + (intersection (symbol) 8745 "∩") + (union (symbol) 8746 "∪") + (integral (symbol) 8747 "∫") + (similar (symbol) 8764 "∼") + (congruent (symbol) 8773 "≅") + (notequal (symbol) 8800 "≠") + (equivalence (symbol) 8801 "≡") + (lessequal (symbol) 8804 "≤") + (greaterequal (symbol) 8805 "≥") + (propersubset (symbol) 8834 "⊂") + (propersuperset (symbol) 8835 "⊃") + (notsubset (symbol) 8836 "⊄") + (reflexsubset (symbol) 8838 "⊆") + (reflexsuperset (symbol) 8839 "⊇") + (circleplus (symbol) 8853 "⊕") + (circlemultiply (symbol) 8855 "⊗") + (perpendicular (symbol) 8869 "⊥") + (periodcentered1 (symbol) 8901 "⋅") + (angleleft (symbol) 9001 "⟨") + (angleright (symbol) 9002 "⟩") + (lozenge (symbol) 9674 "◊") + (spade (symbol) 9824 "♠") + (club (symbol) 9827 "♣") + (heart (symbol) 9829 "♥") + (diamond (symbol) 9830 "♦")) + "Table defining SGML entities, see `x-symbol-sgml-table'.") + +(defvar x-symbol-sgml-xsymb1-table + '((ampersand2 () 38 "&") + (quotedbl1 () 34 """) + (less2 () 60 "<") + (greater2 () 62 ">") + (universal1 (symbol) 8704 "∀") + (existential1 (symbol) 8707 "∃") + (circumflex (symbol) 710 "ˆ") + (tilde (symbol) 732 "˜") + ;;(ensp (symbol) 8194 " ") ; en space, U+2002 ISOpub + ;;(emsp (symbol) 8195 " ") ; em space, U+2003 ISOpub + ;;(thinsp (symbol) 8201 " ") ; thin space, U+2009 ISOpub + ;;(zwnj (symbol) 8204 "‌") ; zero width non-joiner, U+200C NEW RFC 2070 + ;;(zwj (symbol) 8205 "‍") ; zero width joiner, U+200D NEW RFC 2070 + ;;(lrm (symbol) 8206 "‎") ; left-to-right mark, U+200E NEW RFC 2070 + ;;(rlm (symbol) 8207 "‏") ; right-to-left mark, U+200F NEW RFC 2070 + (endash (symbol) 8211 "–") + (emdash (symbol) 8212 "—") + ;;(lsquo (symbol) 8216 "‘") ; left single quotation mark, U+2018 ISOnum + ;;(rsquo (symbol) 8217 "’") ; right single quotation mark, U+2019 ISOnum + ;;(sbquo (symbol) 8218 "‚") ; single low-9 quotation mark, U+201A NEW + ;;(ldquo (symbol) 8220 "“") ; left double quotation mark, U+201C ISOnum + ;;(rdquo (symbol) 8221 "”") ; right double quotation mark, U+201D ISOnum + ;;(bdquo (symbol) 8222 "„") ; double low-9 quotation mark, U+201E NEW + (dagger (symbol) 8224 "†") + (daggerdbl (symbol) 8225 "‡") + (perthousand (symbol) 8240 "‰") + (guilsinglleft (symbol) 8249 "‹") + (guilsinglright (symbol) 8250 "›") + (therefore1 (symbol) 8756 "∴") + (ceilingleft (symbol) 8968 "⌈") + (ceilingright (symbol) 8969 "⌉") + (floorleft (symbol) 8970 "⌊") + (floorright (symbol) 8971 "⌋") + (asym (symbol) 8776 "≈") + ) + "Table defining SGML entities, see `x-symbol-sgml-table'.") + +;; Should I add symbols from http://www.bbsinc.com/iso8859.html ? +(defvar x-symbol-sgml-table + (append x-symbol-sgml-user-table + '(nil) + x-symbol-sgml-latin1-table + x-symbol-sgml-latinN-table + x-symbol-sgml-xsymb0-table + x-symbol-sgml-xsymb1-table) + "Complete table defining SGML entities. +Use `x-symbol-sgml-user-table' to define/shadow private entities. +See `x-symbol-init-language' and `x-symbol-sgml-token-list'.") + + +;;;=========================================================================== +;;; Subscript functions +;;;=========================================================================== + +(defun x-symbol-sgml-subscript-matcher (limit) + ;; checkdoc-params: (limit) + "Match and skip over super- and subscripts. +Return nil if `x-symbol-mode' or `x-symbol-subscripts' is nil. Uses +`x-symbol-sgml-font-lock-regexp'." + (block nil + (let (open-beg open-end close-end close-beg) + (while (re-search-forward x-symbol-sgml-font-lock-regexp limit t) + (setq open-beg (match-beginning 0) + open-end (match-end 0)) + (when (re-search-forward x-symbol-sgml-font-lock-limit-regexp + limit 'limit) + (setq close-beg (match-beginning 0) + close-end (match-end 0)) + (if (equal (cdr (assoc (downcase + (buffer-substring open-beg open-end)) + x-symbol-sgml-font-lock-alist)) + (downcase (buffer-substring close-beg close-end))) + (when + (save-excursion + (goto-char open-end) + (re-search-forward x-symbol-sgml-font-lock-contents-regexp + close-beg t)) + (store-match-data (list open-beg close-end + open-beg open-end + open-end close-beg + close-beg close-end)) + (return (if (eq (char-after (+ 3 open-beg)) ?b) + 'x-symbol-sub-face + 'x-symbol-sup-face))) + (goto-char close-beg))))))) + +;;; Local IspellPersDict: .ispell_xsymb +;;; x-symbol-sgml.el ends here |
