Bug 708072 - Add test page for stretchy and large operators, r=karlt

This commit is contained in:
Frédéric Wang 2011-12-06 13:24:00 -08:00
parent b207298cb5
commit 9db5265c42
3 changed files with 154 additions and 3 deletions

View File

@ -0,0 +1,117 @@
<!-- -*- mode: HTML; tab-width: 2; indent-tabs-mode: nil; -*- -->
<!-- vim: set tabstop=2 expandtab shiftwidth=2 textwidth=80: -->
<!DOCTYPE html>
<html>
<head>
<title>Test Stretchy and Large Operators</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<!-- ***** BEGIN LICENSE BLOCK *****
- Version: MPL 1.1/GPL 2.0/LGPL 2.1
-
- The contents of this file are subject to the Mozilla Public License Version
- 1.1 (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
- http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS IS" basis,
- WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- for the specific language governing rights and limitations under the
- License.
-
- The Original Code is Mozilla MathML Project.
-
- The Initial Developer of the Original Code is
- Frédéric Wang.
- Portions created by the Initial Developer are Copyright (C) 2011
- the Initial Developer. All Rights Reserved.
-
- Contributor(s):
-
- Alternatively, the contents of this file may be used under the terms of
- either the GNU General Public License Version 2 or later (the "GPL"), or
- the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- in which case the provisions of the GPL or the LGPL are applicable instead
- of those above. If you wish to allow use of your version of this file only
- under the terms of either the GPL or the LGPL, and not to allow others to
- use your version of this file under the terms of the MPL, indicate your
- decision by deleting the provisions above and replace them with the notice
- and other provisions required by the LGPL or the GPL. If you do not delete
- the provisions above, a recipient may use your version of this file under
- the terms of any one of the MPL, the GPL or the LGPL.
-
- ***** END LICENSE BLOCK ***** -->
<script type="text/javascript"
src="stretchy-and-large-operators.js"></script>
<script type="text/javascript">
function createMo(aOperator, aForm)
{
var mo = document.createElement("mo");
mo.appendChild(document.createTextNode(aOperator));
mo.setAttribute("form", aForm);
return mo;
}
function createTest(aEntry)
{
var opname = aEntry[0];
var operator = aEntry[1];
var type = aEntry[2];
var form = aEntry[3];
var div = document.createElement("div");
div.appendChild(document.createTextNode(opname));
var math = document.createElement("math");
switch (type)
{
case "l": // largeop
math.appendChild(createMo(operator, form));
var mstyle = document.createElement("mstyle");
mstyle.setAttribute("displaystyle", "true");
mstyle.appendChild(createMo(operator, form));
math.appendChild(mstyle);
break;
case "v": // vertical
for (var i = 1; i < 10; i+=2) {
var mo = createMo(operator, form);
mo.setAttribute("minsize", (.5 * i) + "em");
math.appendChild(mo);
}
break;
case "h": // horizontal
for (var i = 1; i < 10; i+=2) {
var mo = createMo(operator, form);
var mspace = document.createElement("mspace");
mspace.setAttribute("width", (.5 * i) + "em");
var mover = document.createElement("mover");
mover.setAttribute("accent", "false");
mover.appendChild(mspace);
mover.appendChild(mo);
math.appendChild(mover);
}
break;
default:
break;
}
div.appendChild(math);
document.body.appendChild(div);
}
function init()
{
for (var i in stretchy_and_large_operators) {
createTest(stretchy_and_large_operators[i]);
}
}
</script>
</head>
<body onload="init()">
</body>
</html>

File diff suppressed because one or more lines are too long

38
layout/mathml/updateOperatorDictionary.pl Normal file → Executable file
View File

@ -43,6 +43,7 @@ use XML::DOM;
$FILE_DIFFERENCES = "differences.txt";
$FILE_NEW_DICTIONARY = "new_dictionary.txt";
$FILE_SYNTAX_ERRORS = "syntax_errors.txt";
$FILE_JS = "tests/stretchy-and-large-operators.js";
# our dictionary (property file)
$MOZ_DICTIONARY = "mathfont.properties";
@ -55,7 +56,8 @@ $WG_DICTIONARY = "dictionary.xml";
if (!($#ARGV >= 0 &&
((($ARGV[0] eq "compare") && $#ARGV <= 1) ||
(($ARGV[0] eq "check") && $#ARGV <= 0)))) {
(($ARGV[0] eq "check") && $#ARGV <= 0) ||
(($ARGV[0] eq "make-js") && $#ARGV <= 0)))) {
&usage;
}
@ -126,9 +128,38 @@ while (<$file>) {
close($file);
################################################################################
# 2) If mode "check", verify validity of our operator dictionary and quit.
# 2) If mode "make-js", generate tests/stretchy-and-large-operators.js and quit.
# If mode "check", verify validity of our operator dictionary and quit.
# If mode "compare", go to step 3)
if ($ARGV[0] eq "make-js") {
print "generating file $FILE_JS...\n";
open($file_js, ">$FILE_JS") ||
die ("Couldn't open $FILE_JS!");
print $file_js "// This file is automatically generated. Do not edit.\n";
print $file_js "var stretchy_and_large_operators = [";
@moz_keys = (keys %moz_hash);
while ($key = pop(@moz_keys)) {
@moz = @{ $moz_hash{$key} };
$_ = $key;
(m/^operator\.([\w|\.|\\]*)\.(prefix|infix|postfix)$/);
$opname = "\\$1.$2: ";
if (@moz[4]) {
print $file_js "['$opname', '$1','l','$2'],";
}
if (@moz[6]) {
$_ = substr(@moz[13], 0, 1);
print $file_js "['$opname', '$1','$_','$2'],";
}
}
print $file_js "];\n";
close($file_js);
exit 0;
}
if ($ARGV[0] eq "check") {
print "checking operator dictionary...\n";
open($file_syntax_errors, ">$FILE_SYNTAX_ERRORS") ||
@ -154,7 +185,7 @@ if ($ARGV[0] eq "check") {
if (!@moz[4] && @moz[14]) {
$valid = 0;
$nb_warnings++;
print $file_syntax_errors "warning: operator is integral but not lareop\n";
print $file_syntax_errors "warning: operator is integral but not largeop\n";
}
$_ = @moz[0];
@ -415,6 +446,7 @@ sub usage {
print "usage:\n";
print " ./updateOperatorDictionary.pl compare [dictionary]\n";
print " ./updateOperatorDictionary.pl check\n";
print " ./updateOperatorDictionary.pl make-js\n";
exit 0;
}