]> matita.cs.unibo.it Git - helm.git/commitdiff
new experimental cic textual parser: checkin
authorStefano Zacchiroli <zack@upsilon.cc>
Mon, 15 Dec 2003 23:00:39 +0000 (23:00 +0000)
committerStefano Zacchiroli <zack@upsilon.cc>
Mon, 15 Dec 2003 23:00:39 +0000 (23:00 +0000)
21 files changed:
helm/ocaml/cic_disambiguation/.cvsignore [new file with mode: 0644]
helm/ocaml/cic_disambiguation/.depend [new file with mode: 0644]
helm/ocaml/cic_disambiguation/Makefile [new file with mode: 0644]
helm/ocaml/cic_disambiguation/arit_notation.ml [new file with mode: 0644]
helm/ocaml/cic_disambiguation/ast.mli [new file with mode: 0644]
helm/ocaml/cic_disambiguation/lexer.ml [new file with mode: 0644]
helm/ocaml/cic_disambiguation/lexer.mli [new file with mode: 0644]
helm/ocaml/cic_disambiguation/logic_notation.ml [new file with mode: 0644]
helm/ocaml/cic_disambiguation/macro.ml [new file with mode: 0644]
helm/ocaml/cic_disambiguation/macro.mli [new file with mode: 0644]
helm/ocaml/cic_disambiguation/macro_table.dump [new file with mode: 0644]
helm/ocaml/cic_disambiguation/macros/dictionary-tex.xml [new file with mode: 0644]
helm/ocaml/cic_disambiguation/macros/entities-table.xml [new file with mode: 0644]
helm/ocaml/cic_disambiguation/macros/extra-entities.xml [new file with mode: 0644]
helm/ocaml/cic_disambiguation/make_table.ml [new file with mode: 0644]
helm/ocaml/cic_disambiguation/pa_unicode_macro.ml [new file with mode: 0644]
helm/ocaml/cic_disambiguation/parser.ml [new file with mode: 0644]
helm/ocaml/cic_disambiguation/pp.ml [new file with mode: 0644]
helm/ocaml/cic_disambiguation/pp.mli [new file with mode: 0644]
helm/ocaml/cic_disambiguation/test_lexer.ml [new file with mode: 0644]
helm/ocaml/cic_disambiguation/test_parser.ml [new file with mode: 0644]

diff --git a/helm/ocaml/cic_disambiguation/.cvsignore b/helm/ocaml/cic_disambiguation/.cvsignore
new file mode 100644 (file)
index 0000000..b94ae04
--- /dev/null
@@ -0,0 +1,7 @@
+*.cma
+*.cmo
+*.cmi
+*.cmx
+*.cmxa
+test_lexer
+test_parser
diff --git a/helm/ocaml/cic_disambiguation/.depend b/helm/ocaml/cic_disambiguation/.depend
new file mode 100644 (file)
index 0000000..16d5769
--- /dev/null
@@ -0,0 +1,9 @@
+pp.cmi: ast.cmi 
+pp.cmo: ast.cmi pp.cmi 
+pp.cmx: ast.cmi pp.cmi 
+macro.cmo: macro.cmi 
+macro.cmx: macro.cmi 
+lexer.cmo: macro.cmi lexer.cmi 
+lexer.cmx: macro.cmx lexer.cmi 
+parser.cmo: ast.cmi lexer.cmi 
+parser.cmx: ast.cmi lexer.cmx 
diff --git a/helm/ocaml/cic_disambiguation/Makefile b/helm/ocaml/cic_disambiguation/Makefile
new file mode 100644 (file)
index 0000000..4827da6
--- /dev/null
@@ -0,0 +1,47 @@
+
+PACKAGE = cic_textual_parser2
+REQUIRES = ulex camlp4 pxp
+INTERFACE_FILES = ast.mli pp.mli macro.mli lexer.mli
+NOTATIONS = logic arit
+IMPLEMENTATION_FILES = \
+       pp.ml macro.ml lexer.ml parser.ml \
+       $(patsubst %,%_notation.ml,$(NOTATIONS))
+
+ULEXDIR := $(shell ocamlfind query ulex)
+
+LEXER_P4_OPTS = -I $(ULEXDIR) pa_ulex.cma
+PARSER_P4_OPTS = pa_extend.cmo ./macro.cmo ./pa_unicode_macro.cmo
+PA_P4_OPTS = q_MLast.cmo pa_extend.cmo
+
+include ../Makefile.common
+
+lexer.cmo: lexer.ml
+       $(OCAMLC) -pp "camlp4o $(LEXER_P4_OPTS)" -c $<
+parser.cmo: parser.ml macro.cmo pa_unicode_macro.cmo
+       $(OCAMLC) -pp "camlp4o $(PARSER_P4_OPTS)" -c $<
+
+%_notation.cmo: %_notation.ml parser.cmo
+       $(OCAMLC) -pp "camlp4o $(PARSER_P4_OPTS)" -c $<
+
+pa_unicode_macro.cmo: pa_unicode_macro.ml macro.cmo
+       $(OCAMLC) -pp "camlp4o $(PA_P4_OPTS)" -c $<
+
+LOCAL_LINKOPTS = -linkpkg gramlib.cma $(PACKAGE).cma
+test: test_lexer test_parser
+test_lexer: test_lexer.ml $(PACKAGE).cma
+       $(OCAMLC) $(LOCAL_LINKOPTS) -o $@ $<
+test_parser: test_parser.ml $(PACKAGE).cma
+       $(OCAMLC) $(LOCAL_LINKOPTS) -o $@ $<
+make_table: make_table.ml
+       $(OCAMLC) -linkpkg -o $@ $<
+
+.PHONY: macro_table.dump
+macro_table.dump: make_table
+       ./make_table $@
+
+clean: extra_clean
+distclean: extra_clean
+       rm -f macro_table.dump
+extra_clean:
+       rm -f test_lexer test_parser make_table
+
diff --git a/helm/ocaml/cic_disambiguation/arit_notation.ml b/helm/ocaml/cic_disambiguation/arit_notation.ml
new file mode 100644 (file)
index 0000000..522021f
--- /dev/null
@@ -0,0 +1,27 @@
+open Ast
+open Parser
+
+EXTEND
+  term: LEVEL "add"
+    [
+      [ t1 = term; SYMBOL "+"; t2 = term ->
+          return_term loc (Appl [Ident ("plus", []); t1; t2])
+      | t1 = term; SYMBOL "-"; t2 = term ->
+          return_term loc (Appl [Ident ("minus", []); t1; t2])
+      ]
+    ];
+  term: LEVEL "mult"
+    [
+      [ t1 = term; SYMBOL "*"; t2 = term ->
+          return_term loc (Appl [Ident ("times", []); t1; t2])
+      | t1 = term; SYMBOL "/"; t2 = term ->
+          return_term loc (Appl [Ident ("div", []); t1; t2])
+      ]
+    ];
+  term: LEVEL "inv"
+    [
+      [ SYMBOL "-"; t = term ->
+        return_term loc (Appl [Ident ("uminus", []); t])
+      ]
+    ];
+END
diff --git a/helm/ocaml/cic_disambiguation/ast.mli b/helm/ocaml/cic_disambiguation/ast.mli
new file mode 100644 (file)
index 0000000..d579ccd
--- /dev/null
@@ -0,0 +1,107 @@
+
+  (* when an 'ident option is None, the default is to apply the tactic
+  to the current goal *)
+
+type reduction_kind = [ `Reduce | `Simpl | `Whd ]
+
+type 'term pattern =
+  | Pattern of 'term
+
+type location = int * int
+
+type ('term, 'ident) tactic =
+  | LocatedTactic of location * ('term, 'ident) tactic
+
+  | Absurd
+  | Apply of 'term
+  | Assumption
+  | Change of 'term * 'term * 'ident option (* what, with what, where *)
+  | Change_pattern of 'term pattern * 'term * 'ident option
+      (* what, with what, where *)
+  | Contradiction
+  | Cut of 'term
+  | Decompose of 'ident * 'ident list (* which hypothesis, which principles *)
+  | Discriminate of 'ident
+  | Elim of 'term * 'term option (* what to elim, which principle to use *)
+  | ElimType of 'term
+  | Exact of 'term
+  | Exists
+  | Fold of reduction_kind * 'term
+  | Fourier
+  | Injection of 'ident
+  | Intros of int option
+  | Left
+  | LetIn of 'term * 'ident
+  | Named_intros of 'ident list
+  | Reduce of reduction_kind * 'term pattern * 'ident option (* what, where *)
+  | Reflexivity
+  | Replace of 'term * 'term (* what, with what *)
+  | Replace_pattern of 'term pattern * 'term
+  | RewriteLeft of 'term * 'ident option
+  | RewriteRight of 'term * 'ident option
+  | Right
+  | Ring
+  | Split
+  | Symmetry
+  | Transitivity of 'term
+
+type 'tactic tactical =
+  | LocatedTactical of location * 'tactic tactical
+
+  | Fail
+  | For of int * 'tactic tactical
+  | IdTac
+  | Repeat of 'tactic tactical
+  | Seq of 'tactic tactical list (* sequential composition *)
+  | Tactic of 'tactic
+  | Then of 'tactic tactical * 'tactic tactical list
+  | Tries of 'tactic tactical list
+      (* try a sequence of tacticals until one succeeds, fail otherwise *)
+  | Try of 'tactic tactical (* try a tactical and mask failures *)
+
+type binder_kind = [ `Lambda | `Pi | `Exists | `Forall ]
+
+type case_pattern = string list
+
+type term =
+  | LocatedTerm of location * term
+
+  | Appl of term list
+  | Binder of binder_kind * string * term option * term
+      (* kind, name, type, body *)
+  | Case of term * term option * (case_pattern * term) list
+    (* what to match, case type, <pattern,action> list *)
+  | LetIn of string * term * term  (* name, body, where *)
+  | LetRec of (string * term * term option * int) list * term
+      (* (name, body, type, decreasing argument) list, where *)
+  | Ident of string * subst list
+  | Meta of string * meta_subst list
+  | Int of int
+
+and meta_subst = term option
+and subst = string * term
+
+(*
+type cexpr =
+  | Symbol of string option * string * (subst option) * string option         
+                                     (* h:xref, name, subst, definitionURL *)
+  | LocalVar of string option * string        (* h:xref, name *)
+  | Meta of string option * string * meta_subst (* h:xref, name, meta_subst *)
+  | Num of string option * string             (* h:xref, value *)
+  | Appl of string option * cexpr list        (* h:xref, args *)
+  | Binder of string option *string * decl * cexpr   
+                                       (* h:xref, name, decl, body *)
+  | Letin of string option * def * cexpr          (* h:xref, def, body *)
+  | Letrec of string option * def list * cexpr    (* h:xref, def list, body *)
+  | Case of string option * cexpr * ((string * cexpr) list)
+                              (* h:xref, case_expr, named-pattern list *)
+and 
+  decl = string * cexpr               (* name, type *)
+and
+  def = string * cexpr               (* name, body *)
+and
+  subst = (UriManager.uri * cexpr) list
+and
+  meta_subst = cexpr option list
+*)
+
diff --git a/helm/ocaml/cic_disambiguation/lexer.ml b/helm/ocaml/cic_disambiguation/lexer.ml
new file mode 100644 (file)
index 0000000..7900379
--- /dev/null
@@ -0,0 +1,71 @@
+
+exception Error of int * int * string
+
+let regexp alpha = [ 'a' - 'z' 'A' - 'Z' ]
+let regexp digit = [ '0' - '9' ]
+let regexp blank = [ ' ' '\t' '\n' ]
+
+let regexp blanks = blank+
+let regexp num = digit+
+let regexp ident = alpha (alpha | num)*
+let regexp symbol = [^ 'a' - 'z' 'A' - 'Z' '0' - '9' ' ' '\t' '\n' ]
+let regexp tex_token = '\\' alpha+
+let regexp lparen = [ '(' '[' '{' ]
+let regexp rparen = [ ')' ']' '}' ]
+let regexp meta = '?' (alpha | num)+
+
+let keywords = Hashtbl.create 17
+let _ =
+  List.iter (fun keyword -> Hashtbl.add keywords keyword ("", keyword))
+    [ "Prop"; "Type"; "Set"; "let"; "rec"; "using"; "match"; "with" ]
+
+let error lexbuf msg =
+  raise (Error (Ulexing.lexeme_start lexbuf, Ulexing.lexeme_end lexbuf, msg))
+let error_at_end lexbuf msg =
+  raise (Error (Ulexing.lexeme_end lexbuf, Ulexing.lexeme_end lexbuf, msg))
+
+let return lexbuf token = (token, Ulexing.loc lexbuf)
+
+let rec token = lexer
+| blanks -> token lexbuf
+| ident ->
+    let lexeme = Ulexing.utf8_lexeme lexbuf in
+    (try
+      return lexbuf (Hashtbl.find keywords lexeme)
+    with Not_found ->
+      return lexbuf ("IDENT", lexeme))
+| num -> return lexbuf ("INT", Ulexing.utf8_lexeme lexbuf)
+| lparen -> return lexbuf ("LPAREN", Ulexing.utf8_lexeme lexbuf)
+| rparen -> return lexbuf ("RPAREN", Ulexing.utf8_lexeme lexbuf)
+| meta -> return lexbuf ("META", Ulexing.utf8_lexeme lexbuf)
+| symbol -> return lexbuf ("SYMBOL", Ulexing.utf8_lexeme lexbuf)
+| tex_token ->
+    let macro =
+      Ulexing.utf8_sub_lexeme lexbuf 1 (Ulexing.lexeme_length lexbuf - 1)
+    in
+    (try
+      return lexbuf ("SYMBOL", Macro.expand macro)
+    with Macro.Macro_not_found _ ->
+      return lexbuf ("SYMBOL", Ulexing.utf8_lexeme lexbuf))
+| eof -> return lexbuf ("EOI", "")
+| _ -> error lexbuf "Invalid character"
+
+let tok_func stream =
+  let lexbuf = Ulexing.from_utf8_stream stream in
+  Token.make_stream_and_location
+    (fun () ->
+      try
+       token lexbuf
+      with
+      | Ulexing.Error -> error_at_end lexbuf "Unexpected character"
+      | Ulexing.InvalidCodepoint i -> error_at_end lexbuf "Invalid code point")
+
+let lex =
+  { 
+    Token.tok_func = tok_func;
+    Token.tok_using = (fun _ -> ());
+    Token.tok_removing = (fun _ -> ()); 
+    Token.tok_match = Token.default_match;
+    Token.tok_text = Token.lexer_text;
+    Token.tok_comm = None;
+  }
diff --git a/helm/ocaml/cic_disambiguation/lexer.mli b/helm/ocaml/cic_disambiguation/lexer.mli
new file mode 100644 (file)
index 0000000..f8fe7c9
--- /dev/null
@@ -0,0 +1,5 @@
+
+exception Error of int * int * string
+
+val lex : (string * string) Token.glexer
+
diff --git a/helm/ocaml/cic_disambiguation/logic_notation.ml b/helm/ocaml/cic_disambiguation/logic_notation.ml
new file mode 100644 (file)
index 0000000..35ce4b9
--- /dev/null
@@ -0,0 +1,23 @@
+open Ast
+open Parser
+
+EXTEND
+  term: LEVEL "add"
+    [
+      [ t1 = term; SYMBOL "∨"; t2 = term ->
+          return_term loc (Appl [Ident ("or", []); t1; t2])
+      ]
+    ];
+  term: LEVEL "mult"
+    [
+      [ t1 = term; SYMBOL "∧"; t2 = term ->
+        return_term loc (Appl [Ident ("and", []); t1; t2])
+      ]
+    ];
+  term: LEVEL "inv"
+    [
+      [ SYMBOL "¬"; t = term ->
+        return_term loc (Appl [Ident ("not", []); t])
+      ]
+    ];
+END
diff --git a/helm/ocaml/cic_disambiguation/macro.ml b/helm/ocaml/cic_disambiguation/macro.ml
new file mode 100644 (file)
index 0000000..fd93aa9
--- /dev/null
@@ -0,0 +1,28 @@
+
+exception Macro_not_found of string
+exception Utf8_not_found of string
+
+let dump_file = "macro_table.dump"
+
+let init () =
+  let ic = open_in dump_file in
+  let (macro2utf8, utf82macro):
+    ((string, string) Hashtbl.t * (string, string) Hashtbl.t)
+  =
+    Marshal.from_channel ic
+  in
+  close_in ic;
+  (macro2utf8, utf82macro)
+
+let (macro2utf8, utf82macro) = init ()
+
+let expand macro =
+  try
+    Hashtbl.find macro2utf8 macro
+  with Not_found -> raise (Macro_not_found macro)
+
+let contract utf8 =
+  try
+    Hashtbl.find utf82macro utf8
+  with Not_found -> raise (Utf8_not_found utf8)
+
diff --git a/helm/ocaml/cic_disambiguation/macro.mli b/helm/ocaml/cic_disambiguation/macro.mli
new file mode 100644 (file)
index 0000000..5f8cf59
--- /dev/null
@@ -0,0 +1,10 @@
+
+exception Macro_not_found of string
+exception Utf8_not_found of string
+
+  (* @param macro name
+     @return utf8 string *)
+val expand: string -> string
+
+val contract: string -> string
+
diff --git a/helm/ocaml/cic_disambiguation/macro_table.dump b/helm/ocaml/cic_disambiguation/macro_table.dump
new file mode 100644 (file)
index 0000000..627b86b
Binary files /dev/null and b/helm/ocaml/cic_disambiguation/macro_table.dump differ
diff --git a/helm/ocaml/cic_disambiguation/macros/dictionary-tex.xml b/helm/ocaml/cic_disambiguation/macros/dictionary-tex.xml
new file mode 100644 (file)
index 0000000..4799545
--- /dev/null
@@ -0,0 +1,378 @@
+<?xml version="1.0"?>
+
+<!--
+ This file is part of EdiTeX, an editor of mathematical
+ expressions based on TeX syntax.
+ Copyright (C) 2002-2003 Luca Padovani <lpadovan@cs.unibo.it>,
+                    2003 Paolo Marinelli <pmarinel@cs.unibo.it>.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ For more information, please visit the project's home page
+ http://helm.cs.unibo.it/editex/
+ or send an email to <lpadovan@cs.unibo.it>
+-->
+
+<dictionary name="TeX">
+
+  <include href="dictionary-basic.xml"/>
+
+  <!-- Greek Letters (lower case) -->
+
+  <entry name="alpha"      class="i" val="&#x03b1;"/>
+  <entry name="beta"       class="i" val="&#x03b2;"/>
+  <entry name="gamma"      class="i" val="&#x03b3;"/>
+  <entry name="delta"      class="i" val="&#x03b4;"/>
+  <entry name="epsilon"    class="i" val="&#x03f5;"/>
+  <entry name="varepsilon" class="i" val="&#x03b5;"/>
+  <entry name="zeta"       class="i" val="&#x03b6;"/>
+  <entry name="eta"        class="i" val="&#x03b7;"/>
+  <entry name="theta"      class="i" val="&#x03b8;"/>
+  <entry name="vartheta"   class="i" val="&#x03d1;"/>
+  <entry name="iota"       class="i" val="&#x03b9;"/>
+  <entry name="kappa"      class="i" val="&#x03ba;"/>
+  <entry name="lambda"     class="i" val="&#x03bb;"/>
+  <entry name="mu"         class="i" val="&#x03bc;"/>
+  <entry name="nu"         class="i" val="&#x03bd;"/>
+  <entry name="xi"         class="i" val="&#x03be;"/>
+  <entry name="o"          class="i" val="&#x03bf;"/>
+  <entry name="pi"         class="i" val="&#x03c0;"/>
+  <entry name="varpi"      class="i" val="&#x03d6;"/>
+  <entry name="rho"        class="i" val="&#x03c1;"/>
+  <entry name="varrho"     class="i" val="&#x03f1;"/>
+  <entry name="sigma"      class="i" val="&#x03c3;"/>
+  <entry name="varsigma"   class="i" val="&#x03c2;"/>
+  <entry name="tau"        class="i" val="&#x03c4;"/>
+  <entry name="upsilon"    class="i" val="&#x03c5;"/>
+  <entry name="phi"        class="i" val="&#x03d5;"/>
+  <entry name="varphi"     class="i" val="&#x03c6;"/>
+  <entry name="chi"        class="i" val="&#x03c7;"/>
+  <entry name="psi"        class="i" val="&#x03c8;"/>
+  <entry name="omega"      class="i" val="&#x03c9;"/>
+
+  <!-- Greek Letters (upper case) -->
+
+  <entry name="Gamma"   class="i" val="&#x0393;"/>
+  <entry name="Delta"   class="i" val="&#x0394;"/>
+  <entry name="Theta"   class="i" val="&#x0398;"/>
+  <entry name="Lambda"  class="i" val="&#x039b;"/>
+  <entry name="Xi"      class="i" val="&#x039e;"/>
+  <entry name="Pi"      class="i" val="&#x03a0;"/>
+  <entry name="Sigma"   class="i" val="&#x03a3;"/>
+  <entry name="Upsilon" class="i" val="&#x03d2;"/>
+  <entry name="Phi"     class="i" val="&#x03a6;"/>
+  <entry name="Psi"     class="i" val="&#x03a8;"/>
+  <entry name="Omega"   class="i" val="&#x03a9;"/>
+
+  <!-- Symbols of Type Ord -->
+
+  <entry name="aleph"       class="i" val="&#x2135;"/>
+  <entry name="hbar"        class="i" val="&#x210f;&#xfe00;"/>
+  <entry name="imath"       class="i" val="&#x0131;"/>
+  <entry name="jmath"       class="i" val="&#x006a;&#xfe00;"/>
+  <entry name="ell"         class="i" val="&#x2113;"/>
+  <entry name="wp"          class="i" val="&#x2118;"/>
+  <entry name="Re"          class="o" val="&#x211c;"/>
+  <entry name="Im"          class="o" val="&#x2111;"/>
+  <entry name="partial"     class="o" val="&#x2202;"/>
+  <entry name="infty"       class="i" val="&#x221e;"/>
+  <entry name="prime"       class="o" val="&#x2032;"/>
+  <entry name="emptyset"    class="i" val="&#x2205;&#xfe00;"/>
+  <entry name="nabla"       class="o" val="&#x2207;"/>
+  <entry name="surd"        class="o" val="????"/>
+  <entry name="top"         class="i" val="&#x22a4;"/>
+  <entry name="bot"         class="i" val="&#x22a5;"/>
+  <entry name="|"           class="o" val="|" delimiter="1"/>
+  <entry name="angle"       class="o" val="&#x2220;"/>
+  <entry name="triangle"    class="o" val="&#x25b5;"/>
+  <entry name="backslash"   class="o" val="\"/>
+  <entry name="forall"      class="o" val="&#x2200;"/>
+  <entry name="exists"      class="o" val="&#x2203;"/>
+  <entry name="neg"         class="o" val="&#x00ac;"/>
+  <entry name="lnot"        class="o" val="&#x00ac;"/>
+  <entry name="flat"        class="i" val="&#x266d;"/>
+  <entry name="natural"     class="i" val="&#x266e;"/>
+  <entry name="sharp"       class="i" val="&#x266f;"/>
+  <entry name="clubsuit"    class="i" val="&#x2663;"/>
+  <entry name="diamondsuit" class="i" val="&#x2662;"/>
+  <entry name="heartsuit"   class="i" val="&#x2661;"/>
+  <entry name="spadesuit"   class="i" val="&#x2660;"/>
+
+  <!-- Large Operators -->
+
+  <entry name="sum"         class="o" val="&#x2211;" limits="1"/>
+  <entry name="prod"        class="o" val="&#x220f;" limits="1"/>
+  <entry name="coprod"      class="o" val="&#x2210;" limits="1"/>
+  <entry name="int"         class="o" val="&#x222b;" limits="1"/>
+  <entry name="oint"        class="o" val="&#x222e;" limits="1"/>
+  <entry name="bigcap"      class="o" val="&#x22c2;" limits="1"/>
+  <entry name="bigcup"      class="o" val="&#x22c3;" limits="1"/>
+  <entry name="bigsqcup"    class="o" val="&#x2294;" limits="1"/>
+  <entry name="bigvee"      class="o" val="&#x22c1;" limits="1"/>
+  <entry name="bigwedge"    class="o" val="&#x22c0;" limits="1"/>
+  <entry name="bigodot"     class="o" val="&#x2299;" limits="1"/>
+  <entry name="bigotimes"   class="o" val="&#x2297;" limits="1"/>
+  <entry name="bigoplus"    class="o" val="&#x2295;" limits="1"/>
+  <entry name="biguplus"    class="o" val="&#x228e;" limits="1"/>
+
+  <!-- Binary Operations -->
+
+  <entry name="pm"              class="o" val="&#x00b1;"/>
+  <entry name="mp"              class="o" val="&#x2213;"/>
+  <entry name="setminus"        class="o" val="&#x2216;"/>
+  <entry name="cdot"            class="o" val="&#x010b;"/>
+  <entry name="times"           class="o" val="&#x00d7;"/>
+  <entry name="ast"             class="o" val="&#x002a;"/>
+  <entry name="star"            class="o" val="&#x22c6;"/>
+  <entry name="diamond"         class="o" val="&#x22c4;"/>
+  <entry name="circ"            class="o" val="&#x005e;"/>
+  <entry name="bullet"          class="o" val="&#x2022;"/>
+  <entry name="div"             class="o" val="&#x00f7;"/>
+  <entry name="cap"             class="o" val="&#x2229;"/>
+  <entry name="cup"             class="o" val="&#x222a;"/>
+  <entry name="uplus"           class="o" val="&#x228e;"/>
+  <entry name="sqcap"           class="o" val="&#x2293;"/>
+  <entry name="sqcup"           class="o" val="&#x2294;"/>
+  <entry name="triangleleft"    class="o" val="&#x25c3;"/>
+  <entry name="triangleright"   class="o" val="&#x25b9;"/>
+  <entry name="wr"              class="o" val="&#x2240;"/>
+  <entry name="bigcirc"         class="o" val="&#x25ef;"/>
+  <entry name="bigtriangleup"   class="o" val="&#x25b3;"/>
+  <entry name="bigtriangledown" class="o" val="&#x25bd;"/>
+  <entry name="vee"             class="o" val="&#x2228;"/>
+  <entry name="lor"             class="o" val="&#x2228;"/>
+  <entry name="wedge"           class="o" val="&#x2227;"/>
+  <entry name="land"            class="o" val="&#x2227;"/>
+  <entry name="oplus"           class="o" val="&#x2295;"/>
+  <entry name="ominus"          class="o" val="&#x2296;"/>
+  <entry name="otimes"          class="o" val="&#x2297;"/>
+  <entry name="oslash"          class="o" val="&#x00f8;"/>
+  <entry name="odot"            class="o" val="&#x2299;"/>
+  <entry name="dagger"          class="o" val="&#x2020;"/>
+  <entry name="ddagger"         class="o" val="&#x2021;"/>
+  <entry name="amalg"           class="o" val="&#x2a3f;"/>
+
+  <!-- Relations -->
+
+  <entry name="leq"            class="o" val="&#x2264;"/>
+  <entry name="le"             class="o" val="&#x2264;"/>
+  <entry name="prec"           class="o" val="&#x227a;"/>
+  <entry name="preceq"         class="o" val="&#x2aaf;"/>
+  <entry name="ll"             class="o" val="&#x226a;"/>
+  <entry name="subset"         class="o" val="&#x2282;"/>
+  <entry name="subseteq"       class="o" val="&#x2286;"/>
+  <entry name="in"             class="o" val="&#x2208;"/>
+  <entry name="vdash"          class="o" val="&#x22a2;"/>
+  <entry name="smile"          class="o" val="&#x2323;"/>
+  <entry name="frown"          class="o" val="&#x2322;"/>
+  <entry name="propto"         class="o" val="&#x221d;"/>
+  <entry name="geq"            class="o" val="&#x2265;"/>
+  <entry name="ge"             class="o" val="&#x2265;"/>
+  <entry name="succ"           class="o" val="&#x227b;"/>
+  <entry name="succeq"         class="o" val="&#x227d;"/>
+  <entry name="gg"             class="o" val="&#x226b;"/>
+  <entry name="supset"         class="o" val="&#x2283;"/>
+  <entry name="supseteq"       class="o" val="&#x2287;"/>
+  <entry name="sqsupseteq"     class="o" val="&#x2292;"/>
+  <entry name="notin"          class="o" val="&#x2209;"/>
+  <entry name="dashv"          class="o" val="&#x22a3;"/>
+  <entry name="mid"            class="o" val="&#x2223;"/>
+  <entry name="parallet"       class="o" val="????"/>
+  <entry name="equiv"          class="o" val="&#x2261;"/>
+  <entry name="sim"            class="o" val="&#x223c;"/>
+  <entry name="simeq"          class="o" val="&#x2243;"/>
+  <entry name="asymp"          class="o" val="&#x224d;"/>
+  <entry name="approx"         class="o" val="&#x2248;"/>
+  <entry name="cong"           class="o" val="&#x2245;"/>
+  <entry name="bowtie"         class="o" val="&#x22c8;"/>
+  <entry name="ni"             class="o" val="&#x220b;"/>
+  <entry name="owns"           class="o" val="&#x220b;"/>
+  <entry name="models"         class="o" val="&#x22a7;"/>
+  <entry name="doteq"          class="o" val="&#x2250;"/>
+  <entry name="perp"           class="o" val="&#x22a5;"/>
+
+  <entry name="not"            pattern="#1" embellishment="1"/>
+  <entry name="ne"             class="o" val="&#x2260;"/>
+
+  <!-- Arrows -->
+
+  <entry name="leftarrow"                 class="o" val="&#x2190;"/>
+  <entry name="gets"                      class="o" val="&#x2190;"/>
+  <entry name="Leftarrow"                 class="o" val="&#x21d0;"/>
+  <entry name="rightarrow"                class="o" val="&#x2192;"/>
+  <entry name="to"                        class="o" val="&#x2192;"/>
+  <entry name="Rightarrow"                class="o" val="&#x21d2;"/>
+  <entry name="leftrightarrow"            class="o" val="&#x2194;"/>
+  <entry name="Leftrightarrow"            class="o" val="&#x21d4;"/>
+  <entry name="mapsto"                    class="o" val="&#x21a6;"/>
+  <entry name="hookleftarrow"             class="o" val="&#x21a9;"/>
+  <entry name="uparrow"                   class="o" val="&#x2191;"/>
+  <entry name="downarrow"                 class="o" val="&#x2193;"/>
+  <entry name="updownarrow"               class="o" val="&#x2195;"/>
+  <entry name="nearrow"                   class="o" val="&#x2197;"/>
+  <entry name="nwarrow"                   class="o" val="&#x2196;"/>
+  <entry name="longleftarrow"             class="o" val="????;"/>
+  <entry name="Longleftarrow"             class="o" val="????"/>
+  <entry name="longrightarrow"            class="o" val="????"/>
+  <entry name="Longrightarrow"            class="o" val="&#x21d2;"/>
+  <entry name="longleftrightarrow" class="o" val="????"/>
+  <entry name="Longleftrightarrow" class="o" val="????"/>
+  <entry name="longmapsto"                class="o" val="????"/>
+  <entry name="hookrightarrow"            class="o" val="&#x21aa;"/>
+  <entry name="Uparrow"                   class="o" val="&#x21d1;"/>
+  <entry name="Downarrow"                 class="o" val="&#x21d3;"/>
+  <entry name="searrow"                   class="o" val="&#x2198;"/>
+  <entry name="swarrow"                   class="o" val="&#x2199;"/>
+
+  <entry name="buildrel" pattern="#1\over#2" embellishment="1"/>
+
+  <!-- Delimiters -->
+
+  <entry name="lbrack"         class="o" val="[" delimiter="1"/>
+  <entry name="rbrack"         class="o" val="]" delimiter="1"/>
+  <entry name="vert"           class="o" val="|" delimiter="1"/>
+  <entry name="Vert"           class="o" val="&#x2016;" delimiter="1"/>
+  <entry name="lbrace"         class="o" val="{" delimiter="1"/>
+  <entry name="{"              class="o" val="{" delimiter="1"/>
+  <entry name="rbrace"         class="o" val="}" delimiter="1"/>
+  <entry name="}"              class="o" val="}" delimiter="1"/>
+  <entry name="lfloor"         class="o" val="&#x230a;" delimiter="1"/>
+  <entry name="rfloor"         class="o" val="&#x230b;" delimiter="1"/>
+  <entry name="langle"         class="o" val="&#x2329;" delimiter="1"/>
+  <entry name="rangle"         class="o" val="&#x232a;" delimiter="1"/>
+  <entry name="lceil"          class="o" val="&#x2308;" delimiter="1"/>
+  <entry name="rceil"          class="o" val="&#x2309;" delimiter="1"/>
+
+  <entry name="left"           pattern="#1" embellishment="1" delimiter="1"/>
+  <entry name="right"          pattern="#1" embellishment="1" delimiter="1"/>
+  <entry name="bigl"           pattern="#1" embellishment="1" delimiter="1"/>
+  <entry name="bigr"           pattern="#1" embellishment="1" delimiter="1"/>
+  <entry name="bigm"           pattern="#1" embellishment="1" delimiter="1"/>
+  <entry name="big"            pattern="#1" embellishment="1" delimiter="1"/>
+  <entry name="Bigl"           pattern="#1" embellishment="1" delimiter="1"/>
+  <entry name="Bigr"           pattern="#1" embellishment="1" delimiter="1"/>
+  <entry name="Bigm"           pattern="#1" embellishment="1" delimiter="1"/>
+  <entry name="biggl"          pattern="#1" embellishment="1" delimiter="1"/>
+  <entry name="biggr"          pattern="#1" embellishment="1" delimiter="1"/>
+  <entry name="biggm"          pattern="#1" embellishment="1" delimiter="1"/>
+  <entry name="Biggl"          pattern="#1" embellishment="1" delimiter="1"/>
+  <entry name="Biggr"          pattern="#1" embellishment="1" delimiter="1"/>
+  <entry name="Biggm"          pattern="#1" embellishment="1" delimiter="1"/>
+
+  <!-- Accents -->
+
+  <entry name="hat"       pattern="#1" embellishment="1"/>
+  <entry name="widehat"   pattern="#1" embellishment="1"/>
+  <entry name="check"     pattern="#1" embellishment="1"/>
+  <entry name="tilde"     pattern="#1" embellishment="1"/>
+  <entry name="widetilde" pattern="#1" embellishment="1"/>
+  <entry name="acute"     pattern="#1" embellishment="1"/>
+  <entry name="grave"     pattern="#1" embellishment="1"/>
+  <entry name="dot"       pattern="#1" embellishment="1"/>
+  <entry name="ddot"      pattern="#1" embellishment="1"/>
+  <entry name="breve"     pattern="#1" embellishment="1"/>
+  <entry name="bar"       pattern="#1" embellishment="1"/>
+  <entry name="vec"       pattern="#1" embellishment="1"/>
+
+  <!-- Elementary Math Control Sequences -->
+
+  <entry name="overline"  pattern="#1"/>
+  <entry name="underline" pattern="#1"/>
+  <entry name="sqrt"      pattern="#1"/>
+  <entry name="root"      pattern="#1\of#2"/>
+  <entry name="over"      pattern="{}"/>
+  <entry name="atop"      pattern="{}"/>
+  <entry name="choose"    pattern="{}"/>
+  <entry name="brace"     pattern="{}"/>
+  <entry name="brack"     pattern="{}"/>
+
+  <!-- Style -->
+
+  <entry name="displaystyle"      pattern="}"/>
+  <entry name="textstyle"         pattern="}"/>
+  <entry name="scriptstyle"       pattern="}"/>
+  <entry name="scriptscriptstyle" pattern="}"/>
+
+  <!-- Non-Italic Function Names -->
+
+  <entry name="arccos" class="i" val="arccos"/>
+  <entry name="arcsin" class="i" val="arcsin"/>
+  <entry name="arctan" class="i" val="arctan"/>
+  <entry name="arg"    class="i" val="arg"/>
+  <entry name="cos"    class="i" val="cos"/>
+  <entry name="cosh"   class="i" val="cosh"/>
+  <entry name="cot"    class="i" val="cot"/>
+  <entry name="coth"   class="i" val="coth"/>
+  <entry name="csc"    class="i" val="csc"/>
+  <entry name="exp"    class="i" val="exp"/>
+  <entry name="deg"    class="i" val="deg"/>
+  <entry name="det"    class="o" val="det" limits="1"/>
+  <entry name="dim"    class="i" val="dim"/>
+  <entry name="gcd"    class="o" val="gcd" limits="1"/>
+  <entry name="hom"    class="i" val="hom"/>
+  <entry name="inf"    class="o" val="inf" limits="1"/>
+  <entry name="ker"    class="i" val="ker"/>
+  <entry name="lg"     class="i" val="lg"/>
+  <entry name="lim"    class="o" val="lim" limits="1"/>
+  <entry name="liminf" class="o" val="liminf" limits="1"/>
+  <entry name="limsup" class="o" val="limsup" limits="1"/>
+  <entry name="ln"     class="i" val="ln"/>
+  <entry name="log"    class="i" val="log"/>
+  <entry name="max"    class="o" val="max" limits="1"/>
+  <entry name="min"    class="o" val="max" limits="1"/>
+  <entry name="Pr"     class="o" val="Pr" limits="1"/>
+  <entry name="sec"    class="i" val="sec"/>
+  <entry name="sin"    class="i" val="sin"/>
+  <entry name="sinh"   class="i" val="sinh"/>
+  <entry name="sup"    class="o" limits="1"/>
+  <entry name="tan"    class="i" val="tan"/>
+  <entry name="tanh"   class="i" val="tanh"/>
+  <entry name="pmod"   pattern="#1"/>
+  <entry name="bmod"   class="o" val="mod"/>
+
+  <!-- Ellipses -->
+
+  <entry name="dots"          class="i" val="&#x2026;"/>
+  <entry name="ldots"         class="i" val="&#x2026;"/>
+  <entry name="cdots"         class="i" val="&#x22ef;"/>
+  <entry name="vdots"         class="i" val="&#x22ee;"/>
+  <entry name="ddots"         class="i" val="&#x22f1;"/>
+
+  <!-- Fonts -->
+
+  <entry name="rm" pattern="}"/>
+  <entry name="bf" pattern="}"/>
+  <entry name="tt" pattern="}"/>
+  <entry name="sl" pattern="}"/>
+  <entry name="it" pattern="}"/>
+
+  <!-- Horizontal Spacing -->
+
+  <entry name=","/>
+  <entry name="&gt;"/>
+  <entry name=";"/>
+  <entry name="!"/>
+
+  <!-- Braces and Matrices -->
+
+  <entry name="matrix"       pattern="#1" table="1"/>
+  <entry name="pmatrix"      pattern="#1" table="1"/>
+  <entry name="bordermatrix" pattern="#1" table="1"/>
+  <entry name="overbrace"    pattern="#1" limits="1"/>
+  <entry name="underbrace"   pattern="#1" limits="1"/>
+  <entry name="cases"        pattern="#1" table="1"/>
+
+</dictionary>
diff --git a/helm/ocaml/cic_disambiguation/macros/entities-table.xml b/helm/ocaml/cic_disambiguation/macros/entities-table.xml
new file mode 100644 (file)
index 0000000..ca0bdab
--- /dev/null
@@ -0,0 +1,2081 @@
+<?xml version="1.0"?>
+
+<entities-table>
+  <entity name="aacute" value="&#x000E1;"/>
+  <entity name="Aacute" value="&#x000C1;"/>
+  <entity name="abreve" value="&#x00103;"/>
+  <entity name="Abreve" value="&#x00102;"/>
+  <entity name="ac" value="&#x0290F;"/>
+  <entity name="acd" value="&#x0223F;"/>
+  <entity name="acE" value="&#x029DB;"/>
+  <entity name="acirc" value="&#x000E2;"/>
+  <entity name="Acirc" value="&#x000C2;"/>
+  <entity name="acute" value="&#x000B4;"/>
+  <entity name="acy" value="&#x00430;"/>
+  <entity name="Acy" value="&#x00410;"/>
+  <entity name="aelig" value="&#x000E6;"/>
+  <entity name="AElig" value="&#x000C6;"/>
+  <entity name="af" value="&#x02061;"/>
+  <entity name="afr" value="&#x1D51E;"/>
+  <entity name="Afr" value="&#x1D504;"/>
+  <entity name="agrave" value="&#x000E0;"/>
+  <entity name="Agrave" value="&#x000C0;"/>
+  <entity name="aleph" value="&#x02135;"/>
+  <entity name="alpha" value="&#x003B1;"/>
+  <entity name="amacr" value="&#x00101;"/>
+  <entity name="Amacr" value="&#x00100;"/>
+  <entity name="amalg" value="&#x02A3F;"/>
+  <entity name="amp" value="&#x00026;"/>
+  <entity name="and" value="&#x02227;"/>
+  <entity name="And" value="&#x02A53;"/>
+  <entity name="andand" value="&#x02A55;"/>
+  <entity name="andd" value="&#x02A5C;"/>
+  <entity name="andslope" value="&#x02A58;"/>
+  <entity name="andv" value="&#x02A5A;"/>
+  <entity name="ang" value="&#x02220;"/>
+  <entity name="ange" value="&#x029A4;"/>
+  <entity name="angle" value="&#x02220;"/>
+  <entity name="angmsd" value="&#x02221;"/>
+  <entity name="angmsdaa" value="&#x029A8;"/>
+  <entity name="angmsdab" value="&#x029A9;"/>
+  <entity name="angmsdac" value="&#x029AA;"/>
+  <entity name="angmsdad" value="&#x029AB;"/>
+  <entity name="angmsdae" value="&#x029AC;"/>
+  <entity name="angmsdaf" value="&#x029AD;"/>
+  <entity name="angmsdag" value="&#x029AE;"/>
+  <entity name="angmsdah" value="&#x029AF;"/>
+  <entity name="angrt" value="&#x0221F;"/>
+  <entity name="angrtvb" value="&#x0299D;&#x0FE00;"/>
+  <entity name="angrtvbd" value="&#x0299D;"/>
+  <entity name="angsph" value="&#x02222;"/>
+  <entity name="angst" value="&#x0212B;"/>
+  <entity name="angzarr" value="&#x0237C;"/>
+  <entity name="aogon" value="&#x00105;"/>
+  <entity name="Aogon" value="&#x00104;"/>
+  <entity name="aopf" value="&#x1D552;"/>
+  <entity name="Aopf" value="&#x1D538;"/>
+  <entity name="ap" value="&#x02248;"/>
+  <entity name="apacir" value="&#x02A6F;"/>
+  <entity name="ape" value="&#x0224A;"/>
+  <entity name="apE" value="&#x0224A;"/>
+  <entity name="apid" value="&#x0224B;"/>
+  <entity name="apos" value="&#x00027;"/>
+  <entity name="ApplyFunction" value="&#x02061;"/>
+  <entity name="approx" value="&#x02248;"/>
+  <entity name="approxeq" value="&#x0224A;"/>
+  <entity name="aring" value="&#x000E5;"/>
+  <entity name="Aring" value="&#x000C5;"/>
+  <entity name="ascr" value="&#x1D4B6;"/>
+  <entity name="Ascr" value="&#x1D49C;"/>
+  <entity name="Assign" value="&#x02254;"/>
+  <entity name="ast" value="&#x0002A;"/>
+  <entity name="asymp" value="&#x0224D;"/>
+  <entity name="atilde" value="&#x000E3;"/>
+  <entity name="Atilde" value="&#x000C3;"/>
+  <entity name="auml" value="&#x000E4;"/>
+  <entity name="Auml" value="&#x000C4;"/>
+  <entity name="awconint" value="&#x02233;"/>
+  <entity name="awint" value="&#x02A11;"/>
+  <entity name="backcong" value="&#x0224C;"/>
+  <entity name="backepsilon" value="&#x003F6;"/>
+  <entity name="backprime" value="&#x02035;"/>
+  <entity name="backsim" value="&#x0223D;"/>
+  <entity name="backsimeq" value="&#x022CD;"/>
+  <entity name="Backslash" value="&#x02216;"/>
+  <entity name="Barv" value="&#x02AE7;"/>
+  <entity name="barvee" value="&#x022BD;"/>
+  <entity name="barwed" value="&#x022BC;"/>
+  <entity name="Barwed" value="&#x02306;"/>
+  <entity name="barwedge" value="&#x022BC;"/>
+  <entity name="bbrk" value="&#x023B5;"/>
+  <entity name="bcong" value="&#x0224C;"/>
+  <entity name="bcy" value="&#x00431;"/>
+  <entity name="Bcy" value="&#x00411;"/>
+  <entity name="becaus" value="&#x02235;"/>
+  <entity name="because" value="&#x02235;"/>
+  <entity name="Because" value="&#x02235;"/>
+  <entity name="bemptyv" value="&#x029B0;"/>
+  <entity name="bepsi" value="&#x003F6;"/>
+  <entity name="bernou" value="&#x0212C;"/>
+  <entity name="Bernoullis" value="&#x0212C;"/>
+  <entity name="beta" value="&#x003B2;"/>
+  <entity name="beth" value="&#x02136;"/>
+  <entity name="between" value="&#x0226C;"/>
+  <entity name="bfr" value="&#x1D51F;"/>
+  <entity name="Bfr" value="&#x1D505;"/>
+  <entity name="bigcap" value="&#x022C2;"/>
+  <entity name="bigcirc" value="&#x025EF;"/>
+  <entity name="bigcup" value="&#x022C3;"/>
+  <entity name="bigodot" value="&#x02299;"/>
+  <entity name="bigoplus" value="&#x02295;"/>
+  <entity name="bigotimes" value="&#x02297;"/>
+  <entity name="bigsqcup" value="&#x02294;"/>
+  <entity name="bigstar" value="&#x02605;"/>
+  <entity name="bigtriangledown" value="&#x025BD;"/>
+  <entity name="bigtriangleup" value="&#x025B3;"/>
+  <entity name="biguplus" value="&#x0228E;"/>
+  <entity name="bigvee" value="&#x022C1;"/>
+  <entity name="bigwedge" value="&#x022C0;"/>
+  <entity name="bkarow" value="&#x0290D;"/>
+  <entity name="blacklozenge" value="&#x029EB;"/>
+  <entity name="blacksquare" value="&#x025AA;"/>
+  <entity name="blacktriangle" value="&#x025B4;"/>
+  <entity name="blacktriangledown" value="&#x025BE;"/>
+  <entity name="blacktriangleleft" value="&#x025C2;"/>
+  <entity name="blacktriangleright" value="&#x025B8;"/>
+  <entity name="blank" value="&#x02423;"/>
+  <entity name="blk12" value="&#x02592;"/>
+  <entity name="blk14" value="&#x02591;"/>
+  <entity name="blk34" value="&#x02593;"/>
+  <entity name="block" value="&#x02588;"/>
+  <entity name="bne" value="&#x0003D;&#x020E5;"/>
+  <entity name="bnequiv" value="&#x02261;&#x020E5;"/>
+  <entity name="bnot" value="&#x02310;"/>
+  <entity name="bNot" value="&#x02AED;"/>
+  <entity name="bopf" value="&#x1D553;"/>
+  <entity name="Bopf" value="&#x1D539;"/>
+  <entity name="bot" value="&#x022A5;"/>
+  <entity name="bottom" value="&#x022A5;"/>
+  <entity name="bowtie" value="&#x022C8;"/>
+  <entity name="boxbox" value="&#x029C9;"/>
+  <entity name="boxdl" value="&#x02510;"/>
+  <entity name="boxdL" value="&#x02555;"/>
+  <entity name="boxDl" value="&#x02556;"/>
+  <entity name="boxDL" value="&#x02557;"/>
+  <entity name="boxdr" value="&#x0250C;"/>
+  <entity name="boxdR" value="&#x02552;"/>
+  <entity name="boxDr" value="&#x02553;"/>
+  <entity name="boxDR" value="&#x02554;"/>
+  <entity name="boxh" value="&#x02500;"/>
+  <entity name="boxH" value="&#x02550;"/>
+  <entity name="boxhd" value="&#x0252C;"/>
+  <entity name="boxhD" value="&#x02565;"/>
+  <entity name="boxHd" value="&#x02564;"/>
+  <entity name="boxHD" value="&#x02566;"/>
+  <entity name="boxhu" value="&#x02534;"/>
+  <entity name="boxhU" value="&#x02568;"/>
+  <entity name="boxHu" value="&#x02567;"/>
+  <entity name="boxHU" value="&#x02569;"/>
+  <entity name="boxminus" value="&#x0229F;"/>
+  <entity name="boxplus" value="&#x0229E;"/>
+  <entity name="boxtimes" value="&#x022A0;"/>
+  <entity name="boxul" value="&#x02518;"/>
+  <entity name="boxuL" value="&#x0255B;"/>
+  <entity name="boxUl" value="&#x0255C;"/>
+  <entity name="boxUL" value="&#x0255D;"/>
+  <entity name="boxur" value="&#x02514;"/>
+  <entity name="boxuR" value="&#x02558;"/>
+  <entity name="boxUr" value="&#x02559;"/>
+  <entity name="boxUR" value="&#x0255A;"/>
+  <entity name="boxv" value="&#x02502;"/>
+  <entity name="boxV" value="&#x02551;"/>
+  <entity name="boxvh" value="&#x0253C;"/>
+  <entity name="boxvH" value="&#x0256A;"/>
+  <entity name="boxVh" value="&#x0256B;"/>
+  <entity name="boxVH" value="&#x0256C;"/>
+  <entity name="boxvl" value="&#x02524;"/>
+  <entity name="boxvL" value="&#x02561;"/>
+  <entity name="boxVl" value="&#x02562;"/>
+  <entity name="boxVL" value="&#x02563;"/>
+  <entity name="boxvr" value="&#x0251C;"/>
+  <entity name="boxvR" value="&#x0255E;"/>
+  <entity name="boxVr" value="&#x0255F;"/>
+  <entity name="boxVR" value="&#x02560;"/>
+  <entity name="bprime" value="&#x02035;"/>
+  <entity name="breve" value="&#x002D8;"/>
+  <entity name="Breve" value="&#x002D8;"/>
+  <entity name="brvbar" value="&#x000A6;"/>
+  <entity name="bscr" value="&#x1D4B7;"/>
+  <entity name="Bscr" value="&#x0212C;"/>
+  <entity name="bsemi" value="&#x0204F;"/>
+  <entity name="bsim" value="&#x0223D;"/>
+  <entity name="bsime" value="&#x022CD;"/>
+  <entity name="bsol" value="&#x0005C;"/>
+  <entity name="bsolb" value="&#x029C5;"/>
+  <entity name="bsolhsub" value="&#x0005C;&#x02282;"/>
+  <entity name="bull" value="&#x02022;"/>
+  <entity name="bullet" value="&#x02022;"/>
+  <entity name="bump" value="&#x0224E;"/>
+  <entity name="bumpe" value="&#x0224F;"/>
+  <entity name="bumpE" value="&#x02AAE;"/>
+  <entity name="bumpeq" value="&#x0224F;"/>
+  <entity name="Bumpeq" value="&#x0224E;"/>
+  <entity name="cacute" value="&#x00107;"/>
+  <entity name="Cacute" value="&#x00106;"/>
+  <entity name="cap" value="&#x02229;"/>
+  <entity name="Cap" value="&#x022D2;"/>
+  <entity name="capand" value="&#x02A44;"/>
+  <entity name="capbrcup" value="&#x02A49;"/>
+  <entity name="capcap" value="&#x02A4B;"/>
+  <entity name="capcup" value="&#x02A47;"/>
+  <entity name="capdot" value="&#x02A40;"/>
+  <entity name="CapitalDifferentialD" value="&#x02145;"/>
+  <entity name="caps" value="&#x02229;&#x0FE00;"/>
+  <entity name="caret" value="&#x02041;"/>
+  <entity name="caron" value="&#x002C7;"/>
+  <entity name="Cayleys" value="&#x0212D;"/>
+  <entity name="ccaps" value="&#x02A4D;"/>
+  <entity name="ccaron" value="&#x0010D;"/>
+  <entity name="Ccaron" value="&#x0010C;"/>
+  <entity name="ccedil" value="&#x000E7;"/>
+  <entity name="Ccedil" value="&#x000C7;"/>
+  <entity name="ccirc" value="&#x00109;"/>
+  <entity name="Ccirc" value="&#x00108;"/>
+  <entity name="Cconint" value="&#x02230;"/>
+  <entity name="ccups" value="&#x02A4C;"/>
+  <entity name="ccupssm" value="&#x02A50;"/>
+  <entity name="cdot" value="&#x0010B;"/>
+  <entity name="Cdot" value="&#x0010A;"/>
+  <entity name="cedil" value="&#x000B8;"/>
+  <entity name="Cedilla" value="&#x000B8;"/>
+  <entity name="cemptyv" value="&#x029B2;"/>
+  <entity name="cent" value="&#x000A2;"/>
+  <entity name="centerdot" value="&#x000B7;"/>
+  <entity name="CenterDot" value="&#x000B7;"/>
+  <entity name="cfr" value="&#x1D520;"/>
+  <entity name="Cfr" value="&#x0212D;"/>
+  <entity name="chcy" value="&#x00447;"/>
+  <entity name="CHcy" value="&#x00427;"/>
+  <entity name="check" value="&#x02713;"/>
+  <entity name="checkmark" value="&#x02713;"/>
+  <entity name="chi" value="&#x003C7;"/>
+  <entity name="cir" value="&#x025CB;"/>
+  <entity name="circ" value="&#x0005E;"/>
+  <entity name="circeq" value="&#x02257;"/>
+  <entity name="circlearrowleft" value="&#x021BA;"/>
+  <entity name="circlearrowright" value="&#x021BB;"/>
+  <entity name="circledast" value="&#x0229B;"/>
+  <entity name="circledcirc" value="&#x0229A;"/>
+  <entity name="circleddash" value="&#x0229D;"/>
+  <entity name="CircleDot" value="&#x02299;"/>
+  <entity name="circledR" value="&#x000AE;"/>
+  <entity name="circledS" value="&#x024C8;"/>
+  <entity name="CircleMinus" value="&#x02296;"/>
+  <entity name="CirclePlus" value="&#x02295;"/>
+  <entity name="CircleTimes" value="&#x02297;"/>
+  <entity name="cire" value="&#x02257;"/>
+  <entity name="cirE" value="&#x029C3;"/>
+  <entity name="cirfnint" value="&#x02A10;"/>
+  <entity name="cirmid" value="&#x02AEF;"/>
+  <entity name="cirscir" value="&#x029C2;"/>
+  <entity name="ClockwiseContourIntegral" value="&#x02232;"/>
+  <entity name="CloseCurlyDoubleQuote" value="&#x0201D;"/>
+  <entity name="CloseCurlyQuote" value="&#x02019;"/>
+  <entity name="clubs" value="&#x02663;"/>
+  <entity name="clubsuit" value="&#x02663;"/>
+  <entity name="colon" value="&#x0003A;"/>
+  <entity name="Colon" value="&#x02237;"/>
+  <entity name="colone" value="&#x02254;"/>
+  <entity name="Colone" value="&#x02A74;"/>
+  <entity name="coloneq" value="&#x02254;"/>
+  <entity name="comma" value="&#x0002C;"/>
+  <entity name="commat" value="&#x00040;"/>
+  <entity name="comp" value="&#x02201;"/>
+  <entity name="compfn" value="&#x02218;"/>
+  <entity name="complement" value="&#x02201;"/>
+  <entity name="complexes" value="&#x02102;"/>
+  <entity name="cong" value="&#x02245;"/>
+  <entity name="congdot" value="&#x02A6D;"/>
+  <entity name="Congruent" value="&#x02261;"/>
+  <entity name="conint" value="&#x0222E;"/>
+  <entity name="Conint" value="&#x0222F;"/>
+  <entity name="ContourIntegral" value="&#x0222E;"/>
+  <entity name="copf" value="&#x1D554;"/>
+  <entity name="Copf" value="&#x02102;"/>
+  <entity name="coprod" value="&#x02210;"/>
+  <entity name="Coproduct" value="&#x02210;"/>
+  <entity name="copy" value="&#x000A9;"/>
+  <entity name="copysr" value="&#x02117;"/>
+  <entity name="CounterClockwiseContourIntegral" value="&#x02233;"/>
+  <entity name="cross" value="&#x02717;"/>
+  <entity name="Cross" value="&#x02A2F;"/>
+  <entity name="cscr" value="&#x1D4B8;"/>
+  <entity name="Cscr" value="&#x1D49E;"/>
+  <entity name="csub" value="&#x02ACF;"/>
+  <entity name="csube" value="&#x02AD1;"/>
+  <entity name="csup" value="&#x02AD0;"/>
+  <entity name="csupe" value="&#x02AD2;"/>
+  <entity name="ctdot" value="&#x022EF;"/>
+  <entity name="cudarrl" value="&#x02938;"/>
+  <entity name="cudarrr" value="&#x02935;"/>
+  <entity name="cuepr" value="&#x022DE;"/>
+  <entity name="cuesc" value="&#x022DF;"/>
+  <entity name="cularr" value="&#x021B6;"/>
+  <entity name="cularrp" value="&#x0293D;"/>
+  <entity name="cup" value="&#x0222A;"/>
+  <entity name="Cup" value="&#x022D3;"/>
+  <entity name="cupbrcap" value="&#x02A48;"/>
+  <entity name="cupcap" value="&#x02A46;"/>
+  <entity name="CupCap" value="&#x0224D;"/>
+  <entity name="cupcup" value="&#x02A4A;"/>
+  <entity name="cupdot" value="&#x0228D;"/>
+  <entity name="cupor" value="&#x02A45;"/>
+  <entity name="cups" value="&#x0222A;&#x0FE00;"/>
+  <entity name="curarr" value="&#x021B7;"/>
+  <entity name="curarrm" value="&#x0293C;"/>
+  <entity name="curlyeqprec" value="&#x022DE;"/>
+  <entity name="curlyeqsucc" value="&#x022DF;"/>
+  <entity name="curlyvee" value="&#x022CE;"/>
+  <entity name="curlywedge" value="&#x022CF;"/>
+  <entity name="curren" value="&#x000A4;"/>
+  <entity name="curvearrowleft" value="&#x021B6;"/>
+  <entity name="curvearrowright" value="&#x021B7;"/>
+  <entity name="cuvee" value="&#x022CE;"/>
+  <entity name="cuwed" value="&#x022CF;"/>
+  <entity name="cwconint" value="&#x02232;"/>
+  <entity name="cwint" value="&#x02231;"/>
+  <entity name="cylcty" value="&#x0232D;"/>
+  <entity name="dagger" value="&#x02020;"/>
+  <entity name="dagger" value="&#x02020;"/>
+  <entity name="Dagger" value="&#x02021;"/>
+  <entity name="Dagger" value="&#x02021;"/>
+  <entity name="daleth" value="&#x02138;"/>
+  <entity name="darr" value="&#x02193;"/>
+  <entity name="dArr" value="&#x021D3;"/>
+  <entity name="Darr" value="&#x021A1;"/>
+  <entity name="dash" value="&#x02010;"/>
+  <entity name="dashv" value="&#x022A3;"/>
+  <entity name="Dashv" value="&#x02AE4;"/>
+  <entity name="dbkarow" value="&#x0290F;"/>
+  <entity name="dblac" value="&#x002DD;"/>
+  <entity name="dcaron" value="&#x0010F;"/>
+  <entity name="Dcaron" value="&#x0010E;"/>
+  <entity name="dcy" value="&#x00434;"/>
+  <entity name="Dcy" value="&#x00414;"/>
+  <entity name="dd" value="&#x02146;"/>
+  <entity name="DD" value="&#x02145;"/>
+  <entity name="ddagger" value="&#x02021;"/>
+  <entity name="ddarr" value="&#x021CA;"/>
+  <entity name="DDotrahd" value="&#x02911;"/>
+  <entity name="ddotseq" value="&#x02A77;"/>
+  <entity name="deg" value="&#x000B0;"/>
+  <entity name="Del" value="&#x02207;"/>
+  <entity name="delta" value="&#x003B4;"/>
+  <entity name="Delta" value="&#x00394;"/>
+  <entity name="demptyv" value="&#x029B1;"/>
+  <entity name="dfisht" value="&#x0297F;"/>
+  <entity name="dfr" value="&#x1D521;"/>
+  <entity name="Dfr" value="&#x1D507;"/>
+  <entity name="dHar" value="&#x02965;"/>
+  <entity name="dharl" value="&#x021C3;"/>
+  <entity name="dharr" value="&#x021C2;"/>
+  <entity name="DiacriticalAcute" value="&#x000B4;"/>
+  <entity name="DiacriticalDot" value="&#x002D9;"/>
+  <entity name="DiacriticalDoubleAcute" value="&#x002DD;"/>
+  <entity name="DiacriticalGrave" value="&#x00060;"/>
+  <entity name="DiacriticalTilde" value="&#x002DC;"/>
+  <entity name="diam" value="&#x022C4;"/>
+  <entity name="diamond" value="&#x022C4;"/>
+  <entity name="Diamond" value="&#x022C4;"/>
+  <entity name="diamondsuit" value="&#x02666;"/>
+  <entity name="diams" value="&#x02666;"/>
+  <entity name="die" value="&#x000A8;"/>
+  <entity name="DifferentialD" value="&#x02146;"/>
+  <entity name="digamma" value="&#x003DC;"/>
+  <entity name="disin" value="&#x022F2;"/>
+  <entity name="div" value="&#x000F7;"/>
+  <entity name="divide" value="&#x000F7;"/>
+  <entity name="divideontimes" value="&#x022C7;"/>
+  <entity name="divonx" value="&#x022C7;"/>
+  <entity name="djcy" value="&#x00452;"/>
+  <entity name="DJcy" value="&#x00402;"/>
+  <entity name="dlcorn" value="&#x0231E;"/>
+  <entity name="dlcrop" value="&#x0230D;"/>
+  <entity name="dollar" value="&#x00024;"/>
+  <entity name="dopf" value="&#x1D555;"/>
+  <entity name="Dopf" value="&#x1D53B;"/>
+  <entity name="dot" value="&#x002D9;"/>
+  <entity name="Dot" value="&#x000A8;"/>
+  <entity name="DotDot" value="&#x020DC;"/>
+  <entity name="doteq" value="&#x02250;"/>
+  <entity name="doteqdot" value="&#x02251;"/>
+  <entity name="DotEqual" value="&#x02250;"/>
+  <entity name="dotminus" value="&#x02238;"/>
+  <entity name="dotplus" value="&#x02214;"/>
+  <entity name="dotsquare" value="&#x022A1;"/>
+  <entity name="doublebarwedge" value="&#x02306;"/>
+  <entity name="DoubleContourIntegral" value="&#x0222F;"/>
+  <entity name="DoubleDot" value="&#x000A8;"/>
+  <entity name="DoubleDownArrow" value="&#x021D3;"/>
+  <entity name="DoubleLeftArrow" value="&#x021D0;"/>
+  <entity name="DoubleLeftRightArrow" value="&#x021D4;"/>
+  <entity name="DoubleLeftTee" value="&#x02AE4;"/>
+  <entity name="DoubleLongLeftArrow" value="&#x0F579;"/>
+  <entity name="DoubleLongLeftRightArrow" value="&#x0F57B;"/>
+  <entity name="DoubleLongRightArrow" value="&#x0F57A;"/>
+  <entity name="DoubleRightArrow" value="&#x021D2;"/>
+  <entity name="DoubleRightTee" value="&#x022A8;"/>
+  <entity name="DoubleUpArrow" value="&#x021D1;"/>
+  <entity name="DoubleUpDownArrow" value="&#x021D5;"/>
+  <entity name="DoubleVerticalBar" value="&#x02225;"/>
+  <entity name="downarrow" value="&#x02193;"/>
+  <entity name="Downarrow" value="&#x021D3;"/>
+  <entity name="DownArrow" value="&#x02193;"/>
+  <entity name="DownArrowBar" value="&#x02913;"/>
+  <entity name="DownArrowUpArrow" value="&#x021F5;"/>
+  <entity name="DownBreve" value="&#x00311;"/>
+  <entity name="downdownarrows" value="&#x021CA;"/>
+  <entity name="downharpoonleft" value="&#x021C3;"/>
+  <entity name="downharpoonright" value="&#x021C2;"/>
+  <entity name="DownLeftRightVector" value="&#x02950;"/>
+  <entity name="DownLeftTeeVector" value="&#x0295E;"/>
+  <entity name="DownLeftVector" value="&#x021BD;"/>
+  <entity name="DownLeftVectorBar" value="&#x02956;"/>
+  <entity name="DownRightTeeVector" value="&#x0295F;"/>
+  <entity name="DownRightVector" value="&#x021C1;"/>
+  <entity name="DownRightVectorBar" value="&#x02957;"/>
+  <entity name="DownTee" value="&#x022A4;"/>
+  <entity name="DownTeeArrow" value="&#x021A7;"/>
+  <entity name="drbkarow" value="&#x02910;"/>
+  <entity name="drcorn" value="&#x0231F;"/>
+  <entity name="drcrop" value="&#x0230C;"/>
+  <entity name="dscr" value="&#x1D4B9;"/>
+  <entity name="Dscr" value="&#x1D49F;"/>
+  <entity name="dscy" value="&#x00455;"/>
+  <entity name="DScy" value="&#x00405;"/>
+  <entity name="dsol" value="&#x029F6;"/>
+  <entity name="dstrok" value="&#x00111;"/>
+  <entity name="Dstrok" value="&#x00110;"/>
+  <entity name="dtdot" value="&#x022F1;"/>
+  <entity name="dtri" value="&#x025BF;"/>
+  <entity name="dtrif" value="&#x025BE;"/>
+  <entity name="duarr" value="&#x021F5;"/>
+  <entity name="duhar" value="&#x0296F;"/>
+  <entity name="dwangle" value="&#x029A6;"/>
+  <entity name="dzcy" value="&#x0045F;"/>
+  <entity name="DZcy" value="&#x0040F;"/>
+  <entity name="dzigrarr" value="&#x0F5A2;"/>
+  <entity name="eacute" value="&#x000E9;"/>
+  <entity name="Eacute" value="&#x000C9;"/>
+  <entity name="easter" value="&#x0225B;"/>
+  <entity name="ecaron" value="&#x0011B;"/>
+  <entity name="Ecaron" value="&#x0011A;"/>
+  <entity name="ecir" value="&#x02256;"/>
+  <entity name="ecirc" value="&#x000EA;"/>
+  <entity name="Ecirc" value="&#x000CA;"/>
+  <entity name="ecolon" value="&#x02255;"/>
+  <entity name="ecy" value="&#x0044D;"/>
+  <entity name="Ecy" value="&#x0042D;"/>
+  <entity name="eDDot" value="&#x02A77;"/>
+  <entity name="edot" value="&#x00117;"/>
+  <entity name="eDot" value="&#x02251;"/>
+  <entity name="Edot" value="&#x00116;"/>
+  <entity name="ee" value="&#x02147;"/>
+  <entity name="efDot" value="&#x02252;"/>
+  <entity name="efr" value="&#x1D522;"/>
+  <entity name="Efr" value="&#x1D508;"/>
+  <entity name="eg" value="&#x02A9A;"/>
+  <entity name="egrave" value="&#x000E8;"/>
+  <entity name="Egrave" value="&#x000C8;"/>
+  <entity name="egs" value="&#x022DD;"/>
+  <entity name="egsdot" value="&#x02A98;"/>
+  <entity name="el" value="&#x02A99;"/>
+  <entity name="Element" value="&#x02208;"/>
+  <entity name="ell" value="&#x02113;"/>
+  <entity name="els" value="&#x022DC;"/>
+  <entity name="elsdot" value="&#x02A97;"/>
+  <entity name="emacr" value="&#x00113;"/>
+  <entity name="Emacr" value="&#x00112;"/>
+  <entity name="empty" value="&#x02205;&#x0FE00;"/>
+  <entity name="emptyset" value="&#x02205;&#x0FE00;"/>
+  <entity name="EmptySmallSquare" value="&#x025FD;"/>
+  <entity name="emptyv" value="&#x02205;"/>
+  <entity name="EmptyVerySmallSquare" value="&#x0F59C;"/>
+  <entity name="emsp" value="&#x02003;"/>
+  <entity name="emsp13" value="&#x02004;"/>
+  <entity name="emsp14" value="&#x02005;"/>
+  <entity name="eng" value="&#x0014B;"/>
+  <entity name="ENG" value="&#x0014A;"/>
+  <entity name="ensp" value="&#x02002;"/>
+  <entity name="eogon" value="&#x00119;"/>
+  <entity name="Eogon" value="&#x00118;"/>
+  <entity name="eopf" value="&#x1D556;"/>
+  <entity name="Eopf" value="&#x1D53C;"/>
+  <entity name="epar" value="&#x022D5;"/>
+  <entity name="eparsl" value="&#x029E3;"/>
+  <entity name="eplus" value="&#x02A71;"/>
+  <entity name="epsi" value="&#x003B5;"/>
+  <entity name="epsiv" value="&#x0025B;"/>
+  <entity name="eqcirc" value="&#x02256;"/>
+  <entity name="eqcolon" value="&#x02255;"/>
+  <entity name="eqsim" value="&#x02242;"/>
+  <entity name="eqslantgtr" value="&#x022DD;"/>
+  <entity name="eqslantless" value="&#x022DC;"/>
+  <entity name="Equal" value="&#x02A75;"/>
+  <entity name="equals" value="&#x0003D;"/>
+  <entity name="EqualTilde" value="&#x02242;"/>
+  <entity name="equest" value="&#x0225F;"/>
+  <entity name="Equilibrium" value="&#x021CC;"/>
+  <entity name="equiv" value="&#x02261;"/>
+  <entity name="equivDD" value="&#x02A78;"/>
+  <entity name="eqvparsl" value="&#x029E5;"/>
+  <entity name="erarr" value="&#x02971;"/>
+  <entity name="erDot" value="&#x02253;"/>
+  <entity name="escr" value="&#x0212F;"/>
+  <entity name="Escr" value="&#x02130;"/>
+  <entity name="esdot" value="&#x02250;"/>
+  <entity name="esim" value="&#x02242;"/>
+  <entity name="Esim" value="&#x02A73;"/>
+  <entity name="eta" value="&#x003B7;"/>
+  <entity name="eth" value="&#x000F0;"/>
+  <entity name="ETH" value="&#x000D0;"/>
+  <entity name="euml" value="&#x000EB;"/>
+  <entity name="Euml" value="&#x000CB;"/>
+  <entity name="excl" value="&#x00021;"/>
+  <entity name="exist" value="&#x02203;"/>
+  <entity name="Exists" value="&#x02203;"/>
+  <entity name="expectation" value="&#x02130;"/>
+  <entity name="exponentiale" value="&#x02147;"/>
+  <entity name="ExponentialE" value="&#x02147;"/>
+  <entity name="fallingdotseq" value="&#x02252;"/>
+  <entity name="fcy" value="&#x00444;"/>
+  <entity name="Fcy" value="&#x00424;"/>
+  <entity name="female" value="&#x02640;"/>
+  <entity name="ffilig" value="&#x0FB03;"/>
+  <entity name="fflig" value="&#x0FB00;"/>
+  <entity name="ffllig" value="&#x0FB04;"/>
+  <entity name="ffr" value="&#x1D523;"/>
+  <entity name="Ffr" value="&#x1D509;"/>
+  <entity name="filig" value="&#x0FB01;"/>
+  <entity name="FilledSmallSquare" value="&#x025FE;"/>
+  <entity name="FilledVerySmallSquare" value="&#x0F59B;"/>
+  <entity name="flat" value="&#x0266D;"/>
+  <entity name="fllig" value="&#x0FB02;"/>
+  <entity name="fnof" value="&#x00192;"/>
+  <entity name="fopf" value="&#x1D557;"/>
+  <entity name="Fopf" value="&#x1D53D;"/>
+  <entity name="forall" value="&#x02200;"/>
+  <entity name="ForAll" value="&#x02200;"/>
+  <entity name="fork" value="&#x022D4;"/>
+  <entity name="forkv" value="&#x02AD9;"/>
+  <entity name="Fouriertrf" value="&#x02131;"/>
+  <entity name="fpartint" value="&#x02A0D;"/>
+  <entity name="frac12" value="&#x000BD;"/>
+  <entity name="frac13" value="&#x02153;"/>
+  <entity name="frac14" value="&#x000BC;"/>
+  <entity name="frac15" value="&#x02155;"/>
+  <entity name="frac16" value="&#x02159;"/>
+  <entity name="frac18" value="&#x0215B;"/>
+  <entity name="frac23" value="&#x02154;"/>
+  <entity name="frac25" value="&#x02156;"/>
+  <entity name="frac34" value="&#x000BE;"/>
+  <entity name="frac35" value="&#x02157;"/>
+  <entity name="frac38" value="&#x0215C;"/>
+  <entity name="frac45" value="&#x02158;"/>
+  <entity name="frac56" value="&#x0215A;"/>
+  <entity name="frac58" value="&#x0215D;"/>
+  <entity name="frac78" value="&#x0215E;"/>
+  <entity name="frown" value="&#x02322;"/>
+  <entity name="fscr" value="&#x1D4BB;"/>
+  <entity name="Fscr" value="&#x02131;"/>
+  <entity name="gacute" value="&#x001F5;"/>
+  <entity name="gamma" value="&#x003B3;"/>
+  <entity name="Gamma" value="&#x00393;"/>
+  <entity name="gammad" value="&#x003DC;"/>
+  <entity name="Gammad" value="&#x003DC;"/>
+  <entity name="gap" value="&#x02273;"/>
+  <entity name="gbreve" value="&#x0011F;"/>
+  <entity name="Gbreve" value="&#x0011E;"/>
+  <entity name="Gcedil" value="&#x00122;"/>
+  <entity name="gcirc" value="&#x0011D;"/>
+  <entity name="Gcirc" value="&#x0011C;"/>
+  <entity name="gcy" value="&#x00433;"/>
+  <entity name="Gcy" value="&#x00413;"/>
+  <entity name="gdot" value="&#x00121;"/>
+  <entity name="Gdot" value="&#x00120;"/>
+  <entity name="ge" value="&#x02265;"/>
+  <entity name="gE" value="&#x02267;"/>
+  <entity name="gel" value="&#x022DB;"/>
+  <entity name="gEl" value="&#x022DB;"/>
+  <entity name="geq" value="&#x02265;"/>
+  <entity name="geqq" value="&#x02267;"/>
+  <entity name="geqslant" value="&#x02A7E;"/>
+  <entity name="ges" value="&#x02A7E;"/>
+  <entity name="gescc" value="&#x02AA9;"/>
+  <entity name="gesdot" value="&#x02A80;"/>
+  <entity name="gesdoto" value="&#x02A82;"/>
+  <entity name="gesdotol" value="&#x02A84;"/>
+  <entity name="gesl" value="&#x022DB;&#x0FE00;"/>
+  <entity name="gesles" value="&#x02A94;"/>
+  <entity name="gfr" value="&#x1D524;"/>
+  <entity name="Gfr" value="&#x1D50A;"/>
+  <entity name="gg" value="&#x0226B;"/>
+  <entity name="Gg" value="&#x022D9;"/>
+  <entity name="ggg" value="&#x022D9;"/>
+  <entity name="gimel" value="&#x02137;"/>
+  <entity name="gjcy" value="&#x00453;"/>
+  <entity name="GJcy" value="&#x00403;"/>
+  <entity name="gl" value="&#x02277;"/>
+  <entity name="gla" value="&#x02AA5;"/>
+  <entity name="glE" value="&#x02A92;"/>
+  <entity name="glj" value="&#x02AA4;"/>
+  <entity name="gnap" value="&#x02A8A;"/>
+  <entity name="gnapprox" value="&#x02A8A;"/>
+  <entity name="gne" value="&#x02269;"/>
+  <entity name="gnE" value="&#x02269;"/>
+  <entity name="gneq" value="&#x02269;"/>
+  <entity name="gneqq" value="&#x02269;"/>
+  <entity name="gnsim" value="&#x022E7;"/>
+  <entity name="gopf" value="&#x1D558;"/>
+  <entity name="Gopf" value="&#x1D53E;"/>
+  <entity name="grave" value="&#x00060;"/>
+  <entity name="GreaterEqual" value="&#x02265;"/>
+  <entity name="GreaterEqualLess" value="&#x022DB;"/>
+  <entity name="GreaterFullEqual" value="&#x02267;"/>
+  <entity name="GreaterGreater" value="&#x02AA2;"/>
+  <entity name="GreaterLess" value="&#x02277;"/>
+  <entity name="GreaterSlantEqual" value="&#x02A7E;"/>
+  <entity name="GreaterTilde" value="&#x02273;"/>
+  <entity name="gscr" value="&#x0210A;"/>
+  <entity name="Gscr" value="&#x1D4A2;"/>
+  <entity name="gsim" value="&#x02273;"/>
+  <entity name="gsime" value="&#x02A8E;"/>
+  <entity name="gsiml" value="&#x02A90;"/>
+  <entity name="gt" value="&#x0003E;"/>
+  <entity name="Gt" value="&#x0226B;"/>
+  <entity name="gtcc" value="&#x02AA7;"/>
+  <entity name="gtcir" value="&#x02A7A;"/>
+  <entity name="gtdot" value="&#x022D7;"/>
+  <entity name="gtlPar" value="&#x02995;"/>
+  <entity name="gtquest" value="&#x02A7C;"/>
+  <entity name="gtrapprox" value="&#x02273;"/>
+  <entity name="gtrarr" value="&#x02978;"/>
+  <entity name="gtrdot" value="&#x022D7;"/>
+  <entity name="gtreqless" value="&#x022DB;"/>
+  <entity name="gtreqqless" value="&#x022DB;"/>
+  <entity name="gtrless" value="&#x02277;"/>
+  <entity name="gtrsim" value="&#x02273;"/>
+  <entity name="gvertneqq" value="&#x02269;&#x0FE00;"/>
+  <entity name="gvnE" value="&#x02269;&#x0FE00;"/>
+  <entity name="Hacek" value="&#x002C7;"/>
+  <entity name="hairsp" value="&#x0200A;"/>
+  <entity name="half" value="&#x000BD;"/>
+  <entity name="hamilt" value="&#x0210B;"/>
+  <entity name="hardcy" value="&#x0044A;"/>
+  <entity name="HARDcy" value="&#x0042A;"/>
+  <entity name="harr" value="&#x02194;"/>
+  <entity name="hArr" value="&#x021D4;"/>
+  <entity name="harrcir" value="&#x02948;"/>
+  <entity name="harrw" value="&#x021AD;"/>
+  <entity name="Hat" value="&#x00302;"/>
+  <entity name="hbar" value="&#x0210F;&#x0FE00;"/>
+  <entity name="hcirc" value="&#x00125;"/>
+  <entity name="Hcirc" value="&#x00124;"/>
+  <entity name="heartsuit" value="&#x02661;"/>
+  <entity name="hellip" value="&#x02026;"/>
+  <entity name="hercon" value="&#x022B9;"/>
+  <entity name="hfr" value="&#x1D525;"/>
+  <entity name="Hfr" value="&#x0210C;"/>
+  <entity name="HilbertSpace" value="&#x0210B;"/>
+  <entity name="hksearow" value="&#x02925;"/>
+  <entity name="hkswarow" value="&#x02926;"/>
+  <entity name="hoarr" value="&#x021FF;"/>
+  <entity name="homtht" value="&#x0223B;"/>
+  <entity name="hookleftarrow" value="&#x021A9;"/>
+  <entity name="hookrightarrow" value="&#x021AA;"/>
+  <entity name="hopf" value="&#x1D559;"/>
+  <entity name="Hopf" value="&#x0210D;"/>
+  <entity name="horbar" value="&#x02015;"/>
+  <entity name="HorizontalLine" value="&#x02500;"/>
+  <entity name="hscr" value="&#x1D4BD;"/>
+  <entity name="Hscr" value="&#x0210B;"/>
+  <entity name="hslash" value="&#x0210F;"/>
+  <entity name="hstrok" value="&#x00127;"/>
+  <entity name="Hstrok" value="&#x00126;"/>
+  <entity name="HumpDownHump" value="&#x0224E;"/>
+  <entity name="HumpEqual" value="&#x0224F;"/>
+  <entity name="hybull" value="&#x02043;"/>
+  <entity name="hyphen" value="&#x02010;"/>
+  <entity name="iacute" value="&#x000ED;"/>
+  <entity name="Iacute" value="&#x000CD;"/>
+  <entity name="ic" value="&#x0200B;"/>
+  <entity name="icirc" value="&#x000EE;"/>
+  <entity name="Icirc" value="&#x000CE;"/>
+  <entity name="icy" value="&#x00438;"/>
+  <entity name="Icy" value="&#x00418;"/>
+  <entity name="Idot" value="&#x00130;"/>
+  <entity name="iecy" value="&#x00435;"/>
+  <entity name="IEcy" value="&#x00415;"/>
+  <entity name="iexcl" value="&#x000A1;"/>
+  <entity name="iff" value="&#x021D4;"/>
+  <entity name="ifr" value="&#x1D526;"/>
+  <entity name="Ifr" value="&#x02111;"/>
+  <entity name="igrave" value="&#x000EC;"/>
+  <entity name="Igrave" value="&#x000CC;"/>
+  <entity name="ii" value="&#x02148;"/>
+  <entity name="iiiint" value="&#x02A0C;"/>
+  <entity name="iiint" value="&#x0222D;"/>
+  <entity name="iinfin" value="&#x029DC;"/>
+  <entity name="iiota" value="&#x02129;"/>
+  <entity name="ijlig" value="&#x00133;"/>
+  <entity name="IJlig" value="&#x00132;"/>
+  <entity name="Im" value="&#x02111;"/>
+  <entity name="imacr" value="&#x0012B;"/>
+  <entity name="Imacr" value="&#x0012A;"/>
+  <entity name="image" value="&#x02111;"/>
+  <entity name="ImaginaryI" value="&#x02148;"/>
+  <entity name="imagline" value="&#x02110;"/>
+  <entity name="imagpart" value="&#x02111;"/>
+  <entity name="imath" value="&#x00131;"/>
+  <entity name="imof" value="&#x022B7;"/>
+  <entity name="imped" value="&#x1D543;"/>
+  <entity name="Implies" value="&#x021D2;"/>
+  <entity name="in" value="&#x02208;"/>
+  <entity name="incare" value="&#x02105;"/>
+  <entity name="infin" value="&#x0221E;"/>
+  <entity name="inodot" value="&#x00131;"/>
+  <entity name="int" value="&#x0222B;"/>
+  <entity name="Int" value="&#x0222C;"/>
+  <entity name="intcal" value="&#x022BA;"/>
+  <entity name="integers" value="&#x02124;"/>
+  <entity name="Integral" value="&#x0222B;"/>
+  <entity name="intercal" value="&#x022BA;"/>
+  <entity name="Intersection" value="&#x022C2;"/>
+  <entity name="intlarhk" value="&#x02A17;"/>
+  <entity name="intprod" value="&#x02A3C;"/>
+  <entity name="InvisibleComma" value="&#x0200B;"/>
+  <entity name="InvisibleTimes" value="&#x02062;"/>
+  <entity name="iocy" value="&#x00451;"/>
+  <entity name="IOcy" value="&#x00401;"/>
+  <entity name="iogon" value="&#x0012F;"/>
+  <entity name="Iogon" value="&#x0012E;"/>
+  <entity name="iopf" value="&#x1D55A;"/>
+  <entity name="Iopf" value="&#x1D540;"/>
+  <entity name="iota" value="&#x003B9;"/>
+  <entity name="iprod" value="&#x02A3C;"/>
+  <entity name="iquest" value="&#x000BF;"/>
+  <entity name="iscr" value="&#x1D4BE;"/>
+  <entity name="Iscr" value="&#x02110;"/>
+  <entity name="isin" value="&#x02208;"/>
+  <entity name="isindot" value="&#x022F5;"/>
+  <entity name="isinE" value="&#x022F9;"/>
+  <entity name="isins" value="&#x022F4;"/>
+  <entity name="isinsv" value="&#x022F3;"/>
+  <entity name="isinv" value="&#x02208;"/>
+  <entity name="it" value="&#x02062;"/>
+  <entity name="itilde" value="&#x00129;"/>
+  <entity name="Itilde" value="&#x00128;"/>
+  <entity name="iukcy" value="&#x00456;"/>
+  <entity name="Iukcy" value="&#x00406;"/>
+  <entity name="iuml" value="&#x000EF;"/>
+  <entity name="Iuml" value="&#x000CF;"/>
+  <entity name="jcirc" value="&#x00135;"/>
+  <entity name="Jcirc" value="&#x00134;"/>
+  <entity name="jcy" value="&#x00439;"/>
+  <entity name="Jcy" value="&#x00419;"/>
+  <entity name="jfr" value="&#x1D527;"/>
+  <entity name="Jfr" value="&#x1D50D;"/>
+  <entity name="jmath" value="&#x0006A;&#x0FE00;"/>
+  <entity name="jopf" value="&#x1D55B;"/>
+  <entity name="Jopf" value="&#x1D541;"/>
+  <entity name="jscr" value="&#x1D4BF;"/>
+  <entity name="Jscr" value="&#x1D4A5;"/>
+  <entity name="jsercy" value="&#x00458;"/>
+  <entity name="Jsercy" value="&#x00408;"/>
+  <entity name="jukcy" value="&#x00454;"/>
+  <entity name="Jukcy" value="&#x00404;"/>
+  <entity name="kappa" value="&#x003BA;"/>
+  <entity name="kappav" value="&#x003F0;"/>
+  <entity name="kcedil" value="&#x00137;"/>
+  <entity name="Kcedil" value="&#x00136;"/>
+  <entity name="kcy" value="&#x0043A;"/>
+  <entity name="Kcy" value="&#x0041A;"/>
+  <entity name="kfr" value="&#x1D528;"/>
+  <entity name="Kfr" value="&#x1D50E;"/>
+  <entity name="kgreen" value="&#x00138;"/>
+  <entity name="khcy" value="&#x00445;"/>
+  <entity name="KHcy" value="&#x00425;"/>
+  <entity name="kjcy" value="&#x0045C;"/>
+  <entity name="KJcy" value="&#x0040C;"/>
+  <entity name="kopf" value="&#x1D55C;"/>
+  <entity name="Kopf" value="&#x1D542;"/>
+  <entity name="kscr" value="&#x1D4C0;"/>
+  <entity name="Kscr" value="&#x1D4A6;"/>
+  <entity name="lAarr" value="&#x021DA;"/>
+  <entity name="lacute" value="&#x0013A;"/>
+  <entity name="Lacute" value="&#x00139;"/>
+  <entity name="laemptyv" value="&#x029B4;"/>
+  <entity name="lagran" value="&#x02112;"/>
+  <entity name="lambda" value="&#x003BB;"/>
+  <entity name="Lambda" value="&#x0039B;"/>
+  <entity name="lang" value="&#x02329;"/>
+  <entity name="Lang" value="&#x0300A;"/>
+  <entity name="langd" value="&#x02991;"/>
+  <entity name="langle" value="&#x02329;"/>
+  <entity name="lap" value="&#x02272;"/>
+  <entity name="Laplacetrf" value="&#x02112;"/>
+  <entity name="laquo" value="&#x000AB;"/>
+  <entity name="larr" value="&#x02190;"/>
+  <entity name="lArr" value="&#x021D0;"/>
+  <entity name="Larr" value="&#x0219E;"/>
+  <entity name="larrb" value="&#x021E4;"/>
+  <entity name="larrbfs" value="&#x0291F;"/>
+  <entity name="larrfs" value="&#x0291D;"/>
+  <entity name="larrhk" value="&#x021A9;"/>
+  <entity name="larrlp" value="&#x021AB;"/>
+  <entity name="larrpl" value="&#x02939;"/>
+  <entity name="larrsim" value="&#x02973;"/>
+  <entity name="larrtl" value="&#x021A2;"/>
+  <entity name="lat" value="&#x02AAB;"/>
+  <entity name="latail" value="&#x02919;"/>
+  <entity name="lAtail" value="&#x0291B;"/>
+  <entity name="late" value="&#x02AAD;"/>
+  <entity name="lates" value="&#x02AAD;&#x0FE00;"/>
+  <entity name="lbarr" value="&#x0290C;"/>
+  <entity name="lBarr" value="&#x0290E;"/>
+  <entity name="lbbrk" value="&#x03014;"/>
+  <entity name="lbrace" value="&#x0007B;"/>
+  <entity name="lbrack" value="&#x0005B;"/>
+  <entity name="lbrke" value="&#x0298B;"/>
+  <entity name="lbrksld" value="&#x0298F;"/>
+  <entity name="lbrkslu" value="&#x0298D;"/>
+  <entity name="lcaron" value="&#x0013E;"/>
+  <entity name="Lcaron" value="&#x0013D;"/>
+  <entity name="lcedil" value="&#x0013C;"/>
+  <entity name="Lcedil" value="&#x0013B;"/>
+  <entity name="lceil" value="&#x02308;"/>
+  <entity name="lcub" value="&#x0007B;"/>
+  <entity name="lcy" value="&#x0043B;"/>
+  <entity name="Lcy" value="&#x0041B;"/>
+  <entity name="ldca" value="&#x02936;"/>
+  <entity name="ldquo" value="&#x0201C;"/>
+  <entity name="ldquor" value="&#x0201E;"/>
+  <entity name="ldrdhar" value="&#x02967;"/>
+  <entity name="ldrushar" value="&#x0294B;"/>
+  <entity name="ldsh" value="&#x021B2;"/>
+  <entity name="le" value="&#x02264;"/>
+  <entity name="lE" value="&#x02266;"/>
+  <entity name="LeftAngleBracket" value="&#x02329;"/>
+  <entity name="leftarrow" value="&#x02190;"/>
+  <entity name="Leftarrow" value="&#x021D0;"/>
+  <entity name="LeftArrow" value="&#x02190;"/>
+  <entity name="LeftArrowBar" value="&#x021E4;"/>
+  <entity name="LeftArrowRightArrow" value="&#x021C6;"/>
+  <entity name="leftarrowtail" value="&#x021A2;"/>
+  <entity name="LeftCeiling" value="&#x02308;"/>
+  <entity name="LeftDoubleBracket" value="&#x0301A;"/>
+  <entity name="LeftDownTeeVector" value="&#x02961;"/>
+  <entity name="LeftDownVector" value="&#x021C3;"/>
+  <entity name="LeftDownVectorBar" value="&#x02959;"/>
+  <entity name="LeftFloor" value="&#x0230A;"/>
+  <entity name="leftharpoondown" value="&#x021BD;"/>
+  <entity name="leftharpoonup" value="&#x021BC;"/>
+  <entity name="leftleftarrows" value="&#x021C7;"/>
+  <entity name="leftrightarrow" value="&#x02194;"/>
+  <entity name="Leftrightarrow" value="&#x021D4;"/>
+  <entity name="LeftRightArrow" value="&#x02194;"/>
+  <entity name="leftrightarrows" value="&#x021C6;"/>
+  <entity name="leftrightharpoons" value="&#x021CB;"/>
+  <entity name="leftrightsquigarrow" value="&#x021AD;"/>
+  <entity name="LeftRightVector" value="&#x0294E;"/>
+  <entity name="LeftTee" value="&#x022A3;"/>
+  <entity name="LeftTeeArrow" value="&#x021A4;"/>
+  <entity name="LeftTeeVector" value="&#x0295A;"/>
+  <entity name="leftthreetimes" value="&#x022CB;"/>
+  <entity name="LeftTriangle" value="&#x022B2;"/>
+  <entity name="LeftTriangleBar" value="&#x029CF;"/>
+  <entity name="LeftTriangleEqual" value="&#x022B4;"/>
+  <entity name="LeftUpDownVector" value="&#x02951;"/>
+  <entity name="LeftUpTeeVector" value="&#x02960;"/>
+  <entity name="LeftUpVector" value="&#x021BF;"/>
+  <entity name="LeftUpVectorBar" value="&#x02958;"/>
+  <entity name="LeftVector" value="&#x021BC;"/>
+  <entity name="LeftVectorBar" value="&#x02952;"/>
+  <entity name="leg" value="&#x022DA;"/>
+  <entity name="lEg" value="&#x022DA;"/>
+  <entity name="leq" value="&#x02264;"/>
+  <entity name="leqq" value="&#x02266;"/>
+  <entity name="leqslant" value="&#x02A7D;"/>
+  <entity name="les" value="&#x02A7D;"/>
+  <entity name="lescc" value="&#x02AA8;"/>
+  <entity name="lesdot" value="&#x02A7F;"/>
+  <entity name="lesdoto" value="&#x02A81;"/>
+  <entity name="lesdotor" value="&#x02A83;"/>
+  <entity name="lesg" value="&#x022DA;&#x0FE00;"/>
+  <entity name="lesges" value="&#x02A93;"/>
+  <entity name="lessapprox" value="&#x02272;"/>
+  <entity name="lessdot" value="&#x022D6;"/>
+  <entity name="lesseqgtr" value="&#x022DA;"/>
+  <entity name="lesseqqgtr" value="&#x022DA;"/>
+  <entity name="LessEqualGreater" value="&#x022DA;"/>
+  <entity name="LessFullEqual" value="&#x02266;"/>
+  <entity name="LessGreater" value="&#x02276;"/>
+  <entity name="lessgtr" value="&#x02276;"/>
+  <entity name="LessLess" value="&#x02AA1;"/>
+  <entity name="lesssim" value="&#x02272;"/>
+  <entity name="LessSlantEqual" value="&#x02A7D;"/>
+  <entity name="LessTilde" value="&#x02272;"/>
+  <entity name="lfisht" value="&#x0297C;"/>
+  <entity name="lfloor" value="&#x0230A;"/>
+  <entity name="lfr" value="&#x1D529;"/>
+  <entity name="Lfr" value="&#x1D50F;"/>
+  <entity name="lg" value="&#x02276;"/>
+  <entity name="lgE" value="&#x02A91;"/>
+  <entity name="lHar" value="&#x02962;"/>
+  <entity name="lhard" value="&#x021BD;"/>
+  <entity name="lharu" value="&#x021BC;"/>
+  <entity name="lharul" value="&#x0296A;"/>
+  <entity name="lhblk" value="&#x02584;"/>
+  <entity name="ljcy" value="&#x00459;"/>
+  <entity name="LJcy" value="&#x00409;"/>
+  <entity name="ll" value="&#x0226A;"/>
+  <entity name="Ll" value="&#x022D8;"/>
+  <entity name="llarr" value="&#x021C7;"/>
+  <entity name="llcorner" value="&#x0231E;"/>
+  <entity name="Lleftarrow" value="&#x021DA;"/>
+  <entity name="llhard" value="&#x0296B;"/>
+  <entity name="lltri" value="&#x025FA;"/>
+  <entity name="lmidot" value="&#x00140;"/>
+  <entity name="Lmidot" value="&#x0013F;"/>
+  <entity name="lmoust" value="&#x023B0;"/>
+  <entity name="lmoustache" value="&#x023B0;"/>
+  <entity name="lnap" value="&#x02A89;"/>
+  <entity name="lnapprox" value="&#x02A89;"/>
+  <entity name="lne" value="&#x02268;"/>
+  <entity name="lnE" value="&#x02268;"/>
+  <entity name="lneq" value="&#x02268;"/>
+  <entity name="lneqq" value="&#x02268;"/>
+  <entity name="lnsim" value="&#x022E6;"/>
+  <entity name="loang" value="&#x0F558;"/>
+  <entity name="loarr" value="&#x021FD;"/>
+  <entity name="lobrk" value="&#x0301A;"/>
+  <entity name="longleftarrow" value="&#x0F576;"/>
+  <entity name="Longleftarrow" value="&#x0F579;"/>
+  <entity name="LongLeftArrow" value="&#x0F576;"/>
+  <entity name="longleftrightarrow" value="&#x0F578;"/>
+  <entity name="Longleftrightarrow" value="&#x0F57B;"/>
+  <entity name="LongLeftRightArrow" value="&#x0F578;"/>
+  <entity name="longmapsto" value="&#x0F57D;"/>
+  <entity name="longrightarrow" value="&#x0F577;"/>
+  <entity name="Longrightarrow" value="&#x0F57A;"/>
+  <entity name="LongRightArrow" value="&#x0F577;"/>
+  <entity name="looparrowleft" value="&#x021AB;"/>
+  <entity name="looparrowright" value="&#x021AC;"/>
+  <entity name="lopar" value="&#x03018;"/>
+  <entity name="lopf" value="&#x1D55D;"/>
+  <entity name="Lopf" value="&#x1D543;"/>
+  <entity name="loplus" value="&#x02A2D;"/>
+  <entity name="lotimes" value="&#x02A34;"/>
+  <entity name="lowast" value="&#x02217;"/>
+  <entity name="lowbar" value="&#x0005F;"/>
+  <entity name="LowerLeftArrow" value="&#x02199;"/>
+  <entity name="LowerRightArrow" value="&#x02198;"/>
+  <entity name="loz" value="&#x025CA;"/>
+  <entity name="lozenge" value="&#x025CA;"/>
+  <entity name="lozf" value="&#x029EB;"/>
+  <entity name="lpar" value="&#x00028;"/>
+  <entity name="lparlt" value="&#x02993;"/>
+  <entity name="lrarr" value="&#x021C6;"/>
+  <entity name="lrcorner" value="&#x0231F;"/>
+  <entity name="lrhar" value="&#x021CB;"/>
+  <entity name="lrhard" value="&#x0296D;"/>
+  <entity name="lrtri" value="&#x022BF;"/>
+  <entity name="lscr" value="&#x02113;"/>
+  <entity name="Lscr" value="&#x02112;"/>
+  <entity name="lsh" value="&#x021B0;"/>
+  <entity name="Lsh" value="&#x021B0;"/>
+  <entity name="lsim" value="&#x02272;"/>
+  <entity name="lsime" value="&#x02A8D;"/>
+  <entity name="lsimg" value="&#x02A8F;"/>
+  <entity name="lsqb" value="&#x0005B;"/>
+  <entity name="lsquo" value="&#x02018;"/>
+  <entity name="lsquor" value="&#x0201A;"/>
+  <entity name="lstrok" value="&#x00142;"/>
+  <entity name="Lstrok" value="&#x00141;"/>
+  <entity name="lt" value="&#x0003C;"/>
+  <entity name="Lt" value="&#x0226A;"/>
+  <entity name="ltcc" value="&#x02AA6;"/>
+  <entity name="ltcir" value="&#x02A79;"/>
+  <entity name="ltdot" value="&#x022D6;"/>
+  <entity name="lthree" value="&#x022CB;"/>
+  <entity name="ltimes" value="&#x022C9;"/>
+  <entity name="ltlarr" value="&#x02976;"/>
+  <entity name="ltquest" value="&#x02A7B;"/>
+  <entity name="ltri" value="&#x025C3;"/>
+  <entity name="ltrie" value="&#x022B4;"/>
+  <entity name="ltrif" value="&#x025C2;"/>
+  <entity name="ltrPar" value="&#x02996;"/>
+  <entity name="lurdshar" value="&#x0294A;"/>
+  <entity name="luruhar" value="&#x02966;"/>
+  <entity name="lvertneqq" value="&#x02268;&#x0FE00;"/>
+  <entity name="lvnE" value="&#x02268;&#x0FE00;"/>
+  <entity name="macr" value="&#x000AF;"/>
+  <entity name="male" value="&#x02642;"/>
+  <entity name="malt" value="&#x02720;"/>
+  <entity name="maltese" value="&#x02720;"/>
+  <entity name="map" value="&#x021A6;"/>
+  <entity name="Map" value="&#x02905;"/>
+  <entity name="mapsto" value="&#x021A6;"/>
+  <entity name="mapstodown" value="&#x021A7;"/>
+  <entity name="mapstoleft" value="&#x021A4;"/>
+  <entity name="mapstoup" value="&#x021A5;"/>
+  <entity name="marker" value="&#x025AE;"/>
+  <entity name="mcomma" value="&#x02A29;"/>
+  <entity name="mcy" value="&#x0043C;"/>
+  <entity name="Mcy" value="&#x0041C;"/>
+  <entity name="mdash" value="&#x02014;"/>
+  <entity name="mDDot" value="&#x0223A;"/>
+  <entity name="measuredangle" value="&#x02221;"/>
+  <entity name="MediumSpace" value="&#x0205F;"/>
+  <entity name="Mellintrf" value="&#x02133;"/>
+  <entity name="mfr" value="&#x1D52A;"/>
+  <entity name="Mfr" value="&#x1D510;"/>
+  <entity name="mho" value="&#x02127;"/>
+  <entity name="micro" value="&#x000B5;"/>
+  <entity name="mid" value="&#x02223;"/>
+  <entity name="midast" value="&#x0002A;"/>
+  <entity name="midcir" value="&#x02AF0;"/>
+  <entity name="middot" value="&#x000B7;"/>
+  <entity name="minus" value="&#x02212;"/>
+  <entity name="minusb" value="&#x0229F;"/>
+  <entity name="minusd" value="&#x02238;"/>
+  <entity name="minusdu" value="&#x02A2A;"/>
+  <entity name="MinusPlus" value="&#x02213;"/>
+  <entity name="mlcp" value="&#x02ADB;"/>
+  <entity name="mldr" value="&#x02026;"/>
+  <entity name="mnplus" value="&#x02213;"/>
+  <entity name="models" value="&#x022A7;"/>
+  <entity name="mopf" value="&#x1D55E;"/>
+  <entity name="Mopf" value="&#x1D544;"/>
+  <entity name="mp" value="&#x02213;"/>
+  <entity name="mscr" value="&#x1D4C2;"/>
+  <entity name="Mscr" value="&#x02133;"/>
+  <entity name="mstpos" value="&#x0223E;"/>
+  <entity name="mu" value="&#x003BC;"/>
+  <entity name="multimap" value="&#x022B8;"/>
+  <entity name="mumap" value="&#x022B8;"/>
+  <entity name="nabla" value="&#x02207;"/>
+  <entity name="nacute" value="&#x00144;"/>
+  <entity name="Nacute" value="&#x00143;"/>
+  <entity name="nang" value="&#x02220;&#x00338;"/>
+  <entity name="nap" value="&#x02249;"/>
+  <entity name="napE" value="&#x02A70;&#x00338;"/>
+  <entity name="napid" value="&#x0224B;&#x00338;"/>
+  <entity name="napos" value="&#x00149;"/>
+  <entity name="napprox" value="&#x02249;"/>
+  <entity name="natur" value="&#x0266E;"/>
+  <entity name="natural" value="&#x0266E;"/>
+  <entity name="naturals" value="&#x02115;"/>
+  <entity name="nbsp" value="&#x000A0;"/>
+  <entity name="nbump" value="&#x0224E;&#x00338;"/>
+  <entity name="nbumpe" value="&#x0224F;&#x00338;"/>
+  <entity name="ncap" value="&#x02A43;"/>
+  <entity name="ncaron" value="&#x00148;"/>
+  <entity name="Ncaron" value="&#x00147;"/>
+  <entity name="ncedil" value="&#x00146;"/>
+  <entity name="Ncedil" value="&#x00145;"/>
+  <entity name="ncong" value="&#x02247;"/>
+  <entity name="ncongdot" value="&#x02A6D;&#x00338;"/>
+  <entity name="ncup" value="&#x02A42;"/>
+  <entity name="ncy" value="&#x0043D;"/>
+  <entity name="Ncy" value="&#x0041D;"/>
+  <entity name="ndash" value="&#x02013;"/>
+  <entity name="ne" value="&#x02260;"/>
+  <entity name="nearhk" value="&#x02924;"/>
+  <entity name="nearr" value="&#x02197;"/>
+  <entity name="neArr" value="&#x021D7;"/>
+  <entity name="nearrow" value="&#x02197;"/>
+  <entity name="nedot" value="&#x02260;&#x0FE00;"/>
+  <entity name="NegativeMediumSpace" value="&#x0205F;&#x0FE00;"/>
+  <entity name="NegativeThickSpace" value="&#x02005;&#x0FE00;"/>
+  <entity name="NegativeThinSpace" value="&#x02009;&#x0FE00;"/>
+  <entity name="NegativeVeryThinSpace" value="&#x0200A;&#x0FE00;"/>
+  <entity name="nequiv" value="&#x02262;"/>
+  <entity name="nesear" value="&#x02928;"/>
+  <entity name="nesim" value="&#x02242;&#x00338;"/>
+  <entity name="NestedGreaterGreater" value="&#x0226B;"/>
+  <entity name="NestedLessLess" value="&#x0226A;"/>
+  <entity name="NewLine" value="&#x0000A;"/>
+  <entity name="nexist" value="&#x02204;"/>
+  <entity name="nexists" value="&#x02204;"/>
+  <entity name="nfr" value="&#x1D52B;"/>
+  <entity name="Nfr" value="&#x1D511;"/>
+  <entity name="nge" value="&#x02271;&#x020E5;"/>
+  <entity name="ngE" value="&#x02271;"/>
+  <entity name="ngeq" value="&#x02271;&#x020E5;"/>
+  <entity name="ngeqq" value="&#x02271;"/>
+  <entity name="ngeqslant" value="&#x02271;"/>
+  <entity name="nges" value="&#x02271;"/>
+  <entity name="nGg" value="&#x022D9;&#x00338;"/>
+  <entity name="ngsim" value="&#x02275;"/>
+  <entity name="ngt" value="&#x0226F;"/>
+  <entity name="nGt" value="&#x0226B;&#x00338;"/>
+  <entity name="ngtr" value="&#x0226F;"/>
+  <entity name="nGtv" value="&#x0226B;&#x00338;&#x0FE00;"/>
+  <entity name="nharr" value="&#x021AE;"/>
+  <entity name="nhArr" value="&#x021CE;"/>
+  <entity name="nhpar" value="&#x02AF2;"/>
+  <entity name="ni" value="&#x0220B;"/>
+  <entity name="nis" value="&#x022FC;"/>
+  <entity name="nisd" value="&#x022FA;"/>
+  <entity name="niv" value="&#x0220B;"/>
+  <entity name="njcy" value="&#x0045A;"/>
+  <entity name="NJcy" value="&#x0040A;"/>
+  <entity name="nlarr" value="&#x0219A;"/>
+  <entity name="nlArr" value="&#x021CD;"/>
+  <entity name="nldr" value="&#x02025;"/>
+  <entity name="nle" value="&#x02270;&#x020E5;"/>
+  <entity name="nlE" value="&#x02270;"/>
+  <entity name="nleftarrow" value="&#x0219A;"/>
+  <entity name="nLeftarrow" value="&#x021CD;"/>
+  <entity name="nleftrightarrow" value="&#x021AE;"/>
+  <entity name="nLeftrightarrow" value="&#x021CE;"/>
+  <entity name="nleq" value="&#x02270;&#x020E5;"/>
+  <entity name="nleqq" value="&#x02270;"/>
+  <entity name="nleqslant" value="&#x02270;"/>
+  <entity name="nles" value="&#x02270;"/>
+  <entity name="nless" value="&#x0226E;"/>
+  <entity name="nLl" value="&#x022D8;&#x00338;"/>
+  <entity name="nlsim" value="&#x02274;"/>
+  <entity name="nlt" value="&#x0226E;"/>
+  <entity name="nLt" value="&#x0226A;&#x00338;"/>
+  <entity name="nltri" value="&#x022EA;"/>
+  <entity name="nltrie" value="&#x022EC;"/>
+  <entity name="nLtv" value="&#x0226A;&#x00338;&#x0FE00;"/>
+  <entity name="nmid" value="&#x02224;"/>
+  <entity name="NoBreak" value="&#x0FEFF;"/>
+  <entity name="NonBreakingSpace" value="&#x000A0;"/>
+  <entity name="nopf" value="&#x1D55F;"/>
+  <entity name="Nopf" value="&#x02115;"/>
+  <entity name="not" value="&#x000AC;"/>
+  <entity name="Not" value="&#x02AEC;"/>
+  <entity name="NotCongruent" value="&#x02262;"/>
+  <entity name="NotCupCap" value="&#x0226D;"/>
+  <entity name="NotDoubleVerticalBar" value="&#x02226;"/>
+  <entity name="NotElement" value="&#x02209;"/>
+  <entity name="NotEqual" value="&#x02260;"/>
+  <entity name="NotEqualTilde" value="&#x02242;&#x00338;"/>
+  <entity name="NotExists" value="&#x02204;"/>
+  <entity name="NotGreater" value="&#x0226F;"/>
+  <entity name="NotGreaterEqual" value="&#x02271;&#x020E5;"/>
+  <entity name="NotGreaterFullEqual" value="&#x02270;"/>
+  <entity name="NotGreaterGreater" value="&#x0226B;&#x00338;&#x0FE00;"/>
+  <entity name="NotGreaterLess" value="&#x02279;"/>
+  <entity name="NotGreaterSlantEqual" value="&#x02271;"/>
+  <entity name="NotGreaterTilde" value="&#x02275;"/>
+  <entity name="NotHumpDownHump" value="&#x0224E;&#x00338;"/>
+  <entity name="NotHumpEqual" value="&#x0224F;&#x00338;"/>
+  <entity name="notin" value="&#x02209;"/>
+  <entity name="notindot" value="&#x022F6;&#x0FE00;"/>
+  <entity name="notinva" value="&#x02209;&#x00338;"/>
+  <entity name="notinvb" value="&#x022F7;"/>
+  <entity name="notinvc" value="&#x022F6;"/>
+  <entity name="NotLeftTriangle" value="&#x022EA;"/>
+  <entity name="NotLeftTriangleBar" value="&#x029CF;&#x00338;"/>
+  <entity name="NotLeftTriangleEqual" value="&#x022EC;"/>
+  <entity name="NotLess" value="&#x0226E;"/>
+  <entity name="NotLessEqual" value="&#x02270;&#x020E5;"/>
+  <entity name="NotLessGreater" value="&#x02278;"/>
+  <entity name="NotLessLess" value="&#x0226A;&#x00338;&#x0FE00;"/>
+  <entity name="NotLessSlantEqual" value="&#x02270;"/>
+  <entity name="NotLessTilde" value="&#x02274;"/>
+  <entity name="NotNestedGreaterGreater" value="&#x024A2;&#x00338;"/>
+  <entity name="NotNestedLessLess" value="&#x024A1;&#x00338;"/>
+  <entity name="notni" value="&#x0220C;"/>
+  <entity name="notniva" value="&#x0220C;"/>
+  <entity name="notnivb" value="&#x022FE;"/>
+  <entity name="notnivc" value="&#x022FD;"/>
+  <entity name="NotPrecedes" value="&#x02280;"/>
+  <entity name="NotPrecedesEqual" value="&#x02AAF;&#x00338;"/>
+  <entity name="NotPrecedesSlantEqual" value="&#x022E0;"/>
+  <entity name="NotReverseElement" value="&#x0220C;"/>
+  <entity name="NotRightTriangle" value="&#x022EB;"/>
+  <entity name="NotRightTriangleBar" value="&#x029D0;&#x00338;"/>
+  <entity name="NotRightTriangleEqual" value="&#x022ED;"/>
+  <entity name="NotSquareSubset" value="&#x0228F;&#x00338;"/>
+  <entity name="NotSquareSubsetEqual" value="&#x022E2;"/>
+  <entity name="NotSquareSuperset" value="&#x02290;&#x00338;"/>
+  <entity name="NotSquareSupersetEqual" value="&#x022E3;"/>
+  <entity name="NotSubset" value="&#x02284;"/>
+  <entity name="NotSubsetEqual" value="&#x02288;"/>
+  <entity name="NotSucceeds" value="&#x02281;"/>
+  <entity name="NotSucceedsEqual" value="&#x02AB0;&#x00338;"/>
+  <entity name="NotSucceedsSlantEqual" value="&#x022E1;"/>
+  <entity name="NotSucceedsTilde" value="&#x0227F;&#x00338;"/>
+  <entity name="NotSuperset" value="&#x02285;"/>
+  <entity name="NotSupersetEqual" value="&#x02289;"/>
+  <entity name="NotTilde" value="&#x02241;"/>
+  <entity name="NotTildeEqual" value="&#x02244;"/>
+  <entity name="NotTildeFullEqual" value="&#x02247;"/>
+  <entity name="NotTildeTilde" value="&#x02249;"/>
+  <entity name="NotVerticalBar" value="&#x02224;"/>
+  <entity name="npar" value="&#x02226;"/>
+  <entity name="nparallel" value="&#x02226;"/>
+  <entity name="nparsl" value="&#x02225;&#x0FE00;&#x020E5;"/>
+  <entity name="npart" value="&#x02202;&#x00338;"/>
+  <entity name="npolint" value="&#x02A14;"/>
+  <entity name="npr" value="&#x02280;"/>
+  <entity name="nprcue" value="&#x022E0;"/>
+  <entity name="npre" value="&#x02AAF;&#x00338;"/>
+  <entity name="nprec" value="&#x02280;"/>
+  <entity name="npreceq" value="&#x02AAF;&#x00338;"/>
+  <entity name="nrarr" value="&#x0219B;"/>
+  <entity name="nrArr" value="&#x021CF;"/>
+  <entity name="nrarrc" value="&#x02933;&#x00338;"/>
+  <entity name="nrarrw" value="&#x0219D;&#x00338;"/>
+  <entity name="nrightarrow" value="&#x0219B;"/>
+  <entity name="nRightarrow" value="&#x021CF;"/>
+  <entity name="nrtri" value="&#x022EB;"/>
+  <entity name="nrtrie" value="&#x022ED;"/>
+  <entity name="nsc" value="&#x02281;"/>
+  <entity name="nsccue" value="&#x022E1;"/>
+  <entity name="nsce" value="&#x02AB0;&#x00338;"/>
+  <entity name="nscr" value="&#x1D4C3;"/>
+  <entity name="Nscr" value="&#x1D4A9;"/>
+  <entity name="nshortmid" value="&#x02224;&#x0FE00;"/>
+  <entity name="nshortparallel" value="&#x02226;&#x0FE00;"/>
+  <entity name="nsim" value="&#x02241;"/>
+  <entity name="nsime" value="&#x02244;"/>
+  <entity name="nsimeq" value="&#x02244;"/>
+  <entity name="nsmid" value="&#x02224;&#x0FE00;"/>
+  <entity name="nspar" value="&#x02226;&#x0FE00;"/>
+  <entity name="nsqsube" value="&#x022E2;"/>
+  <entity name="nsqsupe" value="&#x022E3;"/>
+  <entity name="nsub" value="&#x02284;"/>
+  <entity name="nsube" value="&#x02288;"/>
+  <entity name="nsubE" value="&#x02288;"/>
+  <entity name="nsubset" value="&#x02284;"/>
+  <entity name="nsubseteq" value="&#x02288;"/>
+  <entity name="nsubseteqq" value="&#x02288;"/>
+  <entity name="nsucc" value="&#x02281;"/>
+  <entity name="nsucceq" value="&#x02AB0;&#x00338;"/>
+  <entity name="nsup" value="&#x02285;"/>
+  <entity name="nsupe" value="&#x02289;"/>
+  <entity name="nsupE" value="&#x02289;"/>
+  <entity name="nsupset" value="&#x02285;"/>
+  <entity name="nsupseteq" value="&#x02289;"/>
+  <entity name="nsupseteqq" value="&#x02289;"/>
+  <entity name="ntgl" value="&#x02279;"/>
+  <entity name="ntilde" value="&#x000F1;"/>
+  <entity name="Ntilde" value="&#x000D1;"/>
+  <entity name="ntlg" value="&#x02278;"/>
+  <entity name="ntriangleleft" value="&#x022EA;"/>
+  <entity name="ntrianglelefteq" value="&#x022EC;"/>
+  <entity name="ntriangleright" value="&#x022EB;"/>
+  <entity name="ntrianglerighteq" value="&#x022ED;"/>
+  <entity name="nu" value="&#x003BD;"/>
+  <entity name="num" value="&#x00023;"/>
+  <entity name="numero" value="&#x02116;"/>
+  <entity name="numsp" value="&#x02007;"/>
+  <entity name="nvap" value="&#x02249;&#x00338;"/>
+  <entity name="nvdash" value="&#x022AC;"/>
+  <entity name="nvDash" value="&#x022AD;"/>
+  <entity name="nVdash" value="&#x022AE;"/>
+  <entity name="nVDash" value="&#x022AF;"/>
+  <entity name="nvge" value="&#x02271;"/>
+  <entity name="nvgt" value="&#x0226F;"/>
+  <entity name="nvHarr" value="&#x021CE;"/>
+  <entity name="nvinfin" value="&#x029DE;"/>
+  <entity name="nvlArr" value="&#x021CD;"/>
+  <entity name="nvle" value="&#x02270;"/>
+  <entity name="nvlt" value="&#x0226E;"/>
+  <entity name="nvltrie" value="&#x022EC;&#x00338;"/>
+  <entity name="nvrArr" value="&#x021CF;"/>
+  <entity name="nvrtrie" value="&#x022ED;&#x00338;"/>
+  <entity name="nvsim" value="&#x02241;&#x00338;"/>
+  <entity name="nwarhk" value="&#x02923;"/>
+  <entity name="nwarr" value="&#x02196;"/>
+  <entity name="nwArr" value="&#x021D6;"/>
+  <entity name="nwarrow" value="&#x02196;"/>
+  <entity name="nwnear" value="&#x02927;"/>
+  <entity name="oacute" value="&#x000F3;"/>
+  <entity name="Oacute" value="&#x000D3;"/>
+  <entity name="oast" value="&#x0229B;"/>
+  <entity name="ocir" value="&#x0229A;"/>
+  <entity name="ocirc" value="&#x000F4;"/>
+  <entity name="Ocirc" value="&#x000D4;"/>
+  <entity name="ocy" value="&#x0043E;"/>
+  <entity name="Ocy" value="&#x0041E;"/>
+  <entity name="odash" value="&#x0229D;"/>
+  <entity name="odblac" value="&#x00151;"/>
+  <entity name="Odblac" value="&#x00150;"/>
+  <entity name="odiv" value="&#x02A38;"/>
+  <entity name="odot" value="&#x02299;"/>
+  <entity name="odsold" value="&#x029BC;"/>
+  <entity name="oelig" value="&#x00153;"/>
+  <entity name="OElig" value="&#x00152;"/>
+  <entity name="ofcir" value="&#x029BF;"/>
+  <entity name="ofr" value="&#x1D52C;"/>
+  <entity name="Ofr" value="&#x1D512;"/>
+  <entity name="ogon" value="&#x002DB;"/>
+  <entity name="ograve" value="&#x000F2;"/>
+  <entity name="Ograve" value="&#x000D2;"/>
+  <entity name="ogt" value="&#x029C1;"/>
+  <entity name="ohbar" value="&#x029B5;"/>
+  <entity name="ohm" value="&#x02126;"/>
+  <entity name="oint" value="&#x0222E;"/>
+  <entity name="olarr" value="&#x021BA;"/>
+  <entity name="olcir" value="&#x029BE;"/>
+  <entity name="olcross" value="&#x029BB;"/>
+  <entity name="olt" value="&#x029C0;"/>
+  <entity name="omacr" value="&#x0014D;"/>
+  <entity name="Omacr" value="&#x0014C;"/>
+  <entity name="omega" value="&#x003C9;"/>
+  <entity name="Omega" value="&#x003A9;"/>
+  <entity name="omid" value="&#x029B6;"/>
+  <entity name="ominus" value="&#x02296;"/>
+  <entity name="oopf" value="&#x1D560;"/>
+  <entity name="Oopf" value="&#x1D546;"/>
+  <entity name="opar" value="&#x029B7;"/>
+  <entity name="OpenCurlyDoubleQuote" value="&#x0201C;"/>
+  <entity name="OpenCurlyQuote" value="&#x02018;"/>
+  <entity name="operp" value="&#x029B9;"/>
+  <entity name="oplus" value="&#x02295;"/>
+  <entity name="or" value="&#x02228;"/>
+  <entity name="Or" value="&#x02A54;"/>
+  <entity name="orarr" value="&#x021BB;"/>
+  <entity name="ord" value="&#x02A5D;"/>
+  <entity name="order" value="&#x02134;"/>
+  <entity name="orderof" value="&#x02134;"/>
+  <entity name="ordf" value="&#x000AA;"/>
+  <entity name="ordm" value="&#x000BA;"/>
+  <entity name="origof" value="&#x022B6;"/>
+  <entity name="oror" value="&#x02A56;"/>
+  <entity name="orslope" value="&#x02A57;"/>
+  <entity name="orv" value="&#x02A5B;"/>
+  <entity name="oS" value="&#x024C8;"/>
+  <entity name="oscr" value="&#x02134;"/>
+  <entity name="Oscr" value="&#x1D4AA;"/>
+  <entity name="oslash" value="&#x000F8;"/>
+  <entity name="Oslash" value="&#x000D8;"/>
+  <entity name="osol" value="&#x02298;"/>
+  <entity name="otilde" value="&#x000F5;"/>
+  <entity name="Otilde" value="&#x000D5;"/>
+  <entity name="otimes" value="&#x02297;"/>
+  <entity name="Otimes" value="&#x02A37;"/>
+  <entity name="otimesas" value="&#x02A36;"/>
+  <entity name="ouml" value="&#x000F6;"/>
+  <entity name="Ouml" value="&#x000D6;"/>
+  <entity name="ovbar" value="&#x0233D;"/>
+  <entity name="OverBar" value="&#x000AF;"/>
+  <entity name="OverBrace" value="&#x0FE37;"/>
+  <entity name="OverBracket" value="&#x023B4;"/>
+  <entity name="OverParenthesis" value="&#x0FE35;"/>
+  <entity name="par" value="&#x02225;"/>
+  <entity name="para" value="&#x000B6;"/>
+  <entity name="parallel" value="&#x02225;"/>
+  <entity name="parsim" value="&#x02AF3;"/>
+  <entity name="parsl" value="&#x02225;&#x0FE00;"/>
+  <entity name="part" value="&#x02202;"/>
+  <entity name="PartialD" value="&#x02202;"/>
+  <entity name="pcy" value="&#x0043F;"/>
+  <entity name="Pcy" value="&#x0041F;"/>
+  <entity name="percnt" value="&#x00025;"/>
+  <entity name="period" value="&#x0002E;"/>
+  <entity name="permil" value="&#x02030;"/>
+  <entity name="perp" value="&#x022A5;"/>
+  <entity name="pertenk" value="&#x02031;"/>
+  <entity name="pfr" value="&#x1D52D;"/>
+  <entity name="Pfr" value="&#x1D513;"/>
+  <entity name="phi" value="&#x003C6;"/>
+  <entity name="Phi" value="&#x003A6;"/>
+  <entity name="phiv" value="&#x003D5;"/>
+  <entity name="phmmat" value="&#x02133;"/>
+  <entity name="phone" value="&#x0260E;"/>
+  <entity name="pi" value="&#x003C0;"/>
+  <entity name="Pi" value="&#x003A0;"/>
+  <entity name="pitchfork" value="&#x022D4;"/>
+  <entity name="piv" value="&#x003D6;"/>
+  <entity name="planck" value="&#x0210F;&#x0FE00;"/>
+  <entity name="planckh" value="&#x0210E;"/>
+  <entity name="plankv" value="&#x0210F;"/>
+  <entity name="plus" value="&#x0002B;"/>
+  <entity name="plusacir" value="&#x02A23;"/>
+  <entity name="plusb" value="&#x0229E;"/>
+  <entity name="pluscir" value="&#x02A22;"/>
+  <entity name="plusdo" value="&#x02214;"/>
+  <entity name="plusdu" value="&#x02A25;"/>
+  <entity name="pluse" value="&#x02A72;"/>
+  <entity name="PlusMinus" value="&#x000B1;"/>
+  <entity name="plusmn" value="&#x000B1;"/>
+  <entity name="plussim" value="&#x02A26;"/>
+  <entity name="plustwo" value="&#x02A27;"/>
+  <entity name="pm" value="&#x000B1;"/>
+  <entity name="Poincareplane" value="&#x0210C;"/>
+  <entity name="pointint" value="&#x02A15;"/>
+  <entity name="popf" value="&#x1D561;"/>
+  <entity name="Popf" value="&#x02119;"/>
+  <entity name="pound" value="&#x000A3;"/>
+  <entity name="pr" value="&#x0227A;"/>
+  <entity name="Pr" value="&#x02ABB;"/>
+  <entity name="prap" value="&#x0227E;"/>
+  <entity name="prcue" value="&#x0227C;"/>
+  <entity name="pre" value="&#x02AAF;"/>
+  <entity name="prE" value="&#x02AAF;"/>
+  <entity name="prec" value="&#x0227A;"/>
+  <entity name="precapprox" value="&#x0227E;"/>
+  <entity name="preccurlyeq" value="&#x0227C;"/>
+  <entity name="Precedes" value="&#x0227A;"/>
+  <entity name="PrecedesEqual" value="&#x02AAF;"/>
+  <entity name="PrecedesSlantEqual" value="&#x0227C;"/>
+  <entity name="PrecedesTilde" value="&#x0227E;"/>
+  <entity name="preceq" value="&#x02AAF;"/>
+  <entity name="precnapprox" value="&#x022E8;"/>
+  <entity name="precneqq" value="&#x02AB5;"/>
+  <entity name="precnsim" value="&#x022E8;"/>
+  <entity name="precsim" value="&#x0227E;"/>
+  <entity name="prime" value="&#x02032;"/>
+  <entity name="Prime" value="&#x02033;"/>
+  <entity name="primes" value="&#x02119;"/>
+  <entity name="prnap" value="&#x022E8;"/>
+  <entity name="prnE" value="&#x02AB5;"/>
+  <entity name="prnsim" value="&#x022E8;"/>
+  <entity name="prod" value="&#x0220F;"/>
+  <entity name="Product" value="&#x0220F;"/>
+  <entity name="profalar" value="&#x0232E;"/>
+  <entity name="profline" value="&#x02312;"/>
+  <entity name="profsurf" value="&#x02313;"/>
+  <entity name="prop" value="&#x0221D;"/>
+  <entity name="Proportion" value="&#x02237;"/>
+  <entity name="Proportional" value="&#x0221D;"/>
+  <entity name="propto" value="&#x0221D;"/>
+  <entity name="prsim" value="&#x0227E;"/>
+  <entity name="prurel" value="&#x022B0;"/>
+  <entity name="pscr" value="&#x1D4C5;"/>
+  <entity name="Pscr" value="&#x1D4AB;"/>
+  <entity name="psi" value="&#x003C8;"/>
+  <entity name="Psi" value="&#x003A8;"/>
+  <entity name="puncsp" value="&#x02008;"/>
+  <entity name="qfr" value="&#x1D52E;"/>
+  <entity name="Qfr" value="&#x1D514;"/>
+  <entity name="qint" value="&#x02A0C;"/>
+  <entity name="qopf" value="&#x1D562;"/>
+  <entity name="Qopf" value="&#x0211A;"/>
+  <entity name="qprime" value="&#x02057;"/>
+  <entity name="qscr" value="&#x1D4C6;"/>
+  <entity name="Qscr" value="&#x1D4AC;"/>
+  <entity name="quaternions" value="&#x0210D;"/>
+  <entity name="quatint" value="&#x02A16;"/>
+  <entity name="quest" value="&#x0003F;"/>
+  <entity name="questeq" value="&#x0225F;"/>
+  <entity name="quot" value="&#x00022;"/>
+  <entity name="rAarr" value="&#x021DB;"/>
+  <entity name="race" value="&#x029DA;"/>
+  <entity name="racute" value="&#x00155;"/>
+  <entity name="Racute" value="&#x00154;"/>
+  <entity name="radic" value="&#x0221A;"/>
+  <entity name="raemptyv" value="&#x029B3;"/>
+  <entity name="rang" value="&#x0232A;"/>
+  <entity name="Rang" value="&#x0300B;"/>
+  <entity name="rangd" value="&#x02992;"/>
+  <entity name="range" value="&#x029A5;"/>
+  <entity name="rangle" value="&#x0232A;"/>
+  <entity name="raquo" value="&#x000BB;"/>
+  <entity name="rarr" value="&#x02192;"/>
+  <entity name="rArr" value="&#x021D2;"/>
+  <entity name="Rarr" value="&#x021A0;"/>
+  <entity name="rarrap" value="&#x02975;"/>
+  <entity name="rarrb" value="&#x021E5;"/>
+  <entity name="rarrbfs" value="&#x02920;"/>
+  <entity name="rarrc" value="&#x02933;"/>
+  <entity name="rarrfs" value="&#x0291E;"/>
+  <entity name="rarrhk" value="&#x021AA;"/>
+  <entity name="rarrlp" value="&#x021AC;"/>
+  <entity name="rarrpl" value="&#x02945;"/>
+  <entity name="rarrsim" value="&#x02974;"/>
+  <entity name="rarrtl" value="&#x021A3;"/>
+  <entity name="Rarrtl" value="&#x02916;"/>
+  <entity name="rarrw" value="&#x0219D;"/>
+  <entity name="ratail" value="&#x021A3;"/>
+  <entity name="rAtail" value="&#x0291C;"/>
+  <entity name="ratio" value="&#x02236;"/>
+  <entity name="rationals" value="&#x0211A;"/>
+  <entity name="rbarr" value="&#x0290D;"/>
+  <entity name="rBarr" value="&#x0290F;"/>
+  <entity name="RBarr" value="&#x02910;"/>
+  <entity name="rbbrk" value="&#x03015;"/>
+  <entity name="rbrace" value="&#x0007D;"/>
+  <entity name="rbrack" value="&#x0005D;"/>
+  <entity name="rbrke" value="&#x0298C;"/>
+  <entity name="rbrksld" value="&#x0298E;"/>
+  <entity name="rbrkslu" value="&#x02990;"/>
+  <entity name="rcaron" value="&#x00159;"/>
+  <entity name="Rcaron" value="&#x00158;"/>
+  <entity name="rcedil" value="&#x00157;"/>
+  <entity name="Rcedil" value="&#x00156;"/>
+  <entity name="rceil" value="&#x02309;"/>
+  <entity name="rcub" value="&#x0007D;"/>
+  <entity name="rcy" value="&#x00440;"/>
+  <entity name="Rcy" value="&#x00420;"/>
+  <entity name="rdca" value="&#x02937;"/>
+  <entity name="rdldhar" value="&#x02969;"/>
+  <entity name="rdquo" value="&#x0201D;"/>
+  <entity name="rdquor" value="&#x0201D;"/>
+  <entity name="rdsh" value="&#x021B3;"/>
+  <entity name="Re" value="&#x0211C;"/>
+  <entity name="real" value="&#x0211C;"/>
+  <entity name="realine" value="&#x0211B;"/>
+  <entity name="realpart" value="&#x0211C;"/>
+  <entity name="reals" value="&#x0211D;"/>
+  <entity name="rect" value="&#x025AD;"/>
+  <entity name="reg" value="&#x000AE;"/>
+  <entity name="ReverseElement" value="&#x0220B;"/>
+  <entity name="ReverseEquilibrium" value="&#x021CB;"/>
+  <entity name="ReverseUpEquilibrium" value="&#x0296F;"/>
+  <entity name="rfisht" value="&#x0297D;"/>
+  <entity name="rfloor" value="&#x0230B;"/>
+  <entity name="rfr" value="&#x1D52F;"/>
+  <entity name="Rfr" value="&#x0211C;"/>
+  <entity name="rHar" value="&#x02964;"/>
+  <entity name="rhard" value="&#x021C1;"/>
+  <entity name="rharu" value="&#x021C0;"/>
+  <entity name="rharul" value="&#x0296C;"/>
+  <entity name="rho" value="&#x003C1;"/>
+  <entity name="rhov" value="&#x003F1;"/>
+  <entity name="RightAngleBracket" value="&#x0232A;"/>
+  <entity name="rightarrow" value="&#x02192;"/>
+  <entity name="Rightarrow" value="&#x021D2;"/>
+  <entity name="RightArrow" value="&#x02192;"/>
+  <entity name="RightArrowBar" value="&#x021E5;"/>
+  <entity name="RightArrowLeftArrow" value="&#x021C4;"/>
+  <entity name="rightarrowtail" value="&#x021A3;"/>
+  <entity name="RightCeiling" value="&#x02309;"/>
+  <entity name="RightDoubleBracket" value="&#x0301B;"/>
+  <entity name="RightDownTeeVector" value="&#x0295D;"/>
+  <entity name="RightDownVector" value="&#x021C2;"/>
+  <entity name="RightDownVectorBar" value="&#x02955;"/>
+  <entity name="RightFloor" value="&#x0230B;"/>
+  <entity name="rightharpoondown" value="&#x021C1;"/>
+  <entity name="rightharpoonup" value="&#x021C0;"/>
+  <entity name="rightleftarrows" value="&#x021C4;"/>
+  <entity name="rightleftharpoons" value="&#x021CC;"/>
+  <entity name="rightrightarrows" value="&#x021C9;"/>
+  <entity name="rightsquigarrow" value="&#x0219D;"/>
+  <entity name="RightTee" value="&#x022A2;"/>
+  <entity name="RightTeeArrow" value="&#x021A6;"/>
+  <entity name="RightTeeVector" value="&#x0295B;"/>
+  <entity name="rightthreetimes" value="&#x022CC;"/>
+  <entity name="RightTriangle" value="&#x022B3;"/>
+  <entity name="RightTriangleBar" value="&#x029D0;"/>
+  <entity name="RightTriangleEqual" value="&#x022B5;"/>
+  <entity name="RightUpDownVector" value="&#x0294F;"/>
+  <entity name="RightUpTeeVector" value="&#x0295C;"/>
+  <entity name="RightUpVector" value="&#x021BE;"/>
+  <entity name="RightUpVectorBar" value="&#x02954;"/>
+  <entity name="RightVector" value="&#x021C0;"/>
+  <entity name="RightVectorBar" value="&#x02953;"/>
+  <entity name="ring" value="&#x002DA;"/>
+  <entity name="risingdotseq" value="&#x02253;"/>
+  <entity name="rlarr" value="&#x021C4;"/>
+  <entity name="rlhar" value="&#x021CC;"/>
+  <entity name="rmoust" value="&#x023B1;"/>
+  <entity name="rmoustache" value="&#x023B1;"/>
+  <entity name="rnmid" value="&#x02AEE;"/>
+  <entity name="roang" value="&#x0F559;"/>
+  <entity name="roarr" value="&#x021FE;"/>
+  <entity name="robrk" value="&#x0301B;"/>
+  <entity name="ropar" value="&#x03019;"/>
+  <entity name="ropf" value="&#x1D563;"/>
+  <entity name="Ropf" value="&#x0211D;"/>
+  <entity name="roplus" value="&#x02A2E;"/>
+  <entity name="rotimes" value="&#x02A35;"/>
+  <entity name="RoundImplies" value="&#x02970;"/>
+  <entity name="rpar" value="&#x00029;"/>
+  <entity name="rpargt" value="&#x02994;"/>
+  <entity name="rppolint" value="&#x02A12;"/>
+  <entity name="rrarr" value="&#x021C9;"/>
+  <entity name="Rrightarrow" value="&#x021DB;"/>
+  <entity name="rscr" value="&#x1D4C7;"/>
+  <entity name="Rscr" value="&#x0211B;"/>
+  <entity name="rsh" value="&#x021B1;"/>
+  <entity name="Rsh" value="&#x021B1;"/>
+  <entity name="rsqb" value="&#x0005D;"/>
+  <entity name="rsquo" value="&#x02019;"/>
+  <entity name="rsquor" value="&#x02019;"/>
+  <entity name="rthree" value="&#x022CC;"/>
+  <entity name="rtimes" value="&#x022CA;"/>
+  <entity name="rtri" value="&#x025B9;"/>
+  <entity name="rtrie" value="&#x022B5;"/>
+  <entity name="rtrif" value="&#x025B8;"/>
+  <entity name="rtriltri" value="&#x029CE;"/>
+  <entity name="RuleDelayed" value="&#x029F4;"/>
+  <entity name="ruluhar" value="&#x02968;"/>
+  <entity name="rx" value="&#x0211E;"/>
+  <entity name="sacute" value="&#x0015B;"/>
+  <entity name="Sacute" value="&#x0015A;"/>
+  <entity name="sc" value="&#x0227B;"/>
+  <entity name="Sc" value="&#x02ABC;"/>
+  <entity name="scap" value="&#x0227F;"/>
+  <entity name="scaron" value="&#x00161;"/>
+  <entity name="Scaron" value="&#x00160;"/>
+  <entity name="sccue" value="&#x0227D;"/>
+  <entity name="sce" value="&#x0227D;"/>
+  <entity name="scE" value="&#x0227E;"/>
+  <entity name="scedil" value="&#x0015F;"/>
+  <entity name="Scedil" value="&#x0015E;"/>
+  <entity name="scirc" value="&#x0015D;"/>
+  <entity name="Scirc" value="&#x0015C;"/>
+  <entity name="scnap" value="&#x022E9;"/>
+  <entity name="scnE" value="&#x02AB6;"/>
+  <entity name="scnsim" value="&#x022E9;"/>
+  <entity name="scpolint" value="&#x02A13;"/>
+  <entity name="scsim" value="&#x0227F;"/>
+  <entity name="scy" value="&#x00441;"/>
+  <entity name="Scy" value="&#x00421;"/>
+  <entity name="sdot" value="&#x022C5;"/>
+  <entity name="sdotb" value="&#x022A1;"/>
+  <entity name="sdote" value="&#x02A66;"/>
+  <entity name="searhk" value="&#x02925;"/>
+  <entity name="searr" value="&#x02198;"/>
+  <entity name="seArr" value="&#x021D8;"/>
+  <entity name="searrow" value="&#x02198;"/>
+  <entity name="sect" value="&#x000A7;"/>
+  <entity name="semi" value="&#x0003B;"/>
+  <entity name="seswar" value="&#x02929;"/>
+  <entity name="setminus" value="&#x02216;"/>
+  <entity name="setmn" value="&#x02216;"/>
+  <entity name="sext" value="&#x02736;"/>
+  <entity name="sfr" value="&#x1D530;"/>
+  <entity name="Sfr" value="&#x1D516;"/>
+  <entity name="sharp" value="&#x0266F;"/>
+  <entity name="shchcy" value="&#x00449;"/>
+  <entity name="SHCHcy" value="&#x00429;"/>
+  <entity name="shcy" value="&#x00448;"/>
+  <entity name="SHcy" value="&#x00428;"/>
+  <entity name="ShortDownArrow" value="&#x02304;&#x0FE00;"/>
+  <entity name="ShortLeftArrow" value="&#x02190;&#x0FE00;"/>
+  <entity name="shortmid" value="&#x02223;&#x0FE00;"/>
+  <entity name="shortparallel" value="&#x02225;&#x0FE00;"/>
+  <entity name="ShortRightArrow" value="&#x02192;&#x0FE00;"/>
+  <entity name="ShortUpArrow" value="&#x02303;&#x0FE00;"/>
+  <entity name="shy" value="&#x000AD;"/>
+  <entity name="sigma" value="&#x003C3;"/>
+  <entity name="Sigma" value="&#x003A3;"/>
+  <entity name="sigmav" value="&#x003C2;"/>
+  <entity name="sim" value="&#x0223C;"/>
+  <entity name="simdot" value="&#x02A6A;"/>
+  <entity name="sime" value="&#x02243;"/>
+  <entity name="simeq" value="&#x02243;"/>
+  <entity name="simg" value="&#x02A9E;"/>
+  <entity name="simgE" value="&#x02AA0;"/>
+  <entity name="siml" value="&#x02A9D;"/>
+  <entity name="simlE" value="&#x02A9F;"/>
+  <entity name="simne" value="&#x02246;"/>
+  <entity name="simplus" value="&#x02A24;"/>
+  <entity name="simrarr" value="&#x02972;"/>
+  <entity name="slarr" value="&#x02190;&#x0FE00;"/>
+  <entity name="SmallCircle" value="&#x02218;"/>
+  <entity name="smallsetminus" value="&#x02216;&#x0FE00;"/>
+  <entity name="smashp" value="&#x02A33;"/>
+  <entity name="smeparsl" value="&#x029E4;"/>
+  <entity name="smid" value="&#x02223;&#x0FE00;"/>
+  <entity name="smile" value="&#x02323;"/>
+  <entity name="smt" value="&#x02AAA;"/>
+  <entity name="smte" value="&#x02AAC;"/>
+  <entity name="smtes" value="&#x02AAC;&#x0FE00;"/>
+  <entity name="softcy" value="&#x0044C;"/>
+  <entity name="SOFTcy" value="&#x0042C;"/>
+  <entity name="sol" value="&#x0002F;"/>
+  <entity name="solb" value="&#x029C4;"/>
+  <entity name="solbar" value="&#x0233F;"/>
+  <entity name="sopf" value="&#x1D564;"/>
+  <entity name="Sopf" value="&#x1D54A;"/>
+  <entity name="spades" value="&#x02660;"/>
+  <entity name="spadesuit" value="&#x02660;"/>
+  <entity name="spar" value="&#x02225;&#x0FE00;"/>
+  <entity name="sqcap" value="&#x02293;"/>
+  <entity name="sqcaps" value="&#x02293;&#x0FE00;"/>
+  <entity name="sqcup" value="&#x02294;"/>
+  <entity name="sqcups" value="&#x02294;&#x0FE00;"/>
+  <entity name="Sqrt" value="&#x0221A;"/>
+  <entity name="sqsub" value="&#x0228F;"/>
+  <entity name="sqsube" value="&#x02291;"/>
+  <entity name="sqsubset" value="&#x0228F;"/>
+  <entity name="sqsubseteq" value="&#x02291;"/>
+  <entity name="sqsup" value="&#x02290;"/>
+  <entity name="sqsupe" value="&#x02292;"/>
+  <entity name="sqsupset" value="&#x02290;"/>
+  <entity name="sqsupseteq" value="&#x02292;"/>
+  <entity name="squ" value="&#x025A1;"/>
+  <entity name="square" value="&#x025A1;"/>
+  <entity name="Square" value="&#x025A1;"/>
+  <entity name="SquareIntersection" value="&#x02293;"/>
+  <entity name="SquareSubset" value="&#x0228F;"/>
+  <entity name="SquareSubsetEqual" value="&#x02291;"/>
+  <entity name="SquareSuperset" value="&#x02290;"/>
+  <entity name="SquareSupersetEqual" value="&#x02292;"/>
+  <entity name="SquareUnion" value="&#x02294;"/>
+  <entity name="squarf" value="&#x025AA;"/>
+  <entity name="squf" value="&#x025AA;"/>
+  <entity name="srarr" value="&#x02192;&#x0FE00;"/>
+  <entity name="sscr" value="&#x1D4C8;"/>
+  <entity name="Sscr" value="&#x1D4AE;"/>
+  <entity name="ssetmn" value="&#x02216;&#x0FE00;"/>
+  <entity name="sstarf" value="&#x022C6;"/>
+  <entity name="star" value="&#x022C6;"/>
+  <entity name="Star" value="&#x022C6;"/>
+  <entity name="starf" value="&#x02605;"/>
+  <entity name="straightepsilon" value="&#x003B5;"/>
+  <entity name="straightphi" value="&#x003C6;"/>
+  <entity name="sub" value="&#x02282;"/>
+  <entity name="Sub" value="&#x022D0;"/>
+  <entity name="subdot" value="&#x02ABD;"/>
+  <entity name="sube" value="&#x02286;"/>
+  <entity name="subE" value="&#x02286;"/>
+  <entity name="subedot" value="&#x02AC3;"/>
+  <entity name="submult" value="&#x02AC1;"/>
+  <entity name="subne" value="&#x0228A;"/>
+  <entity name="subnE" value="&#x0228A;"/>
+  <entity name="subplus" value="&#x02ABF;"/>
+  <entity name="subrarr" value="&#x02979;"/>
+  <entity name="subset" value="&#x02282;"/>
+  <entity name="Subset" value="&#x022D0;"/>
+  <entity name="subseteq" value="&#x02286;"/>
+  <entity name="subseteqq" value="&#x02286;"/>
+  <entity name="SubsetEqual" value="&#x02286;"/>
+  <entity name="subsetneq" value="&#x0228A;"/>
+  <entity name="subsetneqq" value="&#x0228A;"/>
+  <entity name="subsim" value="&#x02AC7;"/>
+  <entity name="subsub" value="&#x02AD5;"/>
+  <entity name="subsup" value="&#x02AD3;"/>
+  <entity name="succ" value="&#x0227B;"/>
+  <entity name="succapprox" value="&#x0227F;"/>
+  <entity name="succcurlyeq" value="&#x0227D;"/>
+  <entity name="Succeeds" value="&#x0227B;"/>
+  <entity name="SucceedsEqual" value="&#x0227D;"/>
+  <entity name="SucceedsSlantEqual" value="&#x0227D;"/>
+  <entity name="SucceedsTilde" value="&#x0227F;"/>
+  <entity name="succeq" value="&#x0227D;"/>
+  <entity name="succnapprox" value="&#x022E9;"/>
+  <entity name="succneqq" value="&#x02AB6;"/>
+  <entity name="succnsim" value="&#x022E9;"/>
+  <entity name="succsim" value="&#x0227F;"/>
+  <entity name="SuchThat" value="&#x0220B;"/>
+  <entity name="sum" value="&#x02211;"/>
+  <entity name="Sum" value="&#x02211;"/>
+  <entity name="sung" value="&#x0266A;"/>
+  <entity name="sup" value="&#x02283;"/>
+  <entity name="Sup" value="&#x022D1;"/>
+  <entity name="sup1" value="&#x000B9;"/>
+  <entity name="sup2" value="&#x000B2;"/>
+  <entity name="sup3" value="&#x000B3;"/>
+  <entity name="supdot" value="&#x02ABE;"/>
+  <entity name="supdsub" value="&#x02AD8;"/>
+  <entity name="supe" value="&#x02287;"/>
+  <entity name="supE" value="&#x02287;"/>
+  <entity name="supedot" value="&#x02AC4;"/>
+  <entity name="Superset" value="&#x02283;"/>
+  <entity name="SupersetEqual" value="&#x02287;"/>
+  <entity name="suphsol" value="&#x02283;&#x0002F;"/>
+  <entity name="suphsub" value="&#x02AD7;"/>
+  <entity name="suplarr" value="&#x0297B;"/>
+  <entity name="supmult" value="&#x02AC2;"/>
+  <entity name="supne" value="&#x0228B;"/>
+  <entity name="supnE" value="&#x0228B;"/>
+  <entity name="supplus" value="&#x02AC0;"/>
+  <entity name="supset" value="&#x02283;"/>
+  <entity name="Supset" value="&#x022D1;"/>
+  <entity name="supseteq" value="&#x02287;"/>
+  <entity name="supseteqq" value="&#x02287;"/>
+  <entity name="supsetneq" value="&#x0228B;"/>
+  <entity name="supsetneqq" value="&#x0228B;"/>
+  <entity name="supsim" value="&#x02AC8;"/>
+  <entity name="supsub" value="&#x02AD4;"/>
+  <entity name="supsup" value="&#x02AD6;"/>
+  <entity name="swarhk" value="&#x02926;"/>
+  <entity name="swarr" value="&#x02199;"/>
+  <entity name="swArr" value="&#x021D9;"/>
+  <entity name="swarrow" value="&#x02199;"/>
+  <entity name="swnwar" value="&#x0292A;"/>
+  <entity name="szlig" value="&#x000DF;"/>
+  <entity name="Tab" value="&#x00009;"/>
+  <entity name="target" value="&#x02316;"/>
+  <entity name="tau" value="&#x003C4;"/>
+  <entity name="tbrk" value="&#x023B4;"/>
+  <entity name="tcaron" value="&#x00165;"/>
+  <entity name="Tcaron" value="&#x00164;"/>
+  <entity name="tcedil" value="&#x00163;"/>
+  <entity name="Tcedil" value="&#x00162;"/>
+  <entity name="tcy" value="&#x00442;"/>
+  <entity name="Tcy" value="&#x00422;"/>
+  <entity name="tdot" value="&#x020DB;"/>
+  <entity name="telrec" value="&#x02315;"/>
+  <entity name="tfr" value="&#x1D531;"/>
+  <entity name="Tfr" value="&#x1D517;"/>
+  <entity name="there4" value="&#x02234;"/>
+  <entity name="therefore" value="&#x02234;"/>
+  <entity name="Therefore" value="&#x02234;"/>
+  <entity name="theta" value="&#x003B8;"/>
+  <entity name="Theta" value="&#x00398;"/>
+  <entity name="thetav" value="&#x003D1;"/>
+  <entity name="thickapprox" value="&#x02248;&#x0FE00;"/>
+  <entity name="thicksim" value="&#x0223C;&#x0FE00;"/>
+  <entity name="ThickSpace" value="&#x02009;&#x0200A;&#x0200A;"/>
+  <entity name="thinsp" value="&#x02009;"/>
+  <entity name="ThinSpace" value="&#x02009;"/>
+  <entity name="thkap" value="&#x02248;&#x0FE00;"/>
+  <entity name="thksim" value="&#x0223C;&#x0FE00;"/>
+  <entity name="thorn" value="&#x000FE;"/>
+  <entity name="THORN" value="&#x000DE;"/>
+  <entity name="tilde" value="&#x002DC;"/>
+  <entity name="Tilde" value="&#x0223C;"/>
+  <entity name="TildeEqual" value="&#x02243;"/>
+  <entity name="TildeFullEqual" value="&#x02245;"/>
+  <entity name="TildeTilde" value="&#x02248;"/>
+  <entity name="times" value="&#x000D7;"/>
+  <entity name="timesb" value="&#x022A0;"/>
+  <entity name="timesbar" value="&#x02A31;"/>
+  <entity name="timesd" value="&#x02A30;"/>
+  <entity name="tint" value="&#x0222D;"/>
+  <entity name="toea" value="&#x02928;"/>
+  <entity name="top" value="&#x022A4;"/>
+  <entity name="topbot" value="&#x02336;"/>
+  <entity name="topcir" value="&#x02AF1;"/>
+  <entity name="topf" value="&#x1D565;"/>
+  <entity name="Topf" value="&#x1D54B;"/>
+  <entity name="topfork" value="&#x02ADA;"/>
+  <entity name="tosa" value="&#x02929;"/>
+  <entity name="tprime" value="&#x02034;"/>
+  <entity name="trade" value="&#x02122;"/>
+  <entity name="triangle" value="&#x025B5;"/>
+  <entity name="triangledown" value="&#x025BF;"/>
+  <entity name="triangleleft" value="&#x025C3;"/>
+  <entity name="trianglelefteq" value="&#x022B4;"/>
+  <entity name="triangleq" value="&#x0225C;"/>
+  <entity name="triangleright" value="&#x025B9;"/>
+  <entity name="trianglerighteq" value="&#x022B5;"/>
+  <entity name="tridot" value="&#x025EC;"/>
+  <entity name="trie" value="&#x0225C;"/>
+  <entity name="triminus" value="&#x02A3A;"/>
+  <entity name="TripleDot" value="&#x020DB;"/>
+  <entity name="triplus" value="&#x02A39;"/>
+  <entity name="trisb" value="&#x029CD;"/>
+  <entity name="tritime" value="&#x02A3B;"/>
+  <entity name="tscr" value="&#x1D4C9;"/>
+  <entity name="Tscr" value="&#x1D4AF;"/>
+  <entity name="tscy" value="&#x00446;"/>
+  <entity name="TScy" value="&#x00426;"/>
+  <entity name="tshcy" value="&#x0045B;"/>
+  <entity name="TSHcy" value="&#x0040B;"/>
+  <entity name="tstrok" value="&#x00167;"/>
+  <entity name="Tstrok" value="&#x00166;"/>
+  <entity name="twixt" value="&#x0226C;"/>
+  <entity name="twoheadleftarrow" value="&#x0219E;"/>
+  <entity name="twoheadrightarrow" value="&#x021A0;"/>
+  <entity name="uacute" value="&#x000FA;"/>
+  <entity name="Uacute" value="&#x000DA;"/>
+  <entity name="uarr" value="&#x02191;"/>
+  <entity name="uArr" value="&#x021D1;"/>
+  <entity name="Uarr" value="&#x0219F;"/>
+  <entity name="Uarrocir" value="&#x02949;"/>
+  <entity name="ubrcy" value="&#x0045E;"/>
+  <entity name="Ubrcy" value="&#x0040E;"/>
+  <entity name="ubreve" value="&#x0016D;"/>
+  <entity name="Ubreve" value="&#x0016C;"/>
+  <entity name="ucirc" value="&#x000FB;"/>
+  <entity name="Ucirc" value="&#x000DB;"/>
+  <entity name="ucy" value="&#x00443;"/>
+  <entity name="Ucy" value="&#x00423;"/>
+  <entity name="udarr" value="&#x021C5;"/>
+  <entity name="udblac" value="&#x00171;"/>
+  <entity name="Udblac" value="&#x00170;"/>
+  <entity name="udhar" value="&#x0296E;"/>
+  <entity name="ufisht" value="&#x0297E;"/>
+  <entity name="ufr" value="&#x1D532;"/>
+  <entity name="Ufr" value="&#x1D518;"/>
+  <entity name="ugrave" value="&#x000F9;"/>
+  <entity name="Ugrave" value="&#x000D9;"/>
+  <entity name="uHar" value="&#x02963;"/>
+  <entity name="uharl" value="&#x021BF;"/>
+  <entity name="uharr" value="&#x021BE;"/>
+  <entity name="uhblk" value="&#x02580;"/>
+  <entity name="ulcorn" value="&#x0231C;"/>
+  <entity name="ulcorner" value="&#x0231C;"/>
+  <entity name="ulcrop" value="&#x0230F;"/>
+  <entity name="ultri" value="&#x025F8;"/>
+  <entity name="umacr" value="&#x0016B;"/>
+  <entity name="Umacr" value="&#x0016A;"/>
+  <entity name="uml" value="&#x000A8;"/>
+  <entity name="UnderBar" value="&#x00332;"/>
+  <entity name="UnderBrace" value="&#x0FE38;"/>
+  <entity name="UnderBracket" value="&#x023B5;"/>
+  <entity name="UnderParenthesis" value="&#x0FE36;"/>
+  <entity name="Union" value="&#x022C3;"/>
+  <entity name="UnionPlus" value="&#x0228E;"/>
+  <entity name="uogon" value="&#x00173;"/>
+  <entity name="Uogon" value="&#x00172;"/>
+  <entity name="uopf" value="&#x1D566;"/>
+  <entity name="Uopf" value="&#x1D54C;"/>
+  <entity name="uparrow" value="&#x02191;"/>
+  <entity name="Uparrow" value="&#x021D1;"/>
+  <entity name="UpArrow" value="&#x02191;"/>
+  <entity name="UpArrowBar" value="&#x02912;"/>
+  <entity name="UpArrowDownArrow" value="&#x021C5;"/>
+  <entity name="updownarrow" value="&#x02195;"/>
+  <entity name="Updownarrow" value="&#x021D5;"/>
+  <entity name="UpDownArrow" value="&#x02195;"/>
+  <entity name="UpEquilibrium" value="&#x0296E;"/>
+  <entity name="upharpoonleft" value="&#x021BF;"/>
+  <entity name="upharpoonright" value="&#x021BE;"/>
+  <entity name="uplus" value="&#x0228E;"/>
+  <entity name="UpperLeftArrow" value="&#x02196;"/>
+  <entity name="UpperRightArrow" value="&#x02197;"/>
+  <entity name="upsi" value="&#x003C5;"/>
+  <entity name="Upsi" value="&#x003D2;"/>
+  <entity name="upsilon" value="&#x003C5;"/>
+  <entity name="Upsilon" value="&#x003D2;"/>
+  <entity name="UpTee" value="&#x022A5;"/>
+  <entity name="UpTeeArrow" value="&#x021A5;"/>
+  <entity name="upuparrows" value="&#x021C8;"/>
+  <entity name="urcorn" value="&#x0231D;"/>
+  <entity name="urcorner" value="&#x0231D;"/>
+  <entity name="urcrop" value="&#x0230E;"/>
+  <entity name="uring" value="&#x0016F;"/>
+  <entity name="Uring" value="&#x0016E;"/>
+  <entity name="urtri" value="&#x025F9;"/>
+  <entity name="uscr" value="&#x1D4CA;"/>
+  <entity name="Uscr" value="&#x1D4B0;"/>
+  <entity name="utdot" value="&#x022F0;"/>
+  <entity name="utilde" value="&#x00169;"/>
+  <entity name="Utilde" value="&#x00168;"/>
+  <entity name="utri" value="&#x025B5;"/>
+  <entity name="utrif" value="&#x025B4;"/>
+  <entity name="uuarr" value="&#x021C8;"/>
+  <entity name="uuml" value="&#x000FC;"/>
+  <entity name="Uuml" value="&#x000DC;"/>
+  <entity name="uwangle" value="&#x029A7;"/>
+  <entity name="vangrt" value="&#x022BE;"/>
+  <entity name="varepsilon" value="&#x0025B;"/>
+  <entity name="varkappa" value="&#x003F0;"/>
+  <entity name="varnothing" value="&#x02205;"/>
+  <entity name="varphi" value="&#x003D5;"/>
+  <entity name="varpi" value="&#x003D6;"/>
+  <entity name="varpropto" value="&#x0221D;"/>
+  <entity name="varr" value="&#x02195;"/>
+  <entity name="vArr" value="&#x021D5;"/>
+  <entity name="varrho" value="&#x003F1;"/>
+  <entity name="varsigma" value="&#x003C2;"/>
+  <entity name="varsubsetneq" value="&#x0228A;&#x0FE00;"/>
+  <entity name="varsubsetneqq" value="&#x0228A;&#x0FE00;"/>
+  <entity name="varsupsetneq" value="&#x0228B;&#x0FE00;"/>
+  <entity name="varsupsetneqq" value="&#x0228B;&#x0FE00;"/>
+  <entity name="vartheta" value="&#x003D1;"/>
+  <entity name="vartriangleleft" value="&#x022B2;"/>
+  <entity name="vartriangleright" value="&#x022B3;"/>
+  <entity name="vBar" value="&#x02AE8;"/>
+  <entity name="Vbar" value="&#x02AEB;"/>
+  <entity name="vBarv" value="&#x02AE9;"/>
+  <entity name="vcy" value="&#x00432;"/>
+  <entity name="Vcy" value="&#x00412;"/>
+  <entity name="vdash" value="&#x022A2;"/>
+  <entity name="vDash" value="&#x022A8;"/>
+  <entity name="Vdash" value="&#x022A9;"/>
+  <entity name="VDash" value="&#x022AB;"/>
+  <entity name="Vdashl" value="&#x02AE6;"/>
+  <entity name="vee" value="&#x02228;"/>
+  <entity name="Vee" value="&#x022C1;"/>
+  <entity name="veebar" value="&#x022BB;"/>
+  <entity name="veeeq" value="&#x0225A;"/>
+  <entity name="vellip" value="&#x022EE;"/>
+  <entity name="verbar" value="&#x0007C;"/>
+  <entity name="Verbar" value="&#x02016;"/>
+  <entity name="vert" value="&#x0007C;"/>
+  <entity name="Vert" value="&#x02016;"/>
+  <entity name="VerticalBar" value="&#x02223;"/>
+  <entity name="VerticalLine" value="&#x0007C;"/>
+  <entity name="VerticalSeparator" value="&#x02758;"/>
+  <entity name="VerticalTilde" value="&#x02240;"/>
+  <entity name="VeryThinSpace" value="&#x0200A;"/>
+  <entity name="vfr" value="&#x1D533;"/>
+  <entity name="Vfr" value="&#x1D519;"/>
+  <entity name="vltri" value="&#x022B2;"/>
+  <entity name="vnsub" value="&#x02284;"/>
+  <entity name="vnsup" value="&#x02285;"/>
+  <entity name="vopf" value="&#x1D567;"/>
+  <entity name="Vopf" value="&#x1D54D;"/>
+  <entity name="vprop" value="&#x0221D;"/>
+  <entity name="vrtri" value="&#x022B3;"/>
+  <entity name="vscr" value="&#x1D4CB;"/>
+  <entity name="Vscr" value="&#x1D4B1;"/>
+  <entity name="vsubne" value="&#x0228A;&#x0FE00;"/>
+  <entity name="vsubnE" value="&#x0228A;&#x0FE00;"/>
+  <entity name="vsupne" value="&#x0228B;&#x0FE00;"/>
+  <entity name="vsupnE" value="&#x0228B;&#x0FE00;"/>
+  <entity name="Vvdash" value="&#x022AA;"/>
+  <entity name="vzigzag" value="&#x0299A;"/>
+  <entity name="wcirc" value="&#x00175;"/>
+  <entity name="Wcirc" value="&#x00174;"/>
+  <entity name="wedbar" value="&#x02A5F;"/>
+  <entity name="wedge" value="&#x02227;"/>
+  <entity name="Wedge" value="&#x022C0;"/>
+  <entity name="wedgeq" value="&#x02259;"/>
+  <entity name="weierp" value="&#x02118;"/>
+  <entity name="wfr" value="&#x1D534;"/>
+  <entity name="Wfr" value="&#x1D51A;"/>
+  <entity name="wopf" value="&#x1D568;"/>
+  <entity name="Wopf" value="&#x1D54E;"/>
+  <entity name="wp" value="&#x02118;"/>
+  <entity name="wr" value="&#x02240;"/>
+  <entity name="wreath" value="&#x02240;"/>
+  <entity name="wscr" value="&#x1D4CC;"/>
+  <entity name="Wscr" value="&#x1D4B2;"/>
+  <entity name="xcap" value="&#x022C2;"/>
+  <entity name="xcirc" value="&#x025EF;"/>
+  <entity name="xcup" value="&#x022C3;"/>
+  <entity name="xdtri" value="&#x025BD;"/>
+  <entity name="xfr" value="&#x1D535;"/>
+  <entity name="Xfr" value="&#x1D51B;"/>
+  <entity name="xharr" value="&#x0F578;"/>
+  <entity name="xhArr" value="&#x0F57B;"/>
+  <entity name="xi" value="&#x003BE;"/>
+  <entity name="Xi" value="&#x0039E;"/>
+  <entity name="xlarr" value="&#x0F576;"/>
+  <entity name="xlArr" value="&#x0F579;"/>
+  <entity name="xmap" value="&#x0F57D;"/>
+  <entity name="xnis" value="&#x022FB;"/>
+  <entity name="xodot" value="&#x02299;"/>
+  <entity name="xopf" value="&#x1D569;"/>
+  <entity name="Xopf" value="&#x1D54F;"/>
+  <entity name="xoplus" value="&#x02295;"/>
+  <entity name="xotime" value="&#x02297;"/>
+  <entity name="xrarr" value="&#x0F577;"/>
+  <entity name="xrArr" value="&#x0F57A;"/>
+  <entity name="xscr" value="&#x1D4CD;"/>
+  <entity name="Xscr" value="&#x1D4B3;"/>
+  <entity name="xsqcup" value="&#x02294;"/>
+  <entity name="xuplus" value="&#x0228E;"/>
+  <entity name="xutri" value="&#x025B3;"/>
+  <entity name="xvee" value="&#x022C1;"/>
+  <entity name="xwedge" value="&#x022C0;"/>
+  <entity name="yacute" value="&#x000FD;"/>
+  <entity name="Yacute" value="&#x000DD;"/>
+  <entity name="yacy" value="&#x0044F;"/>
+  <entity name="YAcy" value="&#x0042F;"/>
+  <entity name="ycirc" value="&#x00177;"/>
+  <entity name="Ycirc" value="&#x00176;"/>
+  <entity name="ycy" value="&#x0044B;"/>
+  <entity name="Ycy" value="&#x0042B;"/>
+  <entity name="yen" value="&#x000A5;"/>
+  <entity name="yfr" value="&#x1D536;"/>
+  <entity name="Yfr" value="&#x1D51C;"/>
+  <entity name="yicy" value="&#x00457;"/>
+  <entity name="YIcy" value="&#x00407;"/>
+  <entity name="yopf" value="&#x1D56A;"/>
+  <entity name="Yopf" value="&#x1D550;"/>
+  <entity name="yscr" value="&#x1D4CE;"/>
+  <entity name="Yscr" value="&#x1D4B4;"/>
+  <entity name="yucy" value="&#x0044E;"/>
+  <entity name="YUcy" value="&#x0042E;"/>
+  <entity name="yuml" value="&#x000FF;"/>
+  <entity name="Yuml" value="&#x00178;"/>
+  <entity name="zacute" value="&#x0017A;"/>
+  <entity name="Zacute" value="&#x00179;"/>
+  <entity name="zcaron" value="&#x0017E;"/>
+  <entity name="Zcaron" value="&#x0017D;"/>
+  <entity name="zcy" value="&#x00437;"/>
+  <entity name="Zcy" value="&#x00417;"/>
+  <entity name="zdot" value="&#x0017C;"/>
+  <entity name="Zdot" value="&#x0017B;"/>
+  <entity name="zeetrf" value="&#x02128;"/>
+  <entity name="ZeroWidthSpace" value="&#x0200B;"/>
+  <entity name="zeta" value="&#x003B6;"/>
+  <entity name="zfr" value="&#x1D537;"/>
+  <entity name="Zfr" value="&#x02128;"/>
+  <entity name="zhcy" value="&#x00436;"/>
+  <entity name="ZHcy" value="&#x00416;"/>
+  <entity name="zigrarr" value="&#x021DD;"/>
+  <entity name="zopf" value="&#x1D56B;"/>
+  <entity name="Zopf" value="&#x02124;"/>
+  <entity name="zscr" value="&#x1D4CF;"/>
+  <entity name="Zscr" value="&#x1D4B5;"/>
+</entities-table>
diff --git a/helm/ocaml/cic_disambiguation/macros/extra-entities.xml b/helm/ocaml/cic_disambiguation/macros/extra-entities.xml
new file mode 100644 (file)
index 0000000..991c2d8
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+
+<entities-table>
+  <entity name="def" value="&#x0225d;"/>  <!-- ≝ -->
+</entities-table>
diff --git a/helm/ocaml/cic_disambiguation/make_table.ml b/helm/ocaml/cic_disambiguation/make_table.ml
new file mode 100644 (file)
index 0000000..770fe2b
--- /dev/null
@@ -0,0 +1,88 @@
+
+open Printf
+open Pxp_types
+open Pxp_ev_parser
+
+(* Usage: make_table <hashtbls_dump_file> *)
+
+let debug = false
+let debug_print s = if debug then prerr_endline s
+
+let tables = [
+(*
+  `Entities, "/usr/share/gtkmathview/entities-table.xml";
+  `Dictionary, "/usr/share/editex/dictionary-tex.xml"
+*)
+  `Entities, "macros/entities-table.xml";
+  `Dictionary, "macros/dictionary-tex.xml";
+  `Entities, "macros/extra-entities.xml";
+]
+
+let macro2utf8 = Hashtbl.create 2000
+let utf82macro = Hashtbl.create 2000
+
+let add_macro macro utf8 =
+  debug_print (sprintf "Adding macro %s = '%s'" macro utf8);
+  Hashtbl.add macro2utf8 macro utf8;
+  Hashtbl.add utf82macro utf8 macro
+
+let rec find_first_tag pull_parser =
+  match pull_parser () with
+  | Some (E_start_tag _ as e) -> e
+  | None -> assert false
+  | _ -> find_first_tag pull_parser
+
+let iter_entities_file f pull_parser =
+  ignore (find_first_tag pull_parser); (* <entities-table> *)
+  let rec aux () =
+    match pull_parser () with
+    | Some (E_start_tag ("entity", attrs, _)) ->
+       (try
+         let name = List.assoc "name" attrs in
+         let value = List.assoc "value" attrs in
+         f name value
+       with Not_found -> ());
+       aux ()
+    | None -> ()
+    | _ -> aux ()
+  in
+  aux ()
+
+let iter_dictionary_file f pull_parser =
+  ignore (find_first_tag pull_parser); (* <dictionary> *)
+  let rec aux () =
+    match pull_parser () with
+    | Some (E_start_tag ("entry", attrs, _)) ->
+       (try
+         let name = List.assoc "name" attrs in
+         let value = List.assoc "val" attrs in
+         f name value
+       with Not_found -> ());
+       aux ()
+    | None -> ()
+    | _ -> aux ()
+  in
+  aux ()
+
+let fill_table () =
+  List.iter
+    (fun (typ, fname) ->
+      let entry = `Entry_document [ `Extend_dtd_fully; `Parse_xml_decl ] in
+      let config = { default_config with encoding = `Enc_utf8 } in
+      let entity_manager =
+       create_entity_manager ~is_document:true config (from_file fname)
+      in
+      let pull_parser = create_pull_parser config entry entity_manager in
+      match typ with
+      | `Entities -> iter_entities_file add_macro pull_parser
+      | `Dictionary -> iter_dictionary_file add_macro pull_parser)
+    tables
+
+let main () =
+  let oc = open_out Sys.argv.(1) in
+  fill_table ();
+  Marshal.to_channel oc (macro2utf8, utf82macro) [];
+  close_out oc
+
+let _ = main ()
+
diff --git a/helm/ocaml/cic_disambiguation/pa_unicode_macro.ml b/helm/ocaml/cic_disambiguation/pa_unicode_macro.ml
new file mode 100644 (file)
index 0000000..044f8ae
--- /dev/null
@@ -0,0 +1,36 @@
+
+let debug = false
+let debug_print = if debug then prerr_endline else ignore
+
+let loc = (0, 0)
+
+let expand_unicode_macro macro =
+  debug_print (Printf.sprintf "Expanding macro '%s' ..." macro);
+  let expansion = Macro.expand macro in
+  <:expr< $str:expansion$ >>
+
+let _ =
+  Quotation.add "unicode"
+    (Quotation.ExAst (expand_unicode_macro, (fun _ -> assert false)))
+
+open Pa_extend
+
+EXTEND
+  symbol: FIRST
+    [
+      [ x = UIDENT; q = QUOTATION ->
+        let (quotation, arg) =
+          let pos = String.index q ':' in
+          (String.sub q 0 pos,
+           String.sub q (pos + 1) (String.length q - pos - 1))
+        in
+        debug_print (Printf.sprintf "QUOTATION = %s; ARG = %s" quotation arg);
+        if quotation = "unicode" then
+          let text = TXtok (loc, x, expand_unicode_macro arg) in
+          {used = []; text = text; styp = STlid (loc, "string")}
+        else
+          assert false
+      ]
+    ];
+END
+
diff --git a/helm/ocaml/cic_disambiguation/parser.ml b/helm/ocaml/cic_disambiguation/parser.ml
new file mode 100644 (file)
index 0000000..0ee41ab
--- /dev/null
@@ -0,0 +1,102 @@
+
+open Ast
+
+let grammar = Grammar.gcreate Lexer.lex
+
+let term = Grammar.Entry.create grammar "term"
+(* let tactic = Grammar.Entry.create grammar "tactic" *)
+(* let tactical = Grammar.Entry.create grammar "tactical" *)
+
+let return_term loc term = LocatedTerm (loc, term)
+
+EXTEND
+  GLOBAL: term;
+  meta_subst: [
+    [ s = SYMBOL "_" -> None
+    | t = term -> Some t ]
+  ];
+  binder: [
+    [ SYMBOL <:unicode<lambda>> (* λ *) -> `Lambda
+    | SYMBOL <:unicode<pi>> (* π *) -> `Pi
+    | SYMBOL <:unicode<exists>> (* ∃ *) -> `Exists
+    | SYMBOL <:unicode<forall>> (* ∀ *) -> `Forall
+    ]
+  ];
+  substituted_name: [ (* a subs.name is an explicit substitution subject *)
+    [ s = [ IDENT | SYMBOL ];
+      subst = OPT [
+        SYMBOL "\subst";  (* to avoid catching frequent "a [1]" cases *)
+        LPAREN "[";
+        substs = LIST1 [
+          i = IDENT; SYMBOL <:unicode<Assign>> (* ≔ *); t = term -> (i, t)
+        ] SEP SYMBOL ";";
+        RPAREN "]" ->
+          substs
+      ] ->
+        (match subst with
+        | Some l -> Ident (s, l)
+        | None -> Ident (s, []))
+    ]
+  ];
+  name: [ (* as substituted_name with no explicit substitution *)
+    [ s = [ IDENT | SYMBOL ] -> s ]
+  ];
+  pattern: [
+    [ n = name -> [n]
+    | LPAREN "("; names = LIST1 name; RPAREN ")" -> names ]
+  ];
+  term:
+    [ "add" LEFTA   [ (* nothing here by default *) ]
+    | "mult" LEFTA  [ (* nothing here by default *) ]
+    | "inv" NONA    [ (* nothing here by default *) ]
+    | "simple" NONA
+      [
+        b = binder; vars = LIST1 IDENT SEP SYMBOL ",";
+        typ = OPT [ SYMBOL ":"; t = term -> t ];
+        SYMBOL "."; body = term ->
+          let binder =
+            List.fold_right (fun var body -> Binder (b, var, typ, body))
+              vars body
+          in
+          return_term loc binder
+      | n = substituted_name -> return_term loc n
+      | LPAREN "("; head = term; args = LIST1 term; RPAREN ")" ->
+          return_term loc (Appl (head :: args))
+      | i = INT -> return_term loc (Int (int_of_string i))
+      | m = META;
+        substs = [
+          LPAREN "["; substs = LIST0 meta_subst SEP SYMBOL ";" ; RPAREN "]" ->
+            substs
+        ] ->
+            return_term loc (Meta (m, substs))
+        (* actually "in" and "and" are _not_ keywords. Parsing works anyway
+         * since applications are required to be bound by parens *)
+      | "let"; name = IDENT; SYMBOL <:unicode<def>> (* ≝ *); t1 = term;
+        IDENT "in"; t2 = term ->
+          return_term loc (LetIn (name, t1, t2))
+      | "let"; "rec"; defs = LIST1 [
+          name = IDENT;
+          index = OPT [ LPAREN "("; index = INT; RPAREN ")" ->
+            int_of_string index
+          ];
+          typ = OPT [ SYMBOL ":"; typ = term -> typ ];
+          SYMBOL <:unicode<def>> (* ≝ *); t1 = term ->
+            (name, t1, typ, (match index with None -> 1 | Some i -> i))
+        ] SEP (IDENT "and");
+        IDENT "in"; body = term ->
+          return_term loc (LetRec (defs, body))
+      | typ = OPT [ LPAREN "["; typ = term; RPAREN "]" -> typ ];
+        "match"; t = term; "with";
+        LPAREN "[";
+        patterns = LIST0 [
+          p = pattern; SYMBOL <:unicode<Rightarrow>> (* ⇒*); t = term -> (p, t)
+        ] SEP SYMBOL "|";
+        RPAREN "]" ->
+          return_term loc (Case (t, typ, patterns))
+      | LPAREN "("; t = term; RPAREN ")" -> return_term loc t
+      ]
+    ];
+END
+
+let parse_term = Grammar.Entry.parse term
+
diff --git a/helm/ocaml/cic_disambiguation/pp.ml b/helm/ocaml/cic_disambiguation/pp.ml
new file mode 100644 (file)
index 0000000..6ee9cf3
--- /dev/null
@@ -0,0 +1,56 @@
+
+open Ast
+open Printf
+
+let pp_binder = function
+  | `Lambda -> "lambda"
+  | `Pi -> "pi"
+  | `Exists -> "exists"
+  | `Forall -> "forall"
+
+let rec pp_term = function
+  | LocatedTerm ((p_begin, p_end), term) ->
+      sprintf "[%d,%d]%s" p_begin p_end (pp_term term)
+
+  | Appl terms -> sprintf "(%s)" (String.concat " " (List.map pp_term terms))
+  | Binder (kind, var, typ, body) ->
+      sprintf "\\%s %s%s.%s" (pp_binder kind) var
+        (match typ with None -> "" | Some typ -> ": " ^ pp_term typ)
+        (pp_term body)
+  | Case (term, typ, patterns) ->
+      sprintf "%smatch %s with %s"
+        (match typ with None -> "" | Some t -> sprintf "<%s>" (pp_term t))
+        (pp_term term) (pp_patterns patterns)
+  | LetIn (name, t1, t2) ->
+      sprintf "let %s = %s in %s" name (pp_term t1) (pp_term t2)
+  | LetRec (definitions, term) ->
+      sprintf "let rec %s in %s"
+        (String.concat " and "
+          (List.map
+            (fun (name, body, typ, index) ->
+              sprintf "%s%s = %s" name
+                (match typ with None -> "" | Some typ -> ": " ^ pp_term typ)
+                (pp_term body))
+            definitions))
+        (pp_term term)
+  | Ident (name, []) -> name
+  | Ident (name, substs) -> sprintf "%s[%s]" name (pp_substs substs)
+  | Meta (name, substs) ->
+      sprintf "%s[%s]" name
+        (String.concat "; "
+          (List.map (function None -> "_" | Some term -> pp_term term) substs))
+  | Int num -> string_of_int num
+
+and pp_subst (name, term) = sprintf "%s := %s" name (pp_term term)
+and pp_substs substs = String.concat "; " (List.map pp_subst substs)
+
+and pp_pattern (names, term) =
+  sprintf "%s -> %s"
+    (match names with
+    | [n] -> n
+    | names -> "(" ^ String.concat " " names ^ ")")
+    (pp_term term)
+
+and pp_patterns patterns =
+  sprintf "[%s]" (String.concat " | " (List.map pp_pattern patterns))
+
diff --git a/helm/ocaml/cic_disambiguation/pp.mli b/helm/ocaml/cic_disambiguation/pp.mli
new file mode 100644 (file)
index 0000000..078517c
--- /dev/null
@@ -0,0 +1 @@
+val pp_term: Ast.term -> string
diff --git a/helm/ocaml/cic_disambiguation/test_lexer.ml b/helm/ocaml/cic_disambiguation/test_lexer.ml
new file mode 100644 (file)
index 0000000..8667953
--- /dev/null
@@ -0,0 +1,11 @@
+let ic = open_in Sys.argv.(1) in
+let token_stream = fst (Lexer.lex.Token.tok_func (Stream.of_channel ic)) in
+let rec dump () =
+  let (a,b) = Stream.next token_stream in
+  if a = "EOI" then raise Stream.Failure;
+  print_endline (Printf.sprintf "%s '%s'" a b);
+  dump ()
+in
+try
+  dump ()
+with Stream.Failure -> ()
diff --git a/helm/ocaml/cic_disambiguation/test_parser.ml b/helm/ocaml/cic_disambiguation/test_parser.ml
new file mode 100644 (file)
index 0000000..41634cb
--- /dev/null
@@ -0,0 +1,13 @@
+try
+  let ic = open_in Sys.argv.(1) in
+  let term = Parser.parse_term (Stream.of_channel ic) in
+  close_in ic;
+  print_endline (Pp.pp_term term)
+with Stdpp.Exc_located ((p_start, p_end), exn) ->
+  prerr_endline (Printf.sprintf "Exception at character %d-%d: %s"
+                  p_start p_end (Printexc.to_string exn))
+
+(* print_endline (Macro.expand "def") *)
+
+(* Printf.printf "'%s'\n" (Macro.expand Sys.argv.(1)) *)
+