--- a/content/mathml/content/src/Makefile.in
+++ b/content/mathml/content/src/Makefile.in
@@ -71,14 +71,20 @@ include $(topsrcdir)/config/config.mk
FORCE_STATIC_LIB = 1
EXPORTS = \
$(NULL)
include $(topsrcdir)/config/rules.mk
+EXPORT_RESOURCE_CONTENT = \
+ $(srcdir)/mathml.dtd \
+ $(NULL)
+libs::
+ $(INSTALL) $(EXPORT_RESOURCE_CONTENT) $(DIST)/bin/res/dtd
+
INCLUDES += \
-I$(srcdir)/../../../shared/public \
-I$(srcdir)/../../../base/src \
$(NULL)
DEFINES += -D_IMPL_NS_LAYOUT
new file mode 100644
--- /dev/null
+++ b/content/mathml/content/src/mathml.dtd
@@ -0,0 +1,1592 @@
+<!-- ***** BEGIN LICENSE BLOCK *****
+ - Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ -
+ - The contents of this file are subject to the Mozilla Public License Version
+ - 1.1 (the "License"); you may not use this file except in compliance with
+ - the License. You may obtain a copy of the License at
+ - http://www.mozilla.org/MPL/
+ -
+ - Software distributed under the License is distributed on an "AS IS" basis,
+ - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ - for the specific language governing rights and limitations under the
+ - License.
+ -
+ - The Original Code is Mozilla MathML Project.
+ -
+ - The Initial Developer of the Original Code is
+ - The University of Queensland.
+ - Portions created by the Initial Developer are Copyright (C) 2001
+ - the Initial Developer. All Rights Reserved.
+ -
+ - Contributor(s):
+ - Roger B. Sidje <rbs@maths.uq.edu.au>
+ - Karl Tomlinson <karlt+@karlt.net>, Mozilla Corporation
+ -
+ - Alternatively, the contents of this file may be used under the terms of
+ - either the GNU General Public License Version 2 or later (the "GPL"), or
+ - the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ - in which case the provisions of the GPL or the LGPL are applicable instead
+ - of those above. If you wish to allow use of your version of this file only
+ - under the terms of either the GPL or the LGPL, and not to allow others to
+ - use your version of this file under the terms of the MPL, indicate your
+ - decision by deleting the provisions above and replace them with the notice
+ - and other provisions required by the LGPL or the GPL. If you do not delete
+ - the provisions above, a recipient may use your version of this file under
+ - the terms of any one of the MPL, the GPL or the LGPL.
+ -
+ - ***** END LICENSE BLOCK ***** -->
+
+<!-- Entities defined in MathML 2.0 but with Unicode code points updated in
+ line with http://www.unicode.org/reports/tr25/tr25-9.html
+ -->
+<!ENTITY phi "ϕ">
+<!ENTITY ShortLeftArrow "←​"><!ENTITY slarr "←​">
+<!ENTITY ShortUpArrow "↑​">
+<!ENTITY ShortRightArrow "→​"><!ENTITY srarr "→​">
+<!ENTITY ShortDownArrow "↓​">
+<!ENTITY OverParenthesis "⏜">
+<!ENTITY UnderParenthesis "⏝">
+<!ENTITY OverBrace "⏞">
+<!ENTITY UnderBrace "⏟">
+<!ENTITY trpezium "⏢">
+<!ENTITY elinters "⏧">
+<!ENTITY lbbrk "❲">
+<!ENTITY rbbrk "❳">
+<!ENTITY lobrk "⟦"><!ENTITY LeftDoubleBracket "⟦">
+<!ENTITY robrk "⟧"><!ENTITY RightDoubleBracket "⟧">
+<!ENTITY lang "⟨"><!ENTITY LeftAngleBracket "⟨"><!ENTITY langle "⟨">
+<!ENTITY rang "⟩"><!ENTITY RightAngleBracket "⟩"><!ENTITY rangle "⟩">
+<!ENTITY Lang "⟪">
+<!ENTITY Rang "⟫">
+<!ENTITY loang "⟬">
+<!ENTITY roang "⟭">
+<!ENTITY imath "𝚤"><!ENTITY inodot "𝚤">
+<!ENTITY jmath "𝚥">
+
+<!-- MathML 2.0 entities - Auto-generated from the
+ "XHTML 1.1 plus MathML 2.0 plus SVG 1.1 DTD"
+ http://www.w3.org/Math/DTD/mathml2.tgz
+ as of Revision: xhtml-math11-f.dtd,v 1.16 2003/11/04 13:14:35
+
+ *** *** ***
+
+ The "XHTML 1.1 plus MathML 2.0 plus SVG 1.1 DTD" file from which the
+ entities were retrieved had the following copyright notice:
+
+ Copyright 2002 World Wide Web Consortium
+ (Massachusetts Institute of Technology, Institut National de
+ Recherche en Informatique et en Automatique, Keio University).
+ All Rights Reserved.
+
+ Permission to use, copy, modify and distribute this 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.
+
+ *** *** ***
+
+ The section listing entity declarations had the following notices:
+
+ Portions (C) International Organization for Standardization 1986:
+ Permission to copy in any form is granted for use with conforming
+ SGML systems and applications as defined in ISO 8879, provided
+ this notice is included in all copies.
+
+ (C) International Organization for Standardization 1991
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies.
+ -->
+<!ENTITY Tab "	">
+<!ENTITY NewLine "
">
+<!ENTITY excl "!">
+<!ENTITY quot """>
+<!ENTITY num "#">
+<!ENTITY dollar "$">
+<!ENTITY percnt "%">
+<!ENTITY nvlt "&#x3C;⃒">
+<!ENTITY apos "'">
+<!ENTITY lpar "(">
+<!ENTITY rpar ")">
+<!ENTITY midast "*"><!ENTITY ast "*">
+<!ENTITY plus "+">
+<!ENTITY comma ",">
+<!ENTITY period ".">
+<!ENTITY sol "/">
+<!ENTITY colon ":">
+<!ENTITY semi ";">
+<!ENTITY equals "=">
+<!ENTITY bne "=⃥">
+<!ENTITY nvgt ">⃒">
+<!ENTITY quest "?">
+<!ENTITY commat "@">
+<!ENTITY lsqb "["><!ENTITY lbrack "[">
+<!ENTITY bsol "\">
+<!ENTITY bsolhsub "\⊂">
+<!ENTITY rsqb "]"><!ENTITY rbrack "]">
+<!ENTITY Hat "^">
+<!ENTITY lowbar "_">
+<!ENTITY grave "`"><!ENTITY DiacriticalGrave "`">
+<!ENTITY lcub "{"><!ENTITY lbrace "{">
+<!ENTITY verbar "|"><!ENTITY VerticalLine "|"><!ENTITY vert "|">
+<!ENTITY rcub "}"><!ENTITY rbrace "}">
+<!ENTITY nbsp " "><!ENTITY NonBreakingSpace " ">
+<!ENTITY iexcl "¡">
+<!ENTITY cent "¢">
+<!ENTITY pound "£">
+<!ENTITY curren "¤">
+<!ENTITY yen "¥">
+<!ENTITY brvbar "¦">
+<!ENTITY sect "§">
+<!ENTITY uml "¨"><!ENTITY Dot "¨"><!ENTITY die "¨"><!ENTITY DoubleDot "¨">
+<!ENTITY copy "©">
+<!ENTITY ordf "ª">
+<!ENTITY laquo "«">
+<!ENTITY not "¬">
+<!ENTITY shy "­">
+<!ENTITY reg "®"><!ENTITY circledR "®">
+<!ENTITY macr "¯"><!ENTITY strns "¯"><!ENTITY OverBar "¯">
+<!ENTITY deg "°">
+<!ENTITY plusmn "±"><!ENTITY PlusMinus "±"><!ENTITY pm "±">
+<!ENTITY sup2 "²">
+<!ENTITY sup3 "³">
+<!ENTITY acute "´"><!ENTITY DiacriticalAcute "´">
+<!ENTITY micro "µ">
+<!ENTITY para "¶">
+<!ENTITY middot "·"><!ENTITY CenterDot "·"><!ENTITY centerdot "·">
+<!ENTITY cedil "¸"><!ENTITY Cedilla "¸">
+<!ENTITY sup1 "¹">
+<!ENTITY ordm "º">
+<!ENTITY raquo "»">
+<!ENTITY frac14 "¼">
+<!ENTITY frac12 "½"><!ENTITY half "½">
+<!ENTITY frac34 "¾">
+<!ENTITY iquest "¿">
+<!ENTITY Agrave "À">
+<!ENTITY Aacute "Á">
+<!ENTITY Acirc "Â">
+<!ENTITY Atilde "Ã">
+<!ENTITY Auml "Ä">
+<!ENTITY Aring "Å">
+<!ENTITY AElig "Æ">
+<!ENTITY Ccedil "Ç">
+<!ENTITY Egrave "È">
+<!ENTITY Eacute "É">
+<!ENTITY Ecirc "Ê">
+<!ENTITY Euml "Ë">
+<!ENTITY Igrave "Ì">
+<!ENTITY Iacute "Í">
+<!ENTITY Icirc "Î">
+<!ENTITY Iuml "Ï">
+<!ENTITY ETH "Ð">
+<!ENTITY Ntilde "Ñ">
+<!ENTITY Ograve "Ò">
+<!ENTITY Oacute "Ó">
+<!ENTITY Ocirc "Ô">
+<!ENTITY Otilde "Õ">
+<!ENTITY Ouml "Ö">
+<!ENTITY times "×">
+<!ENTITY Oslash "Ø">
+<!ENTITY Ugrave "Ù">
+<!ENTITY Uacute "Ú">
+<!ENTITY Ucirc "Û">
+<!ENTITY Uuml "Ü">
+<!ENTITY Yacute "Ý">
+<!ENTITY THORN "Þ">
+<!ENTITY szlig "ß">
+<!ENTITY agrave "à">
+<!ENTITY aacute "á">
+<!ENTITY acirc "â">
+<!ENTITY atilde "ã">
+<!ENTITY auml "ä">
+<!ENTITY aring "å">
+<!ENTITY aelig "æ">
+<!ENTITY ccedil "ç">
+<!ENTITY egrave "è">
+<!ENTITY eacute "é">
+<!ENTITY ecirc "ê">
+<!ENTITY euml "ë">
+<!ENTITY igrave "ì">
+<!ENTITY iacute "í">
+<!ENTITY icirc "î">
+<!ENTITY iuml "ï">
+<!ENTITY eth "ð">
+<!ENTITY ntilde "ñ">
+<!ENTITY ograve "ò">
+<!ENTITY oacute "ó">
+<!ENTITY ocirc "ô">
+<!ENTITY otilde "õ">
+<!ENTITY ouml "ö">
+<!ENTITY divide "÷"><!ENTITY div "÷">
+<!ENTITY oslash "ø">
+<!ENTITY ugrave "ù">
+<!ENTITY uacute "ú">
+<!ENTITY ucirc "û">
+<!ENTITY uuml "ü">
+<!ENTITY yacute "ý">
+<!ENTITY thorn "þ">
+<!ENTITY yuml "ÿ">
+<!ENTITY Amacr "Ā">
+<!ENTITY amacr "ā">
+<!ENTITY Abreve "Ă">
+<!ENTITY abreve "ă">
+<!ENTITY Aogon "Ą">
+<!ENTITY aogon "ą">
+<!ENTITY Cacute "Ć">
+<!ENTITY cacute "ć">
+<!ENTITY Ccirc "Ĉ">
+<!ENTITY ccirc "ĉ">
+<!ENTITY Cdot "Ċ">
+<!ENTITY cdot "ċ">
+<!ENTITY Ccaron "Č">
+<!ENTITY ccaron "č">
+<!ENTITY Dcaron "Ď">
+<!ENTITY dcaron "ď">
+<!ENTITY Dstrok "Đ">
+<!ENTITY dstrok "đ">
+<!ENTITY Emacr "Ē">
+<!ENTITY emacr "ē">
+<!ENTITY Edot "Ė">
+<!ENTITY edot "ė">
+<!ENTITY Eogon "Ę">
+<!ENTITY eogon "ę">
+<!ENTITY Ecaron "Ě">
+<!ENTITY ecaron "ě">
+<!ENTITY Gcirc "Ĝ">
+<!ENTITY gcirc "ĝ">
+<!ENTITY Gbreve "Ğ">
+<!ENTITY gbreve "ğ">
+<!ENTITY Gdot "Ġ">
+<!ENTITY gdot "ġ">
+<!ENTITY Gcedil "Ģ">
+<!ENTITY Hcirc "Ĥ">
+<!ENTITY hcirc "ĥ">
+<!ENTITY Hstrok "Ħ">
+<!ENTITY hstrok "ħ">
+<!ENTITY Itilde "Ĩ">
+<!ENTITY itilde "ĩ">
+<!ENTITY Imacr "Ī">
+<!ENTITY imacr "ī">
+<!ENTITY Iogon "Į">
+<!ENTITY iogon "į">
+<!ENTITY Idot "İ">
+<!ENTITY IJlig "IJ">
+<!ENTITY ijlig "ij">
+<!ENTITY Jcirc "Ĵ">
+<!ENTITY jcirc "ĵ">
+<!ENTITY Kcedil "Ķ">
+<!ENTITY kcedil "ķ">
+<!ENTITY kgreen "ĸ">
+<!ENTITY Lacute "Ĺ">
+<!ENTITY lacute "ĺ">
+<!ENTITY Lcedil "Ļ">
+<!ENTITY lcedil "ļ">
+<!ENTITY Lcaron "Ľ">
+<!ENTITY lcaron "ľ">
+<!ENTITY Lmidot "Ŀ">
+<!ENTITY lmidot "ŀ">
+<!ENTITY Lstrok "Ł">
+<!ENTITY lstrok "ł">
+<!ENTITY Nacute "Ń">
+<!ENTITY nacute "ń">
+<!ENTITY Ncedil "Ņ">
+<!ENTITY ncedil "ņ">
+<!ENTITY Ncaron "Ň">
+<!ENTITY ncaron "ň">
+<!ENTITY napos "ʼn">
+<!ENTITY ENG "Ŋ">
+<!ENTITY eng "ŋ">
+<!ENTITY Omacr "Ō">
+<!ENTITY omacr "ō">
+<!ENTITY Odblac "Ő">
+<!ENTITY odblac "ő">
+<!ENTITY OElig "Œ">
+<!ENTITY oelig "œ">
+<!ENTITY Racute "Ŕ">
+<!ENTITY racute "ŕ">
+<!ENTITY Rcedil "Ŗ">
+<!ENTITY rcedil "ŗ">
+<!ENTITY Rcaron "Ř">
+<!ENTITY rcaron "ř">
+<!ENTITY Sacute "Ś">
+<!ENTITY sacute "ś">
+<!ENTITY Scirc "Ŝ">
+<!ENTITY scirc "ŝ">
+<!ENTITY Scedil "Ş">
+<!ENTITY scedil "ş">
+<!ENTITY Scaron "Š">
+<!ENTITY scaron "š">
+<!ENTITY Tcedil "Ţ">
+<!ENTITY tcedil "ţ">
+<!ENTITY Tcaron "Ť">
+<!ENTITY tcaron "ť">
+<!ENTITY Tstrok "Ŧ">
+<!ENTITY tstrok "ŧ">
+<!ENTITY Utilde "Ũ">
+<!ENTITY utilde "ũ">
+<!ENTITY Umacr "Ū">
+<!ENTITY umacr "ū">
+<!ENTITY Ubreve "Ŭ">
+<!ENTITY ubreve "ŭ">
+<!ENTITY Uring "Ů">
+<!ENTITY uring "ů">
+<!ENTITY Udblac "Ű">
+<!ENTITY udblac "ű">
+<!ENTITY Uogon "Ų">
+<!ENTITY uogon "ų">
+<!ENTITY Wcirc "Ŵ">
+<!ENTITY wcirc "ŵ">
+<!ENTITY Ycirc "Ŷ">
+<!ENTITY ycirc "ŷ">
+<!ENTITY Yuml "Ÿ">
+<!ENTITY Zacute "Ź">
+<!ENTITY zacute "ź">
+<!ENTITY Zdot "Ż">
+<!ENTITY zdot "ż">
+<!ENTITY Zcaron "Ž">
+<!ENTITY zcaron "ž">
+<!ENTITY fnof "ƒ">
+<!ENTITY imped "Ƶ">
+<!ENTITY gacute "ǵ">
+<!ENTITY circ "ˆ">
+<!ENTITY caron "ˇ"><!ENTITY Hacek "ˇ">
+<!ENTITY breve "˘"><!ENTITY Breve "˘">
+<!ENTITY dot "˙"><!ENTITY DiacriticalDot "˙">
+<!ENTITY ring "˚">
+<!ENTITY ogon "˛">
+<!ENTITY tilde "˜"><!ENTITY DiacriticalTilde "˜">
+<!ENTITY dblac "˝"><!ENTITY DiacriticalDoubleAcute "˝">
+<!ENTITY DownBreve " ̑">
+<!ENTITY UnderBar " ̲">
+<!ENTITY Alpha "Α">
+<!ENTITY Beta "Β">
+<!ENTITY Gamma "Γ">
+<!ENTITY Delta "Δ">
+<!ENTITY Epsilon "Ε">
+<!ENTITY Zeta "Ζ">
+<!ENTITY Eta "Η">
+<!ENTITY Theta "Θ">
+<!ENTITY Iota "Ι">
+<!ENTITY Kappa "Κ">
+<!ENTITY Lambda "Λ">
+<!ENTITY Mu "Μ">
+<!ENTITY Nu "Ν">
+<!ENTITY Xi "Ξ">
+<!ENTITY Omicron "Ο">
+<!ENTITY Pi "Π">
+<!ENTITY Rho "Ρ">
+<!ENTITY Sigma "Σ">
+<!ENTITY Tau "Τ">
+<!ENTITY Upsilon "Υ">
+<!ENTITY Phi "Φ">
+<!ENTITY Chi "Χ">
+<!ENTITY Psi "Ψ">
+<!ENTITY Omega "Ω">
+<!ENTITY alpha "α">
+<!ENTITY beta "β">
+<!ENTITY gamma "γ">
+<!ENTITY delta "δ">
+<!ENTITY epsilon "ε"><!ENTITY epsiv "ε"><!ENTITY varepsilon "ε">
+<!ENTITY zeta "ζ">
+<!ENTITY eta "η">
+<!ENTITY theta "θ">
+<!ENTITY iota "ι">
+<!ENTITY kappa "κ">
+<!ENTITY lambda "λ">
+<!ENTITY mu "μ">
+<!ENTITY nu "ν">
+<!ENTITY xi "ξ">
+<!ENTITY omicron "ο">
+<!ENTITY pi "π">
+<!ENTITY rho "ρ">
+<!ENTITY sigmaf "ς"><!ENTITY sigmav "ς"><!ENTITY varsigma "ς">
+<!ENTITY sigma "σ">
+<!ENTITY tau "τ">
+<!ENTITY upsilon "υ"><!ENTITY upsi "υ">
+<!ENTITY phiv "φ"><!ENTITY varphi "φ">
+<!ENTITY chi "χ">
+<!ENTITY psi "ψ">
+<!ENTITY omega "ω">
+<!ENTITY thetasym "ϑ"><!ENTITY thetav "ϑ"><!ENTITY vartheta "ϑ">
+<!ENTITY upsih "ϒ"><!ENTITY Upsi "ϒ">
+<!ENTITY straightphi "ϕ">
+<!ENTITY piv "ϖ"><!ENTITY varpi "ϖ">
+<!ENTITY Gammad "Ϝ">
+<!ENTITY gammad "ϝ"><!ENTITY digamma "ϝ">
+<!ENTITY kappav "ϰ"><!ENTITY varkappa "ϰ">
+<!ENTITY rhov "ϱ"><!ENTITY varrho "ϱ">
+<!ENTITY epsi "ϵ"><!ENTITY straightepsilon "ϵ">
+<!ENTITY bepsi "϶"><!ENTITY backepsilon "϶">
+<!ENTITY IOcy "Ё">
+<!ENTITY DJcy "Ђ">
+<!ENTITY GJcy "Ѓ">
+<!ENTITY Jukcy "Є">
+<!ENTITY DScy "Ѕ">
+<!ENTITY Iukcy "І">
+<!ENTITY YIcy "Ї">
+<!ENTITY Jsercy "Ј">
+<!ENTITY LJcy "Љ">
+<!ENTITY NJcy "Њ">
+<!ENTITY TSHcy "Ћ">
+<!ENTITY KJcy "Ќ">
+<!ENTITY Ubrcy "Ў">
+<!ENTITY DZcy "Џ">
+<!ENTITY Acy "А">
+<!ENTITY Bcy "Б">
+<!ENTITY Vcy "В">
+<!ENTITY Gcy "Г">
+<!ENTITY Dcy "Д">
+<!ENTITY IEcy "Е">
+<!ENTITY ZHcy "Ж">
+<!ENTITY Zcy "З">
+<!ENTITY Icy "И">
+<!ENTITY Jcy "Й">
+<!ENTITY Kcy "К">
+<!ENTITY Lcy "Л">
+<!ENTITY Mcy "М">
+<!ENTITY Ncy "Н">
+<!ENTITY Ocy "О">
+<!ENTITY Pcy "П">
+<!ENTITY Rcy "Р">
+<!ENTITY Scy "С">
+<!ENTITY Tcy "Т">
+<!ENTITY Ucy "У">
+<!ENTITY Fcy "Ф">
+<!ENTITY KHcy "Х">
+<!ENTITY TScy "Ц">
+<!ENTITY CHcy "Ч">
+<!ENTITY SHcy "Ш">
+<!ENTITY SHCHcy "Щ">
+<!ENTITY HARDcy "Ъ">
+<!ENTITY Ycy "Ы">
+<!ENTITY SOFTcy "Ь">
+<!ENTITY Ecy "Э">
+<!ENTITY YUcy "Ю">
+<!ENTITY YAcy "Я">
+<!ENTITY acy "а">
+<!ENTITY bcy "б">
+<!ENTITY vcy "в">
+<!ENTITY gcy "г">
+<!ENTITY dcy "д">
+<!ENTITY iecy "е">
+<!ENTITY zhcy "ж">
+<!ENTITY zcy "з">
+<!ENTITY icy "и">
+<!ENTITY jcy "й">
+<!ENTITY kcy "к">
+<!ENTITY lcy "л">
+<!ENTITY mcy "м">
+<!ENTITY ncy "н">
+<!ENTITY ocy "о">
+<!ENTITY pcy "п">
+<!ENTITY rcy "р">
+<!ENTITY scy "с">
+<!ENTITY tcy "т">
+<!ENTITY ucy "у">
+<!ENTITY fcy "ф">
+<!ENTITY khcy "х">
+<!ENTITY tscy "ц">
+<!ENTITY chcy "ч">
+<!ENTITY shcy "ш">
+<!ENTITY shchcy "щ">
+<!ENTITY hardcy "ъ">
+<!ENTITY ycy "ы">
+<!ENTITY softcy "ь">
+<!ENTITY ecy "э">
+<!ENTITY yucy "ю">
+<!ENTITY yacy "я">
+<!ENTITY iocy "ё">
+<!ENTITY djcy "ђ">
+<!ENTITY gjcy "ѓ">
+<!ENTITY jukcy "є">
+<!ENTITY dscy "ѕ">
+<!ENTITY iukcy "і">
+<!ENTITY yicy "ї">
+<!ENTITY jsercy "ј">
+<!ENTITY ljcy "љ">
+<!ENTITY njcy "њ">
+<!ENTITY tshcy "ћ">
+<!ENTITY kjcy "ќ">
+<!ENTITY ubrcy "ў">
+<!ENTITY dzcy "џ">
+<!ENTITY ensp " ">
+<!ENTITY emsp " ">
+<!ENTITY emsp13 " ">
+<!ENTITY emsp14 " ">
+<!ENTITY numsp " ">
+<!ENTITY puncsp " ">
+<!ENTITY thinsp " "><!ENTITY ThinSpace " ">
+<!ENTITY ThickSpace "   ">
+<!ENTITY hairsp " "><!ENTITY VeryThinSpace " ">
+<!ENTITY ZeroWidthSpace "​"><!ENTITY NegativeMediumSpace "​"><!ENTITY NegativeThickSpace "​"><!ENTITY NegativeThinSpace "​"><!ENTITY NegativeVeryThinSpace "​">
+<!ENTITY zwnj "‌">
+<!ENTITY zwj "‍">
+<!ENTITY lrm "‎">
+<!ENTITY rlm "‏">
+<!ENTITY hyphen "‐"><!ENTITY dash "‐">
+<!ENTITY ndash "–">
+<!ENTITY mdash "—">
+<!ENTITY horbar "―">
+<!ENTITY Verbar "‖"><!ENTITY Vert "‖">
+<!ENTITY lsquo "‘"><!ENTITY OpenCurlyQuote "‘">
+<!ENTITY rsquo "’"><!ENTITY rsquor "’"><!ENTITY CloseCurlyQuote "’">
+<!ENTITY sbquo "‚"><!ENTITY lsquor "‚">
+<!ENTITY ldquo "“"><!ENTITY OpenCurlyDoubleQuote "“">
+<!ENTITY rdquo "”"><!ENTITY rdquor "”"><!ENTITY CloseCurlyDoubleQuote "”">
+<!ENTITY bdquo "„"><!ENTITY ldquor "„">
+<!ENTITY dagger "†">
+<!ENTITY Dagger "‡"><!ENTITY ddagger "‡">
+<!ENTITY bull "•"><!ENTITY bullet "•">
+<!ENTITY nldr "‥">
+<!ENTITY hellip "…"><!ENTITY mldr "…">
+<!ENTITY permil "‰">
+<!ENTITY pertenk "‱">
+<!ENTITY prime "′">
+<!ENTITY Prime "″">
+<!ENTITY tprime "‴">
+<!ENTITY bprime "‵"><!ENTITY backprime "‵">
+<!ENTITY lsaquo "‹">
+<!ENTITY rsaquo "›">
+<!ENTITY oline "‾">
+<!ENTITY caret "⁁">
+<!ENTITY hybull "⁃">
+<!ENTITY frasl "⁄">
+<!ENTITY bsemi "⁏">
+<!ENTITY qprime "⁗">
+<!ENTITY MediumSpace " ">
+<!ENTITY NoBreak "⁠">
+<!ENTITY af "⁡"><!ENTITY ApplyFunction "⁡">
+<!ENTITY it "⁢"><!ENTITY InvisibleTimes "⁢">
+<!ENTITY ic "⁣"><!ENTITY InvisibleComma "⁣">
+<!ENTITY euro "€">
+<!ENTITY tdot " ⃛"><!ENTITY TripleDot " ⃛">
+<!ENTITY DotDot " ⃜">
+<!ENTITY Copf "ℂ"><!ENTITY complexes "ℂ">
+<!ENTITY incare "℅">
+<!ENTITY gscr "ℊ">
+<!ENTITY Hscr "ℋ"><!ENTITY hamilt "ℋ"><!ENTITY HilbertSpace "ℋ">
+<!ENTITY Hfr "ℌ"><!ENTITY Poincareplane "ℌ">
+<!ENTITY Hopf "ℍ"><!ENTITY quaternions "ℍ">
+<!ENTITY planckh "ℎ">
+<!ENTITY planck "ℏ"><!ENTITY plankv "ℏ"><!ENTITY hbar "ℏ"><!ENTITY hslash "ℏ">
+<!ENTITY Iscr "ℐ"><!ENTITY imagline "ℐ">
+<!ENTITY image "ℑ"><!ENTITY Ifr "ℑ"><!ENTITY Im "ℑ"><!ENTITY imagpart "ℑ">
+<!ENTITY Lscr "ℒ"><!ENTITY lagran "ℒ"><!ENTITY Laplacetrf "ℒ">
+<!ENTITY ell "ℓ">
+<!ENTITY Nopf "ℕ"><!ENTITY naturals "ℕ">
+<!ENTITY numero "№">
+<!ENTITY copysr "℗">
+<!ENTITY weierp "℘"><!ENTITY wp "℘">
+<!ENTITY Popf "ℙ"><!ENTITY primes "ℙ">
+<!ENTITY Qopf "ℚ"><!ENTITY rationals "ℚ">
+<!ENTITY Rscr "ℛ"><!ENTITY realine "ℛ">
+<!ENTITY real "ℜ"><!ENTITY Rfr "ℜ"><!ENTITY Re "ℜ"><!ENTITY realpart "ℜ">
+<!ENTITY Ropf "ℝ"><!ENTITY reals "ℝ">
+<!ENTITY rx "℞">
+<!ENTITY trade "™">
+<!ENTITY Zopf "ℤ"><!ENTITY integers "ℤ">
+<!ENTITY ohm "Ω">
+<!ENTITY mho "℧">
+<!ENTITY Zfr "ℨ"><!ENTITY zeetrf "ℨ">
+<!ENTITY iiota "℩">
+<!ENTITY angst "Å">
+<!ENTITY Bscr "ℬ"><!ENTITY bernou "ℬ"><!ENTITY Bernoullis "ℬ">
+<!ENTITY Cfr "ℭ"><!ENTITY Cayleys "ℭ">
+<!ENTITY escr "ℯ">
+<!ENTITY Escr "ℰ"><!ENTITY expectation "ℰ">
+<!ENTITY Fscr "ℱ"><!ENTITY Fouriertrf "ℱ">
+<!ENTITY Mscr "ℳ"><!ENTITY phmmat "ℳ"><!ENTITY Mellintrf "ℳ">
+<!ENTITY oscr "ℴ"><!ENTITY order "ℴ"><!ENTITY orderof "ℴ">
+<!ENTITY alefsym "ℵ"><!ENTITY aleph "ℵ">
+<!ENTITY beth "ℶ">
+<!ENTITY gimel "ℷ">
+<!ENTITY daleth "ℸ">
+<!ENTITY DD "ⅅ"><!ENTITY CapitalDifferentialD "ⅅ">
+<!ENTITY dd "ⅆ"><!ENTITY DifferentialD "ⅆ">
+<!ENTITY ee "ⅇ"><!ENTITY ExponentialE "ⅇ"><!ENTITY exponentiale "ⅇ">
+<!ENTITY ii "ⅈ"><!ENTITY ImaginaryI "ⅈ">
+<!ENTITY frac13 "⅓">
+<!ENTITY frac23 "⅔">
+<!ENTITY frac15 "⅕">
+<!ENTITY frac25 "⅖">
+<!ENTITY frac35 "⅗">
+<!ENTITY frac45 "⅘">
+<!ENTITY frac16 "⅙">
+<!ENTITY frac56 "⅚">
+<!ENTITY frac18 "⅛">
+<!ENTITY frac38 "⅜">
+<!ENTITY frac58 "⅝">
+<!ENTITY frac78 "⅞">
+<!ENTITY larr "←"><!ENTITY LeftArrow "←"><!ENTITY leftarrow "←">
+<!ENTITY uarr "↑"><!ENTITY UpArrow "↑"><!ENTITY uparrow "↑">
+<!ENTITY rarr "→"><!ENTITY RightArrow "→"><!ENTITY rightarrow "→">
+<!ENTITY darr "↓"><!ENTITY DownArrow "↓"><!ENTITY downarrow "↓">
+<!ENTITY harr "↔"><!ENTITY LeftRightArrow "↔"><!ENTITY leftrightarrow "↔">
+<!ENTITY varr "↕"><!ENTITY UpDownArrow "↕"><!ENTITY updownarrow "↕">
+<!ENTITY nwarr "↖"><!ENTITY nwarrow "↖"><!ENTITY UpperLeftArrow "↖">
+<!ENTITY nearr "↗"><!ENTITY nearrow "↗"><!ENTITY UpperRightArrow "↗">
+<!ENTITY searr "↘"><!ENTITY LowerRightArrow "↘"><!ENTITY searrow "↘">
+<!ENTITY swarr "↙"><!ENTITY LowerLeftArrow "↙"><!ENTITY swarrow "↙">
+<!ENTITY nlarr "↚"><!ENTITY nleftarrow "↚">
+<!ENTITY nrarr "↛"><!ENTITY nrightarrow "↛">
+<!ENTITY rarrw "↝"><!ENTITY rightsquigarrow "↝">
+<!ENTITY nrarrw "↝̸">
+<!ENTITY Larr "↞"><!ENTITY twoheadleftarrow "↞">
+<!ENTITY Uarr "↟">
+<!ENTITY Rarr "↠"><!ENTITY twoheadrightarrow "↠">
+<!ENTITY Darr "↡">
+<!ENTITY larrtl "↢"><!ENTITY leftarrowtail "↢">
+<!ENTITY rarrtl "↣"><!ENTITY rightarrowtail "↣">
+<!ENTITY mapstoleft "↤"><!ENTITY LeftTeeArrow "↤">
+<!ENTITY mapstoup "↥"><!ENTITY UpTeeArrow "↥">
+<!ENTITY map "↦"><!ENTITY mapsto "↦"><!ENTITY RightTeeArrow "↦">
+<!ENTITY mapstodown "↧"><!ENTITY DownTeeArrow "↧">
+<!ENTITY larrhk "↩"><!ENTITY hookleftarrow "↩">
+<!ENTITY rarrhk "↪"><!ENTITY hookrightarrow "↪">
+<!ENTITY larrlp "↫"><!ENTITY looparrowleft "↫">
+<!ENTITY rarrlp "↬"><!ENTITY looparrowright "↬">
+<!ENTITY harrw "↭"><!ENTITY leftrightsquigarrow "↭">
+<!ENTITY nharr "↮"><!ENTITY nleftrightarrow "↮">
+<!ENTITY lsh "↰"><!ENTITY Lsh "↰">
+<!ENTITY rsh "↱"><!ENTITY Rsh "↱">
+<!ENTITY ldsh "↲">
+<!ENTITY rdsh "↳">
+<!ENTITY crarr "↵">
+<!ENTITY cularr "↶"><!ENTITY curvearrowleft "↶">
+<!ENTITY curarr "↷"><!ENTITY curvearrowright "↷">
+<!ENTITY olarr "↺"><!ENTITY circlearrowleft "↺">
+<!ENTITY orarr "↻"><!ENTITY circlearrowright "↻">
+<!ENTITY lharu "↼"><!ENTITY leftharpoonup "↼"><!ENTITY LeftVector "↼">
+<!ENTITY lhard "↽"><!ENTITY DownLeftVector "↽"><!ENTITY leftharpoondown "↽">
+<!ENTITY uharr "↾"><!ENTITY RightUpVector "↾"><!ENTITY upharpoonright "↾">
+<!ENTITY uharl "↿"><!ENTITY LeftUpVector "↿"><!ENTITY upharpoonleft "↿">
+<!ENTITY rharu "⇀"><!ENTITY rightharpoonup "⇀"><!ENTITY RightVector "⇀">
+<!ENTITY rhard "⇁"><!ENTITY DownRightVector "⇁"><!ENTITY rightharpoondown "⇁">
+<!ENTITY dharr "⇂"><!ENTITY downharpoonright "⇂"><!ENTITY RightDownVector "⇂">
+<!ENTITY dharl "⇃"><!ENTITY downharpoonleft "⇃"><!ENTITY LeftDownVector "⇃">
+<!ENTITY rlarr "⇄"><!ENTITY RightArrowLeftArrow "⇄"><!ENTITY rightleftarrows "⇄">
+<!ENTITY udarr "⇅"><!ENTITY UpArrowDownArrow "⇅">
+<!ENTITY lrarr "⇆"><!ENTITY LeftArrowRightArrow "⇆"><!ENTITY leftrightarrows "⇆">
+<!ENTITY llarr "⇇"><!ENTITY leftleftarrows "⇇">
+<!ENTITY uuarr "⇈"><!ENTITY upuparrows "⇈">
+<!ENTITY rrarr "⇉"><!ENTITY rightrightarrows "⇉">
+<!ENTITY ddarr "⇊"><!ENTITY downdownarrows "⇊">
+<!ENTITY lrhar "⇋"><!ENTITY leftrightharpoons "⇋"><!ENTITY ReverseEquilibrium "⇋">
+<!ENTITY rlhar "⇌"><!ENTITY Equilibrium "⇌"><!ENTITY rightleftharpoons "⇌">
+<!ENTITY nlArr "⇍"><!ENTITY nLeftarrow "⇍">
+<!ENTITY nhArr "⇎"><!ENTITY nLeftrightarrow "⇎">
+<!ENTITY nrArr "⇏"><!ENTITY nRightarrow "⇏">
+<!ENTITY lArr "⇐"><!ENTITY DoubleLeftArrow "⇐"><!ENTITY Leftarrow "⇐">
+<!ENTITY uArr "⇑"><!ENTITY DoubleUpArrow "⇑"><!ENTITY Uparrow "⇑">
+<!ENTITY rArr "⇒"><!ENTITY DoubleRightArrow "⇒"><!ENTITY Implies "⇒"><!ENTITY Rightarrow "⇒">
+<!ENTITY dArr "⇓"><!ENTITY DoubleDownArrow "⇓"><!ENTITY Downarrow "⇓">
+<!ENTITY hArr "⇔"><!ENTITY iff "⇔"><!ENTITY DoubleLeftRightArrow "⇔"><!ENTITY Leftrightarrow "⇔">
+<!ENTITY vArr "⇕"><!ENTITY DoubleUpDownArrow "⇕"><!ENTITY Updownarrow "⇕">
+<!ENTITY nwArr "⇖">
+<!ENTITY neArr "⇗">
+<!ENTITY seArr "⇘">
+<!ENTITY swArr "⇙">
+<!ENTITY lAarr "⇚"><!ENTITY Lleftarrow "⇚">
+<!ENTITY rAarr "⇛"><!ENTITY Rrightarrow "⇛">
+<!ENTITY zigrarr "⇝">
+<!ENTITY larrb "⇤"><!ENTITY LeftArrowBar "⇤">
+<!ENTITY rarrb "⇥"><!ENTITY RightArrowBar "⇥">
+<!ENTITY duarr "⇵"><!ENTITY DownArrowUpArrow "⇵">
+<!ENTITY loarr "⇽">
+<!ENTITY roarr "⇾">
+<!ENTITY hoarr "⇿">
+<!ENTITY forall "∀"><!ENTITY ForAll "∀">
+<!ENTITY comp "∁"><!ENTITY complement "∁">
+<!ENTITY part "∂"><!ENTITY PartialD "∂">
+<!ENTITY npart "∂̸">
+<!ENTITY exist "∃"><!ENTITY Exists "∃">
+<!ENTITY nexist "∄"><!ENTITY nexists "∄"><!ENTITY NotExists "∄">
+<!ENTITY empty "∅"><!ENTITY emptyv "∅"><!ENTITY emptyset "∅"><!ENTITY varnothing "∅">
+<!ENTITY nabla "∇"><!ENTITY Del "∇">
+<!ENTITY isin "∈"><!ENTITY isinv "∈"><!ENTITY Element "∈"><!ENTITY in "∈">
+<!ENTITY notin "∉"><!ENTITY notinva "∉"><!ENTITY NotElement "∉">
+<!ENTITY ni "∋"><!ENTITY niv "∋"><!ENTITY ReverseElement "∋"><!ENTITY SuchThat "∋">
+<!ENTITY notni "∌"><!ENTITY notniva "∌"><!ENTITY NotReverseElement "∌">
+<!ENTITY prod "∏"><!ENTITY Product "∏">
+<!ENTITY coprod "∐"><!ENTITY Coproduct "∐">
+<!ENTITY sum "∑"><!ENTITY Sum "∑">
+<!ENTITY minus "−">
+<!ENTITY mnplus "∓"><!ENTITY MinusPlus "∓"><!ENTITY mp "∓">
+<!ENTITY plusdo "∔"><!ENTITY dotplus "∔">
+<!ENTITY setmn "∖"><!ENTITY ssetmn "∖"><!ENTITY Backslash "∖"><!ENTITY setminus "∖"><!ENTITY smallsetminus "∖">
+<!ENTITY lowast "∗">
+<!ENTITY compfn "∘"><!ENTITY SmallCircle "∘">
+<!ENTITY radic "√"><!ENTITY Sqrt "√">
+<!ENTITY prop "∝"><!ENTITY vprop "∝"><!ENTITY Proportional "∝"><!ENTITY propto "∝"><!ENTITY varpropto "∝">
+<!ENTITY infin "∞">
+<!ENTITY angrt "∟">
+<!ENTITY ang "∠"><!ENTITY angle "∠">
+<!ENTITY nang "∠⃒">
+<!ENTITY angmsd "∡"><!ENTITY measuredangle "∡">
+<!ENTITY angsph "∢">
+<!ENTITY mid "∣"><!ENTITY smid "∣"><!ENTITY shortmid "∣"><!ENTITY VerticalBar "∣">
+<!ENTITY nmid "∤"><!ENTITY nsmid "∤"><!ENTITY NotVerticalBar "∤"><!ENTITY nshortmid "∤">
+<!ENTITY spar "∥"><!ENTITY par "∥"><!ENTITY DoubleVerticalBar "∥"><!ENTITY parallel "∥"><!ENTITY shortparallel "∥">
+<!ENTITY npar "∦"><!ENTITY nspar "∦"><!ENTITY NotDoubleVerticalBar "∦"><!ENTITY nparallel "∦"><!ENTITY nshortparallel "∦">
+<!ENTITY and "∧"><!ENTITY wedge "∧">
+<!ENTITY or "∨"><!ENTITY vee "∨">
+<!ENTITY cap "∩">
+<!ENTITY caps "∩︀">
+<!ENTITY cup "∪">
+<!ENTITY cups "∪︀">
+<!ENTITY int "∫"><!ENTITY Integral "∫">
+<!ENTITY Int "∬">
+<!ENTITY tint "∭"><!ENTITY iiint "∭">
+<!ENTITY conint "∮"><!ENTITY ContourIntegral "∮"><!ENTITY oint "∮">
+<!ENTITY Conint "∯"><!ENTITY DoubleContourIntegral "∯">
+<!ENTITY Cconint "∰">
+<!ENTITY cwint "∱">
+<!ENTITY cwconint "∲"><!ENTITY ClockwiseContourIntegral "∲">
+<!ENTITY awconint "∳"><!ENTITY CounterClockwiseContourIntegral "∳">
+<!ENTITY there4 "∴"><!ENTITY Therefore "∴"><!ENTITY therefore "∴">
+<!ENTITY becaus "∵"><!ENTITY Because "∵"><!ENTITY because "∵">
+<!ENTITY ratio "∶">
+<!ENTITY Colon "∷"><!ENTITY Proportion "∷">
+<!ENTITY minusd "∸"><!ENTITY dotminus "∸">
+<!ENTITY mDDot "∺">
+<!ENTITY homtht "∻">
+<!ENTITY sim "∼"><!ENTITY thksim "∼"><!ENTITY thicksim "∼"><!ENTITY Tilde "∼">
+<!ENTITY nvsim "∼⃒">
+<!ENTITY bsim "∽"><!ENTITY backsim "∽">
+<!ENTITY ac "∾"><!ENTITY mstpos "∾">
+<!ENTITY acE "∾̳">
+<!ENTITY acd "∿">
+<!ENTITY wreath "≀"><!ENTITY VerticalTilde "≀"><!ENTITY wr "≀">
+<!ENTITY nsim "≁"><!ENTITY NotTilde "≁">
+<!ENTITY esim "≂"><!ENTITY eqsim "≂"><!ENTITY EqualTilde "≂">
+<!ENTITY nesim "≂̸"><!ENTITY NotEqualTilde "≂̸">
+<!ENTITY sime "≃"><!ENTITY simeq "≃"><!ENTITY TildeEqual "≃">
+<!ENTITY nsime "≄"><!ENTITY NotTildeEqual "≄"><!ENTITY nsimeq "≄">
+<!ENTITY cong "≅"><!ENTITY TildeFullEqual "≅">
+<!ENTITY simne "≆">
+<!ENTITY ncong "≇"><!ENTITY NotTildeFullEqual "≇">
+<!ENTITY asymp "≈"><!ENTITY thkap "≈"><!ENTITY ap "≈"><!ENTITY approx "≈"><!ENTITY thickapprox "≈"><!ENTITY TildeTilde "≈">
+<!ENTITY nap "≉"><!ENTITY napprox "≉"><!ENTITY NotTildeTilde "≉">
+<!ENTITY ape "≊"><!ENTITY approxeq "≊">
+<!ENTITY apid "≋">
+<!ENTITY napid "≋̸">
+<!ENTITY bcong "≌"><!ENTITY backcong "≌">
+<!ENTITY asympeq "≍"><!ENTITY CupCap "≍">
+<!ENTITY nvap "≍⃒">
+<!ENTITY bump "≎"><!ENTITY Bumpeq "≎"><!ENTITY HumpDownHump "≎">
+<!ENTITY nbump "≎̸"><!ENTITY NotHumpDownHump "≎̸">
+<!ENTITY bumpe "≏"><!ENTITY bumpeq "≏"><!ENTITY HumpEqual "≏">
+<!ENTITY nbumpe "≏̸"><!ENTITY NotHumpEqual "≏̸">
+<!ENTITY esdot "≐"><!ENTITY doteq "≐"><!ENTITY DotEqual "≐">
+<!ENTITY nedot "≐̸">
+<!ENTITY eDot "≑"><!ENTITY doteqdot "≑">
+<!ENTITY efDot "≒"><!ENTITY fallingdotseq "≒">
+<!ENTITY erDot "≓"><!ENTITY risingdotseq "≓">
+<!ENTITY colone "≔"><!ENTITY Assign "≔"><!ENTITY coloneq "≔">
+<!ENTITY ecolon "≕"><!ENTITY eqcolon "≕">
+<!ENTITY ecir "≖"><!ENTITY eqcirc "≖">
+<!ENTITY cire "≗"><!ENTITY circeq "≗">
+<!ENTITY wedgeq "≙">
+<!ENTITY veeeq "≚">
+<!ENTITY trie "≜"><!ENTITY triangleq "≜">
+<!ENTITY equest "≟"><!ENTITY questeq "≟">
+<!ENTITY ne "≠"><!ENTITY NotEqual "≠">
+<!ENTITY equiv "≡"><!ENTITY Congruent "≡">
+<!ENTITY bnequiv "≡⃥">
+<!ENTITY nequiv "≢"><!ENTITY NotCongruent "≢">
+<!ENTITY le "≤"><!ENTITY leq "≤">
+<!ENTITY nvle "≤⃒">
+<!ENTITY ge "≥"><!ENTITY geq "≥"><!ENTITY GreaterEqual "≥">
+<!ENTITY nvge "≥⃒">
+<!ENTITY lE "≦"><!ENTITY leqq "≦"><!ENTITY LessFullEqual "≦">
+<!ENTITY nlE "≦̸"><!ENTITY nleqq "≦̸"><!ENTITY NotGreaterFullEqual "≦̸">
+<!ENTITY gE "≧"><!ENTITY geqq "≧"><!ENTITY GreaterFullEqual "≧">
+<!ENTITY ngE "≧̸"><!ENTITY ngeqq "≧̸">
+<!ENTITY lnE "≨"><!ENTITY lneqq "≨">
+<!ENTITY lvnE "≨︀"><!ENTITY lvertneqq "≨︀">
+<!ENTITY gnE "≩"><!ENTITY gneqq "≩">
+<!ENTITY gvnE "≩︀"><!ENTITY gvertneqq "≩︀">
+<!ENTITY Lt "≪"><!ENTITY ll "≪"><!ENTITY NestedLessLess "≪">
+<!ENTITY nLt "≪⃒">
+<!ENTITY nLtv "≪̸"><!ENTITY NotLessLess "≪̸">
+<!ENTITY Gt "≫"><!ENTITY gg "≫"><!ENTITY NestedGreaterGreater "≫">
+<!ENTITY nGt "≫⃒">
+<!ENTITY nGtv "≫̸"><!ENTITY NotGreaterGreater "≫̸">
+<!ENTITY twixt "≬"><!ENTITY between "≬">
+<!ENTITY NotCupCap "≭">
+<!ENTITY nlt "≮"><!ENTITY nless "≮"><!ENTITY NotLess "≮">
+<!ENTITY ngt "≯"><!ENTITY ngtr "≯"><!ENTITY NotGreater "≯">
+<!ENTITY nle "≰"><!ENTITY nleq "≰"><!ENTITY NotLessEqual "≰">
+<!ENTITY nge "≱"><!ENTITY ngeq "≱"><!ENTITY NotGreaterEqual "≱">
+<!ENTITY lsim "≲"><!ENTITY lesssim "≲"><!ENTITY LessTilde "≲">
+<!ENTITY gsim "≳"><!ENTITY GreaterTilde "≳"><!ENTITY gtrsim "≳">
+<!ENTITY nlsim "≴"><!ENTITY NotLessTilde "≴">
+<!ENTITY ngsim "≵"><!ENTITY NotGreaterTilde "≵">
+<!ENTITY lg "≶"><!ENTITY LessGreater "≶"><!ENTITY lessgtr "≶">
+<!ENTITY gl "≷"><!ENTITY GreaterLess "≷"><!ENTITY gtrless "≷">
+<!ENTITY ntlg "≸"><!ENTITY NotLessGreater "≸">
+<!ENTITY ntgl "≹"><!ENTITY NotGreaterLess "≹">
+<!ENTITY pr "≺"><!ENTITY prec "≺"><!ENTITY Precedes "≺">
+<!ENTITY sc "≻"><!ENTITY succ "≻"><!ENTITY Succeeds "≻">
+<!ENTITY prcue "≼"><!ENTITY preccurlyeq "≼"><!ENTITY PrecedesSlantEqual "≼">
+<!ENTITY sccue "≽"><!ENTITY succcurlyeq "≽"><!ENTITY SucceedsSlantEqual "≽">
+<!ENTITY prsim "≾"><!ENTITY PrecedesTilde "≾"><!ENTITY precsim "≾">
+<!ENTITY scsim "≿"><!ENTITY SucceedsTilde "≿"><!ENTITY succsim "≿">
+<!ENTITY NotSucceedsTilde "≿̸">
+<!ENTITY npr "⊀"><!ENTITY NotPrecedes "⊀"><!ENTITY nprec "⊀">
+<!ENTITY nsc "⊁"><!ENTITY NotSucceeds "⊁"><!ENTITY nsucc "⊁">
+<!ENTITY sub "⊂"><!ENTITY subset "⊂">
+<!ENTITY vnsub "⊂⃒"><!ENTITY NotSubset "⊂⃒"><!ENTITY nsubset "⊂⃒">
+<!ENTITY sup "⊃"><!ENTITY Superset "⊃"><!ENTITY supset "⊃">
+<!ENTITY vnsup "⊃⃒"><!ENTITY NotSuperset "⊃⃒"><!ENTITY nsupset "⊃⃒">
+<!ENTITY suphsol "⊃/">
+<!ENTITY nsub "⊄">
+<!ENTITY nsup "⊅">
+<!ENTITY sube "⊆"><!ENTITY subseteq "⊆"><!ENTITY SubsetEqual "⊆">
+<!ENTITY supe "⊇"><!ENTITY SupersetEqual "⊇"><!ENTITY supseteq "⊇">
+<!ENTITY nsube "⊈"><!ENTITY NotSubsetEqual "⊈"><!ENTITY nsubseteq "⊈">
+<!ENTITY nsupe "⊉"><!ENTITY NotSupersetEqual "⊉"><!ENTITY nsupseteq "⊉">
+<!ENTITY subne "⊊"><!ENTITY subsetneq "⊊">
+<!ENTITY vsubne "⊊︀"><!ENTITY varsubsetneq "⊊︀">
+<!ENTITY supne "⊋"><!ENTITY supsetneq "⊋">
+<!ENTITY vsupne "⊋︀"><!ENTITY varsupsetneq "⊋︀">
+<!ENTITY cupdot "⊍">
+<!ENTITY uplus "⊎"><!ENTITY UnionPlus "⊎">
+<!ENTITY sqsub "⊏"><!ENTITY sqsubset "⊏"><!ENTITY SquareSubset "⊏">
+<!ENTITY NotSquareSubset "⊏̸">
+<!ENTITY sqsup "⊐"><!ENTITY sqsupset "⊐"><!ENTITY SquareSuperset "⊐">
+<!ENTITY NotSquareSuperset "⊐̸">
+<!ENTITY sqsube "⊑"><!ENTITY sqsubseteq "⊑"><!ENTITY SquareSubsetEqual "⊑">
+<!ENTITY sqsupe "⊒"><!ENTITY sqsupseteq "⊒"><!ENTITY SquareSupersetEqual "⊒">
+<!ENTITY sqcap "⊓"><!ENTITY SquareIntersection "⊓">
+<!ENTITY sqcaps "⊓︀">
+<!ENTITY sqcup "⊔"><!ENTITY SquareUnion "⊔">
+<!ENTITY sqcups "⊔︀">
+<!ENTITY oplus "⊕"><!ENTITY CirclePlus "⊕">
+<!ENTITY ominus "⊖"><!ENTITY CircleMinus "⊖">
+<!ENTITY otimes "⊗"><!ENTITY CircleTimes "⊗">
+<!ENTITY osol "⊘">
+<!ENTITY odot "⊙"><!ENTITY CircleDot "⊙">
+<!ENTITY ocir "⊚"><!ENTITY circledcirc "⊚">
+<!ENTITY oast "⊛"><!ENTITY circledast "⊛">
+<!ENTITY odash "⊝"><!ENTITY circleddash "⊝">
+<!ENTITY plusb "⊞"><!ENTITY boxplus "⊞">
+<!ENTITY minusb "⊟"><!ENTITY boxminus "⊟">
+<!ENTITY timesb "⊠"><!ENTITY boxtimes "⊠">
+<!ENTITY sdotb "⊡"><!ENTITY dotsquare "⊡">
+<!ENTITY vdash "⊢"><!ENTITY RightTee "⊢">
+<!ENTITY dashv "⊣"><!ENTITY LeftTee "⊣">
+<!ENTITY top "⊤"><!ENTITY DownTee "⊤">
+<!ENTITY perp "⊥"><!ENTITY bottom "⊥"><!ENTITY bot "⊥"><!ENTITY UpTee "⊥">
+<!ENTITY models "⊧">
+<!ENTITY vDash "⊨"><!ENTITY DoubleRightTee "⊨">
+<!ENTITY Vdash "⊩">
+<!ENTITY Vvdash "⊪">
+<!ENTITY VDash "⊫">
+<!ENTITY nvdash "⊬">
+<!ENTITY nvDash "⊭">
+<!ENTITY nVdash "⊮">
+<!ENTITY nVDash "⊯">
+<!ENTITY prurel "⊰">
+<!ENTITY vltri "⊲"><!ENTITY LeftTriangle "⊲"><!ENTITY vartriangleleft "⊲">
+<!ENTITY vrtri "⊳"><!ENTITY RightTriangle "⊳"><!ENTITY vartriangleright "⊳">
+<!ENTITY ltrie "⊴"><!ENTITY LeftTriangleEqual "⊴"><!ENTITY trianglelefteq "⊴">
+<!ENTITY nvltrie "⊴⃒">
+<!ENTITY rtrie "⊵"><!ENTITY RightTriangleEqual "⊵"><!ENTITY trianglerighteq "⊵">
+<!ENTITY nvrtrie "⊵⃒">
+<!ENTITY origof "⊶">
+<!ENTITY imof "⊷">
+<!ENTITY mumap "⊸"><!ENTITY multimap "⊸">
+<!ENTITY hercon "⊹">
+<!ENTITY intcal "⊺"><!ENTITY intercal "⊺">
+<!ENTITY veebar "⊻">
+<!ENTITY barvee "⊽">
+<!ENTITY angrtvb "⊾">
+<!ENTITY lrtri "⊿">
+<!ENTITY xwedge "⋀"><!ENTITY bigwedge "⋀"><!ENTITY Wedge "⋀">
+<!ENTITY xvee "⋁"><!ENTITY bigvee "⋁"><!ENTITY Vee "⋁">
+<!ENTITY xcap "⋂"><!ENTITY bigcap "⋂"><!ENTITY Intersection "⋂">
+<!ENTITY xcup "⋃"><!ENTITY bigcup "⋃"><!ENTITY Union "⋃">
+<!ENTITY diam "⋄"><!ENTITY Diamond "⋄"><!ENTITY diamond "⋄">
+<!ENTITY sdot "⋅">
+<!ENTITY sstarf "⋆"><!ENTITY Star "⋆">
+<!ENTITY divonx "⋇"><!ENTITY divideontimes "⋇">
+<!ENTITY bowtie "⋈">
+<!ENTITY ltimes "⋉">
+<!ENTITY rtimes "⋊">
+<!ENTITY lthree "⋋"><!ENTITY leftthreetimes "⋋">
+<!ENTITY rthree "⋌"><!ENTITY rightthreetimes "⋌">
+<!ENTITY bsime "⋍"><!ENTITY backsimeq "⋍">
+<!ENTITY cuvee "⋎"><!ENTITY curlyvee "⋎">
+<!ENTITY cuwed "⋏"><!ENTITY curlywedge "⋏">
+<!ENTITY Sub "⋐"><!ENTITY Subset "⋐">
+<!ENTITY Sup "⋑"><!ENTITY Supset "⋑">
+<!ENTITY Cap "⋒">
+<!ENTITY Cup "⋓">
+<!ENTITY fork "⋔"><!ENTITY pitchfork "⋔">
+<!ENTITY epar "⋕">
+<!ENTITY ltdot "⋖"><!ENTITY lessdot "⋖">
+<!ENTITY gtdot "⋗"><!ENTITY gtrdot "⋗">
+<!ENTITY Ll "⋘">
+<!ENTITY nLl "⋘̸">
+<!ENTITY Gg "⋙"><!ENTITY ggg "⋙">
+<!ENTITY nGg "⋙̸">
+<!ENTITY leg "⋚"><!ENTITY lesseqgtr "⋚"><!ENTITY LessEqualGreater "⋚">
+<!ENTITY lesg "⋚︀">
+<!ENTITY gel "⋛"><!ENTITY GreaterEqualLess "⋛"><!ENTITY gtreqless "⋛">
+<!ENTITY gesl "⋛︀">
+<!ENTITY cuepr "⋞"><!ENTITY curlyeqprec "⋞">
+<!ENTITY cuesc "⋟"><!ENTITY curlyeqsucc "⋟">
+<!ENTITY nprcue "⋠"><!ENTITY NotPrecedesSlantEqual "⋠">
+<!ENTITY nsccue "⋡"><!ENTITY NotSucceedsSlantEqual "⋡">
+<!ENTITY nsqsube "⋢"><!ENTITY NotSquareSubsetEqual "⋢">
+<!ENTITY nsqsupe "⋣"><!ENTITY NotSquareSupersetEqual "⋣">
+<!ENTITY lnsim "⋦">
+<!ENTITY gnsim "⋧">
+<!ENTITY prnsim "⋨"><!ENTITY precnsim "⋨">
+<!ENTITY scnsim "⋩"><!ENTITY succnsim "⋩">
+<!ENTITY nltri "⋪"><!ENTITY NotLeftTriangle "⋪"><!ENTITY ntriangleleft "⋪">
+<!ENTITY nrtri "⋫"><!ENTITY NotRightTriangle "⋫"><!ENTITY ntriangleright "⋫">
+<!ENTITY nltrie "⋬"><!ENTITY NotLeftTriangleEqual "⋬"><!ENTITY ntrianglelefteq "⋬">
+<!ENTITY nrtrie "⋭"><!ENTITY NotRightTriangleEqual "⋭"><!ENTITY ntrianglerighteq "⋭">
+<!ENTITY vellip "⋮">
+<!ENTITY ctdot "⋯">
+<!ENTITY utdot "⋰">
+<!ENTITY dtdot "⋱">
+<!ENTITY disin "⋲">
+<!ENTITY isinsv "⋳">
+<!ENTITY isins "⋴">
+<!ENTITY isindot "⋵">
+<!ENTITY notindot "⋵̸">
+<!ENTITY notinvc "⋶">
+<!ENTITY notinvb "⋷">
+<!ENTITY isinE "⋹">
+<!ENTITY notinE "⋹̸">
+<!ENTITY nisd "⋺">
+<!ENTITY xnis "⋻">
+<!ENTITY nis "⋼">
+<!ENTITY notnivc "⋽">
+<!ENTITY notnivb "⋾">
+<!ENTITY barwed "⌅"><!ENTITY barwedge "⌅">
+<!ENTITY Barwed "⌆"><!ENTITY doublebarwedge "⌆">
+<!ENTITY lceil "⌈"><!ENTITY LeftCeiling "⌈">
+<!ENTITY rceil "⌉"><!ENTITY RightCeiling "⌉">
+<!ENTITY lfloor "⌊"><!ENTITY LeftFloor "⌊">
+<!ENTITY rfloor "⌋"><!ENTITY RightFloor "⌋">
+<!ENTITY drcrop "⌌">
+<!ENTITY dlcrop "⌍">
+<!ENTITY urcrop "⌎">
+<!ENTITY ulcrop "⌏">
+<!ENTITY bnot "⌐">
+<!ENTITY profline "⌒">
+<!ENTITY profsurf "⌓">
+<!ENTITY telrec "⌕">
+<!ENTITY target "⌖">
+<!ENTITY ulcorn "⌜"><!ENTITY ulcorner "⌜">
+<!ENTITY urcorn "⌝"><!ENTITY urcorner "⌝">
+<!ENTITY dlcorn "⌞"><!ENTITY llcorner "⌞">
+<!ENTITY drcorn "⌟"><!ENTITY lrcorner "⌟">
+<!ENTITY frown "⌢"><!ENTITY sfrown "⌢">
+<!ENTITY smile "⌣"><!ENTITY ssmile "⌣">
+<!ENTITY cylcty "⌭">
+<!ENTITY profalar "⌮">
+<!ENTITY topbot "⌶">
+<!ENTITY ovbar "⌽">
+<!ENTITY solbar "⌿">
+<!ENTITY angzarr "⍼">
+<!ENTITY lmoust "⎰"><!ENTITY lmoustache "⎰">
+<!ENTITY rmoust "⎱"><!ENTITY rmoustache "⎱">
+<!ENTITY tbrk "⎴"><!ENTITY OverBracket "⎴">
+<!ENTITY bbrk "⎵"><!ENTITY UnderBracket "⎵">
+<!ENTITY bbrktbrk "⎶">
+<!ENTITY blank "␣">
+<!ENTITY oS "Ⓢ"><!ENTITY circledS "Ⓢ">
+<!ENTITY boxh "─"><!ENTITY HorizontalLine "─">
+<!ENTITY boxv "│">
+<!ENTITY boxdr "┌">
+<!ENTITY boxdl "┐">
+<!ENTITY boxur "└">
+<!ENTITY boxul "┘">
+<!ENTITY boxvr "├">
+<!ENTITY boxvl "┤">
+<!ENTITY boxhd "┬">
+<!ENTITY boxhu "┴">
+<!ENTITY boxvh "┼">
+<!ENTITY boxH "═">
+<!ENTITY boxV "║">
+<!ENTITY boxdR "╒">
+<!ENTITY boxDr "╓">
+<!ENTITY boxDR "╔">
+<!ENTITY boxdL "╕">
+<!ENTITY boxDl "╖">
+<!ENTITY boxDL "╗">
+<!ENTITY boxuR "╘">
+<!ENTITY boxUr "╙">
+<!ENTITY boxUR "╚">
+<!ENTITY boxuL "╛">
+<!ENTITY boxUl "╜">
+<!ENTITY boxUL "╝">
+<!ENTITY boxvR "╞">
+<!ENTITY boxVr "╟">
+<!ENTITY boxVR "╠">
+<!ENTITY boxvL "╡">
+<!ENTITY boxVl "╢">
+<!ENTITY boxVL "╣">
+<!ENTITY boxHd "╤">
+<!ENTITY boxhD "╥">
+<!ENTITY boxHD "╦">
+<!ENTITY boxHu "╧">
+<!ENTITY boxhU "╨">
+<!ENTITY boxHU "╩">
+<!ENTITY boxvH "╪">
+<!ENTITY boxVh "╫">
+<!ENTITY boxVH "╬">
+<!ENTITY uhblk "▀">
+<!ENTITY lhblk "▄">
+<!ENTITY block "█">
+<!ENTITY blk14 "░">
+<!ENTITY blk12 "▒">
+<!ENTITY blk34 "▓">
+<!ENTITY square "□"><!ENTITY squ "□"><!ENTITY Square "□">
+<!ENTITY squarf "▪"><!ENTITY squf "▪"><!ENTITY FilledVerySmallSquare "▪"><!ENTITY blacksquare "▪">
+<!ENTITY EmptyVerySmallSquare "▫">
+<!ENTITY rect "▭">
+<!ENTITY marker "▮">
+<!ENTITY fltns "▱">
+<!ENTITY xutri "△"><!ENTITY bigtriangleup "△">
+<!ENTITY utrif "▴"><!ENTITY blacktriangle "▴">
+<!ENTITY utri "▵"><!ENTITY triangle "▵">
+<!ENTITY rtrif "▸"><!ENTITY blacktriangleright "▸">
+<!ENTITY rtri "▹"><!ENTITY triangleright "▹">
+<!ENTITY xdtri "▽"><!ENTITY bigtriangledown "▽">
+<!ENTITY dtrif "▾"><!ENTITY blacktriangledown "▾">
+<!ENTITY dtri "▿"><!ENTITY triangledown "▿">
+<!ENTITY ltrif "◂"><!ENTITY blacktriangleleft "◂">
+<!ENTITY ltri "◃"><!ENTITY triangleleft "◃">
+<!ENTITY loz "◊"><!ENTITY lozenge "◊">
+<!ENTITY cir "○">
+<!ENTITY tridot "◬">
+<!ENTITY xcirc "◯"><!ENTITY bigcirc "◯">
+<!ENTITY ultri "◸">
+<!ENTITY urtri "◹">
+<!ENTITY lltri "◺">
+<!ENTITY EmptySmallSquare "◻">
+<!ENTITY FilledSmallSquare "◼">
+<!ENTITY starf "★"><!ENTITY bigstar "★">
+<!ENTITY star "☆">
+<!ENTITY phone "☎">
+<!ENTITY female "♀">
+<!ENTITY male "♂">
+<!ENTITY spades "♠"><!ENTITY spadesuit "♠">
+<!ENTITY clubs "♣"><!ENTITY clubsuit "♣">
+<!ENTITY hearts "♥"><!ENTITY heartsuit "♥">
+<!ENTITY diams "♦"><!ENTITY diamondsuit "♦">
+<!ENTITY sung "♪">
+<!ENTITY flat "♭">
+<!ENTITY natur "♮"><!ENTITY natural "♮">
+<!ENTITY sharp "♯">
+<!ENTITY check "✓"><!ENTITY checkmark "✓">
+<!ENTITY cross "✗">
+<!ENTITY malt "✠"><!ENTITY maltese "✠">
+<!ENTITY sext "✶">
+<!ENTITY VerticalSeparator "❘">
+<!ENTITY xlarr "⟵"><!ENTITY LongLeftArrow "⟵"><!ENTITY longleftarrow "⟵">
+<!ENTITY xrarr "⟶"><!ENTITY LongRightArrow "⟶"><!ENTITY longrightarrow "⟶">
+<!ENTITY xharr "⟷"><!ENTITY LongLeftRightArrow "⟷"><!ENTITY longleftrightarrow "⟷">
+<!ENTITY xlArr "⟸"><!ENTITY DoubleLongLeftArrow "⟸"><!ENTITY Longleftarrow "⟸">
+<!ENTITY xrArr "⟹"><!ENTITY DoubleLongRightArrow "⟹"><!ENTITY Longrightarrow "⟹">
+<!ENTITY xhArr "⟺"><!ENTITY DoubleLongLeftRightArrow "⟺"><!ENTITY Longleftrightarrow "⟺">
+<!ENTITY xmap "⟼"><!ENTITY longmapsto "⟼">
+<!ENTITY dzigrarr "⟿">
+<!ENTITY nvlArr "⤂">
+<!ENTITY nvrArr "⤃">
+<!ENTITY nvHarr "⤄">
+<!ENTITY Map "⤅">
+<!ENTITY lbarr "⤌">
+<!ENTITY rbarr "⤍"><!ENTITY bkarow "⤍">
+<!ENTITY lBarr "⤎">
+<!ENTITY rBarr "⤏"><!ENTITY dbkarow "⤏">
+<!ENTITY RBarr "⤐"><!ENTITY drbkarow "⤐">
+<!ENTITY DDotrahd "⤑">
+<!ENTITY UpArrowBar "⤒">
+<!ENTITY DownArrowBar "⤓">
+<!ENTITY Rarrtl "⤖">
+<!ENTITY latail "⤙">
+<!ENTITY ratail "⤚">
+<!ENTITY lAtail "⤛">
+<!ENTITY rAtail "⤜">
+<!ENTITY larrfs "⤝">
+<!ENTITY rarrfs "⤞">
+<!ENTITY larrbfs "⤟">
+<!ENTITY rarrbfs "⤠">
+<!ENTITY nwarhk "⤣">
+<!ENTITY nearhk "⤤">
+<!ENTITY searhk "⤥"><!ENTITY hksearow "⤥">
+<!ENTITY swarhk "⤦"><!ENTITY hkswarow "⤦">
+<!ENTITY nwnear "⤧">
+<!ENTITY nesear "⤨"><!ENTITY toea "⤨">
+<!ENTITY seswar "⤩"><!ENTITY tosa "⤩">
+<!ENTITY swnwar "⤪">
+<!ENTITY rarrc "⤳">
+<!ENTITY nrarrc "⤳̸">
+<!ENTITY cudarrr "⤵">
+<!ENTITY ldca "⤶">
+<!ENTITY rdca "⤷">
+<!ENTITY cudarrl "⤸">
+<!ENTITY larrpl "⤹">
+<!ENTITY curarrm "⤼">
+<!ENTITY cularrp "⤽">
+<!ENTITY rarrpl "⥅">
+<!ENTITY harrcir "⥈">
+<!ENTITY Uarrocir "⥉">
+<!ENTITY lurdshar "⥊">
+<!ENTITY ldrushar "⥋">
+<!ENTITY LeftRightVector "⥎">
+<!ENTITY RightUpDownVector "⥏">
+<!ENTITY DownLeftRightVector "⥐">
+<!ENTITY LeftUpDownVector "⥑">
+<!ENTITY LeftVectorBar "⥒">
+<!ENTITY RightVectorBar "⥓">
+<!ENTITY RightUpVectorBar "⥔">
+<!ENTITY RightDownVectorBar "⥕">
+<!ENTITY DownLeftVectorBar "⥖">
+<!ENTITY DownRightVectorBar "⥗">
+<!ENTITY LeftUpVectorBar "⥘">
+<!ENTITY LeftDownVectorBar "⥙">
+<!ENTITY LeftTeeVector "⥚">
+<!ENTITY RightTeeVector "⥛">
+<!ENTITY RightUpTeeVector "⥜">
+<!ENTITY RightDownTeeVector "⥝">
+<!ENTITY DownLeftTeeVector "⥞">
+<!ENTITY DownRightTeeVector "⥟">
+<!ENTITY LeftUpTeeVector "⥠">
+<!ENTITY LeftDownTeeVector "⥡">
+<!ENTITY lHar "⥢">
+<!ENTITY uHar "⥣">
+<!ENTITY rHar "⥤">
+<!ENTITY dHar "⥥">
+<!ENTITY luruhar "⥦">
+<!ENTITY ldrdhar "⥧">
+<!ENTITY ruluhar "⥨">
+<!ENTITY rdldhar "⥩">
+<!ENTITY lharul "⥪">
+<!ENTITY llhard "⥫">
+<!ENTITY rharul "⥬">
+<!ENTITY lrhard "⥭">
+<!ENTITY udhar "⥮"><!ENTITY UpEquilibrium "⥮">
+<!ENTITY duhar "⥯"><!ENTITY ReverseUpEquilibrium "⥯">
+<!ENTITY RoundImplies "⥰">
+<!ENTITY erarr "⥱">
+<!ENTITY simrarr "⥲">
+<!ENTITY larrsim "⥳">
+<!ENTITY rarrsim "⥴">
+<!ENTITY rarrap "⥵">
+<!ENTITY ltlarr "⥶">
+<!ENTITY gtrarr "⥸">
+<!ENTITY subrarr "⥹">
+<!ENTITY suplarr "⥻">
+<!ENTITY lfisht "⥼">
+<!ENTITY rfisht "⥽">
+<!ENTITY ufisht "⥾">
+<!ENTITY dfisht "⥿">
+<!ENTITY lopar "⦅">
+<!ENTITY ropar "⦆">
+<!ENTITY lbrke "⦋">
+<!ENTITY rbrke "⦌">
+<!ENTITY lbrkslu "⦍">
+<!ENTITY rbrksld "⦎">
+<!ENTITY lbrksld "⦏">
+<!ENTITY rbrkslu "⦐">
+<!ENTITY langd "⦑">
+<!ENTITY rangd "⦒">
+<!ENTITY lparlt "⦓">
+<!ENTITY rpargt "⦔">
+<!ENTITY gtlPar "⦕">
+<!ENTITY ltrPar "⦖">
+<!ENTITY vzigzag "⦚">
+<!ENTITY vangrt "⦜">
+<!ENTITY angrtvbd "⦝">
+<!ENTITY ange "⦤">
+<!ENTITY range "⦥">
+<!ENTITY dwangle "⦦">
+<!ENTITY uwangle "⦧">
+<!ENTITY angmsdaa "⦨">
+<!ENTITY angmsdab "⦩">
+<!ENTITY angmsdac "⦪">
+<!ENTITY angmsdad "⦫">
+<!ENTITY angmsdae "⦬">
+<!ENTITY angmsdaf "⦭">
+<!ENTITY angmsdag "⦮">
+<!ENTITY angmsdah "⦯">
+<!ENTITY bemptyv "⦰">
+<!ENTITY demptyv "⦱">
+<!ENTITY cemptyv "⦲">
+<!ENTITY raemptyv "⦳">
+<!ENTITY laemptyv "⦴">
+<!ENTITY ohbar "⦵">
+<!ENTITY omid "⦶">
+<!ENTITY opar "⦷">
+<!ENTITY operp "⦹">
+<!ENTITY olcross "⦻">
+<!ENTITY odsold "⦼">
+<!ENTITY olcir "⦾">
+<!ENTITY ofcir "⦿">
+<!ENTITY olt "⧀">
+<!ENTITY ogt "⧁">
+<!ENTITY cirscir "⧂">
+<!ENTITY cirE "⧃">
+<!ENTITY solb "⧄">
+<!ENTITY bsolb "⧅">
+<!ENTITY boxbox "⧉">
+<!ENTITY trisb "⧍">
+<!ENTITY rtriltri "⧎">
+<!ENTITY LeftTriangleBar "⧏">
+<!ENTITY NotLeftTriangleBar "⧏̸">
+<!ENTITY RightTriangleBar "⧐">
+<!ENTITY NotRightTriangleBar "⧐̸">
+<!ENTITY race "⧚">
+<!ENTITY iinfin "⧜">
+<!ENTITY infintie "⧝">
+<!ENTITY nvinfin "⧞">
+<!ENTITY eparsl "⧣">
+<!ENTITY smeparsl "⧤">
+<!ENTITY eqvparsl "⧥">
+<!ENTITY lozf "⧫"><!ENTITY blacklozenge "⧫">
+<!ENTITY RuleDelayed "⧴">
+<!ENTITY dsol "⧶">
+<!ENTITY xodot "⨀"><!ENTITY bigodot "⨀">
+<!ENTITY xoplus "⨁"><!ENTITY bigoplus "⨁">
+<!ENTITY xotime "⨂"><!ENTITY bigotimes "⨂">
+<!ENTITY xuplus "⨄"><!ENTITY biguplus "⨄">
+<!ENTITY xsqcup "⨆"><!ENTITY bigsqcup "⨆">
+<!ENTITY qint "⨌"><!ENTITY iiiint "⨌">
+<!ENTITY fpartint "⨍">
+<!ENTITY cirfnint "⨐">
+<!ENTITY awint "⨑">
+<!ENTITY rppolint "⨒">
+<!ENTITY scpolint "⨓">
+<!ENTITY npolint "⨔">
+<!ENTITY pointint "⨕">
+<!ENTITY quatint "⨖">
+<!ENTITY intlarhk "⨗">
+<!ENTITY pluscir "⨢">
+<!ENTITY plusacir "⨣">
+<!ENTITY simplus "⨤">
+<!ENTITY plusdu "⨥">
+<!ENTITY plussim "⨦">
+<!ENTITY plustwo "⨧">
+<!ENTITY mcomma "⨩">
+<!ENTITY minusdu "⨪">
+<!ENTITY loplus "⨭">
+<!ENTITY roplus "⨮">
+<!ENTITY Cross "⨯">
+<!ENTITY timesd "⨰">
+<!ENTITY timesbar "⨱">
+<!ENTITY smashp "⨳">
+<!ENTITY lotimes "⨴">
+<!ENTITY rotimes "⨵">
+<!ENTITY otimesas "⨶">
+<!ENTITY Otimes "⨷">
+<!ENTITY odiv "⨸">
+<!ENTITY triplus "⨹">
+<!ENTITY triminus "⨺">
+<!ENTITY tritime "⨻">
+<!ENTITY iprod "⨼"><!ENTITY intprod "⨼">
+<!ENTITY amalg "⨿">
+<!ENTITY capdot "⩀">
+<!ENTITY ncup "⩂">
+<!ENTITY ncap "⩃">
+<!ENTITY capand "⩄">
+<!ENTITY cupor "⩅">
+<!ENTITY cupcap "⩆">
+<!ENTITY capcup "⩇">
+<!ENTITY cupbrcap "⩈">
+<!ENTITY capbrcup "⩉">
+<!ENTITY cupcup "⩊">
+<!ENTITY capcap "⩋">
+<!ENTITY ccups "⩌">
+<!ENTITY ccaps "⩍">
+<!ENTITY ccupssm "⩐">
+<!ENTITY And "⩓">
+<!ENTITY Or "⩔">
+<!ENTITY andand "⩕">
+<!ENTITY oror "⩖">
+<!ENTITY orslope "⩗">
+<!ENTITY andslope "⩘">
+<!ENTITY andv "⩚">
+<!ENTITY orv "⩛">
+<!ENTITY andd "⩜">
+<!ENTITY ord "⩝">
+<!ENTITY wedbar "⩟">
+<!ENTITY sdote "⩦">
+<!ENTITY simdot "⩪">
+<!ENTITY congdot "⩭">
+<!ENTITY ncongdot "⩭̸">
+<!ENTITY easter "⩮">
+<!ENTITY apacir "⩯">
+<!ENTITY apE "⩰">
+<!ENTITY napE "⩰̸">
+<!ENTITY eplus "⩱">
+<!ENTITY pluse "⩲">
+<!ENTITY Esim "⩳">
+<!ENTITY Colone "⩴">
+<!ENTITY Equal "⩵">
+<!ENTITY eDDot "⩷"><!ENTITY ddotseq "⩷">
+<!ENTITY equivDD "⩸">
+<!ENTITY ltcir "⩹">
+<!ENTITY gtcir "⩺">
+<!ENTITY ltquest "⩻">
+<!ENTITY gtquest "⩼">
+<!ENTITY les "⩽"><!ENTITY leqslant "⩽"><!ENTITY LessSlantEqual "⩽">
+<!ENTITY nles "⩽̸"><!ENTITY nleqslant "⩽̸"><!ENTITY NotLessSlantEqual "⩽̸">
+<!ENTITY ges "⩾"><!ENTITY geqslant "⩾"><!ENTITY GreaterSlantEqual "⩾">
+<!ENTITY nges "⩾̸"><!ENTITY ngeqslant "⩾̸"><!ENTITY NotGreaterSlantEqual "⩾̸">
+<!ENTITY lesdot "⩿">
+<!ENTITY gesdot "⪀">
+<!ENTITY lesdoto "⪁">
+<!ENTITY gesdoto "⪂">
+<!ENTITY lesdotor "⪃">
+<!ENTITY gesdotol "⪄">
+<!ENTITY lap "⪅"><!ENTITY lessapprox "⪅">
+<!ENTITY gap "⪆"><!ENTITY gtrapprox "⪆">
+<!ENTITY lne "⪇"><!ENTITY lneq "⪇">
+<!ENTITY gne "⪈"><!ENTITY gneq "⪈">
+<!ENTITY lnap "⪉"><!ENTITY lnapprox "⪉">
+<!ENTITY gnap "⪊"><!ENTITY gnapprox "⪊">
+<!ENTITY lEg "⪋"><!ENTITY lesseqqgtr "⪋">
+<!ENTITY gEl "⪌"><!ENTITY gtreqqless "⪌">
+<!ENTITY lsime "⪍">
+<!ENTITY gsime "⪎">
+<!ENTITY lsimg "⪏">
+<!ENTITY gsiml "⪐">
+<!ENTITY lgE "⪑">
+<!ENTITY glE "⪒">
+<!ENTITY lesges "⪓">
+<!ENTITY gesles "⪔">
+<!ENTITY els "⪕"><!ENTITY eqslantless "⪕">
+<!ENTITY egs "⪖"><!ENTITY eqslantgtr "⪖">
+<!ENTITY elsdot "⪗">
+<!ENTITY egsdot "⪘">
+<!ENTITY el "⪙">
+<!ENTITY eg "⪚">
+<!ENTITY siml "⪝">
+<!ENTITY simg "⪞">
+<!ENTITY simlE "⪟">
+<!ENTITY simgE "⪠">
+<!ENTITY LessLess "⪡">
+<!ENTITY NotNestedLessLess "⪡̸">
+<!ENTITY GreaterGreater "⪢">
+<!ENTITY NotNestedGreaterGreater "⪢̸">
+<!ENTITY glj "⪤">
+<!ENTITY gla "⪥">
+<!ENTITY ltcc "⪦">
+<!ENTITY gtcc "⪧">
+<!ENTITY lescc "⪨">
+<!ENTITY gescc "⪩">
+<!ENTITY smt "⪪">
+<!ENTITY lat "⪫">
+<!ENTITY smte "⪬">
+<!ENTITY smtes "⪬︀">
+<!ENTITY late "⪭">
+<!ENTITY lates "⪭︀">
+<!ENTITY bumpE "⪮">
+<!ENTITY pre "⪯"><!ENTITY PrecedesEqual "⪯"><!ENTITY preceq "⪯">
+<!ENTITY npre "⪯̸"><!ENTITY NotPrecedesEqual "⪯̸"><!ENTITY npreceq "⪯̸">
+<!ENTITY sce "⪰"><!ENTITY SucceedsEqual "⪰"><!ENTITY succeq "⪰">
+<!ENTITY nsce "⪰̸"><!ENTITY NotSucceedsEqual "⪰̸"><!ENTITY nsucceq "⪰̸">
+<!ENTITY prE "⪳">
+<!ENTITY scE "⪴">
+<!ENTITY prnE "⪵"><!ENTITY precneqq "⪵">
+<!ENTITY scnE "⪶"><!ENTITY succneqq "⪶">
+<!ENTITY prap "⪷"><!ENTITY precapprox "⪷">
+<!ENTITY scap "⪸"><!ENTITY succapprox "⪸">
+<!ENTITY prnap "⪹"><!ENTITY precnapprox "⪹">
+<!ENTITY scnap "⪺"><!ENTITY succnapprox "⪺">
+<!ENTITY Pr "⪻">
+<!ENTITY Sc "⪼">
+<!ENTITY subdot "⪽">
+<!ENTITY supdot "⪾">
+<!ENTITY subplus "⪿">
+<!ENTITY supplus "⫀">
+<!ENTITY submult "⫁">
+<!ENTITY supmult "⫂">
+<!ENTITY subedot "⫃">
+<!ENTITY supedot "⫄">
+<!ENTITY subE "⫅"><!ENTITY subseteqq "⫅">
+<!ENTITY nsubE "⫅̸"><!ENTITY nsubseteqq "⫅̸">
+<!ENTITY supE "⫆"><!ENTITY supseteqq "⫆">
+<!ENTITY nsupE "⫆̸"><!ENTITY nsupseteqq "⫆̸">
+<!ENTITY subsim "⫇">
+<!ENTITY supsim "⫈">
+<!ENTITY subnE "⫋"><!ENTITY subsetneqq "⫋">
+<!ENTITY vsubnE "⫋︀"><!ENTITY varsubsetneqq "⫋︀">
+<!ENTITY supnE "⫌"><!ENTITY supsetneqq "⫌">
+<!ENTITY vsupnE "⫌︀"><!ENTITY varsupsetneqq "⫌︀">
+<!ENTITY csub "⫏">
+<!ENTITY csup "⫐">
+<!ENTITY csube "⫑">
+<!ENTITY csupe "⫒">
+<!ENTITY subsup "⫓">
+<!ENTITY supsub "⫔">
+<!ENTITY subsub "⫕">
+<!ENTITY supsup "⫖">
+<!ENTITY suphsub "⫗">
+<!ENTITY supdsub "⫘">
+<!ENTITY forkv "⫙">
+<!ENTITY topfork "⫚">
+<!ENTITY mlcp "⫛">
+<!ENTITY Dashv "⫤"><!ENTITY DoubleLeftTee "⫤">
+<!ENTITY Vdashl "⫦">
+<!ENTITY Barv "⫧">
+<!ENTITY vBar "⫨">
+<!ENTITY vBarv "⫩">
+<!ENTITY Vbar "⫫">
+<!ENTITY Not "⫬">
+<!ENTITY bNot "⫭">
+<!ENTITY rnmid "⫮">
+<!ENTITY cirmid "⫯">
+<!ENTITY midcir "⫰">
+<!ENTITY topcir "⫱">
+<!ENTITY nhpar "⫲">
+<!ENTITY parsim "⫳">
+<!ENTITY parsl "⫽">
+<!ENTITY nparsl "⫽⃥">
+<!ENTITY fflig "ff">
+<!ENTITY filig "fi">
+<!ENTITY fllig "fl">
+<!ENTITY ffilig "ffi">
+<!ENTITY ffllig "ffl">
+<!ENTITY Ascr "𝒜">
+<!ENTITY Cscr "𝒞">
+<!ENTITY Dscr "𝒟">
+<!ENTITY Gscr "𝒢">
+<!ENTITY Jscr "𝒥">
+<!ENTITY Kscr "𝒦">
+<!ENTITY Nscr "𝒩">
+<!ENTITY Oscr "𝒪">
+<!ENTITY Pscr "𝒫">
+<!ENTITY Qscr "𝒬">
+<!ENTITY Sscr "𝒮">
+<!ENTITY Tscr "𝒯">
+<!ENTITY Uscr "𝒰">
+<!ENTITY Vscr "𝒱">
+<!ENTITY Wscr "𝒲">
+<!ENTITY Xscr "𝒳">
+<!ENTITY Yscr "𝒴">
+<!ENTITY Zscr "𝒵">
+<!ENTITY ascr "𝒶">
+<!ENTITY bscr "𝒷">
+<!ENTITY cscr "𝒸">
+<!ENTITY dscr "𝒹">
+<!ENTITY fscr "𝒻">
+<!ENTITY hscr "𝒽">
+<!ENTITY iscr "𝒾">
+<!ENTITY jscr "𝒿">
+<!ENTITY kscr "𝓀">
+<!ENTITY lscr "𝓁">
+<!ENTITY mscr "𝓂">
+<!ENTITY nscr "𝓃">
+<!ENTITY pscr "𝓅">
+<!ENTITY qscr "𝓆">
+<!ENTITY rscr "𝓇">
+<!ENTITY sscr "𝓈">
+<!ENTITY tscr "𝓉">
+<!ENTITY uscr "𝓊">
+<!ENTITY vscr "𝓋">
+<!ENTITY wscr "𝓌">
+<!ENTITY xscr "𝓍">
+<!ENTITY yscr "𝓎">
+<!ENTITY zscr "𝓏">
+<!ENTITY Afr "𝔄">
+<!ENTITY Bfr "𝔅">
+<!ENTITY Dfr "𝔇">
+<!ENTITY Efr "𝔈">
+<!ENTITY Ffr "𝔉">
+<!ENTITY Gfr "𝔊">
+<!ENTITY Jfr "𝔍">
+<!ENTITY Kfr "𝔎">
+<!ENTITY Lfr "𝔏">
+<!ENTITY Mfr "𝔐">
+<!ENTITY Nfr "𝔑">
+<!ENTITY Ofr "𝔒">
+<!ENTITY Pfr "𝔓">
+<!ENTITY Qfr "𝔔">
+<!ENTITY Sfr "𝔖">
+<!ENTITY Tfr "𝔗">
+<!ENTITY Ufr "𝔘">
+<!ENTITY Vfr "𝔙">
+<!ENTITY Wfr "𝔚">
+<!ENTITY Xfr "𝔛">
+<!ENTITY Yfr "𝔜">
+<!ENTITY afr "𝔞">
+<!ENTITY bfr "𝔟">
+<!ENTITY cfr "𝔠">
+<!ENTITY dfr "𝔡">
+<!ENTITY efr "𝔢">
+<!ENTITY ffr "𝔣">
+<!ENTITY gfr "𝔤">
+<!ENTITY hfr "𝔥">
+<!ENTITY ifr "𝔦">
+<!ENTITY jfr "𝔧">
+<!ENTITY kfr "𝔨">
+<!ENTITY lfr "𝔩">
+<!ENTITY mfr "𝔪">
+<!ENTITY nfr "𝔫">
+<!ENTITY ofr "𝔬">
+<!ENTITY pfr "𝔭">
+<!ENTITY qfr "𝔮">
+<!ENTITY rfr "𝔯">
+<!ENTITY sfr "𝔰">
+<!ENTITY tfr "𝔱">
+<!ENTITY ufr "𝔲">
+<!ENTITY vfr "𝔳">
+<!ENTITY wfr "𝔴">
+<!ENTITY xfr "𝔵">
+<!ENTITY yfr "𝔶">
+<!ENTITY zfr "𝔷">
+<!ENTITY Aopf "𝔸">
+<!ENTITY Bopf "𝔹">
+<!ENTITY Dopf "𝔻">
+<!ENTITY Eopf "𝔼">
+<!ENTITY Fopf "𝔽">
+<!ENTITY Gopf "𝔾">
+<!ENTITY Iopf "𝕀">
+<!ENTITY Jopf "𝕁">
+<!ENTITY Kopf "𝕂">
+<!ENTITY Lopf "𝕃">
+<!ENTITY Mopf "𝕄">
+<!ENTITY Oopf "𝕆">
+<!ENTITY Sopf "𝕊">
+<!ENTITY Topf "𝕋">
+<!ENTITY Uopf "𝕌">
+<!ENTITY Vopf "𝕍">
+<!ENTITY Wopf "𝕎">
+<!ENTITY Xopf "𝕏">
+<!ENTITY Yopf "𝕐">
+<!ENTITY aopf "𝕒">
+<!ENTITY bopf "𝕓">
+<!ENTITY copf "𝕔">
+<!ENTITY dopf "𝕕">
+<!ENTITY eopf "𝕖">
+<!ENTITY fopf "𝕗">
+<!ENTITY gopf "𝕘">
+<!ENTITY hopf "𝕙">
+<!ENTITY iopf "𝕚">
+<!ENTITY jopf "𝕛">
+<!ENTITY kopf "𝕜">
+<!ENTITY lopf "𝕝">
+<!ENTITY mopf "𝕞">
+<!ENTITY nopf "𝕟">
+<!ENTITY oopf "𝕠">
+<!ENTITY popf "𝕡">
+<!ENTITY qopf "𝕢">
+<!ENTITY ropf "𝕣">
+<!ENTITY sopf "𝕤">
+<!ENTITY topf "𝕥">
+<!ENTITY uopf "𝕦">
+<!ENTITY vopf "𝕧">
+<!ENTITY wopf "𝕨">
+<!ENTITY xopf "𝕩">
+<!ENTITY yopf "𝕪">
+<!ENTITY zopf "𝕫">
--- a/layout/Makefile.in
+++ b/layout/Makefile.in
@@ -55,18 +55,17 @@ PARALLEL_DIRS = \
$(NULL)
ifdef NS_PRINTING
PARALLEL_DIRS += printing
endif
ifdef MOZ_MATHML
PARALLEL_DIRS += \
- mathml/content/src \
- mathml/base/src \
+ mathml \
$(NULL)
endif
ifdef MOZ_SVG
PARALLEL_DIRS += svg/base/src
endif
ifndef MOZ_NO_INSPECTOR_APIS
--- a/layout/base/Makefile.in
+++ b/layout/base/Makefile.in
@@ -179,18 +179,17 @@ LOCAL_INCLUDES += \
-I$(srcdir)/../../content/xbl/src \
-I$(srcdir)/../../view/src \
-I$(srcdir)/../../dom/base \
-I$(srcdir)/../../content/svg/content/src \
$(NULL)
ifdef MOZ_MATHML
LOCAL_INCLUDES += \
- -I$(srcdir)/../mathml/content/src \
- -I$(srcdir)/../mathml/base/src
+ -I$(srcdir)/../mathml
endif
ifdef MOZ_SVG
LOCAL_INCLUDES += \
-I$(srcdir)/../svg/base/src
endif
ifdef MOZ_MEDIA
--- a/layout/build/Makefile.in
+++ b/layout/build/Makefile.in
@@ -189,18 +189,17 @@ REQUIRES += \
$(NULL)
SHARED_LIBRARY_LIBS += ../inspector/src/$(LIB_PREFIX)inspector_s.$(LIB_SUFFIX)
else
DEFINES += -DMOZ_NO_INSPECTOR_APIS
endif
ifdef MOZ_MATHML
SHARED_LIBRARY_LIBS += \
- ../mathml/content/src/$(LIB_PREFIX)gkmathmlcon_s.$(LIB_SUFFIX) \
- ../mathml/base/src/$(LIB_PREFIX)gkmathmlbase_s.$(LIB_SUFFIX) \
+ ../mathml/$(LIB_PREFIX)gkmathml_s.$(LIB_SUFFIX) \
$(DEPTH)/content/mathml/content/src/$(LIB_PREFIX)gkcontentmathml_s.$(LIB_SUFFIX) \
$(NULL)
endif
ifdef MOZ_XTF
SHARED_LIBRARY_LIBS += \
$(DEPTH)/content/xtf/src/$(LIB_PREFIX)gkcontentxtf_s.$(LIB_SUFFIX) \
$(NULL)
@@ -309,17 +308,17 @@ LOCAL_INCLUDES += -I$(srcdir)/../base \
-I$(topsrcdir)/editor/libeditor/base \
-I$(topsrcdir)/editor/libeditor/text \
-I$(topsrcdir)/editor/libeditor/html \
-I$(topsrcdir)/editor/txtsvc/src \
-I$(topsrcdir)/editor/composer/src \
$(NULL)
ifdef MOZ_MATHML
-LOCAL_INCLUDES += -I$(srcdir)/../mathml/content/src
+LOCAL_INCLUDES += -I$(srcdir)/../mathml
endif
ifdef MOZ_SVG
LOCAL_INCLUDES += -I$(topsrcdir)/content/svg/content/src
endif
DEFINES += -D_IMPL_NS_LAYOUT
new file mode 100644
--- /dev/null
+++ b/layout/mathml/Makefile.in
@@ -0,0 +1,146 @@
+#!gmake
+#
+# ***** BEGIN LICENSE BLOCK *****
+# Version: MPL 1.1/GPL 2.0/LGPL 2.1
+#
+# The contents of this file are subject to the Mozilla Public License Version
+# 1.1 (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+# http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS IS" basis,
+# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+# for the specific language governing rights and limitations under the
+# License.
+#
+# The Original Code is Mozilla MathML Project.
+#
+# The Initial Developer of the Original Code is
+# Heriot-Watt University, Edinburgh.
+# Portions created by the Initial Developer are Copyright (C) 1999
+# the Initial Developer. All Rights Reserved.
+#
+# Contributor(s):
+# David J. Fiddes <D.J.Fiddes@hw.ac.uk>
+#
+# Alternatively, the contents of this file may be used under the terms of
+# either of the GNU General Public License Version 2 or later (the "GPL"),
+# or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+# in which case the provisions of the GPL or the LGPL are applicable instead
+# of those above. If you wish to allow use of your version of this file only
+# under the terms of either the GPL or the LGPL, and not to allow others to
+# use your version of this file under the terms of the MPL, indicate your
+# decision by deleting the provisions above and replace them with the notice
+# and other provisions required by the GPL or the LGPL. If you do not delete
+# the provisions above, a recipient may use your version of this file under
+# the terms of any one of the MPL, the GPL or the LGPL.
+#
+# ***** END LICENSE BLOCK *****
+
+DEPTH=../..
+topsrcdir = @top_srcdir@
+srcdir = @srcdir@
+VPATH = @srcdir@
+
+include $(DEPTH)/config/autoconf.mk
+
+MODULE = layout
+LIBRARY_NAME = gkmathml_s
+LIBXUL_LIBRARY = 1
+
+REQUIRES = xpcom \
+ string \
+ dom \
+ content \
+ gfx \
+ thebes \
+ widget \
+ view \
+ webshell \
+ locale \
+ unicharutil \
+ necko \
+ docshell \
+ webbrwsr \
+ pref \
+ js \
+ $(NULL)
+
+LOCAL_INCLUDES = \
+ -I$(srcdir)/../style \
+ -I$(srcdir)/../base \
+ -I$(srcdir)/../generic \
+ -I$(srcdir)/../tables \
+ -I$(srcdir)/content/src \
+ -I$(topsrcdir)/content/base/src \
+ -I$(topsrcdir)/content/mathml/content/src \
+ -I$(srcdir)/../xul/base/src \
+ $(NULL)
+
+CPPSRCS = nsMathMLChar.cpp \
+ nsMathMLFrame.cpp \
+ nsMathMLContainerFrame.cpp \
+ nsMathMLForeignFrameWrapper.cpp \
+ nsMathMLOperators.cpp \
+ nsMathMLTokenFrame.cpp \
+ nsMathMLmoFrame.cpp \
+ nsMathMLmrowFrame.cpp \
+ nsMathMLmphantomFrame.cpp \
+ nsMathMLmfencedFrame.cpp \
+ nsMathMLmfracFrame.cpp \
+ nsMathMLmsupFrame.cpp \
+ nsMathMLmsubFrame.cpp \
+ nsMathMLmsubsupFrame.cpp \
+ nsMathMLmmultiscriptsFrame.cpp \
+ nsMathMLmtableFrame.cpp \
+ nsMathMLmunderFrame.cpp \
+ nsMathMLmoverFrame.cpp \
+ nsMathMLmunderoverFrame.cpp \
+ nsMathMLmpaddedFrame.cpp \
+ nsMathMLmspaceFrame.cpp \
+ nsMathMLmstyleFrame.cpp \
+ nsMathMLmsqrtFrame.cpp \
+ nsMathMLmrootFrame.cpp \
+ nsMathMLmactionFrame.cpp \
+ $(NULL)
+
+include $(topsrcdir)/config/config.mk
+
+# we don't want the shared lib, but we want to force the creation of a static lib.
+# do we still want this? - DJF
+FORCE_STATIC_LIB = 1
+
+include $(topsrcdir)/config/rules.mk
+
+libs::
+ $(INSTALL) $(srcdir)/mathml.css $(DIST)/bin/res
+
+font_properties = \
+ mathfontUnicode.properties \
+ mathfontSTIXNonUnicode.properties \
+ mathfontSTIXSize1.properties \
+ mathfontStandardSymbolsL.properties \
+ $(NULL)
+
+ifeq ($(TARGET_MD_ARCH),win32)
+font_properties += \
+ mathfontSymbol.properties
+endif
+
+libs:: $(font_properties)
+ $(INSTALL) $^ $(DIST)/bin/res/fonts
+
+install:: $(font_properties)
+ $(SYSINSTALL) $(IFLAGS1) $^ $(DESTDIR)$(mozappdir)/res/fonts
+
+math_properties = mathfont.properties
+
+$(DIST)/bin/res/fonts/$(math_properties) $(DESTDIR)$(mozappdir)/res/fonts/$(math_properties): $(math_properties) Makefile
+ test -d $(@D) || $(NSINSTALL) -D $(@D)
+ rm -f $@
+ $(PYTHON) $(MOZILLA_DIR)/config/Preprocessor.py --marker=% $(DEFINES) $(ACDEFINES) $< > $@
+
+libs:: $(DIST)/bin/res/fonts/$(math_properties)
+install:: $(DESTDIR)$(mozappdir)/res/fonts/$(math_properties)
+
+DEFINES += -D_IMPL_NS_LAYOUT
deleted file mode 100644
--- a/layout/mathml/base/src/Makefile.in
+++ /dev/null
@@ -1,142 +0,0 @@
-#!gmake
-#
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-# http://www.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is Mozilla MathML Project.
-#
-# The Initial Developer of the Original Code is
-# Heriot-Watt University, Edinburgh.
-# Portions created by the Initial Developer are Copyright (C) 1999
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# David J. Fiddes <D.J.Fiddes@hw.ac.uk>
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either of the GNU General Public License Version 2 or later (the "GPL"),
-# or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
-
-DEPTH=../../../..
-topsrcdir = @top_srcdir@
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-include $(DEPTH)/config/autoconf.mk
-
-MODULE = layout
-LIBRARY_NAME = gkmathmlbase_s
-LIBXUL_LIBRARY = 1
-
-REQUIRES = xpcom \
- string \
- dom \
- content \
- gfx \
- thebes \
- widget \
- view \
- webshell \
- locale \
- unicharutil \
- necko \
- docshell \
- webbrwsr \
- pref \
- js \
- $(NULL)
-
-LOCAL_INCLUDES = \
- -I$(srcdir)/../../../style \
- -I$(srcdir)/../../../base \
- -I$(srcdir)/../../../generic \
- -I$(srcdir)/../../../tables \
- -I$(srcdir)/../../content/src \
- -I$(topsrcdir)/content/base/src \
- -I$(topsrcdir)/content/mathml/content/src \
- -I$(srcdir)/../../../xul/base/src \
- $(NULL)
-
-CPPSRCS = nsMathMLChar.cpp \
- nsMathMLFrame.cpp \
- nsMathMLContainerFrame.cpp \
- nsMathMLForeignFrameWrapper.cpp \
- nsMathMLTokenFrame.cpp \
- nsMathMLmoFrame.cpp \
- nsMathMLmrowFrame.cpp \
- nsMathMLmphantomFrame.cpp \
- nsMathMLmfencedFrame.cpp \
- nsMathMLmfracFrame.cpp \
- nsMathMLmsupFrame.cpp \
- nsMathMLmsubFrame.cpp \
- nsMathMLmsubsupFrame.cpp \
- nsMathMLmmultiscriptsFrame.cpp \
- nsMathMLmtableFrame.cpp \
- nsMathMLmunderFrame.cpp \
- nsMathMLmoverFrame.cpp \
- nsMathMLmunderoverFrame.cpp \
- nsMathMLmpaddedFrame.cpp \
- nsMathMLmspaceFrame.cpp \
- nsMathMLmstyleFrame.cpp \
- nsMathMLmsqrtFrame.cpp \
- nsMathMLmrootFrame.cpp \
- nsMathMLmactionFrame.cpp \
- $(NULL)
-
-include $(topsrcdir)/config/config.mk
-
-# we don't want the shared lib, but we want to force the creation of a static lib.
-# do we still want this? - DJF
-FORCE_STATIC_LIB = 1
-
-include $(topsrcdir)/config/rules.mk
-
-font_properties = \
- mathfontUnicode.properties \
- mathfontSTIXNonUnicode.properties \
- mathfontSTIXSize1.properties \
- mathfontStandardSymbolsL.properties \
- $(NULL)
-
-ifeq ($(TARGET_MD_ARCH),win32)
-font_properties += \
- mathfontSymbol.properties
-endif
-
-libs:: $(font_properties)
- $(INSTALL) $^ $(DIST)/bin/res/fonts
-
-install:: $(font_properties)
- $(SYSINSTALL) $(IFLAGS1) $^ $(DESTDIR)$(mozappdir)/res/fonts
-
-math_properties = mathfont.properties
-
-$(DIST)/bin/res/fonts/$(math_properties) $(DESTDIR)$(mozappdir)/res/fonts/$(math_properties): $(math_properties) Makefile
- test -d $(@D) || $(NSINSTALL) -D $(@D)
- rm -f $@
- $(PYTHON) $(MOZILLA_DIR)/config/Preprocessor.py --marker=% $(DEFINES) $(ACDEFINES) $< > $@
-
-libs:: $(DIST)/bin/res/fonts/$(math_properties)
-install:: $(DESTDIR)$(mozappdir)/res/fonts/$(math_properties)
-
-DEFINES += -D_IMPL_NS_LAYOUT
deleted file mode 100644
--- a/layout/mathml/base/src/mathfont.properties
+++ /dev/null
@@ -1,526 +0,0 @@
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-# http://www.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is Mozilla MathML Project.
-#
-# The Initial Developer of the Original Code is
-# The University Of Queensland.
-# Portions created by the Initial Developer are Copyright (C) 2001
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Roger B. Sidje <rbs@maths.uq.edu.au>
-# Karl Tomlinson <karlt+@karlt.net>, Mozilla Corporation
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
-
-##LOCALIZATION NOTE:
-# These are used to display an alert box to warn users when MathML fonts
-# are not installed on their system. The list of missing fonts will be
-# substituted in argument %1$S (see a screenshot in bug 128139).
-mathfont_missing_dialog_title = Missing MathML Fonts
-mathfont_missing_dialog_message = To properly display the MathML on this page you need to install the following fonts:\n%1$S.\n\n\nFor further information see:\nhttp://www.mozilla.org/projects/mathml/fonts
-
-##LOCALIZATION NOTE:
-# Do not translate anything else in this file
-
-# List of fonts that have corresponding properties files containing special
-# glyph tables for stretching MathML characters. See the documentation at the
-# end of this file for details on the setup of the property file associated to
-# each font. Do not include the Unicode table in this list.
-
-%ifdef XP_WIN
-font.mathfont-glyph-tables = STIXNonUnicode, STIXSize1, Standard Symbols L, Symbol
-%else
-font.mathfont-glyph-tables = STIXNonUnicode, STIXSize1, Standard Symbols L
-%endif
-
-# The ordered list of fonts with which to attempt to stretch MathML
-# characters is controlled by setting pref("font.mathfont-family",
-# "CMSY10, CMEX10, ...") for example, or by setting the font-family list in
-# :-moz-math-stretchy in mathml.css.
-#
-# Preferred fonts for particular stretchy characters may be specified in
-# preferences. Each entry is specified using the Unicode format of the
-# character, and the comma-separated list of fonts like in the font-family
-# property of CSS. A character can request different fonts for its variants
-# and for its parts.
-# e.g. pref("font.mathfont-family.\\u2264.base", "CMSY10, etc")
-# - A ".base" extension indicates the ordered list fonts to look for the glyph
-# at its base size.
-# - The ".variants" extension indicates the ordered list of fonts where to
-# look for glyphs of larger sizes.
-# - The ".parts" extension indicates the ordered list of fonts that should be
-# used to look for the partial glyphs to be used to build up the character.
-#
-# Note: setting base fonts for non-stretchy characters only works
-# for operators that are ultimately handled by nsMathMLChar.
-# @see how |useMathMLChar| is set in nsMathMLmoFrame::Stretch() & Paint().
-
-
-
-# Mappings from Unicode BMP chars to style invariant chars (these chars have
-# their own intrinsic predefined styles).
-# http://www.w3.org/TR/2003/REC-MathML2-20031021/chapter6.html#chars.BMP-SMP
-#
-# The string consists of a list of UTF16 code triples. For each i,
-# * the code at offset 3i is the BMP character
-# * the following two codes at offset 3i+1 and 3i+2 are either
-# * (usually) a surrogate pair representing the corresponding character
-# in the Mathematical Alphanumeric Symbols block, or
-# * when the corresponding styled mathematical character is in the BMP, that
-# BMP character followed by padding in the form of a UNICODE REPLACEMENT
-# CHARACTER U+fffd.
-#
-# Currently only some transformations are performed, and only through the
-# style system. (Bug 114365: Support for the 'mathvariant' attribute.)
-
-# there are no normal style-invariant mathematical alphanumeric symbols.
-#mathvariant.normal =
-
-mathvariant.bold = A\ud835\udc00B\ud835\udc01C\ud835\udc02D\ud835\udc03E\ud835\udc04F\ud835\udc05G\ud835\udc06H\ud835\udc07I\ud835\udc08J\ud835\udc09K\ud835\udc0aL\ud835\udc0bM\ud835\udc0cN\ud835\udc0dO\ud835\udc0eP\ud835\udc0fQ\ud835\udc10R\ud835\udc11S\ud835\udc12T\ud835\udc13U\ud835\udc14V\ud835\udc15W\ud835\udc16X\ud835\udc17Y\ud835\udc18Z\ud835\udc19a\ud835\udc1ab\ud835\udc1bc\ud835\udc1cd\ud835\udc1de\ud835\udc1ef\ud835\udc1fg\ud835\udc20h\ud835\udc21i\ud835\udc22j\ud835\udc23k\ud835\udc24l\ud835\udc25m\ud835\udc26n\ud835\udc27o\ud835\udc28p\ud835\udc29q\ud835\udc2ar\ud835\udc2bs\ud835\udc2ct\ud835\udc2du\ud835\udc2ev\ud835\udc2fw\ud835\udc30x\ud835\udc31y\ud835\udc32z\ud835\udc33\u0391\ud835\udea8\u0392\ud835\udea9\u0393\ud835\udeaa\u0394\ud835\udeab\u0395\ud835\udeac\u0396\ud835\udead\u0397\ud835\udeae\u0398\ud835\udeaf\u0399\ud835\udeb0\u039A\ud835\udeb1\u039B\ud835\udeb2\u039C\ud835\udeb3\u039D\ud835\udeb4\u039E\ud835\udeb5\u039F\ud835\udeb6\u03A0\ud835\udeb7\u03A1\ud835\udeb8\u03F4\ud835\udeb9\u03A3\ud835\udeba\u03A4\ud835\udebb\u03A5\ud835\udebc\u03A6\ud835\udebd\u03A7\ud835\udebe\u03A8\ud835\udebf\u03A9\ud835\udec0\u2207\ud835\udec1\u03B1\ud835\udec2\u03B2\ud835\udec3\u03B3\ud835\udec4\u03B4\ud835\udec5\u03B5\ud835\udec6\u03B6\ud835\udec7\u03B7\ud835\udec8\u03B8\ud835\udec9\u03B9\ud835\udeca\u03BA\ud835\udecb\u03BB\ud835\udecc\u03BC\ud835\udecd\u03BD\ud835\udece\u03BE\ud835\udecf\u03BF\ud835\uded0\u03C0\ud835\uded1\u03C1\ud835\uded2\u03C2\ud835\uded3\u03C3\ud835\uded4\u03C4\ud835\uded5\u03C5\ud835\uded6\u03C6\ud835\uded7\u03C7\ud835\uded8\u03C8\ud835\uded9\u03C9\ud835\udeda\u2202\ud835\udedb\u220A\ud835\udedc\u03D1\ud835\udedd\u03F0\ud835\udede\u03D5\ud835\udedf\u03F1\ud835\udee0\u03D6\ud835\udee10\ud835\udfce1\ud835\udfcf2\ud835\udfd03\ud835\udfd14\ud835\udfd25\ud835\udfd36\ud835\udfd47\ud835\udfd58\ud835\udfd69\ud835\udfd7
-mathvariant.italic = A\ud835\udc34B\ud835\udc35C\ud835\udc36D\ud835\udc37E\ud835\udc38F\ud835\udc39G\ud835\udc3aH\ud835\udc3bI\ud835\udc3cJ\ud835\udc3dK\ud835\udc3eL\ud835\udc3fM\ud835\udc40N\ud835\udc41O\ud835\udc42P\ud835\udc43Q\ud835\udc44R\ud835\udc45S\ud835\udc46T\ud835\udc47U\ud835\udc48V\ud835\udc49W\ud835\udc4aX\ud835\udc4bY\ud835\udc4cZ\ud835\udc4da\ud835\udc4eb\ud835\udc4fc\ud835\udc50d\ud835\udc51e\ud835\udc52f\ud835\udc53g\ud835\udc54h\u210e\ufffdi\ud835\udc56j\ud835\udc57k\ud835\udc58l\ud835\udc59m\ud835\udc5an\ud835\udc5bo\ud835\udc5cp\ud835\udc5dq\ud835\udc5er\ud835\udc5fs\ud835\udc60t\ud835\udc61u\ud835\udc62v\ud835\udc63w\ud835\udc64x\ud835\udc65y\ud835\udc66z\ud835\udc67\u0391\ud835\udee2\u0392\ud835\udee3\u0393\ud835\udee4\u0394\ud835\udee5\u0395\ud835\udee6\u0396\ud835\udee7\u0397\ud835\udee8\u0398\ud835\udee9\u0399\ud835\udeea\u039A\ud835\udeeb\u039B\ud835\udeec\u039C\ud835\udeed\u039D\ud835\udeee\u039E\ud835\udeef\u039F\ud835\udef0\u03A0\ud835\udef1\u03A1\ud835\udef2\u03F4\ud835\udef3\u03A3\ud835\udef4\u03A4\ud835\udef5\u03A5\ud835\udef6\u03A6\ud835\udef7\u03A7\ud835\udef8\u03A8\ud835\udef9\u03A9\ud835\udefa\u2207\ud835\udefb\u03B1\ud835\udefc\u03B2\ud835\udefd\u03B3\ud835\udefe\u03B4\ud835\udeff\u03B5\ud835\udf00\u03B6\ud835\udf01\u03B7\ud835\udf02\u03B8\ud835\udf03\u03B9\ud835\udf04\u03BA\ud835\udf05\u03BB\ud835\udf06\u03BC\ud835\udf07\u03BD\ud835\udf08\u03BE\ud835\udf09\u03BF\ud835\udf0a\u03C0\ud835\udf0b\u03C1\ud835\udf0c\u03C2\ud835\udf0d\u03C3\ud835\udf0e\u03C4\ud835\udf0f\u03C5\ud835\udf10\u03C6\ud835\udf11\u03C7\ud835\udf12\u03C8\ud835\udf13\u03C9\ud835\udf14\u2202\ud835\udf15\u220A\ud835\udf16\u03D1\ud835\udf17\u03F0\ud835\udf18\u03D5\ud835\udf19\u03F1\ud835\udf1a\u03D6\ud835\udf1b
-mathvariant.bold-italic = A\ud835\udc68B\ud835\udc69C\ud835\udc6aD\ud835\udc6bE\ud835\udc6cF\ud835\udc6dG\ud835\udc6eH\ud835\udc6fI\ud835\udc70J\ud835\udc71K\ud835\udc72L\ud835\udc73M\ud835\udc74N\ud835\udc75O\ud835\udc76P\ud835\udc77Q\ud835\udc78R\ud835\udc79S\ud835\udc7aT\ud835\udc7bU\ud835\udc7cV\ud835\udc7dW\ud835\udc7eX\ud835\udc7fY\ud835\udc80Z\ud835\udc81a\ud835\udc82b\ud835\udc83c\ud835\udc84d\ud835\udc85e\ud835\udc86f\ud835\udc87g\ud835\udc88h\ud835\udc89i\ud835\udc8aj\ud835\udc8bk\ud835\udc8cl\ud835\udc8dm\ud835\udc8en\ud835\udc8fo\ud835\udc90p\ud835\udc91q\ud835\udc92r\ud835\udc93s\ud835\udc94t\ud835\udc95u\ud835\udc96v\ud835\udc97w\ud835\udc98x\ud835\udc99y\ud835\udc9az\ud835\udc9b\u0391\ud835\udf1c\u0392\ud835\udf1d\u0393\ud835\udf1e\u0394\ud835\udf1f\u0395\ud835\udf20\u0396\ud835\udf21\u0397\ud835\udf22\u0398\ud835\udf23\u0399\ud835\udf24\u039A\ud835\udf25\u039B\ud835\udf26\u039C\ud835\udf27\u039D\ud835\udf28\u039E\ud835\udf29\u039F\ud835\udf2a\u03A0\ud835\udf2b\u03A1\ud835\udf2c\u03F4\ud835\udf2d\u03A3\ud835\udf2e\u03A4\ud835\udf2f\u03A5\ud835\udf30\u03A6\ud835\udf31\u03A7\ud835\udf32\u03A8\ud835\udf33\u03A9\ud835\udf34\u2207\ud835\udf35\u03B1\ud835\udf36\u03B2\ud835\udf37\u03B3\ud835\udf38\u03B4\ud835\udf39\u03B5\ud835\udf3a\u03B6\ud835\udf3b\u03B7\ud835\udf3c\u03B8\ud835\udf3d\u03B9\ud835\udf3e\u03BA\ud835\udf3f\u03BB\ud835\udf40\u03BC\ud835\udf41\u03BD\ud835\udf42\u03BE\ud835\udf43\u03BF\ud835\udf44\u03C0\ud835\udf45\u03C1\ud835\udf46\u03C2\ud835\udf47\u03C3\ud835\udf48\u03C4\ud835\udf49\u03C5\ud835\udf4a\u03C6\ud835\udf4b\u03C7\ud835\udf4c\u03C8\ud835\udf4d\u03C9\ud835\udf4e\u2202\ud835\udf4f\u220A\ud835\udf50\u03D1\ud835\udf51\u03F0\ud835\udf52\u03D5\ud835\udf53\u03F1\ud835\udf54\u03D6\ud835\udf55
-mathvariant.double-struck = A\ud835\udd38B\ud835\udd39C\u2102\ufffdD\ud835\udd3bE\ud835\udd3cF\ud835\udd3dG\ud835\udd3eH\u210d\ufffdI\ud835\udd40J\ud835\udd41K\ud835\udd42L\ud835\udd43M\ud835\udd44N\u2115\ufffdO\ud835\udd46P\u2119\ufffdQ\u211a\ufffdR\u211d\ufffdS\ud835\udd4aT\ud835\udd4bU\ud835\udd4cV\ud835\udd4dW\ud835\udd4eX\ud835\udd4fY\ud835\udd50Z\u2124\ufffda\ud835\udd52b\ud835\udd53c\ud835\udd54d\ud835\udd55e\ud835\udd56f\ud835\udd57g\ud835\udd58h\ud835\udd59i\ud835\udd5aj\ud835\udd5bk\ud835\udd5cl\ud835\udd5dm\ud835\udd5en\ud835\udd5fo\ud835\udd60p\ud835\udd61q\ud835\udd62r\ud835\udd63s\ud835\udd64t\ud835\udd65u\ud835\udd66v\ud835\udd67w\ud835\udd68x\ud835\udd69y\ud835\udd6az\ud835\udd6b0\ud835\udfd81\ud835\udfd92\ud835\udfda3\ud835\udfdb4\ud835\udfdc5\ud835\udfdd6\ud835\udfde7\ud835\udfdf8\ud835\udfe09\ud835\udfe1
-mathvariant.script = A\ud835\udc9cB\u212c\ufffdC\ud835\udc9eD\ud835\udc9fE\u2130\ufffdF\u2131\ufffdG\ud835\udca2H\u210b\ufffdI\u2110\ufffdJ\ud835\udca5K\ud835\udca6L\u2112\ufffdM\u2133\ufffdN\ud835\udca9O\ud835\udcaaP\ud835\udcabQ\ud835\udcacR\u211b\ufffdS\ud835\udcaeT\ud835\udcafU\ud835\udcb0V\ud835\udcb1W\ud835\udcb2X\ud835\udcb3Y\ud835\udcb4Z\ud835\udcb5a\ud835\udcb6b\ud835\udcb7c\ud835\udcb8d\ud835\udcb9e\u212f\ufffdf\ud835\udcbbg\u210a\ufffdh\ud835\udcbdi\ud835\udcbej\ud835\udcbfk\ud835\udcc0l\ud835\udcc1m\ud835\udcc2n\ud835\udcc3o\u2134\ufffdp\ud835\udcc5q\ud835\udcc6r\ud835\udcc7s\ud835\udcc8t\ud835\udcc9u\ud835\udccav\ud835\udccbw\ud835\udcccx\ud835\udccdy\ud835\udccez\ud835\udccf
-mathvariant.bold-script = A\ud835\udcd0B\ud835\udcd1C\ud835\udcd2D\ud835\udcd3E\ud835\udcd4F\ud835\udcd5G\ud835\udcd6H\ud835\udcd7I\ud835\udcd8J\ud835\udcd9K\ud835\udcdaL\ud835\udcdbM\ud835\udcdcN\ud835\udcddO\ud835\udcdeP\ud835\udcdfQ\ud835\udce0R\ud835\udce1S\ud835\udce2T\ud835\udce3U\ud835\udce4V\ud835\udce5W\ud835\udce6X\ud835\udce7Y\ud835\udce8Z\ud835\udce9a\ud835\udceab\ud835\udcebc\ud835\udcecd\ud835\udcede\ud835\udceef\ud835\udcefg\ud835\udcf0h\ud835\udcf1i\ud835\udcf2j\ud835\udcf3k\ud835\udcf4l\ud835\udcf5m\ud835\udcf6n\ud835\udcf7o\ud835\udcf8p\ud835\udcf9q\ud835\udcfar\ud835\udcfbs\ud835\udcfct\ud835\udcfdu\ud835\udcfev\ud835\udcffw\ud835\udd00x\ud835\udd01y\ud835\udd02z\ud835\udd03
-mathvariant.fraktur = A\ud835\udd04B\ud835\udd05C\u212d\ufffdD\ud835\udd07E\ud835\udd08F\ud835\udd09G\ud835\udd0aH\u210c\ufffdI\u2111\ufffdJ\ud835\udd0dK\ud835\udd0eL\ud835\udd0fM\ud835\udd10N\ud835\udd11O\ud835\udd12P\ud835\udd13Q\ud835\udd14R\u211c\ufffdS\ud835\udd16T\ud835\udd17U\ud835\udd18V\ud835\udd19W\ud835\udd1aX\ud835\udd1bY\ud835\udd1cZ\u2128\ufffda\ud835\udd1eb\ud835\udd1fc\ud835\udd20d\ud835\udd21e\ud835\udd22f\ud835\udd23g\ud835\udd24h\ud835\udd25i\ud835\udd26j\ud835\udd27k\ud835\udd28l\ud835\udd29m\ud835\udd2an\ud835\udd2bo\ud835\udd2cp\ud835\udd2dq\ud835\udd2er\ud835\udd2fs\ud835\udd30t\ud835\udd31u\ud835\udd32v\ud835\udd33w\ud835\udd34x\ud835\udd35y\ud835\udd36z\ud835\udd37
-mathvariant.bold-fraktur = A\ud835\udd6cB\ud835\udd6dC\ud835\udd6eD\ud835\udd6fE\ud835\udd70F\ud835\udd71G\ud835\udd72H\ud835\udd73I\ud835\udd74J\ud835\udd75K\ud835\udd76L\ud835\udd77M\ud835\udd78N\ud835\udd79O\ud835\udd7aP\ud835\udd7bQ\ud835\udd7cR\ud835\udd7dS\ud835\udd7eT\ud835\udd7fU\ud835\udd80V\ud835\udd81W\ud835\udd82X\ud835\udd83Y\ud835\udd84Z\ud835\udd85a\ud835\udd86b\ud835\udd87c\ud835\udd88d\ud835\udd89e\ud835\udd8af\ud835\udd8bg\ud835\udd8ch\ud835\udd8di\ud835\udd8ej\ud835\udd8fk\ud835\udd90l\ud835\udd91m\ud835\udd92n\ud835\udd93o\ud835\udd94p\ud835\udd95q\ud835\udd96r\ud835\udd97s\ud835\udd98t\ud835\udd99u\ud835\udd9av\ud835\udd9bw\ud835\udd9cx\ud835\udd9dy\ud835\udd9ez\ud835\udd9f
-mathvariant.sans-serif = A\ud835\udda0B\ud835\udda1C\ud835\udda2D\ud835\udda3E\ud835\udda4F\ud835\udda5G\ud835\udda6H\ud835\udda7I\ud835\udda8J\ud835\udda9K\ud835\uddaaL\ud835\uddabM\ud835\uddacN\ud835\uddadO\ud835\uddaeP\ud835\uddafQ\ud835\uddb0R\ud835\uddb1S\ud835\uddb2T\ud835\uddb3U\ud835\uddb4V\ud835\uddb5W\ud835\uddb6X\ud835\uddb7Y\ud835\uddb8Z\ud835\uddb9a\ud835\uddbab\ud835\uddbbc\ud835\uddbcd\ud835\uddbde\ud835\uddbef\ud835\uddbfg\ud835\uddc0h\ud835\uddc1i\ud835\uddc2j\ud835\uddc3k\ud835\uddc4l\ud835\uddc5m\ud835\uddc6n\ud835\uddc7o\ud835\uddc8p\ud835\uddc9q\ud835\uddcar\ud835\uddcbs\ud835\uddcct\ud835\uddcdu\ud835\uddcev\ud835\uddcfw\ud835\uddd0x\ud835\uddd1y\ud835\uddd2z\ud835\uddd30\ud835\udfe21\ud835\udfe32\ud835\udfe43\ud835\udfe54\ud835\udfe65\ud835\udfe76\ud835\udfe87\ud835\udfe98\ud835\udfea9\ud835\udfeb
-mathvariant.bold-sans-serif = A\ud835\uddd4B\ud835\uddd5C\ud835\uddd6D\ud835\uddd7E\ud835\uddd8F\ud835\uddd9G\ud835\udddaH\ud835\udddbI\ud835\udddcJ\ud835\uddddK\ud835\udddeL\ud835\udddfM\ud835\udde0N\ud835\udde1O\ud835\udde2P\ud835\udde3Q\ud835\udde4R\ud835\udde5S\ud835\udde6T\ud835\udde7U\ud835\udde8V\ud835\udde9W\ud835\uddeaX\ud835\uddebY\ud835\uddecZ\ud835\uddeda\ud835\uddeeb\ud835\uddefc\ud835\uddf0d\ud835\uddf1e\ud835\uddf2f\ud835\uddf3g\ud835\uddf4h\ud835\uddf5i\ud835\uddf6j\ud835\uddf7k\ud835\uddf8l\ud835\uddf9m\ud835\uddfan\ud835\uddfbo\ud835\uddfcp\ud835\uddfdq\ud835\uddfer\ud835\uddffs\ud835\ude00t\ud835\ude01u\ud835\ude02v\ud835\ude03w\ud835\ude04x\ud835\ude05y\ud835\ude06z\ud835\ude07\u0391\ud835\udf56\u0392\ud835\udf57\u0393\ud835\udf58\u0394\ud835\udf59\u0395\ud835\udf5a\u0396\ud835\udf5b\u0397\ud835\udf5c\u0398\ud835\udf5d\u0399\ud835\udf5e\u039A\ud835\udf5f\u039B\ud835\udf60\u039C\ud835\udf61\u039D\ud835\udf62\u039E\ud835\udf63\u039F\ud835\udf64\u03A0\ud835\udf65\u03A1\ud835\udf66\u03F4\ud835\udf67\u03A3\ud835\udf68\u03A4\ud835\udf69\u03A5\ud835\udf6a\u03A6\ud835\udf6b\u03A7\ud835\udf6c\u03A8\ud835\udf6d\u03A9\ud835\udf6e\u2207\ud835\udf6f\u03B1\ud835\udf70\u03B2\ud835\udf71\u03B3\ud835\udf72\u03B4\ud835\udf73\u03B5\ud835\udf74\u03B6\ud835\udf75\u03B7\ud835\udf76\u03B8\ud835\udf77\u03B9\ud835\udf78\u03BA\ud835\udf79\u03BB\ud835\udf7a\u03BC\ud835\udf7b\u03BD\ud835\udf7c\u03BE\ud835\udf7d\u03BF\ud835\udf7e\u03C0\ud835\udf7f\u03C1\ud835\udf80\u03C2\ud835\udf81\u03C3\ud835\udf82\u03C4\ud835\udf83\u03C5\ud835\udf84\u03C6\ud835\udf85\u03C7\ud835\udf86\u03C8\ud835\udf87\u03C9\ud835\udf88\u2202\ud835\udf89\u220A\ud835\udf8a\u03D1\ud835\udf8b\u03F0\ud835\udf8c\u03D5\ud835\udf8d\u03F1\ud835\udf8e\u03D6\ud835\udf8f0\ud835\udfec1\ud835\udfed2\ud835\udfee3\ud835\udfef4\ud835\udff05\ud835\udff16\ud835\udff27\ud835\udff38\ud835\udff49\ud835\udff5
-mathvariant.sans-serif-italic = A\ud835\ude08B\ud835\ude09C\ud835\ude0aD\ud835\ude0bE\ud835\ude0cF\ud835\ude0dG\ud835\ude0eH\ud835\ude0fI\ud835\ude10J\ud835\ude11K\ud835\ude12L\ud835\ude13M\ud835\ude14N\ud835\ude15O\ud835\ude16P\ud835\ude17Q\ud835\ude18R\ud835\ude19S\ud835\ude1aT\ud835\ude1bU\ud835\ude1cV\ud835\ude1dW\ud835\ude1eX\ud835\ude1fY\ud835\ude20Z\ud835\ude21a\ud835\ude22b\ud835\ude23c\ud835\ude24d\ud835\ude25e\ud835\ude26f\ud835\ude27g\ud835\ude28h\ud835\ude29i\ud835\ude2aj\ud835\ude2bk\ud835\ude2cl\ud835\ude2dm\ud835\ude2en\ud835\ude2fo\ud835\ude30p\ud835\ude31q\ud835\ude32r\ud835\ude33s\ud835\ude34t\ud835\ude35u\ud835\ude36v\ud835\ude37w\ud835\ude38x\ud835\ude39y\ud835\ude3az\ud835\ude3b
-mathvariant.sans-serif-bold-italic = A\ud835\ude3cB\ud835\ude3dC\ud835\ude3eD\ud835\ude3fE\ud835\ude40F\ud835\ude41G\ud835\ude42H\ud835\ude43I\ud835\ude44J\ud835\ude45K\ud835\ude46L\ud835\ude47M\ud835\ude48N\ud835\ude49O\ud835\ude4aP\ud835\ude4bQ\ud835\ude4cR\ud835\ude4dS\ud835\ude4eT\ud835\ude4fU\ud835\ude50V\ud835\ude51W\ud835\ude52X\ud835\ude53Y\ud835\ude54Z\ud835\ude55a\ud835\ude56b\ud835\ude57c\ud835\ude58d\ud835\ude59e\ud835\ude5af\ud835\ude5bg\ud835\ude5ch\ud835\ude5di\ud835\ude5ej\ud835\ude5fk\ud835\ude60l\ud835\ude61m\ud835\ude62n\ud835\ude63o\ud835\ude64p\ud835\ude65q\ud835\ude66r\ud835\ude67s\ud835\ude68t\ud835\ude69u\ud835\ude6av\ud835\ude6bw\ud835\ude6cx\ud835\ude6dy\ud835\ude6ez\ud835\ude6f\u0391\ud835\udf90\u0392\ud835\udf91\u0393\ud835\udf92\u0394\ud835\udf93\u0395\ud835\udf94\u0396\ud835\udf95\u0397\ud835\udf96\u0398\ud835\udf97\u0399\ud835\udf98\u039A\ud835\udf99\u039B\ud835\udf9a\u039C\ud835\udf9b\u039D\ud835\udf9c\u039E\ud835\udf9d\u039F\ud835\udf9e\u03A0\ud835\udf9f\u03A1\ud835\udfa0\u03F4\ud835\udfa1\u03A3\ud835\udfa2\u03A4\ud835\udfa3\u03A5\ud835\udfa4\u03A6\ud835\udfa5\u03A7\ud835\udfa6\u03A8\ud835\udfa7\u03A9\ud835\udfa8\u2207\ud835\udfa9\u03B1\ud835\udfaa\u03B2\ud835\udfab\u03B3\ud835\udfac\u03B4\ud835\udfad\u03B5\ud835\udfae\u03B6\ud835\udfaf\u03B7\ud835\udfb0\u03B8\ud835\udfb1\u03B9\ud835\udfb2\u03BA\ud835\udfb3\u03BB\ud835\udfb4\u03BC\ud835\udfb5\u03BD\ud835\udfb6\u03BE\ud835\udfb7\u03BF\ud835\udfb8\u03C0\ud835\udfb9\u03C1\ud835\udfba\u03C2\ud835\udfbb\u03C3\ud835\udfbc\u03C4\ud835\udfbd\u03C5\ud835\udfbe\u03C6\ud835\udfbf\u03C7\ud835\udfc0\u03C8\ud835\udfc1\u03C9\ud835\udfc2\u2202\ud835\udfc3\u220A\ud835\udfc4\u03D1\ud835\udfc5\u03F0\ud835\udfc6\u03D5\ud835\udfc7\u03F1\ud835\udfc8\u03D6\ud835\udfc9
-mathvariant.monospace = A\ud835\ude70B\ud835\ude71C\ud835\ude72D\ud835\ude73E\ud835\ude74F\ud835\ude75G\ud835\ude76H\ud835\ude77I\ud835\ude78J\ud835\ude79K\ud835\ude7aL\ud835\ude7bM\ud835\ude7cN\ud835\ude7dO\ud835\ude7eP\ud835\ude7fQ\ud835\ude80R\ud835\ude81S\ud835\ude82T\ud835\ude83U\ud835\ude84V\ud835\ude85W\ud835\ude86X\ud835\ude87Y\ud835\ude88Z\ud835\ude89a\ud835\ude8ab\ud835\ude8bc\ud835\ude8cd\ud835\ude8de\ud835\ude8ef\ud835\ude8fg\ud835\ude90h\ud835\ude91i\ud835\ude92j\ud835\ude93k\ud835\ude94l\ud835\ude95m\ud835\ude96n\ud835\ude97o\ud835\ude98p\ud835\ude99q\ud835\ude9ar\ud835\ude9bs\ud835\ude9ct\ud835\ude9du\ud835\ude9ev\ud835\ude9fw\ud835\udea0x\ud835\udea1y\ud835\udea2z\ud835\udea30\ud835\udff61\ud835\udff72\ud835\udff83\ud835\udff94\ud835\udffa5\ud835\udffb6\ud835\udffc7\ud835\udffd8\ud835\udffe9\ud835\udfff
-
-
-# Operator Dictionary indexed on the "form" (i.e., infix, prefix, or suffix).
-# Each entry lists the attributes of the operator, using its Unicode format.
-
-operator.\u0028.prefix = stretchy:vertical fence:true lspace:0em rspace:0em # (
-operator.\u0029.postfix = stretchy:vertical fence:true lspace:0em rspace:0em # )
-operator.\u005B.prefix = stretchy:vertical fence:true lspace:0em rspace:0em # [
-operator.\u005D.postfix = stretchy:vertical fence:true lspace:0em rspace:0em # ]
-operator.\u007B.prefix = stretchy:vertical fence:true lspace:0em rspace:0em # {
-operator.\u007D.postfix = stretchy:vertical fence:true lspace:0em rspace:0em # }
-operator.\u201D.postfix = fence:true lspace:0em rspace:0em # ”
-operator.\u2019.postfix = fence:true lspace:0em rspace:0em # ’
-operator.\u27E8.prefix = stretchy:vertical fence:true lspace:0em rspace:0em # ⟨
-operator.\u2308.prefix = stretchy:vertical fence:true lspace:0em rspace:0em # ⌈
-operator.\u27E6.prefix = stretchy:vertical fence:true lspace:0em rspace:0em # ⟦
-operator.\u230A.prefix = stretchy:vertical fence:true lspace:0em rspace:0em # ⌊
-operator.\u201C.prefix = fence:true lspace:0em rspace:0em # “
-operator.\u2018.prefix = fence:true lspace:0em rspace:0em # ‘
-operator.\u27E9.postfix = stretchy:vertical fence:true lspace:0em rspace:0em # ⟩
-operator.\u2309.postfix = stretchy:vertical fence:true lspace:0em rspace:0em # ⌉
-operator.\u27E7.postfix = stretchy:vertical fence:true lspace:0em rspace:0em # ⟧
-operator.\u230B.postfix = stretchy:vertical fence:true lspace:0em rspace:0em # ⌋
-operator.\u2063.infix = separator:true lspace:0em rspace:0em # ⁣
-operator.\u002C.infix = separator:true lspace:0em rspace:verythickmathspace # ,
-operator.\u2500.infix = stretchy:horizontal minsize:0 lspace:0em rspace:0em # ─
-operator.\u007C.infix = stretchy:vertical minsize:0 lspace:0em rspace:0em # | |
-operator.\u003B.infix = separator:true lspace:0em rspace:thickmathspace # ;
-operator.\u003B.postfix = separator:true lspace:0em rspace:0em # ;
-operator.\u003A\u003D.infix = lspace:thickmathspace rspace:thickmathspace # :=
-operator.\u2254.infix = lspace:thickmathspace rspace:thickmathspace # ≔
-operator.\u2235.infix = lspace:thickmathspace rspace:thickmathspace # ∵
-operator.\u2234.infix = lspace:thickmathspace rspace:thickmathspace # ∴
-operator.\u2758.infix = stretchy:vertical lspace:thickmathspace rspace:thickmathspace # ❘
-operator.\u002F\u002F.infix = lspace:thickmathspace rspace:thickmathspace # //
-operator.\u2237.infix = lspace:thickmathspace rspace:thickmathspace # ∷ ∷
-operator.\u0026.prefix = lspace:0em rspace:thickmathspace # &
-operator.\u0026.postfix = lspace:thickmathspace rspace:0em # &
-operator.\u002A\u003D.infix = lspace:thickmathspace rspace:thickmathspace # *=
-operator.\u002D\u003D.infix = lspace:thickmathspace rspace:thickmathspace # -=
-operator.\u002B\u003D.infix = lspace:thickmathspace rspace:thickmathspace # +=
-operator.\u002F\u003D.infix = lspace:thickmathspace rspace:thickmathspace # /=
-operator.\u002D\u003E.infix = lspace:thickmathspace rspace:thickmathspace # ->
-operator.\u003A.infix = lspace:thickmathspace rspace:thickmathspace # :
-operator.\u002E\u002E.postfix = lspace:mediummathspace rspace:0em # ..
-operator.\u002E\u002E\u002E.postfix = lspace:mediummathspace rspace:0em # ...
-operator.\u220B.infix = lspace:thickmathspace rspace:thickmathspace # ∋ ∋
-operator.\u2AE4.infix = lspace:thickmathspace rspace:thickmathspace # ⫤
-operator.\u22A8.infix = lspace:thickmathspace rspace:thickmathspace # ⊨
-operator.\u22A4.infix = lspace:thickmathspace rspace:thickmathspace # ⊤
-operator.\u22A3.infix = lspace:thickmathspace rspace:thickmathspace # ⊣
-operator.\u22A2.infix = lspace:thickmathspace rspace:thickmathspace # ⊢
-operator.\u21D2.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ⇒ ⇒
-operator.\u2970.infix = lspace:thickmathspace rspace:thickmathspace # ⥰
-operator.\u007C\u007C.infix = lspace:mediummathspace rspace:mediummathspace # ||
-operator.\u2A54.infix = stretchy:vertical lspace:mediummathspace rspace:mediummathspace # ⩔
-operator.\u0026\u0026.infix = lspace:thickmathspace rspace:thickmathspace # &&
-operator.\u2A53.infix = stretchy:vertical lspace:mediummathspace rspace:mediummathspace # ⩓
-operator.\u0026.infix = lspace:thickmathspace rspace:thickmathspace # &
-operator.\u0021.prefix = lspace:0em rspace:thickmathspace # !
-operator.\u2AEC.prefix = lspace:0em rspace:thickmathspace # ⫬
-operator.\u2203.prefix = lspace:0em rspace:thickmathspace # ∃
-operator.\u2200.prefix = lspace:0em rspace:thickmathspace # ∀
-operator.\u2204.prefix = lspace:0em rspace:thickmathspace # ∄
-operator.\u2208.infix = lspace:thickmathspace rspace:thickmathspace # ∈
-operator.\u2209.infix = lspace:thickmathspace rspace:thickmathspace # ∉
-operator.\u220C.infix = lspace:thickmathspace rspace:thickmathspace # ∌
-operator.\u228F\u0338.infix = lspace:thickmathspace rspace:thickmathspace # ⊏̸
-operator.\u22E2.infix = lspace:thickmathspace rspace:thickmathspace # ⋢
-operator.\u2290\u0338.infix = lspace:thickmathspace rspace:thickmathspace # ⊐̸
-operator.\u22E3.infix = lspace:thickmathspace rspace:thickmathspace # ⋣
-operator.\u2284.infix = lspace:thickmathspace rspace:thickmathspace # ⊄
-operator.\u2282\u020D2.infix = lspace:thickmathspace rspace:thickmathspace # ⊂⃒
-operator.\u2288.infix = lspace:thickmathspace rspace:thickmathspace # ⊈
-operator.\u2AC5\u0338.infix = lspace:thickmathspace rspace:thickmathspace # ⫅̸
-operator.\u2285.infix = lspace:thickmathspace rspace:thickmathspace # ⊅
-operator.\u2283\u020D2.infix = lspace:thickmathspace rspace:thickmathspace # ⊃⃒
-operator.\u2289.infix = lspace:thickmathspace rspace:thickmathspace # ⊉
-operator.\u2AC6\u0338.infix = lspace:thickmathspace rspace:thickmathspace # ⫅̸
-operator.\u228F.infix = lspace:thickmathspace rspace:thickmathspace # ⊏
-operator.\u2291.infix = lspace:thickmathspace rspace:thickmathspace # ⊑
-operator.\u2290.infix = lspace:thickmathspace rspace:thickmathspace # ⊐
-operator.\u2292.infix = lspace:thickmathspace rspace:thickmathspace # ⊒
-operator.\u22D0.infix = lspace:thickmathspace rspace:thickmathspace # ⋐
-operator.\u2286.infix = lspace:thickmathspace rspace:thickmathspace # ⊆
-operator.\u2AC5.infix = lspace:thickmathspace rspace:thickmathspace # ⫅
-operator.\u2283.infix = lspace:thickmathspace rspace:thickmathspace # ⊃
-operator.\u2287.infix = lspace:thickmathspace rspace:thickmathspace # ⊇
-operator.\u2AC6.infix = lspace:thickmathspace rspace:thickmathspace # ⫆
-operator.\u21D0.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ⇐
-operator.\u21D4.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ⇔
-operator.\u2950.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ⥐
-operator.\u295E.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ⥞
-operator.\u21BD.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ↽
-operator.\u2956.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ⥖
-operator.\u295F.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ⥟
-operator.\u21C1.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ⇁
-operator.\u2957.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ⥗
-operator.\u2190.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ←
-operator.\u21E4.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ⇤
-operator.\u21C6.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ⇆
-operator.\u2194.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ↔
-operator.\u294E.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ⥎
-operator.\u21A4.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ↤
-operator.\u295A.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ⥚
-operator.\u21BC.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ↼
-operator.\u2952.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ⥒
-operator.\u2199.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ↙
-operator.\u2198.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ↘
-operator.\u2192.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # →
-operator.\u21E5.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ⇥
-operator.\u21C4.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ⇄
-operator.\u21A6.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ↦
-operator.\u295B.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ⥛
-operator.\u21C0.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ⇀
-operator.\u2953.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ⥓
-operator.\u2190\u200B.infix = lspace:thickmathspace rspace:thickmathspace # ←
-operator.\u2192\u200B.infix = lspace:thickmathspace rspace:thickmathspace # →
-operator.\u2196.infix = stretchy:vertical lspace:thickmathspace rspace:thickmathspace # ↖
-operator.\u2197.infix = stretchy:vertical lspace:thickmathspace rspace:thickmathspace # ↗
-operator.\u003D.infix = lspace:thickmathspace rspace:thickmathspace # =
-operator.\u003C.infix = lspace:thickmathspace rspace:thickmathspace # <
-operator.\u003E.infix = lspace:thickmathspace rspace:thickmathspace # >
-operator.\u0021\u003D.infix = lspace:thickmathspace rspace:thickmathspace # !=
-operator.\u003D\u003D.infix = lspace:thickmathspace rspace:thickmathspace # ==
-operator.\u003C\u003D.infix = lspace:thickmathspace rspace:thickmathspace # <=
-operator.\u003E\u003D.infix = lspace:thickmathspace rspace:thickmathspace # >=
-operator.\u2261.infix = lspace:thickmathspace rspace:thickmathspace # ≡
-operator.\u224D.infix = lspace:thickmathspace rspace:thickmathspace # ≍
-operator.\u2250.infix = lspace:thickmathspace rspace:thickmathspace # ≐
-operator.\u2225.infix = stretchy:vertical lspace:thickmathspace rspace:thickmathspace # ∥
-operator.\u2016.infix = stretchy:vertical lspace:thickmathspace rspace:thickmathspace # ‖ ‖
-operator.\u2A75.infix = lspace:thickmathspace rspace:thickmathspace # ⩵
-operator.\u2242.infix = lspace:thickmathspace rspace:thickmathspace # ≂
-operator.\u21CC.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ⇌
-operator.\u2265.infix = lspace:thickmathspace rspace:thickmathspace # ≥
-operator.\u22DB.infix = lspace:thickmathspace rspace:thickmathspace # ⋛
-operator.\u2A8C.infix = lspace:thickmathspace rspace:thickmathspace # ⪌
-operator.\u2267.infix = lspace:thickmathspace rspace:thickmathspace # ≧
-operator.\u2AA2.infix = lspace:thickmathspace rspace:thickmathspace # ⪢
-operator.\u2277.infix = lspace:thickmathspace rspace:thickmathspace # ≷
-operator.\u2A7E.infix = lspace:thickmathspace rspace:thickmathspace # ⩾
-operator.\u2273.infix = lspace:thickmathspace rspace:thickmathspace # ≳
-operator.\u2A86.infix = lspace:thickmathspace rspace:thickmathspace # ⪆
-operator.\u224E.infix = lspace:thickmathspace rspace:thickmathspace # ≎
-operator.\u224F.infix = lspace:thickmathspace rspace:thickmathspace # ≏
-operator.\u22B2.infix = lspace:thickmathspace rspace:thickmathspace # ⊲
-operator.\u29CF.infix = lspace:thickmathspace rspace:thickmathspace # ⧏
-operator.\u22B4.infix = lspace:thickmathspace rspace:thickmathspace # ⊴
-operator.\u2264.infix = lspace:thickmathspace rspace:thickmathspace # ≤
-operator.\u22DA.infix = lspace:thickmathspace rspace:thickmathspace # ⋚
-operator.\u2A8B.infix = lspace:thickmathspace rspace:thickmathspace # ⪋
-operator.\u2266.infix = lspace:thickmathspace rspace:thickmathspace # ≦
-operator.\u2276.infix = lspace:thickmathspace rspace:thickmathspace # ≶
-operator.\u2AA1.infix = lspace:thickmathspace rspace:thickmathspace # ⪡
-operator.\u2A7D.infix = lspace:thickmathspace rspace:thickmathspace # ⩽
-operator.\u2272.infix = lspace:thickmathspace rspace:thickmathspace # ≲
-operator.\u2A85.infix = lspace:thickmathspace rspace:thickmathspace # ⪅
-operator.\u226B.infix = lspace:thickmathspace rspace:thickmathspace # ≫
-operator.\u226A.infix = lspace:thickmathspace rspace:thickmathspace # ≪
-operator.\u2262.infix = lspace:thickmathspace rspace:thickmathspace # ≢
-operator.\u226D.infix = lspace:thickmathspace rspace:thickmathspace # ≭
-operator.\u2226.infix = lspace:thickmathspace rspace:thickmathspace # ∦
-operator.\u2260.infix = lspace:thickmathspace rspace:thickmathspace # ≠
-operator.\u2242\u0338.infix = lspace:thickmathspace rspace:thickmathspace # ≂̸
-operator.\u226F.infix = lspace:thickmathspace rspace:thickmathspace # ≯
-operator.\u003E\u20D2.infix = lspace:thickmathspace rspace:thickmathspace # >⃒
-operator.\u2271.infix = lspace:thickmathspace rspace:thickmathspace # ≱
-operator.\u2266\u0338.infix = lspace:thickmathspace rspace:thickmathspace # ≧̸
-operator.\u2A7D\u0338.infix = lspace:thickmathspace rspace:thickmathspace # ⩽̸
-operator.\u226B\u0338.infix = lspace:thickmathspace rspace:thickmathspace # ≫̸
-operator.\u2279.infix = lspace:thickmathspace rspace:thickmathspace # ≹
-operator.\u2A7E\u0338.infix = lspace:thickmathspace rspace:thickmathspace # ⩾̸
-operator.\u2275.infix = lspace:thickmathspace rspace:thickmathspace # ≵
-operator.\u224E\u0338.infix = lspace:thickmathspace rspace:thickmathspace # ≎̸
-operator.\u224F\u0338.infix = lspace:thickmathspace rspace:thickmathspace # ≏̸
-operator.\u22EA.infix = lspace:thickmathspace rspace:thickmathspace # ⋪
-operator.\u29CF\u0338.infix = lspace:thickmathspace rspace:thickmathspace # ⧏̸
-operator.\u22EC.infix = lspace:thickmathspace rspace:thickmathspace # ⋬
-operator.\u226E.infix = lspace:thickmathspace rspace:thickmathspace # ≮
-operator.\u003C\u20D2.infix = lspace:thickmathspace rspace:thickmathspace # <⃒
-operator.\u2270.infix = lspace:thickmathspace rspace:thickmathspace # ≰
-# There is no &NotLessFullEqual;
-operator.\u2278.infix = lspace:thickmathspace rspace:thickmathspace # ≸
-operator.\u226A\u0338.infix = lspace:thickmathspace rspace:thickmathspace # ≪̸
-operator.\u2274.infix = lspace:thickmathspace rspace:thickmathspace # ≴
-operator.\u2AA2\u0338.infix = lspace:thickmathspace rspace:thickmathspace # ⪢̸
-operator.\u2AA1\u0338.infix = lspace:thickmathspace rspace:thickmathspace # ⪡̸
-operator.\u2280.infix = lspace:thickmathspace rspace:thickmathspace # ⊀
-operator.\u2AAF\u0338.infix = lspace:thickmathspace rspace:thickmathspace # ⪯̸
-operator.\u22E0.infix = lspace:thickmathspace rspace:thickmathspace # ⋠
-operator.\u22EB.infix = lspace:thickmathspace rspace:thickmathspace # ⋫
-operator.\u29D0\u0338.infix = lspace:thickmathspace rspace:thickmathspace # ⧐̸
-operator.\u22ED.infix = lspace:thickmathspace rspace:thickmathspace # ⋭
-operator.\u2281.infix = lspace:thickmathspace rspace:thickmathspace # ⊁
-operator.\u2AB0\u0338.infix = lspace:thickmathspace rspace:thickmathspace # ⪰̸
-operator.\u22E1.infix = lspace:thickmathspace rspace:thickmathspace # ⋡
-operator.\u227F\u0338.infix = lspace:thickmathspace rspace:thickmathspace # ≿̸
-operator.\u2241.infix = lspace:thickmathspace rspace:thickmathspace # ≁
-operator.\u2244.infix = lspace:thickmathspace rspace:thickmathspace # ≄
-operator.\u2247.infix = lspace:thickmathspace rspace:thickmathspace # ≇
-operator.\u2249.infix = lspace:thickmathspace rspace:thickmathspace # ≉
-operator.\u2224.infix = lspace:thickmathspace rspace:thickmathspace # ∤
-operator.\u227A.infix = lspace:thickmathspace rspace:thickmathspace # ≺
-operator.\u2AAF.infix = lspace:thickmathspace rspace:thickmathspace # ⪯
-operator.\u227C.infix = lspace:thickmathspace rspace:thickmathspace # ≼
-operator.\u227E.infix = lspace:thickmathspace rspace:thickmathspace # ≾
-operator.\u2AB3.infix = lspace:thickmathspace rspace:thickmathspace # ⪳
-operator.\u2AB7.infix = lspace:thickmathspace rspace:thickmathspace # ⪷
-operator.\u221D.infix = lspace:thickmathspace rspace:thickmathspace # ∝
-operator.\u21CB.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ⇋
-operator.\u22B3.infix = lspace:thickmathspace rspace:thickmathspace # ⊳
-operator.\u29D0.infix = lspace:thickmathspace rspace:thickmathspace # ⧐
-operator.\u22B5.infix = lspace:thickmathspace rspace:thickmathspace # ⊵
-operator.\u227B.infix = lspace:thickmathspace rspace:thickmathspace # ≻
-operator.\u2AB0.infix = lspace:thickmathspace rspace:thickmathspace # ⪰
-operator.\u227D.infix = lspace:thickmathspace rspace:thickmathspace # ≽
-operator.\u227F.infix = lspace:thickmathspace rspace:thickmathspace # ≿
-operator.\u2AB4.infix = lspace:thickmathspace rspace:thickmathspace # ⪴
-operator.\u2AB8.infix = lspace:thickmathspace rspace:thickmathspace # ⪸
-operator.\u223C.infix = lspace:thickmathspace rspace:thickmathspace # ∼
-operator.\u2243.infix = lspace:thickmathspace rspace:thickmathspace # ≃
-operator.\u2245.infix = lspace:thickmathspace rspace:thickmathspace # ≅
-operator.\u2248.infix = lspace:thickmathspace rspace:thickmathspace # ≈
-operator.\u22A5.infix = lspace:thickmathspace rspace:thickmathspace # ⊥
-operator.\u2223.infix = stretchy:vertical lspace:thickmathspace rspace:thickmathspace # ∣
-operator.\u2294.infix = stretchy:vertical lspace:mediummathspace rspace:mediummathspace # ⊔
-operator.\u22C3.infix = stretchy:vertical lspace:mediummathspace rspace:mediummathspace # ⋃
-operator.\u228E.infix = stretchy:vertical lspace:mediummathspace rspace:mediummathspace # ⊎
-operator.\u002D.infix = lspace:mediummathspace rspace:mediummathspace # -
-operator.\u002B.infix = lspace:mediummathspace rspace:mediummathspace # +
-operator.\u22C2.infix = stretchy:vertical lspace:mediummathspace rspace:mediummathspace # ⋂
-operator.\u2213.infix = lspace:mediummathspace rspace:mediummathspace # ∓
-operator.\u00B1.infix = lspace:mediummathspace rspace:mediummathspace # ±
-operator.\u2293.infix = stretchy:vertical lspace:mediummathspace rspace:mediummathspace # ⊓
-operator.\u22C1.prefix = stretchy:vertical largeop:true movablelimits:true lspace:0em rspace:thinmathspace # ⋁
-operator.\u2296.prefix = largeop:true movablelimits:true lspace:0em rspace:thinmathspace # ⊖
-operator.\u2295.prefix = largeop:true movablelimits:true lspace:0em rspace:thinmathspace # ⊕
-operator.\u2A01.prefix = largeop:true movablelimits:true lspace:0em rspace:thinmathspace # ⨁
-operator.\u2211.prefix = stretchy:vertical largeop:true movablelimits:true lspace:0em rspace:thinmathspace # ∑
-operator.\u22C3.prefix = stretchy:vertical largeop:true movablelimits:true lspace:0em rspace:thinmathspace # ⋃
-operator.\u228E.prefix = stretchy:vertical largeop:true movablelimits:true lspace:0em rspace:thinmathspace # ⊎
-operator.\u2A04.prefix = stretchy:vertical largeop:true movablelimits:true lspace:0em rspace:thinmathspace # ⨄
-operator.\u2A06.prefix = stretchy:vertical largeop:true movablelimits:true lspace:0em rspace:thinmathspace # ⨆
-operator.\u006C\u0069\u006D.prefix = movablelimits:true lspace:0em rspace:thinmathspace # lim
-operator.\u006D\u0061\u0078.prefix = movablelimits:true lspace:0em rspace:thinmathspace # max
-operator.\u006D\u0069\u006E.prefix = movablelimits:true lspace:0em rspace:thinmathspace # min
-operator.\u2212.infix = lspace:mediummathspace rspace:mediummathspace # official Unicode minus sign
-operator.\u2212.prefix = lspace:0em rspace:veryverythinmathspace # official Unicode minus sign
-operator.\u2296.infix = lspace:thinmathspace rspace:thinmathspace # ⊖
-operator.\u2295.infix = lspace:thinmathspace rspace:thinmathspace # ⊕
-operator.\u2232.prefix = stretchy:vertical largeop:true lspace:0em rspace:0em # ∲
-operator.\u222E.prefix = stretchy:vertical largeop:true lspace:0em rspace:0em # ∮
-operator.\u2233.prefix = stretchy:vertical largeop:true lspace:0em rspace:0em # ∳
-operator.\u222F.prefix = stretchy:vertical largeop:true lspace:0em rspace:0em # ∯
-operator.\u222B.prefix = stretchy:vertical largeop:true lspace:0em rspace:0em # ∫
-operator.\u22D3.infix = lspace:thinmathspace rspace:thinmathspace # ⋓
-operator.\u22D2.infix = lspace:thinmathspace rspace:thinmathspace # ⋒
-operator.\u2240.infix = lspace:thinmathspace rspace:thinmathspace # ≀
-operator.\u22C0.prefix = stretchy:vertical largeop:true movablelimits:true lspace:0em rspace:thinmathspace # ⋀
-operator.\u2297.prefix = largeop:true movablelimits:true lspace:0em rspace:thinmathspace # ⊗
-operator.\u2A02.prefix = largeop:true movablelimits:true lspace:0em rspace:thinmathspace # ⨂
-operator.\u2210.prefix = stretchy:vertical largeop:true movablelimits:true lspace:0em rspace:thinmathspace # ∐
-operator.\u220F.prefix = stretchy:vertical largeop:true movablelimits:true lspace:0em rspace:thinmathspace # ∏
-operator.\u22C2.prefix = stretchy:vertical largeop:true movablelimits:true lspace:0em rspace:thinmathspace # ⋂
-operator.\u2210.infix = lspace:thinmathspace rspace:thinmathspace # ∐
-operator.\u2606.infix = lspace:thinmathspace rspace:thinmathspace # ☆
-operator.\u22C6.infix = lspace:thinmathspace rspace:thinmathspace # ⋆
-operator.\u2299.prefix = largeop:true movablelimits:true lspace:0em rspace:thinmathspace # ⊙
-operator.\u2A00.prefix = largeop:true movablelimits:true lspace:0em rspace:thinmathspace # ⨀
-operator.\u002A.infix = lspace:thinmathspace rspace:thinmathspace # *
-operator.\u2062.infix = lspace:0em rspace:0em # ⁢
-operator.\u00B7.infix = lspace:thinmathspace rspace:thinmathspace # ·
-operator.\u2297.infix = lspace:thinmathspace rspace:thinmathspace # ⊗
-operator.\u22C1.infix = lspace:thinmathspace rspace:thinmathspace # ⋁
-operator.\u22C0.infix = lspace:thinmathspace rspace:thinmathspace # ⋀
-operator.\u22C4.infix = lspace:thinmathspace rspace:thinmathspace # ⋄
-operator.\u2216.infix = stretchy:vertical lspace:thinmathspace rspace:thinmathspace # ∖
-operator.\u002F.infix = stretchy:vertical lspace:thinmathspace rspace:thinmathspace # /
-operator.\u002D.prefix = lspace:0em rspace:veryverythinmathspace # -
-operator.\u002B.prefix = lspace:0em rspace:veryverythinmathspace # +
-operator.\u2213.prefix = lspace:0em rspace:veryverythinmathspace # ∓
-operator.\u00B1.prefix = lspace:0em rspace:veryverythinmathspace # ±
-operator.\u002E.infix = lspace:0em rspace:0em # .
-operator.\u2A2F.infix = lspace:verythinmathspace rspace:verythinmathspace # ⨯
-operator.\u002A\u002A.infix = lspace:verythinmathspace rspace:verythinmathspace # **
-operator.\u2299.infix = lspace:verythinmathspace rspace:verythinmathspace # ⊙
-operator.\u2218.infix = lspace:verythinmathspace rspace:verythinmathspace # ∘
-operator.\u25A1.prefix = lspace:0em rspace:verythinmathspace # □
-operator.\u2207.prefix = lspace:0em rspace:verythinmathspace # ∇
-operator.\u2202.prefix = lspace:0em rspace:verythinmathspace # ∂
-operator.\u2145.prefix = lspace:0em rspace:verythinmathspace # ⅅ
-operator.\u2146.prefix = lspace:0em rspace:verythinmathspace # ⅆ
-operator.\u221A.prefix = stretchy:vertical lspace:0em rspace:verythinmathspace # √
-operator.\u21D3.infix = stretchy:vertical lspace:verythinmathspace rspace:verythinmathspace # ⇓
-operator.\u27F8.infix = stretchy:horizontal lspace:verythinmathspace rspace:verythinmathspace # ⟸
-operator.\u27FA.infix = stretchy:horizontal lspace:verythinmathspace rspace:verythinmathspace # ⟺
-operator.\u27F9.infix = stretchy:horizontal lspace:verythinmathspace rspace:verythinmathspace # ⟹
-operator.\u21D1.infix = stretchy:vertical lspace:verythinmathspace rspace:verythinmathspace # ⇑
-operator.\u21D5.infix = stretchy:vertical lspace:verythinmathspace rspace:verythinmathspace # ⇕
-operator.\u2193.infix = stretchy:vertical lspace:verythinmathspace rspace:verythinmathspace # ↓
-operator.\u2913.infix = stretchy:vertical lspace:verythinmathspace rspace:verythinmathspace # ⤓
-operator.\u21F5.infix = stretchy:vertical lspace:verythinmathspace rspace:verythinmathspace # ⇵
-operator.\u21A7.infix = stretchy:vertical lspace:verythinmathspace rspace:verythinmathspace # ↧
-operator.\u2961.infix = stretchy:vertical lspace:verythinmathspace rspace:verythinmathspace # ⥡
-operator.\u21C3.infix = stretchy:vertical lspace:verythinmathspace rspace:verythinmathspace # ⇃
-operator.\u2959.infix = stretchy:vertical lspace:verythinmathspace rspace:verythinmathspace # ⥙
-operator.\u2951.infix = stretchy:vertical lspace:verythinmathspace rspace:verythinmathspace # ⥑
-operator.\u2960.infix = stretchy:vertical lspace:verythinmathspace rspace:verythinmathspace # ⥠
-operator.\u21BF.infix = stretchy:vertical lspace:verythinmathspace rspace:verythinmathspace # ↿
-operator.\u2958.infix = stretchy:vertical lspace:verythinmathspace rspace:verythinmathspace # ⥘
-operator.\u27F5.infix = stretchy:horizontal lspace:verythinmathspace rspace:verythinmathspace # ⟵
-operator.\u27F7.infix = stretchy:horizontal lspace:verythinmathspace rspace:verythinmathspace # ⟷
-operator.\u27F6.infix = stretchy:horizontal lspace:verythinmathspace rspace:verythinmathspace # ⟶
-operator.\u296F.infix = stretchy:vertical lspace:verythinmathspace rspace:verythinmathspace # ⥯
-operator.\u295D.infix = stretchy:vertical lspace:verythinmathspace rspace:verythinmathspace # ⥝
-operator.\u21C2.infix = stretchy:vertical lspace:verythinmathspace rspace:verythinmathspace # ⇂
-operator.\u2955.infix = stretchy:vertical lspace:verythinmathspace rspace:verythinmathspace # ⥕
-operator.\u294F.infix = stretchy:vertical lspace:verythinmathspace rspace:verythinmathspace # ⥏
-operator.\u295C.infix = stretchy:vertical lspace:verythinmathspace rspace:verythinmathspace # ⥜
-operator.\u21BE.infix = stretchy:vertical lspace:verythinmathspace rspace:verythinmathspace # ↾
-operator.\u2954.infix = stretchy:vertical lspace:verythinmathspace rspace:verythinmathspace # ⥔
-operator.\u2193\u200B.infix = lspace:verythinmathspace rspace:verythinmathspace # ↓
-operator.\u2191\u200B.infix = lspace:verythinmathspace rspace:verythinmathspace # ↑
-operator.\u2191.infix = stretchy:vertical lspace:verythinmathspace rspace:verythinmathspace # ↑
-operator.\u2912.infix = stretchy:vertical lspace:verythinmathspace rspace:verythinmathspace # ⤒
-operator.\u21C5.infix = stretchy:vertical lspace:verythinmathspace rspace:verythinmathspace # ⇅
-operator.\u2195.infix = stretchy:vertical lspace:verythinmathspace rspace:verythinmathspace # ↕
-operator.\u296E.infix = stretchy:vertical lspace:verythinmathspace rspace:verythinmathspace # ⥮
-operator.\u21A5.infix = stretchy:vertical lspace:verythinmathspace rspace:verythinmathspace # ↥
-operator.\u005E.infix = lspace:verythinmathspace rspace:verythinmathspace # ^
-operator.\u003C\u003E.infix = lspace:verythinmathspace rspace:verythinmathspace # <>
-operator.\u0027.postfix = lspace:verythinmathspace rspace:0em # '
-operator.\u0021.postfix = lspace:verythinmathspace rspace:0em # !
-operator.\u0021\u0021.postfix = lspace:verythinmathspace rspace:0em # !!
-operator.\u007E.infix = lspace:verythinmathspace rspace:verythinmathspace # ~
-operator.\u0040.infix = lspace:verythinmathspace rspace:verythinmathspace # @
-operator.\u002D\u002D.postfix = lspace:verythinmathspace rspace:0em # --
-operator.\u002D\u002D.prefix = lspace:0em rspace:verythinmathspace # --
-operator.\u002B\u002B.postfix = lspace:verythinmathspace rspace:0em # ++
-operator.\u002B\u002B.prefix = lspace:0em rspace:verythinmathspace # ++
-operator.\u2061.infix = lspace:0em rspace:0em # ⁡
-operator.\u003F.infix = lspace:verythinmathspace rspace:verythinmathspace # ?
-operator.\u005F.infix = lspace:verythinmathspace rspace:verythinmathspace # _
-operator.\u02D8.postfix = accent:true lspace:0em rspace:0em # ˘
-operator.\u00B8.postfix = accent:true lspace:0em rspace:0em # ¸
-operator.\u0060.postfix = accent:true lspace:0em rspace:0em # `
-operator.\u02D9.postfix = accent:true lspace:0em rspace:0em # ˙
-operator.\u02DD.postfix = accent:true lspace:0em rspace:0em # ˝
-operator.\u00B4.postfix = accent:true lspace:0em rspace:0em # ´
-operator.\u02DC.postfix = stretchy:horizontal accent:true lspace:0em rspace:0em # ˜
-operator.\u00A8.postfix = accent:true lspace:0em rspace:0em # ¨
-operator.\u0311.postfix = accent:true lspace:0em rspace:0em # ̑
-operator.\u02C7.postfix = stretchy:horizontal accent:true lspace:0em rspace:0em # ˇ
-operator.\u005E.postfix = stretchy:horizontal accent:true lspace:0em rspace:0em # ^
-operator.\u00AF.postfix = stretchy:horizontal accent:true lspace:0em rspace:0em # ‾
-operator.\u23DE.postfix = stretchy:horizontal accent:true lspace:0em rspace:0em # ⏞ (Unicode)
-operator.\uFE37.postfix = stretchy:horizontal accent:true lspace:0em rspace:0em # ⏞ (MathML 2.0)
-operator.\u23B4.postfix = stretchy:horizontal accent:true lspace:0em rspace:0em # ⎴
-operator.\u23DC.postfix = stretchy:horizontal accent:true lspace:0em rspace:0em # ⏜ (Unicode)
-operator.\uFE35.postfix = stretchy:horizontal accent:true lspace:0em rspace:0em # ⏜ (MathML 2.0)
-operator.\u20DB.postfix = accent:true lspace:0em rspace:0em # ⃛
-operator.\u0332.postfix = stretchy:horizontal accent:true lspace:0em rspace:0em # _
-operator.\u23DF.postfix = stretchy:horizontal accent:true lspace:0em rspace:0em # ⏟ (Unicode)
-operator.\uFE38.postfix = stretchy:horizontal accent:true lspace:0em rspace:0em # ⏟ (MathML 2.0)
-operator.\u23B5.postfix = stretchy:horizontal accent:true lspace:0em rspace:0em # ⎵
-operator.\u23DD.postfix = stretchy:horizontal accent:true lspace:0em rspace:0em # ⏝ (Unicode)
-operator.\uFE36.postfix = stretchy:horizontal accent:true lspace:0em rspace:0em # ⏝ (MathML 2.0)
-operator.\u2225.prefix = stretchy:vertical fence:true lspace:.0em rspace:.0em # ∥
-operator.\u2225.postfix = stretchy:vertical fence:true lspace:.0em rspace:.0em # ∥
-operator.\u2016.prefix = stretchy:vertical fence:true lspace:.0em rspace:.0em # ‖ ‖
-operator.\u2016.postfix = stretchy:vertical fence:true lspace:.0em rspace:.0em # ‖ ‖
-operator.\u2223.prefix = stretchy:vertical fence:true lspace:.0em rspace:.0em # ∣
-operator.\u2223.postfix = stretchy:vertical fence:true lspace:.0em rspace:.0em # ∣
-operator.\u007C.prefix = stretchy:vertical fence:true lspace:.0em rspace:.0em # |
-operator.\u007C.postfix = stretchy:vertical fence:true lspace:.0em rspace:.0em # |
-operator.\u20D7.postfix = stretchy:horizontal accent:true lspace:0em rspace:0em # ⃗
-operator.\u20D6.postfix = stretchy:horizontal accent:true lspace:0em rspace:0em # ⃖
-operator.\u20E1.postfix = stretchy:horizontal accent:true lspace:0em rspace:0em # ⃡
-operator.\u20D1.postfix = stretchy:horizontal accent:true lspace:0em rspace:0em # ⃑
-operator.\u20D0.postfix = stretchy:horizontal accent:true lspace:0em rspace:0em # ⃐
-operator.\u21A9.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ↩ ↩
-operator.\u21AA.infix = stretchy:horizontal lspace:thickmathspace rspace:thickmathspace # ↪ ↪
-operator.\u23B0.prefix = stretchy:vertical fence:true lspace:0em rspace:0em # ⎰ ⎰
-operator.\u23B1.postfix = stretchy:vertical fence:true lspace:0em rspace:0em # ⎱ ⎱
-operator.\u22C5.infix = lspace:thinmathspace rspace:thinmathspace # ċ
-operator.\u2282.infix = lspace:thickmathspace rspace:thickmathspace # ⊂
-
-
-##################################################################################
-# DOCUMENTATION ON HOW TO SETUP THE PROPERTY FILE ASSOCIATED TO EACH FONT
-# More fonts can be supported for stretchy characters by setting up mathfont
-# property files as described below.
-#
-# Each font should have its set of glyph data. For example, the glyph data for
-# the "Symbol" font and the "MT Extra" font are in "mathfontSymbol.properties"
-# and "mathfontMTExtra.properties", respectively. The font property file is a
-# set of all the stretchy MathML characters that can be rendered with that font
-# using larger and/or partial glyphs. Each stretchy character is associated to
-# a list in the font property file which gives, in that order, the 4 partial
-# glyphs: top (or left), middle, bottom (or right), glue; and the variants of
-# bigger sizes (if any). A position that is not relevant to a particular character
-# is indicated there with the UNICODE REPLACEMENT CHARACTER 0xFFFD.
-#
-# Characters that need to be built from other characters are said to be composite.
-# For example, characters like over/underbrace in CMEX10 have to be built from two
-# half stretchy chars and joined in the middle (TeXbook, p.225). Several (i.e., 2
-# or more) child characters can be composed in order to render another chararacter.
-# To specify such characters, their list of glyphs in the property file should be
-# given as space-separated segments of glyphs. Each segment gives the 4 partial glyphs
-# with which to build the child character that will be joined with its other siblings.
deleted file mode 100644
--- a/layout/mathml/base/src/mathfontCMEX10.properties
+++ /dev/null
@@ -1,105 +0,0 @@
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-# http://www.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is Mozilla MathML Project.
-#
-# The Initial Developer of the Original Code is
-# The University Of Queensland.
-# Portions created by the Initial Developer are Copyright (C) 2001
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Roger B. Sidje <rbs@maths.uq.edu.au>
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
-
-# LOCALIZATION NOTE: FILE
-# Do not translate anything in this file
-
-# This file contains the list of all stretchy MathML chars that
-# can be rendered with the indicated mathfont.
-mathfont = CMEX10
-
-# There is a nebulous entanglement between the parts of stretchy chars in
-# TeX fonts. The convention used here is to enlist horizontal stretchy chars
-# in the property file of cmsy, and enlist vertical stretchy chars in the
-# property file of cmex. Exception: composite chars like under/over brace
-# are all enlisted in cmex.
-
-# [ T/L | M | B/R | G | size0 ... size{N-1} ]
-\u0028 = \uF8FF\uFFFD\uF8FF\uF8FF\u0028\uF8FF\uF8FF\uF8FF\uF8FF # (
-\u0029 = \uF8FF\uFFFD\uF8FF\uF8FF\u0029\uF8FF\uF8FF\uF8FF\uF8FF # )
-\u002F = \uFFFD\uFFFD\uFFFD\uFFFD\u002F\uF8FF\uF8FF\uF8FF\uF8FF # /
-\u005B = \uF8FF\uFFFD\uF8FF\uF8FF\u005B\uF8FF\uF8FF\uF8FF\uF8FF # [
-\u005D = \uF8FF\uFFFD\uF8FF\uF8FF\u005D\uF8FF\uF8FF\uF8FF\uF8FF # ]
-\u007B = \uF8FF\uF8FF\uF8FF\uF8FF\u007B\uF8FF\uF8FF\uF8FF\uF8FF # {
-\u007D = \uF8FF\uF8FF\uF8FF\uFFFD\u007D\uF8FF\uF8FF\uF8FF\uF8FF # }
-\u02DC = \uFFFD\uFFFD\uFFFD\uFFFD\u02DC\uF8FF\uF8FF\uF8FF # DiacriticalTilde, tilde
-\u0302 = \uFFFD\uFFFD\uFFFD\uFFFD\u0302\uF8FF\uF8FF\uF8FF # Hat
-\u2191 = \uF8FF\uFFFD\uFFFD\uF8FF\u2191 # UpArrow, uarr, uparrow
-\u2193 = \uFFFD\uFFFD\uF8FF\uF8FF\u2193 # DownArrow, darr, downarrow
-\u2195 = \uF8FF\uFFFD\uF8FF\uF8FF\u2195 # UpDownArrow, updownarrow, varr
-\u21D1 = \uF8FF\uFFFD\uFFFD\uF8FF\u21D1 # DoubleUpArrow, Uparrow, uArr
-\u21D3 = \uFFFD\uFFFD\uF8FF\uF8FF\u21D3 # DoubleDownArrow, Downarrow, dArr
-\u21D5 = \uF8FF\uFFFD\uF8FF\uF8FF\u21D5 # DoubleUpDownArrow, Updownarrow, vArr
-\u220F = \uFFFD\uFFFD\uFFFD\uFFFD\u220F\uF8FF\uF8FF # Product, prod
-\u2210 = \uFFFD\uFFFD\uFFFD\uFFFD\u2210\uF8FF\uF8FF # Coproduct, coprod
-\u2211 = \uFFFD\uFFFD\uFFFD\uFFFD\u2211\uF8FF\uF8FF # Sum, sum
-\u2216 = \uFFFD\uFFFD\uFFFD\uFFFD\u2216\uF8FF\uF8FF\uF8FF\uF8FF # Backslash, setminus, setmn
-\u221A = \uF8FF\uFFFD\uF8FF\uF8FF\u221A\uF8FF\uF8FF\uF8FF\uF8FF # Sqrt, radic
-\u2223 = \uFFFD\uFFFD\uFFFD\uF8FF\u2223 # VerticalBar, mid
-\u2225 = \uFFFD\uFFFD\uFFFD\uF8FF\u2225 # DoubleVerticalBar, par, parallel
-\u2227 = \uFFFD\uFFFD\uFFFD\uFFFD\u2227\uF8FF\uF8FF # and, wedge
-\u2228 = \uFFFD\uFFFD\uFFFD\uFFFD\u2228\uF8FF\uF8FF # or, vee
-\u222B = \uFFFD\uFFFD\uFFFD\uFFFD\u222B\uF8FF\uF8FF # Integral, int
-\u222E = \uFFFD\uFFFD\uFFFD\uFFFD\u222E\uF8FF\uF8FF # ContourIntegral, conint, oint
-\u228E = \uFFFD\uFFFD\uFFFD\uFFFD\u228E\uF8FF\uF8FF # UnionPlus, biguplus, uplus, xuplus
-\u2294 = \uFFFD\uFFFD\uFFFD\uFFFD\u2294\uF8FF\uF8FF # SquareUnion, bigsqcup, sqcup, xsqcup
-\u2295 = \uFFFD\uFFFD\uFFFD\uFFFD\u2295\uF8FF\uF8FF # CirclePlus, bigoplus, oplus, xoplus
-\u2297 = \uFFFD\uFFFD\uFFFD\uFFFD\u2297\uF8FF\uF8FF # CircleTimes, bigotimes, otimes, xotime
-\u2299 = \uFFFD\uFFFD\uFFFD\uFFFD\u2299\uF8FF\uF8FF # CircleDot, bigodot, odot, xodot
-\u22C2 = \uFFFD\uFFFD\uFFFD\uFFFD\u22C2\uF8FF\uF8FF # Intersection, bigcap, xcap
-\u22C3 = \uFFFD\uFFFD\uFFFD\uFFFD\u22C3\uF8FF\uF8FF # Union, bigcup, xcup
-\u2308 = \u005B.T\uFFFD\uFFFD\u005B.G\u2308\uF8FF\uF8FF\uF8FF\uF8FF # LeftCeiling, lceil
-\u2309 = \u005D.T\uFFFD\uFFFD\u005D.G\u2309\uF8FF\uF8FF\uF8FF\uF8FF # RightCeiling, rceil
-\u230A = \uFFFD\uFFFD\u005B.B\u005B.G\u230A\uF8FF\uF8FF\uF8FF\uF8FF # LeftFloor, lfloor
-\u230B = \uFFFD\uFFFD\u005D.B\u005D.G\u230B\uF8FF\uF8FF\uF8FF\uF8FF # RightFloor, rfloor
-\u2329 = \uFFFD\uFFFD\uFFFD\uFFFD\u2329\uF8FF\uF8FF\uF8FF\uF8FF # LeftAngleBracket, lang, langle
-\u232A = \uFFFD\uFFFD\uFFFD\uFFFD\u232A\uF8FF\uF8FF\uF8FF\uF8FF # RightAngleBracket, rang, rangle
-
-# Support for under/over brace from space-separated composite pieces, note null glue and middle.
-# Use slightly different definitions -- their purpose is to illustrate possible annotations.
-\uFE37 = \uFE37.L\uFFFD\uFE38.R\uFFFD \uFE38.L\uFFFD\uFE37.R\uFFFD # OverBrace
-\uFE38 = \uF8FF\uFFFD\uFE37.R\uFFFD \uFE37.L\uFFFD\uF8FF\uFFFD # UnderBrace
-
-# Support for l/r moustache from the parts of lbrace { and rbrace }
-\u23B0 = \u007B.T\uFFFD\u007D.B\u007B.G\u23B0 # lmoustache, lmoust
-\u23B1 = \u007D.T\uFFFD\u007B.B\u007D.G\u23B1 # rmoustache, rmoust
-
-# Make | behave like VerticalBar because most people use | for fences
-\u007C = \uFFFD\uFFFD\uFFFD\u2223.G\u007C # |
-
-#Make Vert behave like DoubleVerticalBar
-\u2016 = \uFFFD\uFFFD\uFFFD\u2225.G\u2016 # Vert, Verbar
deleted file mode 100644
--- a/layout/mathml/base/src/mathfontCMSY10.properties
+++ /dev/null
@@ -1,78 +0,0 @@
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-# http://www.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is Mozilla MathML Project.
-#
-# The Initial Developer of the Original Code is
-# The University of Queensland.
-# Portions created by the Initial Developer are Copyright (C) 2001
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Roger B. Sidje <rbs@maths.uq.edu.au>
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
-
-# LOCALIZATION NOTE: FILE
-# Do not translate anything in this file
-
-# This file contains the list of all stretchy MathML chars that
-# can be rendered with the indicated mathfont.
-mathfont = CMSY10
-
-# There is a nebulous entanglement between the parts of stretchy chars in
-# TeX fonts. The convention used here is to enlist horizontal stretchy chars
-# in the property file of cmsy, and enlist vertical stretchy chars in the
-# property file of cmex. Exception: composite chars like under/over brace
-# are all enlisted in cmex.
-
-external.1 = CMR10
-external.2 = CMMI10
-
-# [ T/L | M | B/R | G | size0 ... size{N-1} ]
-\u2190 = \u2190\uFFFD\uFFFD\u2212\u2190 # LeftArrow, larr, leftarrow
-\u2192 = \uFFFD\uFFFD\u2192\u2212\u2192 # RightArrow, rarr, rightarrow
-\u2194 = \u2190\uFFFD\u2192\u2212\u2194 # LeftRightArrow, harr, leftrightarrow
-\u21A9 = \u2190\uFFFD\uF8FF@2\u2212\u21A9 # hookleftarrow, larrhk
-\u21AA = \uF8FF@2\uFFFD\u2192\u2212\u21AA # hookrightarrow, rarrhk
-\u21A6 = \uF8FF\uFFFD\u2192\u2212\u21A6 # RightTeeArrow, map, mapsto
-\u21C0 = \uFFFD\uFFFD\u21C0@2\u2212\u21C0 # RightVector, rharu, rightharpoonup
-\u21C1 = \uFFFD\uFFFD\u21C1@2\u2212\u21C1 # DownRightVector, rhard, rightharpoondown
-\u21BC = \u21BC@2\uFFFD\uFFFD\u2212\u21BC # LeftVector, leftharpoonup, lharu
-\u21BD = \u21BD@2\uFFFD\uFFFD\u2212\u21BD # DownLeftVector, leftharpoondown, lhard
-\u295B = \uF8FF\uFFFD\u21C0@2\u2212\u295B #RIGHTWARDS HARPOON WITH BARB UP FROM BAR, RightTeeVector
-\u295F = \uF8FF\uFFFD\u21C1@2\u2212\u295F #RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR, DownRightTeeVector
-\u294E = \u21BC@2\uFFFD\u21C0@2\u2212\u294E #LEFT BARB UP RIGHT BARB UP HARPOON, LeftRightVector
-\u2950 = \u21BD@2\uFFFD\u21C1@2\u2212\u2950 #LEFT BARB DOWN RIGHT BARB DOWN HARPOON , DownLeftRightVector
-\u21D0 = \u21D0\uFFFD\uFFFD\u003D@1\u21D0 # DoubleLeftArrow, Leftarrow, lArr
-\u21D4 = \u21D0\uFFFD\u21D2\u003D@1\u21D4 # DoubleLeftRightArrow, Leftrightarrow, hArr, iff
-\u21D2 = \uFFFD\uFFFD\u21D2\u003D@1\u21D2 # DoubleRightArrow, Implies, Rightarrow, rArr
-
-\uF576 = \u2190\uFFFD\uFFFD\u2212\uF576 # LongLeftArrow
-\uF577 = \uFFFD\uFFFD\u2192\u2212\uF577 # LongRightArrow
-\uF578 = \u2190\uFFFD\u2192\u2212\uF578 # LongLeftRightArrow
-\uF579 = \u21D0\uFFFD\uFFFD\u003D@1\uF579 # DoubleLongLeftArrow
-\uF57A = \uFFFD\uFFFD\u21D2\u003D@1\uF57A # DoubleLongRightArrow
-\uF57B = \u21D0\uFFFD\u21D2\u003D@1\uF57B # DoubleLongLeftRightArrow
deleted file mode 100644
--- a/layout/mathml/base/src/mathfontMTExtra.properties
+++ /dev/null
@@ -1,52 +0,0 @@
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-# http://www.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is Mozilla MathML Project.
-#
-# The Initial Developer of the Original Code is The University Of
-# Queensland. Portions created by The University Of Queensland are
-# Copyright (C) 2001 The University Of Queensland. All Rights Reserved.
-#
-# Contributor(s):
-# Roger B. Sidje <rbs@maths.uq.edu.au>
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
-
-# LOCALIZATION NOTE: FILE
-# Do not translate anything in this file
-
-# This file contains the list of all stretchy MathML chars that
-# can be rendered with the indicated mathfont.
-mathfont = MT Extra
-
-# [ T/L | M | B/R | G | size0 ... size{N-1} ]
-\uF613 = \uEC00\uEC01\uEC02\uEC03\uF613
-\uF612 = \uEC04\uEC05\uEC06\uEC03\uF612
-#disable for now as they appear too small and don't align properly at default font-size
-#\u20D6 = \u20D6\uFFFD\uFFFD\uEB00\u20D6
-#\u20D7 = \uFFFD\uFFFD\u20D7\uEB00\u20D7
-#\u20E1 = \u20D6\uFFFD\u20D7\uEB00\u20E1
-#\u20D0 = \u20D0\uFFFD\uFFFD\uEB00\u20D0
-#\u20D1 = \uFFFD\uFFFD\u20D1\uEB00\u20D1
deleted file mode 100644
--- a/layout/mathml/base/src/mathfontMath1.properties
+++ /dev/null
@@ -1,67 +0,0 @@
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-# http://www.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is Mozilla MathML Project.
-#
-# The Initial Developer of the Original Code is
-# The University Of Queensland.
-# Portions created by the Initial Developer are Copyright (C) 2001
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Roger B. Sidje <rbs@maths.uq.edu.au>
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
-
-# LOCALIZATION NOTE: FILE
-# Do not translate anything in this file
-
-# This file contains the list of all stretchy MathML chars that
-# can be rendered with the indicated mathfont.
-mathfont = Math1
-
-# [ T/L | M | B/R | G | size0 ... size{N-1} ]
-\u0028 = \uF8FF\uFFFD\uF8FF\uF8FF\u0028 # (
-\u0029 = \uF8FF\uFFFD\uF8FF\uF8FF\u0029 # )
-\u005B = \uF8FF\uFFFD\uF8FF\uF8FF\u005B # [
-\u005D = \uF8FF\uFFFD\uF8FF\uF8FF\u005D # ]
-\u007B = \uF8FF\uF8FF\uF8FF\uF8FF\u007B # {
-\u007D = \uF8FF\uF8FF\uF8FF\uF8FF\u007D # }
-\u007C = \uFFFD\uFFFD\uFFFD\u007C\u007C # |
-\u2190 = \u2190\uFFFD\uFFFD\uF8FF\u2190 # LeftArrow, larr, leftarrow
-\u2191 = \u2191\uFFFD\uFFFD\uF8FF\u2191 # UpArrow, uarr, uparrow
-\u2192 = \uFFFD\uFFFD\u2192\uF8FF\u2192 # RightArrow, rarr, rightarrow
-\u2193 = \uFFFD\uFFFD\u2193\uF8FF\u2193 # DownArrow, darr, downarrow
-\u2194 = \u2190\uFFFD\u2192\uF8FF\u2194 # LeftRightArrow, harr, leftrightarrow
-\u2195 = \u2193\uFFFD\u2191\uF8FF\u2195 # UpDownArrow, updownarrow, varr
-\u21D0 = \u21D0\uFFFD\uFFFD\uF8FF\u21D0 # DoubleLeftArrow, Leftarrow, lArr
-\u21D1 = \u21D1\uFFFD\uFFFD\uF8FF\u21D1 # DoubleUpArrow, Uparrow, uArr
-\u21D2 = \uFFFD\uFFFD\u21D2\uF8FF\u21D2 # DoubleRightArrow, Implies, Rightarrow, rArr
-\u21D3 = \uFFFD\uFFFD\u21D3\uF8FF\u21D3 # DoubleDownArrow, Downarrow, dArr
-\u21D4 = \u21D0\uFFFD\u21D2\uF8FF\u21D4 # DoubleLeftRightArrow, Leftrightarrow, hArr, iff
-\u21D5 = \u21D1\uFFFD\u21D3\uF8FF\u21D5 # DoubleUpDownArrow, Updownarrow, vArr
-\u222B = \u2320\uFFFD\u2321\uF8FF\u222B # Integral, int
-\u230A = \uFFFD\uFFFD\u005B.B\u005B.G\u230A # LeftFloor, lfloor
-\u230B = \uFFFD\uFFFD\u005D.B\u005D.G\u230B # RightFloor, rfloor
deleted file mode 100644
--- a/layout/mathml/base/src/mathfontMath2.properties
+++ /dev/null
@@ -1,93 +0,0 @@
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-# http://www.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is Mozilla MathML Project.
-#
-# The Initial Developer of the Original Code is
-# The University of Queensland.
-# Portions created by the Initial Developer are Copyright (C) 2001
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Roger B. Sidje <rbs@maths.uq.edu.au>
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
-
-# LOCALIZATION NOTE: FILE
-# Do not translate anything in this file
-
-# This file contains the list of all stretchy MathML chars that
-# can be rendered with the indicated mathfont.
-mathfont = Math2
-
-# [ T/L | M | B/R | G | size0 ... size{N-1} ]
-\u0028 = \uF8FF\uFFFD\uF8FF\uF8FF\u0028\uF8FF\uF8FF\uF8FF # (
-\u0029 = \uF8FF\uFFFD\uF8FF\uF8FF\u0029\uF8FF\uF8FF\uF8FF # )
-\u002F = \uFFFD\uFFFD\uFFFD\uFFFD\u002F\uF8FF\uF8FF\uF8FF # /
-\u005B = \uF8FF\uFFFD\uF8FF\uF8FF\u005B\uF8FF\uF8FF\uF8FF # [
-\u005D = \uF8FF\uFFFD\uF8FF\uF8FF\u005D\uF8FF\uF8FF\uF8FF # ]
-\u007B = \uF8FF\uF8FF\uF8FF\uF8FF\u007B\uF8FF\uF8FF\uF8FF # {
-\u007D = \uF8FF\uF8FF\uF8FF\uF8FF\u007D\uF8FF\uF8FF\uF8FF # }
-\u02DC = \uFFFD\uFFFD\uFFFD\uFFFD\u02DC\uF8FF\uF8FF\uF8FF # DiacriticalTilde, tilde
-\u21BC = \u21BC\uFFFD\uFFFD\uF8FF\u21BC # LeftVector, leftharpoonup, lharu
-\u21C0 = \uFFFD\uFFFD\u21C0\uF8FF\u21C0 # RightVector, rharu, rightharpoonup
-\u220F = \uFFFD\uFFFD\uFFFD\uFFFD\u220F\uF8FF\uF8FF # Product, prod
-\u2211 = \uFFFD\uFFFD\uFFFD\uFFFD\u2211\uF8FF\uF8FF # Sum, sum
-\u2216 = \uFFFD\uFFFD\uFFFD\uFFFD\u2216\uF8FF\uF8FF\uF8FF # Backslash, setminus, setmn
-\u221A = \uF8FF\uFFFD\uF8FF\uF8FF\u221A\uF8FF\uF8FF\uF8FF # Sqrt, radic
-\u2223 = \uFFFD\uFFFD\uFFFD\uF8FF\u2223\uF8FF\uF8FF\uF8FF # VerticalBar, mid
-\u2225 = \uFFFD\uFFFD\uFFFD\uF8FF\u2225\uF8FF\uF8FF\uF8FF # DoubleVerticalBar, par, parallel
-\u222B = \uFFFD\uFFFD\uFFFD\uFFFD\u222B\uF8FF\uF8FF # Integral, int
-\u222E = \uFFFD\uFFFD\uFFFD\uFFFD\u222E\uF8FF\uF8FF # ContourIntegral, conint, oint
-\u222F = \uFFFD\uFFFD\uFFFD\uFFFD\u222F\uF8FF\uF8FF # Conint, DoubleContourIntegral
-\u2232 = \uFFFD\uFFFD\uFFFD\uFFFD\u2232\uF8FF\uF8FF # ClockwiseContourIntegral, cwconint
-\u2233 = \uFFFD\uFFFD\uFFFD\uFFFD\u2233\uF8FF\uF8FF # CounterClockwiseContourIntegral, awconint
-\u228E = \uFFFD\uFFFD\uFFFD\uFFFD\u228E\uF8FF\uF8FF # UnionPlus, biguplus, uplus, xuplus
-\u2293 = \uFFFD\uFFFD\uFFFD\uFFFD\u2293\uF8FF\uF8FF # SquareIntersection, sqcap
-\u2294 = \uFFFD\uFFFD\uFFFD\uFFFD\u2294\uF8FF\uF8FF # SquareUnion, bigsqcup, sqcup, xsqcup
-\u22C0 = \uFFFD\uFFFD\uFFFD\uFFFD\u22C0\uF8FF\uF8FF # Wedge, bigwedge, xwedge
-\u22C1 = \uFFFD\uFFFD\uFFFD\uFFFD\u22C1\uF8FF\uF8FF # Vee, bigvee, xvee
-\u22C2 = \uFFFD\uFFFD\uFFFD\uFFFD\u22C2\uF8FF\uF8FF # Intersection, bigcap, xcap
-\u22C3 = \uFFFD\uFFFD\uFFFD\uFFFD\u22C3\uF8FF\uF8FF # Union, bigcup, xcup
-\u2329 = \uFFFD\uFFFD\uFFFD\uFFFD\u2329\uF8FF\uF8FF\uF8FF # LeftAngleBracket, lang, langle
-\u232A = \uFFFD\uFFFD\uFFFD\uFFFD\u232A\uF8FF\uF8FF\uF8FF # RightAngleBracket, rang, rangle
-\u294E = \u21BC\uFFFD\u21C0\uF8FF\u294E # LeftRightVector
-\u2A0D = \uFFFD\uFFFD\uFFFD\uFFFD\u2A0D\uF8FF\uF8FF # fpartint
-\u2A16 = \uFFFD\uFFFD\uFFFD\uFFFD\u2A16\uF8FF\uF8FF # quatint
-\u301A = \uF8FF\uFFFD\uF8FF\uF8FF\u301A\uF8FF\uF8FF\uF8FF # LeftDoubleBracket, lobrk
-\u301B = \uF8FF\uFFFD\uF8FF\uF8FF\u301B\uF8FF\uF8FF\uF8FF # RightDoubleBracket, robrk
-\u2758 = \uFFFD\uFFFD\uFFFD\u2758\u2758\uF8FF\uF8FF\uF8FF # VerticalSeparator
-
-\u2308 = \u005B.T\uFFFD\uFFFD\u005B.G\u2308\uF8FF\uF8FF\uF8FF # LeftCeiling, lceil
-\u2309 = \u005D.T\uFFFD\uFFFD\u005D.G\u2309\uF8FF\uF8FF\uF8FF # RightCeiling, rceil
-\u230A = \uFFFD\uFFFD\u005B.B\u005B.G\u230A\uF8FF\uF8FF\uF8FF # LeftFloor, lfloor
-\u230B = \uFFFD\uFFFD\u005D.B\u005D.G\u230B\uF8FF\uF8FF\uF8FF # RightFloor, rfloor
-
-\u20D6 = \u20D6\uFFFD\uFFFD\uF8FF\u20D6
-\u20D7 = \uFFFD\uFFFD\u20D7\uF8FF\u20D7
-\u20E1 = \u20D6\uFFFD\u20D7\uF8FF\u20E1
-
-#Make Vert behave like DoubleVerticalBar
-\u2016 = \uFFFD\uFFFD\uFFFD\u2225.G\u2016\u2225.1\u2225.2\u2225.3 # Vert, Verbar
deleted file mode 100644
--- a/layout/mathml/base/src/mathfontMath4.properties
+++ /dev/null
@@ -1,110 +0,0 @@
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-# http://www.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is Mozilla MathML Project.
-#
-# The Initial Developer of the Original Code is
-# The University of Queensland.
-# Portions created by the Initial Developer are Copyright (C) 2001
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Roger B. Sidje <rbs@maths.uq.edu.au>
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
-
-# LOCALIZATION NOTE: FILE
-# Do not translate anything in this file
-
-# This file contains the list of all stretchy MathML chars that
-# can be rendered with the indicated mathfont.
-mathfont = Math4
-
-# [ T/L | M | B/R | G | size0 ... size{N-1} ]
-\u02C7 = \uFFFD\uFFFD\uFFFD\uFFFD\u02C7\uF8FF\uF8FF\uF8FF # Hacek, caron
-\u0302 = \uFFFD\uFFFD\uFFFD\uFFFD\u0302\uF8FF\uF8FF\uF8FF # Hat
-\u2190 = \u2190\uFFFD\uFFFD\uF8FF\u2190 # LeftArrow, larr, leftarrow
-\u2192 = \uFFFD\uFFFD\u2192\uF8FF\u2192 # RightArrow, rarr, rightarrow
-\u2194 = \u2190\uFFFD\u2192\uF8FF\u2194 # LeftRightArrow, harr, leftrightarrow
-\u2191 = \u2191\uFFFD\uFFFD\uF8FF\u2191 # UpArrow, uarr, uparrow
-\u2193 = \uFFFD\uFFFD\u2193\uFFFD\u2193 # DownArrow, darr, downarrow
-\u2196 = \uFFFD\uFFFD\uFFFD\uFFFD\u2196\uF8FF # UpperLeftArrow, nwarr, nwarrow
-\u2197 = \uFFFD\uFFFD\uFFFD\uFFFD\u2197\uF8FF # UpperRightArrow, nearr, nearrow
-\u2198 = \uFFFD\uFFFD\uFFFD\uFFFD\u2198\uF8FF # LowerRightArrow, searr, searrow
-\u2199 = \uFFFD\uFFFD\uFFFD\uFFFD\u2199\uF8FF # LowerLeftArrow, swarr, swarrow
-\u21A4 = \u2190.G\uFFFD\uF8FF\uF8FF\u21A4 # LeftTeeArrow, mapstoleft
-\u21A5 = \u2191\uFFFD\uF8FF\u2191.G\u21A5 # UpTeeArrow, mapstoup
-\u21A6 = \uF8FF\uFFFD\uFFFD\uF8FF\u21A6 # RightTeeArrow, map, mapsto
-\u21A7 = \uF8FF\uFFFD\u2193\u2193.G\u21A7 # DownTeeArrow, mapstodown
-\u21A9 = \u2190\uFFFD\uF8FF\u2212\u21A9 # hookleftarrow, larrhk
-\u21AA = \uF8FF\uFFFD\u2192\u2212\u21AA # hookrightarrow, rarrhk
-\u21C4 = \uF8FF\uFFFD\uF8FF\uF8FF\u21C4 # RightArrowLeftArrow, rightleftarrows, rlarr
-\u21C5 = \uF8FF\uFFFD\uF8FF\uF8FF\u21C5 # UpArrowDownArrow, udarr
-\u21C6 = \uF8FF\uFFFD\uF8FF\uF8FF\u21C6 # LeftArrowRightArrow, leftrightarrows, lrarr
-\u21CB = \uF8FF\uFFFD\uF8FF\uF8FF\u21CB # ReverseEquilibrium, leftrightharpoons, lrhar
-\u21CC = \uF8FF\uFFFD\uF8FF\uF8FF\u21CC # Equilibrium, rightleftharpoons, rlhar
-\u21F5 = \uF8FF\uFFFD\uF8FF\uF8FF\u21F5 # DownArrowUpArrow, duarr
-\u23B4 = \uF8FF\uFFFD\uF8FF\uF8FF\u23B4\uF8FF\uF8FF\uF8FF # OverBracket, tbrk
-\u23B5 = \uF8FF\uFFFD\uF8FF\uF8FF\u23B5\uF8FF\uF8FF\uF8FF # UnderBracket, bbrk
-\u295C = \u2191\uFFFD\u21A5.B\u2191.G\u295C # RightUpTeeVector
-\u295D = \u21A7.T\uFFFD\u21C2\u2193.G\u295D # RightDownTeeVector
-\u2960 = \u21BF\uFFFD\u21A5.B\u2191.G\u2960 # LeftUpTeeVector
-\u2961 = \u21A7.T\uFFFD\u21C3\u2191.G\u2961 # LeftDownTeeVector
-\u21C3 = \uFFFD\uFFFD\u21C3\u2191.G\u21C3 # LeftDownVector
-\u2959 = \uFFFD\uFFFD\u2959\u2191.G\u2959 # LeftDownVectorBar
-\u21BF = \u21BF\uFFFD\uFFFD\u2191.G\u21BF # LeftUpVector
-\u2958 = \u2958\uFFFD\uFFFD\u2191.G\u2958 # LeftUpVectorBar
-\u2951 = \u21BF\uFFFD\u21C3\u2191.G\u21BE # LeftUpDownVector
-\u21BE = \u21BE\uFFFD\uFFFD\u2191.G\u21BE # RightUpVector
-\u2954 = \u2954\uFFFD\uFFFD\u2191.G\u2954 # RightUpVectorBar
-\u21C2 = \uFFFD\uFFFD\u21C2\u2191.G\u21C2 # RightDownVector
-\u2955 = \uFFFD\uFFFD\u2955\u2191.G\u2955 # RightDownVectorBar
-\u294F = \u21BE\uFFFD\u21C2\u2191.G\u294F # RightUpDownVector
-\u21BC = \u21BC\uFFFD\uFFFD\uF8FF\u21BC # LeftVector, leftharpoonup, lharu
-\u21C0 = \uFFFD\uFFFD\u21C0\uF8FF\u21C0 # RightVector, rharu, rightharpoonup
-\u2912 = \u2912\uFFFD\uFFFD\u2191.G\u2912 # UpArrowBar
-\u21E4 = \u21E4\uFFFD\uFFFD\u2190.G\u21E4 # LeftArrowBar
-\u21E5 = \uFFFD\uFFFD\u21E5\u2192.G\u21E5 # RightArrowBar
-\u2913 = \uFFFD\uFFFD\u2913\u2193.G\u2913 # DownArrowBar
-\u2953 = \uFFFD\uFFFD\u2953\u2192.G\u2953 # RightVectorBar
-\u295E = \u21BD\uFFFD\u21A4.R\u21A4.G\u295E # DownLeftTeeVector
-\u2956 = \u2956\uFFFD\uFFFD\u2190.G\u2956 # DownLeftVectorBar
-\u2957 = \uFFFD\uFFFD\u2957\u2192.G\u2957 # DownRightVectorBar
-\u295A = \u21BC\uFFFD\u21A4.R\u21A4.G\u295A # LeftTeeVector
-\uFE35 = \uF8FF\uFFFD\uF8FF\uF8FF\uFE35\uF8FF\uF8FF\uF8FF # OverParenthesis
-\uFE36 = \uF8FF\uFFFD\uF8FF\uF8FF\uFE36\uF8FF\uF8FF\uF8FF # UnderParenthesis
-\uFE37 = \uF8FF\uF8FF\uF8FF\uF8FF\uFE37\uF8FF\uF8FF\uF8FF # OverBrace
-\uFE38 = \uF8FF\uF8FF\uF8FF\uF8FF\uFE38\uF8FF\uF8FF\uF8FF # UnderBrace
-
-\uF576 = \u2190\uFFFD\uFFFD\u2190.G\uF576 # LongLeftArrow
-\uF577 = \uFFFD\uFFFD\u2192\u2190.G\uF577 # LongRightArrow
-\uF578 = \u2190\uFFFD\u2192\u2190.G\uF578 # LongLeftRightArrow
-\uF579 = \u21D0\uFFFD\uFFFD\u21D0.G\uF579 # DoubleLongLeftArrow
-\uF57A = \uFFFD\uFFFD\u21D2\u21D0.G\uF57A # DoubleLongRightArrow
-\uF57B = \u21D0\uFFFD\u21D2\u21D0.G\uF57B # DoubleLongLeftRightArrow
-
-#Disabled - they don't align properly
-#\u296E = \uF8FF\uFFFD\uF8FF\uF8FF\u296E # UpEquilibrium, udhar
-#\u296F = \uF8FF\uFFFD\uF8FF\uF8FF\u296F # ReverseUpEquilibrium, duhar
deleted file mode 100644
--- a/layout/mathml/base/src/mathfontPUA.properties
+++ /dev/null
@@ -1,587 +0,0 @@
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-# http://www.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is Mozilla MathML Project.
-#
-# The Initial Developer of the Original Code is
-# The University Of Queensland.
-# Portions created by the Initial Developer are Copyright (C) 2001
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Roger B. Sidje <rbs@maths.uq.edu.au>
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
-
-# LOCALIZATION NOTE: FILE
-# Do not translate anything in this file
-
-# This file contains the list of all MathML assignments to the PUA (the
-# Unicode's Private Use Area 0xE000-0xF8FF). The file is automatically
-# updated by the Perl script encode.pl when processing new MathFont
-# Encoding Tables. Other additions can be made by hand editing.
-# The comments with '>' are *significant*. They guide the Perl
-# script in its automatic processing.
-# See also http://www.mozilla.org/projects/mathml/fonts/encoding/
-
-#>StartSection1#####################################################
-# Assignments for variants and parts of stretchy characters.
-#
-# This list is active during MathML processing, i.e., it is loaded
-# and used to resolve the indirect references made in the
-# MathFont Property Files for glyphs of stretchy characters.
-
-############
-##Predefined (hand-edited) mappings
-
-# Halves of the integral. Although they are not in the PUA, they are
-# placed here so that no assignments are made in the PUA for them
-\u222B.T = \u2320
-\u222B.B = \u2321
-# Mappings from the Adobe' Symbol font that have become defacto
-# standards and are inherited for compatibility
-\u2191.G = \uF8E6
-\u2193.G = \uF8E6
-\u2195.G = \uF8E6
-\u2190.G = \uF8E7
-\u2192.G = \uF8E7
-\u2194.G = \uF8E7
-\u0028.T = \uF8EB
-\u0028.G = \uF8EC
-\u0028.B = \uF8ED
-\u005B.T = \uF8EE
-\u005B.G = \uF8EF
-\u005B.B = \uF8F0
-\u007B.T = \uF8F1
-\u007B.M = \uF8F2
-\u007B.B = \uF8F3
-\u007B.G = \uF8F4
-\u007D.G = \uF8F4
-\u222B.G = \uF8F5
-\u0029.T = \uF8F6
-\u0029.G = \uF8F7
-\u0029.B = \uF8F8
-\u005D.T = \uF8F9
-\u005D.G = \uF8FA
-\u005D.B = \uF8FB
-\u007D.T = \uF8FC
-\u007D.M = \uF8FD
-\u007D.B = \uF8FE
-
-###########
-##Generated mappings
-
-\u21A6.L = \uEFB9
-\u295B.L = \uEFB9
-\u295F.L = \uEFB9
-\u21AA.L = \uEFBA
-\u21A9.R = \uEFBB
-\u0029.4 = \uEFBC
-\u005B.4 = \uEFBD
-\u005D.4 = \uEFBE
-\u230A.4 = \uEFBF
-\u230B.4 = \uEFC0
-\u2308.4 = \uEFC1
-\u2309.4 = \uEFC2
-\u007B.4 = \uEFC3
-\u007D.4 = \uEFC4
-\u3008.4 = \uEFC5
-\u3009.4 = \uEFC6
-\u002F.4 = \uEFC7
-\u2216.4 = \uEFC8
-\u002F.2 = \uEFC9
-\u2216.2 = \uEFCA
-\u3008.2 = \uEFCB
-\u3009.2 = \uEFCC
-\u2294.1 = \uEFCD
-\u2294.2 = \uEFCE
-\u222E.1 = \uEFCF
-\u222E.2 = \uEFD0
-\u2299.1 = \uEFD1
-\u2299.2 = \uEFD2
-\u2295.1 = \uEFD3
-\u2295.2 = \uEFD4
-\u2297.1 = \uEFD5
-\u2297.2 = \uEFD6
-\u2211.1 = \uEFD7
-\u220F.1 = \uEFD8
-\u222B.1 = \uEFD9
-\u22C3.1 = \uEFDA
-\u22C2.1 = \uEFDB
-\u228E.1 = \uEFDC
-\u2227.1 = \uEFDD
-\u2228.1 = \uEFDE
-\u2211.2 = \uEFDF
-\u220F.2 = \uEFE0
-\u222B.2 = \uEFE1
-\u22C3.2 = \uEFE2
-\u22C2.2 = \uEFE3
-\u228E.2 = \uEFE4
-\u2227.2 = \uEFE5
-\u2228.2 = \uEFE6
-\u2210.1 = \uEFE7
-\u2210.2 = \uEFE8
-\u0302.1 = \uEFE9
-\u0302.2 = \uEFEA
-\u0302.3 = \uEFEB
-\u02DC.1 = \uEFEC
-\u02DC.2 = \uEFED
-\u02DC.3 = \uEFEE
-\u005B.2 = \uEFEF
-\u005D.2 = \uEFF0
-\u230A.2 = \uEFF1
-\u230B.2 = \uEFF2
-\u2308.2 = \uEFF3
-\u2309.2 = \uEFF4
-\u007B.2 = \uEFF5
-\u007D.2 = \uEFF6
-\u221A.1 = \uEFF7
-\u221A.2 = \uEFF8
-\u221A.3 = \uEFF9
-\u221A.4 = \uEFFA
-\u221A.B = \uEFFB
-\u221A.G = \uEFFC
-\u221A.T = \uEFFD
-\u21D1.G = \uEFFE
-\u21D3.G = \uEFFE
-\u21D5.G = \uEFFE
-\u2191.T = \uEFFF
-\u2195.T = \uEFFF
-\u2193.B = \uF000
-\u2195.B = \uF000
-\uFE37.L = \uF001
-\uFE37.R = \uF002
-\uFE38.L = \uF003
-\uFE38.R = \uF004
-\u21D1.T = \uF005
-\u21D5.T = \uF005
-\u0028.1 = \uF006
-\u0029.1 = \uF007
-\u005B.1 = \uF008
-\u005D.1 = \uF009
-\u230A.1 = \uF00A
-\u230B.1 = \uF00B
-\u2308.1 = \uF00C
-\u2309.1 = \uF00D
-\u007B.1 = \uF00E
-\u007D.1 = \uF00F
-\u3008.1 = \uF010
-\u3009.1 = \uF011
-\u2223.G = \uF012
-\u2225.G = \uF013
-\u002F.1 = \uF014
-\u2216.1 = \uF015
-\u0028.2 = \uF016
-\u0029.2 = \uF017
-\u0028.3 = \uF018
-\u0029.3 = \uF019
-\u005B.3 = \uF01A
-\u005D.3 = \uF01B
-\u230A.3 = \uF01C
-\u230B.3 = \uF01D
-\u2308.3 = \uF01E
-\u2309.3 = \uF01F
-\u007B.3 = \uF020
-\u007D.3 = \uF021
-\u3008.3 = \uF022
-\u3009.3 = \uF023
-\u002F.3 = \uF024
-\u2216.3 = \uF025
-\u0028.4 = \uF026
-\u21D3.B = \uF027
-\u21D5.B = \uF027
-\u2329.4 = \uF028
-\u232A.4 = \uF029
-\u2329.2 = \uF02A
-\u232A.2 = \uF02B
-\u2329.1 = \uF02C
-\u232A.1 = \uF02D
-\u2329.3 = \uF02E
-\u232A.3 = \uF02F
-\u21D0.G = \uF030
-\u21D2.G = \uF030
-\u21D4.G = \uF030
-#27/03/2001 7:40AM
-\u21CC.L = \uF031
-\u21CC.R = \uF032
-\u21CB.L = \uF033
-\u21CB.R = \uF034
-\u21A4.R = \uF035
-\u21C4.L = \uF036
-\u21C4.R = \uF037
-\u21C6.R = \uF038
-\u21C6.L = \uF039
-\u21A5.B = \uF03A
-\u21A7.T = \uF03B
-\u296E.B = \uF03C
-\u296F.T = \uF03E
-\u296E.T = \uF03F
-\u296F.B = \uF041
-\u21C5.B = \uF042
-\u21F5.T = \uF043
-\u21C5.T = \uF044
-\u21F5.B = \uF045
-\u21CC.G = \uF046
-\u21CB.G = \uF046
-\u21C4.G = \uF046
-\u21C6.G = \uF046
-\u23B4.1 = \uF047
-\u23B4.2 = \uF048
-\u23B4.3 = \uF049
-\u23B4.L = \uF04A
-\u23B4.G = \uF04B
-\u23B4.R = \uF04C
-\u23B5.1 = \uF04D
-\u23B5.2 = \uF04E
-\u23B5.3 = \uF04F
-\u23B5.L = \uF050
-\u23B5.G = \uF051
-\u23B5.R = \uF052
-\u2199.1 = \uF053
-\u2196.1 = \uF054
-\u2197.1 = \uF055
-\u2198.1 = \uF056
-\uFE35.1 = \uF057
-\uFE35.2 = \uF058
-\uFE35.3 = \uF059
-\uFE35.L = \uF05A
-\uFE35.G = \uF05B
-\uFE35.R = \uF05C
-\uFE37.1 = \uF05D
-\uFE37.2 = \uF05E
-\uFE37.3 = \uF05F
-\uFE37.G = \uF060
-\uFE37.M = \uF061
-\uFE36.1 = \uF062
-\uFE36.2 = \uF063
-\uFE36.3 = \uF064
-\uFE36.L = \uF065
-\uFE36.G = \uF066
-\uFE36.R = \uF067
-\uFE38.1 = \uF068
-\uFE38.2 = \uF069
-\uFE38.3 = \uF06A
-\uFE38.G = \uF06B
-\uFE38.M = \uF06C
-\u02C7.1 = \uF06D
-\u02C7.2 = \uF06E
-\u02C7.3 = \uF06F
-\u21A4.G = \uF8E7
-\u21A6.G = \uF8E7
-\u301A.1 = \uF070
-\u301A.2 = \uF071
-\u301A.3 = \uF072
-\u301B.1 = \uF073
-\u301B.2 = \uF074
-\u301B.3 = \uF075
-\u2308.G = \uF076
-\u230A.G = \uF076
-\u2309.G = \uF077
-\u230B.G = \uF077
-\u301A.B = \uF078
-\u301A.G = \uF079
-\u301A.T = \uF07A
-\u301B.B = \uF07B
-\u301B.G = \uF07C
-\u301B.T = \uF07D
-\u2223.1 = \uF07E
-\u2223.2 = \uF07F
-\u2223.3 = \uF080
-\u222F.1 = \uF081
-\u2233.1 = \uF082
-\u2232.1 = \uF083
-\u2A16.1 = \uF084
-\u2293.1 = \uF085
-\u222F.2 = \uF086
-\u2233.2 = \uF087
-\u2232.2 = \uF088
-\u2A16.2 = \uF089
-\u2293.2 = \uF08A
-\u2225.1 = \uF08B
-\u2225.2 = \uF08C
-\u2225.3 = \uF08D
-\u2A0D.1 = \uF08E
-\u2A0D.2 = \uF08F
-\u20D6.G = \uF090
-\u20D7.G = \uF090
-\u20E1.G = \uF090
-\u21BC.G = \uF090
-\u21C0.G = \uF090
-\u294E.G = \uF090
-\u22C1.1 = \uF091
-\u22C1.2 = \uF092
-\u22C0.1 = \uF093
-\u22C0.2 = \uF094
-\u2758.1 = \uF095
-\u2758.2 = \uF096
-\u2758.3 = \uF097
-\u21C5.G = \uF03D
-\u21F5.G = \uF03D
-\u296E.G = \uF040
-\u296F.G = \uF040
-#>EndSection1#######################################################
-
-
-#>StartSection2#####################################################
-# Assignments for entity references.
-#
-# This list is in a commented format so that it doesn't get loaded
-# during MathML rendering. This list is parsed by encode.pl to
-# determine if an entity has already been assigned to the PUA. If
-# so, the PUA code is simply re-used. Otherwise, encode.pl assigns
-# a new PUA code to the entity and updates this list to include the
-# new assignment. In other words, whenever an entity is encountered,
-# while processing a MathFont Encoding Table, it will be attempted
-# to be resolved here, and if the resolution fails, a new assignment
-# to the PUA is made for the entity. The list is subsequently used to
-# customize the MathML DTD used by Mozilla.
-
-##Predefined (hand-edited) mappings
-#
-##From Adobe' Symbol font
-#>\uF8E8 = #Registered sign sans serif, from Symbol [?unknown entity]
-#>\uF8E9 = #Copyright sign sans serif, from Symbol [?unknown entity]
-#>\uF8EA = #Trade mark sign sans serif, from Symbol [?unknown entity]
-#
-##From the MathML REC
-#>\uF558 = loang #LEFT WHITE ANGULAR BRACKET
-#>\uF559 = roang #RIGHT WHITE ANGULAR BRACKET
-#>\uF576 = xlarr, longleftarrow, LongLeftArrow #LONG LEFTWARDS ARROW
-#>\uF577 = xrarr, longrightarrow, LongRightArrow #LONG RIGHTWARDS ARROW
-#>\uF578 = xharr, longleftrightarrow, LongLeftRightArrow #LONG LEFT RIGHT ARROW
-#>\uF579 = xlArr, Longleftarrow, DoubleLongLeftArrow #LONG LEFTWARDS DOUBLE ARROW
-#>\uF57A = xrArr, Longrightarrow, DoubleLongRightArrow #LONG RIGHTWARDS DOUBLE ARROW
-#>\uF57B = xhArr, Longleftrightarrow, DoubleLongLeftRightArrow #LONG LEFT RIGHT DOUBLE ARROW
-#>\uF57D = xmap, longmapsto #LONG RIGHTWARDS ARROW FROM BAR
-#>\uF59B = FilledVerySmallSquare #BLACK VERY SMALL SQUARE
-#>\uF59C = EmptyVerySmallSquare #WHITE VERY SMALL SQUARE
-#>\uF5A2 = dzigrarr #RIGHTWARDS LONG ZIG-ZAG ARROW
-
-##Generated mappings
-#>\uEF06 = thksim, thicksim # 223C-FE00
-#>\uEF07 = nvsim # 2241-0338
-#>\uEF08 = NotEqualTilde, nesim # 2242-0338
-#>\uEF09 = thkap, thickapprox # 2248-FE00
-#>\uEF80 = ofr # 1D52C
-#>\uEF81 = pfr # 1D52D
-#>\uEF82 = qfr # 1D52E
-#>\uEF0A = nvap # 2249-0338
-#>\uEF83 = rfr # 1D52F
-#>\uEF0B = napid # 224B-0338
-#>\uEF84 = sfr # 1D530
-#>\uEF0C = NotHumpDownHump, nbump # 224E-0338
-#>\uEF0D = nbumpe, NotHumpEqual # 224F-0338
-#>\uEF85 = tfr # 1D531
-#>\uEF0E = nedot # 2260-FE00
-#>\uEF86 = ufr # 1D532
-#>\uEF0F = bnequiv # 2261-20E5
-#>\uEF87 = vfr # 1D533
-#>\uEF88 = wfr # 1D534
-#>\uEF89 = xfr # 1D535
-#>\uEF8A = yfr # 1D536
-#>\uEF10 = lvnE, lvertneqq # 2268-FE00
-#>\uEF8B = zfr # 1D537
-#>\uEF11 = gvnE, gvertneqq # 2269-FE00
-#>\uEF8C = Aopf # 1D538
-#>\uEF12 = nLt # 226A-0338
-#>\uEF8D = Bopf # 1D539
-#>\uEF13 = nLtv, NotLessLess # 226A-0338-FE00
-#>\uEF8E = Dopf # 1D53B
-#>\uEF14 = nGt # 226B-0338
-#>\uEF8F = Eopf # 1D53C
-#>\uEF15 = nGtv, NotGreaterGreater # 226B-0338-FE00
-#>\uEF16 = nle, nleq, NotLessEqual # 2270-20E5
-#>\uEF17 = nge, ngeq, NotGreaterEqual # 2271-20E5
-#>\uEF18 = NotSucceedsTilde # 227F-0338
-#>\uEF19 = suphsol # 2283-002F
-#>\uEF90 = Fopf # 1D53D
-#>\uEF91 = Gopf # 1D53E
-#>\uEF92 = Iopf # 1D540
-#>\uEF1A = vsubne, vsubnE, varsubsetneq, varsubsetneqq # 228A-FE00
-#>\uEF93 = Jopf # 1D541
-#>\uEF1B = vsupne, vsupnE, varsupsetneq, varsupsetneqq # 228B-FE00
-#>\uEF1C = NotSquareSubset # 228F-0338
-#>\uEF94 = Kopf # 1D542
-#>\uEF1D = NotSquareSuperset # 2290-0338
-#>\uEF95 = Lopf, imped # 1D543
-#>\uEF1E = sqcaps # 2293-FE00
-#>\uEF96 = Mopf # 1D544
-#>\uEF1F = sqcups # 2294-FE00
-#>\uEF97 = Oopf # 1D546
-#>\uEF98 = Sopf # 1D54A
-#>\uEF99 = Topf # 1D54B
-#>\uEFA0 = bopf # 1D553
-#>\uEFA1 = copf # 1D554
-#>\uEF9A = Uopf # 1D54C
-#>\uEF20 = nLl # 22D8-0338
-#>\uEFA2 = dopf # 1D555
-#>\uEF9B = Vopf # 1D54D
-#>\uEF21 = nGg # 22D9-0338
-#>\uEFA3 = eopf # 1D556
-#>\uEF9C = Wopf # 1D54E
-#>\uEF22 = lesg # 22DA-FE00
-#>\uEFA4 = fopf # 1D557
-#>\uEF9D = Xopf # 1D54F
-#>\uEF23 = gesl # 22DB-FE00
-#>\uEFA5 = gopf # 1D558
-#>\uEF9E = Yopf # 1D550
-#>\uEF24 = nvltrie # 22EC-0338
-#>\uEFA6 = hopf # 1D559
-#>\uEF9F = aopf # 1D552
-#>\uEF25 = nvrtrie # 22ED-0338
-#>\uEFA7 = iopf # 1D55A
-#>\uEF26 = notindot # 22F6-FE00
-#>\uEFA8 = jopf # 1D55B
-#>\uEF27 = ShortUpArrow # 2303-FE00
-#>\uEFA9 = kopf # 1D55C
-#>\uEF28 = ShortDownArrow # 2304-FE00
-#>\uEF29 = NotNestedLessLess # 24A1-0338
-#>\uEFAA = lopf # 1D55D
-#>\uEFAB = mopf # 1D55E
-#>\uEFAC = nopf # 1D55F
-#>\uEF2A = NotNestedGreaterGreater # 24A2-0338
-#>\uEFAD = oopf # 1D560
-#>\uEF2B = nrarrc # 2933-0338
-#>\uEFAE = popf # 1D561
-#>\uEF2C = angrtvb # 299D-FE00
-#>\uEFAF = qopf # 1D562
-#>\uEF2D = NotLeftTriangleBar # 29CF-0338
-#>\uEF2E = NotRightTriangleBar # 29D0-0338
-#>\uEF2F = ncongdot # 2A6D-0338
-#>\uEFB0 = ropf # 1D563
-#>\uEFB1 = sopf # 1D564
-#>\uEF30 = napE # 2A70-0338
-#>\uEFB2 = topf # 1D565
-#>\uEF31 = smtes # 2AAC-FE00
-#>\uEFB3 = uopf # 1D566
-#>\uEF32 = lates # 2AAD-FE00
-#>\uEFB4 = vopf # 1D567
-#>\uEF33 = npre, NotPrecedesEqual, npreceq # 2AAF-0338
-#>\uEFB5 = wopf # 1D568
-#>\uEF34 = nsce, NotSucceedsEqual, nsucceq # 2AB0-0338
-#>\uEFB6 = xopf # 1D569
-#>\uEF35 = Ascr # 1D49C
-#>\uEFB7 = yopf # 1D56A
-#>\uEF36 = Cscr # 1D49E
-#>\uEFB8 = zopf # 1D56B
-#>\uEF37 = Dscr # 1D49F
-#>\uEF38 = Gscr # 1D4A2
-#>\uEF39 = Jscr # 1D4A5
-#>\uEF3A = Kscr # 1D4A6
-#>\uEF3B = Nscr # 1D4A9
-#>\uEF3C = Oscr # 1D4AA
-#>\uEF3D = Pscr # 1D4AB
-#>\uEF3E = Qscr # 1D4AC
-#>\uEF3F = Sscr # 1D4AE
-#>\uEEEE = bne # 003D-20E5
-#>\uEEEF = bsolhsub # 005C-2282
-#>\uEF40 = Tscr # 1D4AF
-#>\uEF41 = Uscr # 1D4B0
-#>\uEEF0 = jmath # 006A-FE00
-#>\uEF42 = Vscr # 1D4B1
-#>\uEEF1 = NegativeThickSpace # 2005-FE00
-#>\uEF43 = Wscr # 1D4B2
-#>\uEEF2 = ThickSpace # 2009-200A-200A
-#>\uEF44 = Xscr # 1D4B3
-#>\uEEF3 = NegativeThinSpace # 2009-FE00
-#>\uEF45 = Yscr # 1D4B4
-#>\uEEF4 = NegativeVeryThinSpace # 200A-FE00
-#>\uEF46 = Zscr # 1D4B5
-#>\uEEF5 = NegativeMediumSpace # 205F-FE00
-#>\uEF47 = ascr # 1D4B6
-#>\uEEF6 = planck, hbar # 210F-FE00
-#>\uEF48 = bscr # 1D4B7
-#>\uEEF7 = slarr, ShortLeftArrow # 2190-FE00
-#>\uEEF8 = srarr, ShortRightArrow # 2192-FE00
-#>\uEF49 = cscr # 1D4B8
-#>\uEEF9 = nrarrw # 219D-0338
-#>\uEF4A = dscr # 1D4B9
-#>\uEF4B = fscr # 1D4BB
-#>\uEEFA = npart # 2202-0338
-#>\uEF4C = hscr # 1D4BD
-#>\uEEFB = empty, emptyset # 2205-FE00
-#>\uEF4D = iscr # 1D4BE
-#>\uEEFC = notinva # 2209-0338
-#>\uEF4E = jscr # 1D4BF
-#>\uEEFD = ssetmn, smallsetminus # 2216-FE00
-#>\uEF4F = kscr # 1D4C0
-#>\uEEFE = nang # 2220-0338
-#>\uEEFF = smid, shortmid # 2223-FE00
-#>\uEF50 = mscr # 1D4C2
-#>\uEF51 = nscr # 1D4C3
-#>\uEF52 = pscr # 1D4C5
-#>\uEF53 = qscr # 1D4C6
-#>\uEF54 = rscr # 1D4C7
-#>\uEF55 = sscr # 1D4C8
-#>\uEF56 = tscr # 1D4C9
-#>\uEF57 = uscr # 1D4CA
-#>\uEF58 = vscr # 1D4CB
-#>\uEF59 = wscr # 1D4CC
-#>\uEF5A = xscr # 1D4CD
-#>\uEF5B = yscr # 1D4CE
-#>\uEF5C = zscr # 1D4CF
-#>\uEF5D = Afr # 1D504
-#>\uEF5E = Bfr # 1D505
-#>\uEF5F = Dfr # 1D507
-#>\uEF60 = Efr # 1D508
-#>\uEF61 = Ffr # 1D509
-#>\uEF62 = Gfr # 1D50A
-#>\uEF63 = Jfr # 1D50D
-#>\uEF64 = Kfr # 1D50E
-#>\uEF65 = Lfr # 1D50F
-#>\uEF66 = Mfr # 1D510
-#>\uEF67 = Nfr # 1D511
-#>\uEF68 = Ofr # 1D512
-#>\uEF69 = Pfr # 1D513
-#>\uEF6A = Qfr # 1D514
-#>\uEF6B = Sfr # 1D516
-#>\uEF6C = Tfr # 1D517
-#>\uEF6D = Ufr # 1D518
-#>\uEF6E = Vfr # 1D519
-#>\uEF6F = Wfr # 1D51A
-#>\uEF70 = Xfr # 1D51B
-#>\uEF71 = Yfr # 1D51C
-#>\uEF72 = afr # 1D51E
-#>\uEF73 = bfr # 1D51F
-#>\uEF74 = cfr # 1D520
-#>\uEF75 = dfr # 1D521
-#>\uEF76 = efr # 1D522
-#>\uEF77 = ffr # 1D523
-#>\uEF78 = gfr # 1D524
-#>\uEF79 = hfr # 1D525
-#>\uEF7A = ifr # 1D526
-#>\uEF00 = nsmid, nshortmid # 2224-FE00
-#>\uEF7B = jfr # 1D527
-#>\uEF01 = spar, parsl, shortparallel # 2225-FE00
-#>\uEF7C = kfr # 1D528
-#>\uEF02 = nparsl # 2225-FE00-20E5
-#>\uEF7D = lfr # 1D529
-#>\uEF03 = nspar, nshortparallel # 2226-FE00
-#>\uEF7E = mfr # 1D52A
-#>\uEF04 = caps # 2229-FE00
-#>\uEF7F = nfr # 1D52B
-#>\uEF05 = cups # 222A-FE00
-#27/03/2001 7:41AM
-#>EndSection2#######################################################
deleted file mode 100644
--- a/layout/mathml/base/src/mathfontSTIXNonUnicode.properties
+++ /dev/null
@@ -1,101 +0,0 @@
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-# http://www.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is Mozilla MathML Project.
-#
-# The Initial Developer of the Original Code is
-# The University of Queensland.
-# Portions created by the Initial Developer are Copyright (C) 2001
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Roger B. Sidje <rbs@maths.uq.edu.au>
-# Karl Tomlinson <karlt+@karlt.net>, Mozilla Corporation
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
-
-# LOCALIZATION NOTE: FILE
-# Do not translate anything in this file
-
-# This file contains the list of some stretchy MathML chars that
-# can be rendered with STIXNonUnicode.
-
-external.1 = STIXGeneral
-
-# [ T/L | M | B/R | G | size0 ... size{N-1} ]
-# E0B4 stix-arrow hookleft
-# E0B5 stix-arrow hookright
-# E10B stix-extender for horizontal solid (normal) arrow
-# E10B in STIXNonUnicode is the same height as U+23AF in STIXGeneral but has a
-# different advance.
-\u21A9 = \u2190@1\uFFFD\uE0B5\uE10B # hookleftarrow, larrhk
-\u21AA = \uE0B4\uFFFD\u2192@1\uE10B # hookrightarrow, rarrhk
-
-# 0E10E stix-stix-extender for vertical double arrow
-# 0E10F stix-extender for horizontal double arrow
-\u21D0 = \u21D0@1\uFFFD\uFFFD\uE10F\uFFFD\u27F8@1 # DoubleLeftArrow, Leftarrow, lArr
-\u21D1 = \u21D1@1\uFFFD\uFFFD\uE10E # DoubleUpArrow, Uparrow, uArr
-\u21D2 = \uFFFD\uFFFD\u21D2@1\uE10F\uFFFD\u27F9@1 # DoubleRightArrow, Implies, Rightarrow, rArr
-\u21D3 = \uFFFD\uFFFD\u21D3@1\uE10E # DoubleDownArrow, Downarrow, dArr
-\u21D4 = \u21D0@1\uFFFD\u21D2@1\uE10F\uFFFD\u27FA@1 # DoubleLeftRightArrow, Leftrightarrow, hArr, iff
-\u21D5 = \u21D1@1\uFFFD\u21D3@1\uE10E # DoubleUpDownArrow, Updownarrow, vArr
-
-# STIXGeneral U+22A2/U+22A3 RIGHT/LEFT TACK are different heights to U+23AF.
-# Could use LONG RIGHT/LEFT TACK instead, but STIXNonUnicode provides
-# E0B6 stix-maps-to-relation tail
-\u21A4 = \u2190@1\uFFFD\uE0B6\uE10B\uFFFD\u27FB@1 # LeftTeeArrow, mapstoleft
-\u21A6 = \uE0B6\uFFFD\u2192@1\uE10B\uFFFD\u27FC@1 # RightTeeArrow, map, mapsto
-\u295A = \u21BC@1\uFFFD\uE0B6\uE10B # LeftTeeVector
-\u295B = \uE0B6\uFFFD\u21C0@1\uE10B # RIGHTWARDS HARPOON WITH BARB UP FROM BAR, RightTeeVector
-\u295E = \u21BD@1\uFFFD\uE0B6\uE10B # DownLeftTeeVector
-\u295F = \uE0B6\uFFFD\u21C1@1\uE10B # RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR, DownRightTeeVector
-
-# E13B stix-left end of extensible overbrace
-# E13C stix-right end of extensible overbrace
-# E13D stix-left end of extensible underbrace
-# E13E stix-right end of extensible underbrace
-# E13F stix-extensible horizontal for curly over and under braces
-# E140 stix-center of extensible overbrace
-# E141 stix-center of extensible underbrace
-# E13F is the wrong height for overbrace:
-# use E14A stix-extensible horizontal for over paren or square bracket
-# U+FE37 and U+FE38 are from the MathML 2.0 spec.
-\uFE37 = \uE13B\uE140\uE13C\uE14A # OverBrace
-\uFE38 = \uE13D\uE141\uE13E\uE13F # UnderBrace
-# Unicode added U+23DE and U+23DF:
-# http://www.unicode.org/reports/tr25/#_TocDelimiters
-\u23DE = \uE13B\uE140\uE13C\uE14A # OverBrace
-\u23DF = \uE13D\uE141\uE13E\uE13F # UnderBrace
-# TODO:
-# E142 stix-left end of extensible overparen (CMEX10 x40 rotated 90deg)
-# E143 stix-right end of extensible overparen (CMEX10 x30 rotated 90deg)
-# E144 stix-left end of extensible underparen (CMEX10 x41 rotated 90deg)
-# E145 stix-right end of extensible underparen (CMEX10 x31 rotated 90deg)
-# E146 stix-left end of extensible over square bracket (CMEX10 x34 rotated 90deg)
-# E147 stix-right end of extensible over square bracket (CMEX10 x32 rotated 90deg)
-# E148 stix-left end of extensible under square bracket (CMEX10 x35 rotated 90deg)
-# E149 stix-right end of extensible under square bracket (CMEX10 x33 rotated 90deg)
-# E14A stix-extensible horizontal for over paren or square bracket (CMEX10 x42 rotated 90deg)
-# E14B stix-extensible horizontal for under paren or square bracket
deleted file mode 100644
--- a/layout/mathml/base/src/mathfontSTIXSize1.properties
+++ /dev/null
@@ -1,64 +0,0 @@
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-# http://www.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is Mozilla MathML Project.
-#
-# The Initial Developer of the Original Code is
-# The University of Queensland.
-# Portions created by the Initial Developer are Copyright (C) 2001
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Roger B. Sidje <rbs@maths.uq.edu.au>
-# Karl Tomlinson <karlt+@karlt.net>, Mozilla Corporation
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
-
-# LOCALIZATION NOTE: FILE
-# Do not translate anything in this file
-
-# This file contains the list of some stretchy MathML chars that
-# can be rendered with STIXSize* set of fonts,
-# with some help from STIXNonUnicode.
-
-external.1 = STIXNonUnicode
-external.2 = STIXSize2
-external.3 = STIXSize3
-external.4 = STIXSize4
-external.5 = STIXSize5
-
-# [ T/L | M | B/R | G | size0 ... size{N-1} ]
-\u0028 = \u239B\uFFFD\u239D\u239C\uFFFD((@2(@3(@4 # (
-\u0029 = \u239E\uFFFD\u23A0\u239F\uFFFD))@2)@3)@4 # )
-\u005B = \u23A1\uFFFD\u23A3\u23A2\u005B[[@2[@3[@4 # [
-\u005D = \u23A4\uFFFD\u23A6\u23A5\u005D]]@2]@3]@4 # ]
-\u007B = \u23A7\u23A8\u23A9\u23AA\u007B{{@2{@3{@4 # {
-\u007D = \u23AB\u23AC\u23AD\u23AA\u007D}}@2}@3}@4 # }
-
-# E000 stix-radical symbol vertical extender
-# E001 stix-radical symbol top corner
-\u221A = \uE001@1\uFFFD\u221A@4\uE000@1\uFFFD\u221A\u221A@2\u221A@3 # Sqrt, radic
-
-\u222B = \u2320\uFFFD\u2321\u23AE\u222B # Integral, int
deleted file mode 100644
--- a/layout/mathml/base/src/mathfontStandardSymbolsL.properties
+++ /dev/null
@@ -1,77 +0,0 @@
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-# http://www.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is Mozilla MathML Project.
-#
-# The Initial Developer of the Original Code is
-# The University of Queensland.
-# Portions created by the Initial Developer are Copyright (C) 2001
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Roger B. Sidje <rbs@maths.uq.edu.au>
-# Karl Tomlinson <karlt+@karlt.net>, Mozilla Corporation
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
-
-# LOCALIZATION NOTE: FILE
-# Do not translate anything in this file
-
-# This file contains the list of all stretchy MathML chars that
-# can be rendered with Standard Symbols L.
-
-# [ T/L | M | B/R | G | size0 ... size{N-1} ]
-\u0028 = \uF8EB\uFFFD\uF8ED\uF8EC\u0028 # (
-\u0029 = \uF8F6\uFFFD\uF8F8\uF8F7\u0029 # )
-\u005B = \uF8EE\uFFFD\uF8F0\uF8EF\u005B # [
-\u005D = \uF8F9\uFFFD\uF8FB\uF8FA\u005D # ]
-\u007B = \uF8F1\uF8F2\uF8F3\uF8F4\u007B # {
-\u007C = \uFFFD\uFFFD\uFFFD\u007C\u007C # |
-\u007D = \uF8FC\uF8FD\uF8FE\uF8F4\u007D # }
-
-\u00AF = \uFFFD\uFFFD\uFFFD\uF8E5\u00AF # ad-hoc: overbar is stretched with the radical extender
-\u0332 = \uFFFD\uFFFD\uFFFD\u005F\u0332 # ad-hock: UnderBar (0x0332) is stretched with underscore
-
-\u2190 = \u2190\uFFFD\uFFFD\uF8E7\u2190 # LeftArrow, larr, leftarrow
-\u2191 = \u2191\uFFFD\uFFFD\uF8E6\u2191 # UpArrow, uarr, uparrow
-\u2192 = \uFFFD\uFFFD\u2192\uF8E7\u2192 # RightArrow, rarr, rightarrow
-\u2193 = \uFFFD\uFFFD\u2193\uF8E6\u2193 # DownArrow, darr, downarrow
-\u2194 = \u2190\uFFFD\u2192\uF8E7\u2194 # LeftRightArrow, harr, leftrightarrow
-\u2195 = \u2191\uFFFD\u2193\uF8E6\u2195 # UpDownArrow, updownarrow, varr
-
-\u222B = \u2320\uFFFD\u2321\uF8F5\u222B # Integral, int
-# If there are problems with the font-supplied glue use a rule:
-# \u222B = \u2320\uFFFD\u2321\uFFFD\u222B # Integral, int
-
-# Using parts of [ and ]
-\u2308 = \uF8EE\uFFFD\uFFFD\uF8EF\u2308 # LeftCeiling, lceil
-\u2309 = \uF8F9\uFFFD\uFFFD\uF8FA\u2309 # RightCeiling, rceil
-\u230A = \uFFFD\uFFFD\uF8F0\uF8EF\u230A # LeftFloor, lfloor
-\u230B = \uFFFD\uFFFD\uF8FB\uF8FA\u230B # RightFloor, rfloor
-
-# same as normal arrows
-\u27F5 = \u2190\uFFFD\uFFFD\uF8E7\u27F5 # LongLeftArrow
-\u27F6 = \uFFFD\uFFFD\u2192\uF8E7\u27F6 # LongRightArrow
-\u27F7 = \u2190\uFFFD\u2192\uF8E7\u27F7 # LongLeftRightArrow
deleted file mode 100644
--- a/layout/mathml/base/src/mathfontSymbol.properties
+++ /dev/null
@@ -1,80 +0,0 @@
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-# http://www.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is Mozilla MathML Project.
-#
-# The Initial Developer of the Original Code is
-# The University of Queensland.
-# Portions created by the Initial Developer are Copyright (C) 2001
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Roger B. Sidje <rbs@maths.uq.edu.au>
-# Karl Tomlinson <karlt+@karlt.net>, Mozilla Corporation
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
-
-# LOCALIZATION NOTE: FILE
-# Do not translate anything in this file
-
-# This file contains the list of all stretchy MathML chars that can be
-# rendered with Monotype's Symbol font.
-#
-# This file should normally only be installed on MS Windows systems as other
-# platforms have different fonts with the same family name but different
-# character codes.
-mathfont = Symbol
-
-# [ T/L | M | B/R | G | size0 ... size{N-1} ]
-\u0028 = \uF0E6\uFFFD\uF0E8\uF0E7\uF028 # (
-\u0029 = \uF0F6\uFFFD\uF0F8\uF0F7\uF029 # )
-\u005B = \uF0E9\uFFFD\uF0EB\uF0EA\uF05B # [
-\u005D = \uF0F9\uFFFD\uF0FB\uF0FA\uF05D # ]
-\u007B = \uF0EC\uF0ED\uF0EE\uF0EF\uF07B # {
-\u007C = \uFFFD\uFFFD\uFFFD\uF07C\uF07C # |
-\u007D = \uF0FC\uF0FD\uF0FE\uF0EF\uF07D # }
-
-\u00AF = \uFFFD\uFFFD\uFFFD\uF060\uF060 # ad-hoc: overbar is stretched with the radical extender
-\u0332 = \uFFFD\uFFFD\uFFFD\uF05F\uF05F # ad-hoc: UnderBar (0x0332) is stretched with underscore
-
-\u2190 = \uF0AC\uFFFD\uFFFD\uF0BE\uF0AC # LeftArrow, larr, leftarrow
-\u2191 = \uF0AD\uFFFD\uFFFD\uF0BD\uF0AD # UpArrow, uarr, uparrow
-\u2192 = \uFFFD\uFFFD\uF0AE\uF0BE\uF0AE # RightArrow, rarr, rightarrow
-\u2193 = \uFFFD\uFFFD\uF0AF\uF0BD\uF0AF # DownArrow, darr, downarrow
-\u2194 = \uF0AC\uFFFD\uF0AE\uF0BE\uF0B4 # LeftRightArrow, harr, leftrightarrow
-\u2195 = \uF0AD\uFFFD\uF0AF\uF0BD # UpDownArrow, updownarrow, varr
-
-\u222B = \uF0F3\uFFFD\uF0F5\uF0F4\uF0F2 # Integral, int
-
-# Using parts of [ and ]
-\u2308 = \uF0E9\uFFFD\uFFFD\uF0EA\uF0E9 # LeftCeiling, lceil
-\u2309 = \uF0F9\uFFFD\uFFFD\uF0FA\uF0F9 # RightCeiling, rceil
-\u230A = \uFFFD\uFFFD\uF0EB\uF0EA\uF0EB # LeftFloor, lfloor
-\u230B = \uFFFD\uFFFD\uF0FB\uF0FA\uF0FB # RightFloor, rfloor
-
-# same as normal arrows
-\u27F5 = \uF0AC\uFFFD\uFFFD\uF0BE # LongLeftArrow
-\u27F6 = \uFFFD\uFFFD\uF0AE\uF0BE # LongRightArrow
-\u27F7 = \uF0AC\uFFFD\uF0AE\uF0BE # LongLeftRightArrow
deleted file mode 100644
--- a/layout/mathml/base/src/mathfontUnicode.properties
+++ /dev/null
@@ -1,123 +0,0 @@
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-# http://www.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is Mozilla MathML Project.
-#
-# The Initial Developer of the Original Code is
-# The University of Queensland.
-# Portions created by the Initial Developer are Copyright (C) 2001
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-# Roger B. Sidje <rbs@maths.uq.edu.au>
-# Karl Tomlinson <karlt+@karlt.net>, Mozilla Corporation
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
-
-# LOCALIZATION NOTE: FILE
-# Do not translate anything in this file
-
-# This file contains the list of all stretchy MathML chars that
-# can be rendered using only Unicode code points.
-
-# [ T/L | M | B/R | G | size0 ... size{N-1} ]
-\u0028 = \u239B\uFFFD\u239D\u239C\u0028 # (
-\u0029 = \u239E\uFFFD\u23A0\u239F\u0029 # )
-\u005B = \u23A1\uFFFD\u23A3\u23A2\u005B # [
-\u005D = \u23A4\uFFFD\u23A6\u23A5\u005D # ]
-\u007B = \u23A7\u23A8\u23A9\u23AA\u007B # {
-\u007C = \uFFFD\uFFFD\uFFFD\u007C\u007C # |
-\u007D = \u23AB\u23AC\u23AD\u23AA\u007D # }
-
-# OverBar is stretched with U+0305 COMBINING OVERLINE which "connects on left and right"
-\u00AF = \uFFFD\uFFFD\uFFFD\u0305\u00AF # OverBar
-#\u0305 doesn't appear to be referenced by the MathML spec
-\u0332 = \uFFFD\uFFFD\uFFFD\u0332\u0332 # COMBINING LOW LINE, UnderBar
-
-\u2016 = \uFFFD\uFFFD\uFFFD\u2016\u2016 # DOUBLE VERTICAL LINE, Vert, Verbar
-
-\u2190 = \u2190\uFFFD\uFFFD\u23AF\u2190\u27F5 # LeftArrow, larr, leftarrow
-\u2191 = \u2191\uFFFD\uFFFD\u23D0\u2191 # UpArrow, uarr, uparrow
-\u2192 = \uFFFD\uFFFD\u2192\u23AF\u2192\u27F6 # RightArrow, rarr, rightarrow
-\u2193 = \uFFFD\uFFFD\u2193\u23D0\u2193 # DownArrow, darr, downarrow
-\u2194 = \u2190\uFFFD\u2192\u23AF\u2194\u27F7 # LeftRightArrow, harr, leftrightarrow
-\u2195 = \u2191\uFFFD\u2193\u23D0\u2195 # UpDownArrow, updownarrow, varr
-
-# For STIXGeneral U+22A2/U+22A3 RIGHT/LEFT TACK are different heights to U+23AF.
-# Could use LONG RIGHT/LEFT TACK instead, but STIXNonUnicode provides
-# E0B6 stix-maps-to-relation tail
-#\u21A4 = \u2190\uFFFD\u27DE\u23AF\u21A6\u27FB # LeftTeeArrow, mapstoleft
-#\u21A6 = \u27DD\uFFFD\u2192\u23AF\u21A6\u27FC # RightTeeArrow, map, mapsto
-#\u295A = \u21BC\uFFFD\u27DE\u23AF\u295A # LeftTeeVector
-#\u295B = \u27DD\uFFFD\u21C0\u23AF\u295B # RIGHTWARDS HARPOON WITH BARB UP FROM BAR, RightTeeVector
-#\u295E = \u21BD\uFFFD\u27DE\u23AF\u295E # DownLeftTeeVector
-#\u295F = \u27DD\uFFFD\u21C1\u23AF\u295F # RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR, DownRightTeeVector
-# Cambria Math does not have U+27DD/U+27DE
-\u21A4 = \u2190\uFFFD\u22A3\u23AF\u21A6\u27FB # LeftTeeArrow, mapstoleft
-\u21A6 = \u22A2\uFFFD\u2192\u23AF\u21A6\u27FC # RightTeeArrow, map, mapsto
-\u295A = \u21BC\uFFFD\u22A3\u23AF\u295A # LeftTeeVector
-\u295B = \u22A2\uFFFD\u21C0\u23AF\u295B # RIGHTWARDS HARPOON WITH BARB UP FROM BAR, RightTeeVector
-\u295E = \u21BD\uFFFD\u22A3\u23AF\u295E # DownLeftTeeVector
-\u295F = \u22A2\uFFFD\u21C1\u23AF\u295F # RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR, DownRightTeeVector
-
-\u21C0 = \uFFFD\uFFFD\u21C0\u23AF\u21C0 # RightVector, rharu, rightharpoonup
-\u21C1 = \uFFFD\uFFFD\u21C1\u23AF\u21C1 # DownRightVector, rhard, rightharpoon down
-\u21BC = \u21BC\uFFFD\uFFFD\u23AF\u21BC # LeftVector, leftharpoonup, lharu
-\u21BD = \u21BD\uFFFD\uFFFD\u23AF\u21BD # DownLeftVector, leftharpoondown, lhard
-\u21D0 = \uFFFD\uFFFD\uFFFD\uFFFD\u21D0\u27F8 # DoubleLeftArrow, Leftarrow, lArr
-\u21D2 = \uFFFD\uFFFD\uFFFD\uFFFD\u21D2\u27F9 # DoubleRightArrow, Implies, Rightarro
-\u21D4 = \uFFFD\uFFFD\uFFFD\uFFFD\u21D4\u27FA # DoubleLeftRightArrow, Leftrightarrow, hArr, iff
-
-# \u221A radical may be made from RADICAL SYMBOL BOTTOM U+23B7 but few fonts
-# support this character and it is not clear what the appropriate vertical
-# glue whould be.
-
-\u2223 = \uFFFD\uFFFD\uFFFD\u2223\u2223 # VerticalBar, mid
-\u2225 = \uFFFD\uFFFD\uFFFD\u2225\u2225 # DoubleVerticalBar, par, parallel
-
-# If fonts have U+23AE INTEGRAL EXTENSION:
-# (STIXSize1, Cambria Math, DejaVu Sans/Serif, Apple's Symbol)
-\u222B = \u2320\uFFFD\u2321\u23AE\u222B # Integral, int
-# Many fonts don't have U+23AE. For these fonts, a rule can be used as glue:
-# \u222B = \u2320\uFFFD\u2321\uFFFD\u222B # Integral, int
-
-# Using parts of [ and ] (could use box drawings instead)
-\u2308 = \u23A1\uFFFD\uFFFD\u23A2\u2308 # LeftCeiling, lceil
-\u2309 = \u23A4\uFFFD\uFFFD\u23A5\u2309 # RightCeiling, rceil
-\u230A = \uFFFD\uFFFD\u23A3\u23A2\u230A # LeftFloor, lfloor
-\u230B = \uFFFD\uFFFD\u23A6\u23A5\u230B # RightFloor, rfloor
-
-# Support for l/r moustache from the parts of lbrace { and rbrace }
-\u23B0 = \u23A7\uFFFD\u23AD\u23AA\u23B0 # lmoustache, lmoust
-\u23B1 = \u23AB\uFFFD\u23A9\u23AA\u23B1 # rmoustache, rmoust
-
-# Using normal arrows as heads instead of long arrows for the sake of
-# Apple's Symbol font.
-\u27F5 = \u2190\uFFFD\uFFFD\u23AF\u27F5 # LongLeftArrow
-\u27F6 = \uFFFD\uFFFD\u2192\u23AF\u27F6 # LongRightArrow
-\u27F7 = \u2190\uFFFD\u2192\u23AF\u27F7 # LongLeftRightArrow
-
-\u294E = \u21BC\uFFFD\u21C0\u23AF\u294E #LEFT BARB UP RIGHT BARB UP HARPOON, LeftRightVector
-\u2950 = \u21BD\uFFFD\u21C1\u23AF\u2950 #LEFT BARB DOWN RIGHT BARB DOWN HARPOON , DownLeftRightVector
deleted file mode 100644
--- a/layout/mathml/base/src/nsIMathMLFrame.h
+++ /dev/null
@@ -1,419 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla MathML Project.
- *
- * The Initial Developer of the Original Code is
- * The University Of Queensland.
- * Portions created by the Initial Developer are Copyright (C) 1999
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Roger B. Sidje <rbs@maths.uq.edu.au>
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either of the GNU General Public License Version 2 or later (the "GPL"),
- * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-//#define SHOW_BOUNDING_BOX 1
-#ifndef nsIMathMLFrame_h___
-#define nsIMathMLFrame_h___
-
-#include "nsIRenderingContext.h"
-#include "nsIFrame.h"
-
-struct nsPresentationData;
-struct nsEmbellishData;
-struct nsHTMLReflowMetrics;
-
-// For MathML, this 'type' will be used to determine the spacing between frames
-// Subclasses can return a 'type' that will give them a particular spacing
-enum eMathMLFrameType {
- eMathMLFrameType_UNKNOWN = -1,
- eMathMLFrameType_Ordinary,
- eMathMLFrameType_OperatorOrdinary,
- eMathMLFrameType_OperatorInvisible,
- eMathMLFrameType_OperatorUserDefined,
- eMathMLFrameType_Inner,
- eMathMLFrameType_ItalicIdentifier,
- eMathMLFrameType_UprightIdentifier,
- eMathMLFrameType_COUNT
-};
-
-// Abstract base class that provides additional methods for MathML frames
-class nsIMathMLFrame
-{
-public:
- NS_DECLARE_FRAME_ACCESSOR(nsIMathMLFrame)
-
- /* SUPPORT FOR PRECISE POSITIONING */
- /*====================================================================*/
-
- /* Metrics that _exactly_ enclose the text of the frame.
- * The frame *must* have *already* being reflowed, before you can call
- * the GetBoundingMetrics() method.
- * Note that for a frame with nested children, the bounding metrics
- * will exactly enclose its children. For example, the bounding metrics
- * of msub is the smallest rectangle that exactly encloses both the
- * base and the subscript.
- */
- NS_IMETHOD
- GetBoundingMetrics(nsBoundingMetrics& aBoundingMetrics) = 0;
-
- NS_IMETHOD
- SetBoundingMetrics(const nsBoundingMetrics& aBoundingMetrics) = 0;
-
- NS_IMETHOD
- GetReference(nsPoint& aReference) = 0;
-
- NS_IMETHOD
- SetReference(const nsPoint& aReference) = 0;
-
- virtual eMathMLFrameType GetMathMLFrameType() = 0;
-
- /* SUPPORT FOR STRETCHY ELEMENTS */
- /*====================================================================*/
-
- /* Stretch :
- * Called to ask a stretchy MathML frame to stretch itself depending
- * on its context.
- *
- * An embellished frame is treated in a special way. When it receives a
- * Stretch() command, it passes the command to its embellished child and
- * the stretched size is bubbled up from the inner-most <mo> frame. In other
- * words, the stretch command descend through the embellished hierarchy.
- *
- * @param aStretchDirection [in] the direction where to attempt to
- * stretch.
- * @param aContainerSize [in] struct that suggests the maximumn size for
- * the stretched frame. Only member data of the struct that are
- * relevant to the direction are used (the rest is ignored).
- * @param aDesiredStretchSize [in/out] On input the current size
- * of the frame, on output the size after stretching.
- */
- NS_IMETHOD
- Stretch(nsIRenderingContext& aRenderingContext,
- nsStretchDirection aStretchDirection,
- nsBoundingMetrics& aContainerSize,
- nsHTMLReflowMetrics& aDesiredStretchSize) = 0;
-
- /* GetEmbellishData/SetEmbellishData :
- * Get/Set the mEmbellishData member variable.
- */
-
- NS_IMETHOD
- GetEmbellishData(nsEmbellishData& aEmbellishData) = 0;
-
- NS_IMETHOD
- SetEmbellishData(const nsEmbellishData& aEmbellishData) = 0;
-
-
- /* SUPPORT FOR SCRIPTING ELEMENTS */
- /*====================================================================*/
-
- /* GetPresentationData/SetPresentationData :
- * Get/Set the mPresentationData member variable.
- */
-
- NS_IMETHOD
- GetPresentationData(nsPresentationData& aPresentationData) = 0;
-
- NS_IMETHOD
- SetPresentationData(const nsPresentationData& aPresentationData) = 0;
-
- /* InheritAutomaticData() / TransmitAutomaticData() :
- * There are precise rules governing each MathML frame and its children.
- * Properties such as the scriptlevel or the embellished nature of a frame
- * depend on those rules. Also, certain properties that we use to emulate
- * TeX rendering rules are frame-dependent too. These two methods are meant
- * to be implemented by frame classes that need to assert specific properties
- * within their subtrees.
- *
- * InheritAutomaticData() is called in a top-down manner [like nsIFrame::Init],
- * as we descend the frame tree, whereas TransmitAutomaticData() is called in a
- * bottom-up manner, as we ascend the tree [like nsIFrame::SetInitialChildList].
- * However, unlike Init() and SetInitialChildList() which are called only once
- * during the life-time of a frame (when initially constructing the frame tree),
- * these two methods are called to build automatic data after the <math>...</math>
- * subtree has been constructed fully, and are called again as we walk a child's
- * subtree to handle dynamic changes that happen in the content model.
- *
- * As a rule of thumb:
- *
- * 1. Use InheritAutomaticData() to set properties related to your ancestors:
- * - set properties that are intrinsic to yourself
- * - set properties that depend on the state that you expect your ancestors
- * to have already reached in their own InheritAutomaticData().
- * - set properties that your descendants assume that you would have set in
- * your InheritAutomaticData() -- this way, they can safely query them and
- * the process will feed upon itself.
- *
- * 2. Use TransmitAutomaticData() to set properties related to your descendants:
- * - set properties that depend on the state that you expect your descendants
- * to have reached upon processing their own TransmitAutomaticData().
- * - transmit properties that your descendants expect that you will transmit to
- * them in your TransmitAutomaticData() -- this way, they remain up-to-date.
- * - set properties that your ancestors expect that you would set in your
- * TransmitAutomaticData() -- this way, they can safely query them and the
- * process will feed upon itself.
- */
-
- NS_IMETHOD
- InheritAutomaticData(nsIFrame* aParent) = 0;
-
- NS_IMETHOD
- TransmitAutomaticData() = 0;
-
- /* UpdatePresentationData :
- * Updates the frame's displaystyle and compression flags. The displaystyle
- * flag of an environment gets updated according to the MathML specification.
- * A frame becomes "compressed" (or "cramped") according to TeX rendering
- * rules (TeXBook, Ch.17, p.140-141).
- *
- * Note that <mstyle> is the only tag which allows to set
- * <mstyle displaystyle="true|false">
- * Therefore <mstyle> has its own peculiar version of this method.
- *
- * @param aFlagsValues [in]
- * The new values (e.g., display, compress) that are going to be
- * updated.
- *
- * @param aWhichFlags [in]
- * The flags that are relevant to this call. Since not all calls
- * are meant to update all flags at once, aWhichFlags is used
- * to distinguish flags that need to retain their existing values
- * from flags that need to be turned on (or turned off). If a bit
- * is set in aWhichFlags, then the corresponding value (which
- * can be 0 or 1) is taken from aFlagsValues and applied to the
- * frame. Therefore, by setting their bits in aWhichFlags, and
- * setting their desired values in aFlagsValues, it is possible to
- * update some flags in the frame, leaving the other flags unchanged.
- */
- NS_IMETHOD
- UpdatePresentationData(PRUint32 aFlagsValues,
- PRUint32 aWhichFlags) = 0;
-
- /* UpdatePresentationDataFromChildAt :
- * Sets displaystyle and compression flags on the whole tree. For child frames
- * at aFirstIndex up to aLastIndex, this method sets their displaystyle and
- * compression flags. The update is propagated down the subtrees of each of
- * these child frames.
- *
- * Note that <mstyle> is the only tag which allows
- * <mstyle displaystyle="true|false">
- * Therefore <mstyle> has its own peculiar version of this method.
- *
- * @param aFirstIndex [in]
- * Index of the first child from where the update is propagated.
- *
- * @param aLastIndex [in]
- * Index of the last child where to stop the update.
- * A value of -1 means up to last existing child.
- *
- * @param aFlagsValues [in]
- * The new values (e.g., display, compress) that are going to be
- * assigned in the whole sub-trees.
- *
- * @param aWhichFlags [in]
- * The flags that are relevant to this call. See UpdatePresentationData()
- * for more details about this parameter.
- */
- NS_IMETHOD
- UpdatePresentationDataFromChildAt(PRInt32 aFirstIndex,
- PRInt32 aLastIndex,
- PRUint32 aFlagsValues,
- PRUint32 aWhichFlags) = 0;
-};
-
-// struct used by a container frame to keep track of its embellishments.
-// By convention, the data that we keep here is bubbled from the embellished
-// hierarchy, and it remains unchanged unless we have to recover from a change
-// that occurs in the embellished hierarchy. The struct remains in its nil
-// state in those frames that are not part of the embellished hierarchy.
-struct nsEmbellishData {
- // bits used to mark certain properties of our embellishments
- PRUint32 flags;
-
- // pointer on the <mo> frame at the core of the embellished hierarchy
- nsIFrame* coreFrame;
-
- // stretchy direction that the nsMathMLChar owned by the core <mo> supports
- nsStretchDirection direction;
-
- // spacing that may come from <mo> depending on its 'form'. Since
- // the 'form' may also depend on the position of the outermost
- // embellished ancestor, the set up of these values may require
- // looking up the position of our ancestors.
- nscoord leftSpace;
- nscoord rightSpace;
-
- nsEmbellishData() {
- flags = 0;
- coreFrame = nsnull;
- direction = NS_STRETCH_DIRECTION_UNSUPPORTED;
- leftSpace = 0;
- rightSpace = 0;
- }
-};
-
-// struct used by a container frame to modulate its presentation.
-// By convention, the data that we keep in this struct can change depending
-// on any of our ancestors and/or descendants. If a data can be resolved
-// solely from the embellished hierarchy, and it remains immutable once
-// resolved, we put it in |nsEmbellishData|. If it can be affected by other
-// things, it comes here. This struct is updated as we receive information
-// transmitted by our ancestors and is kept in sync with changes in our
-// descendants that affects us.
-struct nsPresentationData {
- // bits for: displaystyle, compressed, etc
- PRUint32 flags;
-
- // handy pointer on our base child (the 'nucleus' in TeX), but it may be
- // null here (e.g., tags like <mrow>, <mfrac>, <mtable>, etc, won't
- // pick a particular child in their child list to be the base)
- nsIFrame* baseFrame;
-
- // up-pointer on the mstyle frame, if any, that defines the scope
- nsIFrame* mstyle;
-
- nsPresentationData() {
- flags = 0;
- baseFrame = nsnull;
- mstyle = nsnull;
- }
-};
-
-// ==========================================================================
-// Bits used for the presentation flags -- these bits are set
-// in their relevant situation as they become available
-
-// This bit is set if the frame is in the *context* of displaystyle=true.
-// Note: This doesn't mean that the frame has displaystyle=true as attribute,
-// the displaystyle attribute is only allowed on <mstyle> and <mtable>.
-// The bit merely tells the context of the frame. In the context of
-// displaystyle="false", it is intended to slightly alter how the
-// rendering is done in inline mode.
-#define NS_MATHML_DISPLAYSTYLE 0x00000001U
-
-// This bit is used to emulate TeX rendering.
-// Internal use only, cannot be set by the user with an attribute.
-#define NS_MATHML_COMPRESSED 0x00000002U
-
-// This bit is set if the frame will fire a vertical stretch
-// command on all its (non-empty) children.
-// Tags like <mrow> (or an inferred mrow), mpadded, etc, will fire a
-// vertical stretch command on all their non-empty children
-#define NS_MATHML_STRETCH_ALL_CHILDREN_VERTICALLY 0x00000004U
-
-// This bit is set if the frame will fire a horizontal stretch
-// command on all its (non-empty) children.
-// Tags like munder, mover, munderover, will fire a
-// horizontal stretch command on all their non-empty children
-#define NS_MATHML_STRETCH_ALL_CHILDREN_HORIZONTALLY 0x00000008U
-
-// This bit is set if the frame has the explicit attribute
-// displaystyle="true" or "false". It is only relevant to <mstyle> and <mtable>
-// because they are the only tags where the attribute is allowed by the spec.
-#define NS_MATHML_EXPLICIT_DISPLAYSTYLE 0x00000020U
-
-// This bit is set when the frame cannot be formatted due to an
-// error (e.g., invalid markup such as a <msup> without an overscript).
-// When set, a visual feedback will be provided to the user.
-#define NS_MATHML_ERROR 0x80000000U
-
-// a bit used for debug
-#define NS_MATHML_STRETCH_DONE 0x20000000U
-
-// This bit is used for visual debug. When set, the bounding box
-// of your frame is painted. This visual debug enable to ensure that
-// you have properly filled your mReference and mBoundingMetrics in
-// Place().
-#define NS_MATHML_SHOW_BOUNDING_METRICS 0x10000000U
-
-// Macros that retrieve those bits
-
-#define NS_MATHML_IS_DISPLAYSTYLE(_flags) \
- (NS_MATHML_DISPLAYSTYLE == ((_flags) & NS_MATHML_DISPLAYSTYLE))
-
-#define NS_MATHML_IS_COMPRESSED(_flags) \
- (NS_MATHML_COMPRESSED == ((_flags) & NS_MATHML_COMPRESSED))
-
-#define NS_MATHML_WILL_STRETCH_ALL_CHILDREN_VERTICALLY(_flags) \
- (NS_MATHML_STRETCH_ALL_CHILDREN_VERTICALLY == ((_flags) & NS_MATHML_STRETCH_ALL_CHILDREN_VERTICALLY))
-
-#define NS_MATHML_WILL_STRETCH_ALL_CHILDREN_HORIZONTALLY(_flags) \
- (NS_MATHML_STRETCH_ALL_CHILDREN_HORIZONTALLY == ((_flags) & NS_MATHML_STRETCH_ALL_CHILDREN_HORIZONTALLY))
-
-#define NS_MATHML_HAS_EXPLICIT_DISPLAYSTYLE(_flags) \
- (NS_MATHML_EXPLICIT_DISPLAYSTYLE == ((_flags) & NS_MATHML_EXPLICIT_DISPLAYSTYLE))
-
-#define NS_MATHML_HAS_ERROR(_flags) \
- (NS_MATHML_ERROR == ((_flags) & NS_MATHML_ERROR))
-
-#define NS_MATHML_STRETCH_WAS_DONE(_flags) \
- (NS_MATHML_STRETCH_DONE == ((_flags) & NS_MATHML_STRETCH_DONE))
-
-#define NS_MATHML_PAINT_BOUNDING_METRICS(_flags) \
- (NS_MATHML_SHOW_BOUNDING_METRICS == ((_flags) & NS_MATHML_SHOW_BOUNDING_METRICS))
-
-// ==========================================================================
-// Bits used for the embellish flags -- these bits are set
-// in their relevant situation as they become available
-
-// This bit is set if the frame is an embellished operator.
-#define NS_MATHML_EMBELLISH_OPERATOR 0x00000001
-
-// This bit is set if the frame is an <mo> frame or an embellihsed
-// operator for which the core <mo> has movablelimits="true"
-#define NS_MATHML_EMBELLISH_MOVABLELIMITS 0x00000002
-
-// This bit is set if the frame is an <mo> frame or an embellihsed
-// operator for which the core <mo> has accent="true"
-#define NS_MATHML_EMBELLISH_ACCENT 0x00000004
-
-// This bit is set if the frame is an <mover> or <munderover> with
-// an accent frame
-#define NS_MATHML_EMBELLISH_ACCENTOVER 0x00000008
-
-// This bit is set if the frame is an <munder> or <munderover> with
-// an accentunder frame
-#define NS_MATHML_EMBELLISH_ACCENTUNDER 0x00000010
-
-// Macros that retrieve those bits
-
-#define NS_MATHML_IS_EMBELLISH_OPERATOR(_flags) \
- (NS_MATHML_EMBELLISH_OPERATOR == ((_flags) & NS_MATHML_EMBELLISH_OPERATOR))
-
-#define NS_MATHML_EMBELLISH_IS_MOVABLELIMITS(_flags) \
- (NS_MATHML_EMBELLISH_MOVABLELIMITS == ((_flags) & NS_MATHML_EMBELLISH_MOVABLELIMITS))
-
-#define NS_MATHML_EMBELLISH_IS_ACCENT(_flags) \
- (NS_MATHML_EMBELLISH_ACCENT == ((_flags) & NS_MATHML_EMBELLISH_ACCENT))
-
-#define NS_MATHML_EMBELLISH_IS_ACCENTOVER(_flags) \
- (NS_MATHML_EMBELLISH_ACCENTOVER == ((_flags) & NS_MATHML_EMBELLISH_ACCENTOVER))
-
-#define NS_MATHML_EMBELLISH_IS_ACCENTUNDER(_flags) \
- (NS_MATHML_EMBELLISH_ACCENTUNDER == ((_flags) & NS_MATHML_EMBELLISH_ACCENTUNDER))
-
-#endif /* nsIMathMLFrame_h___ */
deleted file mode 100644
--- a/layout/mathml/base/src/nsMathMLChar.cpp
+++ /dev/null
@@ -1,2627 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla MathML Project.
- *
- * The Initial Developer of the Original Code is
- * The University Of Queensland.
- * Portions created by the Initial Developer are Copyright (C) 1999
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Roger B. Sidje <rbs@maths.uq.edu.au>
- * Shyjan Mahamud <mahamud@cs.cmu.edu>
- * Karl Tomlinson <karlt+@karlt.net>, Mozilla Corporation
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either of the GNU General Public License Version 2 or later (the "GPL"),
- * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-#include "nsCOMPtr.h"
-#include "nsFrame.h"
-#include "nsPresContext.h"
-#include "nsStyleContext.h"
-#include "nsStyleConsts.h"
-#include "nsString.h"
-#include "nsUnicharUtils.h"
-#include "nsIRenderingContext.h"
-#include "gfxPlatform.h"
-#include "nsIFontMetrics.h"
-
-#include "nsIPrefBranch.h"
-#include "nsIPrefService.h"
-#include "nsISupportsPrimitives.h"
-#include "nsIComponentManager.h"
-#include "nsIPersistentProperties2.h"
-#include "nsIServiceManager.h"
-#include "nsIObserverService.h"
-#include "nsIObserver.h"
-#include "nsNetUtil.h"
-
-#include "nsILookAndFeel.h"
-#include "nsIDeviceContext.h"
-#include "nsCSSRendering.h"
-#include "prprf.h" // For PR_snprintf()
-
-#if ALERT_MISSING_FONTS
-#include "nsIDOMWindow.h"
-#include "nsINonBlockingAlertService.h"
-#include "nsIWindowWatcher.h"
-#include "nsIStringBundle.h"
-#endif
-#include "nsDisplayList.h"
-
-#include "nsMathMLOperators.h"
-#include "nsMathMLChar.h"
-
-//#define SHOW_BORDERS 1
-//#define NOISY_SEARCH 1
-
-// -----------------------------------------------------------------------------------
-static const PRUnichar kSpaceCh = PRUnichar(' ');
-static const nsGlyphCode kNullGlyph = {0, 0};
-typedef enum {eExtension_base, eExtension_variants, eExtension_parts}
- nsMathfontPrefExtension;
-
-// -----------------------------------------------------------------------------------
-// nsGlyphTable is a class that provides an interface for accessing glyphs
-// of stretchy chars. It acts like a table that stores the variants of bigger
-// sizes (if any) and the partial glyphs needed to build extensible symbols.
-// An instance of nsGlyphTable is associated to one primary font. Extra glyphs
-// can be taken in other additional fonts when stretching certain characters.
-// These supplementary fonts are referred to as "external" fonts to the table.
-//
-// A char for which nsGlyphTable::Has(aChar) is true means that the table
-// contains some glyphs (bigger and/or partial) that can be used to render
-// the char. Bigger sizes (if any) of the char can then be retrieved with
-// BigOf(aSize). Partial glyphs can be retrieved with TopOf(), GlueOf(), etc.
-//
-// A table consists of "nsGlyphCode"s which are viewed either as Unicode
-// points or as direct glyph indices, depending on the type of the table.
-// XXX The latter is not yet supported.
-
-// General format of MathFont Property Files from which glyph data are retrieved:
-// -----------------------------------------------------------------------------------
-// Each font should have its set of glyph data. For example, the glyph data for
-// the "Symbol" font and the "MT Extra" font are in "mathfontSymbol.properties"
-// and "mathfontMTExtra.properties", respectively. The mathfont property file is a
-// set of all the stretchy MathML characters that can be rendered with that font
-// using larger and/or partial glyphs. The entry of each stretchy character in the
-// mathfont property file gives, in that order, the 4 partial glyphs: Top (or Left),
-// Middle, Bottom (or Right), Glue; and the variants of bigger sizes (if any).
-// A position that is not relevant to a particular character is indicated there
-// with the UNICODE REPLACEMENT CHARACTER 0xFFFD.
-// Characters that need to be built recursively from other characters are said
-// to be composite. For example, chars like over/underbrace in CMEX10 have to
-// be built from two half stretchy chars and joined in the middle (TeXbook, p.225).
-// Such chars are handled in a special manner by the nsMathMLChar class, which allows
-// several (2 or more) child chars to be composed in order to render another char.
-// To specify such chars, their list of glyphs in the property file should be given
-// as space-separated segments of glyphs. Each segment gives the 4 partial
-// glyphs with which to build the child char that will be joined with its other
-// siblings. In this code, when this situation happens (see the detailed description
-// of Stretch() below), the original char (referred to as "parent") creates a
-// singly-linked list of child chars, asking them to stretch in an equally divided
-// space. The nsGlyphTable embeds the necessary logic to guarantee correctness in a
-// recursive stretch (and in the use of TopOf(), GlueOf(), etc) on these child chars.
-// -----------------------------------------------------------------------------------
-
-#define NS_TABLE_TYPE_UNICODE 0
-#define NS_TABLE_TYPE_GLYPH_INDEX 1
-
-#define NS_TABLE_STATE_ERROR -1
-#define NS_TABLE_STATE_EMPTY 0
-#define NS_TABLE_STATE_READY 1
-
-// helper to check if a font is installed
-static PRBool
-CheckFontExistence(nsPresContext* aPresContext, const nsString& aFontName)
-{
- PRBool aliased;
- nsAutoString localName;
- nsIDeviceContext *deviceContext = aPresContext->DeviceContext();
- deviceContext->GetLocalFontName(aFontName, localName, aliased);
- // XXXkt CheckFontExistence always returns NS_OK.
- PRBool rv = (aliased || (NS_OK == deviceContext->CheckFontExistence(localName)));
- // (see bug 35824 for comments about the aliased localName)
- return rv;
-}
-
-#if ALERT_MISSING_FONTS
-// alert the user if some of the needed MathML fonts are not installed.
-// it is non-modal (i.e., it doesn't wait for input from the user)
-static void
-AlertMissingFonts(nsString& aMissingFonts)
-{
- nsCOMPtr<nsIStringBundleService> sbs(do_GetService(NS_STRINGBUNDLE_CONTRACTID));
- if (!sbs)
- return;
-
- nsCOMPtr<nsIStringBundle> sb;
- sbs->CreateBundle("resource://gre/res/fonts/mathfont.properties", getter_AddRefs(sb));
- if (!sb)
- return;
-
- nsXPIDLString title, message;
- const PRUnichar* strings[] = { aMissingFonts.get() };
- sb->GetStringFromName(NS_LITERAL_STRING("mathfont_missing_dialog_title").get(), getter_Copies(title));
- sb->FormatStringFromName(NS_LITERAL_STRING("mathfont_missing_dialog_message").get(),
- strings, 1, getter_Copies(message));
-
- nsCOMPtr<nsIWindowWatcher> wwatch(do_GetService(NS_WINDOWWATCHER_CONTRACTID));
- if (!wwatch)
- return;
-
- nsCOMPtr<nsIDOMWindow> parent;
- wwatch->GetActiveWindow(getter_AddRefs(parent));
- nsresult rv;
- nsCOMPtr<nsINonBlockingAlertService> prompter =
- do_GetService("@mozilla.org/embedcomp/nbalert-service;1", &rv);
-
- if (prompter && parent) {
- prompter->ShowNonBlockingAlert(parent, title.get(), message.get());
- }
-}
-#endif
-
-// helper to trim off comments from data in a MathFont Property File
-static void
-Clean(nsString& aValue)
-{
- // chop the trailing # comment portion if any ...
- PRInt32 comment = aValue.RFindChar('#');
- if (comment > 0) aValue.Truncate(comment);
- aValue.CompressWhitespace();
-}
-
-// helper to load a MathFont Property File
-static nsresult
-LoadProperties(const nsString& aName,
- nsCOMPtr<nsIPersistentProperties>& aProperties)
-{
- nsAutoString uriStr;
- uriStr.AssignLiteral("resource://gre/res/fonts/mathfont");
- uriStr.Append(aName);
- uriStr.StripWhitespace(); // that may come from aName
- uriStr.AppendLiteral(".properties");
- return NS_LoadPersistentPropertiesFromURISpec(getter_AddRefs(aProperties),
- NS_ConvertUTF16toUTF8(uriStr));
-}
-
-// -----------------------------------------------------------------------------------
-
-class nsGlyphTable {
-public:
- explicit nsGlyphTable(const nsString& aPrimaryFontName)
- : mType(NS_TABLE_TYPE_UNICODE),
- mFontName(1), // ensure space for primary font name.
- mState(NS_TABLE_STATE_EMPTY),
- mCharCache(0)
- {
- MOZ_COUNT_CTOR(nsGlyphTable);
- mFontName.AppendElement(aPrimaryFontName);
- }
-
- ~nsGlyphTable() // not a virtual destructor: this class is not intended to be subclassed
- {
- MOZ_COUNT_DTOR(nsGlyphTable);
- }
-
- const nsAString& PrimaryFontName() const
- {
- return mFontName[0];
- }
-
- const nsAString& FontNameFor(const nsGlyphCode& aGlyphCode) const
- {
- return mFontName[aGlyphCode.font];
- }
-
- // True if this table contains some glyphs (variants and/or parts)
- // or contains child chars that can be used to render this char
- PRBool Has(nsPresContext* aPresContext, nsMathMLChar* aChar);
-
- // True if this table contains variants of larger sizes to render this char
- PRBool HasVariantsOf(nsPresContext* aPresContext, nsMathMLChar* aChar);
-
- // True if this table contains parts (or composite parts) to render this char
- PRBool HasPartsOf(nsPresContext* aPresContext, nsMathMLChar* aChar);
-
- // True if aChar is to be assembled from other child chars in this table
- PRBool IsComposite(nsPresContext* aPresContext, nsMathMLChar* aChar);
-
- // The number of child chars to assemble in order to render aChar
- PRInt32 ChildCountOf(nsPresContext* aPresContext, nsMathMLChar* aChar);
-
- // Getters for the parts
- nsGlyphCode TopOf(nsPresContext* aPresContext, nsMathMLChar* aChar) {
- return ElementAt(aPresContext, aChar, 0);
- }
- nsGlyphCode MiddleOf(nsPresContext* aPresContext, nsMathMLChar* aChar) {
- return ElementAt(aPresContext, aChar, 1);
- }
- nsGlyphCode BottomOf(nsPresContext* aPresContext, nsMathMLChar* aChar) {
- return ElementAt(aPresContext, aChar, 2);
- }
- nsGlyphCode GlueOf(nsPresContext* aPresContext, nsMathMLChar* aChar) {
- return ElementAt(aPresContext, aChar, 3);
- }
- nsGlyphCode BigOf(nsPresContext* aPresContext, nsMathMLChar* aChar, PRInt32 aSize) {
- return ElementAt(aPresContext, aChar, 4 + aSize);
- }
- nsGlyphCode LeftOf(nsPresContext* aPresContext, nsMathMLChar* aChar) {
- return ElementAt(aPresContext, aChar, 0);
- }
- nsGlyphCode RightOf(nsPresContext* aPresContext, nsMathMLChar* aChar) {
- return ElementAt(aPresContext, aChar, 2);
- }
-
-private:
- nsGlyphCode ElementAt(nsPresContext* aPresContext, nsMathMLChar* aChar, PRUint32 aPosition);
-
- // The type is either NS_TABLE_TYPE_UNICODE or NS_TABLE_TYPE_GLYPH_INDEX
- PRInt32 mType;
-
- // mFontName[0] is the primary font associated to this table. The others
- // are possible "external" fonts for glyphs not in the primary font
- // but which are needed to stretch certain characters in the table
- nsTArray<nsString> mFontName;
-
- // Tri-state variable for error/empty/ready
- PRInt32 mState;
-
- // The set of glyph data in this table, as provided by the MathFont Property File
- nsCOMPtr<nsIPersistentProperties> mGlyphProperties;
-
- // For speedy re-use, we always cache the last data used in the table.
- // mCharCache is the Unicode point of the last char that was queried in this
- // table. mGlyphCache is a buffer containing the glyph data associated to
- // that char. For a property line 'key = value' in the MathFont Property File,
- // mCharCache will retain the 'key' -- which is a Unicode point, while mGlyphCache
- // will retain the 'value', which is a consecutive list of nsGlyphCodes, i.e.,
- // the pairs of 'code@font' needed by the char -- in which 'code@0' can be specified
- // without the optional '@0'. However, to ease subsequent processing, mGlyphCache
- // excludes the '@' symbol and explicitly inserts all optional '0' that indicates
- // the primary font identifier. Specifically therefore, the k-th glyph is
- // characterized by :
- // 1) mGlyphCache[2*k] : its Unicode point (or glyph index -- depending on mType),
- // 2) mGlyphCache[2*k+1] : the numeric identifier of the font where it comes from.
- // A font identifier of '0' means the default primary font associated to this
- // table. Other digits map to the "external" fonts that may have been specified
- // in the MathFont Property File.
- nsString mGlyphCache;
- PRUnichar mCharCache;
-};
-
-nsGlyphCode
-nsGlyphTable::ElementAt(nsPresContext* aPresContext, nsMathMLChar* aChar, PRUint32 aPosition)
-{
- if (mState == NS_TABLE_STATE_ERROR) return kNullGlyph;
- // Load glyph properties if this is the first time we have been here
- if (mState == NS_TABLE_STATE_EMPTY) {
- nsresult rv = LoadProperties(mFontName[0], mGlyphProperties);
-#ifdef NS_DEBUG
- nsCAutoString uriStr;
- uriStr.AssignLiteral("resource://gre/res/fonts/mathfont");
- LossyAppendUTF16toASCII(mFontName[0], uriStr);
- uriStr.StripWhitespace(); // that may come from mFontName
- uriStr.AppendLiteral(".properties");
- printf("Loading %s ... %s\n",
- uriStr.get(),
- (NS_FAILED(rv)) ? "Failed" : "Done");
-#endif
- if (NS_FAILED(rv)) {
- mState = NS_TABLE_STATE_ERROR; // never waste time with this table again
- return kNullGlyph;
- }
- mState = NS_TABLE_STATE_READY;
-
- // see if there are external fonts needed for certain chars in this table
- nsCAutoString key;
- nsAutoString value;
- for (PRInt32 i = 1; ; i++) {
- key.AssignLiteral("external.");
- key.AppendInt(i, 10);
- rv = mGlyphProperties->GetStringProperty(key, value);
- if (NS_FAILED(rv)) break;
- Clean(value);
- mFontName.AppendElement(value); // i.e., mFontName[i] holds this font name
- }
- }
-
- // If aChar is a child char to be used by a parent composite char, make
- // sure that it is really attached to this table
- if (aChar->mParent && (aChar->mGlyphTable != this)) return kNullGlyph;
-
- // Update our cache if it is not associated to this character
- PRUnichar uchar = aChar->mData[0];
- if (mCharCache != uchar) {
- // The key in the property file is interpreted as ASCII and kept
- // as such ...
- char key[10]; PR_snprintf(key, sizeof(key), "\\u%04X", uchar);
- nsAutoString value;
- nsresult rv = mGlyphProperties->GetStringProperty(nsDependentCString(key), value);
- if (NS_FAILED(rv)) return kNullGlyph;
- Clean(value);
- // See if this char uses external fonts; e.g., if the 2nd glyph is taken from the
- // external font '1', the property line looks like \uNNNN = \uNNNN\uNNNN@1\uNNNN.
- // This is where mGlyphCache is pre-processed to explicitly store all glyph codes
- // as combined pairs of 'code@font', excluding the '@' separator. This means that
- // mGlyphCache[2*k] will later be rendered with mFontName[mGlyphCache[2*k+1]]
- // Note: font identifier is internally an ASCII digit to avoid the null char issue
- nsAutoString buffer;
- PRInt32 length = value.Length();
- PRInt32 i = 0; // index in value
- PRInt32 j = 0; // part/variant index
- while (i < length) {
- PRUnichar code = value[i];
- ++i;
- PRUnichar font = 0;
- // see if we are at the beginning of a child char
- if (code == kSpaceCh) {
- // reset the annotation indicator to be 0 for the next code point
- j = -1;
- }
-#if 0 // If we want this then the nsGlyphTableList must be declared
- // or the UnicodeTable could be made a global.
- // See if this code point is an *indirect reference* to the Unicode
- // table and lookup the code there.
- else if (code == PRUnichar(0xF8FF) && gGlyphTableList &&
- this != &gGlyphTableList->mUnicodeTable) {
- code = gGlyphTableList->mUnicodeTable.
- ElementAt(aPresContext, aChar, aPosition).code;
- }
- // see if this code point is a *direct reference* to
- // the Unicode table, and lookup the [TLMBRG1-9] position for code.
- else if ((i+1 < length) && (value[i] == PRUnichar('.'))) {
- ++i;
- // Need to implement this if we want it:
- // Set (new) code from the value[i] position for (current) code.
- if (1)
- return kNullGlyph;
- ++i;
- }
-#endif
- // See if an external font is needed for the code point.
- // Limit of 9 external fonts
- if (i+1 < length && value[i] == PRUnichar('@') &&
- value[i+1] >= PRUnichar('0') && value[i+1] <= PRUnichar('9')) {
- ++i;
- font = value[i] - '0';
- ++i;
- if (font >= mFontName.Length()) {
- NS_ERROR("Non-existant font referenced in glyph table");
- return kNullGlyph;
- }
- // The char cannot be handled if this font is not installed
- if (!mFontName[font].Length() || !CheckFontExistence(aPresContext, mFontName[font])) {
- return kNullGlyph;
- }
- }
- buffer.Append(code);
- buffer.Append(font);
- ++j;
- }
- // update our cache with the new settings
- mGlyphCache.Assign(buffer);
- mCharCache = uchar;
- }
-
- // If aChar is a composite char, only its children are allowed
- // to use its glyphs in this table, i.e., the parent char itself
- // is disabled and cannot be stretched directly with these glyphs.
- // This guarantees a coherent behavior in Stretch().
- if (!aChar->mParent && (kNotFound != mGlyphCache.FindChar(kSpaceCh))) {
- return kNullGlyph;
- }
-
- // If aChar is a child char, the index of the glyph is relative to
- // the offset of the list of glyphs corresponding to the child char.
- PRUint32 offset = 0;
- PRUint32 length = mGlyphCache.Length();
- if (aChar->mParent) {
- nsMathMLChar* child = aChar->mParent->mSibling;
- // XXXkt composite chars can't have size variants
- while (child && (child != aChar)) {
- offset += 5; // skip the 4 partial glyphs + the whitespace separator
- child = child->mSibling;
- }
- length = 2*(offset + 4); // stay confined in the 4 partial glyphs of this child
- }
- PRUint32 index = 2*(offset + aPosition); // 2* is to account for the code@font pairs
- if (index+1 >= length) return kNullGlyph;
- nsGlyphCode ch;
- ch.code = mGlyphCache.CharAt(index);
- ch.font = mGlyphCache.CharAt(index + 1);
- return (ch.code == PRUnichar(0xFFFD)) ? kNullGlyph : ch;
-}
-
-PRBool
-nsGlyphTable::IsComposite(nsPresContext* aPresContext, nsMathMLChar* aChar)
-{
- // there is only one level of recursion in our model. a child
- // cannot be composite because it cannot have its own children
- if (aChar->mParent) return PR_FALSE;
- // shortcut to sync the cache with this char...
- mCharCache = 0; mGlyphCache.Truncate(); ElementAt(aPresContext, aChar, 0);
- // the cache remained empty if the char wasn't found in this table
- if (8 >= mGlyphCache.Length()) return PR_FALSE;
- // the lists of glyphs of a composite char are space-separated
- return (kSpaceCh == mGlyphCache.CharAt(8));
-}
-
-PRInt32
-nsGlyphTable::ChildCountOf(nsPresContext* aPresContext, nsMathMLChar* aChar)
-{
- // this will sync the cache as well ...
- if (!IsComposite(aPresContext, aChar)) return 0;
- // the lists of glyphs of a composite char are space-separated
- return 1 + mGlyphCache.CountChar(kSpaceCh);
-}
-
-PRBool
-nsGlyphTable::Has(nsPresContext* aPresContext, nsMathMLChar* aChar)
-{
- return HasVariantsOf(aPresContext, aChar) || HasPartsOf(aPresContext, aChar);
-}
-
-PRBool
-nsGlyphTable::HasVariantsOf(nsPresContext* aPresContext, nsMathMLChar* aChar)
-{
- //XXXkt all variants must be in the same file as size 1
- return BigOf(aPresContext, aChar, 1).Exists();
-}
-
-PRBool
-nsGlyphTable::HasPartsOf(nsPresContext* aPresContext, nsMathMLChar* aChar)
-{
- return GlueOf(aPresContext, aChar).Exists() ||
- TopOf(aPresContext, aChar).Exists() ||
- BottomOf(aPresContext, aChar).Exists() ||
- MiddleOf(aPresContext, aChar).Exists() ||
- IsComposite(aPresContext, aChar);
-}
-
-// -----------------------------------------------------------------------------------
-// This is the list of all the applicable glyph tables.
-// We will maintain a single global instance that will only reveal those
-// glyph tables that are associated to fonts currently installed on the
-// user' system. The class is an XPCOM shutdown observer to allow us to
-// free its allocated data at shutdown
-
-class nsGlyphTableList : public nsIObserver
-{
-public:
- NS_DECL_ISUPPORTS
- NS_DECL_NSIOBSERVER
-
- nsGlyphTable mUnicodeTable;
-
- nsGlyphTableList()
- : mUnicodeTable(NS_LITERAL_STRING("Unicode"))
- {
- MOZ_COUNT_CTOR(nsGlyphTableList);
- }
-
- virtual ~nsGlyphTableList()
- {
- MOZ_COUNT_DTOR(nsGlyphTableList);
- }
-
- nsresult Initialize();
- nsresult Finalize();
-
- // Add a glyph table in the list, return the new table that was added
- nsGlyphTable*
- AddGlyphTable(const nsString& aPrimaryFontName);
-
- // Find a glyph table in the list that has a glyph for the given char
- nsGlyphTable*
- GetGlyphTableFor(nsPresContext* aPresContext,
- nsMathMLChar* aChar);
-
- // Find the glyph table in the list corresponding to the given font family.
- nsGlyphTable*
- GetGlyphTableFor(const nsAString& aFamily);
-
-private:
- nsGlyphTable* TableAt(PRInt32 aIndex) {
- return &mTableList.ElementAt(aIndex);
- }
- PRInt32 Count() {
- return mTableList.Length();
- }
-
- // List of glyph tables;
- nsTArray<nsGlyphTable> mTableList;
-};
-
-NS_IMPL_ISUPPORTS1(nsGlyphTableList, nsIObserver)
-
-// -----------------------------------------------------------------------------------
-// Here is the global list of applicable glyph tables that we will be using
-static nsGlyphTableList* gGlyphTableList = nsnull;
-
-static PRBool gInitialized = PR_FALSE;
-
-// XPCOM shutdown observer
-NS_IMETHODIMP
-nsGlyphTableList::Observe(nsISupports* aSubject,
- const char* aTopic,
- const PRUnichar* someData)
-{
- Finalize();
- return NS_OK;
-}
-
-// Add an observer to XPCOM shutdown so that we can free our data at shutdown
-nsresult
-nsGlyphTableList::Initialize()
-{
- nsresult rv;
- nsCOMPtr<nsIObserverService> obs =
- do_GetService("@mozilla.org/observer-service;1", &rv);
- NS_ENSURE_SUCCESS(rv, rv);
-
- rv = obs->AddObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID, PR_FALSE);
- NS_ENSURE_SUCCESS(rv, rv);
-
- return NS_OK;
-}
-
-// Remove our observer and free the memory that were allocated for us
-nsresult
-nsGlyphTableList::Finalize()
-{
- // Remove our observer from the observer service
- nsresult rv = NS_OK;
- nsCOMPtr<nsIObserverService> obs =
- do_GetService("@mozilla.org/observer-service;1", &rv);
- if (NS_SUCCEEDED(rv)) {
- rv = obs->RemoveObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID);
- }
- gInitialized = PR_FALSE;
- // our oneself will be destroyed when our |Release| is called by the observer
- return rv;
-}
-
-nsGlyphTable*
-nsGlyphTableList::AddGlyphTable(const nsString& aPrimaryFontName)
-{
- // See if there is already a special table for this family.
- nsGlyphTable* glyphTable = GetGlyphTableFor(aPrimaryFontName);
- if (glyphTable != &mUnicodeTable)
- return glyphTable;
-
- // allocate a table
- glyphTable = mTableList.AppendElement(aPrimaryFontName);
- return glyphTable;
-}
-
-nsGlyphTable*
-nsGlyphTableList::GetGlyphTableFor(nsPresContext* aPresContext,
- nsMathMLChar* aChar)
-{
- if (mUnicodeTable.Has(aPresContext, aChar))
- return &mUnicodeTable;
-
- PRInt32 i;
- for (i = 0; i < Count(); i++) {
- nsGlyphTable* glyphTable = TableAt(i);
- if (glyphTable->Has(aPresContext, aChar)) {
- return glyphTable;
- }
- }
- return nsnull;
-}
-
-nsGlyphTable*
-nsGlyphTableList::GetGlyphTableFor(const nsAString& aFamily)
-{
- for (PRInt32 i = 0; i < Count(); i++) {
- nsGlyphTable* glyphTable = TableAt(i);
- const nsAString& fontName = glyphTable->PrimaryFontName();
- // TODO: would be nice to consider StripWhitespace and other aliasing
- if (fontName.Equals(aFamily, nsCaseInsensitiveStringComparator())) {
- return glyphTable;
- }
- }
- // Fall back to default Unicode table
- return &mUnicodeTable;
-}
-
-// -----------------------------------------------------------------------------------
-
-// retrieve a pref value set by the user
-static PRBool
-GetPrefValue(nsIPrefBranch* aPrefBranch, const char* aPrefKey, nsString& aPrefValue)
-{
- aPrefValue.Truncate();
- if (aPrefBranch) {
- nsCOMPtr<nsISupportsString> prefString;
- aPrefBranch->GetComplexValue(aPrefKey,
- NS_GET_IID(nsISupportsString),
- getter_AddRefs(prefString));
- if (prefString) {
- prefString->GetData(aPrefValue);
- }
- }
- return !aPrefValue.IsEmpty();
-}
-
-// Lookup the preferences:
-// "font.mathfont-family.\uNNNN.base" -- fonts for the base size
-// "font.mathfont-family.\uNNNN.variants" -- fonts for larger glyphs
-// "font.mathfont-family.\uNNNN.parts" -- fonts for partial glyphs
-// Given the char code and mode of stretch, retrieve the preferred extension
-// font families.
-static PRBool
-GetFontExtensionPref(nsIPrefBranch* aPrefBranch, PRUnichar aChar,
- nsMathfontPrefExtension aExtension, nsString& aValue)
-{
- // initialize OUT param
- aValue.Truncate();
-
- // We are going to try two keys because some users specify their pref as
- // user_pref("font.mathfont-family.\uNNNN.base", "...") rather than
- // user_pref("font.mathfont-family.\\uNNNN.base", "...").
- // The \uNNNN in the former is interpreted as an UTF16 escape sequence by
- // JavaScript and is converted to the internal UTF8 string that JavaScript uses.
- // But clueless users who are not savvy of JavaScript have no idea as to what
- // is going on and are baffled as to why their pref setting is not working.
- // So to save countless explanations, we are going to support both keys.
-
- static const char* kMathFontPrefix = "font.mathfont-family.";
-
- nsCAutoString extension;
- switch (aExtension)
- {
- case eExtension_base:
- extension.AssignLiteral(".base");
- case eExtension_variants:
- extension.AssignLiteral(".variants");
- case eExtension_parts:
- extension.AssignLiteral(".parts");
- default:
- return PR_FALSE;
- }
-
- // .\\uNNNN key
- nsCAutoString key;
- key.AssignASCII(kMathFontPrefix);
- char ustr[10];
- PR_snprintf(ustr, sizeof(ustr), "\\u%04X", aChar);
- key.Append(ustr);
- key.Append(extension);
- // .\uNNNN key
- nsCAutoString alternateKey;
- alternateKey.AssignASCII(kMathFontPrefix);
- NS_ConvertUTF16toUTF8 tmp(&aChar, 1);
- key.Append(tmp);
- key.Append(extension);
-
- return GetPrefValue(aPrefBranch, key.get(), aValue) ||
- GetPrefValue(aPrefBranch, alternateKey.get(), aValue);
-}
-
-#if ALERT_MISSING_FONTS
-struct MathFontEnumContext {
- nsPresContext* mPresContext;
- nsString* mMissingFamilyList;
-};
-#endif
-
-static PRBool
-MathFontEnumCallback(const nsString& aFamily, PRBool aGeneric, void *aData)
-{
-#if ALERT_MISSING_FONTS
- // check if the font is missing
- MathFontEnumContext* context = (MathFontEnumContext*)aData;
- nsPresContext* presContext = context->mPresContext;
- nsString* missingFamilyList = context->mMissingFamilyList;
- if (!CheckFontExistence(presContext, aFamily)) {
-//#ifndef _WIN32
- // XXX In principle, the mathfont-family list in the mathfont.properties file
- // is customizable depending on the platform. For now, this is here since there
- // is no need to alert Linux users about TrueType fonts specific to Windows.
- if (aFamily.LowerCaseEqualsLiteral("mt extra"))
- return PR_TRUE; // continue to try other fonts
-//#endif
- if (!missingFamilyList->IsEmpty()) {
- missingFamilyList->AppendLiteral(", ");
- }
- missingFamilyList->Append(aFamily);
- }
-#endif
-
- if (!gGlyphTableList->AddGlyphTable(aFamily))
- return PR_FALSE; // stop in low-memory situations
- return PR_TRUE; // don't stop
-}
-
-static nsresult
-InitGlobals(nsPresContext* aPresContext)
-{
- NS_ASSERTION(!gInitialized, "Error -- already initialized");
- gInitialized = PR_TRUE;
- PRUint32 count = nsMathMLOperators::CountStretchyOperator();
- if (!count) {
- // nothing to stretch, so why bother...
- return NS_OK;
- }
-
- // Allocate the placeholders for the preferred parts and variants
- nsresult rv = NS_ERROR_OUT_OF_MEMORY;
- gGlyphTableList = new nsGlyphTableList();
- if (gGlyphTableList) {
- rv = gGlyphTableList->Initialize();
- }
- if (NS_FAILED(rv)) {
- delete gGlyphTableList;
- gGlyphTableList = nsnull;
- return rv;
- }
- /*
- else
- The gGlyphTableList has been successfully registered as a shutdown observer.
- It will be deleted at shutdown, even if a failure happens below.
- */
-
- nsCAutoString key;
- nsAutoString value;
- nsCOMPtr<nsIPersistentProperties> mathfontProp;
- nsCOMPtr<nsIPrefBranch> prefBranch(do_GetService(NS_PREFSERVICE_CONTRACTID));
-
- // Add the math fonts in the gGlyphTableList in order of preference ...
- // Note: we only load font-names at this stage. The actual glyph tables will
- // be loaded lazily (see nsGlyphTable::ElementAt()).
-
- // Load the "mathfont.properties" file
- value.Truncate();
- rv = LoadProperties(value, mathfontProp);
- if (NS_FAILED(rv)) return rv;
-
- // Get the list of mathfonts having special glyph tables to be used for
- // stretchy characters.
- // We just want to iterate over the font-family list using the
- // callback mechanism that nsFont has...
- nsFont font("", 0, 0, 0, 0, 0, 0);
- NS_NAMED_LITERAL_CSTRING(defaultKey, "font.mathfont-glyph-tables");
- rv = mathfontProp->GetStringProperty(defaultKey, font.name);
- if (NS_FAILED(rv)) return rv;
-
- // Parse the font list and append an entry for each family to gGlyphTableList
- nsAutoString missingFamilyList;
-
-#if ALERT_MISSING_FONTS
- // We don't really need all these fonts, so alerting on some missing is not
- // right. The best place to alert would be Stretch when we notice that we
- // can't get the char we want. In this way the user would not be alerted
- // unnecessarily when the document contains only simple math. The alert
- // also needs a "don't tell me again box".
- MathFontEnumContext context = {aPresContext, &missingFamilyList};
- font.EnumerateFamilies(MathFontEnumCallback, &context);
- // alert the user if some of the expected fonts are missing
- if (!missingFamilyList.IsEmpty()) {
- AlertMissingFonts(missingFamilyList);
- }
-#else
- font.EnumerateFamilies(MathFontEnumCallback, nsnull);
-#endif
- return rv;
-}
-
-// -----------------------------------------------------------------------------------
-// And now the implementation of nsMathMLChar
-
-nsStyleContext*
-nsMathMLChar::GetStyleContext() const
-{
- NS_ASSERTION(!mParent, "invalid call - not allowed for child chars");
- NS_ASSERTION(mStyleContext, "chars shoud always have style context");
- return mStyleContext;
- return NS_OK;
-}
-
-void
-nsMathMLChar::SetStyleContext(nsStyleContext* aStyleContext)
-{
- NS_ASSERTION(!mParent, "invalid call - not allowed for child chars");
- NS_PRECONDITION(aStyleContext, "null ptr");
- if (aStyleContext != mStyleContext) {
- if (mStyleContext)
- mStyleContext->Release();
- if (aStyleContext) {
- mStyleContext = aStyleContext;
- aStyleContext->AddRef();
-
- // Sync the pointers of child chars.
- nsMathMLChar* child = mSibling;
- while (child) {
- child->mStyleContext = mStyleContext;
- child = child->mSibling;
- }
- }
- }
-}
-
-void
-nsMathMLChar::SetData(nsPresContext* aPresContext,
- nsString& aData)
-{
- NS_ASSERTION(!mParent, "invalid call - not allowed for child chars");
- if (!gInitialized) {
- InitGlobals(aPresContext);
- }
- mData = aData;
- // some assumptions until proven otherwise
- // note that mGlyph is not initialized
- mOperator = -1;
- mDirection = NS_STRETCH_DIRECTION_UNSUPPORTED;
- mBoundingMetrics.Clear();
- mGlyphTable = nsnull;
- // check if stretching is applicable ...
- if (gGlyphTableList && (1 == mData.Length())) {
- mOperator = nsMathMLOperators::FindStretchyOperator(mData[0]);
- if (mOperator >= 0) {
- mDirection = nsMathMLOperators::GetStretchyDirectionAt(mOperator);
- // default tentative table (not the one that is necessarily going to be used)
- mGlyphTable = gGlyphTableList->GetGlyphTableFor(aPresContext, this);
- // commom case: we won't bother with the stretching if there is
- // no glyph table for us...
- if (!mGlyphTable) { // TODO: consider scaling the base char
- // never try to stretch this operator again
- nsMathMLOperators::DisableStretchyOperatorAt(mOperator);
- mDirection = NS_STRETCH_DIRECTION_UNSUPPORTED;
- mOperator = -1;
- }
- }
- }
-}
-
-// -----------------------------------------------------------------------------------
-/*
- The Stretch:
- @param aContainerSize - suggested size for the stretched char
- @param aDesiredStretchSize - OUT parameter. The desired size
- after stretching. If no stretching is done, the output will
- simply give the base size.
-
- How it works?
- Summary:-
- The Stretch() method first looks for a glyph of appropriate
- size; If a glyph is found, it is cached by this object and
- its size is returned in aDesiredStretchSize. The cached
- glyph will then be used at the painting stage.
- If no glyph of appropriate size is found, a search is made
- to see if the char can be built by parts.
-
- Details:-
- A character gets stretched through the following pipeline :
-
- 1) If the base size of the char is sufficient to cover the
- container' size, we use that. If not, it will still be
- used as a fallback if the other stages in the pipeline fail.
- Issues :
- a) The base size, the parts and the variants of a char can
- be in different fonts. For eg., the base size for '(' should
- come from a normal ascii font if CMEX10 is used, since CMEX10
- only contains the stretched versions. Hence, there are two
- style contexts in use throughout the process. The leaf style
- context of the char holds fonts with which to try to stretch
- the char. The parent style context of the char contains fonts
- for normal rendering. So the parent context is the one used
- to get the initial base size at the start of the pipeline.
- b) For operators that can be largeop's in display mode,
- we will skip the base size even if it fits, so that
- the next stage in the pipeline is given a chance to find
- a largeop variant. If the next stage fails, we fallback
- to the base size.
-
- 2) We search for the first larger variant of the char that fits the
- container' size. We first search for larger variants using the glyph
- table corresponding to the first existing font specified in the list of
- stretchy fonts held by the leaf style context (from -moz-math-stretchy in
- mathml.css). Generic fonts are resolved by the preference
- "font.mathfont-family".
- Issues :
- a) the largeop and display settings determine the starting
- size when we do the above search, regardless of whether
- smaller variants already fit the container' size.
- b) if it is a largeopOnly request (i.e., a displaystyle operator
- with largeop=true and stretchy=false), we break after finding
- the first starting variant, regardless of whether that
- variant fits the container's size.
-
- 3) If a variant of appropriate size wasn't found, we see if the char
- can be built by parts using the same glyph table.
- Issues:
- a) Certain chars like over/underbrace in CMEX10 have to be built
- from two half stretchy chars and joined in the middle. Such
- chars are handled in a special manner. When this situation is
- detected, the initial char (referred to as "parent") creates a
- singly-linked list of child chars, asking them to stretch in
- a divided space. A convention is used in the setup of
- nsGlyphTable to express that a composite parent char can be built
- from child chars.
- b) There are some chars that have no middle and glue glyphs. For
- such chars, the parts need to be joined using the rule.
- By convention (TeXbook p.225), the descent of the parts is
- zero while their ascent gives the thickness of the rule that
- should be used to join them.
-
- 4) If a match was not found in that glyph table, repeat from 2 to search the
- ordered list of stretchy fonts for the first font with a glyph table that
- provides a fit to the container size. If no fit is found, the closest fit
- is used.
-
- Of note:
- When the pipeline completes successfully, the desired size of the
- stretched char can actually be slighthly larger or smaller than
- aContainerSize. But it is the responsibility of the caller to
- account for the spacing when setting aContainerSize, and to leave
- any extra margin when placing the stretched char.
-*/
-// -----------------------------------------------------------------------------------
-
-
-// plain TeX settings (TeXbook p.152)
-#define NS_MATHML_DELIMITER_FACTOR 0.901f
-#define NS_MATHML_DELIMITER_SHORTFALL_POINTS 5.0f
-
-static PRBool
-IsSizeOK(nsPresContext* aPresContext, nscoord a, nscoord b, PRUint32 aHint)
-{
- // Normal: True if 'a' is around +/-10% of the target 'b' (10% is
- // 1-DelimiterFactor). This often gives a chance to the base size to
- // win, especially in the context of <mfenced> without tall elements
- // or in sloppy markups without protective <mrow></mrow>
- PRBool isNormal =
- (aHint & NS_STRETCH_NORMAL)
- && PRBool(float(PR_ABS(a - b))
- < (1.0f - NS_MATHML_DELIMITER_FACTOR) * float(b));
- // Nearer: True if 'a' is around max{ +/-10% of 'b' , 'b' - 5pt },
- // as documented in The TeXbook, Ch.17, p.152.
- // i.e. within 10% and within 5pt
- PRBool isNearer = PR_FALSE;
- if (aHint & (NS_STRETCH_NEARER | NS_STRETCH_LARGEOP)) {
- float c = PR_MAX(float(b) * NS_MATHML_DELIMITER_FACTOR,
- float(b) - aPresContext->PointsToAppUnits(NS_MATHML_DELIMITER_SHORTFALL_POINTS));
- isNearer = PRBool(float(PR_ABS(b - a)) <= (float(b) - c));
- }
- // Smaller: Mainly for transitory use, to compare two candidate
- // choices
- PRBool isSmaller =
- (aHint & NS_STRETCH_SMALLER)
- && PRBool((float(a) >= (NS_MATHML_DELIMITER_FACTOR * float(b)))
- && (a <= b));
- // Larger: Critical to the sqrt code to ensure that the radical
- // size is tall enough
- PRBool isLarger =
- (aHint & (NS_STRETCH_LARGER | NS_STRETCH_LARGEOP))
- && PRBool(a >= b);
- return (isNormal || isSmaller || isNearer || isLarger);
-}
-
-static PRBool
-IsSizeBetter(nscoord a, nscoord olda, nscoord b, PRUint32 aHint)
-{
- if (0 == olda)
- return PR_TRUE;
- if (aHint & (NS_STRETCH_LARGER | NS_STRETCH_LARGEOP))
- return (a >= olda) ? (olda < b) : (a >= b);
- if (aHint & NS_STRETCH_SMALLER)
- return (a <= olda) ? (olda > b) : (a <= b);
-
- // XXXkt prob want log scale here i.e. 1.5 is closer to 1 than 0.5
- return PR_ABS(a - b) < PR_ABS(olda - b);
-}
-
-// We want to place the glyphs even when they don't fit at their
-// full extent, i.e., we may clip to tolerate a small amount of
-// overlap between the parts. This is important to cater for fonts
-// with long glues.
-static nscoord
-ComputeSizeFromParts(nsPresContext* aPresContext,
- nsGlyphCode* aGlyphs,
- nscoord* aSizes,
- nscoord aTargetSize)
-{
- enum {first, middle, last, glue};
- // Add the parts that cannot be left out.
- nscoord sum = 0;
- for (PRInt32 i = first; i <= last; i++) {
- if (aGlyphs[i] != aGlyphs[glue]) {
- sum += aSizes[i];
- }
- }
-
- // Determine how much is used in joins
- nscoord oneDevPixel = aPresContext->AppUnitsPerDevPixel();
- PRInt32 joins = aGlyphs[middle] == aGlyphs[glue] ? 1 : 2;
-
- // Pick a maximum size using a maximum number of glue glyphs that we are
- // prepared to draw for one character.
- const PRInt32 maxGlyphs = 1000;
-
- // This also takes into account the fact that, if the glue has no size,
- // then the character can't be lengthened.
- nscoord maxSize = sum - 2 * joins * oneDevPixel + maxGlyphs * aSizes[glue];
- if (maxSize < aTargetSize)
- return maxSize; // settle with the maximum size
-
- // Get the minimum allowable size using some flex.
- nscoord minSize = NSToCoordRound(NS_MATHML_DELIMITER_FACTOR * sum);
-
- if (minSize > aTargetSize)
- return minSize; // settle with the minimum size
-
- // Fill-up the target area
- return aTargetSize;
-}
-
-// Insert aFallbackFamilies before the first generic family in or at the end
-// of a CSS aFontName.
-static void
-AddFallbackFonts(nsAString& aFontName, const nsAString& aFallbackFamilies)
-{
- if (aFallbackFamilies.IsEmpty())
- return;
-
- if (aFontName.IsEmpty()) {
- return;
- }
-
- static const PRUnichar kSingleQuote = PRUnichar('\'');
- static const PRUnichar kDoubleQuote = PRUnichar('\"');
- static const PRUnichar kComma = PRUnichar(',');
-
- const PRUnichar *p_begin, *p_end;
- aFontName.BeginReading(p_begin);
- aFontName.EndReading(p_end);
-
- const PRUnichar *p = p_begin;
- const PRUnichar *p_name = nsnull;
- while (p < p_end) {
- while (nsCRT::IsAsciiSpace(*p))
- if (++p == p_end)
- goto insert;
-
- p_name = p;
- if (*p == kSingleQuote || *p == kDoubleQuote) {
- // quoted font family
- PRUnichar quoteMark = *p;
- if (++p == p_end)
- goto insert;
-
- // XXX What about CSS character escapes?
- while (*p != quoteMark)
- if (++p == p_end)
- goto insert;
-
- while (++p != p_end && *p != kComma)
- /* nothing */ ;
-
- } else {
- // unquoted font family
- const PRUnichar *nameStart = p;
- while (++p != p_end && *p != kComma)
- /* nothing */ ;
-
- nsAutoString family;
- family = Substring(nameStart, p);
- family.CompressWhitespace(PR_FALSE, PR_TRUE);
-
- PRUint8 generic;
- nsFont::GetGenericID(family, &generic);
- if (generic != kGenericFont_NONE)
- goto insert;
- }
-
- ++p; // may advance past p_end
- }
-
- aFontName.Append(NS_LITERAL_STRING(",") + aFallbackFamilies);
- return;
-
-insert:
- if (p_name) {
- aFontName.Insert(aFallbackFamilies + NS_LITERAL_STRING(","),
- p_name - p_begin);
- }
- else { // whitespace or empty
- aFontName = aFallbackFamilies;
- }
-}
-
-// Update the font and rendering context if there is a family change
-static void
-SetFontFamily(nsPresContext* aPresContext,
- nsIRenderingContext& aRenderingContext,
- nsFont& aFont,
- const nsGlyphTable* aGlyphTable,
- const nsGlyphCode& aGlyphCode,
- const nsAString& aDefaultFamily)
-{
- const nsAString& family =
- aGlyphCode.font ? aGlyphTable->FontNameFor(aGlyphCode) : aDefaultFamily;
- if (! family.Equals(aFont.name)) {
- aFont.name = family;
- aRenderingContext.SetFont(aFont, nsnull, aPresContext->GetUserFontSet());
- }
-}
-
-class nsMathMLChar::StretchEnumContext {
-public:
- StretchEnumContext(nsMathMLChar* aChar,
- nsPresContext* aPresContext,
- nsIRenderingContext& aRenderingContext,
- nsStretchDirection aStretchDirection,
- nscoord aTargetSize,
- PRUint32 aStretchHint,
- nsBoundingMetrics& aStretchedMetrics,
- const nsAString& aFamilies)
- : mChar(aChar),
- mPresContext(aPresContext),
- mRenderingContext(aRenderingContext),
- mDirection(aStretchDirection),
- mTargetSize(aTargetSize),
- mStretchHint(aStretchHint),
- mBoundingMetrics(aStretchedMetrics),
- mFamilies(aFamilies),
- mTryVariants(PR_TRUE),
- mTryParts(PR_TRUE) {}
-
- static PRBool
- EnumCallback(const nsString& aFamily, PRBool aGeneric, void *aData);
-
-private:
- static PRBool
- ResolverCallback (const nsAString& aFamily, void *aData);
-
- PRBool TryVariants(nsGlyphTable* aGlyphTable, const nsAString& aFamily);
- PRBool TryParts(nsGlyphTable* aGlyphTable, const nsAString& aFamily);
-
- nsMathMLChar* mChar;
- nsPresContext* mPresContext;
- nsIRenderingContext& mRenderingContext;
- const nsStretchDirection mDirection;
- const nscoord mTargetSize;
- const PRUint32 mStretchHint;
- nsBoundingMetrics& mBoundingMetrics;
- // Font families to search
- const nsAString& mFamilies;
-
-public:
- PRPackedBool mTryVariants;
- PRPackedBool mTryParts;
-
-private:
- nsAutoTArray<nsGlyphTable*,16> mTablesTried;
- nsGlyphTable* mGlyphTable; // for this callback
-};
-
-
-// 2. See if there are any glyphs of the appropriate size.
-// Returns PR_TRUE if the size is OK, PR_FALSE to keep searching.
-// Always updates the char if a better match is found.
-PRBool
-nsMathMLChar::StretchEnumContext::TryVariants(nsGlyphTable* aGlyphTable,
- const nsAString& aFamily)
-{
- // Use our stretchy style context now that stretching is in progress
- nsFont font = mChar->mStyleContext->GetStyleFont()->mFont;
- // Ensure mRenderingContext.SetFont will be called:
- font.name.Truncate();
-
- PRBool isVertical = (mDirection == NS_STRETCH_DIRECTION_VERTICAL);
- PRBool largeop = (NS_STRETCH_LARGEOP & mStretchHint) != 0;
- PRBool largeopOnly =
- largeop && (NS_STRETCH_VARIABLE_MASK & mStretchHint) == 0;
- PRBool maxWidth = (NS_STRETCH_MAXWIDTH & mStretchHint) != 0;
-
- nscoord bestSize =
- isVertical ? mBoundingMetrics.ascent + mBoundingMetrics.descent
- : mBoundingMetrics.rightBearing - mBoundingMetrics.leftBearing;
- PRBool haveBetter = PR_FALSE;
-
- // figure out the starting size : if this is a largeop, start at 2 else 1
- PRInt32 size = 1; // size=0 is the char at its normal size
- if (largeop && aGlyphTable->BigOf(mPresContext, mChar, 2).Exists()) {
- size = 2;
- }
-#ifdef NOISY_SEARCH
- printf(" searching in %s ...\n",
- NS_LossyConvertUTF16toASCII(aFamily).get());
-#endif
-
- nsGlyphCode ch;
- while ((ch = aGlyphTable->BigOf(mPresContext, mChar, size)).Exists()) {
-
- SetFontFamily(mChar->mStyleContext->PresContext(), mRenderingContext,
- font, aGlyphTable, ch, aFamily);
-
- NS_ASSERTION(maxWidth || ch.code != mChar->mGlyph.code ||
- !font.name.Equals(mChar->mFamily),
- "glyph table incorrectly set -- duplicate found");
-
- nsBoundingMetrics bm;
- nsresult rv = mRenderingContext.GetBoundingMetrics(&ch.code, 1, bm);
- if (NS_SUCCEEDED(rv)) {
- nscoord charSize =
- isVertical ? bm.ascent + bm.descent
- : bm.rightBearing - bm.leftBearing;
-
- if (largeopOnly ||
- IsSizeBetter(charSize, bestSize, mTargetSize, mStretchHint)) {
- if (maxWidth) {
- // IsSizeBetter() checked that charSize < maxsize;
- // Leave ascent, descent, and bestsize as these contain maxsize.
- if (mBoundingMetrics.width < bm.width)
- mBoundingMetrics.width = bm.width;
- if (mBoundingMetrics.leftBearing > bm.leftBearing)
- mBoundingMetrics.leftBearing = bm.leftBearing;
- if (mBoundingMetrics.rightBearing < bm.rightBearing)
- mBoundingMetrics.rightBearing = bm.rightBearing;
- // Continue to check other sizes unless largeopOnly
- haveBetter = largeopOnly;
- }
- else {
- mBoundingMetrics = bm;
- haveBetter = PR_TRUE;
- bestSize = charSize;
- mChar->mGlyphTable = aGlyphTable;
- mChar->mGlyph = ch;
- mChar->mFamily = font.name;
- }
-#ifdef NOISY_SEARCH
- printf(" size:%d Current best\n", size);
-#endif
- }
- else {
-#ifdef NOISY_SEARCH
- printf(" size:%d Rejected!\n", size);
-#endif
- if (haveBetter)
- break; // Not making an futher progress, stop searching
- }
- }
-
- // if largeopOnly is set, break now
- if (largeopOnly) break;
- ++size;
- }
-
- return haveBetter &&
- (largeopOnly || IsSizeOK(mPresContext, bestSize, mTargetSize, mStretchHint));
-}
-
-// 3. Build by parts.
-// Returns PR_TRUE if the size is OK, PR_FALSE to keep searching.
-// Always updates the char if a better match is found.
-PRBool
-nsMathMLChar::StretchEnumContext::TryParts(nsGlyphTable* aGlyphTable,
- const nsAString& aFamily)
-{
- if (!aGlyphTable->HasPartsOf(mPresContext, mChar))
- return PR_FALSE; // to next table
-
- // See if this is a composite character /////////////////////////////////////
- if (aGlyphTable->IsComposite(mPresContext, mChar)) {
- // let the child chars do the job
- nsBoundingMetrics compositeSize;
- nsresult rv =
- mChar->ComposeChildren(mPresContext, mRenderingContext, aGlyphTable,
- mTargetSize, compositeSize, mStretchHint);
-#ifdef NOISY_SEARCH
- printf(" Composing %d chars in font %s %s!\n",
- aGlyphTable->ChildCountOf(mPresContext, mChar),
- NS_LossyConvertUTF16toASCII(fontName).get(),
- NS_SUCCEEDED(rv)? "OK" : "Rejected");
-#endif
- if (NS_FAILED(rv))
- return PR_FALSE; // to next table
-
- // all went well, painting will be delegated from now on to children
- mChar->mGlyph = kNullGlyph; // this will tell paint to build by parts
- mChar->mGlyphTable = aGlyphTable;
- mBoundingMetrics = compositeSize;
- return PR_TRUE; // no more searching
- }
-
- // See if the parts of this table fit in the desired space //////////////////
-
- // Use our stretchy style context now that stretching is in progress
- nsFont font = mChar->mStyleContext->GetStyleFont()->mFont;
- // Ensure mRenderingContext.SetFont will be called:
- font.name.Truncate();
-
- // Compute the bounding metrics of all partial glyphs
- nsGlyphCode chdata[4];
- nsBoundingMetrics bmdata[4];
- nscoord sizedata[4];
- nsGlyphCode glue = aGlyphTable->GlueOf(mPresContext, mChar);
-
- PRBool isVertical = (mDirection == NS_STRETCH_DIRECTION_VERTICAL);
- PRBool maxWidth = (NS_STRETCH_MAXWIDTH & mStretchHint) != 0;
-
- for (PRInt32 i = 0; i < 4; i++) {
- nsGlyphCode ch;
- switch (i) {
- case 0: ch = aGlyphTable->TopOf(mPresContext, mChar); break;
- case 1: ch = aGlyphTable->MiddleOf(mPresContext, mChar); break;
- case 2: ch = aGlyphTable->BottomOf(mPresContext, mChar); break;
- case 3: ch = glue; break;
- }
- // empty slots are filled with the glue if it is not null
- if (!ch.Exists()) ch = glue;
- nsBoundingMetrics bm;
- chdata[i] = ch;
- if (!ch.Exists()) {
- // Null glue indicates that a rule will be drawn, which can stretch to
- // fill any space. Leave bounding metrics at 0.
- sizedata[i] = mTargetSize;
- }
- else {
- SetFontFamily(mChar->mStyleContext->PresContext(), mRenderingContext,
- font, aGlyphTable, ch, aFamily);
- nsresult rv = mRenderingContext.GetBoundingMetrics(&ch.code, 1, bm);
- if (NS_FAILED(rv)) {
- // stop if we failed to compute the bounding metrics of a part.
- NS_WARNING("GetBoundingMetrics failed");
- return PR_FALSE; // to next table
- }
-
- // TODO: For the generic Unicode table, ideally we should check that the
- // glyphs are actually found and that they each come from the same
- // font.
- bmdata[i] = bm;
- sizedata[i] = isVertical ? bm.ascent + bm.descent
- : bm.rightBearing - bm.leftBearing;
- }
- }
-
- // Build by parts if we have successfully computed the
- // bounding metrics of all parts.
- nscoord computedSize = ComputeSizeFromParts(mPresContext, chdata, sizedata,
- mTargetSize);
-
- nscoord currentSize =
- isVertical ? mBoundingMetrics.ascent + mBoundingMetrics.descent
- : mBoundingMetrics.rightBearing - mBoundingMetrics.leftBearing;
-
- if (!IsSizeBetter(computedSize, currentSize, mTargetSize, mStretchHint)) {
-#ifdef NOISY_SEARCH
- printf(" Font %s Rejected!\n",
- NS_LossyConvertUTF16toASCII(fontName).get());
-#endif
- return PR_FALSE; // to next table
- }
-
-#ifdef NOISY_SEARCH
- printf(" Font %s Current best!\n",
- NS_LossyConvertUTF16toASCII(fontName).get());
-#endif
-
- // The computed size is the best we have found so far...
- // now is the time to compute and cache our bounding metrics
- if (isVertical) {
- PRInt32 i;
- nscoord lbearing;
- nscoord rbearing;
- nscoord width;
- if (maxWidth) {
- lbearing = mBoundingMetrics.leftBearing;
- rbearing = mBoundingMetrics.rightBearing;
- width = mBoundingMetrics.width;
- i = 0;
- }
- else {
- lbearing = bmdata[0].leftBearing;
- rbearing = bmdata[0].rightBearing;
- width = bmdata[0].width;
- i = 1;
- }
- for (; i < 4; i++) {
- const nsBoundingMetrics& bm = bmdata[i];
- if (width < bm.width) width = bm.width;
- if (lbearing > bm.leftBearing) lbearing = bm.leftBearing;
- if (rbearing < bm.rightBearing) rbearing = bm.rightBearing;
- }
- mBoundingMetrics.width = width;
- // When maxWidth, updating ascent and descent indicates that no characters
- // larger than this character's minimum size need to be checked as they
- // will not be used.
- mBoundingMetrics.ascent = bmdata[0].ascent; // not used except with descent for height
- mBoundingMetrics.descent = computedSize - mBoundingMetrics.ascent;
- mBoundingMetrics.leftBearing = lbearing;
- mBoundingMetrics.rightBearing = rbearing;
- }
- else {
- nscoord ascent = bmdata[0].ascent;
- nscoord descent = bmdata[0].descent;
- for (PRInt32 i = 1; i < 4; i++) {
- const nsBoundingMetrics& bm = bmdata[i];
- if (ascent < bm.ascent) ascent = bm.ascent;
- if (descent < bm.descent) descent = bm.descent;
- }
- mBoundingMetrics.width = computedSize;
- mBoundingMetrics.ascent = ascent;
- mBoundingMetrics.descent = descent;
- mBoundingMetrics.leftBearing = 0;
- mBoundingMetrics.rightBearing = computedSize;
- }
- if (maxWidth)
- return PR_FALSE; // Continue to check other sizes
-
- // reset
- mChar->mGlyph = kNullGlyph; // this will tell paint to build by parts
- mChar->mGlyphTable = aGlyphTable;
- mChar->mFamily = aFamily;
-
- return IsSizeOK(mPresContext, computedSize, mTargetSize, mStretchHint);
-}
-
-// This is only called for glyph table corresponding to a family that exists.
-// See if the table has a glyph that matches the container
-PRBool
-nsMathMLChar::StretchEnumContext::ResolverCallback (const nsAString& aFamily,
- void *aData)
-{
- StretchEnumContext* context = static_cast<StretchEnumContext*>(aData);
- nsGlyphTable* glyphTable = context->mGlyphTable;
-
- // Only try this table once.
- context->mTablesTried.AppendElement(glyphTable);
-
- // If the unicode table is being used, then search all font families. If a
- // special table is being used then the font in this family should have the
- // specified glyphs.
- const nsAString& family = glyphTable == &gGlyphTableList->mUnicodeTable ?
- context->mFamilies : aFamily;
-
- if(context->mTryVariants) {
- PRBool isOK = context->TryVariants(glyphTable, family);
- if (isOK)
- return PR_FALSE; // no need to continue
- }
-
- if(context->mTryParts) {
- PRBool isOK = context->TryParts(glyphTable, family);
- if (isOK)
- return PR_FALSE; // no need to continue
- }
- return PR_TRUE;
-}
-
-// This is called for each family, whether it exists or not
-PRBool
-nsMathMLChar::StretchEnumContext::EnumCallback(const nsString& aFamily,
- PRBool aGeneric, void *aData)
-{
- StretchEnumContext* context = static_cast<StretchEnumContext*>(aData);
-
- // See if there is a special table for the family, but always use the
- // Unicode table for generic fonts.
- nsGlyphTable* glyphTable = aGeneric ?
- &gGlyphTableList->mUnicodeTable : gGlyphTableList->GetGlyphTableFor(aFamily);
-
- if (context->mTablesTried.IndexOf(glyphTable) != context->mTablesTried.NoIndex)
- return PR_TRUE; // already tried this one
-
- context->mGlyphTable = glyphTable;
-
- if (aGeneric)
- return ResolverCallback(aFamily, aData);
-
- PRBool aborted;
- gfxPlatform *pf = gfxPlatform::GetPlatform();
- nsresult rv =
- pf->ResolveFontName(aFamily, ResolverCallback, aData, aborted);
- return NS_SUCCEEDED(rv) && !aborted; // true means continue
-}
-
-nsresult
-nsMathMLChar::StretchInternal(nsPresContext* aPresContext,
- nsIRenderingContext& aRenderingContext,
- nsStretchDirection& aStretchDirection,
- const nsBoundingMetrics& aContainerSize,
- nsBoundingMetrics& aDesiredStretchSize,
- PRUint32 aStretchHint,
- // These are currently only used when
- // aStretchHint & NS_STRETCH_MAXWIDTH:
- float aMaxSize,
- PRBool aMaxSizeIsAbsolute)
-{
- // if we have been called before, and we didn't actually stretch, our
- // direction may have been set to NS_STRETCH_DIRECTION_UNSUPPORTED.
- // So first set our direction back to its instrinsic value
- nsStretchDirection direction = NS_STRETCH_DIRECTION_UNSUPPORTED;
- if (mOperator >= 0) {
- // mOperator is initialized in SetData() and remains unchanged
- direction = nsMathMLOperators::GetStretchyDirectionAt(mOperator);
- }
-
- // Set default font and get the default bounding metrics
- // mStyleContext is a leaf context used only when stretching happens.
- // For the base size, the default font should come from the parent context
- nsFont font = mStyleContext->GetParent()->GetStyleFont()->mFont;
-
- // Override with specific fonts if applicable for this character
- nsCOMPtr<nsIPrefBranch> prefBranch = do_GetService(NS_PREFSERVICE_CONTRACTID);
- nsAutoString families;
- if (GetFontExtensionPref(prefBranch, mData[0], eExtension_base, families)) {
- font.name = families;
- }
-
- // Don't modify this nsMathMLChar when doing GetMaxWidth()
- PRBool maxWidth = (NS_STRETCH_MAXWIDTH & aStretchHint) != 0;
- if (!maxWidth) {
- // Record the families in case there is no stretch. But don't bother
- // storing families when they are just those from the StyleContext.
- mFamily = families;
- }
-
- aRenderingContext.SetFont(font, nsnull, aPresContext->GetUserFontSet());
- nsresult rv =
- aRenderingContext.GetBoundingMetrics(mData.get(), PRUint32(mData.Length()),
- aDesiredStretchSize);
- if (NS_FAILED(rv)) {
- NS_WARNING("GetBoundingMetrics failed");
- return rv;
- }
-
- ////////////////////////////////////////////////////////////////////////////////////
- // 1. Check the common situations where stretching is not actually needed
- ////////////////////////////////////////////////////////////////////////////////////
-
- // quick return if there is nothing special about this char
- if (!mGlyphTable ||
- (aStretchDirection != direction &&
- aStretchDirection != NS_STRETCH_DIRECTION_DEFAULT) ||
- (aStretchHint & ~NS_STRETCH_MAXWIDTH) == NS_STRETCH_NONE) {
- return NS_OK;
- }
-
- // if no specified direction, attempt to stretch in our preferred direction
- if (aStretchDirection == NS_STRETCH_DIRECTION_DEFAULT) {
- aStretchDirection = direction;
- }
-
- // see if this is a particular largeop or largeopOnly request
- PRBool largeop = (NS_STRETCH_LARGEOP & aStretchHint) != 0;
- PRBool stretchy = (NS_STRETCH_VARIABLE_MASK & aStretchHint) != 0;
- PRBool largeopOnly = largeop && !stretchy;
-
- PRBool isVertical = (direction == NS_STRETCH_DIRECTION_VERTICAL);
-
- nscoord targetSize =
- isVertical ? aContainerSize.ascent + aContainerSize.descent
- : aContainerSize.rightBearing - aContainerSize.leftBearing;
-
- if (maxWidth) {
- // See if it is only necessary to consider glyphs up to some maximum size.
- // Set the current height to the maximum size, and set aStretchHint to
- // NS_STRETCH_SMALLER if the size is variable, so that only smaller sizes
- // are considered. targetSize from GetMaxWidth() is 0.
- if (stretchy) {
- // variable size stretch - consider all sizes < maxsize
- aStretchHint =
- (aStretchHint & ~NS_STRETCH_VARIABLE_MASK) | NS_STRETCH_SMALLER;
- }
-
- // Use NS_MATHML_DELIMITER_FACTOR to allow some slightly larger glyphs as
- // maxsize is not enforced exactly.
- if (aMaxSize == NS_MATHML_OPERATOR_SIZE_INFINITY) {
- aDesiredStretchSize.ascent = nscoord_MAX;
- aDesiredStretchSize.descent = 0;
- }
- else {
- nscoord height = aDesiredStretchSize.ascent + aDesiredStretchSize.descent;
- if (height == 0) {
- if (aMaxSizeIsAbsolute) {
- aDesiredStretchSize.ascent =
- NSToCoordRound(aMaxSize / NS_MATHML_DELIMITER_FACTOR);
- aDesiredStretchSize.descent = 0;
- }
- // else: leave height as 0
- }
- else {
- float scale = aMaxSizeIsAbsolute ? aMaxSize / height : aMaxSize;
- scale /= NS_MATHML_DELIMITER_FACTOR;
- aDesiredStretchSize.ascent =
- NSToCoordRound(scale * aDesiredStretchSize.ascent);
- aDesiredStretchSize.descent =
- NSToCoordRound(scale * aDesiredStretchSize.descent);
- }
- }
- }
-
- if (!maxWidth && !largeop) {
- // Doing Stretch() not GetMaxWidth(),
- // and not a largeop in display mode; return if size fits
- nscoord charSize =
- isVertical ? aDesiredStretchSize.ascent + aDesiredStretchSize.descent
- : aDesiredStretchSize.rightBearing - aDesiredStretchSize.leftBearing;
-
- if ((targetSize <= 0) ||
- ((isVertical && charSize >= targetSize) ||
- IsSizeOK(aPresContext, charSize, targetSize, aStretchHint)))
- return NS_OK;
- }
-
- ////////////////////////////////////////////////////////////////////////////////////
- // 2/3. Search for a glyph or set of part glyphs of appropriate size
- ////////////////////////////////////////////////////////////////////////////////////
-
- font = mStyleContext->GetStyleFont()->mFont;
- nsAutoString cssFamilies;
- cssFamilies = font.name;
-
- PRBool done = PR_FALSE;
-
- // See if there are preferred fonts for the variants of this char
- if (GetFontExtensionPref(prefBranch, mData[0], eExtension_variants,
- families)) {
- font.name = families;
-
- StretchEnumContext enumData(this, aPresContext, aRenderingContext,
- aStretchDirection, targetSize, aStretchHint,
- aDesiredStretchSize, font.name);
- enumData.mTryParts = PR_FALSE;
-
- done = !font.EnumerateFamilies(StretchEnumContext::EnumCallback, &enumData);
- }
-
- // See if there are preferred fonts for the parts of this char
- if (!done && !largeopOnly
- && GetFontExtensionPref(prefBranch, mData[0], eExtension_parts,
- families)) {
- font.name = families;
-
- StretchEnumContext enumData(this, aPresContext, aRenderingContext,
- aStretchDirection, targetSize, aStretchHint,
- aDesiredStretchSize, font.name);
- enumData.mTryVariants = PR_FALSE;
-
- done = !font.EnumerateFamilies(StretchEnumContext::EnumCallback, &enumData);
- }
-
- if (!done) { // normal case
- // Use the css font-family but add preferred fallback fonts.
- font.name = cssFamilies;
- NS_NAMED_LITERAL_CSTRING(defaultKey, "font.mathfont-family");
- nsAutoString fallbackFonts;
- if (GetPrefValue(prefBranch, defaultKey.get(), fallbackFonts)) {
- AddFallbackFonts(font.name, fallbackFonts);
- }
-
-#ifdef NOISY_SEARCH
- printf("Searching in "%s" for a glyph of appropriate size for: 0x%04X:%c\n",
- font.name, mData[0], mData[0]&0x00FF);
-#endif
- StretchEnumContext enumData(this, aPresContext, aRenderingContext,
- aStretchDirection, targetSize, aStretchHint,
- aDesiredStretchSize, font.name);
- enumData.mTryParts = !largeopOnly;
-
- font.EnumerateFamilies(StretchEnumContext::EnumCallback, &enumData);
- }
-
- return NS_OK;
-}
-
-nsresult
-nsMathMLChar::Stretch(nsPresContext* aPresContext,
- nsIRenderingContext& aRenderingContext,
- nsStretchDirection aStretchDirection,
- const nsBoundingMetrics& aContainerSize,
- nsBoundingMetrics& aDesiredStretchSize,
- PRUint32 aStretchHint)
-{
- NS_ASSERTION(!(aStretchHint &
- ~(NS_STRETCH_VARIABLE_MASK | NS_STRETCH_LARGEOP)),
- "Unexpected stretch flags");
-
- // This will be updated if a better match than the base character is found
- mGlyph.font = -1;
-
- mDirection = aStretchDirection;
- nsresult rv =
- StretchInternal(aPresContext, aRenderingContext, mDirection,
- aContainerSize, aDesiredStretchSize, aStretchHint);
-
- if (mGlyph.font == -1) { // no stretch happened
- // ensure that the char later behaves like a normal char
- // (will be reset back to its intrinsic value in case of dynamic updates)
- mDirection = NS_STRETCH_DIRECTION_UNSUPPORTED;
- }
-
- // Record the metrics
- mBoundingMetrics = aDesiredStretchSize;
-
- return rv;
-}
-
-// What happens here is that the StretchInternal algorithm is used but
-// modified by passing the NS_STRETCH_MAXWIDTH stretch hint. That causes
-// StretchInternal to return horizontal bounding metrics that are the maximum
-// that might be returned from a Stretch.
-//
-// In order to avoid considering widths of some characters in fonts that will
-// not be used for any stretch size, StretchInternal sets the initial height
-// to infinity and looks for any characters smaller than this height. When a
-// character built from parts is considered, (it will be used by Stretch for
-// any characters greater than its minimum size, so) the height is set to its
-// minimum size, so that only widths of smaller subsequent characters are
-// considered.
-nscoord
-nsMathMLChar::GetMaxWidth(nsPresContext* aPresContext,
- nsIRenderingContext& aRenderingContext,
- PRUint32 aStretchHint,
- float aMaxSize, PRBool aMaxSizeIsAbsolute)
-{
- nsBoundingMetrics bm;
- nsStretchDirection direction = NS_STRETCH_DIRECTION_VERTICAL;
- const nsBoundingMetrics container; // zero target size
-
- StretchInternal(aPresContext, aRenderingContext, direction, container,
- bm, aStretchHint | NS_STRETCH_MAXWIDTH);
-
- return PR_MAX(bm.width, bm.rightBearing) - PR_MIN(0, bm.leftBearing);
-}
-
-nsresult
-nsMathMLChar::ComposeChildren(nsPresContext* aPresContext,
- nsIRenderingContext& aRenderingContext,
- nsGlyphTable* aGlyphTable,
- nscoord aTargetSize,
- nsBoundingMetrics& aCompositeSize,
- PRUint32 aStretchHint)
-{
- PRInt32 i = 0;
- nsMathMLChar* child;
- PRInt32 count = aGlyphTable->ChildCountOf(aPresContext, this);
- NS_ASSERTION(count, "something is wrong somewhere");
- if (!count) return NS_ERROR_FAILURE;
- // if we haven't been here before, create the linked list of children now
- // otherwise, use what we have, adding more children as needed or deleting the extra
- nsMathMLChar* last = this;
- while ((i < count) && last->mSibling) {
- i++;
- last = last->mSibling;
- }
- while (i < count) {
- child = new nsMathMLChar(this);
- if (!child) {
- if (mSibling) delete mSibling; // don't leave a dangling list ...
- mSibling = nsnull;
- return NS_ERROR_OUT_OF_MEMORY;
- }
- last->mSibling = child;
- last = child;
- i++;
- }
- if (last->mSibling) {
- delete last->mSibling;
- last->mSibling = nsnull;
- }
- // let children stretch in an equal space
- nsBoundingMetrics splitSize;
- if (NS_STRETCH_DIRECTION_HORIZONTAL == mDirection)
- splitSize.width = aTargetSize / count;
- else {
- splitSize.ascent = aTargetSize / (count * 2);
- splitSize.descent = splitSize.ascent;
- }
- nscoord dx = 0, dy = 0;
- for (i = 0, child = mSibling; child; child = child->mSibling, i++) {
- // child chars should just inherit our values - which may change between calls...
- child->mData = mData;
- child->mOperator = mOperator;
- child->mDirection = mDirection;
- child->mStyleContext = mStyleContext;
- child->mGlyphTable = aGlyphTable; // the child is associated to this table
- // there goes the Stretch() ...
- nsBoundingMetrics childSize;
- nsresult rv = child->Stretch(aPresContext, aRenderingContext, mDirection,
- splitSize, childSize, aStretchHint);
- // check if something went wrong or the child couldn't fit in the alloted space
- if (NS_FAILED(rv) || (NS_STRETCH_DIRECTION_UNSUPPORTED == child->mDirection)) {
- delete mSibling; // don't leave a dangling list behind ...
- mSibling = nsnull;
- return NS_ERROR_FAILURE;
- }
- child->SetRect(nsRect(dx, dy, childSize.width, childSize.ascent+childSize.descent));
- if (0 == i)
- aCompositeSize = childSize;
- else {
- if (NS_STRETCH_DIRECTION_HORIZONTAL == mDirection)
- aCompositeSize += childSize;
- else {
- aCompositeSize.descent += childSize.ascent + childSize.descent;
- if (aCompositeSize.leftBearing > childSize.leftBearing)
- aCompositeSize.leftBearing = childSize.leftBearing;
- if (aCompositeSize.rightBearing < childSize.rightBearing)
- aCompositeSize.rightBearing = childSize.rightBearing;
- }
- }
- if (NS_STRETCH_DIRECTION_HORIZONTAL == mDirection)
- dx += childSize.width;
- else
- dy += childSize.ascent + childSize.descent;
- }
- return NS_OK;
-}
-
-class nsDisplayMathMLSelectionRect : public nsDisplayItem {
-public:
- nsDisplayMathMLSelectionRect(nsIFrame* aFrame, const nsRect& aRect)
- : nsDisplayItem(aFrame), mRect(aRect) {
- MOZ_COUNT_CTOR(nsDisplayMathMLSelectionRect);
- }
-#ifdef NS_BUILD_REFCNT_LOGGING
- virtual ~nsDisplayMathMLSelectionRect() {
- MOZ_COUNT_DTOR(nsDisplayMathMLSelectionRect);
- }
-#endif
-
- virtual void Paint(nsDisplayListBuilder* aBuilder, nsIRenderingContext* aCtx,
- const nsRect& aDirtyRect);
- NS_DISPLAY_DECL_NAME("MathMLSelectionRect")
-private:
- nsRect mRect;
-};
-
-void nsDisplayMathMLSelectionRect::Paint(nsDisplayListBuilder* aBuilder,
- nsIRenderingContext* aCtx, const nsRect& aDirtyRect)
-{
- // get color to use for selection from the look&feel object
- nscolor bgColor = NS_RGB(0, 0, 0);
- mFrame->PresContext()->LookAndFeel()->
- GetColor(nsILookAndFeel::eColor_TextSelectBackground, bgColor);
- aCtx->SetColor(bgColor);
- aCtx->FillRect(mRect + aBuilder->ToReferenceFrame(mFrame));
-}
-
-class nsDisplayMathMLCharBackground : public nsDisplayItem {
-public:
- nsDisplayMathMLCharBackground(nsIFrame* aFrame, const nsRect& aRect,
- nsStyleContext* aStyleContext)
- : nsDisplayItem(aFrame), mStyleContext(aStyleContext), mRect(aRect) {
- MOZ_COUNT_CTOR(nsDisplayMathMLCharBackground);
- }
-#ifdef NS_BUILD_REFCNT_LOGGING
- virtual ~nsDisplayMathMLCharBackground() {
- MOZ_COUNT_DTOR(nsDisplayMathMLCharBackground);
- }
-#endif
-
- virtual void Paint(nsDisplayListBuilder* aBuilder, nsIRenderingContext* aCtx,
- const nsRect& aDirtyRect);
- NS_DISPLAY_DECL_NAME("MathMLCharBackground")
-private:
- nsStyleContext* mStyleContext;
- nsRect mRect;
-};
-
-void nsDisplayMathMLCharBackground::Paint(nsDisplayListBuilder* aBuilder,
- nsIRenderingContext* aCtx, const nsRect& aDirtyRect)
-{
- const nsStyleBorder* border = mStyleContext->GetStyleBorder();
- const nsStyleBackground* backg = mStyleContext->GetStyleBackground();
- nsRect rect(mRect + aBuilder->ToReferenceFrame(mFrame));
- nsCSSRendering::PaintBackgroundWithSC(mFrame->PresContext(), *aCtx, mFrame,
- aDirtyRect, rect, *backg, *border,
- PR_TRUE);
-}
-
-class nsDisplayMathMLCharForeground : public nsDisplayItem {
-public:
- nsDisplayMathMLCharForeground(nsIFrame* aFrame, nsMathMLChar* aChar,
- PRBool aIsSelected)
- : nsDisplayItem(aFrame), mChar(aChar), mIsSelected(aIsSelected) {
- MOZ_COUNT_CTOR(nsDisplayMathMLCharForeground);
- }
-#ifdef NS_BUILD_REFCNT_LOGGING
- virtual ~nsDisplayMathMLCharForeground() {
- MOZ_COUNT_DTOR(nsDisplayMathMLCharForeground);
- }
-#endif
-
- virtual nsRect GetBounds(nsDisplayListBuilder* aBuilder) {
- nsRect rect;
- mChar->GetRect(rect);
- nsPoint offset =
- aBuilder->ToReferenceFrame(mFrame) + rect.TopLeft();
- nsBoundingMetrics bm;
- mChar->GetBoundingMetrics(bm);
- return nsRect(offset.x + bm.leftBearing, offset.y,
- bm.rightBearing - bm.leftBearing, bm.ascent + bm.descent);
- }
-
- virtual void Paint(nsDisplayListBuilder* aBuilder, nsIRenderingContext* aCtx,
- const nsRect& aDirtyRect)
- {
- mChar->PaintForeground(mFrame->PresContext(), *aCtx,
- aBuilder->ToReferenceFrame(mFrame), mIsSelected);
- }
-
- NS_DISPLAY_DECL_NAME("MathMLCharForeground")
-
-private:
- nsMathMLChar* mChar;
- PRPackedBool mIsSelected;
-};
-
-#ifdef NS_DEBUG
-class nsDisplayMathMLCharDebug : public nsDisplayItem {
-public:
- nsDisplayMathMLCharDebug(nsIFrame* aFrame, const nsRect& aRect)
- : nsDisplayItem(aFrame), mRect(aRect) {
- MOZ_COUNT_CTOR(nsDisplayMathMLCharDebug);
- }
-#ifdef NS_BUILD_REFCNT_LOGGING
- virtual ~nsDisplayMathMLCharDebug() {
- MOZ_COUNT_DTOR(nsDisplayMathMLCharDebug);
- }
-#endif
-
- virtual void Paint(nsDisplayListBuilder* aBuilder, nsIRenderingContext* aCtx,
- const nsRect& aDirtyRect);
- NS_DISPLAY_DECL_NAME("MathMLCharDebug")
-private:
- nsRect mRect;
-};
-
-void nsDisplayMathMLCharDebug::Paint(nsDisplayListBuilder* aBuilder,
- nsIRenderingContext* aCtx, const nsRect& aDirtyRect)
-{
- // for visual debug
- PRIntn skipSides = 0;
- nsPresContext* presContext = mFrame->PresContext();
- const nsStyleBorder* border = mFrame->GetStyleBorder();
- nsStyleContext* styleContext = mFrame->GetStyleContext();
- nsRect rect = mRect + aBuilder->ToReferenceFrame(mFrame);
- nsCSSRendering::PaintBorder(presContext, *aCtx, mFrame,
- aDirtyRect, rect, *border, styleContext,
- skipSides);
- nsCSSRendering::PaintOutline(presContext, *aCtx, mFrame,
- aDirtyRect, rect, *border,
- *mFrame->GetStyleOutline(), styleContext);
-}
-#endif
-
-
-nsresult
-nsMathMLChar::Display(nsDisplayListBuilder* aBuilder,
- nsIFrame* aForFrame,
- const nsDisplayListSet& aLists,
- const nsRect* aSelectedRect)
-{
- nsresult rv = NS_OK;
- nsStyleContext* parentContext = mStyleContext->GetParent();
- nsStyleContext* styleContext = mStyleContext;
-
- if (NS_STRETCH_DIRECTION_UNSUPPORTED == mDirection) {
- // normal drawing if there is nothing special about this char
- // Set default context to the parent context
- styleContext = parentContext;
- }
-
- if (!styleContext->GetStyleVisibility()->IsVisible())
- return NS_OK;
-
- // if the leaf style context that we use for stretchy chars has a background
- // color we use it -- this feature is mostly used for testing and debugging
- // purposes. Normally, users will set the background on the container frame.
- // paint the selection background -- beware MathML frames overlap a lot
- if (aSelectedRect && !aSelectedRect->IsEmpty()) {
- rv = aLists.BorderBackground()->AppendNewToTop(new (aBuilder)
- nsDisplayMathMLSelectionRect(aForFrame, *aSelectedRect));
- NS_ENSURE_SUCCESS(rv, rv);
- }
- else if (mRect.width && mRect.height) {
- const nsStyleBackground* backg = styleContext->GetStyleBackground();
- if (styleContext != parentContext &&
- NS_GET_A(backg->mBackgroundColor) > 0) {
- rv = aLists.BorderBackground()->AppendNewToTop(new (aBuilder)
- nsDisplayMathMLCharBackground(aForFrame, mRect, styleContext));
- NS_ENSURE_SUCCESS(rv, rv);
- }
- //else
- // our container frame will take care of painting its background
-
-#if defined(NS_DEBUG) && defined(SHOW_BOUNDING_BOX)
- // for visual debug
- rv = aLists.BorderBackground()->AppendToTop(new (aBuilder)
- nsDisplayMathMLCharDebug(aForFrame, mRect));
- NS_ENSURE_SUCCESS(rv, rv);
-#endif
- }
- return aLists.Content()->AppendNewToTop(new (aBuilder)
- nsDisplayMathMLCharForeground(aForFrame, this,
- aSelectedRect && !aSelectedRect->IsEmpty()));
-}
-
-void
-nsMathMLChar::PaintForeground(nsPresContext* aPresContext,
- nsIRenderingContext& aRenderingContext,
- nsPoint aPt,
- PRBool aIsSelected)
-{
- nsStyleContext* parentContext = mStyleContext->GetParent();
- nsStyleContext* styleContext = mStyleContext;
-
- if (NS_STRETCH_DIRECTION_UNSUPPORTED == mDirection) {
- // normal drawing if there is nothing special about this char
- // Set default context to the parent context
- styleContext = parentContext;
- }
-
- // Set color ...
- nscolor fgColor = styleContext->GetStyleColor()->mColor;
- if (aIsSelected) {
- // get color to use for selection from the look&feel object
- aPresContext->LookAndFeel()->
- GetColor(nsILookAndFeel::eColor_TextSelectForeground, fgColor);
- }
- aRenderingContext.SetColor(fgColor);
-
- nsFont theFont(styleContext->GetStyleFont()->mFont);
- if (! mFamily.IsEmpty()) {
- theFont.name = mFamily;
- }
- aRenderingContext.SetFont(theFont, nsnull, aPresContext->GetUserFontSet());
-
- if (NS_STRETCH_DIRECTION_UNSUPPORTED == mDirection) {
- // normal drawing if there is nothing special about this char ...
- // Grab some metrics to adjust the placements ...
- PRUint32 len = PRUint32(mData.Length());
-//printf("Painting %04X like a normal char\n", mData[0]);
-//aRenderingContext.SetColor(NS_RGB(255,0,0));
- aRenderingContext.DrawString(mData.get(), len, mRect.x + aPt.x,
- mRect.y + aPt.y + mBoundingMetrics.ascent);
- }
- else {
- // Grab some metrics to adjust the placements ...
- // if there is a glyph of appropriate size, paint that glyph
- if (mGlyph.Exists()) {
-//printf("Painting %04X with a glyph of appropriate size\n", mData[0]);
-//aRenderingContext.SetColor(NS_RGB(0,0,255));
- aRenderingContext.DrawString(&mGlyph.code, 1, mRect.x + aPt.x,
- mRect.y + aPt.y + mBoundingMetrics.ascent);
- }
- else { // paint by parts
- // see if this is a composite char and let children paint themselves
- if (!mParent && mSibling) { // only a "root" having child chars can enter here
- for (nsMathMLChar* child = mSibling; child; child = child->mSibling) {
-//if (!mStyleContext->Equals(child->mStyleContext))
-// printf("char contexts are out of sync\n");
- child->PaintForeground(aPresContext, aRenderingContext, aPt,
- aIsSelected);
- }
- return; // that's all folks
- }
-//aRenderingContext.SetColor(NS_RGB(0,255,0));
- nsRect r = mRect + aPt;
- if (NS_STRETCH_DIRECTION_VERTICAL == mDirection)
- PaintVertically(aPresContext, aRenderingContext, theFont, styleContext,
- mGlyphTable, r);
- else if (NS_STRETCH_DIRECTION_HORIZONTAL == mDirection)
- PaintHorizontally(aPresContext, aRenderingContext, theFont, styleContext,
- mGlyphTable, r);
- }
- }
-}
-
-/* =================================================================================
- And now the helper routines that actually do the job of painting the char by parts
- */
-
-class AutoPushClipRect {
- nsIRenderingContext& mCtx;
-public:
- AutoPushClipRect(nsIRenderingContext& aCtx, const nsRect& aRect)
- : mCtx(aCtx) {
- mCtx.PushState();
- mCtx.SetClipRect(aRect, nsClipCombine_kIntersect);
- }
- ~AutoPushClipRect() {
- mCtx.PopState();
- }
-};
-
-static nsPoint
-SnapToDevPixels(const gfxContext* aThebesContext, PRInt32 aAppUnitsPerGfxUnit,
- const nsPoint& aPt)
-{
- gfxPoint pt(NSAppUnitsToFloatPixels(aPt.x, aAppUnitsPerGfxUnit),
- NSAppUnitsToFloatPixels(aPt.y, aAppUnitsPerGfxUnit));
- pt = aThebesContext->UserToDevice(pt);
- pt.Round();
- pt = aThebesContext->DeviceToUser(pt);
- return nsPoint(NSFloatPixelsToAppUnits(pt.x, aAppUnitsPerGfxUnit),
- NSFloatPixelsToAppUnits(pt.y, aAppUnitsPerGfxUnit));
-}
-
-// paint a stretchy char by assembling glyphs vertically
-nsresult
-nsMathMLChar::PaintVertically(nsPresContext* aPresContext,
- nsIRenderingContext& aRenderingContext,
- nsFont& aFont,
- nsStyleContext* aStyleContext,
- nsGlyphTable* aGlyphTable,
- nsRect& aRect)
-{
- nsresult rv = NS_OK;
- // Get the device pixel size in the vertical direction.
- // (This makes no effort to optimize for non-translation transformations.)
- nscoord oneDevPixel = aPresContext->AppUnitsPerDevPixel();
-
- // get metrics data to be re-used later
- PRInt32 i = 0;
- nsGlyphCode ch, chdata[4];
- nsBoundingMetrics bmdata[4];
- PRInt32 glue, bottom;
- nsGlyphCode chGlue = aGlyphTable->GlueOf(aPresContext, this);
- for (PRInt32 j = 0; j < 4; ++j) {
- switch (j) {
- case 0:
- ch = aGlyphTable->TopOf(aPresContext, this);
- break;
- case 1:
- ch = aGlyphTable->MiddleOf(aPresContext, this);
- if (!ch.Exists())
- continue; // no middle
- break;
- case 2:
- ch = aGlyphTable->BottomOf(aPresContext, this);
- bottom = i;
- break;
- case 3:
- ch = chGlue;
- glue = i;
- break;
- }
- // empty slots are filled with the glue if it is not null
- if (!ch.Exists()) ch = chGlue;
- // if (!ch.Exists()) glue is null, leave bounding metrics at 0
- if (ch.Exists()) {
- SetFontFamily(aPresContext, aRenderingContext,
- aFont, aGlyphTable, ch, mFamily);
- rv = aRenderingContext.GetBoundingMetrics(&ch.code, 1, bmdata[i]);
- if (NS_FAILED(rv)) {
- NS_WARNING("GetBoundingMetrics failed");
- return rv;
- }
- }
- chdata[i] = ch;
- ++i;
- }
- nscoord dx = aRect.x;
- nscoord offset[3], start[3], end[3];
- nsRefPtr<gfxContext> ctx = aRenderingContext.ThebesContext();
- for (i = 0; i <= bottom; ++i) {
- ch = chdata[i];
- const nsBoundingMetrics& bm = bmdata[i];
- nscoord dy;
- if (0 == i) { // top
- dy = aRect.y + bm.ascent;
- }
- else if (bottom == i) { // bottom
- dy = aRect.y + aRect.height - bm.descent;
- }
- else { // middle
- dy = aRect.y + bm.ascent + (aRect.height - (bm.ascent + bm.descent))/2;
- }
- // _cairo_scaled_font_show_glyphs snaps origins to device pixels.
- // Do this now so that we can get the other dimensions right.
- // (This may not achieve much with non-rectangular transformations.)
- dy = SnapToDevPixels(ctx, oneDevPixel, nsPoint(dx, dy)).y;
- // abcissa passed to DrawString
- offset[i] = dy;
- // _cairo_scaled_font_glyph_device_extents rounds outwards to the nearest
- // pixel, so the bm values can include 1 row of faint pixels on each edge.
- // Don't rely on this pixel as it can look like a gap.
- start[i] = dy - bm.ascent + oneDevPixel; // top join
- end[i] = dy + bm.descent - oneDevPixel; // bottom join
- }
-
- // If there are overlaps, then join at the mid point
- for (i = 0; i < bottom; ++i) {
- if (end[i] > start[i+1]) {
- end[i] = (end[i] + start[i+1]) / 2;
- start[i+1] = end[i];
- }
- }
-
- nsRect unionRect = aRect;
- unionRect.x += mBoundingMetrics.leftBearing;
- unionRect.width =
- mBoundingMetrics.rightBearing - mBoundingMetrics.leftBearing;
- unionRect.Inflate(oneDevPixel, oneDevPixel);
-
- /////////////////////////////////////
- // draw top, middle, bottom
- for (i = 0; i <= bottom; ++i) {
- ch = chdata[i];
- // glue can be null, and other parts could have been set to glue
- if (ch.Exists()) {
-#ifdef SHOW_BORDERS
- // bounding box of the part
- aRenderingContext.SetColor(NS_RGB(0,0,0));
- aRenderingContext.DrawRect(nsRect(dx,start[i],aRect.width+30*(i+1),end[i]-start[i]));
-#endif
- nscoord dy = offset[i];
- // Draw a glyph in a clipped area so that we don't have hairy chars
- // pending outside
- nsRect clipRect = unionRect;
- // Clip at the join to get a solid edge (without overlap or gap), when
- // this won't change the glyph too much. If the glyph is too small to
- // clip then we'll overlap rather than have a gap.
- nscoord height = bmdata[i].ascent + bmdata[i].descent;
- if (ch == chGlue ||
- height * (1.0 - NS_MATHML_DELIMITER_FACTOR) > oneDevPixel) {
- if (0 == i) { // top
- clipRect.height = end[i] - clipRect.y;
- }
- else if (bottom == i) { // bottom
- clipRect.height -= start[i] - clipRect.y;
- clipRect.y = start[i];
- }
- else { // middle
- clipRect.y = start[i];
- clipRect.height = end[i] - start[i];
- }
- }
- if (!clipRect.IsEmpty()) {
- AutoPushClipRect clip(aRenderingContext, clipRect);
- SetFontFamily(aPresContext, aRenderingContext,
- aFont, aGlyphTable, ch, mFamily);
- aRenderingContext.DrawString(&ch.code, 1, dx, dy);
- }
- }
- }
-
- ///////////////
- // fill the gap between top and middle, and between middle and bottom.
- if (!chGlue.Exists()) { // null glue : draw a rule
- // figure out the dimensions of the rule to be drawn :
- // set lbearing to rightmost lbearing among the two current successive parts.
- // set rbearing to leftmost rbearing among the two current successive parts.
- // this not only satisfies the convention used for over/underbraces
- // in TeX, but also takes care of broken fonts like the stretchy integral
- // in Symbol for small font sizes in unix.
- nscoord lbearing, rbearing;
- PRInt32 first = 0, last = 1;
- while (last <= bottom) {
- if (chdata[last].Exists()) {
- lbearing = bmdata[last].leftBearing;
- rbearing = bmdata[last].rightBearing;
- if (chdata[first].Exists()) {
- if (lbearing < bmdata[first].leftBearing)
- lbearing = bmdata[first].leftBearing;
- if (rbearing > bmdata[first].rightBearing)
- rbearing = bmdata[first].rightBearing;
- }
- }
- else if (chdata[first].Exists()) {
- lbearing = bmdata[first].leftBearing;
- rbearing = bmdata[first].rightBearing;
- }
- else {
- NS_ERROR("Cannot stretch - All parts missing");
- return NS_ERROR_UNEXPECTED;
- }
- // paint the rule between the parts
- nsRect rule(aRect.x + lbearing, end[first],
- rbearing - lbearing, start[last] - end[first]);
- if (!rule.IsEmpty())
- aRenderingContext.FillRect(rule);
- first = last;
- last++;
- }
- }
- else if (bmdata[glue].ascent + bmdata[glue].descent > 0) {
- // glue is present
- nsBoundingMetrics& bm = bmdata[glue];
- // Ensure the stride for the glue is not reduced to less than one pixel
- if (bm.ascent + bm.descent >= 3 * oneDevPixel) {
- // To protect against gaps, pretend the glue is smaller than it is,
- // in order to trim off ends and thus get a solid edge for the join.
- bm.ascent -= oneDevPixel;
- bm.descent -= oneDevPixel;
- }
-
- SetFontFamily(aPresContext, aRenderingContext,
- aFont, aGlyphTable, chGlue, mFamily);
- nsRect clipRect = unionRect;
-
- for (i = 0; i < bottom; ++i) {
- // Make sure not to draw outside the character
- nscoord dy = PR_MAX(end[i], aRect.y);
- nscoord fillEnd = PR_MIN(start[i+1], aRect.YMost());
-#ifdef SHOW_BORDERS
- // exact area to fill
- aRenderingContext.SetColor(NS_RGB(255,0,0));
- clipRect.y = dy;
- clipRect.height = fillEnd - dy;
- aRenderingContext.DrawRect(clipRect);
- {
-#endif
- while (dy < fillEnd) {
- clipRect.y = dy;
- clipRect.height = PR_MIN(bm.ascent + bm.descent, fillEnd - dy);
- AutoPushClipRect clip(aRenderingContext, clipRect);
- dy += bm.ascent;
- aRenderingContext.DrawString(&chGlue.code, 1, dx, dy);
- dy += bm.descent;
- }
-#ifdef SHOW_BORDERS
- }
- // last glyph that may cross past its boundary and collide with the next
- nscoord height = bm.ascent + bm.descent;
- aRenderingContext.SetColor(NS_RGB(0,255,0));
- aRenderingContext.DrawRect(nsRect(dx, dy-bm.ascent, aRect.width, height));
-#endif
- }
- }
-#ifdef DEBUG
- else {
- for (i = 0; i < bottom; ++i) {
- NS_ASSERTION(end[i] >= start[i+1],
- "gap between parts with missing glue glyph");
- }
- }
-#endif
- return NS_OK;
-}
-
-// paint a stretchy char by assembling glyphs horizontally
-nsresult
-nsMathMLChar::PaintHorizontally(nsPresContext* aPresContext,
- nsIRenderingContext& aRenderingContext,
- nsFont& aFont,
- nsStyleContext* aStyleContext,
- nsGlyphTable* aGlyphTable,
- nsRect& aRect)
-{
- nsresult rv = NS_OK;
- // Get the device pixel size in the horizontal direction.
- // (This makes no effort to optimize for non-translation transformations.)
- nscoord oneDevPixel = aPresContext->AppUnitsPerDevPixel();
-
- // get metrics data to be re-used later
- PRInt32 i = 0;
- nsGlyphCode ch, chdata[4];
- nsBoundingMetrics bmdata[4];
- PRInt32 glue, right;
- nsGlyphCode chGlue = aGlyphTable->GlueOf(aPresContext, this);
- for (PRInt32 j = 0; j < 4; ++j) {
- switch (j) {
- case 0:
- ch = aGlyphTable->LeftOf(aPresContext, this);
- break;
- case 1:
- ch = aGlyphTable->MiddleOf(aPresContext, this);
- if (!ch.Exists())
- continue; // no middle
- break;
- case 2:
- ch = aGlyphTable->RightOf(aPresContext, this);
- right = i;
- break;
- case 3:
- ch = chGlue;
- glue = i;
- break;
- }
- // empty slots are filled with the glue if it is not null
- if (!ch.Exists()) ch = chGlue;
- // if (!ch.Exists()) glue is null, leave bounding metrics at 0.
- if (ch.Exists()) {
- SetFontFamily(aPresContext, aRenderingContext,
- aFont, aGlyphTable, ch, mFamily);
- rv = aRenderingContext.GetBoundingMetrics(&ch.code, 1, bmdata[i]);
- if (NS_FAILED(rv)) {
- NS_WARNING("GetBoundingMetrics failed");
- return rv;
- }
- }
- chdata[i] = ch;
- ++i;
- }
- nscoord dy = aRect.y + mBoundingMetrics.ascent;
- nscoord offset[3], start[3], end[3];
- nsRefPtr<gfxContext> ctx = aRenderingContext.ThebesContext();
- for (i = 0; i <= right; ++i) {
- ch = chdata[i];
- const nsBoundingMetrics& bm = bmdata[i];
- nscoord dx;
- if (0 == i) { // left
- dx = aRect.x - bm.leftBearing;
- }
- else if (right == i) { // right
- dx = aRect.x + aRect.width - bm.rightBearing;
- }
- else { // middle
- dx = aRect.x + (aRect.width - bm.width)/2;
- }
- // _cairo_scaled_font_show_glyphs snaps origins to device pixels.
- // Do this now so that we can get the other dimensions right.
- // (This may not achieve much with non-rectangular transformations.)
- dx = SnapToDevPixels(ctx, oneDevPixel, nsPoint(dx, dy)).x;
- // abcissa passed to DrawString
- offset[i] = dx;
- // _cairo_scaled_font_glyph_device_extents rounds outwards to the nearest
- // pixel, so the bm values can include 1 row of faint pixels on each edge.
- // Don't rely on this pixel as it can look like a gap.
- start[i] = dx + bm.leftBearing + oneDevPixel; // left join
- end[i] = dx + bm.rightBearing - oneDevPixel; // right join
- }
-
- // If there are overlaps, then join at the mid point
- for (i = 0; i < right; ++i) {
- if (end[i] > start[i+1]) {
- end[i] = (end[i] + start[i+1]) / 2;
- start[i+1] = end[i];
- }
- }
-
- nsRect unionRect = aRect;
- unionRect.Inflate(oneDevPixel, oneDevPixel);
-
- ///////////////////////////
- // draw left, middle, right
- for (i = 0; i <= right; ++i) {
- ch = chdata[i];
- // glue can be null, and other parts could have been set to glue
- if (ch.Exists()) {
-#ifdef SHOW_BORDERS
- aRenderingContext.SetColor(NS_RGB(255,0,0));
- aRenderingContext.DrawRect(nsRect(start[i], dy - bmdata[i].ascent,
- end[i] - start[i], bmdata[i].ascent + bmdata[i].descent));
-#endif
- nscoord dx = offset[i];
- nsRect clipRect = unionRect;
- // Clip at the join to get a solid edge (without overlap or gap), when
- // this won't change the glyph too much. If the glyph is too small to
- // clip then we'll overlap rather than have a gap.
- nscoord width = bmdata[i].rightBearing - bmdata[i].leftBearing;
- if (ch == chGlue ||
- width * (1.0 - NS_MATHML_DELIMITER_FACTOR) > oneDevPixel) {
- if (0 == i) { // left
- clipRect.width = end[i] - clipRect.x;
- }
- else if (right == i) { // right
- clipRect.width -= start[i] - clipRect.x;
- clipRect.x = start[i];
- }
- else { // middle
- clipRect.x = start[i];
- clipRect.width = end[i] - start[i];
- }
- }
- if (!clipRect.IsEmpty()) {
- AutoPushClipRect clip(aRenderingContext, clipRect);
- SetFontFamily(aPresContext, aRenderingContext,
- aFont, aGlyphTable, ch, mFamily);
- aRenderingContext.DrawString(&ch.code, 1, dx, dy);
- }
- }
- }
-
- ////////////////
- // fill the gap between left and middle, and between middle and right.
- if (!chGlue.Exists()) { // null glue : draw a rule
- // figure out the dimensions of the rule to be drawn :
- // set ascent to lowest ascent among the two current successive parts.
- // set descent to highest descent among the two current successive parts.
- // this satisfies the convention used for over/underbraces, and helps
- // fix broken fonts.
- nscoord ascent, descent;
- PRInt32 first = 0, last = 1;
- while (last <= right) {
- if (chdata[last].Exists()) {
- ascent = bmdata[last].ascent;
- descent = bmdata[last].descent;
- if (chdata[first].Exists()) {
- if (ascent > bmdata[first].ascent)
- ascent = bmdata[first].ascent;
- if (descent > bmdata[first].descent)
- descent = bmdata[first].descent;
- }
- }
- else if (chdata[first].Exists()) {
- ascent = bmdata[first].ascent;
- descent = bmdata[first].descent;
- }
- else {
- NS_ERROR("Cannot stretch - All parts missing");
- return NS_ERROR_UNEXPECTED;
- }
- // paint the rule between the parts
- nsRect rule(end[first], dy - ascent,
- start[last] - end[first], ascent + descent);
- if (!rule.IsEmpty())
- aRenderingContext.FillRect(rule);
- first = last;
- last++;
- }
- }
- else if (bmdata[glue].rightBearing - bmdata[glue].leftBearing > 0) {
- // glue is present
- nsBoundingMetrics& bm = bmdata[glue];
- // Ensure the stride for the glue is not reduced to less than one pixel
- if (bm.rightBearing - bm.leftBearing >= 3 * oneDevPixel) {
- // To protect against gaps, pretend the glue is smaller than it is,
- // in order to trim off ends and thus get a solid edge for the join.
- bm.leftBearing += oneDevPixel;
- bm.rightBearing -= oneDevPixel;
- }
-
- SetFontFamily(aPresContext, aRenderingContext,
- aFont, aGlyphTable, chGlue, mFamily);
- nsRect clipRect = unionRect;
-
- for (i = 0; i < right; ++i) {
- // Make sure not to draw outside the character
- nscoord dx = PR_MAX(end[i], aRect.x);
- nscoord fillEnd = PR_MIN(start[i+1], aRect.XMost());
-#ifdef SHOW_BORDERS
- // rectangles in-between that are to be filled
- aRenderingContext.SetColor(NS_RGB(255,0,0));
- clipRect.x = dx;
- clipRect.width = fillEnd - dx;
- aRenderingContext.DrawRect(clipRect);
- {
-#endif
- while (dx < fillEnd) {
- clipRect.x = dx;
- clipRect.width = PR_MIN(bm.rightBearing - bm.leftBearing, fillEnd - dx);
- AutoPushClipRect clip(aRenderingContext, clipRect);
- dx -= bm.leftBearing;
- aRenderingContext.DrawString(&chGlue.code, 1, dx, dy);
- dx += bm.rightBearing;
- }
-#ifdef SHOW_BORDERS
- }
- // last glyph that may cross past its boundary and collide with the next
- nscoord width = bm.rightBearing - bm.leftBearing;
- aRenderingContext.SetColor(NS_RGB(0,255,0));
- aRenderingContext.DrawRect(nsRect(dx + bm.leftBearing, aRect.y, width, aRect.height));
-#endif
- }
- }
-#ifdef DEBUG
- else { // no glue
- for (i = 0; i < right; ++i) {
- NS_ASSERTION(end[i] >= start[i+1],
- "gap between parts with missing glue glyph");
- }
- }
-#endif
- return NS_OK;
-}
deleted file mode 100644
--- a/layout/mathml/base/src/nsMathMLChar.h
+++ /dev/null
@@ -1,288 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla MathML Project.
- *
- * The Initial Developer of the Original Code is
- * The University Of Queensland.
- * Portions created by the Initial Developer are Copyright (C) 1999
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Roger B. Sidje <rbs@maths.uq.edu.au>
- * Shyjan Mahamud <mahamud@cs.cmu.edu>
- * Karl Tomlinson <karlt+@karlt.net>, Mozilla Corporation
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either of the GNU General Public License Version 2 or later (the "GPL"),
- * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-#ifndef nsMathMLChar_h___
-#define nsMathMLChar_h___
-
-#include "nsMathMLOperators.h"
-#include "nsMathMLFrame.h"
-
-class nsGlyphTable;
-
-// Hints for Stretch() to indicate criteria for stretching
-enum {
- // Don't stretch
- NS_STRETCH_NONE = 0x00,
- // Variable size stretches
- NS_STRETCH_VARIABLE_MASK = 0x0F,
- NS_STRETCH_NORMAL = 0x01, // try to stretch to requested size
- NS_STRETCH_NEARER = 0x02, // stretch very close to requested size
- NS_STRETCH_SMALLER = 0x04, // don't stretch more than requested size
- NS_STRETCH_LARGER = 0x08, // don't stretch less than requested size
- // A largeop in displaystyle
- NS_STRETCH_LARGEOP = 0x10,
- // Intended for internal use:
- // Find the widest metrics that might be returned from a vertical stretch
- NS_STRETCH_MAXWIDTH = 0x20
-};
-
-// A single glyph in our internal representation is characterized by a 'code@font'
-// pair. The 'code' is interpreted as a Unicode point or as the direct glyph index
-// (depending on the type of nsGlyphTable where this comes from). The 'font' is a
-// numeric identifier given to the font to which the glyph belongs.
-struct nsGlyphCode {
- PRUnichar code;
- PRInt32 font;
-
- PRBool Exists() const
- {
- return (code != 0);
- }
- PRBool operator==(const nsGlyphCode& other) const
- {
- return other.code == code && other.font == font;
- }
- PRBool operator!=(const nsGlyphCode& other) const
- {
- return ! operator==(other);
- }
-};
-
-// Class used to handle stretchy symbols (accent, delimiter and boundary symbols).
-// There are composite characters that need to be built recursively from other
-// characters. Since these are rare we use a light-weight mechanism to handle
-// them. Specifically, as need arises we append a singly-linked list of child
-// chars with their mParent pointing to the first element in the list, except in
-// the originating first element itself where it points to null. mSibling points
-// to the next element in the list. Since the originating first element is the
-// parent of the others, we call it the "root" char of the list. Testing !mParent
-// tells whether you are that "root" during the recursion. The parent delegates
-// most of the tasks to the children.
-class nsMathMLChar
-{
-public:
- // constructor and destructor
- nsMathMLChar(nsMathMLChar* aParent = nsnull) {
- MOZ_COUNT_CTOR(nsMathMLChar);
- mStyleContext = nsnull;
- mSibling = nsnull;
- mParent = aParent;
- }
-
- ~nsMathMLChar() { // not a virtual destructor: this class is not intended to be subclassed
- MOZ_COUNT_DTOR(nsMathMLChar);
- // there is only one style context owned by the "root" char
- // and it may be used by child chars as well
- if (!mParent && mStyleContext) { // only the "root" need to release it
- mStyleContext->Release();
- }
- if (mSibling) {
- delete mSibling;
- }
- }
-
- nsresult
- Display(nsDisplayListBuilder* aBuilder,
- nsIFrame* aForFrame,
- const nsDisplayListSet& aLists,
- const nsRect* aSelectedRect = nsnull);
-
- void PaintForeground(nsPresContext* aPresContext,
- nsIRenderingContext& aRenderingContext,
- nsPoint aPt,
- PRBool aIsSelected);
-
- // This is the method called to ask the char to stretch itself.
- // @param aContainerSize - IN - suggested size for the stretched char
- // @param aDesiredStretchSize - OUT - the size that the char wants
- nsresult
- Stretch(nsPresContext* aPresContext,
- nsIRenderingContext& aRenderingContext,
- nsStretchDirection aStretchDirection,
- const nsBoundingMetrics& aContainerSize,
- nsBoundingMetrics& aDesiredStretchSize,
- PRUint32 aStretchHint = NS_STRETCH_NORMAL);
-
- void
- SetData(nsPresContext* aPresContext,
- nsString& aData);
-
- void
- GetData(nsString& aData) {
- aData = mData;
- }
-
- PRInt32
- Length() {
- return mData.Length();
- }
-
- nsStretchDirection
- GetStretchDirection() {
- return mDirection;
- }
-
- // Sometimes we only want to pass the data to another routine,
- // this function helps to avoid copying
- const PRUnichar*
- get() {
- return mData.get();
- }
-
- void
- GetRect(nsRect& aRect) {
- aRect = mRect;
- }
-
- void
- SetRect(const nsRect& aRect) {
- mRect = aRect;
- // shift the orgins of child chars if any
- if (!mParent && mSibling) { // only a "root" having child chars can enter here
- for (nsMathMLChar* child = mSibling; child; child = child->mSibling) {
- nsRect rect;
- child->GetRect(rect);
- rect.MoveBy(mRect.x, mRect.y);
- child->SetRect(rect);
- }
- }
- }
-
- // Get the maximum width that the character might have after a vertical
- // Stretch().
- //
- // @param aStretchHint can be the value that will be passed to Stretch().
- // It is used to determine whether the operator is stretchy or a largeop.
- // @param aMaxSize is the value of the "maxsize" attribute.
- // @param aMaxSizeIsAbsolute indicates whether the aMaxSize is an absolute
- // value in app units (PR_TRUE) or a multiplier of the base size (PR_FALSE).
- nscoord
- GetMaxWidth(nsPresContext* aPresContext,
- nsIRenderingContext& aRenderingContext,
- PRUint32 aStretchHint = NS_STRETCH_NORMAL,
- float aMaxSize = NS_MATHML_OPERATOR_SIZE_INFINITY,
- // Perhaps just nsOperatorFlags aFlags.
- // But need DisplayStyle for largeOp,
- // or remove the largeop bit from flags.
- PRBool aMaxSizeIsAbsolute = PR_FALSE);
-
- // Metrics that _exactly_ enclose the char. The char *must* have *already*
- // being stretched before you can call the GetBoundingMetrics() method.
- // IMPORTANT: since chars have their own style contexts, and may be rendered
- // with glyphs that are not in the parent font, just calling the default
- // aRenderingContext.GetBoundingMetrics(aChar) can give incorrect results.
- void
- GetBoundingMetrics(nsBoundingMetrics& aBoundingMetrics) {
- aBoundingMetrics = mBoundingMetrics;
- }
-
- void
- SetBoundingMetrics(nsBoundingMetrics& aBoundingMetrics) {
- mBoundingMetrics = aBoundingMetrics;
- }
-
- // Hooks to access the extra leaf style contexts given to the MathMLChars.
- // They provide an interface to make them accessible to the Style System via
- // the Get/Set AdditionalStyleContext() APIs. Owners of MathMLChars
- // should honor these APIs.
- nsStyleContext* GetStyleContext() const;
-
- void SetStyleContext(nsStyleContext* aStyleContext);
-
-protected:
- friend class nsGlyphTable;
- nsString mData;
-
- // support for handling composite stretchy chars like TeX over/under braces
- nsMathMLChar* mSibling;
- nsMathMLChar* mParent;
-
-private:
- nsRect mRect;
- PRInt32 mOperator;
- nsStretchDirection mDirection;
- nsBoundingMetrics mBoundingMetrics;
- nsStyleContext* mStyleContext;
- nsGlyphTable* mGlyphTable;
- nsGlyphCode mGlyph;
- // mFamily is non-empty when the family for the current size is different
- // from the family in the nsStyleContext.
- nsString mFamily;
-
- class StretchEnumContext;
- friend class StretchEnumContext;
-
- // helper methods
- nsresult
- StretchInternal(nsPresContext* aPresContext,
- nsIRenderingContext& aRenderingContext,
- nsStretchDirection& aStretchDirection,
- const nsBoundingMetrics& aContainerSize,
- nsBoundingMetrics& aDesiredStretchSize,
- PRUint32 aStretchHint,
- float aMaxSize = NS_MATHML_OPERATOR_SIZE_INFINITY,
- PRBool aMaxSizeIsAbsolute = PR_FALSE);
-
- nsresult
- ComposeChildren(nsPresContext* aPresContext,
- nsIRenderingContext& aRenderingContext,
- nsGlyphTable* aGlyphTable,
- nscoord aTargetSize,
- nsBoundingMetrics& aCompositeSize,
- PRUint32 aStretchHint);
-
- nsresult
- PaintVertically(nsPresContext* aPresContext,
- nsIRenderingContext& aRenderingContext,
- nsFont& aFont,
- nsStyleContext* aStyleContext,
- nsGlyphTable* aGlyphTable,
- nsRect& aRect);
-
- nsresult
- PaintHorizontally(nsPresContext* aPresContext,
- nsIRenderingContext& aRenderingContext,
- nsFont& aFont,
- nsStyleContext* aStyleContext,
- nsGlyphTable* aGlyphTable,
- nsRect& aRect);
-};
-
-#endif /* nsMathMLChar_h___ */
deleted file mode 100644
--- a/layout/mathml/base/src/nsMathMLContainerFrame.cpp
+++ /dev/null
@@ -1,1477 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla MathML Project.
- *
- * The Initial Developer of the Original Code is
- * The University Of Queensland.
- * Portions created by the Initial Developer are Copyright (C) 1999
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Roger B. Sidje <rbs@maths.uq.edu.au>
- * David J. Fiddes <D.J.Fiddes@hw.ac.uk>
- * Pierre Phaneuf <pp@ludusdesign.com>
- * Karl Tomlinson <karlt+@karlt.net>, Mozilla Corporation
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either of the GNU General Public License Version 2 or later (the "GPL"),
- * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-#include "nsCOMPtr.h"
-#include "nsHTMLParts.h"
-#include "nsFrame.h"
-#include "nsPresContext.h"
-#include "nsIPresShell.h"
-#include "nsCSSAnonBoxes.h"
-#include "nsStyleContext.h"
-#include "nsStyleConsts.h"
-#include "nsINameSpaceManager.h"
-#include "nsIRenderingContext.h"
-#include "nsIFontMetrics.h"
-
-#include "nsIDOMText.h"
-#include "nsIDOMMutationEvent.h"
-#include "nsFrameManager.h"
-#include "nsStyleChangeList.h"
-
-#include "nsGkAtoms.h"
-#include "nsMathMLParts.h"
-#include "nsMathMLContainerFrame.h"
-#include "nsAutoPtr.h"
-#include "nsStyleSet.h"
-#include "nsDisplayList.h"
-#include "nsCSSFrameConstructor.h"
-#include "nsIReflowCallback.h"
-
-//
-// nsMathMLContainerFrame implementation
-//
-
-NS_QUERYFRAME_HEAD(nsMathMLContainerFrame)
- NS_QUERYFRAME_ENTRY(nsMathMLFrame)
-NS_QUERYFRAME_TAIL_INHERITING(nsHTMLContainerFrame)
-
-// =============================================================================
-
-// error handlers
-// provide a feedback to the user when a frame with bad markup can not be rendered
-nsresult
-nsMathMLContainerFrame::ReflowError(nsIRenderingContext& aRenderingContext,
- nsHTMLReflowMetrics& aDesiredSize)
-{
- nsresult rv;
-
- // clear all other flags and record that there is an error with this frame
- mEmbellishData.flags = 0;
- mPresentationData.flags = NS_MATHML_ERROR;
-
- ///////////////
- // Set font
- nsLayoutUtils::SetFontFromStyle(&aRenderingContext, GetStyleContext());
-
- // bounding metrics
- nsAutoString errorMsg; errorMsg.AssignLiteral("invalid-markup");
- rv = aRenderingContext.GetBoundingMetrics(errorMsg.get(),
- PRUint32(errorMsg.Length()),
- mBoundingMetrics);
- if (NS_FAILED(rv)) {
- NS_WARNING("GetBoundingMetrics failed");
- aDesiredSize.width = aDesiredSize.height = 0;
- aDesiredSize.ascent = 0;
- return NS_OK;
- }
-
- // reflow metrics
- nsCOMPtr<nsIFontMetrics> fm;
- aRenderingContext.GetFontMetrics(*getter_AddRefs(fm));
- fm->GetMaxAscent(aDesiredSize.ascent);
- nscoord descent;
- fm->GetMaxDescent(descent);
- aDesiredSize.height = aDesiredSize.ascent + descent;
- aDesiredSize.width = mBoundingMetrics.width;
-
- // Also return our bounding metrics
- aDesiredSize.mBoundingMetrics = mBoundingMetrics;
-
- return NS_OK;
-}
-
-class nsDisplayMathMLError : public nsDisplayItem {
-public:
- nsDisplayMathMLError(nsIFrame* aFrame)
- : nsDisplayItem(aFrame) {
- MOZ_COUNT_CTOR(nsDisplayMathMLError);
- }
-#ifdef NS_BUILD_REFCNT_LOGGING
- virtual ~nsDisplayMathMLError() {
- MOZ_COUNT_DTOR(nsDisplayMathMLError);
- }
-#endif
-
- virtual void Paint(nsDisplayListBuilder* aBuilder, nsIRenderingContext* aCtx,
- const nsRect& aDirtyRect);
- NS_DISPLAY_DECL_NAME("MathMLError")
-};
-
-void nsDisplayMathMLError::Paint(nsDisplayListBuilder* aBuilder,
- nsIRenderingContext* aCtx, const nsRect& aDirtyRect)
-{
- // Set color and font ...
- nsLayoutUtils::SetFontFromStyle(aCtx, mFrame->GetStyleContext());
-