From 0a3a2271f4b207feb14fe366cb4e72e48d79dd93 Mon Sep 17 00:00:00 2001 From: Emily Eisenberg Date: Tue, 13 Aug 2013 18:16:43 -0700 Subject: [PATCH] Add ability to calculate heights/depths Summary: This diff does a couple different things: - There is now a metrics/ folder, which contains the property files describing the metrics if the fonts, as well as a script for reading and printing the metrics in javascript. - Fractions and superscripts/subscripts are now rendered in slightly different ways now (notably, no use of inline-table). This allows for much more precise positioning of the superscripts, subscripts, numerators, and denominators, while still having an appropriate baseline. Also, there is no longer a sup/sub/supsub distinction, there are only supsubs with null sup/sub. - Using the new font metrics and by implementing the formulas found in The TeX Book, Appendix G, the heights and depths of all of the sub-expressions in a formula are now calculated. These are currently used to: - Correctly position superscripts, subscripts, numerators, and denominators - Adjust the height and depth of the overall expression so it takes up the appropriate space - Because we have to add attributes (height and depth) to every attribute, I have changed the way DOM nodes are assembled. Now, instead of assembling the DOM elements inline (which is a problem because we need to track height/depth, and we shouldn't (and can't in IE 8) attach raw attributes to DOM nodes), we assemble a pseudo-DOM structure with the extra information, and then actually assemble it at the very end. The main page also now has an updated expression to show off and test the new and improved parsing. Test Plan: View the main page, make sure that the expression renders. Make sure that the tests pass. Make sure that expressions have the correct calculated height (this is most easily tested by viewing them on the main page and making sure that the top of the expression lines up with the bottom of the input box). Reviewers: alpert Reviewed By: alpert Differential Revision: http://phabricator.khanacademy.org/D3442 --- Makefile | 5 +- Options.js | 23 + Parser.js | 10 +- Style.js | 35 +- buildTree.js | 376 ++++++++---- domTree.js | 69 +++ fontMetrics.js | 482 +++++++++++++++ katex.js | 7 +- metrics/cmex10.pl | 860 ++++++++++++++++++++++++++ metrics/cmmi10.pl | 1286 +++++++++++++++++++++++++++++++++++++++ metrics/cmr10.pl | 1082 ++++++++++++++++++++++++++++++++ metrics/cmsy10.pl | 894 +++++++++++++++++++++++++++ metrics/metric_parse.py | 328 ++++++++++ package.json | 6 +- server.js | 1 + static/index.html | 12 +- static/katex.css | 185 ------ static/katex.less | 289 +++++++++ static/main.css | 3 + test/katex-tests.js | 8 +- utils.js | 31 - 21 files changed, 5626 insertions(+), 366 deletions(-) create mode 100644 Options.js create mode 100644 domTree.js create mode 100644 fontMetrics.js create mode 100644 metrics/cmex10.pl create mode 100644 metrics/cmmi10.pl create mode 100644 metrics/cmr10.pl create mode 100644 metrics/cmsy10.pl create mode 100755 metrics/metric_parse.py delete mode 100644 static/katex.css create mode 100644 static/katex.less diff --git a/Makefile b/Makefile index 3680e50a9..b85fd58f0 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ .PHONY: build setup copy serve clean -build: setup build/katex.js +build: setup build/katex.js build/katex.less.css setup: npm install @@ -14,6 +14,9 @@ build/katex.js: katex.js $(wildcard *.js) build/katex.min.js: build/katex.js uglifyjs --mangle < $< > $@ +build/katex.less.css: static/katex.less + ./node_modules/.bin/lessc $< > $@ + serve: node server.js diff --git a/Options.js b/Options.js new file mode 100644 index 000000000..96a74eb8c --- /dev/null +++ b/Options.js @@ -0,0 +1,23 @@ +function Options(style, color, parentStyle) { + this.style = style; + this.color = color; + + if (!parentStyle) { + parentStyle = style; + } + this.parentStyle = parentStyle; +} + +Options.prototype.withStyle = function(style) { + return new Options(style, this.color, this.style); +}; + +Options.prototype.withColor = function(color) { + return new Options(this.style, color, this.style); +}; + +Options.prototype.reset = function() { + return new Options(this.style, this.color, this.style); +}; + +module.exports = Options; diff --git a/Parser.js b/Parser.js index 98d42b93d..c225a95aa 100644 --- a/Parser.js +++ b/Parser.js @@ -147,19 +147,11 @@ Parser.prototype.parseAtom = function(pos) { break; } - if (sup && sub) { + if (sup || sub) { return new ParseResult( new ParseNode("supsub", {base: nucleusNode, sup: sup, sub: sub}), nextPos); - } else if (sup) { - return new ParseResult( - new ParseNode("sup", {base: nucleusNode, sup: sup}), - nextPos); - } else if (sub) { - return new ParseResult( - new ParseNode("sub", {base: nucleusNode, sub: sub}), - nextPos); } else { return nucleus; } diff --git a/Style.js b/Style.js index 919daf4f4..8b1206723 100644 --- a/Style.js +++ b/Style.js @@ -1,7 +1,8 @@ -function Style(id, size, cramped) { +function Style(id, size, multiplier, cramped) { this.id = id; this.size = size; this.cramped = cramped; + this.sizeMultiplier = multiplier; } Style.prototype.sup = function() { @@ -20,13 +21,16 @@ Style.prototype.fracDen = function() { return styles[fracDen[this.id]]; }; -/** - * HTML class name, like "display cramped" - */ +// HTML class name, like "displaystyle cramped" Style.prototype.cls = function() { return sizeNames[this.size] + (this.cramped ? " cramped" : " uncramped"); }; +// HTML Reset class name, like "reset-textstyle" +Style.prototype.reset = function() { + return resetNames[this.size]; +}; + var D = 0; var Dc = 1; var T = 2; @@ -43,15 +47,22 @@ var sizeNames = [ "scriptscriptstyle" ]; +var resetNames = [ + "reset-textstyle", + "reset-textstyle", + "reset-scriptstyle", + "reset-scriptscriptstyle", +]; + var styles = [ - new Style(D, 0, false), - new Style(Dc, 0, true), - new Style(T, 1, false), - new Style(Tc, 1, true), - new Style(S, 2, false), - new Style(Sc, 2, true), - new Style(SS, 3, false), - new Style(SSc, 3, true) + new Style(D, 0, 1.0, false), + new Style(Dc, 0, 1.0, true), + new Style(T, 1, 1.0, false), + new Style(Tc, 1, 1.0, true), + new Style(S, 2, 0.66667, false), + new Style(Sc, 2, 0.66667, true), + new Style(SS, 3, 0.5, false), + new Style(SSc, 3, 0.5, true) ]; var sup = [S, Sc, S, Sc, SS, SSc, SS, SSc]; diff --git a/buildTree.js b/buildTree.js index 67a27d804..40ec08a05 100644 --- a/buildTree.js +++ b/buildTree.js @@ -1,23 +1,12 @@ +var Options = require("./Options"); +var ParseError = require("./ParseError"); var Style = require("./Style"); +var domTree = require("./domTree"); +var fontMetrics = require("./fontMetrics"); var parseTree = require("./parseTree"); var utils = require("./utils"); -var ParseError = require("./ParseError"); - -function Options(style, color) { - this.style = style; - this.color = color; -} - -Options.prototype.withStyle = function(style) { - return new Options(style, this.color); -} - -Options.prototype.withColor = function(color) { - return new Options(this.style, color); -} - var buildExpression = function(expression, options, prev) { var groups = []; for (var i = 0; i < expression.length; i++) { @@ -28,26 +17,58 @@ var buildExpression = function(expression, options, prev) { return groups; }; -var makeSpan = function(className, children) { - var span = document.createElement("span"); - span.className = className || ""; +var makeSpan = function(classes, children) { + var height = 0; + var depth = 0; if (children) { for (var i = 0; i < children.length; i++) { - span.appendChild(children[i]); + if (children[i].height > height) { + height = children[i].height; + } + if (children[i].depth > depth) { + depth = children[i].depth; + } } } - return span; + return new domTree.span(classes, children, height, depth); +}; + +var groupToType = { + mathord: "mord", + textord: "mord", + bin: "mbin", + rel: "mrel", + open: "mopen", + close: "mclose", + frac: "minner", + spacing: "mord", + punct: "mpunct", + ordgroup: "mord", + namedfn: "mop", + katex: "mord", +}; + +var getTypeOfGroup = function(group) { + if (group.type === "supsub") { + return getTypeOfGroup(group.value.base); + } else if (group.type === "llap" || group.type === "rlap") { + return getTypeOfGroup(group.value); + } else if (group.type === "color") { + return getTypeOfGroup(group.value.value); + } else { + return groupToType[group.type]; + } }; var groupTypes = { mathord: function(group, options, prev) { - return makeSpan("mord" + options.color, [mathit(group.value)]); + return makeSpan(["mord", options.color], [mathit(group.value)]); }, textord: function(group, options, prev) { - return makeSpan("mord" + options.color, [textit(group.value)]); + return makeSpan(["mord", options.color], [mathrm(group.value)]); }, bin: function(group, options, prev) { @@ -62,66 +83,106 @@ var groupTypes = { group.type = "ord"; className = "mord"; } - return makeSpan(className + options.color, [textit(group.value)]); + return makeSpan([className, options.color], [mathrm(group.value)]); }, rel: function(group, options, prev) { - return makeSpan("mrel" + options.color, [textit(group.value)]); - }, - - sup: function(group, options, prev) { - var sup = makeSpan("msup " + options.style.cls(), [ - makeSpan(options.style.sup().cls(), [ - buildGroup(group.value.sup, - options.withStyle(options.style.sup())) - ]) - ]); - return makeSpan("mord", [ - buildGroup(group.value.base, options), sup - ]); - }, - - sub: function(group, options, prev) { - var sub = makeSpan("msub " + options.style.cls(), [ - makeSpan(options.style.sub().cls(), [ - buildGroup(group.value.sub, - options.withStyle(options.style.sub())) - ]) - ]); - return makeSpan("mord", [ - buildGroup(group.value.base, options), sub - ]); + return makeSpan(["mrel", options.color], [mathrm(group.value)]); }, supsub: function(group, options, prev) { - var sup = makeSpan("msup " + options.style.sup().cls(), [ - buildGroup(group.value.sup, options.withStyle(options.style.sup())) - ]); - var sub = makeSpan("msub " + options.style.sub().cls(), [ - buildGroup(group.value.sub, options.withStyle(options.style.sub())) - ]); + var base = buildGroup(group.value.base, options.reset()); - var supsub = makeSpan("msupsub " + options.style.cls(), [sup, sub]); + if (group.value.sup) { + var sup = buildGroup(group.value.sup, + options.withStyle(options.style.sup())); + var supmid = makeSpan( + [options.style.reset(), options.style.sup().cls()], [sup]); + var supwrap = makeSpan(["msup", options.style.reset()], [supmid]); + } - return makeSpan("mord", [ - buildGroup(group.value.base, options), supsub - ]); + if (group.value.sub) { + var sub = buildGroup(group.value.sub, + options.withStyle(options.style.sub())); + var submid = makeSpan( + [options.style.reset(), options.style.sub().cls()], [sub]); + var subwrap = makeSpan(["msub"], [submid]); + } + + var u = base.height - fontMetrics.metrics.supDrop; + var v = base.depth + fontMetrics.metrics.subDrop; + + var p; + if (options.style === Style.DISPLAY) { + p = fontMetrics.metrics.sup1; + } else if (options.style.cramped) { + p = fontMetrics.metrics.sup3; + } else { + p = fontMetrics.metrics.sup2; + } + + var supsub; + + if (!group.value.sup) { + v = Math.max(v, fontMetrics.metrics.sub1, + sub.height - 0.8 * fontMetrics.metrics.xHeight); + + subwrap.style.top = v + "em"; + + subwrap.depth = subwrap.depth + v; + subwrap.height = 0; + + supsub = makeSpan(["msupsub"], [subwrap]); + } else if (!group.value.sub) { + u = Math.max(u, p, + sup.depth + 0.25 * fontMetrics.metrics.xHeight); + + supwrap.style.top = -u + "em"; + + supwrap.height = supwrap.height + u; + supwrap.depth = 0; + + supsub = makeSpan(["msupsub"], [supwrap]); + } else { + u = Math.max(u, p, + sup.depth + 0.25 * fontMetrics.metrics.xHeight); + v = Math.max(v, fontMetrics.metrics.sub2); + + var theta = fontMetrics.metrics.defaultRuleThickness; + + if ((u - sup.depth) - (sub.height - v) < 4 * theta) { + v = 4 * theta - (u - sup.depth) + sub.height; + var psi = 0.8 * fontMetrics.metrics.xHeight - (u - sup.depth); + if (psi > 0) { + u += psi; + v -= psi; + } + } + + supwrap.style.top = -u + "em"; + subwrap.style.top = v + "em"; + + supwrap.height = supwrap.height + u; + supwrap.depth = 0; + + subwrap.height = 0; + subwrap.depth = subwrap.depth + v; + + supsub = makeSpan(["msupsub"], [supwrap, subwrap]); + } + + return makeSpan([getTypeOfGroup(group.value.base)], [base, supsub]); }, open: function(group, options, prev) { - return makeSpan("mopen" + options.color, [textit(group.value)]); + return makeSpan(["mopen", options.color], [mathrm(group.value)]); }, close: function(group, options, prev) { - return makeSpan("mclose" + options.color, [textit(group.value)]); + return makeSpan(["mclose", options.color], [mathrm(group.value)]); }, frac: function(group, options, prev) { - if (utils.isBuggyWebKit) { - throw new ParseError( - "KaTeX fractions don't work in WebKit <= 537.1"); - } - var fstyle = options.style; if (group.value.size === "dfrac") { fstyle = Style.DISPLAY; @@ -132,39 +193,86 @@ var groupTypes = { var nstyle = fstyle.fracNum(); var dstyle = fstyle.fracDen(); - var numer = makeSpan("mfracnum " + nstyle.cls(), [ - makeSpan("", [ - buildGroup(group.value.numer, options.withStyle(nstyle)) - ]) - ]); - var mid = makeSpan("mfracmid"); - var denom = makeSpan("mfracden " + dstyle.cls(), [ - makeSpan("", [ - buildGroup(group.value.denom, options.withStyle(dstyle)) - ]) - ]); + var numer = buildGroup(group.value.numer, options.withStyle(nstyle)); + var numernumer = makeSpan([fstyle.reset(), nstyle.cls()], [numer]); + var numerrow = makeSpan(["mfracnum"], [numernumer]); - return makeSpan("minner mfrac " + fstyle.cls() + options.color, [ - numer, mid, denom + var mid = makeSpan(["mfracmid"], [makeSpan()]); + + var denom = buildGroup(group.value.denom, options.withStyle(dstyle)); + var denomdenom = makeSpan([fstyle.reset(), dstyle.cls()], [denom]) + var denomrow = makeSpan(["mfracden"], [denomdenom]); + + var theta = fontMetrics.metrics.defaultRuleThickness; + + var u, v, phi; + if (fstyle.size === Style.DISPLAY.size) { + u = fontMetrics.metrics.num1; + v = fontMetrics.metrics.denom1; + phi = 3 * theta; + } else { + u = fontMetrics.metrics.num2; + v = fontMetrics.metrics.denom2; + phi = theta; + } + + var a = fontMetrics.metrics.axisHeight; + + if ((u - numer.depth) - (a + 0.5 * theta) < phi) { + u += phi - ((u - numer.depth) - (a + 0.5 * theta)); + } + + if ((a - 0.5 * theta) - (denom.height - v) < phi) { + v += phi - ((a - 0.5 * theta) - (denom.height - v)); + } + + numerrow.style.top = -u + "em"; + mid.style.top = -(a - 0.5 * theta) + "em"; + denomrow.style.top = v + "em"; + + numerrow.height = numerrow.height + u; + numerrow.depth = 0; + + denomrow.height = 0; + denomrow.depth = denomrow.depth + v; + + var frac = makeSpan([], [numerrow, mid, denomrow]); + + frac.height *= fstyle.sizeMultiplier / options.style.sizeMultiplier; + frac.depth *= fstyle.sizeMultiplier / options.style.sizeMultiplier; + + var wrap = makeSpan([options.style.reset(), fstyle.cls()], [frac]); + + return makeSpan(["minner", options.color], [ + makeSpan(["mfrac"], [wrap]) ]); }, color: function(group, options, prev) { - var frag = document.createDocumentFragment(); var els = buildExpression( group.value.value, - options.withColor(" " + group.value.color), + options.withColor(group.value.color), prev ); + + var height = 0; + var depth = 0; + for (var i = 0; i < els.length; i++) { - frag.appendChild(els[i]); + if (els[i].height > height) { + var height = els[i].height; + } + if (els[i].depth > depth) { + var depth = els[i].depth; + } } - return frag; + + return new domTree.documentFragment(els, height, depth); }, spacing: function(group, options, prev) { if (group.value === "\\ " || group.value === "\\space") { - return makeSpan("mord mspace", [textit(group.value)]); + return makeSpan(["mord", "mspace"], [mathrm(group.value)]); } else { var spacingClassMap = { "\\qquad": "qquad", @@ -174,42 +282,55 @@ var groupTypes = { "\\,": "thinspace" }; - return makeSpan("mord mspace " + spacingClassMap[group.value]); + return makeSpan(["mord", "mspace", spacingClassMap[group.value]]); } }, llap: function(group, options, prev) { - var inner = makeSpan("", [buildGroup(group.value, options)]); - return makeSpan("llap " + options.style.cls(), [inner]); + var inner = makeSpan([], [buildGroup(group.value, options.reset())]); + return makeSpan(["llap", options.style.cls()], [inner]); }, rlap: function(group, options, prev) { - var inner = makeSpan("", [buildGroup(group.value, options)]); - return makeSpan("rlap " + options.style.cls(), [inner]); + var inner = makeSpan([], [buildGroup(group.value, options.reset())]); + return makeSpan(["rlap", options.style.cls()], [inner]); }, punct: function(group, options, prev) { - return makeSpan("mpunct" + options.color, [textit(group.value)]); + return makeSpan(["mpunct", options.color], [mathrm(group.value)]); }, ordgroup: function(group, options, prev) { - return makeSpan("mord " + options.style.cls(), - buildExpression(group.value, options) + return makeSpan(["mord", options.style.cls()], + buildExpression(group.value, options.reset()) ); }, namedfn: function(group, options, prev) { - return makeSpan("mop" + options.color, [textit(group.value.slice(1))]); + var chars = []; + for (var i = 1; i < group.value.length; i++) { + chars.push(mathrm(group.value[i])); + } + + return makeSpan(["mop", options.color], chars); }, katex: function(group, options, prev) { - return makeSpan("katex-logo", [ - makeSpan("k", [textit("K")]), - makeSpan("a", [textit("A")]), - makeSpan("t", [textit("T")]), - makeSpan("e", [textit("E")]), - makeSpan("x", [textit("X")]) - ]); + var k = makeSpan(["k"], [mathrm("K")]); + var a = makeSpan(["a"], [mathrm("A")]); + + a.height = (a.height + 0.2) * 0.75; + a.depth = (a.height - 0.2) * 0.75; + + var t = makeSpan(["t"], [mathrm("T")]); + var e = makeSpan(["e"], [mathrm("E")]); + + e.height = (e.height - 0.2155); + e.depth = (e.depth + 0.2155); + + var x = makeSpan(["x"], [mathrm("X")]); + + return makeSpan(["katex-logo", options.color], [k, a, t, e, x]); } }; @@ -219,7 +340,22 @@ var buildGroup = function(group, options, prev) { } if (groupTypes[group.type]) { - return groupTypes[group.type](group, options, prev); + var groupNode = groupTypes[group.type](group, options, prev); + + if (options.style !== options.parentStyle) { + var multiplier = options.style.sizeMultiplier / + options.parentStyle.sizeMultiplier; + + if (multiplier > 1) { + throw new ParseError( + "Error: Can't go from small to large style"); + } + + groupNode.height *= multiplier; + groupNode.depth *= multiplier; + } + + return groupNode; } else { throw new ParseError( "Lex error: Got group of unknown type: '" + group.type + "'"); @@ -268,7 +404,7 @@ var charLookup = { "\\mu": "\u03bc", "\\nu": "\u03bd", "\\xi": "\u03be", - "\\omicron": "\u03bf", + "\\omicron": "o", "\\pi": "\u03c0", "\\rho": "\u03c1", "\\sigma": "\u03c3", @@ -298,33 +434,45 @@ var charLookup = { "\\Omega": "\u03a9" }; -var textit = function(value) { +var makeText = function(value, style) { if (value in charLookup) { value = charLookup[value]; } - return document.createTextNode(value); -}; -var mathit = function(value) { - return makeSpan("mathit", [textit(value)]); -}; + var metrics = fontMetrics.getCharacterMetrics(value, style); -var clearNode = function(node) { - if ("textContent" in node) { - node.textContent = ""; + if (metrics) { + return new domTree.textNode(value, metrics.height, metrics.depth); } else { - node.innerText = ""; + console && console.warn("No character metrics for '" + value + + "' in style '" + style + "'"); + return new domTree.textNode(value, 0, 0); } }; +var mathit = function(value) { + return makeSpan(["mathit"], [makeText(value, "italic")]); +}; + +var mathrm = function(value) { + return makeText(value, "roman"); +}; + var buildTree = function(tree) { + // Setup the default options var options = new Options(Style.TEXT, ""); var expression = buildExpression(tree, options); - var span = makeSpan(options.style.cls(), expression); - var katexNode = makeSpan("katex", [span]); + var span = makeSpan(["base", options.style.cls()], expression); + var topStrut = makeSpan(["strut"]); + var bottomStrut = makeSpan(["strut", "bottom"]); - return katexNode; + topStrut.style.height = span.height + "em"; + bottomStrut.style.height = (span.height + span.depth) + "em"; + + var katexNode = makeSpan(["katex"], [topStrut, bottomStrut, span]); + + return katexNode.toDOM(); }; module.exports = buildTree; diff --git a/domTree.js b/domTree.js new file mode 100644 index 000000000..b8e183cd0 --- /dev/null +++ b/domTree.js @@ -0,0 +1,69 @@ +// These objects store the data about the DOM nodes we create, as well as some +// extra data. They can then be transformed into real DOM nodes with the toDOM +// function. They are useful for both storing extra properties on the nodes, as +// well as providing a way to easily work with the DOM. + +function span(classes, children, height, depth, style) { + this.classes = classes || []; + this.children = children || []; + this.height = height || 0; + this.depth = depth || 0; + this.style = style || {}; +} + +span.prototype.toDOM = function() { + var span = document.createElement("span"); + + var classes = this.classes.slice(); + for (var i = classes.length - 1; i >= 0; i--) { + if (!classes[i]) { + classes.splice(i, 1); + } + } + + span.className = classes.join(" "); + + for (var style in this.style) { + if (this.style.hasOwnProperty(style)) { + span.style[style] = this.style[style]; + } + } + + for (var i = 0; i < this.children.length; i++) { + span.appendChild(this.children[i].toDOM()); + } + + return span; +}; + +function documentFragment(children, height, depth) { + this.children = children || []; + this.height = height || 0; + this.depth = depth || 0; +} + +documentFragment.prototype.toDOM = function() { + var frag = document.createDocumentFragment(); + + for (var i = 0; i < this.children.length; i++) { + frag.appendChild(this.children[i].toDOM()); + } + + return frag; +}; + +function textNode(value, height, depth) { + this.value = value || ""; + this.height = height || 0; + this.depth = depth || 0; +} + +textNode.prototype.toDOM = function() { + return document.createTextNode(this.value); +}; + +module.exports = { + span: span, + documentFragment: documentFragment, + textNode: textNode +}; diff --git a/fontMetrics.js b/fontMetrics.js new file mode 100644 index 000000000..c9143fce7 --- /dev/null +++ b/fontMetrics.js @@ -0,0 +1,482 @@ +// These font metrics are extracted from TeX +var sigma1 = 0.025; +var sigma2 = 0; +var sigma3 = 0; +var sigma4 = 0; +var sigma5 = 0.431; +var sigma6 = 1; +var sigma7 = 0; +var sigma8 = 0.677; +var sigma9 = 0.394; +var sigma10 = 0.444; +var sigma11 = 0.686; +var sigma12 = 0.345; +var sigma13 = 0.413; +var sigma14 = 0.363; +var sigma15 = 0.289; +var sigma16 = 0.150; +var sigma17 = 0.247; +var sigma18 = 0.386; +var sigma19 = 0.050; +var sigma20 = 2.390; +var sigma21 = 0.101; +var sigma22 = 0.250; + +var xi1 = 0; +var xi2 = 0; +var xi3 = 0; +var xi4 = 0; +var xi5 = .431; +var xi6 = 1; +var xi7 = 0; +var xi8 = .04; +var xi9 = .111; +var xi10 = .166; +var xi11 = .2; +var xi12 = .6; +var xi13 = .1; + +// This is just a mapping from common names to real metrics +var metrics = { + xHeight: sigma5, + quad: sigma6, + num1: sigma8, + num2: sigma9, + num3: sigma10, + denom1: sigma11, + denom2: sigma12, + sup1: sigma13, + sup2: sigma14, + sup3: sigma15, + sub1: sigma16, + sub2: sigma17, + supDrop: sigma18, + subDrop: sigma19, + delim1: sigma20, + delim2: sigma21, + axisHeight: sigma22, + defaultRuleThickness: xi8, + bigOpSpacing1: xi9, + bigOpSpacing2: xi10, + bigOpSpacing3: xi11, + bigOpSpacing4: xi12, + bigOpSpacing5: xi13 +}; + +// This map is generated by metrics/metric_parse.py +var metricMap = { + "roman": { + "depth": { + "\u2218": 0.0, + "\u03a5": 0.0, + "$": 0.056, + "\u03a9": 0.0, + "(": 0.25, + ",": 0.193, + "0": 0.022, + "4": 0.0, + "8": 0.022, + "<": 0.04, + "@": 0.011, + "D": 0.0, + "H": 0.0, + "L": 0.0, + "P": 0.0, + "T": 0.0, + "\u00d7": 0.0, + "X": 0.0, + "\u2264": 0.137, + "`": 0.0, + "d": 0.011, + "h": 0.0, + "l": 0.0, + "p": 0.194, + "t": 0.011, + "\u00f7": 0.029, + "x": 0.0, + "|": 0.25, + "\u2192": 0.011, + "\u2217": 0.0, + "\u039e": 0.0, + "\u00a0": 0.0, + "\u03a6": 0.0, + "+": 0.083, + "/": 0.25, + "3": 0.022, + "7": 0.022, + ";": 0.193, + "?": 0.0, + "C": 0.022, + "G": 0.022, + "K": 0.0, + "O": 0.022, + "S": 0.022, + "W": 0.022, + "[": 0.25, + "c": 0.011, + "g": 0.206, + "\u2032": 0.0, + "k": 0.0, + "o": 0.011, + "s": 0.011, + "w": 0.011, + "\u0393": 0.0, + "\u2212": 0.0, + "\u039b": 0.0, + "\u221e": 0.011, + "\u03a3": 0.0, + "\"": 0.0, + ".": 0.0, + "\u00b1": 0.0, + "2": 0.0, + "6": 0.022, + ":": 0.0, + ">": 0.04, + "B": 0.0, + "\u22c5": 0.0, + "F": 0.0, + "J": 0.022, + "N": 0.0, + "R": 0.022, + "V": 0.022, + "\u2265": 0.137, + "Z": 0.0, + "b": 0.011, + "f": 0.0, + "j": 0.205, + "n": 0.0, + "r": 0.0, + "v": 0.011, + "z": 0.0, + "\u2190": 0.011, + "\u0394": 0.0, + "\u0398": 0.022, + "!": 0.0, + "\u03a0": 0.0, + ")": 0.25, + "\u03a8": 0.0, + "1": 0.0, + "5": 0.022, + "9": 0.022, + "=": 0.0, + "A": 0.0, + "E": 0.0, + "I": 0.0, + "M": 0.0, + "Q": 0.194, + "U": 0.022, + "Y": 0.0, + "]": 0.25, + "a": 0.011, + "e": 0.011, + "i": 0.0, + "m": 0.0, + "q": 0.194, + "u": 0.011, + "y": 0.205 + }, + "height": { + "\u2218": 0.444, + "\u03a5": 0.705, + "$": 0.75, + "\u03a9": 0.705, + "(": 0.75, + ",": 0.106, + "0": 0.666, + "4": 0.677, + "8": 0.666, + "<": 0.54, + "@": 0.705, + "D": 0.683, + "H": 0.683, + "L": 0.683, + "P": 0.683, + "T": 0.677, + "\u00d7": 0.491, + "X": 0.683, + "\u2264": 0.636, + "`": 0.693, + "d": 0.694, + "h": 0.694, + "l": 0.694, + "p": 0.442, + "t": 0.615, + "\u00f7": 0.529, + "x": 0.431, + "|": 0.75, + "\u2192": 0.511, + "\u2217": 0.465, + "\u039e": 0.677, + "\u00a0": 0.0, + "\u03a6": 0.683, + "+": 0.583, + "/": 0.75, + "3": 0.666, + "7": 0.676, + ";": 0.431, + "?": 0.705, + "C": 0.705, + "G": 0.705, + "K": 0.683, + "O": 0.705, + "S": 0.705, + "W": 0.683, + "[": 0.75, + "c": 0.448, + "g": 0.453, + "\u2032": 0.559, + "k": 0.694, + "o": 0.448, + "s": 0.448, + "w": 0.431, + "\u0393": 0.68, + "\u2212": 0.27, + "\u039b": 0.716, + "\u221e": 0.442, + "\u03a3": 0.683, + "\"": 0.694, + ".": 0.106, + "\u00b1": 0.666, + "2": 0.666, + "6": 0.666, + ":": 0.431, + ">": 0.54, + "B": 0.683, + "\u22c5": 0.303, + "F": 0.68, + "J": 0.683, + "N": 0.683, + "R": 0.683, + "V": 0.683, + "\u2265": 0.636, + "Z": 0.683, + "b": 0.694, + "f": 0.705, + "j": 0.669, + "n": 0.442, + "r": 0.442, + "v": 0.431, + "z": 0.431, + "\u2190": 0.511, + "\u0394": 0.716, + "\u0398": 0.705, + "!": 0.716, + "\u03a0": 0.68, + ")": 0.75, + "\u03a8": 0.683, + "1": 0.666, + "5": 0.666, + "9": 0.666, + "=": 0.367, + "A": 0.716, + "E": 0.68, + "I": 0.683, + "M": 0.683, + "Q": 0.705, + "U": 0.683, + "Y": 0.683, + "]": 0.75, + "a": 0.448, + "e": 0.448, + "i": 0.669, + "m": 0.442, + "q": 0.442, + "u": 0.442, + "y": 0.431 + } + }, + "slanted": { + "depth": {}, + "height": {} + }, + "bold": { + "depth": {}, + "height": {} + }, + "italic": { + "depth": { + "A": 0.0, + "V": 0.022, + "C": 0.022, + "B": 0.0, + "x": 0.011, + "E": 0.0, + "D": 0.0, + "q": 0.194, + "G": 0.022, + "F": 0.0, + "\u03b1": 0.011, + "I": 0.0, + "\u03b3": 0.215, + "\u03b2": 0.194, + "\u03b5": 0.022, + "\u03b4": 0.012, + "\u03b7": 0.216, + "\u03b6": 0.205, + "\u03b9": 0.011, + "\u03b8": 0.011, + "\u03bb": 0.013, + "\u03ba": 0.011, + "\u03bd": 0.0, + "\u03bc": 0.216, + "\u03be": 0.205, + "\u03c1": 0.216, + "\u03c0": 0.011, + "\u03c3": 0.011, + "\u03c2": 0.108, + "\u03c5": 0.011, + "\u03c4": 0.012, + "\u03c7": 0.205, + "\u03c6": 0.218, + "\u03c9": 0.011, + "\u03c8": 0.205, + "K": 0.0, + "J": 0.022, + "M": 0.0, + "L": 0.0, + "O": 0.022, + "N": 0.0, + "\u03d1": 0.011, + "P": 0.0, + "S": 0.022, + "R": 0.022, + "\u03d5": 0.205, + "T": 0.0, + "W": 0.022, + "\u03d6": 0.011, + "Y": 0.0, + "X": 0.0, + "w": 0.011, + "Z": 0.0, + "a": 0.011, + "Q": 0.194, + "c": 0.011, + "b": 0.011, + "e": 0.011, + "d": 0.011, + "g": 0.205, + "f": 0.205, + "i": 0.011, + "h": 0.011, + "k": 0.011, + "j": 0.205, + "m": 0.011, + "l": 0.011, + "o": 0.011, + "n": 0.011, + "\u03f1": 0.194, + "p": 0.194, + "s": 0.011, + "r": 0.011, + "u": 0.011, + "t": 0.011, + "H": 0.0, + "v": 0.011, + "y": 0.205, + "U": 0.022, + "z": 0.011 + }, + "height": { + "A": 0.716, + "V": 0.683, + "C": 0.705, + "B": 0.683, + "x": 0.442, + "E": 0.68, + "D": 0.683, + "q": 0.442, + "G": 0.705, + "F": 0.68, + "\u03b1": 0.442, + "I": 0.683, + "\u03b3": 0.442, + "\u03b2": 0.706, + "\u03b5": 0.453, + "\u03b4": 0.711, + "\u03b7": 0.442, + "\u03b6": 0.697, + "\u03b9": 0.442, + "\u03b8": 0.705, + "\u03bb": 0.694, + "\u03ba": 0.442, + "\u03bd": 0.442, + "\u03bc": 0.442, + "\u03be": 0.697, + "\u03c1": 0.442, + "\u03c0": 0.431, + "\u03c3": 0.431, + "\u03c2": 0.442, + "\u03c5": 0.442, + "\u03c4": 0.431, + "\u03c7": 0.442, + "\u03c6": 0.442, + "\u03c9": 0.442, + "\u03c8": 0.694, + "K": 0.683, + "J": 0.683, + "M": 0.683, + "L": 0.683, + "O": 0.705, + "N": 0.683, + "\u03d1": 0.705, + "P": 0.683, + "S": 0.705, + "R": 0.683, + "\u03d5": 0.694, + "T": 0.677, + "W": 0.683, + "\u03d6": 0.431, + "Y": 0.683, + "X": 0.683, + "w": 0.442, + "Z": 0.683, + "a": 0.442, + "Q": 0.705, + "c": 0.442, + "b": 0.694, + "e": 0.442, + "d": 0.694, + "g": 0.442, + "f": 0.705, + "i": 0.661, + "h": 0.694, + "k": 0.694, + "j": 0.661, + "m": 0.442, + "l": 0.694, + "o": 0.442, + "n": 0.442, + "\u03f1": 0.442, + "p": 0.442, + "s": 0.442, + "r": 0.442, + "u": 0.442, + "t": 0.626, + "H": 0.683, + "v": 0.442, + "y": 0.442, + "U": 0.683, + "z": 0.442 + } + }, + "typewriter": { + "depth": {}, + "height": {} + } +}; + +var getCharacterMetrics = function(character, style) { + if (character in metricMap[style].height) { + return { + height: metricMap[style].height[character], + depth: metricMap[style].depth[character] + }; + } else { + return null; + } +}; + +module.exports = { + metrics: metrics, + getCharacterMetrics: getCharacterMetrics +}; diff --git a/katex.js b/katex.js index 1b35eb334..96a80c6ce 100644 --- a/katex.js +++ b/katex.js @@ -1,8 +1,9 @@ -var parseTree = require("./parseTree"); -var buildTree = require("./buildTree"); -var utils = require("./utils"); var ParseError = require("./ParseError"); +var buildTree = require("./buildTree"); +var parseTree = require("./parseTree"); +var utils = require("./utils"); + var process = function(toParse, baseNode) { var tree = parseTree(toParse); var node = buildTree(tree); diff --git a/metrics/cmex10.pl b/metrics/cmex10.pl new file mode 100644 index 000000000..26ff0996f --- /dev/null +++ b/metrics/cmex10.pl @@ -0,0 +1,860 @@ +(FAMILY cmex10) +(CODINGSCHEME FONTSPECIFIC) +(DESIGNSIZE R 10.0) +(DESIGNUNITS R 1000) +(COMMENT DESIGNSIZE (1 em) IS IN POINTS) +(COMMENT OTHER DIMENSIONS ARE MULTIPLES OF DESIGNSIZE/1000) +(BOUNDARYCHAR O 201) +(FONTDIMEN + (SLANT R 0.000000) + (SPACE D 333) + (STRETCH D 166) + (SHRINK D 111) + (XHEIGHT D 400) + (QUAD D 1000) + (EXTRASPACE D 111) + ) +(LIGTABLE + ) +(CHARACTER O 0 (comment parenleftbig) + (CHARWD R 458) + (CHARHT R 40) + (CHARDP R 1159) + ) +(CHARACTER O 1 (comment parenrightbig) + (CHARWD R 458) + (CHARHT R 40) + (CHARDP R 1159) + ) +(CHARACTER O 2 (comment bracketleftbig) + (CHARWD R 416) + (CHARHT R 40) + (CHARDP R 1159) + ) +(CHARACTER O 3 (comment bracketrightbig) + (CHARWD R 416) + (CHARHT R 40) + (CHARDP R 1159) + ) +(CHARACTER O 4 (comment floorleftbig) + (CHARWD R 472) + (CHARHT R 40) + (CHARDP R 1159) + ) +(CHARACTER O 5 (comment floorrightbig) + (CHARWD R 472) + (CHARHT R 40) + (CHARDP R 1159) + ) +(CHARACTER O 6 (comment ceilingleftbig) + (CHARWD R 472) + (CHARHT R 40) + (CHARDP R 1159) + ) +(CHARACTER O 7 (comment ceilingrightbig) + (CHARWD R 472) + (CHARHT R 40) + (CHARDP R 1159) + ) +(CHARACTER O 10 (comment braceleftbig) + (CHARWD R 583) + (CHARHT R 40) + (CHARDP R 1159) + ) +(CHARACTER O 11 (comment bracerightbig) + (CHARWD R 583) + (CHARHT R 40) + (CHARDP R 1159) + ) +(CHARACTER O 12 (comment angbracketleftbig) + (CHARWD R 472) + (CHARHT R 40) + (CHARDP R 1160) + ) +(CHARACTER O 13 (comment angbracketrightbig) + (CHARWD R 472) + (CHARHT R 40) + (CHARDP R 1160) + ) +(CHARACTER O 14 (comment vextendsingle) + (CHARWD R 333) + (CHARHT R 21) + (CHARDP R 621) + ) +(CHARACTER O 15 (comment vextenddouble) + (CHARWD R 555) + (CHARHT R 21) + (CHARDP R 621) + ) +(CHARACTER O 16 (comment slashbig) + (CHARWD R 577) + (CHARHT R 40) + (CHARDP R 1159) + ) +(CHARACTER O 17 (comment backslashbig) + (CHARWD R 577) + (CHARHT R 40) + (CHARDP R 1159) + ) +(CHARACTER O 20 (comment parenleftBig) + (CHARWD R 597) + (CHARHT R 40) + (CHARDP R 1759) + ) +(CHARACTER O 21 (comment parenrightBig) + (CHARWD R 597) + (CHARHT R 40) + (CHARDP R 1759) + ) +(CHARACTER O 22 (comment parenleftbigg) + (CHARWD R 736) + (CHARHT R 40) + (CHARDP R 2359) + ) +(CHARACTER O 23 (comment parenrightbigg) + (CHARWD R 736) + (CHARHT R 40) + (CHARDP R 2359) + ) +(CHARACTER O 24 (comment bracketleftbigg) + (CHARWD R 527) + (CHARHT R 40) + (CHARDP R 2359) + ) +(CHARACTER O 25 (comment bracketrightbigg) + (CHARWD R 527) + (CHARHT R 40) + (CHARDP R 2359) + ) +(CHARACTER O 26 (comment floorleftbigg) + (CHARWD R 583) + (CHARHT R 40) + (CHARDP R 2359) + ) +(CHARACTER O 27 (comment floorrightbigg) + (CHARWD R 583) + (CHARHT R 40) + (CHARDP R 2359) + ) +(CHARACTER O 30 (comment ceilingleftbigg) + (CHARWD R 583) + (CHARHT R 40) + (CHARDP R 2359) + ) +(CHARACTER O 31 (comment ceilingrightbigg) + (CHARWD R 583) + (CHARHT R 40) + (CHARDP R 2359) + ) +(CHARACTER O 32 (comment braceleftbigg) + (CHARWD R 750) + (CHARHT R 40) + (CHARDP R 2359) + ) +(CHARACTER O 33 (comment bracerightbigg) + (CHARWD R 750) + (CHARHT R 40) + (CHARDP R 2359) + ) +(CHARACTER O 34 (comment angbracketleftbigg) + (CHARWD R 750) + (CHARHT R 40) + (CHARDP R 2359) + ) +(CHARACTER O 35 (comment angbracketrightbigg) + (CHARWD R 750) + (CHARHT R 40) + (CHARDP R 2359) + ) +(CHARACTER O 36 (comment slashbigg) + (CHARWD R 1044) + (CHARHT R 40) + (CHARDP R 2359) + ) +(CHARACTER O 37 (comment backslashbigg) + (CHARWD R 1044) + (CHARHT R 40) + (CHARDP R 2359) + ) +(CHARACTER O 40 (comment parenleftBigg) + (CHARWD R 791) + (CHARHT R 40) + (CHARDP R 2959) + ) +(CHARACTER O 41 (comment parenrightBigg) + (CHARWD R 791) + (CHARHT R 40) + (CHARDP R 2959) + ) +(CHARACTER O 42 (comment bracketleftBigg) + (CHARWD R 583) + (CHARHT R 40) + (CHARDP R 2959) + ) +(CHARACTER O 43 (comment bracketrightBigg) + (CHARWD R 583) + (CHARHT R 40) + (CHARDP R 2959) + ) +(CHARACTER O 44 (comment floorleftBigg) + (CHARWD R 638) + (CHARHT R 40) + (CHARDP R 2959) + ) +(CHARACTER O 45 (comment floorrightBigg) + (CHARWD R 638) + (CHARHT R 40) + (CHARDP R 2959) + ) +(CHARACTER O 46 (comment ceilingleftBigg) + (CHARWD R 638) + (CHARHT R 40) + (CHARDP R 2959) + ) +(CHARACTER O 47 (comment ceilingrightBigg) + (CHARWD R 638) + (CHARHT R 40) + (CHARDP R 2959) + ) +(CHARACTER O 50 (comment braceleftBigg) + (CHARWD R 805) + (CHARHT R 40) + (CHARDP R 2959) + ) +(CHARACTER O 51 (comment bracerightBigg) + (CHARWD R 805) + (CHARHT R 40) + (CHARDP R 2959) + ) +(CHARACTER O 52 (comment angbracketleftBigg) + (CHARWD R 805) + (CHARHT R 40) + (CHARDP R 2960) + ) +(CHARACTER O 53 (comment angbracketrightBigg) + (CHARWD R 805) + (CHARHT R 40) + (CHARDP R 2960) + ) +(CHARACTER O 54 (comment slashBigg) + (CHARWD R 1277) + (CHARHT R 40) + (CHARDP R 2959) + ) +(CHARACTER O 55 (comment backslashBigg) + (CHARWD R 1277) + (CHARHT R 40) + (CHARDP R 2959) + ) +(CHARACTER O 56 (comment slashBig) + (CHARWD R 811) + (CHARHT R 40) + (CHARDP R 1759) + ) +(CHARACTER O 57 (comment backslashBig) + (CHARWD R 811) + (CHARHT R 40) + (CHARDP R 1759) + ) +(CHARACTER C 0 + (CHARWD R 875) + (CHARHT R 39) + (CHARDP R 1770) + ) +(CHARACTER C 1 + (CHARWD R 875) + (CHARHT R 39) + (CHARDP R 1770) + ) +(CHARACTER C 2 + (CHARWD R 666) + (CHARHT R 39) + (CHARDP R 1760) + ) +(CHARACTER C 3 + (CHARWD R 666) + (CHARHT R 39) + (CHARDP R 1760) + ) +(CHARACTER C 4 + (CHARWD R 666) + (CHARHT R 40) + (CHARDP R 1759) + ) +(CHARACTER C 5 + (CHARWD R 666) + (CHARHT R 40) + (CHARDP R 1759) + ) +(CHARACTER C 6 + (CHARWD R 666) + (CHARHT R 1) + (CHARDP R 601) + ) +(CHARACTER C 7 + (CHARWD R 666) + (CHARHT R 1) + (CHARDP R 601) + ) +(CHARACTER C 8 + (CHARWD R 888) + (CHARDP R 910) + ) +(CHARACTER C 9 + (CHARWD R 888) + (CHARDP R 910) + ) +(CHARACTER O 72 (comment braceleftbt) + (CHARWD R 888) + (CHARHT R 10) + (CHARDP R 899) + ) +(CHARACTER O 73 (comment bracerightbt) + (CHARWD R 888) + (CHARHT R 10) + (CHARDP R 899) + ) +(CHARACTER O 74 (comment braceleftmid) + (CHARWD R 888) + (CHARHT R 10) + (CHARDP R 1810) + ) +(CHARACTER O 75 (comment bracerightmid) + (CHARWD R 888) + (CHARHT R 10) + (CHARDP R 1810) + ) +(CHARACTER O 76 (comment braceex) + (CHARWD R 888) + (CHARHT R 10) + (CHARDP R 310) + ) +(CHARACTER O 77 (comment arrowvertex) + (CHARWD R 666) + (CHARHT R 1) + (CHARDP R 601) + ) +(CHARACTER O 100 (comment parenleftbt) + (CHARWD R 875) + (CHARHT R 50) + (CHARDP R 1759) + ) +(CHARACTER C A + (CHARWD R 875) + (CHARHT R 50) + (CHARDP R 1759) + ) +(CHARACTER C B + (CHARWD R 875) + (CHARHT R 10) + (CHARDP R 610) + ) +(CHARACTER C C + (CHARWD R 875) + (CHARHT R 10) + (CHARDP R 610) + ) +(CHARACTER C D + (CHARWD R 611) + (CHARHT R 40) + (CHARDP R 1759) + ) +(CHARACTER C E + (CHARWD R 611) + (CHARHT R 40) + (CHARDP R 1759) + ) +(CHARACTER C F + (CHARWD R 833) + (CHARDP R 1000) + ) +(CHARACTER C G + (CHARWD R 1111) + (CHARDP R 1400) + ) +(CHARACTER C H + (CHARWD R 472) + (CHARDP R 1111) + (CHARIC R 137) + ) +(CHARACTER C I + (CHARWD R 555) + (CHARDP R 2222) + (CHARIC R 388) + ) +(CHARACTER C J + (CHARWD R 1111) + (CHARDP R 1000) + ) +(CHARACTER C K + (CHARWD R 1511) + (CHARDP R 1400) + ) +(CHARACTER C L + (CHARWD R 1111) + (CHARDP R 1000) + ) +(CHARACTER C M + (CHARWD R 1511) + (CHARDP R 1400) + ) +(CHARACTER C N + (CHARWD R 1111) + (CHARDP R 1000) + ) +(CHARACTER C O + (CHARWD R 1511) + (CHARDP R 1400) + ) +(CHARACTER C P + (CHARWD R 1055) + (CHARDP R 1000) + ) +(CHARACTER C Q + (CHARWD R 944) + (CHARDP R 1000) + ) +(CHARACTER C R + (CHARWD R 472) + (CHARDP R 1111) + (CHARIC R 137) + ) +(CHARACTER C S + (CHARWD R 833) + (CHARDP R 1000) + ) +(CHARACTER C T + (CHARWD R 833) + (CHARDP R 1000) + ) +(CHARACTER C U + (CHARWD R 833) + (CHARDP R 1000) + ) +(CHARACTER C V + (CHARWD R 833) + (CHARDP R 1000) + ) +(CHARACTER C W + (CHARWD R 833) + (CHARDP R 1000) + ) +(CHARACTER C X + (CHARWD R 1444) + (CHARDP R 1400) + ) +(CHARACTER C Y + (CHARWD R 1277) + (CHARDP R 1400) + ) +(CHARACTER C Z + (CHARWD R 555) + (CHARDP R 2222) + (CHARIC R 388) + ) +(CHARACTER O 133 (comment uniondisplay) + (CHARWD R 1111) + (CHARDP R 1400) + ) +(CHARACTER O 134 (comment intersectiondisplay) + (CHARWD R 1111) + (CHARDP R 1400) + ) +(CHARACTER O 135 (comment unionmultidisplay) + (CHARWD R 1111) + (CHARDP R 1400) + ) +(CHARACTER O 136 (comment logicalanddisplay) + (CHARWD R 1111) + (CHARDP R 1400) + ) +(CHARACTER O 137 (comment logicalordisplay) + (CHARWD R 1111) + (CHARDP R 1400) + ) +(CHARACTER O 140 (comment coproducttext) + (CHARWD R 944) + (CHARDP R 1000) + ) +(CHARACTER C a + (CHARWD R 1277) + (CHARDP R 1400) + ) +(CHARACTER C b + (CHARWD R 555) + (CHARHT R 744) + (CHARIC R 6) + ) +(CHARACTER C c + (CHARWD R 1000) + (CHARHT R 772) + (CHARIC R 3) + ) +(CHARACTER C d + (CHARWD R 1444) + (CHARHT R 772) + (CHARIC R 2) + ) +(CHARACTER C e + (CHARWD R 555) + (CHARHT R 722) + ) +(CHARACTER C f + (CHARWD R 1000) + (CHARHT R 750) + ) +(CHARACTER C g + (CHARWD R 1444) + (CHARHT R 750) + ) +(CHARACTER C h + (CHARWD R 472) + (CHARHT R 40) + (CHARDP R 1759) + ) +(CHARACTER C i + (CHARWD R 472) + (CHARHT R 40) + (CHARDP R 1759) + ) +(CHARACTER C j + (CHARWD R 527) + (CHARHT R 40) + (CHARDP R 1759) + ) +(CHARACTER C k + (CHARWD R 527) + (CHARHT R 40) + (CHARDP R 1759) + ) +(CHARACTER C l + (CHARWD R 527) + (CHARHT R 40) + (CHARDP R 1759) + ) +(CHARACTER C m + (CHARWD R 527) + (CHARHT R 40) + (CHARDP R 1759) + ) +(CHARACTER C n + (CHARWD R 666) + (CHARHT R 40) + (CHARDP R 1759) + ) +(CHARACTER C o + (CHARWD R 666) + (CHARHT R 40) + (CHARDP R 1759) + ) +(CHARACTER C p + (CHARWD R 1000) + (CHARHT R 40) + (CHARDP R 1160) + (CHARIC R 20) + ) +(CHARACTER C q + (CHARWD R 1000) + (CHARHT R 40) + (CHARDP R 1760) + (CHARIC R 20) + ) +(CHARACTER C r + (CHARWD R 1000) + (CHARHT R 40) + (CHARDP R 2360) + (CHARIC R 20) + ) +(CHARACTER C s + (CHARWD R 1000) + (CHARHT R 40) + (CHARDP R 2960) + (CHARIC R 20) + ) +(CHARACTER C t + (CHARWD R 1055) + (CHARHT R 20) + (CHARDP R 1800) + ) +(CHARACTER C u + (CHARWD R 1055) + (CHARHT R 20) + (CHARDP R 620) + ) +(CHARACTER C v + (CHARWD R 1055) + (CHARHT R 40) + (CHARDP R 580) + (CHARIC R 21) + ) +(CHARACTER C w + (CHARWD R 777) + (CHARHT R 1) + (CHARDP R 601) + ) +(CHARACTER C x + (CHARWD R 666) + (CHARDP R 600) + ) +(CHARACTER C y + (CHARWD R 666) + (CHARDP R 600) + ) +(CHARACTER C z + (CHARWD R 450) + (CHARHT R 120) + (CHARDP R 214) + (CHARIC R 10) + ) +(CHARACTER O 173 (comment bracehtipdownright) + (CHARWD R 450) + (CHARHT R 120) + (CHARDP R 214) + (CHARIC R 24) + ) +(CHARACTER O 174 (comment bracehtipupleft) + (CHARWD R 450) + (CHARHT R 334) + (CHARIC R 10) + ) +(CHARACTER O 175 (comment bracehtipupright) + (CHARWD R 450) + (CHARHT R 334) + (CHARIC R 24) + ) +(CHARACTER O 176 (comment arrowdbltp) + (CHARWD R 777) + (CHARDP R 600) + ) +(CHARACTER O 177 (comment arrowdblbt) + (CHARWD R 777) + (CHARDP R 599) + ) +(CHARACTER O 200 (comment parenleftBigg) + (CHARWD R 791) + (CHARHT R 40) + (CHARDP R 2959) + ) +(CHARACTER O 237 (comment radical) + (CHARWD R 833) + (CHARHT R 40) + (CHARDP R 960) + (CHARIC R 20) + ) +(CHARACTER O 240 (comment space) + (CHARWD R 333) + ) +(CHARACTER O 241 (comment parenleftbig) + (CHARWD R 458) + (CHARHT R 40) + (CHARDP R 1159) + ) +(CHARACTER O 242 (comment parenrightbig) + (CHARWD R 458) + (CHARHT R 40) + (CHARDP R 1159) + ) +(CHARACTER O 243 (comment bracketleftbig) + (CHARWD R 416) + (CHARHT R 40) + (CHARDP R 1159) + ) +(CHARACTER O 244 (comment bracketrightbig) + (CHARWD R 416) + (CHARHT R 40) + (CHARDP R 1159) + ) +(CHARACTER O 245 (comment floorleftbig) + (CHARWD R 472) + (CHARHT R 40) + (CHARDP R 1159) + ) +(CHARACTER O 246 (comment floorrightbig) + (CHARWD R 472) + (CHARHT R 40) + (CHARDP R 1159) + ) +(CHARACTER O 247 (comment ceilingleftbig) + (CHARWD R 472) + (CHARHT R 40) + (CHARDP R 1159) + ) +(CHARACTER O 250 (comment ceilingrightbig) + (CHARWD R 472) + (CHARHT R 40) + (CHARDP R 1159) + ) +(CHARACTER O 251 (comment braceleftbig) + (CHARWD R 583) + (CHARHT R 40) + (CHARDP R 1159) + ) +(CHARACTER O 252 (comment bracerightbig) + (CHARWD R 583) + (CHARHT R 40) + (CHARDP R 1159) + ) +(CHARACTER O 255 (comment angbracketleftbig) + (CHARWD R 472) + (CHARHT R 40) + (CHARDP R 1160) + ) +(CHARACTER O 256 (comment angbracketrightbig) + (CHARWD R 472) + (CHARHT R 40) + (CHARDP R 1160) + ) +(CHARACTER O 257 (comment vextendsingle) + (CHARWD R 333) + (CHARHT R 21) + (CHARDP R 621) + ) +(CHARACTER O 260 (comment vextenddouble) + (CHARWD R 555) + (CHARHT R 21) + (CHARDP R 621) + ) +(CHARACTER O 261 (comment slashbig) + (CHARWD R 577) + (CHARHT R 40) + (CHARDP R 1159) + ) +(CHARACTER O 262 (comment backslashbig) + (CHARWD R 577) + (CHARHT R 40) + (CHARDP R 1159) + ) +(CHARACTER O 263 (comment parenleftBig) + (CHARWD R 597) + (CHARHT R 40) + (CHARDP R 1759) + ) +(CHARACTER O 264 (comment parenrightBig) + (CHARWD R 597) + (CHARHT R 40) + (CHARDP R 1759) + ) +(CHARACTER O 265 (comment parenleftbigg) + (CHARWD R 736) + (CHARHT R 40) + (CHARDP R 2359) + ) +(CHARACTER O 266 (comment parenrightbigg) + (CHARWD R 736) + (CHARHT R 40) + (CHARDP R 2359) + ) +(CHARACTER O 267 (comment bracketleftbigg) + (CHARWD R 527) + (CHARHT R 40) + (CHARDP R 2359) + ) +(CHARACTER O 270 (comment bracketrightbigg) + (CHARWD R 527) + (CHARHT R 40) + (CHARDP R 2359) + ) +(CHARACTER O 271 (comment floorleftbigg) + (CHARWD R 583) + (CHARHT R 40) + (CHARDP R 2359) + ) +(CHARACTER O 272 (comment floorrightbigg) + (CHARWD R 583) + (CHARHT R 40) + (CHARDP R 2359) + ) +(CHARACTER O 273 (comment ceilingleftbigg) + (CHARWD R 583) + (CHARHT R 40) + (CHARDP R 2359) + ) +(CHARACTER O 274 (comment ceilingrightbigg) + (CHARWD R 583) + (CHARHT R 40) + (CHARDP R 2359) + ) +(CHARACTER O 275 (comment braceleftbigg) + (CHARWD R 750) + (CHARHT R 40) + (CHARDP R 2359) + ) +(CHARACTER O 276 (comment bracerightbigg) + (CHARWD R 750) + (CHARHT R 40) + (CHARDP R 2359) + ) +(CHARACTER O 277 (comment angbracketleftbigg) + (CHARWD R 750) + (CHARHT R 40) + (CHARDP R 2359) + ) +(CHARACTER O 300 (comment angbracketrightbigg) + (CHARWD R 750) + (CHARHT R 40) + (CHARDP R 2359) + ) +(CHARACTER O 301 (comment slashbigg) + (CHARWD R 1044) + (CHARHT R 40) + (CHARDP R 2359) + ) +(CHARACTER O 302 (comment backslashbigg) + (CHARWD R 1044) + (CHARHT R 40) + (CHARDP R 2359) + ) +(CHARACTER O 303 (comment parenleftBigg) + (CHARWD R 791) + (CHARHT R 40) + (CHARDP R 2959) + ) +(CHARACTER O 304 (comment arrowdblbt) + (CHARWD R 777) + (CHARDP R 599) + ) +(CHARACTER O 320 (comment Gamma) + (CHARWD R 625) + (CHARHT R 680) + ) +(CHARACTER O 321 (comment Delta) + (CHARWD R 833) + (CHARHT R 716) + ) +(CHARACTER O 322 (comment Theta) + (CHARWD R 777) + (CHARHT R 705) + (CHARDP R 22) + ) +(CHARACTER O 323 (comment Lambda) + (CHARWD R 694) + (CHARHT R 716) + ) +(CHARACTER O 324 (comment Xi) + (CHARWD R 666) + (CHARHT R 677) + ) +(CHARACTER O 325 (comment Pi) + (CHARWD R 750) + (CHARHT R 680) + ) +(CHARACTER O 326 (comment Sigma) + (CHARWD R 722) + (CHARHT R 683) + ) +(CHARACTER O 327 (comment Upsilon) + (CHARWD R 777) + (CHARHT R 705) + ) +(CHARACTER O 330 (comment Phi) + (CHARWD R 722) + (CHARHT R 683) + ) +(CHARACTER O 331 (comment Psi) + (CHARWD R 777) + (CHARHT R 683) + ) +(CHARACTER O 332 (comment Omega) + (CHARWD R 722) + (CHARHT R 705) + ) diff --git a/metrics/cmmi10.pl b/metrics/cmmi10.pl new file mode 100644 index 000000000..2aceb8c75 --- /dev/null +++ b/metrics/cmmi10.pl @@ -0,0 +1,1286 @@ +(FAMILY cmmi10) +(CODINGSCHEME FONTSPECIFIC) +(DESIGNSIZE R 10.0) +(DESIGNUNITS R 1000) +(COMMENT DESIGNSIZE (1 em) IS IN POINTS) +(COMMENT OTHER DIMENSIONS ARE MULTIPLES OF DESIGNSIZE/1000) +(BOUNDARYCHAR O 201) +(FONTDIMEN + (SLANT R 0.250070) + (SPACE D 333) + (STRETCH D 166) + (SHRINK D 111) + (XHEIGHT D 442) + (QUAD D 1000) + (EXTRASPACE D 111) + ) +(LIGTABLE + (LABEL O 0) (comment Gamma) + (LABEL O 241) (comment Gamma) + (KRN O 75 R -55) (comment slash) + (KRN O 73 R -111) (comment comma) + (KRN O 72 R -111) (comment period) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL O 1) (comment Delta) + (LABEL O 242) (comment Delta) + (KRN O 177 R 166) (comment tie) + (KRN O 304 R 166) (comment tie) + (STOP) + (LABEL O 2) (comment Theta) + (LABEL O 243) (comment Theta) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL O 3) (comment Lambda) + (LABEL O 244) (comment Lambda) + (KRN O 177 R 166) (comment tie) + (KRN O 304 R 166) (comment tie) + (STOP) + (LABEL O 4) (comment Xi) + (LABEL O 245) (comment Xi) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL O 5) (comment Pi) + (LABEL O 246) (comment Pi) + (KRN O 75 R -55) (comment slash) + (KRN O 73 R -55) (comment comma) + (KRN O 72 R -55) (comment period) + (KRN O 177 R 55) (comment tie) + (KRN O 304 R 55) (comment tie) + (STOP) + (LABEL O 6) (comment Sigma) + (LABEL O 247) (comment Sigma) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL O 7) (comment Upsilon) + (LABEL O 250) (comment Upsilon) + (KRN O 75 R -55) (comment slash) + (KRN O 73 R -111) (comment comma) + (KRN O 72 R -111) (comment period) + (KRN O 177 R 55) (comment tie) + (KRN O 304 R 55) (comment tie) + (STOP) + (LABEL O 10) (comment Phi) + (LABEL O 251) (comment Phi) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL O 11) (comment Psi) + (LABEL O 252) (comment Psi) + (KRN O 75 R -55) (comment slash) + (KRN O 73 R -55) (comment comma) + (KRN O 72 R -55) (comment period) + (KRN O 177 R 55) (comment tie) + (KRN O 304 R 55) (comment tie) + (STOP) + (LABEL O 12) (comment Omega) + (LABEL O 255) (comment Omega) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL O 13) (comment alpha) + (LABEL O 256) (comment alpha) + (KRN O 177 R 27) (comment tie) + (KRN O 304 R 27) (comment tie) + (STOP) + (LABEL O 14) (comment beta) + (LABEL O 257) (comment beta) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL O 16) (comment delta) + (LABEL O 261) (comment delta) + (KRN O 73 R -55) (comment comma) + (KRN O 72 R -55) (comment period) + (KRN O 177 R 55) (comment tie) + (KRN O 304 R 55) (comment tie) + (STOP) + (LABEL O 17) (comment epsilon1) + (LABEL O 262) (comment epsilon1) + (KRN O 177 R 55) (comment tie) + (KRN O 304 R 55) (comment tie) + (STOP) + (LABEL O 20) (comment zeta) + (LABEL O 263) (comment zeta) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL O 21) (comment eta) + (LABEL O 264) (comment eta) + (KRN O 177 R 55) (comment tie) + (KRN O 304 R 55) (comment tie) + (STOP) + (LABEL O 22) (comment theta) + (LABEL O 265) (comment theta) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL O 23) (comment iota) + (LABEL O 266) (comment iota) + (KRN O 177 R 55) (comment tie) + (KRN O 304 R 55) (comment tie) + (STOP) + (LABEL O 26) (comment mu) + (LABEL O 271) (comment mu) + (KRN O 177 R 27) (comment tie) + (KRN O 304 R 27) (comment tie) + (STOP) + (LABEL O 27) (comment nu) + (LABEL O 272) (comment nu) + (KRN O 73 R -55) (comment comma) + (KRN O 72 R -55) (comment period) + (KRN O 177 R 27) (comment tie) + (KRN O 304 R 27) (comment tie) + (STOP) + (LABEL O 30) (comment xi) + (LABEL O 273) (comment xi) + (KRN O 177 R 111) (comment tie) + (KRN O 304 R 111) (comment tie) + (STOP) + (LABEL O 32) (comment rho) + (LABEL O 275) (comment rho) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL O 33) (comment sigma) + (LABEL O 276) (comment sigma) + (KRN O 73 R -55) (comment comma) + (KRN O 72 R -55) (comment period) + (STOP) + (LABEL O 34) (comment tau) + (LABEL O 277) (comment tau) + (KRN O 73 R -55) (comment comma) + (KRN O 72 R -55) (comment period) + (KRN O 177 R 27) (comment tie) + (KRN O 304 R 27) (comment tie) + (STOP) + (LABEL O 35) (comment upsilon) + (LABEL O 300) (comment upsilon) + (KRN O 177 R 27) (comment tie) + (KRN O 304 R 27) (comment tie) + (STOP) + (LABEL O 36) (comment phi) + (LABEL O 301) (comment phi) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL O 37) (comment chi) + (LABEL O 302) (comment chi) + (KRN O 177 R 55) (comment tie) + (KRN O 304 R 55) (comment tie) + (STOP) + (LABEL O 40) (comment psi) + (LABEL O 200) (comment psi) + (LABEL O 303) (comment psi) + (KRN O 177 R 111) (comment tie) + (KRN O 304 R 111) (comment tie) + (STOP) + (LABEL O 42) (comment epsilon) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL O 43) (comment theta1) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL O 45) (comment rho1) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL O 46) (comment sigma1) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL O 47) (comment phi1) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL O 75) (comment slash) + (KRN O 1 R -55) (comment Delta) + (KRN O 242 R -55) (comment Delta) + (KRN C A R -55) + (KRN C M R -55) + (KRN C N R -55) + (KRN C Y R 55) + (KRN C Z R -55) + (STOP) + (LABEL O 100) (comment partialdiff) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL C A) + (KRN O 177 R 138) (comment tie) + (KRN O 304 R 138) (comment tie) + (STOP) + (LABEL C B) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL C C) + (KRN O 75 R -27) (comment slash) + (KRN O 73 R -55) (comment comma) + (KRN O 72 R -55) (comment period) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL C D) + (KRN O 177 R 55) (comment tie) + (KRN O 304 R 55) (comment tie) + (STOP) + (LABEL C E) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL C F) + (KRN O 75 R -55) (comment slash) + (KRN O 73 R -111) (comment comma) + (KRN O 72 R -111) (comment period) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL C G) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL C H) + (KRN O 75 R -55) (comment slash) + (KRN O 73 R -55) (comment comma) + (KRN O 72 R -55) (comment period) + (KRN O 177 R 55) (comment tie) + (KRN O 304 R 55) (comment tie) + (STOP) + (LABEL C I) + (KRN O 177 R 111) (comment tie) + (KRN O 304 R 111) (comment tie) + (STOP) + (LABEL C J) + (KRN O 75 R -55) (comment slash) + (KRN O 73 R -111) (comment comma) + (KRN O 72 R -111) (comment period) + (KRN O 177 R 166) (comment tie) + (KRN O 304 R 166) (comment tie) + (STOP) + (LABEL C K) + (KRN O 75 R -55) (comment slash) + (KRN O 73 R -55) (comment comma) + (KRN O 72 R -55) (comment period) + (KRN O 177 R 55) (comment tie) + (KRN O 304 R 55) (comment tie) + (STOP) + (LABEL C L) + (KRN O 177 R 27) (comment tie) + (KRN O 304 R 27) (comment tie) + (STOP) + (LABEL C M) + (KRN O 75 R -55) (comment slash) + (KRN O 73 R -55) (comment comma) + (KRN O 72 R -55) (comment period) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL C N) + (KRN O 75 R -27) (comment slash) + (KRN O 73 R -55) (comment comma) + (KRN O 72 R -55) (comment period) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL C O) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL C P) + (KRN O 75 R -55) (comment slash) + (KRN O 73 R -111) (comment comma) + (KRN O 72 R -111) (comment period) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL C Q) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL C R) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL C S) + (KRN O 75 R -55) (comment slash) + (KRN O 73 R -55) (comment comma) + (KRN O 72 R -55) (comment period) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL C T) + (KRN O 75 R -27) (comment slash) + (KRN O 73 R -55) (comment comma) + (KRN O 72 R -55) (comment period) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL C U) + (KRN O 73 R -111) (comment comma) + (KRN O 72 R -111) (comment period) + (KRN O 75 R -55) (comment slash) + (KRN O 177 R 27) (comment tie) + (KRN O 304 R 27) (comment tie) + (STOP) + (LABEL C V) + (KRN O 73 R -166) (comment comma) + (KRN O 72 R -166) (comment period) + (KRN O 75 R -111) (comment slash) + (STOP) + (LABEL C W) + (KRN O 73 R -166) (comment comma) + (KRN O 72 R -166) (comment period) + (KRN O 75 R -111) (comment slash) + (STOP) + (LABEL C X) + (KRN O 75 R -27) (comment slash) + (KRN O 73 R -55) (comment comma) + (KRN O 72 R -55) (comment period) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL C Y) + (KRN O 73 R -166) (comment comma) + (KRN O 72 R -166) (comment period) + (KRN O 75 R -111) (comment slash) + (STOP) + (LABEL C Z) + (KRN O 75 R -55) (comment slash) + (KRN O 73 R -55) (comment comma) + (KRN O 72 R -55) (comment period) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL O 140) (comment lscript) + (KRN O 177 R 111) (comment tie) + (KRN O 304 R 111) (comment tie) + (STOP) + (LABEL C c) + (KRN O 177 R 55) (comment tie) + (KRN O 304 R 55) (comment tie) + (STOP) + (LABEL C d) + (KRN C Y R 55) + (KRN C Z R -55) + (KRN C j R -111) + (KRN C f R -166) + (KRN O 177 R 166) (comment tie) + (KRN O 304 R 166) (comment tie) + (STOP) + (LABEL C e) + (KRN O 177 R 55) (comment tie) + (KRN O 304 R 55) (comment tie) + (STOP) + (LABEL C f) + (KRN O 73 R -55) (comment comma) + (KRN O 72 R -55) (comment period) + (KRN O 177 R 166) (comment tie) + (KRN O 304 R 166) (comment tie) + (STOP) + (LABEL C g) + (KRN O 177 R 27) (comment tie) + (KRN O 304 R 27) (comment tie) + (STOP) + (LABEL C h) + (KRN O 177 R -27) (comment tie) + (KRN O 304 R -27) (comment tie) + (STOP) + (LABEL C j) + (KRN O 73 R -55) (comment comma) + (KRN O 72 R -55) (comment period) + (STOP) + (LABEL C l) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL C o) + (KRN O 177 R 55) (comment tie) + (KRN O 304 R 55) (comment tie) + (STOP) + (LABEL C p) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL C q) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL C r) + (KRN O 73 R -55) (comment comma) + (KRN O 72 R -55) (comment period) + (KRN O 177 R 55) (comment tie) + (KRN O 304 R 55) (comment tie) + (STOP) + (LABEL C s) + (KRN O 177 R 55) (comment tie) + (KRN O 304 R 55) (comment tie) + (STOP) + (LABEL C t) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL C u) + (KRN O 177 R 27) (comment tie) + (KRN O 304 R 27) (comment tie) + (STOP) + (LABEL C v) + (KRN O 177 R 27) (comment tie) + (KRN O 304 R 27) (comment tie) + (STOP) + (LABEL C w) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL C x) + (KRN O 177 R 27) (comment tie) + (KRN O 304 R 27) (comment tie) + (STOP) + (LABEL C y) + (KRN O 177 R 55) (comment tie) + (KRN O 304 R 55) (comment tie) + (STOP) + (LABEL C z) + (KRN O 177 R 55) (comment tie) + (KRN O 304 R 55) (comment tie) + (STOP) + (LABEL O 173) (comment dotlessi) + (KRN O 177 R 27) (comment tie) + (KRN O 304 R 27) (comment tie) + (STOP) + (LABEL O 174) (comment dotlessj) + (KRN O 177 R 83) (comment tie) + (KRN O 304 R 83) (comment tie) + (STOP) + (LABEL O 175) (comment weierstrass) + (KRN O 177 R 111) (comment tie) + (KRN O 304 R 111) (comment tie) + (STOP) + ) +(CHARACTER O 0 (comment Gamma) + (CHARWD R 615) + (CHARHT R 680) + (CHARIC R 106) + ) +(CHARACTER O 1 (comment Delta) + (CHARWD R 833) + (CHARHT R 716) + ) +(CHARACTER O 2 (comment Theta) + (CHARWD R 762) + (CHARHT R 705) + (CHARDP R 22) + ) +(CHARACTER O 3 (comment Lambda) + (CHARWD R 694) + (CHARHT R 716) + ) +(CHARACTER O 4 (comment Xi) + (CHARWD R 742) + (CHARHT R 677) + (CHARIC R 35) + ) +(CHARACTER O 5 (comment Pi) + (CHARWD R 831) + (CHARHT R 680) + (CHARIC R 49) + ) +(CHARACTER O 6 (comment Sigma) + (CHARWD R 779) + (CHARHT R 683) + (CHARIC R 27) + ) +(CHARACTER O 7 (comment Upsilon) + (CHARWD R 583) + (CHARHT R 705) + (CHARIC R 118) + ) +(CHARACTER O 10 (comment Phi) + (CHARWD R 666) + (CHARHT R 683) + ) +(CHARACTER O 11 (comment Psi) + (CHARWD R 612) + (CHARHT R 683) + (CHARIC R 81) + ) +(CHARACTER O 12 (comment Omega) + (CHARWD R 772) + (CHARHT R 705) + (CHARIC R 14) + ) +(CHARACTER O 13 (comment alpha) + (CHARWD R 639) + (CHARHT R 442) + (CHARDP R 11) + ) +(CHARACTER O 14 (comment beta) + (CHARWD R 565) + (CHARHT R 706) + (CHARDP R 194) + (CHARIC R 10) + ) +(CHARACTER O 15 (comment gamma) + (CHARWD R 517) + (CHARHT R 442) + (CHARDP R 215) + (CHARIC R 26) + ) +(CHARACTER O 16 (comment delta) + (CHARWD R 444) + (CHARHT R 711) + (CHARDP R 12) + (CHARIC R 8) + ) +(CHARACTER O 17 (comment epsilon1) + (CHARWD R 405) + (CHARHT R 431) + (CHARDP R 11) + ) +(CHARACTER O 20 (comment zeta) + (CHARWD R 437) + (CHARHT R 697) + (CHARDP R 205) + (CHARIC R 37) + ) +(CHARACTER O 21 (comment eta) + (CHARWD R 496) + (CHARHT R 442) + (CHARDP R 216) + ) +(CHARACTER O 22 (comment theta) + (CHARWD R 469) + (CHARHT R 705) + (CHARDP R 11) + ) +(CHARACTER O 23 (comment iota) + (CHARWD R 353) + (CHARHT R 442) + (CHARDP R 11) + ) +(CHARACTER O 24 (comment kappa) + (CHARWD R 576) + (CHARHT R 442) + (CHARDP R 11) + ) +(CHARACTER O 25 (comment lambda) + (CHARWD R 583) + (CHARHT R 694) + (CHARDP R 13) + ) +(CHARACTER O 26 (comment mu) + (CHARWD R 602) + (CHARHT R 442) + (CHARDP R 216) + ) +(CHARACTER O 27 (comment nu) + (CHARWD R 493) + (CHARHT R 442) + (CHARIC R 31) + ) +(CHARACTER O 30 (comment xi) + (CHARWD R 437) + (CHARHT R 697) + (CHARDP R 205) + (CHARIC R 9) + ) +(CHARACTER O 31 (comment pi) + (CHARWD R 570) + (CHARHT R 431) + (CHARDP R 11) + ) +(CHARACTER O 32 (comment rho) + (CHARWD R 517) + (CHARHT R 442) + (CHARDP R 216) + ) +(CHARACTER O 33 (comment sigma) + (CHARWD R 571) + (CHARHT R 431) + (CHARDP R 11) + ) +(CHARACTER O 34 (comment tau) + (CHARWD R 437) + (CHARHT R 431) + (CHARDP R 12) + (CHARIC R 74) + ) +(CHARACTER O 35 (comment upsilon) + (CHARWD R 540) + (CHARHT R 442) + (CHARDP R 11) + ) +(CHARACTER O 36 (comment phi) + (CHARWD R 595) + (CHARHT R 694) + (CHARDP R 205) + ) +(CHARACTER O 37 (comment chi) + (CHARWD R 625) + (CHARHT R 442) + (CHARDP R 205) + ) +(CHARACTER O 40 (comment psi) + (CHARWD R 651) + (CHARHT R 694) + (CHARDP R 205) + ) +(CHARACTER O 41 (comment omega) + (CHARWD R 622) + (CHARHT R 442) + (CHARDP R 11) + ) +(CHARACTER O 42 (comment epsilon) + (CHARWD R 466) + (CHARHT R 453) + (CHARDP R 22) + ) +(CHARACTER O 43 (comment theta1) + (CHARWD R 591) + (CHARHT R 705) + (CHARDP R 11) + ) +(CHARACTER O 44 (comment pi1) + (CHARWD R 828) + (CHARHT R 431) + (CHARDP R 11) + ) +(CHARACTER O 45 (comment rho1) + (CHARWD R 517) + (CHARHT R 442) + (CHARDP R 194) + ) +(CHARACTER O 46 (comment sigma1) + (CHARWD R 362) + (CHARHT R 442) + (CHARDP R 108) + (CHARIC R 47) + ) +(CHARACTER O 47 (comment phi1) + (CHARWD R 654) + (CHARHT R 442) + (CHARDP R 218) + ) +(CHARACTER O 50 (comment arrowlefttophalf) + (CHARWD R 1000) + (CHARHT R 511) + ) +(CHARACTER O 51 (comment arrowleftbothalf) + (CHARWD R 1000) + (CHARHT R 270) + (CHARDP R 11) + ) +(CHARACTER O 52 (comment arrowrighttophalf) + (CHARWD R 1000) + (CHARHT R 511) + ) +(CHARACTER O 53 (comment arrowrightbothalf) + (CHARWD R 1000) + (CHARHT R 270) + (CHARDP R 11) + ) +(CHARACTER O 54 (comment arrowhookleft) + (CHARWD R 277) + (CHARHT R 464) + ) +(CHARACTER O 55 (comment arrowhookright) + (CHARWD R 277) + (CHARHT R 464) + ) +(CHARACTER O 56 (comment triangleright) + (CHARWD R 500) + (CHARHT R 505) + (CHARDP R 5) + ) +(CHARACTER O 57 (comment triangleleft) + (CHARWD R 500) + (CHARHT R 505) + (CHARDP R 5) + ) +(CHARACTER C 0 + (CHARWD R 500) + (CHARHT R 453) + (CHARDP R 22) + ) +(CHARACTER C 1 + (CHARWD R 500) + (CHARHT R 453) + ) +(CHARACTER C 2 + (CHARWD R 500) + (CHARHT R 453) + ) +(CHARACTER C 3 + (CHARWD R 500) + (CHARHT R 453) + (CHARDP R 216) + ) +(CHARACTER C 4 + (CHARWD R 500) + (CHARHT R 464) + (CHARDP R 194) + ) +(CHARACTER C 5 + (CHARWD R 500) + (CHARHT R 453) + (CHARDP R 216) + ) +(CHARACTER C 6 + (CHARWD R 500) + (CHARHT R 666) + (CHARDP R 22) + ) +(CHARACTER C 7 + (CHARWD R 500) + (CHARHT R 463) + (CHARDP R 216) + ) +(CHARACTER C 8 + (CHARWD R 500) + (CHARHT R 666) + (CHARDP R 22) + ) +(CHARACTER C 9 + (CHARWD R 500) + (CHARHT R 453) + (CHARDP R 216) + ) +(CHARACTER O 72 (comment period) + (CHARWD R 277) + (CHARHT R 106) + ) +(CHARACTER O 73 (comment comma) + (CHARWD R 277) + (CHARHT R 106) + (CHARDP R 193) + ) +(CHARACTER O 74 (comment less) + (CHARWD R 777) + (CHARHT R 540) + (CHARDP R 40) + ) +(CHARACTER O 75 (comment slash) + (CHARWD R 500) + (CHARHT R 750) + (CHARDP R 250) + ) +(CHARACTER O 76 (comment greater) + (CHARWD R 777) + (CHARHT R 540) + (CHARDP R 40) + ) +(CHARACTER O 77 (comment star) + (CHARWD R 500) + (CHARHT R 485) + ) +(CHARACTER O 100 (comment partialdiff) + (CHARWD R 530) + (CHARHT R 716) + (CHARDP R 22) + (CHARIC R 36) + ) +(CHARACTER C A + (CHARWD R 750) + (CHARHT R 716) + ) +(CHARACTER C B + (CHARWD R 758) + (CHARHT R 683) + ) +(CHARACTER C C + (CHARWD R 714) + (CHARHT R 705) + (CHARDP R 22) + (CHARIC R 46) + ) +(CHARACTER C D + (CHARWD R 827) + (CHARHT R 683) + ) +(CHARACTER C E + (CHARWD R 738) + (CHARHT R 680) + (CHARIC R 26) + ) +(CHARACTER C F + (CHARWD R 643) + (CHARHT R 680) + (CHARIC R 106) + ) +(CHARACTER C G + (CHARWD R 786) + (CHARHT R 705) + (CHARDP R 22) + ) +(CHARACTER C H + (CHARWD R 831) + (CHARHT R 683) + (CHARIC R 50) + ) +(CHARACTER C I + (CHARWD R 439) + (CHARHT R 683) + (CHARIC R 58) + ) +(CHARACTER C J + (CHARWD R 554) + (CHARHT R 683) + (CHARDP R 22) + (CHARIC R 79) + ) +(CHARACTER C K + (CHARWD R 849) + (CHARHT R 683) + (CHARIC R 40) + ) +(CHARACTER C L + (CHARWD R 680) + (CHARHT R 683) + ) +(CHARACTER C M + (CHARWD R 970) + (CHARHT R 683) + (CHARIC R 74) + ) +(CHARACTER C N + (CHARWD R 803) + (CHARHT R 683) + (CHARIC R 78) + ) +(CHARACTER C O + (CHARWD R 762) + (CHARHT R 705) + (CHARDP R 22) + ) +(CHARACTER C P + (CHARWD R 642) + (CHARHT R 683) + (CHARIC R 112) + ) +(CHARACTER C Q + (CHARWD R 790) + (CHARHT R 705) + (CHARDP R 194) + ) +(CHARACTER C R + (CHARWD R 759) + (CHARHT R 683) + (CHARDP R 22) + ) +(CHARACTER C S + (CHARWD R 613) + (CHARHT R 705) + (CHARDP R 22) + (CHARIC R 32) + ) +(CHARACTER C T + (CHARWD R 584) + (CHARHT R 677) + (CHARIC R 120) + ) +(CHARACTER C U + (CHARWD R 682) + (CHARHT R 683) + (CHARDP R 22) + (CHARIC R 78) + ) +(CHARACTER C V + (CHARWD R 583) + (CHARHT R 683) + (CHARDP R 22) + (CHARIC R 186) + ) +(CHARACTER C W + (CHARWD R 944) + (CHARHT R 683) + (CHARDP R 22) + (CHARIC R 104) + ) +(CHARACTER C X + (CHARWD R 828) + (CHARHT R 683) + (CHARIC R 23) + ) +(CHARACTER C Y + (CHARWD R 580) + (CHARHT R 683) + (CHARIC R 182) + ) +(CHARACTER C Z + (CHARWD R 682) + (CHARHT R 683) + (CHARIC R 41) + ) +(CHARACTER O 133 (comment flat) + (CHARWD R 388) + (CHARHT R 750) + (CHARDP R 22) + ) +(CHARACTER O 134 (comment natural) + (CHARWD R 388) + (CHARHT R 728) + (CHARDP R 217) + ) +(CHARACTER O 135 (comment sharp) + (CHARWD R 388) + (CHARHT R 716) + (CHARDP R 216) + ) +(CHARACTER O 136 (comment slurbelow) + (CHARWD R 1000) + (CHARHT R 371) + ) +(CHARACTER O 137 (comment slurabove) + (CHARWD R 1000) + (CHARHT R 381) + ) +(CHARACTER O 140 (comment lscript) + (CHARWD R 416) + (CHARHT R 705) + (CHARDP R 12) + ) +(CHARACTER C a + (CHARWD R 528) + (CHARHT R 442) + (CHARDP R 11) + ) +(CHARACTER C b + (CHARWD R 429) + (CHARHT R 694) + (CHARDP R 11) + ) +(CHARACTER C c + (CHARWD R 432) + (CHARHT R 442) + (CHARDP R 11) + ) +(CHARACTER C d + (CHARWD R 520) + (CHARHT R 694) + (CHARDP R 11) + ) +(CHARACTER C e + (CHARWD R 465) + (CHARHT R 442) + (CHARDP R 11) + ) +(CHARACTER C f + (CHARWD R 489) + (CHARHT R 705) + (CHARDP R 205) + (CHARIC R 63) + ) +(CHARACTER C g + (CHARWD R 476) + (CHARHT R 442) + (CHARDP R 205) + ) +(CHARACTER C h + (CHARWD R 576) + (CHARHT R 694) + (CHARDP R 11) + ) +(CHARACTER C i + (CHARWD R 344) + (CHARHT R 661) + (CHARDP R 11) + ) +(CHARACTER C j + (CHARWD R 411) + (CHARHT R 661) + (CHARDP R 205) + ) +(CHARACTER C k + (CHARWD R 520) + (CHARHT R 694) + (CHARDP R 11) + ) +(CHARACTER C l + (CHARWD R 298) + (CHARHT R 694) + (CHARDP R 11) + ) +(CHARACTER C m + (CHARWD R 878) + (CHARHT R 442) + (CHARDP R 11) + ) +(CHARACTER C n + (CHARWD R 600) + (CHARHT R 442) + (CHARDP R 11) + ) +(CHARACTER C o + (CHARWD R 484) + (CHARHT R 442) + (CHARDP R 11) + ) +(CHARACTER C p + (CHARWD R 503) + (CHARHT R 442) + (CHARDP R 194) + ) +(CHARACTER C q + (CHARWD R 446) + (CHARHT R 442) + (CHARDP R 194) + (CHARIC R 6) + ) +(CHARACTER C r + (CHARWD R 451) + (CHARHT R 442) + (CHARDP R 11) + ) +(CHARACTER C s + (CHARWD R 468) + (CHARHT R 442) + (CHARDP R 11) + ) +(CHARACTER C t + (CHARWD R 361) + (CHARHT R 626) + (CHARDP R 11) + ) +(CHARACTER C u + (CHARWD R 572) + (CHARHT R 442) + (CHARDP R 11) + ) +(CHARACTER C v + (CHARWD R 484) + (CHARHT R 442) + (CHARDP R 11) + ) +(CHARACTER C w + (CHARWD R 715) + (CHARHT R 442) + (CHARDP R 11) + ) +(CHARACTER C x + (CHARWD R 571) + (CHARHT R 442) + (CHARDP R 11) + ) +(CHARACTER C y + (CHARWD R 490) + (CHARHT R 442) + (CHARDP R 205) + ) +(CHARACTER C z + (CHARWD R 465) + (CHARHT R 442) + (CHARDP R 11) + (CHARIC R 2) + ) +(CHARACTER O 173 (comment dotlessi) + (CHARWD R 322) + (CHARHT R 442) + (CHARDP R 11) + ) +(CHARACTER O 174 (comment dotlessj) + (CHARWD R 384) + (CHARHT R 442) + (CHARDP R 205) + ) +(CHARACTER O 175 (comment weierstrass) + (CHARWD R 636) + (CHARHT R 453) + (CHARDP R 216) + ) +(CHARACTER O 176 (comment vector) + (CHARWD R 500) + (CHARHT R 714) + (CHARIC R 125) + ) +(CHARACTER O 177 (comment tie) + (CHARWD R 277) + (CHARHT R 665) + (CHARIC R 373) + ) +(CHARACTER O 200 (comment psi) + (CHARWD R 651) + (CHARHT R 694) + (CHARDP R 205) + ) +(CHARACTER O 240 (comment space) + (CHARWD R 333) + ) +(CHARACTER O 241 (comment Gamma) + (CHARWD R 615) + (CHARHT R 680) + (CHARIC R 106) + ) +(CHARACTER O 242 (comment Delta) + (CHARWD R 833) + (CHARHT R 716) + ) +(CHARACTER O 243 (comment Theta) + (CHARWD R 762) + (CHARHT R 705) + (CHARDP R 22) + ) +(CHARACTER O 244 (comment Lambda) + (CHARWD R 694) + (CHARHT R 716) + ) +(CHARACTER O 245 (comment Xi) + (CHARWD R 742) + (CHARHT R 677) + (CHARIC R 35) + ) +(CHARACTER O 246 (comment Pi) + (CHARWD R 831) + (CHARHT R 680) + (CHARIC R 49) + ) +(CHARACTER O 247 (comment Sigma) + (CHARWD R 779) + (CHARHT R 683) + (CHARIC R 27) + ) +(CHARACTER O 250 (comment Upsilon) + (CHARWD R 583) + (CHARHT R 705) + (CHARIC R 118) + ) +(CHARACTER O 251 (comment Phi) + (CHARWD R 666) + (CHARHT R 683) + ) +(CHARACTER O 252 (comment Psi) + (CHARWD R 612) + (CHARHT R 683) + (CHARIC R 81) + ) +(CHARACTER O 255 (comment Omega) + (CHARWD R 772) + (CHARHT R 705) + (CHARIC R 14) + ) +(CHARACTER O 256 (comment alpha) + (CHARWD R 639) + (CHARHT R 442) + (CHARDP R 11) + ) +(CHARACTER O 257 (comment beta) + (CHARWD R 565) + (CHARHT R 706) + (CHARDP R 194) + (CHARIC R 10) + ) +(CHARACTER O 260 (comment gamma) + (CHARWD R 517) + (CHARHT R 442) + (CHARDP R 215) + (CHARIC R 26) + ) +(CHARACTER O 261 (comment delta) + (CHARWD R 444) + (CHARHT R 711) + (CHARDP R 12) + (CHARIC R 8) + ) +(CHARACTER O 262 (comment epsilon1) + (CHARWD R 405) + (CHARHT R 431) + (CHARDP R 11) + ) +(CHARACTER O 263 (comment zeta) + (CHARWD R 437) + (CHARHT R 697) + (CHARDP R 205) + (CHARIC R 37) + ) +(CHARACTER O 264 (comment eta) + (CHARWD R 496) + (CHARHT R 442) + (CHARDP R 216) + ) +(CHARACTER O 265 (comment theta) + (CHARWD R 469) + (CHARHT R 705) + (CHARDP R 11) + ) +(CHARACTER O 266 (comment iota) + (CHARWD R 353) + (CHARHT R 442) + (CHARDP R 11) + ) +(CHARACTER O 267 (comment kappa) + (CHARWD R 576) + (CHARHT R 442) + (CHARDP R 11) + ) +(CHARACTER O 270 (comment lambda) + (CHARWD R 583) + (CHARHT R 694) + (CHARDP R 13) + ) +(CHARACTER O 271 (comment mu) + (CHARWD R 602) + (CHARHT R 442) + (CHARDP R 216) + ) +(CHARACTER O 272 (comment nu) + (CHARWD R 493) + (CHARHT R 442) + (CHARIC R 31) + ) +(CHARACTER O 273 (comment xi) + (CHARWD R 437) + (CHARHT R 697) + (CHARDP R 205) + (CHARIC R 9) + ) +(CHARACTER O 274 (comment pi) + (CHARWD R 570) + (CHARHT R 431) + (CHARDP R 11) + ) +(CHARACTER O 275 (comment rho) + (CHARWD R 517) + (CHARHT R 442) + (CHARDP R 216) + ) +(CHARACTER O 276 (comment sigma) + (CHARWD R 571) + (CHARHT R 431) + (CHARDP R 11) + ) +(CHARACTER O 277 (comment tau) + (CHARWD R 437) + (CHARHT R 431) + (CHARDP R 12) + (CHARIC R 74) + ) +(CHARACTER O 300 (comment upsilon) + (CHARWD R 540) + (CHARHT R 442) + (CHARDP R 11) + ) +(CHARACTER O 301 (comment phi) + (CHARWD R 595) + (CHARHT R 694) + (CHARDP R 205) + ) +(CHARACTER O 302 (comment chi) + (CHARWD R 625) + (CHARHT R 442) + (CHARDP R 205) + ) +(CHARACTER O 303 (comment psi) + (CHARWD R 651) + (CHARHT R 694) + (CHARDP R 205) + ) +(CHARACTER O 304 (comment tie) + (CHARWD R 277) + (CHARHT R 665) + (CHARIC R 373) + ) diff --git a/metrics/cmr10.pl b/metrics/cmr10.pl new file mode 100644 index 000000000..7d7712c31 --- /dev/null +++ b/metrics/cmr10.pl @@ -0,0 +1,1082 @@ +(FAMILY cmr10) +(CODINGSCHEME FONTSPECIFIC) +(DESIGNSIZE R 10.0) +(DESIGNUNITS R 1000) +(COMMENT DESIGNSIZE (1 em) IS IN POINTS) +(COMMENT OTHER DIMENSIONS ARE MULTIPLES OF DESIGNSIZE/1000) +(BOUNDARYCHAR O 201) +(FONTDIMEN + (SLANT R 0.000000) + (SPACE D 333) + (STRETCH D 166) + (SHRINK D 111) + (XHEIGHT D 431) + (QUAD D 1000) + (EXTRASPACE D 111) + ) +(LIGTABLE + (LABEL O 13) (comment ff) + (LABEL O 256) (comment ff) + (LIG C l O 17) + (LIG C i O 16) + (KRN O 47 R 77) (comment quoteright) + (KRN O 77 R 77) (comment question) + (KRN O 41 R 77) (comment exclam) + (KRN O 51 R 77) (comment parenright) + (KRN O 135 R 77) (comment bracketright) + (STOP) + (LABEL O 34) (comment oslash) + (LABEL O 277) (comment oslash) + (KRN O 34 R 27) (comment oslash) + (KRN O 277 R 27) (comment oslash) + (KRN C w R -27) + (KRN C y R -27) + (KRN C j R 55) + (KRN C v R -27) + (KRN C q R 27) + (KRN C c R 27) + (KRN C d R 27) + (KRN C x R -27) + (KRN C o R 27) + (KRN C e R 27) + (STOP) + (LABEL O 37) (comment Oslash) + (LABEL O 302) (comment Oslash) + (KRN C Y R -27) + (KRN C V R -27) + (KRN C A R -27) + (KRN C W R -27) + (KRN C X R -27) + (STOP) + (LABEL O 40) (comment suppress) + (LABEL O 200) (comment suppress) + (LABEL O 303) (comment suppress) + (KRN C l R -277) + (KRN C L R -319) + (STOP) + (LABEL O 41) (comment exclam) + (LIG O 140 O 74) + (STOP) + (LABEL O 47) (comment quoteright) + (LIG O 47 O 42) + (KRN O 77 R 111) (comment question) + (KRN O 41 R 111) (comment exclam) + (STOP) + (LABEL O 55) (comment hyphen) + (LIG O 55 O 173) + (STOP) + (LABEL O 77) (comment question) + (LIG O 140 O 76) + (STOP) + (LABEL C A) + (KRN O 37 R -27) (comment Oslash) + (KRN O 302 R -27) (comment Oslash) + (KRN C t R -27) + (KRN C C R -27) + (KRN C O R -27) + (KRN C G R -27) + (KRN C U R -27) + (KRN C Q R -27) + (KRN C T R -83) + (KRN C Y R -83) + (KRN C V R -111) + (KRN C W R -111) + (STOP) + (LABEL C D) + (KRN C X R -27) + (KRN C W R -27) + (KRN C A R -27) + (KRN C V R -27) + (KRN C Y R -27) + (STOP) + (LABEL C F) + (KRN O 34 R -83) (comment oslash) + (KRN O 277 R -83) (comment oslash) + (KRN O 37 R -27) (comment Oslash) + (KRN O 302 R -27) (comment Oslash) + (KRN C o R -83) + (KRN C e R -83) + (KRN C u R -83) + (KRN C r R -83) + (KRN C a R -83) + (KRN C A R -111) + (KRN C O R -27) + (KRN C C R -27) + (KRN C G R -27) + (KRN C Q R -27) + (STOP) + (LABEL C I) + (KRN C I R 27) + (STOP) + (LABEL C K) + (KRN O 37 R -27) (comment Oslash) + (KRN O 302 R -27) (comment Oslash) + (KRN C O R -27) + (KRN C C R -27) + (KRN C G R -27) + (KRN C Q R -27) + (STOP) + (LABEL C L) + (KRN C T R -83) + (KRN C Y R -83) + (KRN C V R -111) + (KRN C W R -111) + (STOP) + (LABEL C O) + (KRN C X R -27) + (KRN C W R -27) + (KRN C A R -27) + (KRN C V R -27) + (KRN C Y R -27) + (STOP) + (LABEL C P) + (KRN O 34 R -27) (comment oslash) + (KRN O 277 R -27) (comment oslash) + (KRN C A R -83) + (KRN C o R -27) + (KRN C e R -27) + (KRN C a R -27) + (KRN O 56 R -83) (comment period) + (KRN O 54 R -83) (comment comma) + (STOP) + (LABEL C R) + (KRN O 37 R -27) (comment Oslash) + (KRN O 302 R -27) (comment Oslash) + (KRN C t R -27) + (KRN C C R -27) + (KRN C O R -27) + (KRN C G R -27) + (KRN C U R -27) + (KRN C Q R -27) + (KRN C T R -83) + (KRN C Y R -83) + (KRN C V R -111) + (KRN C W R -111) + (STOP) + (LABEL C T) + (KRN O 34 R -83) (comment oslash) + (KRN O 277 R -83) (comment oslash) + (KRN C y R -27) + (KRN C e R -83) + (KRN C o R -83) + (KRN C r R -83) + (KRN C a R -83) + (KRN C A R -83) + (KRN C u R -83) + (STOP) + (LABEL C V) + (KRN O 34 R -83) (comment oslash) + (KRN O 277 R -83) (comment oslash) + (KRN O 37 R -27) (comment Oslash) + (KRN O 302 R -27) (comment Oslash) + (KRN C o R -83) + (KRN C e R -83) + (KRN C u R -83) + (KRN C r R -83) + (KRN C a R -83) + (KRN C A R -111) + (KRN C O R -27) + (KRN C C R -27) + (KRN C G R -27) + (KRN C Q R -27) + (STOP) + (LABEL C W) + (KRN O 34 R -83) (comment oslash) + (KRN O 277 R -83) (comment oslash) + (KRN O 37 R -27) (comment Oslash) + (KRN O 302 R -27) (comment Oslash) + (KRN C o R -83) + (KRN C e R -83) + (KRN C u R -83) + (KRN C r R -83) + (KRN C a R -83) + (KRN C A R -111) + (KRN C O R -27) + (KRN C C R -27) + (KRN C G R -27) + (KRN C Q R -27) + (STOP) + (LABEL C X) + (KRN O 37 R -27) (comment Oslash) + (KRN O 302 R -27) (comment Oslash) + (KRN C O R -27) + (KRN C C R -27) + (KRN C G R -27) + (KRN C Q R -27) + (STOP) + (LABEL C Y) + (KRN O 34 R -83) (comment oslash) + (KRN O 277 R -83) (comment oslash) + (KRN C e R -83) + (KRN C o R -83) + (KRN C r R -83) + (KRN C a R -83) + (KRN C A R -83) + (KRN C u R -83) + (STOP) + (LABEL O 140) (comment quoteleft) + (LIG O 140 O 134) + (STOP) + (LABEL C a) + (KRN C v R -27) + (KRN C j R 55) + (KRN C y R -27) + (KRN C w R -27) + (STOP) + (LABEL C b) + (KRN O 34 R 27) (comment oslash) + (KRN O 277 R 27) (comment oslash) + (KRN C e R 27) + (KRN C o R 27) + (KRN C x R -27) + (KRN C d R 27) + (KRN C c R 27) + (KRN C q R 27) + (KRN C v R -27) + (KRN C j R 55) + (KRN C y R -27) + (KRN C w R -27) + (STOP) + (LABEL C c) + (KRN C h R -27) + (KRN C k R -27) + (STOP) + (LABEL C f) + (LIG C f O 13) + (LIG C l O 15) + (LIG C i O 14) + (KRN O 47 R 77) (comment quoteright) + (KRN O 77 R 77) (comment question) + (KRN O 41 R 77) (comment exclam) + (KRN O 51 R 77) (comment parenright) + (KRN O 135 R 77) (comment bracketright) + (STOP) + (LABEL C g) + (KRN C j R 27) + (STOP) + (LABEL C h) + (KRN C t R -27) + (KRN C u R -27) + (KRN C b R -27) + (KRN C y R -27) + (KRN C v R -27) + (KRN C w R -27) + (STOP) + (LABEL C k) + (KRN O 34 R -27) (comment oslash) + (KRN O 277 R -27) (comment oslash) + (KRN C a R -27) + (KRN C e R -27) + (KRN C o R -27) + (KRN C c R -27) + (STOP) + (LABEL C m) + (KRN C t R -27) + (KRN C u R -27) + (KRN C b R -27) + (KRN C y R -27) + (KRN C v R -27) + (KRN C w R -27) + (STOP) + (LABEL C n) + (KRN C t R -27) + (KRN C u R -27) + (KRN C b R -27) + (KRN C y R -27) + (KRN C v R -27) + (KRN C w R -27) + (STOP) + (LABEL C o) + (KRN O 34 R 27) (comment oslash) + (KRN O 277 R 27) (comment oslash) + (KRN C e R 27) + (KRN C o R 27) + (KRN C x R -27) + (KRN C d R 27) + (KRN C c R 27) + (KRN C q R 27) + (KRN C v R -27) + (KRN C j R 55) + (KRN C y R -27) + (KRN C w R -27) + (STOP) + (LABEL C p) + (KRN O 34 R 27) (comment oslash) + (KRN O 277 R 27) (comment oslash) + (KRN C e R 27) + (KRN C o R 27) + (KRN C x R -27) + (KRN C d R 27) + (KRN C c R 27) + (KRN C q R 27) + (KRN C v R -27) + (KRN C j R 55) + (KRN C y R -27) + (KRN C w R -27) + (STOP) + (LABEL C t) + (KRN C y R -27) + (KRN C w R -27) + (STOP) + (LABEL C u) + (KRN C w R -27) + (STOP) + (LABEL C v) + (KRN O 34 R -27) (comment oslash) + (KRN O 277 R -27) (comment oslash) + (KRN C a R -27) + (KRN C e R -27) + (KRN C o R -27) + (KRN C c R -27) + (STOP) + (LABEL C w) + (KRN O 34 R -27) (comment oslash) + (KRN O 277 R -27) (comment oslash) + (KRN C e R -27) + (KRN C a R -27) + (KRN C o R -27) + (KRN C c R -27) + (STOP) + (LABEL C y) + (KRN O 34 R -27) (comment oslash) + (KRN O 277 R -27) (comment oslash) + (KRN C o R -27) + (KRN C e R -27) + (KRN C a R -27) + (KRN O 56 R -83) (comment period) + (KRN O 54 R -83) (comment comma) + (STOP) + (LABEL O 173) (comment endash) + (LIG O 55 O 174) + (STOP) + ) +(CHARACTER O 0 (comment Gamma) + (CHARWD R 625) + (CHARHT R 680) + ) +(CHARACTER O 1 (comment Delta) + (CHARWD R 833) + (CHARHT R 716) + ) +(CHARACTER O 2 (comment Theta) + (CHARWD R 777) + (CHARHT R 705) + (CHARDP R 22) + ) +(CHARACTER O 3 (comment Lambda) + (CHARWD R 694) + (CHARHT R 716) + ) +(CHARACTER O 4 (comment Xi) + (CHARWD R 666) + (CHARHT R 677) + ) +(CHARACTER O 5 (comment Pi) + (CHARWD R 750) + (CHARHT R 680) + ) +(CHARACTER O 6 (comment Sigma) + (CHARWD R 722) + (CHARHT R 683) + ) +(CHARACTER O 7 (comment Upsilon) + (CHARWD R 777) + (CHARHT R 705) + ) +(CHARACTER O 10 (comment Phi) + (CHARWD R 722) + (CHARHT R 683) + ) +(CHARACTER O 11 (comment Psi) + (CHARWD R 777) + (CHARHT R 683) + ) +(CHARACTER O 12 (comment Omega) + (CHARWD R 722) + (CHARHT R 705) + ) +(CHARACTER O 13 (comment ff) + (CHARWD R 583) + (CHARHT R 705) + (CHARIC R 45) + ) +(CHARACTER O 14 (comment fi) + (CHARWD R 555) + (CHARHT R 705) + ) +(CHARACTER O 15 (comment fl) + (CHARWD R 555) + (CHARHT R 705) + ) +(CHARACTER O 16 (comment ffi) + (CHARWD R 833) + (CHARHT R 705) + ) +(CHARACTER O 17 (comment ffl) + (CHARWD R 833) + (CHARHT R 705) + ) +(CHARACTER O 20 (comment dotlessi) + (CHARWD R 277) + (CHARHT R 442) + ) +(CHARACTER O 21 (comment dotlessj) + (CHARWD R 305) + (CHARHT R 442) + (CHARDP R 205) + ) +(CHARACTER O 22 (comment grave) + (CHARWD R 500) + (CHARHT R 698) + ) +(CHARACTER O 23 (comment acute) + (CHARWD R 500) + (CHARHT R 698) + ) +(CHARACTER O 24 (comment caron) + (CHARWD R 500) + (CHARHT R 638) + ) +(CHARACTER O 25 (comment breve) + (CHARWD R 500) + (CHARHT R 694) + ) +(CHARACTER O 26 (comment macron) + (CHARWD R 500) + (CHARHT R 590) + ) +(CHARACTER O 27 (comment ring) + (CHARWD R 750) + (CHARHT R 716) + ) +(CHARACTER O 30 (comment cedilla) + (CHARWD R 444) + (CHARDP R 203) + ) +(CHARACTER O 31 (comment germandbls) + (CHARWD R 500) + (CHARHT R 705) + (CHARDP R 11) + ) +(CHARACTER O 32 (comment ae) + (CHARWD R 722) + (CHARHT R 448) + (CHARDP R 11) + ) +(CHARACTER O 33 (comment oe) + (CHARWD R 777) + (CHARHT R 448) + (CHARDP R 11) + ) +(CHARACTER O 34 (comment oslash) + (CHARWD R 500) + (CHARHT R 534) + (CHARDP R 102) + ) +(CHARACTER O 35 (comment AE) + (CHARWD R 902) + (CHARHT R 683) + ) +(CHARACTER O 36 (comment OE) + (CHARWD R 1013) + (CHARHT R 705) + (CHARDP R 22) + ) +(CHARACTER O 37 (comment Oslash) + (CHARWD R 777) + (CHARHT R 739) + (CHARDP R 56) + ) +(CHARACTER O 40 (comment suppress) + (CHARWD R 277) + (CHARHT R 392) + ) +(CHARACTER O 41 (comment exclam) + (CHARWD R 277) + (CHARHT R 716) + ) +(CHARACTER O 42 (comment quotedblright) + (CHARWD R 500) + (CHARHT R 694) + ) +(CHARACTER O 43 (comment numbersign) + (CHARWD R 833) + (CHARHT R 694) + (CHARDP R 194) + ) +(CHARACTER O 44 (comment dollar) + (CHARWD R 500) + (CHARHT R 750) + (CHARDP R 56) + ) +(CHARACTER O 45 (comment percent) + (CHARWD R 833) + (CHARHT R 750) + (CHARDP R 56) + ) +(CHARACTER O 46 (comment ampersand) + (CHARWD R 777) + (CHARHT R 716) + (CHARDP R 22) + ) +(CHARACTER O 47 (comment quoteright) + (CHARWD R 277) + (CHARHT R 694) + ) +(CHARACTER O 50 (comment parenleft) + (CHARWD R 388) + (CHARHT R 750) + (CHARDP R 250) + ) +(CHARACTER O 51 (comment parenright) + (CHARWD R 388) + (CHARHT R 750) + (CHARDP R 250) + ) +(CHARACTER O 52 (comment asterisk) + (CHARWD R 500) + (CHARHT R 750) + ) +(CHARACTER O 53 (comment plus) + (CHARWD R 777) + (CHARHT R 583) + (CHARDP R 83) + ) +(CHARACTER O 54 (comment comma) + (CHARWD R 277) + (CHARHT R 106) + (CHARDP R 193) + ) +(CHARACTER O 55 (comment hyphen) + (CHARWD R 333) + (CHARHT R 245) + ) +(CHARACTER O 56 (comment period) + (CHARWD R 277) + (CHARHT R 106) + ) +(CHARACTER O 57 (comment slash) + (CHARWD R 500) + (CHARHT R 750) + (CHARDP R 250) + ) +(CHARACTER C 0 + (CHARWD R 500) + (CHARHT R 666) + (CHARDP R 22) + ) +(CHARACTER C 1 + (CHARWD R 500) + (CHARHT R 666) + ) +(CHARACTER C 2 + (CHARWD R 500) + (CHARHT R 666) + ) +(CHARACTER C 3 + (CHARWD R 500) + (CHARHT R 666) + (CHARDP R 22) + ) +(CHARACTER C 4 + (CHARWD R 500) + (CHARHT R 677) + ) +(CHARACTER C 5 + (CHARWD R 500) + (CHARHT R 666) + (CHARDP R 22) + ) +(CHARACTER C 6 + (CHARWD R 500) + (CHARHT R 666) + (CHARDP R 22) + ) +(CHARACTER C 7 + (CHARWD R 500) + (CHARHT R 676) + (CHARDP R 22) + ) +(CHARACTER C 8 + (CHARWD R 500) + (CHARHT R 666) + (CHARDP R 22) + ) +(CHARACTER C 9 + (CHARWD R 500) + (CHARHT R 666) + (CHARDP R 22) + ) +(CHARACTER O 72 (comment colon) + (CHARWD R 277) + (CHARHT R 431) + ) +(CHARACTER O 73 (comment semicolon) + (CHARWD R 277) + (CHARHT R 431) + (CHARDP R 193) + ) +(CHARACTER O 74 (comment exclamdown) + (CHARWD R 277) + (CHARHT R 500) + (CHARDP R 216) + ) +(CHARACTER O 75 (comment equal) + (CHARWD R 777) + (CHARHT R 367) + ) +(CHARACTER O 76 (comment questiondown) + (CHARWD R 472) + (CHARHT R 500) + (CHARDP R 205) + ) +(CHARACTER O 77 (comment question) + (CHARWD R 472) + (CHARHT R 705) + ) +(CHARACTER O 100 (comment at) + (CHARWD R 777) + (CHARHT R 705) + (CHARDP R 11) + ) +(CHARACTER C A + (CHARWD R 750) + (CHARHT R 716) + ) +(CHARACTER C B + (CHARWD R 708) + (CHARHT R 683) + ) +(CHARACTER C C + (CHARWD R 722) + (CHARHT R 705) + (CHARDP R 22) + ) +(CHARACTER C D + (CHARWD R 763) + (CHARHT R 683) + ) +(CHARACTER C E + (CHARWD R 680) + (CHARHT R 680) + ) +(CHARACTER C F + (CHARWD R 652) + (CHARHT R 680) + ) +(CHARACTER C G + (CHARWD R 784) + (CHARHT R 705) + (CHARDP R 22) + ) +(CHARACTER C H + (CHARWD R 750) + (CHARHT R 683) + ) +(CHARACTER C I + (CHARWD R 361) + (CHARHT R 683) + ) +(CHARACTER C J + (CHARWD R 513) + (CHARHT R 683) + (CHARDP R 22) + ) +(CHARACTER C K + (CHARWD R 777) + (CHARHT R 683) + ) +(CHARACTER C L + (CHARWD R 625) + (CHARHT R 683) + ) +(CHARACTER C M + (CHARWD R 916) + (CHARHT R 683) + ) +(CHARACTER C N + (CHARWD R 750) + (CHARHT R 683) + ) +(CHARACTER C O + (CHARWD R 777) + (CHARHT R 705) + (CHARDP R 22) + ) +(CHARACTER C P + (CHARWD R 680) + (CHARHT R 683) + ) +(CHARACTER C Q + (CHARWD R 777) + (CHARHT R 705) + (CHARDP R 194) + ) +(CHARACTER C R + (CHARWD R 736) + (CHARHT R 683) + (CHARDP R 22) + ) +(CHARACTER C S + (CHARWD R 555) + (CHARHT R 705) + (CHARDP R 22) + ) +(CHARACTER C T + (CHARWD R 722) + (CHARHT R 677) + ) +(CHARACTER C U + (CHARWD R 750) + (CHARHT R 683) + (CHARDP R 22) + ) +(CHARACTER C V + (CHARWD R 750) + (CHARHT R 683) + (CHARDP R 22) + ) +(CHARACTER C W + (CHARWD R 1027) + (CHARHT R 683) + (CHARDP R 22) + ) +(CHARACTER C X + (CHARWD R 750) + (CHARHT R 683) + ) +(CHARACTER C Y + (CHARWD R 750) + (CHARHT R 683) + ) +(CHARACTER C Z + (CHARWD R 611) + (CHARHT R 683) + ) +(CHARACTER O 133 (comment bracketleft) + (CHARWD R 277) + (CHARHT R 750) + (CHARDP R 250) + ) +(CHARACTER O 134 (comment quotedblleft) + (CHARWD R 500) + (CHARHT R 693) + ) +(CHARACTER O 135 (comment bracketright) + (CHARWD R 277) + (CHARHT R 750) + (CHARDP R 250) + ) +(CHARACTER O 136 (comment circumflex) + (CHARWD R 500) + (CHARHT R 694) + ) +(CHARACTER O 137 (comment dotaccent) + (CHARWD R 277) + (CHARHT R 669) + ) +(CHARACTER O 140 (comment quoteleft) + (CHARWD R 277) + (CHARHT R 693) + ) +(CHARACTER C a + (CHARWD R 500) + (CHARHT R 448) + (CHARDP R 11) + ) +(CHARACTER C b + (CHARWD R 555) + (CHARHT R 694) + (CHARDP R 11) + ) +(CHARACTER C c + (CHARWD R 444) + (CHARHT R 448) + (CHARDP R 11) + ) +(CHARACTER C d + (CHARWD R 555) + (CHARHT R 694) + (CHARDP R 11) + ) +(CHARACTER C e + (CHARWD R 444) + (CHARHT R 448) + (CHARDP R 11) + ) +(CHARACTER C f + (CHARWD R 305) + (CHARHT R 705) + (CHARIC R 52) + ) +(CHARACTER C g + (CHARWD R 500) + (CHARHT R 453) + (CHARDP R 206) + ) +(CHARACTER C h + (CHARWD R 555) + (CHARHT R 694) + ) +(CHARACTER C i + (CHARWD R 277) + (CHARHT R 669) + ) +(CHARACTER C j + (CHARWD R 305) + (CHARHT R 669) + (CHARDP R 205) + ) +(CHARACTER C k + (CHARWD R 527) + (CHARHT R 694) + ) +(CHARACTER C l + (CHARWD R 277) + (CHARHT R 694) + ) +(CHARACTER C m + (CHARWD R 833) + (CHARHT R 442) + ) +(CHARACTER C n + (CHARWD R 555) + (CHARHT R 442) + ) +(CHARACTER C o + (CHARWD R 500) + (CHARHT R 448) + (CHARDP R 11) + ) +(CHARACTER C p + (CHARWD R 555) + (CHARHT R 442) + (CHARDP R 194) + ) +(CHARACTER C q + (CHARWD R 527) + (CHARHT R 442) + (CHARDP R 194) + ) +(CHARACTER C r + (CHARWD R 391) + (CHARHT R 442) + ) +(CHARACTER C s + (CHARWD R 394) + (CHARHT R 448) + (CHARDP R 11) + ) +(CHARACTER C t + (CHARWD R 388) + (CHARHT R 615) + (CHARDP R 11) + ) +(CHARACTER C u + (CHARWD R 555) + (CHARHT R 442) + (CHARDP R 11) + ) +(CHARACTER C v + (CHARWD R 527) + (CHARHT R 431) + (CHARDP R 11) + ) +(CHARACTER C w + (CHARWD R 722) + (CHARHT R 431) + (CHARDP R 11) + ) +(CHARACTER C x + (CHARWD R 527) + (CHARHT R 431) + ) +(CHARACTER C y + (CHARWD R 527) + (CHARHT R 431) + (CHARDP R 205) + ) +(CHARACTER C z + (CHARWD R 444) + (CHARHT R 431) + ) +(CHARACTER O 173 (comment endash) + (CHARWD R 500) + (CHARHT R 277) + ) +(CHARACTER O 174 (comment emdash) + (CHARWD R 1000) + (CHARHT R 277) + ) +(CHARACTER O 175 (comment hungarumlaut) + (CHARWD R 500) + (CHARHT R 699) + ) +(CHARACTER O 176 (comment tilde) + (CHARWD R 500) + (CHARHT R 668) + ) +(CHARACTER O 177 (comment dieresis) + (CHARWD R 500) + (CHARHT R 669) + ) +(CHARACTER O 200 (comment suppress) + (CHARWD R 277) + (CHARHT R 392) + ) +(CHARACTER O 240 (comment space) + (CHARWD R 333) + ) +(CHARACTER O 241 (comment Gamma) + (CHARWD R 625) + (CHARHT R 680) + ) +(CHARACTER O 242 (comment Delta) + (CHARWD R 833) + (CHARHT R 716) + ) +(CHARACTER O 243 (comment Theta) + (CHARWD R 777) + (CHARHT R 705) + (CHARDP R 22) + ) +(CHARACTER O 244 (comment Lambda) + (CHARWD R 694) + (CHARHT R 716) + ) +(CHARACTER O 245 (comment Xi) + (CHARWD R 666) + (CHARHT R 677) + ) +(CHARACTER O 246 (comment Pi) + (CHARWD R 750) + (CHARHT R 680) + ) +(CHARACTER O 247 (comment Sigma) + (CHARWD R 722) + (CHARHT R 683) + ) +(CHARACTER O 250 (comment Upsilon) + (CHARWD R 777) + (CHARHT R 705) + ) +(CHARACTER O 251 (comment Phi) + (CHARWD R 722) + (CHARHT R 683) + ) +(CHARACTER O 252 (comment Psi) + (CHARWD R 777) + (CHARHT R 683) + ) +(CHARACTER O 253 (comment sfthyphen) + (CHARWD R 166) + (CHARHT R 245) + (CHARIC R 110) + ) +(CHARACTER O 254 (comment nbspace) + (CHARWD R 333) + ) +(CHARACTER O 255 (comment Omega) + (CHARWD R 722) + (CHARHT R 705) + ) +(CHARACTER O 256 (comment ff) + (CHARWD R 583) + (CHARHT R 705) + (CHARIC R 45) + ) +(CHARACTER O 257 (comment fi) + (CHARWD R 555) + (CHARHT R 705) + ) +(CHARACTER O 260 (comment fl) + (CHARWD R 555) + (CHARHT R 705) + ) +(CHARACTER O 261 (comment ffi) + (CHARWD R 833) + (CHARHT R 705) + ) +(CHARACTER O 262 (comment ffl) + (CHARWD R 833) + (CHARHT R 705) + ) +(CHARACTER O 263 (comment dotlessi) + (CHARWD R 277) + (CHARHT R 442) + ) +(CHARACTER O 264 (comment dotlessj) + (CHARWD R 305) + (CHARHT R 442) + (CHARDP R 205) + ) +(CHARACTER O 265 (comment grave) + (CHARWD R 500) + (CHARHT R 698) + ) +(CHARACTER O 266 (comment acute) + (CHARWD R 500) + (CHARHT R 698) + ) +(CHARACTER O 267 (comment caron) + (CHARWD R 500) + (CHARHT R 638) + ) +(CHARACTER O 270 (comment breve) + (CHARWD R 500) + (CHARHT R 694) + ) +(CHARACTER O 271 (comment macron) + (CHARWD R 500) + (CHARHT R 590) + ) +(CHARACTER O 272 (comment ring) + (CHARWD R 750) + (CHARHT R 716) + ) +(CHARACTER O 273 (comment cedilla) + (CHARWD R 444) + (CHARDP R 203) + ) +(CHARACTER O 274 (comment germandbls) + (CHARWD R 500) + (CHARHT R 705) + (CHARDP R 11) + ) +(CHARACTER O 275 (comment ae) + (CHARWD R 722) + (CHARHT R 448) + (CHARDP R 11) + ) +(CHARACTER O 276 (comment oe) + (CHARWD R 777) + (CHARHT R 448) + (CHARDP R 11) + ) +(CHARACTER O 277 (comment oslash) + (CHARWD R 500) + (CHARHT R 534) + (CHARDP R 102) + ) +(CHARACTER O 300 (comment AE) + (CHARWD R 902) + (CHARHT R 683) + ) +(CHARACTER O 301 (comment OE) + (CHARWD R 1013) + (CHARHT R 705) + (CHARDP R 22) + ) +(CHARACTER O 302 (comment Oslash) + (CHARWD R 777) + (CHARHT R 739) + (CHARDP R 56) + ) +(CHARACTER O 303 (comment suppress) + (CHARWD R 277) + (CHARHT R 392) + ) +(CHARACTER O 304 (comment dieresis) + (CHARWD R 500) + (CHARHT R 669) + ) diff --git a/metrics/cmsy10.pl b/metrics/cmsy10.pl new file mode 100644 index 000000000..9cfc46566 --- /dev/null +++ b/metrics/cmsy10.pl @@ -0,0 +1,894 @@ +(FAMILY cmsy10) +(CODINGSCHEME FONTSPECIFIC) +(DESIGNSIZE R 10.0) +(DESIGNUNITS R 1000) +(COMMENT DESIGNSIZE (1 em) IS IN POINTS) +(COMMENT OTHER DIMENSIONS ARE MULTIPLES OF DESIGNSIZE/1000) +(BOUNDARYCHAR O 201) +(FONTDIMEN + (SLANT R 0.250070) + (SPACE D 333) + (STRETCH D 166) + (SHRINK D 111) + (XHEIGHT D 400) + (QUAD D 1000) + (EXTRASPACE D 111) + ) +(LIGTABLE + (LABEL C A) + (KRN C 0 R 194) + (STOP) + (LABEL C B) + (KRN C 0 R 138) + (STOP) + (LABEL C C) + (KRN C 0 R 138) + (STOP) + (LABEL C D) + (KRN C 0 R 83) + (STOP) + (LABEL C E) + (KRN C 0 R 111) + (STOP) + (LABEL C F) + (KRN C 0 R 111) + (STOP) + (LABEL C G) + (KRN C 0 R 111) + (STOP) + (LABEL C H) + (KRN C 0 R 111) + (STOP) + (LABEL C I) + (KRN C 0 R 27) + (STOP) + (LABEL C J) + (KRN C 0 R 166) + (STOP) + (LABEL C K) + (KRN C 0 R 55) + (STOP) + (LABEL C L) + (KRN C 0 R 138) + (STOP) + (LABEL C M) + (KRN C 0 R 138) + (STOP) + (LABEL C N) + (KRN C 0 R 83) + (STOP) + (LABEL C O) + (KRN C 0 R 111) + (STOP) + (LABEL C P) + (KRN C 0 R 83) + (STOP) + (LABEL C Q) + (KRN C 0 R 111) + (STOP) + (LABEL C R) + (KRN C 0 R 83) + (STOP) + (LABEL C S) + (KRN C 0 R 138) + (STOP) + (LABEL C T) + (KRN C 0 R 27) + (STOP) + (LABEL C U) + (KRN C 0 R 83) + (STOP) + (LABEL C V) + (KRN C 0 R 27) + (STOP) + (LABEL C W) + (KRN C 0 R 83) + (STOP) + (LABEL C X) + (KRN C 0 R 138) + (STOP) + (LABEL C Y) + (KRN C 0 R 83) + (STOP) + (LABEL C Z) + (KRN C 0 R 138) + (STOP) + ) +(CHARACTER O 0 (comment minus) + (CHARWD R 777) + (CHARHT R 270) + ) +(CHARACTER O 1 (comment periodcentered) + (CHARWD R 277) + (CHARHT R 303) + ) +(CHARACTER O 2 (comment multiply) + (CHARWD R 777) + (CHARHT R 491) + ) +(CHARACTER O 3 (comment asteriskmath) + (CHARWD R 500) + (CHARHT R 465) + ) +(CHARACTER O 4 (comment divide) + (CHARWD R 777) + (CHARHT R 529) + (CHARDP R 29) + ) +(CHARACTER O 5 (comment diamondmath) + (CHARWD R 500) + (CHARHT R 488) + ) +(CHARACTER O 6 (comment plusminus) + (CHARWD R 777) + (CHARHT R 666) + ) +(CHARACTER O 7 (comment minusplus) + (CHARWD R 777) + (CHARHT R 500) + (CHARDP R 166) + ) +(CHARACTER O 10 (comment circleplus) + (CHARWD R 777) + (CHARHT R 583) + (CHARDP R 83) + ) +(CHARACTER O 11 (comment circleminus) + (CHARWD R 777) + (CHARHT R 583) + (CHARDP R 83) + ) +(CHARACTER O 12 (comment circlemultiply) + (CHARWD R 777) + (CHARHT R 583) + (CHARDP R 83) + ) +(CHARACTER O 13 (comment circledivide) + (CHARWD R 777) + (CHARHT R 583) + (CHARDP R 83) + ) +(CHARACTER O 14 (comment circledot) + (CHARWD R 777) + (CHARHT R 583) + (CHARDP R 83) + ) +(CHARACTER O 15 (comment circlecopyrt) + (CHARWD R 1000) + (CHARHT R 716) + (CHARDP R 216) + ) +(CHARACTER O 16 (comment openbullet) + (CHARWD R 500) + (CHARHT R 444) + ) +(CHARACTER O 17 (comment bullet) + (CHARWD R 500) + (CHARHT R 444) + ) +(CHARACTER O 20 (comment equivasymptotic) + (CHARWD R 777) + (CHARHT R 484) + ) +(CHARACTER O 21 (comment equivalence) + (CHARWD R 777) + (CHARHT R 464) + ) +(CHARACTER O 22 (comment reflexsubset) + (CHARWD R 777) + (CHARHT R 636) + (CHARDP R 137) + ) +(CHARACTER O 23 (comment reflexsuperset) + (CHARWD R 777) + (CHARHT R 636) + (CHARDP R 137) + ) +(CHARACTER O 24 (comment lessequal) + (CHARWD R 777) + (CHARHT R 636) + (CHARDP R 137) + ) +(CHARACTER O 25 (comment greaterequal) + (CHARWD R 777) + (CHARHT R 636) + (CHARDP R 137) + ) +(CHARACTER O 26 (comment precedesequal) + (CHARWD R 777) + (CHARHT R 636) + (CHARDP R 137) + ) +(CHARACTER O 27 (comment followsequal) + (CHARWD R 777) + (CHARHT R 636) + (CHARDP R 137) + ) +(CHARACTER O 30 (comment similar) + (CHARWD R 777) + (CHARHT R 367) + ) +(CHARACTER O 31 (comment approxequal) + (CHARWD R 777) + (CHARHT R 483) + ) +(CHARACTER O 32 (comment propersubset) + (CHARWD R 777) + (CHARHT R 540) + (CHARDP R 40) + ) +(CHARACTER O 33 (comment propersuperset) + (CHARWD R 777) + (CHARHT R 540) + (CHARDP R 40) + ) +(CHARACTER O 34 (comment lessmuch) + (CHARWD R 1000) + (CHARHT R 566) + (CHARDP R 66) + ) +(CHARACTER O 35 (comment greatermuch) + (CHARWD R 1000) + (CHARHT R 566) + (CHARDP R 66) + ) +(CHARACTER O 36 (comment precedes) + (CHARWD R 777) + (CHARHT R 539) + (CHARDP R 40) + ) +(CHARACTER O 37 (comment follows) + (CHARWD R 777) + (CHARHT R 539) + (CHARDP R 40) + ) +(CHARACTER O 40 (comment arrowleft) + (CHARWD R 1000) + (CHARHT R 511) + (CHARDP R 11) + ) +(CHARACTER O 41 (comment arrowright) + (CHARWD R 1000) + (CHARHT R 511) + (CHARDP R 11) + ) +(CHARACTER O 42 (comment arrowup) + (CHARWD R 500) + (CHARHT R 693) + (CHARDP R 194) + ) +(CHARACTER O 43 (comment arrowdown) + (CHARWD R 500) + (CHARHT R 694) + (CHARDP R 193) + ) +(CHARACTER O 44 (comment arrowboth) + (CHARWD R 1000) + (CHARHT R 511) + (CHARDP R 11) + ) +(CHARACTER O 45 (comment arrownortheast) + (CHARWD R 1000) + (CHARHT R 719) + (CHARDP R 195) + ) +(CHARACTER O 46 (comment arrowsoutheast) + (CHARWD R 1000) + (CHARHT R 695) + (CHARDP R 219) + ) +(CHARACTER O 47 (comment similarequal) + (CHARWD R 777) + (CHARHT R 464) + ) +(CHARACTER O 50 (comment arrowdblleft) + (CHARWD R 1000) + (CHARHT R 525) + (CHARDP R 25) + ) +(CHARACTER O 51 (comment arrowdblright) + (CHARWD R 1000) + (CHARHT R 525) + (CHARDP R 25) + ) +(CHARACTER O 52 (comment arrowdblup) + (CHARWD R 611) + (CHARHT R 693) + (CHARDP R 194) + ) +(CHARACTER O 53 (comment arrowdbldown) + (CHARWD R 611) + (CHARHT R 694) + (CHARDP R 193) + ) +(CHARACTER O 54 (comment arrowdblboth) + (CHARWD R 1000) + (CHARHT R 525) + (CHARDP R 25) + ) +(CHARACTER O 55 (comment arrownorthwest) + (CHARWD R 1000) + (CHARHT R 719) + (CHARDP R 195) + ) +(CHARACTER O 56 (comment arrowsouthwest) + (CHARWD R 1000) + (CHARHT R 695) + (CHARDP R 219) + ) +(CHARACTER O 57 (comment proportional) + (CHARWD R 777) + (CHARHT R 442) + (CHARDP R 11) + ) +(CHARACTER C 0 + (CHARWD R 275) + (CHARHT R 559) + ) +(CHARACTER C 1 + (CHARWD R 1000) + (CHARHT R 442) + (CHARDP R 11) + ) +(CHARACTER C 2 + (CHARWD R 666) + (CHARHT R 540) + (CHARDP R 40) + ) +(CHARACTER C 3 + (CHARWD R 666) + (CHARHT R 540) + (CHARDP R 40) + ) +(CHARACTER C 4 + (CHARWD R 888) + (CHARHT R 716) + ) +(CHARACTER C 5 + (CHARWD R 888) + (CHARHT R 500) + (CHARDP R 216) + ) +(CHARACTER C 6 + (CHARWD R 0) + (CHARHT R 716) + (CHARDP R 216) + (CHARIC R 638) + ) +(CHARACTER C 7 + (CHARWD R 0) + (CHARHT R 436) + (CHARIC R 123) + ) +(CHARACTER C 8 + (CHARWD R 555) + (CHARHT R 694) + (CHARDP R 22) + (CHARIC R 1) + ) +(CHARACTER C 9 + (CHARWD R 555) + (CHARHT R 694) + ) +(CHARACTER O 72 (comment logicalnot) + (CHARWD R 666) + (CHARHT R 356) + ) +(CHARACTER O 73 (comment emptyset) + (CHARWD R 500) + (CHARHT R 772) + (CHARDP R 78) + ) +(CHARACTER O 74 (comment Rfractur) + (CHARWD R 722) + (CHARHT R 716) + (CHARDP R 22) + ) +(CHARACTER O 75 (comment Ifractur) + (CHARWD R 722) + (CHARHT R 705) + (CHARDP R 11) + ) +(CHARACTER O 76 (comment latticetop) + (CHARWD R 777) + (CHARHT R 668) + ) +(CHARACTER O 77 (comment perpendicular) + (CHARWD R 777) + (CHARHT R 668) + ) +(CHARACTER O 100 (comment aleph) + (CHARWD R 611) + (CHARHT R 693) + ) +(CHARACTER C A + (CHARWD R 798) + (CHARHT R 722) + (CHARDP R 50) + ) +(CHARACTER C B + (CHARWD R 656) + (CHARHT R 706) + (CHARDP R 22) + (CHARIC R 9) + ) +(CHARACTER C C + (CHARWD R 526) + (CHARHT R 705) + (CHARDP R 24) + (CHARIC R 8) + ) +(CHARACTER C D + (CHARWD R 771) + (CHARHT R 683) + ) +(CHARACTER C E + (CHARWD R 527) + (CHARHT R 705) + (CHARDP R 22) + (CHARIC R 38) + ) +(CHARACTER C F + (CHARWD R 719) + (CHARHT R 685) + (CHARDP R 32) + (CHARIC R 111) + ) +(CHARACTER C G + (CHARWD R 594) + (CHARHT R 705) + (CHARDP R 119) + (CHARIC R 7) + ) +(CHARACTER C H + (CHARWD R 844) + (CHARHT R 683) + (CHARDP R 49) + ) +(CHARACTER C I + (CHARWD R 544) + (CHARHT R 683) + (CHARIC R 91) + ) +(CHARACTER C J + (CHARWD R 677) + (CHARHT R 683) + (CHARDP R 119) + (CHARIC R 163) + ) +(CHARACTER C K + (CHARWD R 761) + (CHARHT R 705) + (CHARDP R 22) + ) +(CHARACTER C L + (CHARWD R 689) + (CHARHT R 705) + (CHARDP R 22) + ) +(CHARACTER C M + (CHARWD R 1200) + (CHARHT R 705) + (CHARDP R 50) + ) +(CHARACTER C N + (CHARWD R 820) + (CHARHT R 775) + (CHARDP R 50) + (CHARIC R 158) + ) +(CHARACTER C O + (CHARWD R 796) + (CHARHT R 705) + (CHARDP R 22) + ) +(CHARACTER C P + (CHARWD R 695) + (CHARHT R 683) + (CHARDP R 50) + (CHARIC R 38) + ) +(CHARACTER C Q + (CHARWD R 816) + (CHARHT R 705) + (CHARDP R 124) + ) +(CHARACTER C R + (CHARWD R 847) + (CHARHT R 683) + (CHARDP R 22) + ) +(CHARACTER C S + (CHARWD R 605) + (CHARHT R 705) + (CHARDP R 22) + (CHARIC R 37) + ) +(CHARACTER C T + (CHARWD R 544) + (CHARHT R 717) + (CHARDP R 68) + (CHARIC R 290) + ) +(CHARACTER C U + (CHARWD R 625) + (CHARHT R 683) + (CHARDP R 28) + (CHARIC R 63) + ) +(CHARACTER C V + (CHARWD R 612) + (CHARHT R 683) + (CHARDP R 45) + (CHARIC R 48) + ) +(CHARACTER C W + (CHARWD R 987) + (CHARHT R 683) + (CHARDP R 45) + (CHARIC R 49) + ) +(CHARACTER C X + (CHARWD R 713) + (CHARHT R 683) + (CHARIC R 95) + ) +(CHARACTER C Y + (CHARWD R 668) + (CHARHT R 683) + (CHARDP R 135) + (CHARIC R 49) + ) +(CHARACTER C Z + (CHARWD R 724) + (CHARHT R 683) + (CHARIC R 43) + ) +(CHARACTER O 133 (comment union) + (CHARWD R 666) + (CHARHT R 598) + (CHARDP R 22) + ) +(CHARACTER O 134 (comment intersection) + (CHARWD R 666) + (CHARHT R 598) + (CHARDP R 22) + ) +(CHARACTER O 135 (comment unionmulti) + (CHARWD R 666) + (CHARHT R 598) + (CHARDP R 22) + ) +(CHARACTER O 136 (comment logicaland) + (CHARWD R 666) + (CHARHT R 598) + (CHARDP R 22) + ) +(CHARACTER O 137 (comment logicalor) + (CHARWD R 666) + (CHARHT R 598) + (CHARDP R 22) + ) +(CHARACTER O 140 (comment turnstileleft) + (CHARWD R 611) + (CHARHT R 694) + ) +(CHARACTER C a + (CHARWD R 611) + (CHARHT R 694) + ) +(CHARACTER C b + (CHARWD R 444) + (CHARHT R 750) + (CHARDP R 250) + ) +(CHARACTER C c + (CHARWD R 444) + (CHARHT R 750) + (CHARDP R 250) + ) +(CHARACTER C d + (CHARWD R 444) + (CHARHT R 750) + (CHARDP R 250) + ) +(CHARACTER C e + (CHARWD R 444) + (CHARHT R 750) + (CHARDP R 250) + ) +(CHARACTER C f + (CHARWD R 500) + (CHARHT R 750) + (CHARDP R 250) + ) +(CHARACTER C g + (CHARWD R 500) + (CHARHT R 750) + (CHARDP R 250) + ) +(CHARACTER C h + (CHARWD R 388) + (CHARHT R 750) + (CHARDP R 250) + ) +(CHARACTER C i + (CHARWD R 388) + (CHARHT R 750) + (CHARDP R 250) + ) +(CHARACTER C j + (CHARWD R 277) + (CHARHT R 750) + (CHARDP R 250) + ) +(CHARACTER C k + (CHARWD R 500) + (CHARHT R 750) + (CHARDP R 250) + ) +(CHARACTER C l + (CHARWD R 500) + (CHARHT R 771) + (CHARDP R 271) + ) +(CHARACTER C m + (CHARWD R 611) + (CHARHT R 771) + (CHARDP R 271) + ) +(CHARACTER C n + (CHARWD R 500) + (CHARHT R 750) + (CHARDP R 250) + ) +(CHARACTER C o + (CHARWD R 277) + (CHARHT R 583) + (CHARDP R 83) + ) +(CHARACTER C p + (CHARWD R 833) + (CHARHT R 40) + (CHARDP R 960) + (CHARIC R 20) + ) +(CHARACTER C q + (CHARWD R 750) + (CHARHT R 683) + ) +(CHARACTER C r + (CHARWD R 833) + (CHARHT R 683) + (CHARDP R 33) + ) +(CHARACTER C s + (CHARWD R 416) + (CHARHT R 716) + (CHARDP R 216) + (CHARIC R 56) + ) +(CHARACTER C t + (CHARWD R 666) + (CHARHT R 598) + ) +(CHARACTER C u + (CHARWD R 666) + (CHARHT R 598) + ) +(CHARACTER C v + (CHARWD R 777) + (CHARHT R 636) + (CHARDP R 137) + ) +(CHARACTER C w + (CHARWD R 777) + (CHARHT R 636) + (CHARDP R 137) + ) +(CHARACTER C x + (CHARWD R 444) + (CHARHT R 705) + (CHARDP R 205) + ) +(CHARACTER C y + (CHARWD R 444) + (CHARHT R 705) + (CHARDP R 216) + ) +(CHARACTER C z + (CHARWD R 444) + (CHARHT R 705) + (CHARDP R 205) + ) +(CHARACTER O 173 (comment paragraph) + (CHARWD R 611) + (CHARHT R 694) + (CHARDP R 194) + ) +(CHARACTER O 174 (comment club) + (CHARWD R 777) + (CHARHT R 727) + (CHARDP R 130) + ) +(CHARACTER O 175 (comment diamond) + (CHARWD R 777) + (CHARHT R 727) + (CHARDP R 163) + ) +(CHARACTER O 176 (comment heart) + (CHARWD R 777) + (CHARHT R 716) + (CHARDP R 33) + ) +(CHARACTER O 177 (comment spade) + (CHARWD R 777) + (CHARHT R 727) + (CHARDP R 130) + ) +(CHARACTER O 200 (comment arrowleft) + (CHARWD R 1000) + (CHARHT R 511) + (CHARDP R 11) + ) +(CHARACTER O 240 (comment space) + (CHARWD R 333) + ) +(CHARACTER O 241 (comment minus) + (CHARWD R 777) + (CHARHT R 270) + ) +(CHARACTER O 242 (comment periodcentered) + (CHARWD R 277) + (CHARHT R 303) + ) +(CHARACTER O 243 (comment multiply) + (CHARWD R 777) + (CHARHT R 491) + ) +(CHARACTER O 244 (comment asteriskmath) + (CHARWD R 500) + (CHARHT R 465) + ) +(CHARACTER O 245 (comment divide) + (CHARWD R 777) + (CHARHT R 529) + (CHARDP R 29) + ) +(CHARACTER O 246 (comment diamondmath) + (CHARWD R 500) + (CHARHT R 488) + ) +(CHARACTER O 247 (comment plusminus) + (CHARWD R 777) + (CHARHT R 666) + ) +(CHARACTER O 250 (comment minusplus) + (CHARWD R 777) + (CHARHT R 500) + (CHARDP R 166) + ) +(CHARACTER O 251 (comment circleplus) + (CHARWD R 777) + (CHARHT R 583) + (CHARDP R 83) + ) +(CHARACTER O 252 (comment circleminus) + (CHARWD R 777) + (CHARHT R 583) + (CHARDP R 83) + ) +(CHARACTER O 255 (comment circlemultiply) + (CHARWD R 777) + (CHARHT R 583) + (CHARDP R 83) + ) +(CHARACTER O 256 (comment circledivide) + (CHARWD R 777) + (CHARHT R 583) + (CHARDP R 83) + ) +(CHARACTER O 257 (comment circledot) + (CHARWD R 777) + (CHARHT R 583) + (CHARDP R 83) + ) +(CHARACTER O 260 (comment circlecopyrt) + (CHARWD R 1000) + (CHARHT R 716) + (CHARDP R 216) + ) +(CHARACTER O 261 (comment openbullet) + (CHARWD R 500) + (CHARHT R 444) + ) +(CHARACTER O 262 (comment bullet) + (CHARWD R 500) + (CHARHT R 444) + ) +(CHARACTER O 263 (comment equivasymptotic) + (CHARWD R 777) + (CHARHT R 484) + ) +(CHARACTER O 264 (comment equivalence) + (CHARWD R 777) + (CHARHT R 464) + ) +(CHARACTER O 265 (comment reflexsubset) + (CHARWD R 777) + (CHARHT R 636) + (CHARDP R 137) + ) +(CHARACTER O 266 (comment reflexsuperset) + (CHARWD R 777) + (CHARHT R 636) + (CHARDP R 137) + ) +(CHARACTER O 267 (comment lessequal) + (CHARWD R 777) + (CHARHT R 636) + (CHARDP R 137) + ) +(CHARACTER O 270 (comment greaterequal) + (CHARWD R 777) + (CHARHT R 636) + (CHARDP R 137) + ) +(CHARACTER O 271 (comment precedesequal) + (CHARWD R 777) + (CHARHT R 636) + (CHARDP R 137) + ) +(CHARACTER O 272 (comment followsequal) + (CHARWD R 777) + (CHARHT R 636) + (CHARDP R 137) + ) +(CHARACTER O 273 (comment similar) + (CHARWD R 777) + (CHARHT R 367) + ) +(CHARACTER O 274 (comment approxequal) + (CHARWD R 777) + (CHARHT R 483) + ) +(CHARACTER O 275 (comment propersubset) + (CHARWD R 777) + (CHARHT R 540) + (CHARDP R 40) + ) +(CHARACTER O 276 (comment propersuperset) + (CHARWD R 777) + (CHARHT R 540) + (CHARDP R 40) + ) +(CHARACTER O 277 (comment lessmuch) + (CHARWD R 1000) + (CHARHT R 566) + (CHARDP R 66) + ) +(CHARACTER O 300 (comment greatermuch) + (CHARWD R 1000) + (CHARHT R 566) + (CHARDP R 66) + ) +(CHARACTER O 301 (comment precedes) + (CHARWD R 777) + (CHARHT R 539) + (CHARDP R 40) + ) +(CHARACTER O 302 (comment follows) + (CHARWD R 777) + (CHARHT R 539) + (CHARDP R 40) + ) +(CHARACTER O 303 (comment arrowleft) + (CHARWD R 1000) + (CHARHT R 511) + (CHARDP R 11) + ) +(CHARACTER O 304 (comment spade) + (CHARWD R 777) + (CHARHT R 727) + (CHARDP R 130) + ) diff --git a/metrics/metric_parse.py b/metrics/metric_parse.py new file mode 100755 index 000000000..14e43b84d --- /dev/null +++ b/metrics/metric_parse.py @@ -0,0 +1,328 @@ +#!/usr/bin/env python + +import re +import json +import os + +expr_start = re.compile(r"\s*\(") +expr_value = re.compile(r"\s*([^\s\)]+)") +expr_end = re.compile(r"\s*\)") +empty = re.compile(r"\s*$") + + +def inner_parse_expr(expr): + l = [] + while True: + if re.match(empty, expr): + return expr, l + elif re.match(expr_start, expr): + match = re.match(expr_start, expr) + new_expr = expr[len(match.group(0)):] + expr, group = inner_parse_expr(new_expr) + l.append(group) + elif re.match(expr_value, expr): + match = re.match(expr_value, expr) + expr = expr[len(match.group(0)):] + l.append(match.group(1)) + elif re.match(expr_end, expr): + match = re.match(expr_end, expr) + new_expr = expr[len(match.group(0)):] + return new_expr, l + else: + raise ValueError("Invalid input") + + +def parse_expr(expr): + _, group = inner_parse_expr(expr) + return group + + +def read_pl(pl_file): + with open(pl_file) as pl: + return parse_expr(pl.read()) + + +class Metric: + def __init__(self, char, height, depth): + self.char = char + self.height = float(height) / 1000 + self.depth = float(depth) / 1000 + + def __repr__(self): + return "Char {0} ({1:.3f}+{2:.3f})".format( + self.char, self.height, self.depth) + + +# Different styles of text, found on page 13 of The TeX book +ROMAN = "roman" +SLANTED = "slanted" +ITALIC = "italic" +TYPEWRITER = "typewriter" +BOLD = "bold" + + +# The numbers used in this map are all in octal, because that's how all the +# charts for the numbers are written +file_map = { + "cmmi10.pl": { + 13: (u"\u03b1", ITALIC), # \alpha + 14: (u"\u03b2", ITALIC), # \beta + 15: (u"\u03b3", ITALIC), # \gamma + 16: (u"\u03b4", ITALIC), # \delta + 17: (u"\u03b5", ITALIC), # \varepsilon + 20: (u"\u03b6", ITALIC), # \zeta + 21: (u"\u03b7", ITALIC), # \eta + 22: (u"\u03b8", ITALIC), # \theta + 23: (u"\u03b9", ITALIC), # \iota + 24: (u"\u03ba", ITALIC), # \kappa + 25: (u"\u03bb", ITALIC), # \lambda + 26: (u"\u03bc", ITALIC), # \mu + 27: (u"\u03bd", ITALIC), # \nu + 30: (u"\u03be", ITALIC), # \xi + 31: (u"\u03c0", ITALIC), # \pi + 32: (u"\u03c1", ITALIC), # \rho + 33: (u"\u03c3", ITALIC), # \sigma + 34: (u"\u03c4", ITALIC), # \tau + 35: (u"\u03c5", ITALIC), # \upsilon + 36: (u"\u03d5", ITALIC), # \phi + 37: (u"\u03c7", ITALIC), # \chi + 40: (u"\u03c8", ITALIC), # \psi + 41: (u"\u03c9", ITALIC), # \omega + 42: (u"\u03b5", ITALIC), # \epsilon + 43: (u"\u03d1", ITALIC), # \vartheta + 44: (u"\u03d6", ITALIC), # \varpi + 45: (u"\u03f1", ITALIC), # \varrho + 46: (u"\u03c2", ITALIC), # \varsigma + 47: (u"\u03c6", ITALIC), # \varphi + 72: (u".", ROMAN), + 73: (u",", ROMAN), + 74: (u"<", ROMAN), + 75: (u"/", ROMAN), + 76: (u">", ROMAN), + 101: (u"A", ITALIC), + 102: (u"B", ITALIC), + 103: (u"C", ITALIC), + 104: (u"D", ITALIC), + 105: (u"E", ITALIC), + 106: (u"F", ITALIC), + 107: (u"G", ITALIC), + 110: (u"H", ITALIC), + 111: (u"I", ITALIC), + 112: (u"J", ITALIC), + 113: (u"K", ITALIC), + 114: (u"L", ITALIC), + 115: (u"M", ITALIC), + 116: (u"N", ITALIC), + 117: (u"O", ITALIC), + 120: (u"P", ITALIC), + 121: (u"Q", ITALIC), + 122: (u"R", ITALIC), + 123: (u"S", ITALIC), + 124: (u"T", ITALIC), + 125: (u"U", ITALIC), + 126: (u"V", ITALIC), + 127: (u"W", ITALIC), + 130: (u"X", ITALIC), + 131: (u"Y", ITALIC), + 132: (u"Z", ITALIC), + 141: (u"a", ITALIC), + 142: (u"b", ITALIC), + 143: (u"c", ITALIC), + 144: (u"d", ITALIC), + 145: (u"e", ITALIC), + 146: (u"f", ITALIC), + 147: (u"g", ITALIC), + 150: (u"h", ITALIC), + 151: (u"i", ITALIC), + 152: (u"j", ITALIC), + 153: (u"k", ITALIC), + 154: (u"l", ITALIC), + 155: (u"m", ITALIC), + 156: (u"n", ITALIC), + 157: (u"o", ITALIC), + 160: (u"p", ITALIC), + 161: (u"q", ITALIC), + 162: (u"r", ITALIC), + 163: (u"s", ITALIC), + 164: (u"t", ITALIC), + 165: (u"u", ITALIC), + 166: (u"v", ITALIC), + 167: (u"w", ITALIC), + 170: (u"x", ITALIC), + 171: (u"y", ITALIC), + 172: (u"z", ITALIC), + }, + "cmr10.pl": { + 0: (u"\u0393", ROMAN), # \Gamma + 1: (u"\u0394", ROMAN), # \Delta + 2: (u"\u0398", ROMAN), # \Theta + 3: (u"\u039b", ROMAN), # \Lambda + 4: (u"\u039e", ROMAN), # \Xi + 5: (u"\u03a0", ROMAN), # \Pi + 6: (u"\u03a3", ROMAN), # \Sigma + 7: (u"\u03a5", ROMAN), # \Upsilon + 10: (u"\u03a6", ROMAN), # \Phi + 11: (u"\u03a8", ROMAN), # \Psi + 12: (u"\u03a9", ROMAN), # \Omega + 41: (u"!", ROMAN), + 42: (u"\"", ROMAN), + 44: (u"$", ROMAN), + 50: (u"(", ROMAN), + 51: (u")", ROMAN), + 53: (u"+", ROMAN), + 60: (u"0", ROMAN), + 61: (u"1", ROMAN), + 62: (u"2", ROMAN), + 63: (u"3", ROMAN), + 64: (u"4", ROMAN), + 65: (u"5", ROMAN), + 66: (u"6", ROMAN), + 67: (u"7", ROMAN), + 70: (u"8", ROMAN), + 71: (u"9", ROMAN), + 72: (u":", ROMAN), + 73: (u";", ROMAN), + 75: (u"=", ROMAN), + 77: (u"?", ROMAN), + 100: (u"@", ROMAN), + 101: (u"A", ROMAN), + 102: (u"B", ROMAN), + 103: (u"C", ROMAN), + 104: (u"D", ROMAN), + 105: (u"E", ROMAN), + 106: (u"F", ROMAN), + 107: (u"G", ROMAN), + 110: (u"H", ROMAN), + 111: (u"I", ROMAN), + 112: (u"J", ROMAN), + 113: (u"K", ROMAN), + 114: (u"L", ROMAN), + 115: (u"M", ROMAN), + 116: (u"N", ROMAN), + 117: (u"O", ROMAN), + 120: (u"P", ROMAN), + 121: (u"Q", ROMAN), + 122: (u"R", ROMAN), + 123: (u"S", ROMAN), + 124: (u"T", ROMAN), + 125: (u"U", ROMAN), + 126: (u"V", ROMAN), + 127: (u"W", ROMAN), + 130: (u"X", ROMAN), + 131: (u"Y", ROMAN), + 132: (u"Z", ROMAN), + 133: (u"[", ROMAN), + 135: (u"]", ROMAN), + 140: (u"`", ROMAN), + 141: (u"a", ROMAN), + 142: (u"b", ROMAN), + 143: (u"c", ROMAN), + 144: (u"d", ROMAN), + 145: (u"e", ROMAN), + 146: (u"f", ROMAN), + 147: (u"g", ROMAN), + 150: (u"h", ROMAN), + 151: (u"i", ROMAN), + 152: (u"j", ROMAN), + 153: (u"k", ROMAN), + 154: (u"l", ROMAN), + 155: (u"m", ROMAN), + 156: (u"n", ROMAN), + 157: (u"o", ROMAN), + 160: (u"p", ROMAN), + 161: (u"q", ROMAN), + 162: (u"r", ROMAN), + 163: (u"s", ROMAN), + 164: (u"t", ROMAN), + 165: (u"u", ROMAN), + 166: (u"v", ROMAN), + 167: (u"w", ROMAN), + 170: (u"x", ROMAN), + 171: (u"y", ROMAN), + 172: (u"z", ROMAN), + }, + "cmsy10.pl": { + 0: (u"\u2212", ROMAN), # - + 1: (u"\u22c5", ROMAN), # \cdot + 2: (u"\u00d7", ROMAN), # \times + 3: (u"\u2217", ROMAN), # * + 4: (u"\u00f7", ROMAN), # \div + 6: (u"\u00b1", ROMAN), # \pm + 16: (u"\u2218", ROMAN), # \circ + 24: (u"\u2264", ROMAN), # \leq + 25: (u"\u2265", ROMAN), # \geq + 40: (u"\u2190", ROMAN), # \leftarrow + 41: (u"\u2192", ROMAN), # \rightarrow + 60: (u"\u2032", ROMAN), # \prime + 61: (u"\u221e", ROMAN), # \infty + 152: (u"|", ROMAN), # | + } +} + + +def read_metrics(pl_file, metrics): + pl = read_pl(pl_file) + + metrics_to_read = file_map[pl_file] + + for elem in pl: + if elem[0] == "CHARACTER": + if elem[1] == "C": + char = int(oct(ord(elem[2]))) + elif elem[1] == "O": + char = int(elem[2]) + else: + continue + + if not char in metrics_to_read: + continue + + map_char, map_style = metrics_to_read[char] + + char_height = 0 + char_depth = 0 + + for metric in elem[3:]: + if metric[0] == "comment": + continue + elif metric[0] == "CHARHT": + char_height = int(metric[2]) + elif metric[0] == "CHARDP": + char_depth = int(metric[2]) + + metrics[map_style].append( + Metric(map_char, char_height, char_depth)) + + +def print_metrics(metrics): + metric_map = { + style: { + "height": { + metric.char: metric.height for metric in metric_list + }, + "depth": { + metric.char: metric.depth for metric in metric_list + }, + } for style, metric_list in metrics.iteritems() + } + + print "var metricMap = {0};".format(json.dumps(metric_map, indent=4)) + + +if __name__ == "__main__": + os.chdir(os.path.dirname(os.path.realpath(__file__))) + + metrics = { + "roman": [], + "italic": [], + "slanted": [], + "typewriter": [], + "bold": [], + } + + for metric_file in file_map: + read_metrics(metric_file, metrics) + + metrics["roman"].append(Metric(u'\u00a0', 0, 0)) + + print_metrics(metrics) diff --git a/package.json b/package.json index 03629aa72..276807545 100644 --- a/package.json +++ b/package.json @@ -3,10 +3,8 @@ "version": "0.0.1", "devDependencies": { "browserify": "~2.23.1", - "ebnf-parser": "~0.1.5", "express": "~3.3.3", - "lex-parser": "~0.1.2", - "jison": "~0.4.6", - "through": "~2.3.4" + "less": "~1.4.2" + "through": "~2.3.4", } } diff --git a/server.js b/server.js index a7ed3b29c..5d5d48669 100644 --- a/server.js +++ b/server.js @@ -38,6 +38,7 @@ app.get("/test/katex-tests.js", function(req, res, next) { }); app.use(express.static(path.join(__dirname, "static"))); +app.use(express.static(path.join(__dirname, "build"))); app.use("/test", express.static(path.join(__dirname, "test"))); app.use(function(err, req, res, next) { diff --git a/static/index.html b/static/index.html index a00ade2a6..454deaecf 100644 --- a/static/index.html +++ b/static/index.html @@ -1,14 +1,20 @@ - + KaTeX Test - + + + + + - +
diff --git a/static/katex.css b/static/katex.css deleted file mode 100644 index 16c2806cb..000000000 --- a/static/katex.css +++ /dev/null @@ -1,185 +0,0 @@ -@import "fonts/fonts.css"; - -/* -thin space: 1/6 quad -medium space: 2/9 quad -thick space: 5/18 quad - -things to do: -^ _ and styles -\sin -\sum, \int, \lim -\frac -\sqrt -big parens -*/ - -.katex { - font: normal 1.21em katex_main; - line-height: 1.2; - white-space: nowrap; -} - -.katex .mathit { - font-family: katex_math; - font-style: italic; -} - -.katex .textstyle > .mbin + .minner { margin-left: 0.22222em; } -.katex .textstyle > .mbin + .mop { margin-left: 0.22222em; } -.katex .textstyle > .mbin + .mopen { margin-left: 0.22222em; } -.katex .textstyle > .mbin + .mord { margin-left: 0.22222em; } -.katex .textstyle > .mclose + .mbin { margin-left: 0.22222em; } -.katex .textstyle > .mclose + .minner { margin-left: 0.16667em; } -.katex .mclose + .mop { margin-left: 0.16667em; } -.katex .textstyle > .mclose + .mrel { margin-left: 0.27778em; } -.katex .textstyle > .minner + .mbin { margin-left: 0.22222em; } -.katex .textstyle > .minner + .minner { margin-left: 0.16667em; } -.katex .minner + .mop { margin-left: 0.16667em; } -.katex .textstyle > .minner + .mopen { margin-left: 0.16667em; } -.katex .textstyle > .minner + .mord { margin-left: 0.16667em; } -.katex .textstyle > .minner + .mpunct { margin-left: 0.16667em; } -.katex .textstyle > .minner + .mrel { margin-left: 0.27778em; } -.katex .textstyle > .mop + .minner { margin-left: 0.16667em; } -.katex .mop + .mop { margin-left: 0.16667em; } -.katex .mop + .mord { margin-left: 0.16667em; } -.katex .textstyle > .mop + .mrel { margin-left: 0.27778em; } -.katex .textstyle > .mord + .mbin { margin-left: 0.22222em; } -.katex .textstyle > .mord + .minner { margin-left: 0.16667em; } -.katex .mord + .mop { margin-left: 0.16667em; } -.katex .textstyle > .mord + .mrel { margin-left: 0.27778em; } -.katex .textstyle > .mpunct + .mbin { margin-left: 0.16667em; } -.katex .textstyle > .mpunct + .mclose { margin-left: 0.16667em; } -.katex .textstyle > .mpunct + .minner { margin-left: 0.16667em; } -.katex .textstyle > .mpunct + .mop { margin-left: 0.16667em; } -.katex .textstyle > .mpunct + .mopen { margin-left: 0.16667em; } -.katex .textstyle > .mpunct + .mord { margin-left: 0.16667em; } -.katex .textstyle > .mpunct + .mpunct { margin-left: 0.16667em; } -.katex .textstyle > .mpunct + .mrel { margin-left: 0.16667em; } -.katex .textstyle > .mrel + .minner { margin-left: 0.27778em; } -.katex .textstyle > .mrel + .mop { margin-left: 0.27778em; } -.katex .textstyle > .mrel + .mopen { margin-left: 0.27778em; } -.katex .textstyle > .mrel + .mord { margin-left: 0.27778em; } - -.katex .textstyle > .scriptstyle { font-size: 0.66667em; } -.katex .scriptstyle > .scriptscriptstyle { font-size: 0.75em; } - -.katex .msub { - vertical-align: bottom; - position: relative; - top: 0.2em; -} - -.katex .msup { - position: relative; - top: -0.5em; -} - -.katex .msupsub { - display: inline-table; - table-layout: fixed; - vertical-align: middle; -} - -.katex .msupsub > .msup, .katex .msupsub > .msub { - display: table-row; - vertical-align: baseline; -} - -.katex .mfrac { display: inline-table; } - -/* TODO(alpert): Where do these numbers come from? */ -.katex .mfrac.textstyle.displaystyle { vertical-align: 0.58em; } -.katex .mfrac.textstyle { vertical-align: 0.50em; } -.katex .mfrac.scriptstyle { vertical-align: 0.50em; } -.katex .mfrac.scriptscriptstyle { vertical-align: 0.6em; } - -.katex .mfracnum, .katex .mfracmid, .katex .mfracden { - display: table-row; - text-align: center; -} - -.katex .mfracmid:before { - border-bottom-style: solid; - border-bottom-width: 1px; - content: ""; - display: block; -} - -.katex .mfracmid:after { - border-bottom-style: solid; - border-bottom-width: 0.05em; - content: ""; - display: block; - margin-top: -1px; -} - -.katex .mfracnum > span { - display: inline-block; - vertical-align: bottom; -} - -.katex .mspace { - display: inline-block; -} - -.katex .mspace.thinspace { - width: 0.16667em; -} - -.katex .mspace.mediumspace { - width: 0.22222em; -} - -.katex .mspace.thickspace { - width: 0.27778em; -} - -.katex .mspace.quad { - width: 1em; -} - -.katex .mspace.qquad { - width: 2em; -} - -.katex .llap, .katex .rlap { - width: 0; - position: relative; -} - -.katex .llap > span { - position: absolute; - right: 0; -} - -.katex .rlap > span { - position: absolute; - left: 0; -} - -.katex .blue { color: #6495ed; } -.katex .orange { color: #ffa500; } -.katex .pink { color: #ff00af; } -.katex .red { color: #df0030; } -.katex .green { color: #28ae7b; } -.katex .gray { color: gray; } -.katex .purple { color: #9d38bd; } - -.katex .katex-logo .a { - font-size: 0.75em; - margin-left: -0.32em; - position: relative; - top: -0.2em; -} -.katex .katex-logo .t { - margin-left: -0.23em; -} -.katex .katex-logo .e { - margin-left: -0.1667em; - position: relative; - top: 0.2155em; -} -.katex .katex-logo .x { - margin-left: -0.125em; -} diff --git a/static/katex.less b/static/katex.less new file mode 100644 index 000000000..a2d3dee65 --- /dev/null +++ b/static/katex.less @@ -0,0 +1,289 @@ +@import "fonts/fonts.css"; + +/* +things to do: +\sum, \int, \lim +\sqrt +big parens +*/ + +.katex { + display: inline-block; + font: normal 1.21em katex_main; + line-height: 1.2; + white-space: nowrap; + + .base { + display: inline-block; + } + + .strut { + display: inline-block; + + &.bottom { + vertical-align: top; + } + } + + .mathit { + font-family: katex_math; + font-style: italic; + } + + @thinspace: 0.16667em; + @mediumspace: 0.22222em; + @thickspace: 0.27778em; + + .textstyle { + > .mord { + & + .mord {} + & + .mop { margin-left: @thinspace; } + & + .mbin { margin-left: @mediumspace; } + & + .mrel { margin-left: @thickspace; } + & + .mopen {} + & + .mclose {} + & + .mpunct {} + & + .minner { margin-left: @thinspace; } + } + + > .mop { + & + .mord { margin-left: @thinspace; } + & + .mop { margin-left: @thinspace; } + & + .mbin {} + & + .mrel { margin-left: @thickspace; } + & + .mopen {} + & + .mclose {} + & + .mpunct {} + & + .minner { margin-left: @thinspace; } + } + + > .mbin { + & + .mord { margin-left: @mediumspace; } + & + .mop { margin-left: @mediumspace; } + & + .mbin {} + & + .mrel {} + & + .mopen { margin-left: @mediumspace; } + & + .mclose {} + & + .mpunct {} + & + .minner { margin-left: @mediumspace; } + } + + > .mrel { + & + .mord { margin-left: @thickspace; } + & + .mop { margin-left: @thickspace; } + & + .mbin {} + & + .mrel {} + & + .mopen { margin-left: @thickspace; } + & + .mclose {} + & + .mpunct {} + & + .minner { margin-left: @thickspace; } + } + + > .mopen { + & + .mord {} + & + .mop {} + & + .mbin {} + & + .mrel {} + & + .mopen {} + & + .mclose {} + & + .mpunct {} + & + .minner {} + } + + > .mclose { + & + .mord {} + & + .mop { margin-left: @thinspace; } + & + .mbin { margin-left: @mediumspace; } + & + .mrel { margin-left: @thickspace; } + & + .mopen {} + & + .mclose {} + & + .mpunct {} + & + .minner { margin-left: @thinspace; } + } + + > .mpunct { + & + .mord { margin-left: @thinspace; } + & + .mop { margin-left: @thinspace; } + & + .mbin {} + & + .mrel { margin-left: @thinspace; } + & + .mopen { margin-left: @thinspace; } + & + .mclose { margin-left: @thinspace; } + & + .mpunct { margin-left: @thinspace; } + & + .minner { margin-left: @thinspace; } + } + + > .minner { + & + .mord { margin-left: @thinspace; } + & + .mop { margin-left: @thinspace; } + & + .mbin { margin-left: @mediumspace; } + & + .mrel { margin-left: @thickspace; } + & + .mopen { margin-left: @thinspace; } + & + .mclose {} + & + .mpunct { margin-left: @thinspace; } + & + .minner { margin-left: @thinspace; } + } + } + + .mord { + & + .mop { margin-left: @thinspace; } + } + + .mop { + & + .mord { margin-left: @thinspace; } + & + .mop { margin-left: @thinspace; } + } + + .mclose { + & + .mop { margin-left: @thinspace; } + } + + .minner { + & + .mop { margin-left: @thinspace; } + } + + .reset-textstyle.textstyle { font-size: 1em; } + .reset-textstyle.scriptstyle { font-size: 0.66667em; } + .reset-textstyle.scriptscriptstyle { font-size: 0.5em; } + + .reset-scriptstyle.textstyle { font-size: 1.5em; } + .reset-scriptstyle.scriptstyle { font-size: 1em; } + .reset-scriptstyle.scriptscriptstyle { font-size: 0.75em; } + + .reset-scriptscriptstyle.textstyle { font-size: 2em; } + .reset-scriptscriptstyle.scriptstyle { font-size: 1.5em; } + .reset-scriptscriptstyle.scriptscriptstyle { font-size: 1em; } + + .baseline-align-hack-outer { + display: inline-block; + vertical-align: top; + } + + .baseline-align-hack-middle { + display: block; + height: 0; + } + + .baseline-align-hack-inner { + display: inline-block; + } + + .msupsub { + .baseline-align-hack-outer; + text-align: left; + + .msup, + .msub { + .baseline-align-hack-middle; + position: relative; + + > span { + .baseline-align-hack-inner; + } + } + } + + .mfrac { + .baseline-align-hack-outer; + + .mfracnum, + .mfracmid, + .mfracden { + .baseline-align-hack-middle; + position: relative; + text-align: center; + + > span { + .baseline-align-hack-inner; + } + } + + .mfracmid > span { + width: 100%; + + &:before { + border-bottom-style: solid; + border-bottom-width: 1px; + content: ""; + display: block; + } + + &:after { + border-bottom-style: solid; + border-bottom-width: 0.05em; + content: ""; + display: block; + margin-top: -1px; + } + } + } + + .mspace { + display: inline-block; + + &.thinspace { + width: @thinspace; + } + + &.mediumspace { + width: @mediumspace; + } + + &.thickspace { + width: @thickspace; + } + + &.quad { + width: 1em; + } + + &.qquad { + width: 2em; + } + } + + .llap, + .rlap { + width: 0; + position: relative; + + > span { + position: absolute; + } + } + + .llap > span { + right: 0; + } + + .rlap > span { + left: 0; + } + + .blue { color: #6495ed; } + .orange { color: #ffa500; } + .pink { color: #ff00af; } + .red { color: #df0030; } + .green { color: #28ae7b; } + .gray { color: gray; } + .purple { color: #9d38bd; } + + .katex-logo { + .a { + font-size: 0.75em; + margin-left: -0.32em; + position: relative; + top: -0.2em; + } + .t { + margin-left: -0.23em; + } + .e { + margin-left: -0.1667em; + position: relative; + top: 0.2155em; + } + .x { + margin-left: -0.125em; + } + } +} diff --git a/static/main.css b/static/main.css index 62074264e..ab9f3d0bc 100644 --- a/static/main.css +++ b/static/main.css @@ -1,9 +1,12 @@ body { margin: 0px; padding: 0px; + font-size: 72px; } input { margin: 0px; font-size: 100%; + width: 100%; + box-sizing: border-box; } diff --git a/test/katex-tests.js b/test/katex-tests.js index f49691635..5be61bd45 100644 --- a/test/katex-tests.js +++ b/test/katex-tests.js @@ -182,19 +182,19 @@ describe("A subscript and superscript parser", function() { }).not.toThrow(); }); - it("should produce sups for superscript", function() { + it("should produce supsubs for superscript", function() { var parse = parseTree("x^2")[0]; - expect(parse.type).toBe("sup"); + expect(parse.type).toBe("supsub"); expect(parse.value.base).toBeDefined(); expect(parse.value.sup).toBeDefined(); expect(parse.value.sub).toBeUndefined(); }); - it("should produce subs for subscript", function() { + it("should produce supsubs for subscript", function() { var parse = parseTree("x_3")[0]; - expect(parse.type).toBe("sub"); + expect(parse.type).toBe("supsub"); expect(parse.value.base).toBeDefined(); expect(parse.value.sub).toBeDefined(); expect(parse.value.sup).toBeUndefined(); diff --git a/utils.js b/utils.js index db9863488..0c1f40ead 100644 --- a/utils.js +++ b/utils.js @@ -13,36 +13,6 @@ function slowContains(list, elem) { var contains = Array.prototype.indexOf ? fastContains : slowContains; -function isBuggyWebKit() { - var userAgent = navigator.userAgent.toLowerCase(); - - var webkit = (/applewebkit\/(\d+)\.(\d+)/).exec(userAgent); - if (!webkit) { - return false; - } - - var major = +webkit[1]; - var minor = +webkit[2]; - - // 537.1 is last buggy, according to Chrome's bisect-builds.py which says: - // - // You are probably looking for a change made after 137695 (known bad), but - // no later than 137702 (first known good). - // CHANGELOG URL: - // http://build.chromium.org/f/chromium/perf/dashboard/ui/changelog.html?url=/trunk/src&range=137695%3A137702 - // - // Downloading these two builds: - // http://commondatastorage.googleapis.com/chromium-browser-snapshots/Mac/137695/chrome-mac.zip - // http://commondatastorage.googleapis.com/chromium-browser-snapshots/Mac/137702/chrome-mac.zip - // verifies this claim. The respective WebKit versions (r117232 and - // r117456) both are called 537.1 so let's throw out 537.1 as well as - // everything older. - // - // The responsible WebKit changeset appears to be this one: - // http://trac.webkit.org/changeset/117339/ - return major < 537 || (major == 537 && minor <= 1); -} - var setTextContent; var testNode = document.createElement("span"); @@ -62,7 +32,6 @@ function clearNode(node) { module.exports = { contains: contains, - isBuggyWebKit: isBuggyWebKit(), setTextContent: setTextContent, clearNode: clearNode };