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 };