зеркало из https://github.com/mozilla/gecko-dev.git
761 строка
44 KiB
Perl
761 строка
44 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 produces data for the operator dictionary
|
|
# RBS - Aug 28, 1999 - updated: 22 March, 2000.
|
|
|
|
# Output: the file $operator_file contains the dictionary in suitable
|
|
# format for inclusion with C++ macros.
|
|
|
|
#$operator_file = '..\content\src\nsMathMLOperatorList.h';
|
|
$operator_file = 'operator.list';
|
|
$unicode_file = "byalpha.txt";
|
|
|
|
&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
|
|
|
|
&getMathMLOperators(); # Get the MathML Operators - exact *copy-paste* from
|
|
# http://www.w3.org/TR/REC-MathML/appendixC.html
|
|
|
|
|
|
print "\n***** Saving into the file ***** $operator_file *****\n";
|
|
|
|
open(OUTPUT_FILE, ">$operator_file") || die("can't open $operator_file");
|
|
|
|
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 Operator Dictionary - Auto-generated by operator.pl. Do not edit! */
|
|
|
|
/* FORMAT
|
|
MATHML_OPERATOR(_rank,
|
|
_operator,= string value of the operator
|
|
_flags, = bitwise: movablelimits|separator|largeop|accent|fence|stretchy|form
|
|
_lspace, = leftspace in em
|
|
_rspace) = rightspace in em
|
|
*/
|
|
|
|
HEADER_DATA
|
|
|
|
|
|
# $MATHML_OPERATOR_LIST is global variable that contains all the
|
|
# operators in the dictionary with their attributes
|
|
|
|
print OUTPUT_FILE <<CONTENT;
|
|
#if defined(WANT_MATHML_OPERATOR_COUNT)
|
|
#define NS_MATHML_OPERATOR_COUNT $rank
|
|
#else
|
|
#define _ , // dirty trick to make the macro handle a variable number of arguments
|
|
|
|
$MATHML_OPERATOR_LIST
|
|
#undef _
|
|
#endif
|
|
|
|
CONTENT
|
|
|
|
close(OUTPUT_FILE);
|
|
|
|
print "Done $rank operators.\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 such that $UNICODE{$entity} = $unicode
|
|
# - array @ENTITY such that $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 <> $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";
|
|
}
|
|
|
|
|
|
#Make the MathML Operator dictionary
|
|
# INPUT:
|
|
# OUTPUT:
|
|
# $MATHML_OPERATOR_LIST - all operators in the dictionary
|
|
|
|
sub getMathMLOperators {
|
|
|
|
#Operator attributes:
|
|
# values <-- default -->
|
|
# form prefix |infix | postfix determined by position in mrow
|
|
# fence true | false set by dictionary
|
|
# accent true | false set by dictionary
|
|
# lspace number h-unit set by dictionary
|
|
# rspace number h-unit set by dictionary
|
|
# largeop true | false set by dictionary
|
|
# stretchy true | false set by dictionary
|
|
# separator true | false set by dictionary
|
|
# movablelimits true | false set by dictionary
|
|
# symmetric true | false true
|
|
# minzize number [h-unit | v-unit] 0
|
|
# maxsize number [h-unit | v-unit] | infinity infinity
|
|
|
|
$DATA = <<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
|
|
|
|
for (0..255) {
|
|
# $escapes{chr($_)} = sprintf("%%%02X", $_);
|
|
# $escapes{pack("c",$_)} = sprintf("%%%02X", $_);
|
|
$escapes{pack("c",$_)} = sprintf("%04X", $_);
|
|
}
|
|
|
|
|
|
#The bit flags that will be used
|
|
|
|
$NS_MATHML_OPERATOR_FORM_INFIX = '1';
|
|
$NS_MATHML_OPERATOR_FORM_PREFIX = '2';
|
|
$NS_MATHML_OPERATOR_FORM_POSTFIX = '3';
|
|
$NS_MATHML_OPERATOR_STRETCHY = '(1<<2)';
|
|
$NS_MATHML_OPERATOR_FENCE = '(1<<3)';
|
|
$NS_MATHML_OPERATOR_ACCENT = '(1<<4)';
|
|
$NS_MATHML_OPERATOR_LARGEOP = '(1<<5)';
|
|
$NS_MATHML_OPERATOR_SEPARATOR = '(1<<6)';
|
|
$NS_MATHML_OPERATOR_MOVABLELIMITS = '(1<<7)';
|
|
|
|
@ATTRIBUTE = ("form",
|
|
"stretchy",
|
|
"fence",
|
|
"accent",
|
|
"largeop",
|
|
"separator",
|
|
"movablelimits",
|
|
"lspace",
|
|
"rpace");
|
|
|
|
$NUMFLAGS = 7;
|
|
|
|
%FLAGS = ("", '0',
|
|
"0", '0',
|
|
"form=infix", $NS_MATHML_OPERATOR_FORM_INFIX,
|
|
"form=prefix", $NS_MATHML_OPERATOR_FORM_PREFIX,
|
|
"form=postfix", $NS_MATHML_OPERATOR_FORM_POSTFIX,
|
|
"stretchy=true", $NS_MATHML_OPERATOR_STRETCHY,
|
|
"fence=true", $NS_MATHML_OPERATOR_FENCE,
|
|
"accent=true", $NS_MATHML_OPERATOR_ACCENT,
|
|
"largeop=true", $NS_MATHML_OPERATOR_LARGEOP,
|
|
"separator=true", $NS_MATHML_OPERATOR_SEPARATOR,
|
|
"movablelimits=true", $NS_MATHML_OPERATOR_MOVEABLELIMITS);
|
|
|
|
# build the macro lists
|
|
|
|
print "\n\nBuilding the operator list...\n";
|
|
|
|
$MATHML_OPERATOR_LIST = "";
|
|
|
|
$rank = 0;
|
|
@OPERATOR = split("\n",$DATA);
|
|
|
|
$group = 0;
|
|
for ($count=0; $count<=$#OPERATOR; ++$count) {
|
|
$data = $OPERATOR[$count];
|
|
$data =~ s#^\s+##;
|
|
if ($data eq "") {
|
|
++$group;
|
|
next;
|
|
}
|
|
|
|
|
|
delete @KEY{keys %KEY};
|
|
delete @VALUES{keys %VALUES};
|
|
|
|
# Initialize with default values set by the REC :
|
|
$VALUE{'fence'} = 'false';
|
|
$VALUE{'separator'} = 'false';
|
|
$VALUE{'lspace'} = '.27777em';
|
|
$VALUE{'rspace'} = '.27777em';
|
|
$VALUE{'stretchy'} = 'false';
|
|
# $VALUE{'symmetric'} = 'true';
|
|
# $VALUE{'maxsize'} = 'infinity';
|
|
# $VALUE{'minsize'} = '1';
|
|
$VALUE{'largeop'} = 'false';
|
|
$VALUE{'movablelimits'} = 'false';
|
|
$VALUE{'accent'} = 'false';
|
|
|
|
($operator,$attributes) = ($1,$2) if $data =~ /(\S+)\s*(.*)\s*$/;
|
|
while ($attributes =~ /(\S+)=\"([^"]*)\"/g) {
|
|
($name,$value) = ($1,$2);
|
|
$VALUE{$name} = $value;
|
|
$KEY{$name} = $name . '=' . $value;
|
|
}
|
|
|
|
$lspace = $VALUE{"lspace"}; $lspace =~ s/em//;
|
|
$rspace = $VALUE{"rspace"}; $rspace =~ s/em//;
|
|
$lspace .= ($lspace =~ m#\.#)? "f" : ".0f";
|
|
$rspace .= ($rspace =~ m#\.#)? "f" : ".0f";
|
|
|
|
# put all the flags together in an OR-list
|
|
$enclose = 0;
|
|
$flags = $FLAGS{$KEY{"form"}};
|
|
for ($i=1; $i<$NUMFLAGS; ++$i) {
|
|
$key = $KEY{$ATTRIBUTE[$i]};
|
|
next if !$FLAGS{$key};
|
|
$flags .= '|' . $FLAGS{$key};
|
|
++$enclose;
|
|
}
|
|
$flags = '(' . $flags . ')' if $enclose;
|
|
|
|
$operator =~ s#[\"]##g;
|
|
$string = $operator;
|
|
$unichar = "";
|
|
|
|
#go over each entity and find its unicode point - collate the results in unichar
|
|
$unicodemissed = 0;
|
|
$i = 0;
|
|
$unistring = '';
|
|
while ($string ne "" && $i < 5) { # there could be &ent1;&ent2; and Perl is greedy...
|
|
$entity = ($string =~ m#^\&(.*?)\;#)? $1:""; # so here ue use the non-greedy modifier '?'
|
|
if ($entity ne "") {
|
|
$string =~ s#^\&${entity}\;##;
|
|
$unicode = $UNICODE{$entity};
|
|
$unicodemissed = 1 if $unicode eq "";
|
|
$unichar .= '\x' . $unicode;
|
|
$unistring = ($unistring)? "$unistring _ 0x$unicode" : "0x$unicode";
|
|
|
|
$PUA{$unicode} = $entity if ($unicode ge "E000" && $unicode le "F8FF");
|
|
}
|
|
else {
|
|
$entity = $1 if $string =~ m#^(.)#;
|
|
$string =~ s#\S##;
|
|
$entity =~ s/([\x00-\xFF])/$escapes{$1}/g;
|
|
$unichar .= '\x' . $entity;
|
|
$unistring = ($unistring)? "$unistring _ 0x$entity" : "0x$entity";
|
|
}
|
|
|
|
++$i;
|
|
}
|
|
|
|
#some operators do not have unicode points, skip them !
|
|
if ($unicodemissed) {
|
|
print "Missing unicode for $operator... removing it from the dictionary...\n";
|
|
next;
|
|
}
|
|
|
|
#global outputs:
|
|
|
|
$r = sprintf("%3d", $rank);
|
|
$MATHML_OPERATOR_LIST .= 'MATHML_OPERATOR('
|
|
. $r . ','
|
|
. $unistring . ','
|
|
# . '"' . $unichar . '",'
|
|
. "$flags,$lspace,$rspace" . ') // '
|
|
. "$operator $VALUE{'form'}\n";
|
|
|
|
++$rank;
|
|
}
|
|
|
|
# $puacount = 0;
|
|
# foreach $pua (keys %PUA) {
|
|
# ++$puacount;
|
|
# print "$puacount $pua $PUA{$pua}\n";
|
|
# }
|
|
}
|