#!/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 # # 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 = <$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} .= ' '; ++$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 #print OUTPUT_FILE "\n\n"; #print OUTPUT_FILE "$XML_CONTENT\n"; #print < #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 () { #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 = <>\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 = <" 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; } }