Commit Graph

540 Commits

Author SHA1 Message Date
Ben Alpert
20994d7351 Prevent line breaks immediately after math
For whatever reason, `<inline-block/>,` allows a break in between the block and the comma. `<nobr><inline-block/></nobr>,` doesn't.

Auditors: emily
2013-12-16 05:46:04 -08:00
Ben Alpert
302f5502ef Add \approx as a symbol
This is important because the interactive graph labels use \approx now for polygon sides and it feels really sluggish with MathJax.
2013-11-21 22:15:25 -08:00
Ben Eater
62af02bd4e Empty the output element before parsing the input
If there's an exception while parsing (because it's something katex doesn't support), the output doesn't get cleared. Typically when this happens, we'll fall back to MathJax and render that in a different element, leaving the previous KaTex-formatted math plus the new MathJax-formatted math next to each other in the page, which is never what you'd want.

Test Plan: Using the fallback mechanism in khan-exercises utils/tex.js, render something katex can deal with, like "3", then using the same element, reprocess with something katex can't deal with, like "\approx 3". Previously the result would be "3 \approx 3" (with the first 3 being left over from the original katex rendering. With this change, only the "\approx 3" remains on the page.

Auditors: alex, alpert
2013-11-12 14:09:13 -08:00
Ben Alpert
d17c0922e4 Update browserify
For more deterministic builds, maybe.

Auditors: emily
2013-09-13 16:23:19 -07:00
Ben Alpert
f3225ee7ee Add percent sign
Auditors: emily
2013-09-13 16:10:34 -07:00
Ben Alpert
2efa794fd3 Add \triangle
Auditors: emily
2013-08-27 18:33:40 -07:00
Emily Eisenberg
8a8a9505cb Fix sizing
Make sizing blocks inline-block

Auditors: alpert
2013-08-22 17:14:55 -07:00
Emily Eisenberg
387c159a8e Add sizing functions (like \small)
Summary:
Right now, when the size gets bigger, this still doesn't work, so there's a
check to prevent that. However, functions that go smaller (like `\small`,
`\tiny`, etc) do work. Also, we can't seem to use the sizing functions inside
of fractions (so something like `\dfrac{\small\frac{x}{y}}{z}` doesn't work).
However, the most prominent use case is `\small` as the outer-most object, so
this is still helpful. This commit has the parsing and stuff to handle all of
it, but it'll throw an error if you try to do something that doesn't work. (For
the record, "doesn't work" means "looks bad", not "throws an unexpected
error").

Test Plan:
Make sure things like `\small x` work, and things like `\Huge x` and
`\frac{\small x}{y}` don't.

Reviewers: alpert

Reviewed By: alpert

Differential Revision: http://phabricator.khanacademy.org/D3619
2013-08-21 20:22:24 -07:00
Ben Alpert
944b55a6b0 Make supsub work with empty nucleus
Auditors: emily
2013-08-17 16:14:06 -07:00
Emily Eisenberg
f58f582aa5 Don't import fonts.css
Otherwise, when we copy into the main repo, it messes things up.

Auditors: alpert
2013-08-15 12:07:16 -07:00
Emily Eisenberg
920dd0bef9 Add some AMS characters
Summary:
\nleq and \ngeq are AMS characters, so add support for parsing and
showing those. Also, add font metrics from the ams_regular font.

Test Plan:
View `\ngeq \geq`, make sure that they look the same but with a
slash through `\ngeq`. View `a \ngeq b`, make sure there's the right spacing
for a rel.

Reviewers: alpert

Reviewed By: alpert

Differential Revision: http://phabricator.khanacademy.org/D3547
2013-08-14 17:39:24 -07:00
Ben Alpert
7f25fd7dc9 Parse metrics directly from .ttf files
Summary:
Fixes T1325.

This has the advantage of not having to do the mapping manually. Also it means that characters like \neq are included in the mapping, so this resolves T1323 as well.

I opted to group the metrics by character instead of by metric type because I think it'll gzip better and it makes getCharacterMetrics simpler anyway.

Test Plan: The test page looks identical to the pixel to my eye.

Reviewers: emily

Reviewed By: emily

Maniphest Tasks: T1323, T1325

Differential Revision: http://phabricator.khanacademy.org/D3535
2013-08-14 10:57:00 -07:00
Emily Eisenberg
9fc357b8a1 Add italic correction
Summary: Add margin to the right of characters that have italic correction.

Test Plan:
Look at `f'` and `C'` before and after. Note that they both now look
good at small font sizes (like 17pt).

Reviewers: alpert

Reviewed By: alpert

Differential Revision: http://phabricator.khanacademy.org/D3534
2013-08-14 10:51:09 -07:00
Emily Eisenberg
ab1b2d6fdc Oops, forgot about commas 2013-08-13 18:27:42 -07:00
Emily Eisenberg
0a3a2271f4 Add ability to calculate heights/depths
Summary:
This diff does a couple different things:

 - There is now a metrics/ folder, which contains the property files describing
   the metrics if the fonts, as well as a script for reading and printing the
   metrics in javascript.
 - Fractions and superscripts/subscripts are now rendered in slightly different
   ways now (notably, no use of inline-table). This allows for much more precise
   positioning of the superscripts, subscripts, numerators, and denominators,
   while still having an appropriate baseline. Also, there is no longer a
   sup/sub/supsub distinction, there are only supsubs with null sup/sub.
 - Using the new font metrics and by implementing the formulas found in The TeX
   Book, Appendix G, the heights and depths of all of the sub-expressions in a
   formula are now calculated. These are currently used to:
    - Correctly position superscripts, subscripts, numerators, and denominators
    - Adjust the height and depth of the overall expression so it takes up the
      appropriate space
 - Because we have to add attributes (height and depth) to every attribute, I
   have changed the way DOM nodes are assembled. Now, instead of assembling the
   DOM elements inline (which is a problem because we need to track
   height/depth, and we shouldn't (and can't in IE 8) attach raw attributes to DOM
   nodes), we assemble a pseudo-DOM structure with the extra information, and
   then actually assemble it at the very end.

The main page also now has an updated expression to show off and test the new
and improved parsing.

Test Plan:
View the main page, make sure that the expression renders. Make sure
that the tests pass. Make sure that expressions have the correct calculated
height (this is most easily tested by viewing them on the main page and making
sure that the top of the expression lines up with the bottom of the input box).

Reviewers: alpert

Reviewed By: alpert

Differential Revision: http://phabricator.khanacademy.org/D3442
2013-08-13 18:16:43 -07:00
Emily Eisenberg
c583d23a7c Get rid of make copy
Auditors: alpert
2013-08-10 03:26:07 -07:00
Emily Eisenberg
5788a76dcf Do bin -> ord for all the correct types
Fixes T1303

Auditors: alpert
2013-08-10 03:23:46 -07:00
Emily Eisenberg
7e5e6a90d3 Add the \KaTeX command
Summary:
Add a command to print out a TeX-style logo for KaTeX. I think the
code is okay, but suggestions for the design of the logo are most welcome (I'll
post screenshots soon).

Test Plan: Make sure \KaTeX renders, and the tests still succeed.

Reviewers: alpert

Reviewed By: alpert

Differential Revision: http://phabricator.khanacademy.org/D3443
2013-08-09 20:51:05 -07:00
Emily Eisenberg
cfb9f2b31b Refactor some stuff
Summary:
Pull node making into a separate module, make an "options" param for
the make_ functions, and pull the different types of groups into separate
functions.

Test Plan: Open the homepage, make sure everything still works.

Reviewers: alpert

Reviewed By: alpert

Differential Revision: http://phabricator.khanacademy.org/D3368
2013-08-06 14:12:06 -07:00
Ben Alpert
5d98bf6544 Copy to the right place in khan-exercises
Auditors: emily
2013-08-05 14:22:56 -07:00
Ben Alpert
60ddb2d903 Apply nowrap to .katex
Fixes T1243.

Auditors: emily
2013-08-04 12:55:29 -07:00
Ben Alpert
6883017bc4 Look at WebKit version instead of checking Safari
Reviewers: emily

Reviewed By: emily

Differential Revision: http://phabricator.khanacademy.org/D3317
2013-08-01 17:43:06 -07:00
Joel Burget
aa4e05a7cf Add a setup rule to Makefile
It installs npm prerequisites.
2013-07-30 13:54:43 -07:00
Ben Alpert
cab5af40b6 Always throw real ParseErrors
Also sneak in a colon.

Auditors: emily
2013-07-28 17:54:41 -07:00
Emily Eisenberg
3b69354fd6 Improve the makefile
Summary: Make the makefile copy files into the correct places in all
three repos. (note, the khan-exercises location might change since we
don't want to have two copies of things, but it's where it is in my
setup right now)

Auditors: alpert
2013-07-26 14:10:35 -07:00
Emily Eisenberg
e744b02090 Move main node cleanup back
Summary: If someone wants the node to be cleared out, they will have to
do it themselves.

Auditors: alpert
2013-07-26 13:41:29 -07:00
Emily Eisenberg
62b4e68a1c Make safari only break on fractions
Summary: Also, make errors on the initial parse not prevent further
parses.

Auditors: alpert
2013-07-25 19:15:16 -07:00
Emily Eisenberg
905fb7fb71 Don't run in Safari
Summary: Safari has weird bugs associated with inline-table and
vertical-align, so we just won't render in Safari.

Auditors: alpert
2013-07-25 18:59:20 -07:00
Emily Eisenberg
79a50b3abe Make the linter happy
Auditors: alpert
2013-07-24 20:37:56 -07:00
Emily Eisenberg
fa101db4e1 Make katex always clean up after itself
Summary: This makes it more annoying to use locally, because it goes
away when you type something bad, but is much more useful in use in
khan-exercises and perseus.

Auditors: alpert
2013-07-24 14:49:21 -07:00
Emily Eisenberg
138facd785 Add new fonts, with correct font face names
Auditors: alpert
2013-07-23 16:30:14 -07:00
Emily Eisenberg
1430ebaf06 Make ParseErrors differentiable from other Errors
Auditors: alpert
2013-07-22 14:46:13 -07:00
Ben Alpert
dd8923deca Dollar sign
Auditors: emily
2013-07-20 18:23:15 -07:00
Ben Alpert
41ad81d831 Make uppercase Greek letters use roman font
Fixes T1228.

Test Plan:
In `\Omega \omega`, Omega is roman and omega is italic.

Auditors: emily
2013-07-18 22:55:43 -07:00
Emily Eisenberg
383ca01434 Sync with Khan-exercises
Summary:
Add some things in to make this more useful to khan-exercises.
Notably, make KaTeX.process create and clean up its own .katex node, and rename
.mathmathmath -> .katex.

Test Plan: Make test, make sure the main page still renders stuff

Reviewers: alpert

Reviewed By: alpert

Differential Revision: http://phabricator.khanacademy.org/D3061
2013-07-17 15:43:55 -07:00
Ben Alpert
b101582aac printf not echo -n
Auditors: emily
2013-07-16 22:03:39 -07:00
Ben Alpert
c08fadfaa9 Parse single superscripts and subscripts
Summary:
Add the ability to parse lone `^x` and `_y`, etc. This basically just
involves more checking of cases in the increasingly ugly `parseAtom` function.
Also, now we manually check for the cases of double superscripts and
subscripts.

Test Plan: Make sure the tests pass. Make sure things like `^x` and `_y` parse.

Reviewers: emily

Reviewed By: emily

Differential Revision: http://phabricator.khanacademy.org/D3095
2013-07-16 22:00:54 -07:00
Emily Eisenberg
bcd6e8687f Fix the failing frac test
Summary: Also add some more frac tests

Auditors: alpert
2013-07-16 17:46:58 -07:00
Emily Eisenberg
975234e813 Fix some minor things
Summary: Fix llap/rlap again, fix lexing errors

Auditors: alpert
2013-07-15 12:12:15 -07:00
Ben Alpert
09311de814 Add Greek letters
Summary: Fixes T1190.

Test Plan: `\alpha \beta \gamma \delta \epsilon \varepsilon \zeta \eta \theta \vartheta \iota \kappa \lambda \mu \nu \xi \omicron \pi \varpi \rho \varrho \sigma \varsigma \tau \upsilon \phi \varphi \chi \psi \omega \Gamma \Delta \Theta \Lambda \Xi \Pi \Sigma \Upsilon \Phi \Psi \Omega`

Reviewers: emily

Reviewed By: emily

Maniphest Tasks: T1190

Differential Revision: http://phabricator.khanacademy.org/D3054
2013-07-14 22:54:01 -07:00
Ben Alpert
a5840aae4b Add more symbols
Summary:
', \angle, \circ, \gets, \infty, \leftarrow, \prime, \rightarrow, \times, \to

Fixes T1191.

Reviewers: emily

Reviewed By: emily

Maniphest Tasks: T1191

Differential Revision: http://phabricator.khanacademy.org/D3053
2013-07-14 22:53:43 -07:00
Ben Alpert
c774b69de8 Make contains() actually work in IE8
Summary: IE8 doesn't have indexOf on arrays!

Reviewers: emily

Reviewed By: emily

Differential Revision: http://phabricator.khanacademy.org/D3052
2013-07-14 22:46:00 -07:00
Ben Alpert
ed9d62d98c Inherit fraction bar color from surrounding text
Test Plan: Fractions look okay in Chrome, Firefox, IE.

Reviewers: emily

Reviewed By: emily

Differential Revision: http://phabricator.khanacademy.org/D3051
2013-07-14 22:41:03 -07:00
Ben Alpert
e29fe0c683 Grosser color support for prettier results
Test Plan: `\orange{x}\blue{-4}`, `\orange{x-}\blue{-4}` look the same after desaturation as `x-4` and `x--4`. In addition, `\orange{x}\blue{{-4}}` looks appropriately atrocious (i.e., has no space whatsoever).

Reviewers: emily

Reviewed By: emily

Differential Revision: http://phabricator.khanacademy.org/D3050
2013-07-14 21:34:05 -07:00
Ben Alpert
e472b0ba9d Add TeX style support
Test Plan:
`\blue\frac12 + \frac{2(y-z)}{2+\frac1{7+\frac31}} \div \orange{\arctan x^{2+\frac43}_{2}} * 2^{2^{2^2}}` looks reasonable, as does
`\blue\frac12 + \dfrac{2(y-z)}{2+\frac1{7+\frac31}} \div \orange{\arctan x^{2+\frac43}_{2}} * 2^{2^{2^2}}`.

Reviewers: emily

Reviewed By: emily

Differential Revision: http://phabricator.khanacademy.org/D3047
2013-07-14 16:55:46 -07:00
Emily Eisenberg
ed82784cba Non-capturing regex, don't catch some exceptions
Auditors: alpert
2013-07-13 20:55:35 -07:00
Emily Eisenberg
a831e94a51 Remove dependency on underscore
Summary:
Remove all uses of underscore. For the things we actually need, make a
"util" file and put them in there.

Test Plan:
Make sure the test still succeed, and that the main page still
works.

Reviewers: alpert

Reviewed By: alpert

Differential Revision: http://phabricator.khanacademy.org/D3043
2013-07-13 20:42:19 -07:00
Emily Eisenberg
0da85483c4 Remove Parser options usage
Summary: Now, have katex catch and print exceptions instead of the
parser

Auditors: alpert
2013-07-13 18:15:17 -07:00
Emily Eisenberg
20658a95b6 Add \ in front of functions in the parser
Auditors: alpert
2013-07-13 16:13:05 -07:00
Emily Eisenberg
38e2d600fd Allow some functions to have letters after them
Summary: Allow there to be letters immediately after \ , \;, \,, \:.

Test Plan: Run the tests

Reviewers: alpert

Reviewed By: alpert

Differential Revision: http://phabricator.khanacademy.org/D3031
2013-07-13 00:05:41 -07:00