зеркало из https://github.com/mozilla/gecko-dev.git
761 строка
49 KiB
Perl
761 строка
49 KiB
Perl
#!/bin/perl
|
||
|
||
#
|
||
# The contents of this file are subject to the Mozilla Public
|
||
# License Version 1.1 (the "License"); you may not use this file
|
||
# except in compliance with the License. You may obtain a copy of
|
||
# the License at http://www.mozilla.org/MPL/
|
||
#
|
||
# Software distributed under the License is distributed on an "AS
|
||
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||
# implied. See the License for the specific language governing
|
||
# rights and limitations under the License.
|
||
#
|
||
# The Original Code is Mozilla MathML Project.
|
||
#
|
||
# The Initial Developer of the Original Code is The University Of
|
||
# Queensland. Portions created by The University Of Queensland are
|
||
# Copyright (C) 1999 The University Of Queensland. All
|
||
# Rights Reserved.
|
||
#
|
||
# Contributor(s):
|
||
# Roger B. Sidje <rbs@maths.uq.edu.au>
|
||
#
|
||
|
||
# Purpose:
|
||
# This script processes unicode points and generates a file that
|
||
# contains the MathML DTD, i.e., the XML definitions of
|
||
# MathML entities.
|
||
# RBS - Aug 27, 1999.
|
||
|
||
$usage = <<USAGE;
|
||
|
||
Usage: gendtd.pl unicode_file [entity_file]
|
||
|
||
- unicode_file is the input file. It must either be: byalpha.txt
|
||
or bycodes.txt.
|
||
|
||
The files byalpha.txt and bycodes.txt were simply obtained by visiting
|
||
the links of the W3C MathML REC (see below) and using the Navigator's
|
||
command "Save as text":
|
||
byalpha.txt: http://www.w3.org/TR/REC-MathML/chap6/byalpha.html
|
||
bycodes.txt: http://www.w3.org/TR/REC-MathML/chap6/bycodes.html
|
||
|
||
It is recommended to use byalpha.txt because it includes aliases (i.e.,
|
||
all the entity names corresponding to the same unicode point)
|
||
|
||
- entity_file is the output file. It will contain the XML definitions
|
||
of MathML entities. If entity_file is not provided, the default
|
||
output file will be: mathml.dtd
|
||
USAGE
|
||
|
||
$badusage = 0;
|
||
$badusage = 1 if $#ARGV < 0;
|
||
$badusage = 1 if $ARGV[0] ne "byalpha.txt" && $ARGV[0] ne "bycodes.txt";
|
||
if ($badusage) {
|
||
print $usage;
|
||
exit(0);
|
||
}
|
||
|
||
$unicode_file = $ARGV[0];
|
||
$entity_file = $ARGV[1];
|
||
$entity_file = "mathml.dtd" if !$entity_file;
|
||
|
||
print "\nINPUT: $unicode_file";
|
||
print "\nOUTPUT: $entity_file\n";
|
||
|
||
# Output: the file $entity_file contains the definitions of XML
|
||
# entities for all of MathML or for the TeX symbols and/or MathML operators.
|
||
|
||
# Note: other features are commented in the code.
|
||
|
||
|
||
|
||
@IGNORE = ("amp", # these default XML entities will not be processed
|
||
"lt",
|
||
"gt");
|
||
|
||
&getTeX(); # Get the converted TeX entities as returned by TeX2MML.
|
||
# Accuracy depends on the implementation of TeX2MML!
|
||
|
||
&getMathMLOperators(); # Get the MathML Operators - exact *copy-paste* from
|
||
# http://www.w3.org/TR/REC-MathML/appendixC.html
|
||
|
||
&getUnicode($unicode_file); # $unicode_file = "byalpha.txt" or "bycodes.txt"
|
||
# byalpha.txt, bycodes.txt are simply the Save as text of
|
||
# http://www.w3.org/TR/REC-MathML/chap6/byalpha.html
|
||
# http://www.w3.org/TR/REC-MathML/chap6/bycodes.html
|
||
|
||
|
||
print "\nNumber of Symbols: TeX = " . ($#TEX+1) . " MathML Operators = " . ($#OPERATOR+1);
|
||
|
||
#Check if all MathML Operators have been assigned unicode points...
|
||
|
||
print "\n\nChecking MathML Operators...";
|
||
for ($i=0; $i<=$#OPERATOR; ++$i) {
|
||
if (!($UNICODE{$OPERATOR[$i]})) {
|
||
print "\n$OPERATOR[$i] does not have its unicode point";
|
||
# exit(0);
|
||
}
|
||
else {
|
||
# print "\n$OPERATOR[$i] $UNICODE{$OPERATOR[$i]}";
|
||
}
|
||
}
|
||
|
||
#Check if all TeX Symbols have been assigned unicode points...
|
||
|
||
print "\n\nChecking TeX Symbols...";
|
||
for ($i=0; $i<=$#TEX; ++$i) {
|
||
if (!($UNICODE{$TEX[$i]})) {
|
||
print "\n$TEX[$i] does not have its unicode point";
|
||
# exit(0);
|
||
}
|
||
else {
|
||
# print "\n$TEX[$i] $UNICODE{$TEX[$i]}";
|
||
}
|
||
}
|
||
|
||
|
||
################
|
||
# Now extract the unicode points of the entities of interest.
|
||
# Uncomment the appropriate case, and comment the others
|
||
|
||
#Case 1: Extrat the unicode points of *TeX symbols only*
|
||
#@ENTITY_SET = @TEX;
|
||
|
||
#Case 2: Extract the unicode points of *MathML Operators only*
|
||
#@ENTITY_SET = @OPERATOR;
|
||
|
||
#Case 3: Extract the unicode points of the union *TeX + MathML Operators*
|
||
#@ENTITY_SET = (@TEX,@OPERATOR);
|
||
|
||
#Case 4: Extract *all* MathML entities
|
||
#Case 4a: without aliases...
|
||
#@ENTITY_SET = @ENTITY_LAST_ALIAS{keys %ENTITY_LAST_ALIAS}; # no aliases here
|
||
#Case 4b: with aliases...
|
||
@ENTITY_SET = @ENTITY; #aliases are here if it was getUnicode("byalpha.txt").
|
||
|
||
|
||
#################
|
||
open (OUTPUT_FILE, ">$entity_file") || die("can't open $entity_file");
|
||
|
||
print "\n\nBuilding the entity list and Saving into:\n$entity_file ...\n";
|
||
|
||
# collect the aliases in an array of strings.
|
||
|
||
$count = $pua = 0;
|
||
$ignore = join(" ",@IGNORE);
|
||
|
||
for ($i=0; $i<=$#ENTITY_SET; ++$i) {
|
||
$entity = $ENTITY_SET[$i];
|
||
$unicode = $UNICODE{$entity};
|
||
|
||
#skip if entity should be ignored
|
||
next if $ignore =~ /$entity/;
|
||
|
||
#skip if no unicode or entity is already in the table
|
||
next if $unicode eq "" || $TABLE{$unicode} =~ /$entity/;
|
||
|
||
$TABLE{$unicode} .= " $entity";
|
||
|
||
$XML_DECLARATION{$unicode} .=
|
||
'<!ENTITY ' . $entity . ' "&#x' . $unicode . ';"> ';
|
||
++$count;
|
||
|
||
$XML_CONTENT .= '&' . $entity . ";\n";
|
||
|
||
if ($unicode ge "E000" && $unicode le "F8FF") {
|
||
# print "PUA\n-------------------------\n" if $pua == 0;
|
||
# print "$unicode $entity\n";
|
||
$TABLE_PUA{$unicode} .= " $entity";
|
||
++$pua;
|
||
}
|
||
}
|
||
|
||
foreach $unicode (sort keys %TABLE_PUA) {
|
||
$PUA .= "$unicode $TABLE_PUA{$unicode}\n";
|
||
}
|
||
|
||
foreach $unicode (sort keys %TABLE) {
|
||
# print OUTPUT_FILE "$unicode $TABLE{$unicode}\n";
|
||
$XML_DOCTYPE .= $XML_DECLARATION{$unicode} . "\n";
|
||
}
|
||
|
||
print OUTPUT_FILE <<HEADER_DATA;
|
||
<!--
|
||
* The contents of this file are subject to the Mozilla Public
|
||
* License Version 1.1 (the "License"); you may not use this file
|
||
* except in compliance with the License. You may obtain a copy of
|
||
* the License at http://www.mozilla.org/MPL/
|
||
*
|
||
* Software distributed under the License is distributed on an "AS
|
||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||
* implied. See the License for the specific language governing
|
||
* rights and limitations under the License.
|
||
*
|
||
* The Original Code is Mozilla MathML Project.
|
||
*
|
||
* The Initial Developer of the Original Code is The University of
|
||
* Queensland. Portions created by The University of Queensland are
|
||
* Copyright (C) 1999 The University of Queensland. All
|
||
* Rights Reserved.
|
||
*
|
||
* Contributor(s):
|
||
* Roger B. Sidje <rbs\@maths.uq.edu.au>
|
||
-->
|
||
|
||
<!-- MathML 1.01 entities - Auto-generated (Total in this list: $count) -->
|
||
|
||
HEADER_DATA
|
||
|
||
#print OUTPUT_FILE "<?xml version=\"1.0\"?>\n<!DOCTYPE math\n[\n";
|
||
print OUTPUT_FILE "$XML_DOCTYPE";
|
||
#print OUTPUT_FILE "]>\n";
|
||
|
||
|
||
#print OUTPUT_FILE "<para>$XML_CONTENT</para>\n";
|
||
#print <<XML;
|
||
#<!--
|
||
#$PUA
|
||
#-->
|
||
#XML
|
||
|
||
|
||
close(OUTPUT_FILE);
|
||
|
||
print "Done $count unicode points. PUA: $pua\n";
|
||
|
||
exit(0);
|
||
|
||
################################
|
||
|
||
|
||
|
||
|
||
|
||
|
||
# All outputs are global variables ...
|
||
|
||
#
|
||
# extract all the symbols of the MathML REC byalpha.txt or bycodes.txt (the
|
||
# name of the file is passed as argument)
|
||
# INPUT: "byalpha.txt" or "bycodes.txt"
|
||
# OUTPUT: - hash array %UNICODE holding $UNICODE{$entity} = $unicode
|
||
# - array @ENTITY such $ENTITY[$i] is an entity name
|
||
# - hash array %ENTITY_LAST_ALIAS such that
|
||
# $ENTITY_LAST_ALIAS{$unicode} = last entity with that unicode
|
||
sub getUnicode {
|
||
local($infile) = @_[0];
|
||
|
||
$byalpha = $infile =~ /byalpha/;
|
||
|
||
print "\nScanning $infile ...";
|
||
open (INFILE, $infile) || die("Can't open $infile");
|
||
|
||
$count = 0;
|
||
while (<INFILE>) {
|
||
#pattern byalpha: entity isolat2 377 unicode =capital Z, acute accent
|
||
if ($byalpha) { # byalpha -- ALIASES ARE INCLUDED
|
||
if ( /^([a-z\.]\S+)\s+\S+\s+\d+\s+(\S+)\s+.*/i ) {
|
||
($entity,$unicode) = ($1,$2);
|
||
if ($UNICODE{$entity}) { #conflicting mapping ?
|
||
next if $UNICODE{$entity} eq $unicode;
|
||
print "\nWARNING! Found: $entity -> $unicode <-- $map --> $UNICODE{$entity}";
|
||
}
|
||
|
||
$UNICODE{$entity} = $unicode;
|
||
$ENTITY_LAST_ALIAS{$unicode} = $entity;
|
||
++$count;
|
||
}
|
||
}
|
||
else { # bycodes -- ALIASES ARE NOT INCLUDED
|
||
#pattern bycode: unicode 9 entity mmlextra tabulator stop; horizontal tabulation
|
||
if ( /^(\S+)\s+\d+\s+([a-z\.]+)\s+\S+\s+.*/i ) {
|
||
($unicode,$entity) = ($1,$2);
|
||
# print "\n$entity $unicode";
|
||
$UNICODE{$entity} = $unicode;
|
||
$ENTITY_LAST_ALIAS{$unicode} = $entity;
|
||
++$count;
|
||
}
|
||
}
|
||
}
|
||
@ENTITY = (keys %UNICODE);
|
||
print "\nFound: $count unicode points, " . ($#ENTITY+1) . " entities\n";
|
||
}
|
||
|
||
#Get entity names of TeX Symbols
|
||
#Symbols obtained by using TeX2MathML (http://hutchinson.belmont.ma.us/tth/mml/tthmmlform.html)
|
||
#The input snippets were taken from David Carlisle's symbols.tex (ver 3.2)
|
||
# INPUT:
|
||
# OUTPUT: an array @TEX such that $TEX[$i] is the name of an entity
|
||
sub getTeX {
|
||
@SYMBOLS = <<TEX2MathML;
|
||
αθoτβϑπυγιϖφ
|
||
δκρϕελϱχϵμσ
|
||
ψζνςωηiΓΛΣΨ
|
||
ΔiϒΩΘΠΦ 
|
||
±∩◊⊕∓∪\bigtriangleup\ominus<75>\uplus
|
||
\bigtriangledown⊗<3B>\sqcap\triangleleft<66>*\sqcup\triangleright
|
||
\odot☆∨\lhd\bigcircˆ∧\rhd\dagger•∖\unlhd\ddagger<65>r\unrhd\amalg
|
||
≤≥≡\models\prec\succ~⊥\preceq\succeq≈\mid <<
|
||
>>\asymp∥⊂⊃≈\bowtie⊆⊇≅\Join\sqsubset\sqsupset≠
|
||
\smile\sqsubseteq\sqsupseteq\doteq\frown∈∋∝=\vdash\dashv
|
||
←←↑⇐⇐⇑→→↓⇒⇒⇑⇆⇆
|
||
↓&lrArr;&lrArr;↓→\longmapsto\nearrow\hookleftarrow\hookrightarrow\searrow
|
||
\leftharpoonup\rightharpoonup\swarrow\leftharpoondown\rightharpoondown\nwarrow\rightleftharpoons\leadsto
|
||
……:ℵ'∀∞∅∃ı▿¬\Diamondȷ
|
||
√\flat\triangleℓ⊤\natural♣℘⊥\sharp♦&rfraktur;
|
||
\♥&ifraktur;∠∂♠\mho
|
||
∑⋂\bigodotΠ⋃⨂\coprod\bigsqcup⨁∫⋁\biguplus∮⋀
|
||
⪻
|
||
()↑⇑[]↓⇑{}↓↓⌊⌋⌈⌉⟨⟩/\‖
|
||
TEX2MathML
|
||
|
||
# extract the relevant part
|
||
$count = 0;
|
||
$string = join("",@SYMBOLS);
|
||
$string =~ s#\n##g;
|
||
$string =~ s#[^a-zA-Z\&;]##g;
|
||
$string =~ s#;#;\n#g;
|
||
while ($string =~ m#\&([a-zA-z]+);#g) {
|
||
$TEX[$count] = $1;
|
||
++$count;
|
||
}
|
||
}
|
||
|
||
#Get entity names of MathML Operators
|
||
# INPUT:
|
||
# OUTPUT: an array @OPERATOR such that $OPERATOR[$i] is the name of an operator entity
|
||
sub getMathMLOperators {
|
||
@SYMBOLS = <<MathMLOperatorDictionary;
|
||
"(" form="prefix" fence="true" stretchy="true" lspace="0em" rspace="0em"
|
||
")" form="postfix" fence="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"[" form="prefix" fence="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"]" form="postfix" fence="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"{" form="prefix" fence="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"}" form="postfix" fence="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"”" form="postfix" fence="true" lspace="0em" rspace="0em"
|
||
"’" form="postfix" fence="true" lspace="0em" rspace="0em"
|
||
"⟨" form="prefix" fence="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"&LeftBracketingBar;" form="prefix" fence="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"⌈" form="prefix" fence="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"⟦" form="prefix" fence="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"&LeftDoubleBracketingBar;" form="prefix" fence="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"⌊" form="prefix" fence="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"“" form="prefix" fence="true" lspace="0em" rspace="0em"
|
||
"‘" form="prefix" fence="true" lspace="0em" rspace="0em"
|
||
"⟩" form="postfix" fence="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"&RightBracketingBar;" form="postfix" fence="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"⌉" form="postfix" fence="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"⟧" form="postfix" fence="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"&RightDoubleBracketingBar;" form="postfix" fence="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"⌋" form="postfix" fence="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"&LeftSkeleton;" form="prefix" fence="true" lspace="0em" rspace="0em"
|
||
"&RightSkeleton;" form="postfix" fence="true" lspace="0em" rspace="0em"
|
||
|
||
"⁣" form="infix" separator="true" lspace="0em" rspace="0em"
|
||
|
||
"," form="infix" separator="true" lspace="0em" rspace=".33333em"
|
||
|
||
"─" form="infix" stretchy="true" minsize="0" lspace="0em" rspace="0em"
|
||
"|" form="infix" stretchy="true" minsize="0" lspace="0em" rspace="0em"
|
||
|
||
";" form="infix" separator="true" lspace="0em" rspace=".27777em"
|
||
";" form="postfix" separator="true" lspace="0em" rspace="0em"
|
||
|
||
":=" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≔" form="infix" lspace=".27777em" rspace=".27777em"
|
||
|
||
"∵" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"∴" form="infix" lspace=".27777em" rspace=".27777em"
|
||
|
||
"❘" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
|
||
"//" form="infix" lspace=".27777em" rspace=".27777em"
|
||
|
||
"∷" form="infix" lspace=".27777em" rspace=".27777em"
|
||
|
||
"&" form="prefix" lspace="0em" rspace=".27777em"
|
||
"&" form="postfix" lspace=".27777em" rspace="0em"
|
||
|
||
"*=" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"-=" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"+=" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"/=" form="infix" lspace=".27777em" rspace=".27777em"
|
||
|
||
"->" form="infix" lspace=".27777em" rspace=".27777em"
|
||
|
||
":" form="infix" lspace=".27777em" rspace=".27777em"
|
||
|
||
".." form="postfix" lspace=".22222em" rspace="0em"
|
||
"..." form="postfix" lspace=".22222em" rspace="0em"
|
||
|
||
"∋" form="infix" lspace=".27777em" rspace=".27777em"
|
||
|
||
"⫤" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⊨" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⊤" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⊣" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⊢" form="infix" lspace=".27777em" rspace=".27777em"
|
||
|
||
"⇒" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"⥰" form="infix" lspace=".27777em" rspace=".27777em"
|
||
|
||
"|" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"||" form="infix" lspace=".22222em" rspace=".22222em"
|
||
"⩔" form="infix" stretchy="true" lspace=".22222em" rspace=".22222em"
|
||
|
||
"&&" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⩓" form="infix" stretchy="true" lspace=".22222em" rspace=".22222em"
|
||
|
||
"&" form="infix" lspace=".27777em" rspace=".27777em"
|
||
|
||
"!" form="prefix" lspace="0em" rspace=".27777em"
|
||
"⫬" form="prefix" lspace="0em" rspace=".27777em"
|
||
|
||
"∃" form="prefix" lspace="0em" rspace=".27777em"
|
||
"∀" form="prefix" lspace="0em" rspace=".27777em"
|
||
"∄" form="prefix" lspace="0em" rspace=".27777em"
|
||
|
||
"∈" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"∉" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"∌" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⊏̸" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⋢" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⊐̸" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⋣" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⊂⃒" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⊈" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⊃⃒" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⊉" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"∋" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⊏" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⊑" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⊐" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⊒" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⋐" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⊆" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⊃" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⊇" form="infix" lspace=".27777em" rspace=".27777em"
|
||
|
||
"⇐" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"⇔" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"⇒" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"⥐" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"⥞" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"↽" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"⥖" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"⥟" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"⇁" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"⥗" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"←" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"⇤" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"⇆" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"↔" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"⥎" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"↤" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"⥚" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"↼" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"⥒" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"↙" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"↘" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"→" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"⇥" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"⇄" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"↦" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"⥛" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"⇀" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"⥓" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"←" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"→" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"↖" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"↗" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
|
||
"=" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"<" form="infix" lspace=".27777em" rspace=".27777em"
|
||
">" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"!=" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"==" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"<=" form="infix" lspace=".27777em" rspace=".27777em"
|
||
">=" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≡" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≍" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≐" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"∥" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⩵" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≂" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⇌" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"≥" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⋛" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≧" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⪢" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≷" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⩾" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≳" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≎" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≏" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⊲" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⧏" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⊴" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≤" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⋚" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≦" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≶" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⪡" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⩽" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≲" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≫" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≪" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≢" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≭" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"∦" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≠" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≂̸" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≯" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≱" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≧̸" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≫̸" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≹" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⩾̸" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≵" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≎̸" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≏̸" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⋪" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⧏̸" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⋬" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≮" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≰" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"&NotLessFullEqual;" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≸" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≪̸" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⩽̸" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≴" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⪢̸" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⪡̸" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⊀" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⪯̸" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⋠" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"&NotPrecedesTilde;" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⋫" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⧐̸" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⋭" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⊁" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⪰̸" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⋡" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≿̸" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≁" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≄" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≇" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≉" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"∤" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≺" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⪯" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≼" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≾" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"∷" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"∝" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⇋" form="infix" stretchy="true" lspace=".27777em" rspace=".27777em"
|
||
"⊳" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⧐" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⊵" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≻" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⪰" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≽" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≿" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"∼" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≃" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≅" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"≈" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"⊥" form="infix" lspace=".27777em" rspace=".27777em"
|
||
"∣" form="infix" lspace=".27777em" rspace=".27777em"
|
||
|
||
"⊔" form="infix" stretchy="true" lspace=".22222em" rspace=".22222em"
|
||
"⋃" form="infix" stretchy="true" lspace=".22222em" rspace=".22222em"
|
||
"⊎" form="infix" stretchy="true" lspace=".22222em" rspace=".22222em"
|
||
|
||
"-" form="infix" lspace=".22222em" rspace=".22222em"
|
||
"+" form="infix" lspace=".22222em" rspace=".22222em"
|
||
"⋂" form="infix" stretchy="true" lspace=".22222em" rspace=".22222em"
|
||
"∓" form="infix" lspace=".22222em" rspace=".22222em"
|
||
"±" form="infix" lspace=".22222em" rspace=".22222em"
|
||
"⊓" form="infix" stretchy="true" lspace=".22222em" rspace=".22222em"
|
||
|
||
"⋁" form="prefix" largeop="true" movablelimits="true" stretchy="true" lspace="0em" rspace=".16666em"
|
||
"⊖" form="prefix" largeop="true" movablelimits="true" lspace="0em" rspace=".16666em"
|
||
"⊕" form="prefix" largeop="true" movablelimits="true" lspace="0em" rspace=".16666em"
|
||
"∑" form="prefix" largeop="true" movablelimits="true" stretchy="true" lspace="0em" rspace=".16666em"
|
||
"⋃" form="prefix" largeop="true" movablelimits="true" stretchy="true" lspace="0em" rspace=".16666em"
|
||
"⊎" form="prefix" largeop="true" movablelimits="true" stretchy="true" lspace="0em" rspace=".16666em"
|
||
"lim" form="prefix" movablelimits="true" lspace="0em" rspace=".16666em"
|
||
"max" form="prefix" movablelimits="true" lspace="0em" rspace=".16666em"
|
||
"min" form="prefix" movablelimits="true" lspace="0em" rspace=".16666em"
|
||
|
||
"⊖" form="infix" lspace=".16666em" rspace=".16666em"
|
||
"⊕" form="infix" lspace=".16666em" rspace=".16666em"
|
||
|
||
"∲" form="prefix" largeop="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"∮" form="prefix" largeop="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"∳" form="prefix" largeop="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"∯" form="prefix" largeop="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"∫" form="prefix" largeop="true" stretchy="true" lspace="0em" rspace="0em"
|
||
|
||
"⋓" form="infix" lspace=".16666em" rspace=".16666em"
|
||
|
||
"⋒" form="infix" lspace=".16666em" rspace=".16666em"
|
||
|
||
"≀" form="infix" lspace=".16666em" rspace=".16666em"
|
||
|
||
"⋀" form="prefix" largeop="true" movablelimits="true" stretchy="true" lspace="0em" rspace=".16666em"
|
||
"⊗" form="prefix" largeop="true" movablelimits="true" lspace="0em" rspace=".16666em"
|
||
"∐" form="prefix" largeop="true" movablelimits="true" stretchy="true" lspace="0em" rspace=".16666em"
|
||
"∏" form="prefix" largeop="true" movablelimits="true" stretchy="true" lspace="0em" rspace=".16666em"
|
||
"⋂" form="prefix" largeop="true" movablelimits="true" stretchy="true" lspace="0em" rspace=".16666em"
|
||
|
||
"∐" form="infix" lspace=".16666em" rspace=".16666em"
|
||
|
||
"⋆" form="infix" lspace=".16666em" rspace=".16666em"
|
||
|
||
"⊙" form="prefix" largeop="true" movablelimits="true" lspace="0em" rspace=".16666em"
|
||
|
||
"*" form="infix" lspace=".16666em" rspace=".16666em"
|
||
"⁢" form="infix" lspace="0em" rspace="0em"
|
||
|
||
"·" form="infix" lspace=".16666em" rspace=".16666em"
|
||
|
||
"⊗" form="infix" lspace=".16666em" rspace=".16666em"
|
||
|
||
"⋁" form="infix" lspace=".16666em" rspace=".16666em"
|
||
|
||
"⋀" form="infix" lspace=".16666em" rspace=".16666em"
|
||
|
||
"⋄" form="infix" lspace=".16666em" rspace=".16666em"
|
||
|
||
"∖" form="infix" stretchy="true" lspace=".16666em" rspace=".16666em"
|
||
|
||
"/" form="infix" stretchy="true" lspace=".16666em" rspace=".16666em"
|
||
|
||
"-" form="prefix" lspace="0em" rspace=".05555em"
|
||
"+" form="prefix" lspace="0em" rspace=".05555em"
|
||
"∓" form="prefix" lspace="0em" rspace=".05555em"
|
||
"±" form="prefix" lspace="0em" rspace=".05555em"
|
||
|
||
"." form="infix" lspace="0em" rspace="0em"
|
||
|
||
"⨯" form="infix" lspace=".11111em" rspace=".11111em"
|
||
|
||
"**" form="infix" lspace=".11111em" rspace=".11111em"
|
||
|
||
"⊙" form="infix" lspace=".11111em" rspace=".11111em"
|
||
|
||
"∘" form="infix" lspace=".11111em" rspace=".11111em"
|
||
|
||
"□" form="prefix" lspace="0em" rspace=".11111em"
|
||
|
||
"∇" form="prefix" lspace="0em" rspace=".11111em"
|
||
"∂" form="prefix" lspace="0em" rspace=".11111em"
|
||
|
||
"ⅅ" form="prefix" lspace="0em" rspace=".11111em"
|
||
"ⅆ" form="prefix" lspace="0em" rspace=".11111em"
|
||
|
||
"√" form="prefix" stretchy="true" lspace="0em" rspace=".11111em"
|
||
|
||
"⇓" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"⟸" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"⟺" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"⟹" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"⇑" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"⇕" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"↓" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"⤓" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"⇵" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"↧" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"⥡" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"⇃" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"⥙" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"⥑" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"⥠" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"↿" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"⥘" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"⟵" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"⟷" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"⟶" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"⥯" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"⥝" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"⇂" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"⥕" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"⥏" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"⥜" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"↾" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"⥔" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"↓" form="infix" lspace=".11111em" rspace=".11111em"
|
||
"↑" form="infix" lspace=".11111em" rspace=".11111em"
|
||
"↑" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"⤒" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"⇅" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"↕" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"⥮" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
"↥" form="infix" stretchy="true" lspace=".11111em" rspace=".11111em"
|
||
|
||
"^" form="infix" lspace=".11111em" rspace=".11111em"
|
||
|
||
"<>" form="infix" lspace=".11111em" rspace=".11111em"
|
||
|
||
"'" form="postfix" lspace=".11111em" rspace="0em"
|
||
|
||
"!" form="postfix" lspace=".11111em" rspace="0em"
|
||
"!!" form="postfix" lspace=".11111em" rspace="0em"
|
||
|
||
"~" form="infix" lspace=".11111em" rspace=".11111em"
|
||
|
||
"@" form="infix" lspace=".11111em" rspace=".11111em"
|
||
|
||
"--" form="postfix" lspace=".11111em" rspace="0em"
|
||
"--" form="prefix" lspace="0em" rspace=".11111em"
|
||
"++" form="postfix" lspace=".11111em" rspace="0em"
|
||
"++" form="prefix" lspace="0em" rspace=".11111em"
|
||
|
||
"⁡" form="infix" lspace="0em" rspace="0em"
|
||
|
||
"?" form="infix" lspace=".11111em" rspace=".11111em"
|
||
|
||
"_" form="infix" lspace=".11111em" rspace=".11111em"
|
||
|
||
"˘" form="postfix" accent="true" lspace="0em" rspace="0em"
|
||
"¸" form="postfix" accent="true" lspace="0em" rspace="0em"
|
||
"`" form="postfix" accent="true" lspace="0em" rspace="0em"
|
||
"˙" form="postfix" accent="true" lspace="0em" rspace="0em"
|
||
"˝" form="postfix" accent="true" lspace="0em" rspace="0em"
|
||
"&DiacriticalLeftArrow;" form="postfix" accent="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"&DiacriticalLeftRightArrow;" form="postfix" accent="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"&DiacriticalLeftRightVector;" form="postfix" accent="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"&DiacriticalLeftVector;" form="postfix" accent="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"´" form="postfix" accent="true" lspace="0em" rspace="0em"
|
||
"&DiacriticalRightArrow;" form="postfix" accent="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"&DiacriticalRightVector;" form="postfix" accent="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"˜" form="postfix" accent="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"¨" form="postfix" accent="true" lspace="0em" rspace="0em"
|
||
"̑" form="postfix" accent="true" lspace="0em" rspace="0em"
|
||
"ˇ" form="postfix" accent="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"^" form="postfix" accent="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"‾" form="postfix" accent="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"⏞" form="postfix" accent="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"⎴" form="postfix" accent="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"⏜" form="postfix" accent="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"⃛" form="postfix" accent="true" lspace="0em" rspace="0em"
|
||
"_" form="postfix" accent="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"⏟" form="postfix" accent="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"⎵" form="postfix" accent="true" stretchy="true" lspace="0em" rspace="0em"
|
||
"⏝" form="postfix" accent="true" stretchy="true" lspace="0em" rspace="0em"
|
||
MathMLOperatorDictionary
|
||
|
||
# extract the relevant part
|
||
$count = 0;
|
||
$string = join("",@SYMBOLS);
|
||
$string =~ s#\n##g;
|
||
$string =~ s#[^a-zA-Z\&;]##g;
|
||
$string =~ s#;#;\n#g;
|
||
while ($string =~ m#\&([a-zA-z]+);#g) {
|
||
$OPERATOR[$count] = $1;
|
||
++$count;
|
||
}
|
||
} |