www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit 204270fa0db90b40decbd3daf97a793db9fc871f
parent 92047d2a840f71b2142ea08cdedf78115101a6a7
Author: Emily Eisenberg <emily@khanacademy.org>
Date:   Thu, 20 Mar 2014 21:36:37 -0400

Somehow manage to fix the sizing bugs

Summary:
Remove a single `vertical-align: top`, and somewhow it now works. May
the gods of CSS have mercy on us. Also added some tests.

Test Plan:
 - See that the huxley tests don't have any changes
 - See that the new huxley screenshots look reasonable
 - Run the normal tests and see that they work

Reviewers: alpert

Reviewed By: alpert

Differential Revision: http://phabricator.khanacademy.org/D7494

Diffstat:
M.gitignore | 1+
MbuildTree.js | 21+++++++--------------
Mstatic/katex.less | 15++++++++++++---
Mtest/huxley/Huxleyfile | 30++++++++++++++++++------------
Atest/huxley/Sizing.huxley/record.json | 1+
Atest/huxley/Sizing.huxley/screenshot0.png | 0
Atest/huxley/SizingBaseline.huxley/record.json | 1+
Atest/huxley/SizingBaseline.huxley/screenshot0.png | 0
Mtest/huxley/test.html | 18++++++++++++++----
Mtest/katex-tests.js | 24++++++++++++++++++++++++
10 files changed, 78 insertions(+), 33 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -1,3 +1,4 @@ build node_modules last.png +diff.png diff --git a/buildTree.js b/buildTree.js @@ -130,6 +130,7 @@ var groupTypes = { } var supsub; + var fixIE = makeSpan(["fix-ie"], []); if (!group.value.sup) { v = Math.max(v, fontMetrics.metrics.sub1, @@ -140,7 +141,7 @@ var groupTypes = { subwrap.depth = subwrap.depth + v; subwrap.height = 0; - supsub = makeSpan(["msupsub"], [subwrap]); + supsub = makeSpan(["msupsub"], [subwrap, fixIE]); } else if (!group.value.sub) { u = Math.max(u, p, sup.depth + 0.25 * fontMetrics.metrics.xHeight); @@ -150,7 +151,7 @@ var groupTypes = { supwrap.height = supwrap.height + u; supwrap.depth = 0; - supsub = makeSpan(["msupsub"], [supwrap]); + supsub = makeSpan(["msupsub"], [supwrap, fixIE]); } else { u = Math.max(u, p, sup.depth + 0.25 * fontMetrics.metrics.xHeight); @@ -176,7 +177,7 @@ var groupTypes = { subwrap.height = 0; subwrap.depth = subwrap.depth + v; - supsub = makeSpan(["msupsub"], [supwrap, subwrap]); + supsub = makeSpan(["msupsub"], [supwrap, subwrap, fixIE]); } return makeSpan([getTypeOfGroup(group.value.base)], [base, supsub]); @@ -244,7 +245,9 @@ var groupTypes = { denomrow.height = 0; denomrow.depth = denomrow.depth + v; - var frac = makeSpan([], [numerrow, mid, denomrow]); + var fixIE = makeSpan(["fix-ie"], []); + + var frac = makeSpan([], [numerrow, mid, denomrow, fixIE]); frac.height *= fstyle.sizeMultiplier / options.style.sizeMultiplier; frac.depth *= fstyle.sizeMultiplier / options.style.sizeMultiplier; @@ -379,11 +382,6 @@ var buildGroup = function(group, options, prev) { 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; } @@ -392,11 +390,6 @@ var buildGroup = function(group, options, prev) { var multiplier = sizingMultiplier[options.size] / sizingMultiplier[options.parentSize]; - if (multiplier > 1) { - throw new ParseError( - "Error: Can't go from small to large size"); - } - if (options.depth > 1) { throw new ParseError( "Error: Can't use sizing outside of the root node"); diff --git a/static/katex.less b/static/katex.less @@ -163,7 +163,6 @@ big parens .baseline-align-hack-outer() { display: inline-block; - vertical-align: top; } .baseline-align-hack-middle() { @@ -184,7 +183,8 @@ big parens margin-left: 0.05em; .msup, - .msub { + .msub, + .fix-ie { .baseline-align-hack-middle; position: relative; @@ -192,6 +192,10 @@ big parens .baseline-align-hack-inner; } } + + .fix-ie { + display: inline-block; + } } .mfrac { @@ -199,7 +203,8 @@ big parens .mfracnum, .mfracmid, - .mfracden { + .mfracden, + .fix-ie { .baseline-align-hack-middle; position: relative; text-align: center; @@ -209,6 +214,10 @@ big parens } } + .fix-ie { + display: inline-block; + } + .mfracmid > span { width: 100%; diff --git a/test/huxley/Huxleyfile b/test/huxley/Huxleyfile @@ -1,32 +1,38 @@ [BasicTest] -url=http://localhost:7936/test/huxley/test.html#a +url=http://localhost:7936/test/huxley/test.html?m=a [FractionTest] -url=http://localhost:7936/test/huxley/test.html#\dfrac{a}{b}\frac{a}{b}\tfrac{a}{b} +url=http://localhost:7936/test/huxley/test.html?m=\dfrac{a}{b}\frac{a}{b}\tfrac{a}{b} [NestedFractions] -url=http://localhost:7936/test/huxley/test.html#\dfrac{\frac{a}{b}}{\frac{c}{d}}\dfrac{\dfrac{a}{b}}{\dfrac{c}{d}}\frac{\frac{a}{b}}{\frac{c}{d}} +url=http://localhost:7936/test/huxley/test.html?m=\dfrac{\frac{a}{b}}{\frac{c}{d}}\dfrac{\dfrac{a}{b}}{\dfrac{c}{d}}\frac{\frac{a}{b}}{\frac{c}{d}} [Exponents] -url=http://localhost:7936/test/huxley/test.html#a^{a^a_a}_{a^a_a} +url=http://localhost:7936/test/huxley/test.html?m=a^{a^a_a}_{a^a_a} [Colors] -url=http://localhost:7936/test/huxley/test.html#\blue{a}\green{b}\red{c} +url=http://localhost:7936/test/huxley/test.html?m=\blue{a}\green{b}\red{c} [GreekLetters] -url=http://localhost:7936/test/huxley/test.html#\alpha\beta\gamma\omega +url=http://localhost:7936/test/huxley/test.html?m=\alpha\beta\gamma\omega [Baseline] -url=http://localhost:7936/test/huxley/test.html#a+b-c\cdot d/e +url=http://localhost:7936/test/huxley/test.html?m=a+b-c\cdot d/e [Spacing] -url=http://localhost:7936/test/huxley/test.html#[-1][1-1]1=1(=1)\lvert a\rvert +url=http://localhost:7936/test/huxley/test.html?m=[-1][1-1]1%%3D1(%%3D1)\lvert a\rvert [Functions] -url=http://localhost:7936/test/huxley/test.html#\sin\cos\tan\ln\log +url=http://localhost:7936/test/huxley/test.html?m=\sin\cos\tan\ln\log [Lap] -url=http://localhost:7936/test/huxley/test.html#ab\llap{f}cd\rlap{g}h +url=http://localhost:7936/test/huxley/test.html?m=ab\llap{f}cd\rlap{g}h + +[Sizing] +url=http://localhost:7936/test/huxley/test.html?m=\Huge{x}\LARGE{y}\normalsize{z}\scriptsize{w} + +[SizingBaseline] +url=http://localhost:7936/test/huxley/test.html?m=\tiny{a+b}a+b\Huge{a+b}&pre=x&post=M [KaTeX] -url=http://localhost:7936/test/huxley/test.html#\KaTeX -\ No newline at end of file +url=http://localhost:7936/test/huxley/test.html?m=\KaTeX +\ No newline at end of file diff --git a/test/huxley/Sizing.huxley/record.json b/test/huxley/Sizing.huxley/record.json @@ -0,0 +1 @@ +{"py/object": "huxley.run.Test", "screen_size": {"py/tuple": [1024, 768]}, "steps": [{"py/object": "huxley.steps.ScreenshotTestStep", "index": 0, "offset_time": 0}]} diff --git a/test/huxley/Sizing.huxley/screenshot0.png b/test/huxley/Sizing.huxley/screenshot0.png Binary files differ. diff --git a/test/huxley/SizingBaseline.huxley/record.json b/test/huxley/SizingBaseline.huxley/record.json @@ -0,0 +1 @@ +{"py/object": "huxley.run.Test", "screen_size": {"py/tuple": [1024, 768]}, "steps": [{"py/object": "huxley.steps.ScreenshotTestStep", "index": 0, "offset_time": 0}]} diff --git a/test/huxley/SizingBaseline.huxley/screenshot0.png b/test/huxley/SizingBaseline.huxley/screenshot0.png Binary files differ. diff --git a/test/huxley/test.html b/test/huxley/test.html @@ -6,17 +6,27 @@ <link href="/fonts/fonts.css" rel="stylesheet" type="text/css"> <link href="/katex.less.css" rel="stylesheet" type="text/css"> <style type="text/css"> - #math { + #math, #pre, #post { font-size: 4em; } </style> </head> <body> - <div id="math"></div> + <span id="pre"></span> + <span id="math"></span> + <span id="post"></span> <script type="text/javascript"> - var hash = window.location.hash.slice(1); + var query = {}; + var queryVars = window.location.search.slice(1).split("&"); + console.log(queryVars); + for (var i = 0; i < queryVars.length; i++) { + var split = queryVars[i].split("="); + query[split[0]] = decodeURIComponent(split[1]); + } var mathNode = document.getElementById("math"); - katex.process(hash, mathNode); + katex.process(query["m"], mathNode); + document.getElementById("pre").innerHTML = query["pre"] || ""; + document.getElementById("post").innerHTML = query["post"] || ""; </script> </body> </html> diff --git a/test/katex-tests.js b/test/katex-tests.js @@ -423,3 +423,27 @@ describe("A frac parser", function() { expect(tfracParse.value.denom).toBeDefined(); }); }); + +describe("A sizing parser", function() { + var sizeExpression = "\\Huge{x}\\small{x}"; + var nestedSizeExpression = "\\Huge{\\small{x}}"; + + it("should not fail", function() { + expect(function() { + parseTree(sizeExpression); + }).not.toThrow(); + }); + + it("should produce a sizing node", function() { + var parse = parseTree(sizeExpression)[0]; + + expect(parse.type).toMatch("sizing"); + expect(parse.value).toBeDefined(); + }); + + it("should not parse a nested size expression", function() { + expect(function() { + parseExpression(nestedSizeExpression); + }).toThrow(); + }); +});