Summary:
This adds support for rendering KaTeX to both HTML and MathML
with the intent of improving accessibility. To accomplish this, both
MathML and HTML are rendered, but with the MathML visually hidden and
the HTML spans aria-hidden. Hopefully, this should produce much better
accessibility for KaTeX.
Should fix/improve #38Closes#189
Test Plan:
- Ensure all the tests, and the new tests, still pass.
- Ensure that for each of the group types in `buildHTML.js`, there is a
corresponding one in `buildMathML.js`.
- Ensure that the huxley screenshots didn't change (except for
BinomTest, which changed because I fixed a bug in `buildHTML` where
`genfrac` didn't have a `groupToType` mapping).
- Run ChromeVox on the test page, render some math. (for example,
`\sqrt{x^2}`)
- Ensure that a mathy-sounding expression is read. (I hear "group
square root of x squared math").
- Ensure that nothing else is read (like no "x" or "2").
- Ensure that MathML markup is generated correctly and is interpreted
by the browser correctly by running
`document.getElementById("math").innerHTML =
katex.renderToString("\\sqrt{x^2}");` and seeing that the same speech
is read.
Reviewers: john, alpert
Reviewed By: john, alpert
Subscribers: alpert, john
Differential Revision: https://phabricator.khanacademy.org/D16373
Summary:
Add the ability to pass in options to the render calls which contain information about the parse. This information is passed around to the parser and builder, which parse and render differently depending on the options. Currently, this includes an option to render the math in display mode (i.e. centered, block level, and in displaystyle).
Also added some changes to make it easier to add new data to functions (now that new data doesn't need to be copied into the ParseFuncOrArg data structure, it is looked up when it is needed) and has more sane support for the `'original'` argType (as suggested by pull request #93).
Test Plan:
- Make sure tests and lint pass
- Make sure huxley screenshots didn't change, and new screenshot looks correct
Reviewers: alpert
Reviewed By: alpert
Differential Revision: https://phabricator.khanacademy.org/D13810
Summary:
- Some of the symbols were of the wrong type (I wrote some scripts to
search the TeX source for the correct types for the symbols; I should
put these somewhere for future reference)
- Some of the symbols had the incorrect unicode replacement value. I
copied what MathJax used for the ones that were wrong. In one case,
something had the wrong font, so I used the one MathJax used.
- Some symbols were duplicates of existing symbols, those were removed.
- Some symbols are text symbols that aren't usable in math mode (maybe
they should be text symbols?) (`\aa`, `\AA`, etc.)
- Some symbols didn't seem to work/I couldn't figure out how to make
them work. For example, `\imath` and `\jmath` require an italic font
in KaTeX_Main, but we don't have the ability to do that yet. `\dots`
was removed because it's not an ordinary symbol. `\*vert` were
removed because I don't understand what they're for, nor what they
should look like.
- Some symbols weren't actually in the KaTeX fonts; to make sure they
don't fall back to something weird, I removed them. (`\S`, `\pounds`,
etc.)
Test plan:
- `make test`
- See that all of the symbols in: `\equiv \prec \succ \sim \perp
\preceq \succeq \simeq \mid \ll \gg \asymp \parallel \bowtie \smile
\sqsubseteq \sqsupseteq \doteq \frown \ni \propto \vdash \dashv \owns
\ldotp \cdotp \aleph \forall \hbar \exists \nabla \flat \ell \natural
\clubsuit \wp \sharp \diamondsuit \Re \heartsuit \Im \spadesuit
\rmoustache \lmoustache \rgroup \lgroup \mp \ominus \uplus \sqcap
\ast \sqcup \bigcirc \bullet \ddagger \wr \amalg \longleftarrow
\Leftarrow \Longleftarrow \longrightarrow \Rightarrow \Longrightarrow
\leftrightarrow \longleftrightarrow \Leftrightarrow
\Longleftrightarrow \mapsto \longmapsto \nearrow \hookleftarrow
\hookrightarrow \searrow \leftharpoonup \rightharpoonup \swarrow
\leftharpoondown \rightharpoondown \nwarrow \rightleftharpoons \nless
\nleqslant \nleqq \lneq \lneqq \lvertneqq \lnsim \lnapprox \nprec
\npreceq \precnsim \precnapprox \nsim \nshortmid \nmid \nvdash
\nvDash \ntriangleleft \ntrianglelefteq \subsetneq \varsubsetneq
\subsetneqq \varsubsetneqq \ngtr \ngeqslant \ngeqq \gneq \gneqq
\gvertneqq \gnsim \gnapprox \nsucc \nsucceq \succnsim \succnapprox
\ncong \nshortparallel \nparallel \nVDash \ntriangleright
\ntrianglerighteq \nsupseteqq \supsetneq \varsupsetneq \supsetneqq
\varsupsetneqq \nVdash \precneqq \succneqq \nsubseteqq \unlhd \unrhd
\nleftarrow \nrightarrow \nLeftarrow \nRightarrow \nleftrightarrow
\nLeftrightarrow \vartriangle \hslash \triangledown \lozenge
\circledS \measuredangle \nexists \mho \Finv \Game \Bbbk \backprime
\blacktriangle \blacktriangledown \blacksquare \blacklozenge \bigstar
\sphericalangle \complement \eth \diagup \diagdown \square \Box
\Diamond \beth \daleth \gimel \digamma \varkappa \ulcorner \urcorner
\llcorner \lrcorner \leqq \leqslant \eqslantless \lesssim \lessapprox
\approxeq \lessdot \lll \lessgtr \lesseqgtr \lesseqqgtr \doteqdot
\risingdotseq \fallingdotseq \backsim \backsimeq \subseteqq \Subset
\sqsubset \preccurlyeq \curlyeqprec \precsim \precapprox
\vartriangleleft \trianglelefteq \vDash \Vvdash \smallsmile
\smallfrown \bumpeq \Bumpeq \geqq \geqslant \eqslantgtr \gtrsim
\gtrapprox \gtrdot \ggg \gtrless \gtreqless \gtreqqless \eqcirc
\circeq \triangleq \thicksim \thickapprox \supseteqq \Supset
\sqsupset \succcurlyeq \curlyeqsucc \succsim \succapprox
\vartriangleright \trianglerighteq \Vdash \shortmid \shortparallel
\between \pitchfork \varpropto \blacktriangleleft \therefore
\backepsilon \blacktriangleright \because \llless \gggtr \lhd \rhd
\eqsim \Join \Doteq \dotplus \smallsetminus \Cap \Cup \doublebarwedge
\boxminus \boxplus \divideontimes \ltimes \rtimes \leftthreetimes
\rightthreetimes \curlywedge \curlyvee \circleddash \circledast
\centerdot \intercal \doublecap \doublecup \boxtimes \dashrightarrow
\dashleftarrow \leftleftarrows \leftrightarrows \Lleftarrow
\twoheadleftarrow \leftarrowtail \looparrowleft \leftrightharpoons
\curvearrowleft \circlearrowleft \Lsh \upuparrows \upharpoonleft
\downharpoonleft \multimap \leftrightsquigarrow \rightrightarrows
\rightleftarrows \twoheadrightarrow \rightarrowtail \looparrowright
\curvearrowright \circlearrowright \Rsh \downdownarrows
\upharpoonright \downharpoonright \rightsquigarrow \leadsto
\Rrightarrow \restriction \yen \dag \ddag` look the same as they do
in LaTeX and don't print any warnings about unknown font metrics.
Auditors: alpert