* Combine characters together in all expressions
Call `tryCombineChars` in `buildExpression`
* update screenshots, exclude 'coverage' from lint
* update MathML snapshots
* don't combine two 'mbin's or two 'mord's
* update screenshots
* update screenshots
Co-authored-by: ylemkimon <y@ylem.kim>
Co-authored-by: Kevin Barabash <kevinb@khanacademy.org>
* Support {CD}
* Edit screenshotter test to fit on one page
* Update screenshots
* Remove bogus Safari screenshot
* Edit documentation to avoid tag conflicts and explain delimiters
* Add type annotations
* Add bogus safari screenshot
* Update with real Safari screenshot
* Set label vertical alignment
* Revise call to parseExpression() per PR 2085 changes to macro parsing
* Update Firefox screenshot
* Pick up review comments
* Add unit tests and snapshot.
* Tighten up label collection.
* Better loop index
* remove extra space
* Picked up comments. Added a parse check. Added a test.
Co-authored-by: ylemkimon <y@ylem.kim>
Co-authored-by: Kevin Barabash <kevinb@khanacademy.org>
Co-authored-by: Kevin Barabash <kevinb7@gmail.com>
* Remove `greediness` property
Use boolean `grouped` property instead, which is more consistent with
LaTeX.
BREAKING CHANGE: \cfrac, \color, \textcolor, \colorbox, \fcolorbox are
no longer grouped.
* Rename grouped to allowedInArgument
* Reenable tests
* Update documentation
* Fix typo
Co-authored-by: Kevin Barabash <kevinb@khanacademy.org>
* Bump flow version
* Bump jest version
* Bump eslint version
* Bump rollup version
* Bump webpack version
* Bump misc dependencies and update lockfile
* Update lockfile
* Bump commander version
* Bump misc dependencies
* Bump istanbul version
* Bump docusaurus version
* Update lockfile
* Explicitly declare dependencies
* Bump caniuse-lite version
* Update lockfile
* Bump commander version
* Bump webpack and css-loader version
* Bump flow version
* Add support for \expandafter
* Add support for \noexpand
* Add support for \edef
* Update comments
* Allow \long before macro definition
* Update documentation
* Update comments
* Fix defPrefix
* Add support for \let
* Update documentation
* Print error token
* Update documentation
* Check whether command is expandable
* Add tests
* Fix token order
* Make noexpand a Token property
* Throw error if control sequence is undefined when expanding
* Rename expandableOnly to expandOnly
* Make unexpandable macro property
* Move \expandafter to macros.js
* Add TODO
* Fix merge conflict
* Update a test case
* Remove unused functions in MacroContextInterface
* Update comments
* Refactor code
* Move \noexpand to macros
* Update MacroExpander.js
* Add a test case
* Separate control sequence check to a function
* Add support for \futurelet
* Separate RHS getter to a function
* Update documentation
* Move expandOnly logic to expandOnce
* Refactor code and update comments
Co-authored-by: Kevin Barabash <kevinb@khanacademy.org>
* Fix delimiter error message
Avoid "circular structure" error message by avoiding JSON.stringify on a
parse structure when getting an invalid delimiter type (e.g. ordgroup).
Instead, report type of delimiter when it's invalid. Fixes#2184.
* Fix and add tests
* Add parseNode type `internal`
* Move \def and \newcommand to functions
* Fix Flow error
* Separate \global
Move \newcommand back to macros for now
* Rename assignment.js to def.js
* Update test cases
* Add comments
* Update a test case
We used functions with $FlowFixMe as Flow couldn't refine ParseNode
using its type. It seems the issue has been fixed and complicated
function calls can be removed.
* Fix parse timing by separating consume() into fetch() and consume()
Fix#1989, and generally cleanup parse timing (many fewer hoops to jump
through) by defining two methods on parser:
1. `consume()` marks the current token (`nextToken`) as "done", but
doesn't yet fetch the next token (setting `nextToken` to `null`).
2. `fetch()` fetches the next token if we don't already have one
(e.g., if last token was `consume()`d).
Before this change, `consume()` did both actions. By separating them,
and allowing the parser to live in a state for a while where `nextToken`
is `null`, it is far easier to change settings (in particular, math/text
mode and catcodes) before reading the next token, in a way that depends
on what we're parsing. For example, if an argument should be treated in
text mode, we can just set the mode in the argument parser, instead of
when the previous token was consumed. Similarly, if an argument should
be treated as a URL, we can just set the catcode of `%` in the URL
argument parser, and reset it after. We no longer have to take care to
reset things before calling `consume()`.
This change mostly involves changing `this.nextToken` to `this.fetch()`.
In a perfect world, we could use slightly fewer calls to `this.fetch()`,
but Flow doesn't realize that `this.nextToken` will be non-null after a
call to `this.fetch()`, so we need to use a few more calls to
`this.nextToken()` or a few more local `nextToken` variables.
* Remove now-unnecessary consumeMath
* Update Parser.js
* Use current font for accents
Fix#353 using `buildCommon.makeSymbol` to automatically determine font
for the accent symbol.
* Fix screenshots
* Fix flow error
* Fix file permissions
* copy katex-a11y.js from webapp to contrib/to-a11y-string.js
* first pass of updating to-a11y-string to use flow
* Set up test harness and write some tests
- add flow types for jest
- create wallaby config file
- add prettier as a dep and set up .prettierrc so that we use .toMatchInlineSnapshot() and have jest insert the snapshot for us
- add lots of TODOs (I'll create tickets for these later)
* Add some to get the tests passing for now
* remove commented out parts of wallaby.js config file
* remove some stale strings, fix flow issue, add more coverage
* add , add few more tests, handle middle
* fix minor nits in tests
* rename to-a11y-string to render-a11y-string, updatte webpack config to build extension
* add test for \boxed
* remove commented out code
* Remove forced \normalsize in \raisebox
Fix#1786 (incorrect size of "E" in `\TeX`) by fixing `\raisebox` to
keep the current font size. Previously, `\raisebox` was rendering its
second argument as if it were in `\normalsize\textrm{...}`; now,
the argument is just as if it were in `\textrm{...}`.
* Fix screenshots
* New "hbox" argument type to convert box-like arguments
* Review comments
* Fix \fbox to use hbox argument
* Render A in \LaTeX and \KaTeX in \scriptstyle (not \scriptsize)
* Add screenshot test
* Revert .sizing { width: min-content} thanks to #2044
* Fix font choice in operators like \log (e.g. \boldsymbol{\log})
Fix#1971 by correctly passing arguments into the font choice for
the HTML handler for operators like \log.
* Extend BoldSymbol screenshot test
* Require options argument in mathsym to avoid this type of bug in the future
* Update screenshot
* trust option to indicate whether input text is trusted
* Revamp into trust contexts beyond just command
* Document new trust function style
* Fix screenshot testing
* Use trust setting in \url and \href
* Check `isTrusted` in `\url` and `\href` (so now disabled by default)
* Automatically compute `protocol` from `url` in `isTrusted`, so it
doesn't need to be passed into every context.
* Document untrusted features in support list/table
* Existing tests trust by default
* remove allowedProtocols and fix flow errors
* remove 'allowedProtocols' from documentation
* add a comment about a flow error, rename urlToProtocol to protocolFromUrl
* add tests test that use function version of trust option
* default trust to false in MathML tests
* fix test title, remove 'trust: false' from test settings since it's the default
* Improve MathML for classes
* Fix lint errors
* Fix another lint error
* Simplify MathML resulting from single character box
* Fix lint errors
* make some of the arrays in our html/mathml helper functions readonly
* \color affects following \right
Fix#1844 by giving `leftright` nodes a `rightColor` attribute for how
to color the right bracket. Now `\color` sets the macro
`\current@color` in the current environment (in particular, resetting
after `\right`), just like `color.sty` does in LaTeX. This is used to
specially pass the current color into any following `\right` and then
into the `leftright` parse node.
* Add test
* Put each array cell in its own group/namespace
* Improve cell group isolation, add test and TODO
* Improve comments
* Support \textup and \textmd
This PR adds support for `\textup` and `\textmd`, which are the inverses of
`\textit` and `\textbf`. Unlike bare `\text`, they result in `textup` and
`textmd` classes being applied, but those have no CSS rules, so they act the
same as bare `\text`.
Fixes#1909.
* Add documentation
* Add unsupported font commands