From f364bc1e756967a745a2831975aa27e0e4aa1763 Mon Sep 17 00:00:00 2001 From: zorkow Date: Tue, 3 Sep 2019 16:51:28 +0100 Subject: [PATCH 001/103] Adds comments to all a11y options. --- ts/a11y/explorer.ts | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/ts/a11y/explorer.ts b/ts/a11y/explorer.ts index 19f3a1283..0221494b0 100644 --- a/ts/a11y/explorer.ts +++ b/ts/a11y/explorer.ts @@ -234,27 +234,27 @@ export function ExplorerMathDocumentMixin Date: Wed, 4 Sep 2019 18:54:32 -0400 Subject: [PATCH 002/103] Fix name for amsCd component --- components/src/input/tex/extensions/ams_cd/amscd.js | 2 +- components/src/input/tex/extensions/ams_cd/build.json | 2 +- components/src/input/tex/extensions/ams_cd/webpack.config.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/components/src/input/tex/extensions/ams_cd/amscd.js b/components/src/input/tex/extensions/ams_cd/amscd.js index 7518b2c86..901d237cb 100644 --- a/components/src/input/tex/extensions/ams_cd/amscd.js +++ b/components/src/input/tex/extensions/ams_cd/amscd.js @@ -1 +1 @@ -import './lib/amscd.js'; +import './lib/amsCd.js'; diff --git a/components/src/input/tex/extensions/ams_cd/build.json b/components/src/input/tex/extensions/ams_cd/build.json index ba1ae8479..1cd181e2e 100644 --- a/components/src/input/tex/extensions/ams_cd/build.json +++ b/components/src/input/tex/extensions/ams_cd/build.json @@ -1,5 +1,5 @@ { - "component": "input/tex/extensions/amscd", + "component": "input/tex/extensions/amsCd", "targets": ["input/tex/ams_cd"] } diff --git a/components/src/input/tex/extensions/ams_cd/webpack.config.js b/components/src/input/tex/extensions/ams_cd/webpack.config.js index 56a59b60d..a0d1028ae 100644 --- a/components/src/input/tex/extensions/ams_cd/webpack.config.js +++ b/components/src/input/tex/extensions/ams_cd/webpack.config.js @@ -1,7 +1,7 @@ const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( - 'input/tex/extensions/amscd', // the package to build + 'input/tex/extensions/amsCd', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex-base/lib', From 43007bec7e6de4a94b4f5e189ee717842bebce60 Mon Sep 17 00:00:00 2001 From: zorkow Date: Thu, 5 Sep 2019 14:38:16 +0100 Subject: [PATCH 003/103] Fixes typo in comment. --- ts/a11y/explorer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ts/a11y/explorer.ts b/ts/a11y/explorer.ts index 0221494b0..9c6cfc6ef 100644 --- a/ts/a11y/explorer.ts +++ b/ts/a11y/explorer.ts @@ -234,7 +234,7 @@ export function ExplorerMathDocumentMixin Date: Mon, 9 Sep 2019 16:58:30 +0100 Subject: [PATCH 004/103] Stops conversion once priority is greater than end only. --- ts/core/MathDocument.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ts/core/MathDocument.ts b/ts/core/MathDocument.ts index 2d11a8e20..a1a303a5c 100644 --- a/ts/core/MathDocument.ts +++ b/ts/core/MathDocument.ts @@ -206,7 +206,7 @@ export class RenderList extends PrioritizedList> { */ public renderConvert(math: MathItem, document: MathDocument, end = STATE.LAST) { for (const item of this.items) { - if (item.priority >= end) return; + if (item.priority > end) return; if (item.item.convert) { if (item.item.renderMath(math, document)) return; } From d7a5c1893e15c26ce5b0bfdaeade360510eebe51 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Tue, 10 Sep 2019 22:54:03 -0400 Subject: [PATCH 005/103] Check that parent is defined before getting its metrics. Resolves issue mathjax/MathJax#2191. --- ts/core/MathDocument.ts | 2 +- ts/output/common/OutputJax.ts | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/ts/core/MathDocument.ts b/ts/core/MathDocument.ts index 2d11a8e20..d53932f0c 100644 --- a/ts/core/MathDocument.ts +++ b/ts/core/MathDocument.ts @@ -334,7 +334,7 @@ export interface MathDocument { * Convert a math string to the document's output format * * @param {string} math The math string to convert - * @params {OptionList} optoins The options for the conversion (e.g., format, ex, em, etc.) + * @params {OptionList} options The options for the conversion (e.g., format, ex, em, etc.) * @return {MmlNode|N} The MmlNode or N node for the converted content */ convert(math: string, options?: OptionList): MmlNode | N; diff --git a/ts/output/common/OutputJax.ts b/ts/output/common/OutputJax.ts index a02f21eee..1dee55181 100644 --- a/ts/output/common/OutputJax.ts +++ b/ts/output/common/OutputJax.ts @@ -261,8 +261,11 @@ export abstract class CommonOutputJax< const maps = this.getMetricMaps(html); for (const math of html.math) { const map = maps[math.display ? 1 : 0]; - const {em, ex, containerWidth, lineWidth, scale} = map.get(adaptor.parent(math.start.node)); - math.setMetrics(em, ex, containerWidth, lineWidth, scale); + const parent = adaptor.parent(math.start.node); + if (parent) { + const {em, ex, containerWidth, lineWidth, scale} = map.get(parent); + math.setMetrics(em, ex, containerWidth, lineWidth, scale); + } } } @@ -297,7 +300,7 @@ export abstract class CommonOutputJax< for (const math of html.math) { const node = adaptor.parent(math.start.node); const map = domMaps[math.display? 1 : 0]; - if (!map.has(node)) { + if (!map.has(node) && node) { map.set(node, this.getTestElement(node, math.display)); } } From f4ce2ab10d66f9680d63d14b2624b88a22786271 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Tue, 10 Sep 2019 23:57:21 -0400 Subject: [PATCH 006/103] Fix problem with handling of multiple classes being added to the output, and fix problem with multiple classes being added to TeXAtom output during serialization of the internal MathML. Resolves mathjax/MathJax#2185 --- ts/core/MmlTree/SerializedMmlVisitor.ts | 21 ++++++++++----------- ts/output/chtml/Wrapper.ts | 5 ++++- ts/output/svg/Wrapper.ts | 5 ++++- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/ts/core/MmlTree/SerializedMmlVisitor.ts b/ts/core/MmlTree/SerializedMmlVisitor.ts index d3dcf90fa..bd0843ba1 100644 --- a/ts/core/MmlTree/SerializedMmlVisitor.ts +++ b/ts/core/MmlTree/SerializedMmlVisitor.ts @@ -86,16 +86,15 @@ export class SerializedMmlVisitor extends MmlVisitor { * @return {string} The serialized contents of the mrow, properly indented. */ public visitTeXAtomNode(node: MmlNode, space: string) { - let texclass = node.texClass < 0 ? 'NONE' : TEXCLASSNAMES[node.texClass]; - let mml = space + '\n'; - const endspace = space; - space += ' '; - for (const child of node.childNodes) { - mml += this.visitNode(child, space); - } - mml += '\n' + endspace + ''; - return mml; + let texclass = node.texClass < 0 ? 'NONE' : TEXCLASSNAMES[node.texClass]; + let children = this.childNodeMml(node, space + ' ', '\n'); + let attributes = node.attributes; + let names = attributes.getExplicit('class'); + attributes.set('class', 'MJX-TeXAtom-' + texclass + (names ? ' ' + names : '')); + let mml = space + '' + + (children.match(/\S/) ? '\n' + children + space : '') + ''; + attributes.set('class', names); + return mml; } /** @@ -111,7 +110,7 @@ export class SerializedMmlVisitor extends MmlVisitor { /** * The generic visiting function: - * Make the string versino of the open tag, properly indented, with it attributes + * Make the string version of the open tag, properly indented, with it attributes * Increate the indentation level * Add the childnodes * Add the end tag with proper spacing (empty tags have the close tag following directly) diff --git a/ts/output/chtml/Wrapper.ts b/ts/output/chtml/Wrapper.ts index 3728f8de1..c44d30aac 100644 --- a/ts/output/chtml/Wrapper.ts +++ b/ts/output/chtml/Wrapper.ts @@ -303,7 +303,10 @@ CommonWrapper< } } if (attributes.get('class')) { - this.adaptor.addClass(this.chtml, attributes.get('class') as string); + const names = (attributes.get('class') as string).split(/ /); + for (const name of names) { + this.adaptor.addClass(this.chtml, name); + } } } diff --git a/ts/output/svg/Wrapper.ts b/ts/output/svg/Wrapper.ts index 33d2b6e69..ab30616f5 100644 --- a/ts/output/svg/Wrapper.ts +++ b/ts/output/svg/Wrapper.ts @@ -233,7 +233,10 @@ CommonWrapper< } } if (attributes.get('class')) { - this.adaptor.addClass(this.element, attributes.get('class') as string); + const names = (attributes.get('class') as string).split(/ /); + for (const name of names) { + this.adaptor.addClass(this.element, name); + } } } From 06c8aec80e6301402fae889fb48169c38b37a9e2 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Sun, 15 Sep 2019 08:27:37 -0400 Subject: [PATCH 007/103] Make sure mjx-mtr CSS is produced when only mlabeledtr are used. Resolve issue #2200. --- ts/output/chtml/Wrappers/mtr.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/ts/output/chtml/Wrappers/mtr.ts b/ts/output/chtml/Wrappers/mtr.ts index e9881c4a6..dbfd285cf 100644 --- a/ts/output/chtml/Wrappers/mtr.ts +++ b/ts/output/chtml/Wrappers/mtr.ts @@ -124,6 +124,7 @@ CommonMlabeledtrMixin, Constructor).labels, row); } } From 3a96e2b3e23b006405e543d4f8dbca2cef8a8bc9 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Sun, 15 Sep 2019 13:29:33 -0400 Subject: [PATCH 008/103] Correct the default texClass for AbstractMmlBaseNode elements. Resolves mathjax/MathJax#2187 --- ts/core/MmlTree/MmlNode.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ts/core/MmlTree/MmlNode.ts b/ts/core/MmlTree/MmlNode.ts index e77011643..a90fe1def 100644 --- a/ts/core/MmlTree/MmlNode.ts +++ b/ts/core/MmlTree/MmlNode.ts @@ -866,7 +866,7 @@ export abstract class AbstractMmlBaseNode extends AbstractMmlNode { */ public setTeXclass(prev: MmlNode) { this.getPrevClass(prev); - this.texClass = TEXCLASS.NONE; + this.texClass = TEXCLASS.ORD; let base = this.childNodes[0]; if (base) { if (this.isEmbellished || base.isKind('mi')) { From fb16f771e956b74cb06ef9440766007f04946dec Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Sun, 15 Sep 2019 17:57:05 -0400 Subject: [PATCH 009/103] Fix tagFormat to allow it to work with ams tags. Resolves issue mathjax/MathJax#2201. --- ts/input/tex/tag_format/TagFormatConfiguration.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/ts/input/tex/tag_format/TagFormatConfiguration.ts b/ts/input/tex/tag_format/TagFormatConfiguration.ts index 639d0a4e9..ee6c74662 100644 --- a/ts/input/tex/tag_format/TagFormatConfiguration.ts +++ b/ts/input/tex/tag_format/TagFormatConfiguration.ts @@ -40,6 +40,15 @@ let tagID = 0; */ export function tagFormatConfig(config: Configuration, jax: TeX) { + /** + * If the tag format is being added by one of the other extensions, + * as is done for the 'ams' tags, make sure it is defined so we can create it. + */ + const tags = jax.parseOptions.options.tags; + if (tags !== 'base' && config.tags.hasOwnProperty(tags)) { + TagsFactory.add(tags, config.tags[tags]); + } + /** * The original tag class to be extended (none, ams, or all) */ @@ -103,6 +112,7 @@ export function tagFormatConfig(config: Configuration, jax: TeX) export const TagformatConfiguration = Configuration.create( 'tagFormat', { config: tagFormatConfig, + configPriority: 10, options: { tagFormat: { number: (n: number) => n.toString(), From 97dcd58e1283a50a38c08361f582655417f79151 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Sun, 15 Sep 2019 18:47:48 -0400 Subject: [PATCH 010/103] Make sure we use text nodes for the start and end locations. Resolves issue mathjax/MathJax#2202 --- ts/handlers/html/HTMLDocument.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ts/handlers/html/HTMLDocument.ts b/ts/handlers/html/HTMLDocument.ts index 511979b33..b14c3ffb8 100644 --- a/ts/handlers/html/HTMLDocument.ts +++ b/ts/handlers/html/HTMLDocument.ts @@ -94,10 +94,11 @@ export class HTMLDocument extends AbstractMathDocument { * @return {Location} The Location object for the position of the delimiter in the document */ protected findPosition(N: number, index: number, delim: string, nodes: HTMLNodeArray): Location { + const adaptor = this.adaptor; for (const list of nodes[N]) { let [node, n] = list; - if (index <= n) { - return {node: node, n: index, delim: delim}; + if (index <= n && adaptor.kind(node) === '#text') { + return {node: node, n: Math.max(index, 0), delim: delim}; } index -= n; } From 9b3a67a98195ae4db8d6e6bbbea6b39a4ed5c2da Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Sat, 21 Sep 2019 21:09:43 -0400 Subject: [PATCH 011/103] Add CSS to force LTR direction for SVG output. Resolves issue #2204 --- ts/output/svg.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ts/output/svg.ts b/ts/output/svg.ts index 38a01a075..c9b3ef42c 100644 --- a/ts/output/svg.ts +++ b/ts/output/svg.ts @@ -60,8 +60,11 @@ CommonOutputJax, SVGWrapperFactory, SVGFon * The default styles for SVG */ public static commonStyles: CssStyleList = { + 'mjx-container[jax="SVG"]': { + direction: 'ltr' + }, 'mjx-container[jax="SVG"] > svg': { - 'overflow': 'visible' + overflow: 'visible' }, 'mjx-container[jax="SVG"] > svg a': { fill: 'blue', stroke: 'blue' From 2972b78f322d09141ff6026cdb198f268e596d5c Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Sun, 22 Sep 2019 05:56:24 -0400 Subject: [PATCH 012/103] Don't remeasure metrivcs for math items tha already have been measured --- ts/output/common/OutputJax.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/ts/output/common/OutputJax.ts b/ts/output/common/OutputJax.ts index 1dee55181..513a760d4 100644 --- a/ts/output/common/OutputJax.ts +++ b/ts/output/common/OutputJax.ts @@ -23,7 +23,7 @@ import {AbstractOutputJax} from '../../core/OutputJax.js'; import {MathDocument} from '../../core/MathDocument.js'; -import {MathItem, Metrics} from '../../core/MathItem.js'; +import {MathItem, Metrics, STATE} from '../../core/MathItem.js'; import {MmlNode} from '../../core/MmlTree/MmlNode.js'; import {FontData, FontDataClass, CharOptions, DelimiterData, CssFontData} from './FontData.js'; import {OptionList, separateOptions} from '../../util/Options.js'; @@ -260,11 +260,12 @@ export abstract class CommonOutputJax< const adaptor = this.adaptor; const maps = this.getMetricMaps(html); for (const math of html.math) { - const map = maps[math.display ? 1 : 0]; const parent = adaptor.parent(math.start.node); - if (parent) { + if (math.state() < STATE.METRICS && parent) { + const map = maps[math.display ? 1 : 0]; const {em, ex, containerWidth, lineWidth, scale} = map.get(parent); math.setMetrics(em, ex, containerWidth, lineWidth, scale); + math.state(STATE.METRICS); } } } @@ -299,9 +300,11 @@ export abstract class CommonOutputJax< // for (const math of html.math) { const node = adaptor.parent(math.start.node); - const map = domMaps[math.display? 1 : 0]; - if (!map.has(node) && node) { - map.set(node, this.getTestElement(node, math.display)); + if (node && math.state() < STATE.METRICS) { + const map = domMaps[math.display? 1 : 0]; + if (!map.has(node)) { + map.set(node, this.getTestElement(node, math.display)); + } } } // From d687ac72aa1f0603938cc43758da9b0770980bdd Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Sun, 22 Sep 2019 06:39:26 -0400 Subject: [PATCH 013/103] Prevent handler from trying to remove typeset math that is no longer in teh document --- ts/handlers/html/HTMLMathItem.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/ts/handlers/html/HTMLMathItem.ts b/ts/handlers/html/HTMLMathItem.ts index 5152223e2..eefbc6eca 100644 --- a/ts/handlers/html/HTMLMathItem.ts +++ b/ts/handlers/html/HTMLMathItem.ts @@ -119,18 +119,21 @@ export class HTMLMathItem extends AbstractMathItem { */ public removeFromDocument(restore: boolean = false) { if (this.state() >= STATE.TYPESET) { + const adaptor = this.adaptor; let node = this.start.node; - let math: N | T = this.adaptor.text(''); + let math: N | T = adaptor.text(''); if (restore) { let text = this.start.delim + this.math + this.end.delim; if (this.inputJax.processStrings) { - math = this.adaptor.text(text); + math = adaptor.text(text); } else { - const doc = this.adaptor.parse(text, 'text/html'); - math = this.adaptor.firstChild(this.adaptor.body(doc)); + const doc = adaptor.parse(text, 'text/html'); + math = adaptor.firstChild(adaptor.body(doc)); } } - this.adaptor.replace(math, node); + if (adaptor.parent(node)) { + adaptor.replace(math, node); + } this.start.node = this.end.node = math; this.start.n = this.end.n = 0; } From 4c4ebb6f95dd1a22009526558be4f98467530aa5 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Sun, 22 Sep 2019 09:52:36 -0400 Subject: [PATCH 014/103] Adjust for .5ex offset in CSS vertical-align:middle. Resolves issue mathjax/MathJax#2186 and mathjax/MathJax#2203 --- ts/output/chtml/Wrappers/mtable.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/ts/output/chtml/Wrappers/mtable.ts b/ts/output/chtml/Wrappers/mtable.ts index 705188bf9..e54edc878 100644 --- a/ts/output/chtml/Wrappers/mtable.ts +++ b/ts/output/chtml/Wrappers/mtable.ts @@ -60,6 +60,7 @@ CommonMtableMixin, CHTMLmtr, CHTMLConstru }, 'mjx-table': { 'display': 'inline-block', + 'vertical-align': '-.5ex' }, 'mjx-table > mjx-itable': { 'vertical-align': 'middle', @@ -96,12 +97,6 @@ CommonMtableMixin, CHTMLmtr, CHTMLConstru }, 'mjx-mtable[align="bottom"] > mjx-table': { 'vertical-align': 'bottom' - }, - 'mjx-mtable[align="center"] > mjx-table': { - 'vertical-align': 'middle' - }, - 'mjx-mtable[align="baseline"] > mjx-table': { - 'vertical-align': 'middle' } }; From 4f0be89f33bec23ac819587612c2f9aa2050aa33 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Sun, 22 Sep 2019 20:51:15 -0400 Subject: [PATCH 015/103] Add attribute to identify texClass for TeXAtom output. See mathjax/MathJax#2193 --- ts/output/chtml/Wrappers/TeXAtom.ts | 3 ++- ts/output/svg/Wrappers/TeXAtom.ts | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ts/output/chtml/Wrappers/TeXAtom.ts b/ts/output/chtml/Wrappers/TeXAtom.ts index 6cc08c1f0..2e35ee048 100644 --- a/ts/output/chtml/Wrappers/TeXAtom.ts +++ b/ts/output/chtml/Wrappers/TeXAtom.ts @@ -24,7 +24,7 @@ import {CHTMLWrapper, CHTMLConstructor} from '../Wrapper.js'; import {CommonTeXAtom, CommonTeXAtomMixin} from '../../common/Wrappers/TeXAtom.js'; import {TeXAtom} from '../../../core/MmlTree/MmlNodes/TeXAtom.js'; -import {TEXCLASS} from '../../../core/MmlTree/MmlNode.js'; +import {TEXCLASS, TEXCLASSNAMES} from '../../../core/MmlTree/MmlNode.js'; /*****************************************************************/ /** @@ -43,6 +43,7 @@ export class CHTMLTeXAtom extends CommonTeXAtomMixin extends CommonTeXAtomMixin Date: Mon, 23 Sep 2019 06:49:49 -0400 Subject: [PATCH 016/103] Use min-width on outermost svg when labels are present to prevent the main expression from shrinking if the window size shrinks (e.g., during zooming). Resolves issue #17.: --- ts/output/svg.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/ts/output/svg.ts b/ts/output/svg.ts index 38a01a075..d21554696 100644 --- a/ts/output/svg.ts +++ b/ts/output/svg.ts @@ -236,6 +236,7 @@ CommonOutputJax, SVGWrapperFactory, SVGFon // // Use width 100% with no viewbox, and instead scale and translate to achieve the same result // + adaptor.setStyle(svg, 'min-width', this.ex(W)); adaptor.setAttribute(svg, 'width', pwidth); adaptor.removeAttribute(svg, 'viewBox'); const scale = wrapper.metrics.ex / (this.font.params.x_height * 1000); From 969abd0954df7b0ff0fe657d77bbcc1630ea3fec Mon Sep 17 00:00:00 2001 From: zorkow Date: Fri, 27 Sep 2019 10:39:33 +0100 Subject: [PATCH 017/103] Moves speech generation to first initialisation of walker. --- ts/a11y/explorer/KeyExplorer.ts | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/ts/a11y/explorer/KeyExplorer.ts b/ts/a11y/explorer/KeyExplorer.ts index bb9cf6507..60cfb5391 100644 --- a/ts/a11y/explorer/KeyExplorer.ts +++ b/ts/a11y/explorer/KeyExplorer.ts @@ -161,6 +161,8 @@ export class SpeechExplorer extends AbstractKeyExplorer { public showRegion: string = 'subtitles'; + private init: boolean = false; + /** * Flag in case the start method is triggered before the walker is fully * initialised. I.e., we have to wait for SRE. Then region is re-shown if @@ -186,6 +188,14 @@ export class SpeechExplorer extends AbstractKeyExplorer { * @override */ public Start() { + if (!this.init) { + this.init = true; + sreReady.then(() => { + this.Speech(this.walker); + this.Start(); + }).catch((error: Error) => console.log(error.message)); + return; + } super.Start(); let options = this.getOptions(); this.speechGenerator = sre.SpeechGeneratorFactory.generator('Direct'); @@ -221,14 +231,12 @@ export class SpeechExplorer extends AbstractKeyExplorer { * @param {sre.Walker} walker The sre walker. */ public Speech(walker: sre.Walker) { - sreReady.then(() => { - let speech = walker.speech(); - this.node.setAttribute('hasspeech', 'true'); - this.Update(); - if (this.restarted && this.document.options.a11y[this.showRegion]) { - this.region.Show(this.node, this.highlighter); - } - }).catch((error: Error) => console.log(error.message)); + let speech = walker.speech(); + this.node.setAttribute('hasspeech', 'true'); + this.Update(); + if (this.restarted && this.document.options.a11y[this.showRegion]) { + this.region.Show(this.node, this.highlighter); + } } @@ -270,10 +278,8 @@ export class SpeechExplorer extends AbstractKeyExplorer { let dummy = sre.WalkerFactory.walker( 'dummy', this.node, this.speechGenerator, this.highlighter, this.mml); this.walker = dummy; - this.Speech(dummy); } - /** * Retrieves the speech options to sync with document options. * @return{{[key: string]: string}} The options settings for the speech From cfaab9a2d9c7bbe01fe0e0a30553d7642e9b3703 Mon Sep 17 00:00:00 2001 From: zorkow Date: Fri, 27 Sep 2019 13:25:12 +0100 Subject: [PATCH 018/103] Override for enrichSpeech option to general aria labels in A11y. --- ts/a11y/explorer.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/ts/a11y/explorer.ts b/ts/a11y/explorer.ts index 19f3a1283..2636f9018 100644 --- a/ts/a11y/explorer.ts +++ b/ts/a11y/explorer.ts @@ -229,6 +229,7 @@ export function ExplorerMathDocumentMixin Date: Tue, 24 Sep 2019 16:42:52 +0100 Subject: [PATCH 019/103] Corrects aria-label construction from speech attribute. --- ts/a11y/semantic-enrich.ts | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/ts/a11y/semantic-enrich.ts b/ts/a11y/semantic-enrich.ts index 52565892a..eb370107b 100644 --- a/ts/a11y/semantic-enrich.ts +++ b/ts/a11y/semantic-enrich.ts @@ -133,8 +133,9 @@ export function EnrichedMathItemMixin) { if (this.state() >= STATE.ATTACHSPEECH) return; - const attributes =this.root.attributes; - const speech = (attributes.get('aria-label') || attributes.get('data-semantic-speech')) as string; + const attributes = this.root.attributes; + const speech = (attributes.get('aria-label') || + this.getSpeech(this.root)) as string; if (speech) { const adaptor = document.adaptor; const node = this.typesetRoot; @@ -146,6 +147,21 @@ export function EnrichedMathItemMixin Date: Tue, 24 Sep 2019 17:03:15 +0100 Subject: [PATCH 020/103] Commenting and cleanup. --- ts/a11y/semantic-enrich.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ts/a11y/semantic-enrich.ts b/ts/a11y/semantic-enrich.ts index eb370107b..692679335 100644 --- a/ts/a11y/semantic-enrich.ts +++ b/ts/a11y/semantic-enrich.ts @@ -131,7 +131,7 @@ export function EnrichedMathItemMixin) { + public attachSpeech(document: MathDocument) { if (this.state() >= STATE.ATTACHSPEECH) return; const attributes = this.root.attributes; const speech = (attributes.get('aria-label') || @@ -147,6 +147,11 @@ export function EnrichedMathItemMixin Date: Sat, 19 Oct 2019 07:24:16 -0400 Subject: [PATCH 021/103] Avoid empty class names, as per Volker's review. --- ts/output/chtml/Wrapper.ts | 2 +- ts/output/svg/Wrapper.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ts/output/chtml/Wrapper.ts b/ts/output/chtml/Wrapper.ts index c44d30aac..c0ee8b043 100644 --- a/ts/output/chtml/Wrapper.ts +++ b/ts/output/chtml/Wrapper.ts @@ -303,7 +303,7 @@ CommonWrapper< } } if (attributes.get('class')) { - const names = (attributes.get('class') as string).split(/ /); + const names = (attributes.get('class') as string).trim().split(/ +/); for (const name of names) { this.adaptor.addClass(this.chtml, name); } diff --git a/ts/output/svg/Wrapper.ts b/ts/output/svg/Wrapper.ts index ab30616f5..d43af3ee5 100644 --- a/ts/output/svg/Wrapper.ts +++ b/ts/output/svg/Wrapper.ts @@ -233,7 +233,7 @@ CommonWrapper< } } if (attributes.get('class')) { - const names = (attributes.get('class') as string).split(/ /); + const names = (attributes.get('class') as string).trim().split(/ +/); for (const name of names) { this.adaptor.addClass(this.element, name); } From d818153bad7ab95a0dfe0fdbdd89808e1f0c4d2d Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Sat, 19 Oct 2019 07:28:09 -0400 Subject: [PATCH 022/103] Add missing space (per Volker's review) --- ts/output/common/OutputJax.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ts/output/common/OutputJax.ts b/ts/output/common/OutputJax.ts index 513a760d4..48ffb37e9 100644 --- a/ts/output/common/OutputJax.ts +++ b/ts/output/common/OutputJax.ts @@ -301,7 +301,7 @@ export abstract class CommonOutputJax< for (const math of html.math) { const node = adaptor.parent(math.start.node); if (node && math.state() < STATE.METRICS) { - const map = domMaps[math.display? 1 : 0]; + const map = domMaps[math.display ? 1 : 0]; if (!map.has(node)) { map.set(node, this.getTestElement(node, math.display)); } From 959811e5afffea7e24562498f7466a7b13e86f4a Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Sat, 19 Oct 2019 12:02:04 -0400 Subject: [PATCH 023/103] Make sure styles for msubsup are output when called from munderover with movablelimits --- ts/output/chtml/Wrappers/msubsup.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/ts/output/chtml/Wrappers/msubsup.ts b/ts/output/chtml/Wrappers/msubsup.ts index 9c56a112c..ddc7d9b2c 100644 --- a/ts/output/chtml/Wrappers/msubsup.ts +++ b/ts/output/chtml/Wrappers/msubsup.ts @@ -89,6 +89,16 @@ CommonMsubsupMixin, Constructor Date: Sat, 19 Oct 2019 20:07:46 -0400 Subject: [PATCH 024/103] Allow handling of self-closing tags. Resolves issue #328 --- ts/adaptors/lite/Parser.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ts/adaptors/lite/Parser.ts b/ts/adaptors/lite/Parser.ts index 9a151dece..8af53ebb3 100644 --- a/ts/adaptors/lite/Parser.ts +++ b/ts/adaptors/lite/Parser.ts @@ -189,7 +189,7 @@ export class LiteParser implements MinDOMParser { // // Get the child to be added to the node // - const kind = tag.match(/<(.*?)[\s\n>]/)[1].toLowerCase(); + const kind = tag.match(/<(.*?)[\s\n>/]/)[1].toLowerCase(); const child = adaptor.node(kind) as LiteElement; // // Split out the tag attributes as an array of space, name, value1, value3, value3, @@ -211,7 +211,7 @@ export class LiteParser implements MinDOMParser { // Otherwise, the child tag becames the parent node to which // new tags are added // - if (!SELF_CLOSING[kind]) { + if (!SELF_CLOSING[kind] && !tag.match(/\/>$/)) { if (PCDATA[kind]) { this.handlePCDATA(adaptor, child, kind, parts); } else { From 9403bd34a59348a45a1ab2052e2ac7bb79d25d71 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Sun, 20 Oct 2019 11:39:31 -0400 Subject: [PATCH 025/103] Check that attributes exist. Issue #2210 --- ts/input/tex/FilterUtil.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ts/input/tex/FilterUtil.ts b/ts/input/tex/FilterUtil.ts index f60db8250..470e37b8f 100644 --- a/ts/input/tex/FilterUtil.ts +++ b/ts/input/tex/FilterUtil.ts @@ -69,6 +69,9 @@ namespace FilterUtil { let node = arg.data.root as MmlNode; node.walkTree((mml: MmlNode, d: any) => { let attribs = mml.attributes as any; + if (!attribs) { + return; + } for (const key of attribs.getExplicitNames()) { if (attribs.attributes[key] === mml.attributes.getInherited(key)) { delete attribs.attributes[key]; From 07c3d81ca2cbb704c8fa3b5cd03424daaa9bc800 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Sun, 20 Oct 2019 14:11:31 -0400 Subject: [PATCH 026/103] Improve bounding box for unknown characters (slightly smaller to make square roots work better), and properly place and scale the bbox in CHTML output. --- ts/output/chtml.ts | 15 +++++++++++++-- ts/output/chtml/Wrappers/TextNode.ts | 10 +--------- ts/output/svg.ts | 2 +- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/ts/output/chtml.ts b/ts/output/chtml.ts index 9a7940a80..f1a784654 100644 --- a/ts/output/chtml.ts +++ b/ts/output/chtml.ts @@ -32,7 +32,10 @@ import {MmlNode} from '../core/MmlTree/MmlNode.js'; import {CHTMLWrapper} from './chtml/Wrapper.js'; import {CHTMLWrapperFactory} from './chtml/WrapperFactory.js'; import {CHTMLFontData} from './chtml/FontData.js'; +import {CssFontData} from './common/FontData.js'; import {TeXFont} from './chtml/fonts/tex.js'; +import * as LENGTHS from '../util/lengths.js'; + /*****************************************************************/ /** @@ -187,6 +190,7 @@ CommonOutputJax, CHTMLWrapperFactory, CH const scale = 100 / this.math.metrics.scale; if (scale !== 100) { styles['font-size'] = this.fixed(scale, 1) + '%'; + styles.padding = LENGTHS.em(75 / scale) + ' 0 ' + LENGTHS.em(20 / scale) + ' 0'; } if (variant !== '-explicitFont') { this.cssFontStyles(this.font.getCssFont(variant), styles); @@ -204,13 +208,14 @@ CommonOutputJax, CHTMLWrapperFactory, CH public measureTextNode(text: N) { const adaptor = this.adaptor; text = adaptor.clone(text); - const node = this.html('mjx-measure-text', {}, [text]); + const style = {position: 'absolute', 'white-space': 'nowrap'}; + const node = this.html('mjx-measure-text', {style}, [ text]); adaptor.append(adaptor.parent(this.math.start.node), this.container); adaptor.append(this.container, node); let w = adaptor.nodeSize(text, this.math.metrics.em)[0] / this.math.metrics.scale; adaptor.remove(this.container); adaptor.remove(node); - return {w: w, h: .75, d: .25}; + return {w: w, h: .75, d: .2}; } /** @@ -222,4 +227,10 @@ CommonOutputJax, CHTMLWrapperFactory, CH return font; } + public cssFontStyles(font: CssFontData, styles: StyleList = {}) { + font[0] = 'MJXZERO, ' + font[0]; + return super.cssFontStyles(font, styles); + } + + } diff --git a/ts/output/chtml/Wrappers/TextNode.ts b/ts/output/chtml/Wrappers/TextNode.ts index b1e71daad..bf9c9726b 100644 --- a/ts/output/chtml/Wrappers/TextNode.ts +++ b/ts/output/chtml/Wrappers/TextNode.ts @@ -47,15 +47,7 @@ export class CHTMLTextNode extends CommonTextNodeMixin, SVGWrapperFactory, SVGFon adaptor.append(adaptor.body(adaptor.document), svg); let w = adaptor.nodeSize(text, 1000, true)[0]; adaptor.remove(svg); - return {w: w, h: .75, d: .25}; + return {w: w, h: .75, d: .2}; } } From 9a093b1ed03a3fad0e9670e572ad94b3fc2e56cb Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Sun, 20 Oct 2019 15:54:59 -0400 Subject: [PATCH 027/103] Add support for serializing annotation-xml contents --- ts/core/MmlTree/MmlNode.ts | 16 +++++++++++++++- ts/core/MmlTree/SerializedMmlVisitor.ts | 4 ++-- ts/input/mathml/MathMLCompile.ts | 9 +++++---- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/ts/core/MmlTree/MmlNode.ts b/ts/core/MmlTree/MmlNode.ts index a90fe1def..05510ee02 100644 --- a/ts/core/MmlTree/MmlNode.ts +++ b/ts/core/MmlTree/MmlNode.ts @@ -24,6 +24,7 @@ import {Attributes, INHERIT} from './Attributes.js'; import {Property, PropertyList, Node, AbstractNode, AbstractEmptyNode, NodeClass} from '../Tree/Node.js'; import {MmlFactory} from './MmlFactory.js'; +import {DOMAdaptor} from '../DOMadaptor.js'; /** * Used in setInheritedAttributes() to pass originating node kind as well as property value @@ -1128,6 +1129,11 @@ export class XMLNode extends AbstractMmlEmptyNode { */ protected xml: Object = null; + /** + * DOM adaptor for the content + */ + protected adaptor: DOMAdaptor = null; + /** * @override */ @@ -1146,11 +1152,19 @@ export class XMLNode extends AbstractMmlEmptyNode { * @param {object} xml The XML content to be saved * @return {XMLNode} The XML node (for chaining of method calls) */ - public setXML(xml: Object) { + public setXML(xml: Object, adaptor: DOMAdaptor = null) { this.xml = xml; + this.adaptor = adaptor; return this; } + /** + * @return {string} The serialized XML content + */ + public getSerializedXML() { + return this.adaptor.outerHTML(this.xml); + } + /** * Just indicate that this is XML data */ diff --git a/ts/core/MmlTree/SerializedMmlVisitor.ts b/ts/core/MmlTree/SerializedMmlVisitor.ts index d3dcf90fa..99b1e8390 100644 --- a/ts/core/MmlTree/SerializedMmlVisitor.ts +++ b/ts/core/MmlTree/SerializedMmlVisitor.ts @@ -55,10 +55,10 @@ export class SerializedMmlVisitor extends MmlVisitor { /** * @param {XMLNode} node The XML node to visit * @param {string} space The amount of indenting for this node - * @return {string} The serialization of the XML node (not implemented yet). + * @return {string} The serialization of the XML node */ public visitXMLNode(node: XMLNode, space: string) { - return '[XML Node not implemented]'; + return space + node.getSerializedXML(); } /** diff --git a/ts/input/mathml/MathMLCompile.ts b/ts/input/mathml/MathMLCompile.ts index 220806eaf..ae5a63449 100644 --- a/ts/input/mathml/MathMLCompile.ts +++ b/ts/input/mathml/MathMLCompile.ts @@ -174,18 +174,19 @@ export class MathMLCompile { if (mml.arity === 0) { return; } - for (const child of this.adaptor.childNodes((node)) as N[]) { - const name = this.adaptor.kind(child); + const adaptor = this.adaptor; + for (const child of adaptor.childNodes((node)) as N[]) { + const name = adaptor.kind(child); if (name === '#comment') { continue; } if (name === '#text') { this.addText(mml, child); } else if (mml.isKind('annotation-xml')) { - mml.appendChild((this.factory.create('XML') as XMLNode).setXML(child)); + mml.appendChild((this.factory.create('XML') as XMLNode).setXML(child, adaptor)); } else { let childMml = mml.appendChild(this.makeNode(child)) as MmlNode; - if (childMml.arity === 0 && this.adaptor.childNodes(child).length) { + if (childMml.arity === 0 && adaptor.childNodes(child).length) { if (this.options['fixMisplacedChildren']) { this.addChildren(mml, child); } else { From fbabeeff66ed8733f6d5d54c7f56e589f32693c7 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Sun, 20 Oct 2019 18:35:01 -0400 Subject: [PATCH 028/103] Add support for measuring annotation-xml nodes --- ts/output/chtml/Wrappers/semantics.ts | 19 ++++++++++++++---- ts/output/common/OutputJax.ts | 29 +++++++++++++++++++++++++++ ts/output/svg/Wrappers/semantics.ts | 29 +++++++++++++++++++++++---- 3 files changed, 69 insertions(+), 8 deletions(-) diff --git a/ts/output/chtml/Wrappers/semantics.ts b/ts/output/chtml/Wrappers/semantics.ts index 738d8d08f..40771d82d 100644 --- a/ts/output/chtml/Wrappers/semantics.ts +++ b/ts/output/chtml/Wrappers/semantics.ts @@ -27,6 +27,7 @@ import {CommonSemantics, CommonSemanticsMixin} from '../../common/Wrappers/seman import {BBox} from '../BBox.js'; import {MmlSemantics, MmlAnnotation, MmlAnnotationXML} from '../../../core/MmlTree/MmlNodes/semantics.js'; import {MmlNode, XMLNode} from '../../../core/MmlTree/MmlNode.js'; +import {StyleList} from '../../common/CssStyles.js'; /*****************************************************************/ /** @@ -92,6 +93,14 @@ export class CHTMLannotation extends CHTMLWrapper { */ export class CHTMLannotationXML extends CHTMLWrapper { public static kind = MmlAnnotationXML.prototype.kind; + + public static styles: StyleList = { + 'mjx-annotation-xml': { + 'font-family': 'initial', + 'line-height': 'normal' + } + }; + } /*****************************************************************/ @@ -111,15 +120,17 @@ export class CHTMLxml extends CHTMLWrapper { * @override */ public toCHTML(parent: N) { - this.adaptor.append(parent, this.adaptor.clone((this.node as XMLNode).getXML() as N)); + this.chtml = this.adaptor.append(parent, this.adaptor.clone((this.node as XMLNode).getXML() as N)); } /** * @override */ - public computeBBox() { - // FIXME: compute using the DOM, if possible - return this.bbox; + public computeBBox(bbox: BBox, recompute: boolean = false) { + const {w, h, d} = this.jax.measureXMLnode((this.node as XMLNode).getXML() as N); + bbox.w = w; + bbox.h = h; + bbox.d = d; } /** diff --git a/ts/output/common/OutputJax.ts b/ts/output/common/OutputJax.ts index 48ffb37e9..ca3f892a1 100644 --- a/ts/output/common/OutputJax.ts +++ b/ts/output/common/OutputJax.ts @@ -540,6 +540,35 @@ export abstract class CommonOutputJax< */ public abstract measureTextNode(text: N): UnknownBBox; + /** + * Measure the width, height and depth of an annotation-xml node's content + * + * @param{N} xml The xml content node to be measured + * @return {Object} The width, height, and depth of the content + */ + public measureXMLnode(xml: N) { + const adaptor = this.adaptor; + const content = this.html('mjx-xml-block', {style:{display:'inline-block'}}, [adaptor.clone(xml)]); + const base = this.html('mjx-baseline', {style: {display: 'inline-block', width: 0, height: 0}}); + const style = { + position: 'absolute', + display: 'inline-block', + 'font-family': 'initial', + 'line-height': 'normal' + }; + const node = this.html('mjx-measure-xml', {style}, [base, content]); + adaptor.append(adaptor.parent(this.math.start.node), this.container); + adaptor.append(this.container, node); + const em = this.math.metrics.em * this.math.metrics.scale; + const {left, right, bottom, top} = adaptor.nodeBBox(content); + const w = (right - left) / em; + const h = (adaptor.nodeBBox(base).top - top) / em; + const d = (bottom - top) / em - h; + adaptor.remove(this.container); + adaptor.remove(node); + return {w, h, d}; + } + /** * @param {CssFontData} font The family, style, and weight for the given font * @param {Styles} styles The style object to add the font data to diff --git a/ts/output/svg/Wrappers/semantics.ts b/ts/output/svg/Wrappers/semantics.ts index 39b13d1b8..e2ae776c9 100644 --- a/ts/output/svg/Wrappers/semantics.ts +++ b/ts/output/svg/Wrappers/semantics.ts @@ -27,6 +27,7 @@ import {CommonSemantics, CommonSemanticsMixin} from '../../common/Wrappers/seman import {BBox} from '../BBox.js'; import {MmlSemantics, MmlAnnotation, MmlAnnotationXML} from '../../../core/MmlTree/MmlNodes/semantics.js'; import {MmlNode, XMLNode} from '../../../core/MmlTree/MmlNode.js'; +import {StyleList} from '../../common/CssStyles.js'; /*****************************************************************/ /** @@ -92,6 +93,15 @@ export class SVGannotation extends SVGWrapper { */ export class SVGannotationXML extends SVGWrapper { public static kind = MmlAnnotationXML.prototype.kind; + + public static styles: StyleList = { + 'foreignObject[data-mjx-xml]': { + 'font-family': 'initial', + 'line-height': 'normal', + overflow: 'visible' + } + }; + } /*****************************************************************/ @@ -112,15 +122,26 @@ export class SVGxml extends SVGWrapper { */ public toSVG(parent: N) { const xml = this.adaptor.clone((this.node as XMLNode).getXML() as N); - this.adaptor.append(parent, this.svg('foreignObject', {}, [xml])); + const em = this.jax.math.metrics.em * this.jax.math.metrics.scale; + const scale = this.fixed(1 / em); + const {w, h, d} = this.getBBox(); + this.element = this.adaptor.append(parent, this.svg('foreignObject', { + 'data-mjx-xml': true, + y: this.jax.fixed(-h * em) + 'px', + width: this.jax.fixed(w * em) + 'px', + height: this.jax.fixed((h + d) * em) + 'px', + transform: `scale(${scale}) matrix(1 0 0 -1 0 0)` + }, [xml])); } /** * @override */ - public computeBBox() { - // FIXME: compute using the DOM, if possible - return this.bbox; + public computeBBox(bbox: BBox, recompute: boolean = false) { + const {w, h, d} = this.jax.measureXMLnode((this.node as XMLNode).getXML() as N); + bbox.w = w; + bbox.h = h; + bbox.d = d; } /** From 243d2fed6a992f500b27f143d710435da7cc1050 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Sun, 20 Oct 2019 22:34:48 -0400 Subject: [PATCH 029/103] Convert in-line munderover with movablelimits an base that is not an mo to explicit msubsup. --- ts/input/tex.ts | 5 +-- ts/input/tex/FilterUtil.ts | 41 +++++++++++++++++++++++++ ts/output/common/Wrappers/scriptbase.ts | 6 ++-- 3 files changed, 47 insertions(+), 5 deletions(-) diff --git a/ts/input/tex.ts b/ts/input/tex.ts index 7c7556854..c586ef327 100644 --- a/ts/input/tex.ts +++ b/ts/input/tex.ts @@ -144,8 +144,9 @@ export class TeX extends AbstractInputJax { userOptions(parseOptions.options, rest); configuration.config(configuration, this); TeX.tags(parseOptions, configuration); - this.postFilters.add(FilterUtil.cleanSubSup, -5); - this.postFilters.add(FilterUtil.setInherited, -4); + this.postFilters.add(FilterUtil.cleanSubSup, -6); + this.postFilters.add(FilterUtil.setInherited, -5); + this.postFilters.add(FilterUtil.moveLimits, -4); this.postFilters.add(FilterUtil.cleanStretchy, -3); this.postFilters.add(FilterUtil.cleanAttributes, -2); this.postFilters.add(FilterUtil.combineRelations, -1); diff --git a/ts/input/tex/FilterUtil.ts b/ts/input/tex/FilterUtil.ts index f60db8250..a7477ddcf 100644 --- a/ts/input/tex/FilterUtil.ts +++ b/ts/input/tex/FilterUtil.ts @@ -225,6 +225,47 @@ namespace FilterUtil { }; + /** + * Looks through the list of munderover elements for ones that have + * movablelimits and bases that are not mo's, and creates new msubsup + * elements to replace them if they aren't in displaystyle. + * + * @param {MmlNode} ath The node to rewrite. + * @param {ParseOptions} data The parse options. + */ + let _moveLimits = function (options: ParseOptions, underover: string, subsup: string) { + for (const mml of options.getList(underover)) { + const display = mml.attributes.get('displaystyle'); + if (!display) { + const base = mml.childNodes[(mml as any).base] as MmlNode; + const mo = base.coreMO(); + if (base.getProperty('movablelimits') && !mo.attributes.getExplicit('movablelimits')) { + let node = options.nodeFactory.create('node', subsup, mml.childNodes); + NodeUtil.copyAttributes(mml, node); + if (mml.parent) { + mml.parent.replaceChild(node, mml); + } else { + options.root = node; + } + } + } + } + }; + + /** + * Visitor that rewrites in-line munderover elements with movablelimits but bases + * that are not mo's into explicit msubsup elements. + * + * @param {{data:ParseOptions}} arg The parse options to use + */ + export let moveLimits = function (arg: {data: ParseOptions}) { + const options = arg.data; + _moveLimits(options, 'munderover', 'msubsup'); + _moveLimits(options, 'munder', 'msub'); + _moveLimits(options, 'mover', 'msup'); + }; + + /** * Recursively sets the inherited attributes on the math tree. * @param {MmlNode} math The node to rewrite. diff --git a/ts/output/common/Wrappers/scriptbase.ts b/ts/output/common/Wrappers/scriptbase.ts index c4b90b9d4..cce9dd309 100644 --- a/ts/output/common/Wrappers/scriptbase.ts +++ b/ts/output/common/Wrappers/scriptbase.ts @@ -326,9 +326,9 @@ export function CommonScriptbaseMixin Date: Sun, 20 Oct 2019 22:49:38 -0400 Subject: [PATCH 030/103] Only need the core mo's movablelimits --- ts/output/common/Wrappers/scriptbase.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ts/output/common/Wrappers/scriptbase.ts b/ts/output/common/Wrappers/scriptbase.ts index cce9dd309..53661b00e 100644 --- a/ts/output/common/Wrappers/scriptbase.ts +++ b/ts/output/common/Wrappers/scriptbase.ts @@ -326,9 +326,8 @@ export function CommonScriptbaseMixin Date: Thu, 31 Oct 2019 06:44:52 -0400 Subject: [PATCH 031/103] Add missing data for U-0394 (delta) in the italic font. Resolves issue #2231 --- ts/output/svg/fonts/tex/italic.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/ts/output/svg/fonts/tex/italic.ts b/ts/output/svg/fonts/tex/italic.ts index e605106b4..f1856e5b9 100644 --- a/ts/output/svg/fonts/tex/italic.ts +++ b/ts/output/svg/fonts/tex/italic.ts @@ -124,6 +124,7 @@ export const italic: SVGCharMap = AddPaths(font, { 0x391: '208 74Q208 50 254 46Q272 46 272 35Q272 34 270 22Q267 8 264 4T251 0Q249 0 239 0T205 1T141 2Q70 2 50 0H42Q35 7 35 11Q37 38 48 46H62Q132 49 164 96Q170 102 345 401T523 704Q530 716 547 716H555H572Q578 707 578 706L606 383Q634 60 636 57Q641 46 701 46Q726 46 726 36Q726 34 723 22Q720 7 718 4T704 0Q701 0 690 0T651 1T578 2Q484 2 455 0H443Q437 6 437 9T439 27Q443 40 445 43L449 46H469Q523 49 533 63L521 213H283L249 155Q208 86 208 74ZM516 260Q516 271 504 416T490 562L463 519Q447 492 400 412L310 260L413 259Q516 259 516 260', 0x392: '231 637Q204 637 199 638T194 649Q194 676 205 682Q206 683 335 683Q594 683 608 681Q671 671 713 636T756 544Q756 480 698 429T565 360L555 357Q619 348 660 311T702 219Q702 146 630 78T453 1Q446 0 242 0Q42 0 39 2Q35 5 35 10Q35 17 37 24Q42 43 47 45Q51 46 62 46H68Q95 46 128 49Q142 52 147 61Q150 65 219 339T288 628Q288 635 231 637ZM649 544Q649 574 634 600T585 634Q578 636 493 637Q473 637 451 637T416 636H403Q388 635 384 626Q382 622 352 506Q352 503 351 500L320 374H401Q482 374 494 376Q554 386 601 434T649 544ZM595 229Q595 273 572 302T512 336Q506 337 429 337Q311 337 310 336Q310 334 293 263T258 122L240 52Q240 48 252 48T333 46Q422 46 429 47Q491 54 543 105T595 229', 0x393: '49 1Q31 1 31 10Q31 12 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q146 66 215 342T285 622Q285 629 281 629Q273 632 228 634H197Q191 640 191 642T193 661Q197 674 203 680H714Q721 676 721 669Q721 664 708 557T694 447Q692 440 674 440H662Q655 445 655 454Q655 455 658 480T661 534Q661 572 652 592Q638 619 603 626T501 634H471Q398 633 393 630Q389 628 386 622Q385 619 315 341T245 60Q245 46 333 46H345Q366 46 366 35Q366 33 363 21T358 6Q356 1 339 1Q334 1 292 1T187 2Q122 2 88 2T49 1', + 0x394: '574 715L582 716Q589 716 595 716Q612 716 616 714Q621 712 621 709Q622 707 705 359T788 8Q786 5 785 3L781 0H416Q52 0 50 2T48 6Q48 9 305 358T567 711Q572 712 574 715ZM599 346L538 602L442 474Q347 345 252 217T157 87T409 86T661 88L654 120Q646 151 629 220T599 346', 0x395: '492 213Q472 213 472 226Q472 230 477 250T482 285Q482 316 461 323T364 330H312Q311 328 277 192T243 52Q243 48 254 48T334 46Q428 46 458 48T518 61Q567 77 599 117T670 248Q680 270 683 272Q690 274 698 274Q718 274 718 261Q613 7 608 2Q605 0 322 0H133Q31 0 31 11Q31 13 34 25Q38 41 42 43T65 46Q92 46 125 49Q139 52 144 61Q146 66 215 342T285 622Q285 629 281 629Q273 632 228 634H197Q191 640 191 642T193 659Q197 676 203 680H757Q764 676 764 669Q764 664 751 557T737 447Q735 440 717 440H705Q698 445 698 453L701 476Q704 500 704 528Q704 558 697 578T678 609T643 625T596 632T532 634H485Q397 633 392 631Q388 629 386 622Q385 619 355 499T324 377Q347 376 372 376H398Q464 376 489 391T534 472Q538 488 540 490T557 493Q562 493 565 493T570 492T572 491T574 487T577 483L544 351Q511 218 508 216Q505 213 492 213', 0x396: '58 8Q58 23 64 35Q64 36 329 334T596 635L586 637Q575 637 512 637H500H476Q442 637 420 635T365 624T311 598T266 548T228 469Q227 466 226 463T224 458T223 453T222 450L221 448Q218 443 202 443Q185 443 182 453L214 561Q228 606 241 651Q249 679 253 681Q256 683 487 683H718Q723 678 723 675Q723 673 717 649Q189 54 188 52L185 49H274Q369 50 377 51Q452 60 500 100T579 247Q587 272 590 277T603 282H607Q628 282 628 271Q547 5 541 2Q538 0 300 0H124Q58 0 58 8', 0x397: '228 637Q194 637 192 641Q191 643 191 649Q191 673 202 682Q204 683 219 683Q260 681 355 681Q389 681 418 681T463 682T483 682Q499 682 499 672Q499 670 497 658Q492 641 487 638H485Q483 638 480 638T473 638T464 637T455 637Q416 636 405 634T387 623Q384 619 355 500Q348 474 340 442T328 395L324 380Q324 378 469 378H614L615 381Q615 384 646 504Q674 619 674 627T617 637Q594 637 587 639T580 648Q580 650 582 660Q586 677 588 679T604 682Q609 682 646 681T740 680Q802 680 835 681T871 682Q888 682 888 672Q888 645 876 638H874Q872 638 869 638T862 638T853 637T844 637Q805 636 794 634T776 623Q773 618 704 340T634 58Q634 51 638 51Q646 48 692 46H723Q729 38 729 37T726 19Q722 6 716 0H701Q664 2 567 2Q533 2 504 2T458 2T437 1Q420 1 420 10Q420 15 423 24Q428 43 433 45Q437 46 448 46H454Q481 46 514 49Q520 50 522 50T528 55T534 64T540 82T547 110T558 153Q565 181 569 198Q602 330 602 331T457 332H312L279 197Q245 63 245 58Q245 51 253 49T303 46H334Q340 38 340 37T337 19Q333 6 327 0H312Q275 2 178 2Q144 2 115 2T69 2T48 1Q31 1 31 10Q31 12 34 24Q39 43 44 45Q48 46 59 46H65Q92 46 125 49Q139 52 144 61Q147 65 216 339T285 628Q285 635 228 637', From 290e94b92af83cdaee2f054e3d7e9491dbb3cb9e Mon Sep 17 00:00:00 2001 From: zorkow Date: Mon, 11 Nov 2019 23:40:43 +0000 Subject: [PATCH 032/103] Rewrites all mu dimension into em for all attributes. --- ts/input/tex/FilterUtil.ts | 9 +++++++++ ts/input/tex/base/BaseMethods.ts | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/ts/input/tex/FilterUtil.ts b/ts/input/tex/FilterUtil.ts index f60db8250..edd5b4a7e 100644 --- a/ts/input/tex/FilterUtil.ts +++ b/ts/input/tex/FilterUtil.ts @@ -27,6 +27,8 @@ import NodeUtil from './NodeUtil.js'; import ParseOptions from './ParseOptions.js'; import {MmlMo} from '../../core/MmlTree/MmlNodes/mo.js'; import {Attributes} from '../../core/MmlTree/Attributes.js'; +import ParseUtil from './ParseUtil.js'; +import {length2em, em} from '../../util/lengths.js'; namespace FilterUtil { @@ -73,6 +75,13 @@ namespace FilterUtil { if (attribs.attributes[key] === mml.attributes.getInherited(key)) { delete attribs.attributes[key]; } + if (attribs.attributes[key]) { + let value = attribs.attributes[key]; + let unit = ParseUtil.matchDimen(value); + if (unit[1] === 'mu') { + attribs.attributes[key] = em(length2em(value)); + } + } } }, {}); }; diff --git a/ts/input/tex/base/BaseMethods.ts b/ts/input/tex/base/BaseMethods.ts index 4c8b7e977..7bb48e814 100644 --- a/ts/input/tex/base/BaseMethods.ts +++ b/ts/input/tex/base/BaseMethods.ts @@ -917,7 +917,7 @@ BaseMethods.MoveLeftRight = function(parser: TexParser, name: string) { BaseMethods.Hskip = function(parser: TexParser, name: string) { // @test Modulo const node = parser.create('node', 'mspace', [], - {width: parser.GetDimen(name)}); + {width: parser.GetDimen(name)}); parser.Push(node); }; From 24e1f6aae96a4874e7f2d9926205efb5f2bea7e8 Mon Sep 17 00:00:00 2001 From: zorkow Date: Mon, 11 Nov 2019 23:54:03 +0000 Subject: [PATCH 033/103] Ensures correct string type for attribute. --- ts/input/tex/FilterUtil.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ts/input/tex/FilterUtil.ts b/ts/input/tex/FilterUtil.ts index edd5b4a7e..16063a040 100644 --- a/ts/input/tex/FilterUtil.ts +++ b/ts/input/tex/FilterUtil.ts @@ -75,9 +75,9 @@ namespace FilterUtil { if (attribs.attributes[key] === mml.attributes.getInherited(key)) { delete attribs.attributes[key]; } - if (attribs.attributes[key]) { - let value = attribs.attributes[key]; - let unit = ParseUtil.matchDimen(value); + let value = attribs.attributes[key]; + if (value) { + let unit = ParseUtil.matchDimen(value.toString()); if (unit[1] === 'mu') { attribs.attributes[key] = em(length2em(value)); } From 4004ded69c1e887bf6190e437fa42ca6dd565b2d Mon Sep 17 00:00:00 2001 From: zorkow Date: Tue, 12 Nov 2019 00:05:50 +0000 Subject: [PATCH 034/103] Simplifies dependencies on one utility package only. --- ts/input/tex/FilterUtil.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ts/input/tex/FilterUtil.ts b/ts/input/tex/FilterUtil.ts index 16063a040..10399299c 100644 --- a/ts/input/tex/FilterUtil.ts +++ b/ts/input/tex/FilterUtil.ts @@ -28,7 +28,6 @@ import ParseOptions from './ParseOptions.js'; import {MmlMo} from '../../core/MmlTree/MmlNodes/mo.js'; import {Attributes} from '../../core/MmlTree/Attributes.js'; import ParseUtil from './ParseUtil.js'; -import {length2em, em} from '../../util/lengths.js'; namespace FilterUtil { @@ -79,7 +78,7 @@ namespace FilterUtil { if (value) { let unit = ParseUtil.matchDimen(value.toString()); if (unit[1] === 'mu') { - attribs.attributes[key] = em(length2em(value)); + attribs.attributes[key] = ParseUtil.Em(ParseUtil.dimen2em(value)); } } } From 9f99190287d3e213984969603ca9f8383b914e81 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Sun, 17 Nov 2019 16:02:55 -0500 Subject: [PATCH 035/103] Remove extra parentheses (Volker's review). --- ts/input/mathml/MathMLCompile.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ts/input/mathml/MathMLCompile.ts b/ts/input/mathml/MathMLCompile.ts index ae5a63449..8cf7a1461 100644 --- a/ts/input/mathml/MathMLCompile.ts +++ b/ts/input/mathml/MathMLCompile.ts @@ -175,7 +175,7 @@ export class MathMLCompile { return; } const adaptor = this.adaptor; - for (const child of adaptor.childNodes((node)) as N[]) { + for (const child of adaptor.childNodes(node) as N[]) { const name = adaptor.kind(child); if (name === '#comment') { continue; From 086d4e4f95ae1d1d9a482d3d57e7a70dc8b44864 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Sun, 17 Nov 2019 16:16:40 -0500 Subject: [PATCH 036/103] Reduce nesting level (Volker's review). --- ts/input/tex/FilterUtil.ts | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/ts/input/tex/FilterUtil.ts b/ts/input/tex/FilterUtil.ts index a7477ddcf..fe6613c43 100644 --- a/ts/input/tex/FilterUtil.ts +++ b/ts/input/tex/FilterUtil.ts @@ -235,18 +235,18 @@ namespace FilterUtil { */ let _moveLimits = function (options: ParseOptions, underover: string, subsup: string) { for (const mml of options.getList(underover)) { - const display = mml.attributes.get('displaystyle'); - if (!display) { - const base = mml.childNodes[(mml as any).base] as MmlNode; - const mo = base.coreMO(); - if (base.getProperty('movablelimits') && !mo.attributes.getExplicit('movablelimits')) { - let node = options.nodeFactory.create('node', subsup, mml.childNodes); - NodeUtil.copyAttributes(mml, node); - if (mml.parent) { - mml.parent.replaceChild(node, mml); - } else { - options.root = node; - } + if (mml.attributes.get('displaystyle')) { + continue; + } + const base = mml.childNodes[(mml as any).base] as MmlNode; + const mo = base.coreMO(); + if (base.getProperty('movablelimits') && !mo.attributes.getExplicit('movablelimits')) { + let node = options.nodeFactory.create('node', subsup, mml.childNodes); + NodeUtil.copyAttributes(mml, node); + if (mml.parent) { + mml.parent.replaceChild(node, mml); + } else { + options.root = node; } } } From a1501530fff61875a3eef2c5d3d01d7e5d88bb4e Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Sun, 20 Oct 2019 15:47:11 -0400 Subject: [PATCH 037/103] Add missing jsdoc comments --- ts/output/chtml.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ts/output/chtml.ts b/ts/output/chtml.ts index f1a784654..a315426f1 100644 --- a/ts/output/chtml.ts +++ b/ts/output/chtml.ts @@ -227,6 +227,9 @@ CommonOutputJax, CHTMLWrapperFactory, CH return font; } + /** + * @override + */ public cssFontStyles(font: CssFontData, styles: StyleList = {}) { font[0] = 'MJXZERO, ' + font[0]; return super.cssFontStyles(font, styles); From 994a8105b6981d5e6f667214dd1eb022b6e618f5 Mon Sep 17 00:00:00 2001 From: zorkow Date: Sun, 17 Nov 2019 14:21:54 -0800 Subject: [PATCH 038/103] Corrects Capitalisation of imported module. --- ts/core/MmlTree/MmlNode.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ts/core/MmlTree/MmlNode.ts b/ts/core/MmlTree/MmlNode.ts index 05510ee02..518c6e185 100644 --- a/ts/core/MmlTree/MmlNode.ts +++ b/ts/core/MmlTree/MmlNode.ts @@ -24,7 +24,7 @@ import {Attributes, INHERIT} from './Attributes.js'; import {Property, PropertyList, Node, AbstractNode, AbstractEmptyNode, NodeClass} from '../Tree/Node.js'; import {MmlFactory} from './MmlFactory.js'; -import {DOMAdaptor} from '../DOMadaptor.js'; +import {DOMAdaptor} from '../DOMAdaptor.js'; /** * Used in setInheritedAttributes() to pass originating node kind as well as property value From bcd6dfd7549a38f90859daa7feb2eeb3a1e4d859 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Sun, 17 Nov 2019 17:45:14 -0500 Subject: [PATCH 039/103] Use scriptstyle spacing if either element is in scriptstyle (rather than requiring both). This means that mspace wrapped in mstyle with scriptstyle=0 (as used for the fixed-size spaces in TeX) won't include extra spaces. Resolves issue mathjax/MathJax#2241 --- ts/core/MmlTree/MmlNode.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ts/core/MmlTree/MmlNode.ts b/ts/core/MmlTree/MmlNode.ts index 518c6e185..d4b8ceedc 100644 --- a/ts/core/MmlTree/MmlNode.ts +++ b/ts/core/MmlTree/MmlNode.ts @@ -499,7 +499,7 @@ export abstract class AbstractMmlNode extends AbstractNode implements MmlNode { texClass = TEXCLASS.ORD; } let space = TEXSPACE[prevClass][texClass]; - if (this.prevLevel > 0 && this.attributes.get('scriptlevel') > 0 && space >= 0) { + if ((this.prevLevel > 0 || this.attributes.get('scriptlevel') > 0) && space >= 0) { return ''; } return TEXSPACELENGTH[Math.abs(space)]; From c50986a1214395cd56e73f7f00c7def64d66564e Mon Sep 17 00:00:00 2001 From: zorkow Date: Sun, 17 Nov 2019 15:11:40 -0800 Subject: [PATCH 040/103] Translates mu to em immediately, according to our review discussion. --- ts/input/tex/FilterUtil.ts | 8 -------- ts/input/tex/ParseUtil.ts | 21 ++++++++++++++++++--- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/ts/input/tex/FilterUtil.ts b/ts/input/tex/FilterUtil.ts index 10399299c..f60db8250 100644 --- a/ts/input/tex/FilterUtil.ts +++ b/ts/input/tex/FilterUtil.ts @@ -27,7 +27,6 @@ import NodeUtil from './NodeUtil.js'; import ParseOptions from './ParseOptions.js'; import {MmlMo} from '../../core/MmlTree/MmlNodes/mo.js'; import {Attributes} from '../../core/MmlTree/Attributes.js'; -import ParseUtil from './ParseUtil.js'; namespace FilterUtil { @@ -74,13 +73,6 @@ namespace FilterUtil { if (attribs.attributes[key] === mml.attributes.getInherited(key)) { delete attribs.attributes[key]; } - let value = attribs.attributes[key]; - if (value) { - let unit = ParseUtil.matchDimen(value.toString()); - if (unit[1] === 'mu') { - attribs.attributes[key] = ParseUtil.Em(ParseUtil.dimen2em(value)); - } - } } }, {}); }; diff --git a/ts/input/tex/ParseUtil.ts b/ts/input/tex/ParseUtil.ts index 2bc44bdf0..1d7316b98 100644 --- a/ts/input/tex/ParseUtil.ts +++ b/ts/input/tex/ParseUtil.ts @@ -67,12 +67,27 @@ namespace ParseUtil { */ export function matchDimen( dim: string, rest: boolean = false): [string, string, number] { - let match = dim.match(rest ? dimenRest : dimenEnd); - return match ? [match[1].replace(/,/, '.'), match[4], match[0].length] : - [null, null, 0]; + let match = dim.match(rest ? dimenRest : dimenEnd); + return match ? + muReplace([match[1].replace(/,/, '.'), match[4], match[0].length]) : + [null, null, 0]; } + /** + * Transforms mu dimension to em if necessary. + * @param {[string, string, number]} [value, unit, length] The dimension triple. + * @return {[string, string, number]} [value, unit, length] The transformed triple. + */ + function muReplace([value, unit, length]: [string, string, number]): [string, string, number] { + if (unit !== 'mu') { + return [value, unit, length]; + } + let em = Em(UNIT_CASES[unit](parseFloat(value || '1'))); + return [em.slice(0, -2), 'em', em.length]; + }; + + /** * Convert a dimension string into standard em dimension. * @param {string} dim The attribute string. From 1d5c43971e8cfdaa0ddd5bd6f67ea7b7f99d80d5 Mon Sep 17 00:00:00 2001 From: zorkow Date: Sun, 17 Nov 2019 15:29:13 -0800 Subject: [PATCH 041/103] Correction after review. --- ts/input/tex/ParseUtil.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ts/input/tex/ParseUtil.ts b/ts/input/tex/ParseUtil.ts index 1d7316b98..0e555b598 100644 --- a/ts/input/tex/ParseUtil.ts +++ b/ts/input/tex/ParseUtil.ts @@ -84,7 +84,7 @@ namespace ParseUtil { return [value, unit, length]; } let em = Em(UNIT_CASES[unit](parseFloat(value || '1'))); - return [em.slice(0, -2), 'em', em.length]; + return [em.slice(0, -2), 'em', length]; }; From 07fb4c9ed3225df34e3872dbebcb44bb6f6e7671 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Sun, 17 Nov 2019 20:03:25 -0500 Subject: [PATCH 042/103] Remove the mi2mo() action for munderover constructs (since a postfilter now handles non-mo elements with movable limits) --- ts/core/MmlTree/MmlNodes/mo.ts | 3 ++- ts/input/tex/ParseUtil.ts | 29 +++++++---------------------- ts/input/tex/base/BaseMethods.ts | 8 -------- 3 files changed, 9 insertions(+), 31 deletions(-) diff --git a/ts/core/MmlTree/MmlNodes/mo.ts b/ts/core/MmlTree/MmlNodes/mo.ts index 112d0729e..b8c910b52 100644 --- a/ts/core/MmlTree/MmlNodes/mo.ts +++ b/ts/core/MmlTree/MmlNodes/mo.ts @@ -176,7 +176,8 @@ export class MmlMo extends AbstractMmlTokenNode { */ public setTeXclass(prev: MmlNode): MmlNode { let {form, fence} = this.attributes.getList('form', 'fence') as {form: string, fence: string}; - if (this.attributes.isSet('lspace') || this.attributes.isSet('rspace')) { + if (this.getProperty('texClass') === undefined && + (this.attributes.isSet('lspace') || this.attributes.isSet('rspace'))) { this.texClass = TEXCLASS.NONE; return null; } diff --git a/ts/input/tex/ParseUtil.ts b/ts/input/tex/ParseUtil.ts index 2bc44bdf0..8ee4f96f5 100644 --- a/ts/input/tex/ParseUtil.ts +++ b/ts/input/tex/ParseUtil.ts @@ -192,10 +192,12 @@ namespace ParseUtil { /** - * If the initial child, skipping any initial space or - * empty braces (TeXAtom with child being an empty inferred row), - * is an , preceed it by an empty to force the to - * be infix. + * If the initial child, skipping any initial space or + * empty braces (TeXAtom with child being an empty inferred row), + * is an , precede it by an empty to force the to + * be infix. + * @param {ParseOptions} configuration The current parse otpions. + * @param {MmlNodep[]} nodes The row of nodes to scan for an initial */ export function fixInitialMO(configuration: ParseOptions, nodes: MmlNode[]) { for (let i = 0, m = nodes.length; i < m; i++) { @@ -215,24 +217,7 @@ namespace ParseUtil { /** - * Rewrites an mi node into an mo node. - * @param {TexParser} parser The current TexParser. - * @param {MmlNode} mi The mi node. - * @return {MmlNode} The corresponding mo node. - */ - export function mi2mo(parser: TexParser, mi: MmlNode): MmlNode { - // @test Mathop Sub, Mathop Super - const mo = parser.create('node', 'mo'); - NodeUtil.copyChildren(mi, mo); - NodeUtil.copyAttributes(mi, mo); - NodeUtil.setProperties(mo, {lspace: '0', rspace: '0'}); - NodeUtil.removeProperties(mo, 'movesupsub'); - return mo; - } - - - /** - * Break up a string into text and math blocks. + * Break up a string into text and math blocks. * @param {TexParser} parser The calling parser. * @param {string} text The text in the math expression to parse. * @param {number|string=} level The scriptlevel. diff --git a/ts/input/tex/base/BaseMethods.ts b/ts/input/tex/base/BaseMethods.ts index 4c8b7e977..221ac1f23 100644 --- a/ts/input/tex/base/BaseMethods.ts +++ b/ts/input/tex/base/BaseMethods.ts @@ -138,10 +138,6 @@ BaseMethods.Superscript = function(parser: TexParser, c: string) { // @test Move Superscript, Large Operator if (!NodeUtil.isType(base, 'munderover') || NodeUtil.isType(base, 'mover') || NodeUtil.getChildAt(base, (base as MmlMunderover).over)) { - if (NodeUtil.getProperty(base, 'movablelimits') && NodeUtil.isType(base, 'mi')) { - // @test Mathop Super - base = ParseUtil.mi2mo(parser, base); - } // @test Large Operator base = parser.create('node', 'munderover', [base], {movesupsub: true}); } @@ -200,10 +196,6 @@ BaseMethods.Subscript = function(parser: TexParser, c: string) { // @test Large Operator, Move Superscript if (!NodeUtil.isType(base, 'munderover') || NodeUtil.isType(base, 'mover') || NodeUtil.getChildAt(base, (base as MmlMunderover).under)) { - if (NodeUtil.getProperty(base, 'movablelimits') && NodeUtil.isType(base, 'mi')) { - // @test Mathop Sub - base = ParseUtil.mi2mo(parser, base); - } // @test Move Superscript base = parser.create('node', 'munderover', [base], {movesupsub: true}); } From 0a0cccb945ea3e843bd1acd0f5ad65a1c8297372 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Sun, 17 Nov 2019 22:02:02 -0500 Subject: [PATCH 043/103] Expose more internal properties via data-mjx-* attributes, and handle them in MathML input. Resolves issues mathjax/MathJax#2238 and mathjax/MathJax#2237. --- ts/core/MmlTree/SerializedMmlVisitor.ts | 46 ++++++++++++++++++++----- ts/input/mathml/MathMLCompile.ts | 22 ++++++++---- 2 files changed, 53 insertions(+), 15 deletions(-) diff --git a/ts/core/MmlTree/SerializedMmlVisitor.ts b/ts/core/MmlTree/SerializedMmlVisitor.ts index e42d4c9d3..09d14b7f7 100644 --- a/ts/core/MmlTree/SerializedMmlVisitor.ts +++ b/ts/core/MmlTree/SerializedMmlVisitor.ts @@ -33,6 +33,18 @@ import {MmlNode, TextNode, XMLNode, TEXCLASSNAMES} from './MmlNode.js'; export class SerializedMmlVisitor extends MmlVisitor { + /** + * Translations for the internal mathvariants + */ + public static variants: {[variant: string]: string} = { + "-tex-calligraphic": 'script', + "-tex-calligraphic-bold": 'bold-script', + "-tex-oldstyle": 'normal', + "-tex-oldstyle-bold": 'bold', + "-tex-mathit": 'italic' + }; + + /** * Convert the tree rooted at a particular node into a serialized MathML string * @@ -88,12 +100,8 @@ export class SerializedMmlVisitor extends MmlVisitor { public visitTeXAtomNode(node: MmlNode, space: string) { let texclass = node.texClass < 0 ? 'NONE' : TEXCLASSNAMES[node.texClass]; let children = this.childNodeMml(node, space + ' ', '\n'); - let attributes = node.attributes; - let names = attributes.getExplicit('class'); - attributes.set('class', 'MJX-TeXAtom-' + texclass + (names ? ' ' + names : '')); - let mml = space + '' + + let mml = space + '' + (children.match(/\S/) ? '\n' + children + space : '') + ''; - attributes.set('class', names); return mml; } @@ -147,13 +155,33 @@ export class SerializedMmlVisitor extends MmlVisitor { * @return {string} The attribute list as a string */ protected getAttributes(node: MmlNode) { - let ATTR = ''; + let attr = ''; let attributes = node.attributes.getAllAttributes(); + let variants = (this.constructor as typeof SerializedMmlVisitor).variants; for (const name of Object.keys(attributes)) { - if (attributes[name] === undefined) continue; - ATTR += ' ' + name + '="' + this.quoteHTML(attributes[name].toString()) + '"'; + let value = attributes[name] as string; + if (value === undefined) continue; + if (name === 'mathvariant' && variants.hasOwnProperty(value)) { + value = variants[value]; + } + attr += ' ' + name + '="' + this.quoteHTML(value) + '"'; } - return ATTR; + return attr + this.getDataAttributes(node); + } + + /** + * Create the list of data-mjx-* attributes + * + * @param {MmlNode} node The node whose data list is to be generated + * @return {string} The final class attribute (or empty string) + */ + protected getDataAttributes(node: MmlNode) { + const data = []; + const variant = node.attributes.getExplicit('mathvariant') as string; + const variants = (this.constructor as typeof SerializedMmlVisitor).variants; + variant && variants.hasOwnProperty(variant) && data.push(' data-mjx-variant="' + variant + '"'); + node.getProperty('variantForm') && data.push(' data-mjx-alternate="1"'); + return data.join(''); } /** diff --git a/ts/input/mathml/MathMLCompile.ts b/ts/input/mathml/MathMLCompile.ts index 8cf7a1461..cd5e775b3 100644 --- a/ts/input/mathml/MathMLCompile.ts +++ b/ts/input/mathml/MathMLCompile.ts @@ -109,9 +109,11 @@ export class MathMLCompile { * @return {MmlNode} The converted MmlNode */ public makeNode(node: N) { - let limits = false, texClass = ''; - let type = this.adaptor.kind(node).replace(/^.*:/, ''); - for (const name of this.adaptor.allClasses(node)) { + const adaptor = this.adaptor; + let limits = false; + let texClass = adaptor.getAttribute(node, 'data-mjx-texclass') || ''; + let type = texClass ? 'TeXAtom' : adaptor.kind(node).replace(/^.*:/, ''); + for (const name of adaptor.allClasses(node)) { if (name.match(/^MJX-TeXAtom-/)) { texClass = name.substr(12); type = 'TeXAtom'; @@ -137,15 +139,23 @@ export class MathMLCompile { * @param {N} node The MathML node whose attributes to copy */ protected addAttributes(mml: MmlNode, node: N) { + let ignoreVariant = false; for (const attr of this.adaptor.allAttributes(node)) { let name = attr.name; - if (name !== 'class') { + if (name.substr(0, 9) === 'data-mjx-') { + if (name === 'data-mjx-alternate') { + mml.setProperty('variantForm', true); + } else if (name === 'data-mjx-variant') { + mml.attributes.set('mathvariant', this.filterAttribute('mathvariant', attr.value)); + ignoreVariant = true; + } + } else if (name !== 'class') { let value = this.filterAttribute(name, attr.value); if (value !== null) { let val = value.toLowerCase(); if (val === 'true' || val === 'false') { mml.attributes.set(name, val === 'true'); - } else { + } else if (!ignoreVariant || name !== 'mathvariant') { mml.attributes.set(name, value); } } @@ -230,7 +240,7 @@ export class MathMLCompile { if (name === 'MJX-variant') { mml.setProperty('variantForm', true); } else if (name.substr(0, 11) !== 'MJX-TeXAtom') { - mml.attributes.set('mathvariant', name.substr(3)); + mml.attributes.set('mathvariant', name.substr(3).replace(/caligraphic/, 'calligraphic')); } } else { classList.push(name); From 8723350a3697d4e0747087ecca936883f5a16bee Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Sun, 17 Nov 2019 22:57:24 -0500 Subject: [PATCH 044/103] Use getter/setter for mo.texClass so that if it isn't set yet, we can look it up from the operator table. Setting the inherited attributes will set the class, so lookups will no longer be needed. Resolves issue #383. --- ts/core/MmlTree/MmlNodes/mo.ts | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/ts/core/MmlTree/MmlNodes/mo.ts b/ts/core/MmlTree/MmlNodes/mo.ts index 112d0729e..8cc926080 100644 --- a/ts/core/MmlTree/MmlNodes/mo.ts +++ b/ts/core/MmlTree/MmlNodes/mo.ts @@ -71,9 +71,32 @@ export class MmlMo extends AbstractMmlTokenNode { public static OPTABLE: {[form: string]: OperatorList} = OPTABLE; /** - * The TeX class of the node is set to REL for MathML, but TeX sets it explicitly in setTeXclass() + * The internal TeX class of the node (for use with getter/setter below) */ - public texClass = TEXCLASS.REL; + public _texClass: number = null; + + /** + * Use a getter to look up the TeX class from the operator table if it hasn't + * been set yet (but don't save it in case the form changes when it is in its + * location). + */ + public get texClass() { + if (this._texClass === null) { + let mo = this.getText(); + let [form1, form2, form3] = this.handleExplicitForm(this.getForms()); + let OPTABLE = (this.constructor as typeof MmlMo).OPTABLE; + let def = OPTABLE[form1][mo] || OPTABLE[form2][mo] || OPTABLE[form3][mo]; + return def ? def[2] : TEXCLASS.REL; + } + return this._texClass; + } + + /** + * Use a setter to store the actual value in _texClass; + */ + public set texClass(value: number) { + this._texClass = value; + } /** * The default MathML spacing on the left and right From dd50f1ae1238deb6168687407cc3c5576678a043 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Sun, 17 Nov 2019 23:15:45 -0500 Subject: [PATCH 045/103] Fix problem with variantForm characters in CHTML. Resolves issue mathjax/MathJax#2236 --- ts/output/chtml/fonts/tex.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ts/output/chtml/fonts/tex.ts b/ts/output/chtml/fonts/tex.ts index 81de1210f..a53d543d7 100644 --- a/ts/output/chtml/fonts/tex.ts +++ b/ts/output/chtml/fonts/tex.ts @@ -87,7 +87,7 @@ CommonTeXFontMixin Date: Sun, 17 Nov 2019 23:55:21 -0500 Subject: [PATCH 046/103] Only remove actual spaces from token element contents (perserve non-breaking and other special spaces like U+2000 to U+200C) --- ts/input/mathml/MathMLCompile.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ts/input/mathml/MathMLCompile.ts b/ts/input/mathml/MathMLCompile.ts index 8cf7a1461..c54718f7e 100644 --- a/ts/input/mathml/MathMLCompile.ts +++ b/ts/input/mathml/MathMLCompile.ts @@ -283,7 +283,8 @@ export class MathMLCompile { */ protected trimSpace(text: string) { return text.replace(/[\t\n\r]/g, ' ') // whitespace to spaces - .trim() // initial and trailing whitespace + .replace(/^ +/,'') // initial whitespace + .replace(/ +$/,'') // trailing whitespace .replace(/ +/g, ' '); // internal multiple whitespace } From e6fedcc6ebb168d69b0236149f16c302261d7c8d Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Sun, 17 Nov 2019 23:59:22 -0500 Subject: [PATCH 047/103] Don't use CSS content for invisible characters. Resolves issue #385 --- ts/output/chtml/FontData.ts | 4 ++-- ts/output/chtml/fonts/tex/normal.ts | 2 +- ts/output/common/fonts/tex/normal.ts | 2 +- ts/output/svg/fonts/tex/normal.ts | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ts/output/chtml/FontData.ts b/ts/output/chtml/FontData.ts index 95c8f505a..836678f0f 100644 --- a/ts/output/chtml/FontData.ts +++ b/ts/output/chtml/FontData.ts @@ -357,8 +357,8 @@ export class CHTMLFontData extends FontData = { 0x203E: [.59, -0.544, .5], 0x2044: [.75, .25, .5], 0x2057: [.56, 0, 1.1], + 0x2060: [0, 0, 0], 0x2061: [0, 0, 0], 0x2062: [0, 0, 0], 0x2063: [0, 0, 0], - 0x2064: [0, 0, 0], 0x20D7: [.714, -0.516, .5], 0x2102: [.702, .019, .722], 0x210B: [.717, .036, .969, {ic: .272, sk: 0.333}], diff --git a/ts/output/svg/fonts/tex/normal.ts b/ts/output/svg/fonts/tex/normal.ts index 07784b213..a0be8e6d4 100644 --- a/ts/output/svg/fonts/tex/normal.ts +++ b/ts/output/svg/fonts/tex/normal.ts @@ -211,10 +211,10 @@ export const normal: SVGCharMap = AddPaths(font, { 0x2035: '12 501Q12 527 31 542T63 558Q73 560 77 560Q114 560 128 528Q133 518 188 293T244 61Q244 56 223 50T195 43Q192 43 190 45T102 263T14 486Q12 496 12 501', 0x203E: '69 544V590H430V544H69', 0x2044: '423 750Q432 750 438 744T444 730Q444 725 271 248T92 -240Q85 -250 75 -250Q68 -250 62 -245T56 -231Q56 -221 230 257T407 740Q411 750 423 750', + 0x2060: '', 0x2061: '', 0x2062: '', 0x2063: '', - 0x2064: '', 0x20D7: '377 694Q377 702 382 708T397 714Q404 714 409 709Q414 705 419 690Q429 653 460 633Q471 626 471 615Q471 606 468 603T454 594Q411 572 379 531Q377 529 374 525T369 519T364 517T357 516Q350 516 344 521T337 536Q337 555 384 595H213L42 596Q29 605 29 615Q29 622 42 635H401Q377 673 377 694', 0x2102: '684 131Q684 125 672 109T633 71T573 29T489 -5T386 -19Q330 -19 276 -3T174 46T91 134T44 261Q39 283 39 341T44 421Q66 538 143 611T341 699Q344 699 364 700T395 701Q449 698 503 677T585 655Q603 655 611 662T620 678T625 694T639 702Q650 702 657 690V481L653 474Q640 467 628 472Q624 476 618 496T595 541Q562 587 507 625T390 663H381Q337 663 299 625Q212 547 212 336Q212 249 233 179Q274 30 405 30Q533 30 641 130Q658 147 666 147Q671 147 677 143T684 131ZM250 625Q264 643 261 643Q238 635 214 620T161 579T110 510T79 414Q74 384 74 341T79 268Q89 213 113 169T164 101T217 61T260 39L277 34Q270 41 264 48Q199 111 181 254Q178 281 178 344T181 434Q200 559 250 625ZM621 565V625Q617 623 613 623Q603 619 590 619H575L588 605Q608 583 610 579L621 565', 0x210B: '331 505Q331 519 382 574T472 629H480Q512 629 529 614T547 576Q547 555 534 532T520 504Q520 493 549 493Q590 493 623 506T668 533L681 546Q731 600 772 641T832 700T852 717Q857 717 860 711T865 697L866 690Q866 688 813 617T708 475T656 403Q682 403 714 404H771L780 416Q1004 707 1167 707Q1209 707 1225 689T1241 646Q1241 604 1209 547T1118 447Q1081 422 1034 405T952 382T888 374T857 370H852L826 334Q733 204 708 144Q691 104 691 76Q691 29 748 29Q768 31 791 48T831 83T862 122T881 146Q883 148 900 148H917Q921 143 921 140T914 127Q810 -8 723 -8Q611 -4 611 100Q611 142 631 191T676 275T721 337T742 367Q716 367 685 366H628L620 355Q618 352 558 268Q486 168 461 141Q405 79 339 34T215 -28Q188 -36 153 -36Q86 -36 58 -11T29 46Q29 82 55 120T123 158Q144 158 154 146T164 119Q164 102 143 89T100 75Q92 75 86 76T77 80T72 82Q67 82 67 60Q67 28 99 14T170 0Q214 0 272 47T419 224L505 340L518 357Q513 357 504 356T467 347T415 330T360 300T308 253Q296 238 295 237H278H274Q256 237 256 243Q256 248 263 256Q291 294 330 321T407 362T476 382T530 393T552 398Q556 402 573 423T600 454Q602 457 604 460T608 465L610 467Q565 455 532 455Q465 455 449 483Q447 487 447 498Q447 513 463 538T479 579Q479 593 463 593Q436 593 385 519Q374 504 371 502T360 499H353H349Q331 499 331 505ZM1195 634Q1195 643 1195 648T1185 662T1157 671Q1130 671 1092 644T1019 579T952 502T901 436L882 409L891 410Q900 411 913 412T934 415Q1081 439 1144 520Q1195 590 1195 634', From 31abe6505dd6560736959600d36870add33b5118 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Tue, 19 Nov 2019 09:18:42 -0500 Subject: [PATCH 048/103] Use node path module to handle directories, so they work in Windows. Resolves issue #398 --- ts/util/asyncLoad/node.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ts/util/asyncLoad/node.ts b/ts/util/asyncLoad/node.ts index b10545690..a0b18a602 100644 --- a/ts/util/asyncLoad/node.ts +++ b/ts/util/asyncLoad/node.ts @@ -26,11 +26,13 @@ import {mathjax} from '../../mathjax.js'; declare var require: (name: string) => any; declare var __dirname: string; -const root = __dirname.replace(/\/[^\/]*\/[^\/]*$/, '/'); +const path = require('path'); + +const root = path.dirname(path.dirname(__dirname)); if (!mathjax.asyncLoad && typeof require !== 'undefined') { mathjax.asyncLoad = (name: string) => { - return require(name.charAt(0) === '.' ? root + name : name); + return require(name.charAt(0) === '.' ? path.resolve(root, name) : name); }; } From f11d081a1f41e26edf68eba8e98475628b853137 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Wed, 20 Nov 2019 08:05:28 -0500 Subject: [PATCH 049/103] Recognize full path name in Windows. Resolve second issue in mathjax/mathjax-node#7 --- ts/components/package.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ts/components/package.ts b/ts/components/package.ts index 028f54385..0bbee0398 100644 --- a/ts/components/package.ts +++ b/ts/components/package.ts @@ -92,7 +92,7 @@ export class Package { */ public static resolvePath(name: string, addExtension: boolean = true) { let file = CONFIG.source[name] || name; - if (!file.match(/^(?:[a-z]+:\/)?\/|\[/)) { + if (!file.match(/^(?:[a-z]+:\/)?\/|\[|[a-z]:\\/i)) { file = '[mathjax]/' + file.replace(/^\.\//, ''); } if (addExtension && !file.match(/\.[^\/]+$/)) { From 30e384acd9d286fa63894391fa28ec0f63b6fc3f Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Sat, 23 Nov 2019 07:45:15 -0500 Subject: [PATCH 050/103] Don't leak fonts and other properties to initial array entry. Resolves issue #2247. --- ts/input/tex/Stack.ts | 4 +++- ts/input/tex/StackItem.ts | 25 +++++++++++++++++++++++-- ts/input/tex/base/BaseItems.ts | 6 ++++++ 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/ts/input/tex/Stack.ts b/ts/input/tex/Stack.ts index 89feca99c..87194d648 100644 --- a/ts/input/tex/Stack.ts +++ b/ts/input/tex/Stack.ts @@ -101,7 +101,9 @@ export default class Stack { } this.stack.push(item); if (item.env) { - Object.assign(item.env, this.env); + if (item.copyEnv) { + Object.assign(item.env, this.env); + } this.env = item.env; } else { item.env = this.env; diff --git a/ts/input/tex/StackItem.ts b/ts/input/tex/StackItem.ts index e81e21674..3b7bcd051 100644 --- a/ts/input/tex/StackItem.ts +++ b/ts/input/tex/StackItem.ts @@ -252,6 +252,12 @@ export interface StackItem extends NodeStack { */ env: EnvList; + /** + * Copy local properties when pushed to stack? + * @type {boolena} + */ + copyEnv: boolean; + /** * Tests if item is of the given type. * @param {string} kind The type. @@ -379,14 +385,29 @@ export abstract class BaseItem extends MmlStack implements StackItem { return 'base'; } - get env() { + /** + * Get the private environment + * @return {EnvList} + */ + public get env() { return this._env; } - set env(value: EnvList) { + /** + * Set the private environment + * @param {EnvList} value + */ + public set env(value: EnvList) { this._env = value; } + /** + * Default is to copy local environment when pushed on stack + */ + public get copyEnv() { + return true; + } + /** * @override */ diff --git a/ts/input/tex/base/BaseItems.ts b/ts/input/tex/base/BaseItems.ts index 4cffeb99c..8e48a87a6 100644 --- a/ts/input/tex/base/BaseItems.ts +++ b/ts/input/tex/base/BaseItems.ts @@ -814,6 +814,12 @@ export class ArrayItem extends BaseItem { return true; } + /** + * @override + */ + get copyEnv() { + return false; + } /** * @override From 9b316311b6db649420f1e0e48037584472443eff Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Tue, 3 Dec 2019 09:21:21 -0500 Subject: [PATCH 051/103] Fix wrong naming of italic fonts (had math and main italics switched), and mark several more characters as variant forms --- ts/input/tex/ams/AmsMappings.ts | 4 ++-- ts/output/chtml/fonts/tex.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ts/input/tex/ams/AmsMappings.ts b/ts/input/tex/ams/AmsMappings.ts index 519f20028..556506dd7 100644 --- a/ts/input/tex/ams/AmsMappings.ts +++ b/ts/input/tex/ams/AmsMappings.ts @@ -306,7 +306,7 @@ new sm.CharacterMap('AMSsymbols-mathchar0m0', ParseMethods.mathchar0mo, { unlhd: '\u22B4', trianglerighteq: '\u22B5', unrhd: '\u22B5', - vDash: '\u22A8', + vDash: ['\u22A8', {variantForm: true}], Vdash: '\u22A9', Vvdash: '\u22AA', smallsmile: ['\u2323', {variantForm: true}], @@ -317,7 +317,7 @@ new sm.CharacterMap('AMSsymbols-mathchar0m0', ParseMethods.mathchar0mo, { between: '\u226C', Bumpeq: '\u224E', pitchfork: '\u22D4', - varpropto: '\u221D', + varpropto: ['\u221D', {variantForm: true}], backepsilon: '\u220D', blacktriangleleft: '\u25C2', blacktriangleright: '\u25B8', diff --git a/ts/output/chtml/fonts/tex.ts b/ts/output/chtml/fonts/tex.ts index a53d543d7..2f5595aa5 100644 --- a/ts/output/chtml/fonts/tex.ts +++ b/ts/output/chtml/fonts/tex.ts @@ -244,12 +244,12 @@ CommonTeXFontMixin Date: Tue, 3 Dec 2019 09:43:14 -0500 Subject: [PATCH 052/103] Preserve texClass set on individual token elements (like \cdotp). --- ts/core/MmlTree/SerializedMmlVisitor.ts | 6 ++++-- ts/input/mathml/MathMLCompile.ts | 9 +++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/ts/core/MmlTree/SerializedMmlVisitor.ts b/ts/core/MmlTree/SerializedMmlVisitor.ts index 09d14b7f7..cef6b1698 100644 --- a/ts/core/MmlTree/SerializedMmlVisitor.ts +++ b/ts/core/MmlTree/SerializedMmlVisitor.ts @@ -98,9 +98,8 @@ export class SerializedMmlVisitor extends MmlVisitor { * @return {string} The serialized contents of the mrow, properly indented. */ public visitTeXAtomNode(node: MmlNode, space: string) { - let texclass = node.texClass < 0 ? 'NONE' : TEXCLASSNAMES[node.texClass]; let children = this.childNodeMml(node, space + ' ', '\n'); - let mml = space + '' + + let mml = space + '' + (children.match(/\S/) ? '\n' + children + space : '') + ''; return mml; } @@ -181,6 +180,9 @@ export class SerializedMmlVisitor extends MmlVisitor { const variants = (this.constructor as typeof SerializedMmlVisitor).variants; variant && variants.hasOwnProperty(variant) && data.push(' data-mjx-variant="' + variant + '"'); node.getProperty('variantForm') && data.push(' data-mjx-alternate="1"'); + const texclass = node.getProperty('texClass') as number; + texclass !== undefined && + data.push(' data-mjx-texclass="' + (texclass < 0 ? 'NONE' : TEXCLASSNAMES[texclass] + '"'); return data.join(''); } diff --git a/ts/input/mathml/MathMLCompile.ts b/ts/input/mathml/MathMLCompile.ts index cd5e775b3..c217f8281 100644 --- a/ts/input/mathml/MathMLCompile.ts +++ b/ts/input/mathml/MathMLCompile.ts @@ -111,8 +111,9 @@ export class MathMLCompile { public makeNode(node: N) { const adaptor = this.adaptor; let limits = false; + let kind = adaptor.kind(node).replace(/^.*:/, ''); let texClass = adaptor.getAttribute(node, 'data-mjx-texclass') || ''; - let type = texClass ? 'TeXAtom' : adaptor.kind(node).replace(/^.*:/, ''); + let type = texClass && kind === 'mrow' ? 'TeXAtom' : kind; for (const name of adaptor.allClasses(node)) { if (name.match(/^MJX-TeXAtom-/)) { texClass = name.substr(12); @@ -123,8 +124,11 @@ export class MathMLCompile { } this.factory.getNodeClass(type) || this.error('Unknown node type "' + type + '"'); let mml = this.factory.create(type); - if (texClass) { + if (type === 'TeXAtom') { this.texAtom(mml, texClass, limits); + } else if (texClass) { + mml.texClass = (TEXCLASS as {[name: string]: number})[texClass]; + mml.setProperty('texClass', mml.texClass); } this.addAttributes(mml, node); this.checkClass(mml, node); @@ -260,6 +264,7 @@ export class MathMLCompile { */ protected texAtom(mml: MmlNode, texClass: string, limits: boolean) { mml.texClass = (TEXCLASS as {[name: string]: number})[texClass]; + mml.setProperty('texClass', mml.texClass); if (texClass === 'OP' && !limits) { mml.setProperty('movesupsub', true); mml.attributes.setInherited('movablelimits', true); From dcc7217055853bedeb9ecb41ca25dbdcccd8ea12 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Tue, 3 Dec 2019 10:14:43 -0500 Subject: [PATCH 053/103] Only add texClass OP to an if it would not be made an OP automatically --- ts/core/MmlTree/SerializedMmlVisitor.ts | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/ts/core/MmlTree/SerializedMmlVisitor.ts b/ts/core/MmlTree/SerializedMmlVisitor.ts index cef6b1698..79c33d814 100644 --- a/ts/core/MmlTree/SerializedMmlVisitor.ts +++ b/ts/core/MmlTree/SerializedMmlVisitor.ts @@ -24,7 +24,8 @@ import {MmlVisitor} from './MmlVisitor.js'; import {MmlFactory} from './MmlFactory.js'; -import {MmlNode, TextNode, XMLNode, TEXCLASSNAMES} from './MmlNode.js'; +import {MmlNode, TextNode, XMLNode, TEXCLASS, TEXCLASSNAMES} from './MmlNode.js'; +import {MmlMi} from './MmlNodes/mi.js'; /*****************************************************************/ /** @@ -158,7 +159,7 @@ export class SerializedMmlVisitor extends MmlVisitor { let attributes = node.attributes.getAllAttributes(); let variants = (this.constructor as typeof SerializedMmlVisitor).variants; for (const name of Object.keys(attributes)) { - let value = attributes[name] as string; + let value = String(attributes[name]); if (value === undefined) continue; if (name === 'mathvariant' && variants.hasOwnProperty(value)) { value = variants[value]; @@ -181,8 +182,14 @@ export class SerializedMmlVisitor extends MmlVisitor { variant && variants.hasOwnProperty(variant) && data.push(' data-mjx-variant="' + variant + '"'); node.getProperty('variantForm') && data.push(' data-mjx-alternate="1"'); const texclass = node.getProperty('texClass') as number; - texclass !== undefined && - data.push(' data-mjx-texclass="' + (texclass < 0 ? 'NONE' : TEXCLASSNAMES[texclass] + '"'); + if (texclass !== undefined) { + let setclass = true; + if (texclass === TEXCLASS.OP && node.isKind('mi')) { + const name = (node as MmlMi).getText(); + setclass = !(name.length > 1 && name.match(MmlMi.operatorName)); + } + setclass && data.push(' data-mjx-texclass="' + (texclass < 0 ? 'NONE' : TEXCLASSNAMES[texclass] + '"')); + } return data.join(''); } From c96017ab28acd32cf5e5d68516b8ee5fadf0141a Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Tue, 10 Dec 2019 06:59:47 -0800 Subject: [PATCH 054/103] Fix incorrect use of defaulTags, and report an error if the named tag class is not available. Issue #404 --- ts/input/tex/Tags.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ts/input/tex/Tags.ts b/ts/input/tex/Tags.ts index ab8654609..d9f289958 100644 --- a/ts/input/tex/Tags.ts +++ b/ts/input/tex/Tags.ts @@ -651,7 +651,10 @@ export namespace TagsFactory { * @return {Tags} The newly created object. */ export let create = function(name: string): Tags { - let constr = tagsMapping.get(name) || this.defaultTags; + let constr = tagsMapping.get(name) || tagsMapping.get(defaultTags); + if (!constr) { + throw Error('Unknown tags class'); + } return new constr(); }; From 9055788ecebabd63a9b885c6a0a70c0d421f6596 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Mon, 16 Dec 2019 14:28:12 -0500 Subject: [PATCH 055/103] Fix typo (as per Volker's comments) --- ts/input/tex/ParseUtil.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ts/input/tex/ParseUtil.ts b/ts/input/tex/ParseUtil.ts index 8ee4f96f5..2553717e1 100644 --- a/ts/input/tex/ParseUtil.ts +++ b/ts/input/tex/ParseUtil.ts @@ -196,7 +196,7 @@ namespace ParseUtil { * empty braces (TeXAtom with child being an empty inferred row), * is an , precede it by an empty to force the to * be infix. - * @param {ParseOptions} configuration The current parse otpions. + * @param {ParseOptions} configuration The current parse options. * @param {MmlNodep[]} nodes The row of nodes to scan for an initial */ export function fixInitialMO(configuration: ParseOptions, nodes: MmlNode[]) { From 7eedea6722cc220217632888faceadc610863a8f Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Mon, 16 Dec 2019 16:21:15 -0500 Subject: [PATCH 056/103] Update according to Volker's review. Also reorganize to make tracking attributes a bit easier. Finally, add xmlns attribute to math elements (see mathjax/MathJax#2264). --- ts/core/MmlTree/SerializedMmlVisitor.ts | 57 ++++++++++++++++++------- ts/input/mathml/MathMLCompile.ts | 12 +++++- 2 files changed, 53 insertions(+), 16 deletions(-) diff --git a/ts/core/MmlTree/SerializedMmlVisitor.ts b/ts/core/MmlTree/SerializedMmlVisitor.ts index 79c33d814..7a22388aa 100644 --- a/ts/core/MmlTree/SerializedMmlVisitor.ts +++ b/ts/core/MmlTree/SerializedMmlVisitor.ts @@ -27,6 +27,12 @@ import {MmlFactory} from './MmlFactory.js'; import {MmlNode, TextNode, XMLNode, TEXCLASS, TEXCLASSNAMES} from './MmlNode.js'; import {MmlMi} from './MmlNodes/mi.js'; + +export const DATAMJX = 'data-mjx-'; + +type PropertyList = {[name: string]: string}; + + /*****************************************************************/ /** * Implements the SerializedMmlVisitor (subclass of MmlVisitor) @@ -37,7 +43,7 @@ export class SerializedMmlVisitor extends MmlVisitor { /** * Translations for the internal mathvariants */ - public static variants: {[variant: string]: string} = { + public static variants: PropertyList = { "-tex-calligraphic": 'script', "-tex-calligraphic-bold": 'bold-script', "-tex-oldstyle": 'normal', @@ -45,6 +51,14 @@ export class SerializedMmlVisitor extends MmlVisitor { "-tex-mathit": 'italic' }; + /** + * Attributes to include on every element of a given kind + */ + public static defaultAttributes: {[kind: string]: PropertyList} = { + math: { + xmlns: 'http://www.w3.org/1998/Math/MathML' + } + } /** * Convert the tree rooted at a particular node into a serialized MathML string @@ -155,18 +169,23 @@ export class SerializedMmlVisitor extends MmlVisitor { * @return {string} The attribute list as a string */ protected getAttributes(node: MmlNode) { - let attr = ''; - let attributes = node.attributes.getAllAttributes(); - let variants = (this.constructor as typeof SerializedMmlVisitor).variants; + const attr = []; + const defaults = (this.constructor as typeof SerializedMmlVisitor).defaultAttributes[node.kind] || {}; + const attributes = Object.assign({}, + defaults, + this.getDataAttributes(node), + node.attributes.getAllAttributes() + ); + const variants = (this.constructor as typeof SerializedMmlVisitor).variants; + if (attributes.hasOwnProperty('mathvariant') && variants.hasOwnProperty(attributes.mathvariant)) { + attributes.mathvariant = variants[attributes.mathvariant]; + } for (const name of Object.keys(attributes)) { - let value = String(attributes[name]); + const value = String(attributes[name]); if (value === undefined) continue; - if (name === 'mathvariant' && variants.hasOwnProperty(value)) { - value = variants[value]; - } - attr += ' ' + name + '="' + this.quoteHTML(value) + '"'; + attr.push(name + '="' + this.quoteHTML(value) + '"'); } - return attr + this.getDataAttributes(node); + return attr.length ? ' ' + attr.join(' ') : ''; } /** @@ -176,11 +195,11 @@ export class SerializedMmlVisitor extends MmlVisitor { * @return {string} The final class attribute (or empty string) */ protected getDataAttributes(node: MmlNode) { - const data = []; + const data = {}; const variant = node.attributes.getExplicit('mathvariant') as string; const variants = (this.constructor as typeof SerializedMmlVisitor).variants; - variant && variants.hasOwnProperty(variant) && data.push(' data-mjx-variant="' + variant + '"'); - node.getProperty('variantForm') && data.push(' data-mjx-alternate="1"'); + variant && variants.hasOwnProperty(variant) && this.setDataAttribute(data, 'variant', variant); + node.getProperty('variantForm') && this.setDataAttribute(data, 'alternate', '1'); const texclass = node.getProperty('texClass') as number; if (texclass !== undefined) { let setclass = true; @@ -188,9 +207,17 @@ export class SerializedMmlVisitor extends MmlVisitor { const name = (node as MmlMi).getText(); setclass = !(name.length > 1 && name.match(MmlMi.operatorName)); } - setclass && data.push(' data-mjx-texclass="' + (texclass < 0 ? 'NONE' : TEXCLASSNAMES[texclass] + '"')); + setclass && this.setDataAttribute(data, 'texclass', texclass < 0 ? 'NONE' : TEXCLASSNAMES[texclass]); } - return data.join(''); + return data; + } + + /** + * @param {string} name The name for the data-mjx-name attribute + * @return {string} The data-mjx-name="value" string + */ + protected setDataAttribute(data: PropertyList, name: string, value: string) { + data[DATAMJX + name] = value; } /** diff --git a/ts/input/mathml/MathMLCompile.ts b/ts/input/mathml/MathMLCompile.ts index c217f8281..5fdd3c8cf 100644 --- a/ts/input/mathml/MathMLCompile.ts +++ b/ts/input/mathml/MathMLCompile.ts @@ -244,7 +244,7 @@ export class MathMLCompile { if (name === 'MJX-variant') { mml.setProperty('variantForm', true); } else if (name.substr(0, 11) !== 'MJX-TeXAtom') { - mml.attributes.set('mathvariant', name.substr(3).replace(/caligraphic/, 'calligraphic')); + mml.attributes.set('mathvariant', this.fixCalligraphic(name.substr(3))); } } else { classList.push(name); @@ -255,6 +255,16 @@ export class MathMLCompile { } } + /** + * Fix the old incorrect spelling of calligraphic. + * + * @param {string} variant The mathvariant name + * @return {string} The corrected variant + */ + protected fixCalligraphic(variant: string) { + return variant.replace(/caligraphic/, 'calligraphic'); + } + /** * Handle the properties of a TeXAtom * From 491520a3f1e42d4935f5e10b9090715d7f4ef738 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Tue, 17 Dec 2019 11:55:02 -0500 Subject: [PATCH 057/103] Properly obtain the require() command, and set the mathjax root correctly regardless of webpacking or location of the node script. Resolves issue #406 --- components/src/node-main/node-main.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/components/src/node-main/node-main.js b/components/src/node-main/node-main.js index 0b2cbe29e..74106f461 100644 --- a/components/src/node-main/node-main.js +++ b/components/src/node-main/node-main.js @@ -12,12 +12,14 @@ const {dependencies, paths, provides} = require('../dependencies.js'); * Set up the initial configuration */ combineDefaults(MathJax.config, 'loader', { - require: global.require, // use node's require() to load files + require: eval('require'), // use node's require() to load files failed: (err) => {throw err} // pass on error message to init()'s catch function }); combineDefaults(MathJax.config.loader, 'dependencies', dependencies); combineDefaults(MathJax.config.loader, 'paths', paths); combineDefaults(MathJax.config.loader, 'provides', provides); +MathJax.config.loader.paths.mathjax = + path.resolve(MathJax.config.loader.require.resolve('mathjax/package.json'), '..', 'es5'); /* * Preload core and liteDOM adaptor (needed for node) From 60a1e822d99f39b9530d6a961989c1235d1b6b17 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Tue, 17 Dec 2019 16:00:44 -0500 Subject: [PATCH 058/103] Do a restart if a package loaded with \require has preprocessors (since they will need to run before the math is processed). This allows \require{bussproofs} to be in the same expression as the bussproof itself. Also, remove dupolication of pre- and post-processors from the register() function. --- ts/input/tex/Configuration.ts | 9 +-------- ts/input/tex/require/RequireConfiguration.ts | 11 ++++++++++- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/ts/input/tex/Configuration.ts b/ts/input/tex/Configuration.ts index e8db16e65..6a2bee183 100644 --- a/ts/input/tex/Configuration.ts +++ b/ts/input/tex/Configuration.ts @@ -198,8 +198,7 @@ export class Configuration { } /** - * Appends configurations to this configuration. Note that fallbacks are - * overwritten, while order of configurations is preserved. + * Registers a configuration after the input jax is created. (Used by \require.) * * @param {Configuration} config The configuration to be registered in this one * @param {TeX} jax The TeX jax where it is being registered @@ -216,12 +215,6 @@ export class Configuration { defaultOptions(parser.options, config.options); userOptions(parser.options, options); config.config(this, jax); - for (const pre of config.preprocessors) { - Array.isArray(pre) ? jax.preFilters.add(pre[0], pre[1]) : jax.preFilters.add(pre); - } - for (const post of config.postprocessors) { - Array.isArray(post) ? jax.postFilters.add(post[0], post[1]) : jax.postFilters.add(post); - } } /** diff --git a/ts/input/tex/require/RequireConfiguration.ts b/ts/input/tex/require/RequireConfiguration.ts index 5371f63d5..7fcb6d50e 100644 --- a/ts/input/tex/require/RequireConfiguration.ts +++ b/ts/input/tex/require/RequireConfiguration.ts @@ -76,6 +76,15 @@ function RegisterExtension(jax: TeX, name: string) { // Register the extension with the jax's configuration // (jax as any).configuration.register(handler, jax, options); + // + // If there are preprocessors, restart so that they run + // (we don't have access to the document or MathItem needed to call + // the preprocessors from here) + // + if (handler.preprocessors.length && !handler.options.configured) { + handler.options.configured = true; + mathjax.retryAfter(Promise.resolve()); + } } } } @@ -103,7 +112,7 @@ function RegisterDependencies(jax: TeX, names: string[] = []) { */ export function RequireLoad(parser: TexParser, name: string) { const options = parser.options.require; - const allow = options.allow + const allow = options.allow; const extension = (name.substr(0,1) === '[' ? '' : options.prefix) + name; const allowed = (allow.hasOwnProperty(extension) ? allow[extension] : allow.hasOwnProperty(name) ? allow[name] : options.defaultAllow); From 6b0e24b7f04ed0c095de0f642e629919fa9ebc45 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Wed, 18 Dec 2019 12:12:27 -0500 Subject: [PATCH 059/103] Initial implementation of assistive-mml extension (still needs CSS) --- ts/a11y/assistive-mml.ts | 239 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 239 insertions(+) create mode 100644 ts/a11y/assistive-mml.ts diff --git a/ts/a11y/assistive-mml.ts b/ts/a11y/assistive-mml.ts new file mode 100644 index 000000000..202d68d49 --- /dev/null +++ b/ts/a11y/assistive-mml.ts @@ -0,0 +1,239 @@ +/************************************************************* + * + * Copyright (c) 2019 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Mixin that adds hidden MathML to the output + * + * @author dpvc@mathjax.org (Davide Cervone) + */ + +import {Handler} from '../core/Handler.js'; +import {MathDocument, AbstractMathDocument, MathDocumentConstructor} from '../core/MathDocument.js'; +import {MathItem, AbstractMathItem, STATE, newState} from '../core/MathItem.js'; +import {MmlNode} from '../core/MmlTree/MmlNode.js'; +import {SerializedMmlVisitor} from '../core/MmlTree/SerializedMmlVisitor.js'; +import {OptionList, expandable} from '../util/Options.js'; + +/** + * Generic constructor for Mixins + */ +export type Constructor = new(...args: any[]) => T; + +/*==========================================================================*/ + +/** + * Add STATE value for having assistive MathML (after TYPESETTING) + */ +newState('ASSISTIVEMML', 153); + +/** + * The funtions added to MathItem for assistive MathML + * + * @template N The HTMLElement node class + * @template T The Text node class + * @template D The Document class + */ +export interface AssistiveMmlMathItem extends MathItem { + /** + * @param {MathDocument} document The document where assistive MathML is being added + */ + assistiveMml(document: MathDocument): void; +} + +/** + * The mixin for adding assistive MathML to MathItems + * + * @param {B} BaseMathItem The MathItem class to be extended + * @return {AssistiveMathItem} The augmented MathItem class + * + * @template N The HTMLElement node class + * @template T The Text node class + * @template D The Document class + * @template B The MathItem class to extend + */ +export function AssistiveMmlMathItemMixin>>( + BaseMathItem: B +): Constructor> & B { + + return class extends BaseMathItem { + + /** + * @param {MathDocument} document The MathDocument for the MathItem + */ + public assistiveMml(document: AssistiveMmlMathDocument) { + if (this.state() >= STATE.ASSISTIVEMML) return; + this.state(STATE.ASSISTIVEMML); + const adaptor = document.adaptor; + // + // Get the serialized MathML + // + const mml = document.toMML(this.root).replace(/\n */g, '').replace(//g, ''); + // + // Parse is as HTML and retrieve the element + // + const mmlNodes = adaptor.firstChild(adaptor.body(adaptor.parse(mml, 'text/html'))); + // + // Create a container for the hidden MathML + // + const node = adaptor.node('mjx-assistive-mml', { + role: 'presentation', unselectable: 'on', display: (this.display ? 'block' : 'inline') + }, [mmlNodes]); + // + // Hide the typeset math from assistive technology and append the MathML that is visually + // hidden from other users + // + adaptor.setAttribute(this.typesetRoot, 'role', 'presentation'); + adaptor.setAttribute(adaptor.firstChild(this.typesetRoot) as N, 'aria-hidden', 'true'); + adaptor.setStyle(this.typesetRoot, 'position', 'relative'); + adaptor.append(this.typesetRoot, node); + } + + }; + +} + +/*==========================================================================*/ + +/** + * The funtions added to MathDocument for assisitve MathML + * + * @template N The HTMLElement node class + * @template T The Text node class + * @template D The Document class + */ +export interface AssistiveMmlMathDocument extends AbstractMathDocument { + + /** + * Add assistive MathML to the MathItems in the MathDocument + * + * @return {AssisitiveMmlMathDocument} The MathDocument (so calls can be chained) + */ + assistiveMml(): AssistiveMmlMathDocument; + + /** + * @param {MmlNode} node The node to be serializes + * @return {string} The serialization of the node + */ + toMML: (node: MmlNode) => string; + +} + +/** + * The mixin for adding assisitve MathML to MathDocuments + * + * @param {B} BaseMathDocument The MathDocument class to be extended + * @return {AssisitveMMlMathDocument} The Assistive MathML MathDocument class + * + * @template N The HTMLElement node class + * @template T The Text node class + * @template D The Document class + * @template B The MathDocument class to extend + */ +export function AssistiveMmlMathDocumentMixin>>( + BaseDocument: B +): MathDocumentConstructor> & B { + + return class extends BaseDocument { + + public static OPTIONS: OptionList = { + ...BaseDocument.OPTIONS, + renderActions: expandable({ + ...BaseDocument.OPTIONS.renderActions, + assistiveMml: [STATE.ASSISTIVEMML] + }) + }; + + /** + * Visitor used for serializing internal MathML nodes + */ + protected visitor: SerializedMmlVisitor; + + /** + * Augment the MathItem class used for this MathDocument, and create the serialization visitor. + * + * @override + * @constructor + */ + constructor(...args: any[]) { + super(...args); + const ProcessBits = (this.constructor as typeof AbstractMathDocument).ProcessBits; + if (!ProcessBits.has('assistive-mml')) { + ProcessBits.allocate('assistive-mml'); + } + this.visitor = new SerializedMmlVisitor(this.mmlFactory); + this.options.MathItem = + AssistiveMmlMathItemMixin>>( + this.options.MathItem + ); + } + + /** + * @param {MmlNode} node The node to be serializes + * @return {string} The serialization of the node + */ + public toMML(node: MmlNode) { + return this.visitor.visitTree(node); + } + + /** + * Add assistive MathML to the MathItems in this MathDocument + */ + public assistiveMml() { + if (!this.processed.isSet('assistive-mml')) { + for (const math of this.math) { + (math as AssistiveMmlMathItem).assistiveMml(this); + } + this.processed.set('assistive-mml'); + } + return this; + } + + /** + * @override + */ + public state(state: number, restore: boolean = false) { + super.state(state, restore); + if (state < STATE.ASSISTIVEMML) { + this.processed.clear('assistive-mml'); + } + return this; + } + + }; + +} + +/*==========================================================================*/ + +/** + * Add assitive MathML support a Handler instance + * + * @param {Handler} handler The Handler instance to enhance + * @return {Handler} The handler that was modified (for purposes of chainging extensions) + * + * @template N The HTMLElement node class + * @template T The Text node class + * @template D The Document class + */ +export function AssistiveMmlHandler(handler: Handler) { + handler.documentClass = + AssistiveMmlMathDocumentMixin>>( + handler.documentClass + ); + return handler; +} From c118f45c28f33e70e707140be5d4e132d4fe6b34 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Wed, 18 Dec 2019 12:13:06 -0500 Subject: [PATCH 060/103] Add component for assistive-mml --- components/src/a11y/assistive-mml/assistive-mml.js | 7 +++++++ components/src/a11y/assistive-mml/build.json | 5 +++++ components/src/a11y/assistive-mml/webpack.config.js | 11 +++++++++++ components/src/source.js | 1 + 4 files changed, 24 insertions(+) create mode 100644 components/src/a11y/assistive-mml/assistive-mml.js create mode 100644 components/src/a11y/assistive-mml/build.json create mode 100644 components/src/a11y/assistive-mml/webpack.config.js diff --git a/components/src/a11y/assistive-mml/assistive-mml.js b/components/src/a11y/assistive-mml/assistive-mml.js new file mode 100644 index 000000000..051f79c0a --- /dev/null +++ b/components/src/a11y/assistive-mml/assistive-mml.js @@ -0,0 +1,7 @@ +import './lib/assistive-mml.js'; + +import {AssistiveMmlHandler} from '../../../../js/a11y/assistive-mml.js'; + +if (MathJax.startup) { + MathJax.startup.extendHandler(handler => AssistiveMmlHandler(handler)); +} diff --git a/components/src/a11y/assistive-mml/build.json b/components/src/a11y/assistive-mml/build.json new file mode 100644 index 000000000..d71365255 --- /dev/null +++ b/components/src/a11y/assistive-mml/build.json @@ -0,0 +1,5 @@ +{ + "component": "a11y/assistive-mml", + "targets": ["a11y/assistive-mml.ts"] +} + diff --git a/components/src/a11y/assistive-mml/webpack.config.js b/components/src/a11y/assistive-mml/webpack.config.js new file mode 100644 index 000000000..f89a7bd50 --- /dev/null +++ b/components/src/a11y/assistive-mml/webpack.config.js @@ -0,0 +1,11 @@ +const PACKAGE = require('../../../webpack.common.js'); + +module.exports = PACKAGE( + 'a11y/assistive-mml', // the package to build + '../../../../js', // location of the MathJax js library + [ // packages to link to + 'components/src/input/mml/lib', + 'components/src/core/lib' + ], + __dirname // our directory +); diff --git a/components/src/source.js b/components/src/source.js index 133ed9c22..afcd4043c 100644 --- a/components/src/source.js +++ b/components/src/source.js @@ -38,6 +38,7 @@ exports.source = { 'output/chtml/fonts/tex': `${src}/output/chtml/fonts/tex/tex.js`, 'output/svg': `${src}/output/svg/svg.js`, 'output/svg/fonts/tex': `${src}/output/svg/fonts/tex/tex.js`, + 'a11y/assistive-mml': `${src}/a11y/assistive-mml/assistive-mml.js`, 'a11y/semantic-enrich': `${src}/a11y/semantic-enrich/semantic-enrich.js`, 'a11y/complexity': `${src}/a11y/complexity/complexity.js`, 'a11y/explorer': `${src}/a11y/explorer/explorer.js`, From 4860663d8061732d7359f0903922ad079d5fa615 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Wed, 18 Dec 2019 14:40:48 -0500 Subject: [PATCH 061/103] Add support for extensions to add styles to the document stylesheet, and use that for the assistive MathML extension --- ts/a11y/assistive-mml.ts | 37 ++++++++++++++++++++++++++++++-- ts/handlers/html/HTMLDocument.ts | 20 +++++++++++++++++ ts/output/common/OutputJax.ts | 10 ++++++++- 3 files changed, 64 insertions(+), 3 deletions(-) diff --git a/ts/a11y/assistive-mml.ts b/ts/a11y/assistive-mml.ts index 202d68d49..675146d8e 100644 --- a/ts/a11y/assistive-mml.ts +++ b/ts/a11y/assistive-mml.ts @@ -27,6 +27,7 @@ import {MathItem, AbstractMathItem, STATE, newState} from '../core/MathItem.js'; import {MmlNode} from '../core/MmlTree/MmlNode.js'; import {SerializedMmlVisitor} from '../core/MmlTree/SerializedMmlVisitor.js'; import {OptionList, expandable} from '../util/Options.js'; +import {StyleList} from '../output/common/CssStyles.js'; /** * Generic constructor for Mixins @@ -148,7 +149,7 @@ export function AssistiveMmlMathDocumentMixin> & B { - return class extends BaseDocument { + return class BaseClass extends BaseDocument { public static OPTIONS: OptionList = { ...BaseDocument.OPTIONS, @@ -158,6 +159,34 @@ export function AssistiveMmlMathDocumentMixin Date: Wed, 5 Feb 2020 09:49:28 -0500 Subject: [PATCH 091/103] Update package version number, fix typescript version at 3.5, update webpack versions --- package-lock.json | 1382 ++++++++++++++++++++++++++------------------- package.json | 10 +- 2 files changed, 798 insertions(+), 594 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2e1879e09..bfef284fb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,180 +5,179 @@ "requires": true, "dependencies": { "@webassemblyjs/ast": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.6.tgz", - "integrity": "sha512-8nkZS48EVsMUU0v6F1LCIOw4RYWLm2plMtbhFTjNgeXmsTNLuU3xTRtnljt9BFQB+iPbLRobkNrCWftWnNC7wQ==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", + "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", "dev": true, "requires": { - "@webassemblyjs/helper-module-context": "1.7.6", - "@webassemblyjs/helper-wasm-bytecode": "1.7.6", - "@webassemblyjs/wast-parser": "1.7.6", - "mamacro": "^0.0.3" + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.6.tgz", - "integrity": "sha512-VBOZvaOyBSkPZdIt5VBMg3vPWxouuM13dPXGWI1cBh3oFLNcFJ8s9YA7S9l4mPI7+Q950QqOmqj06oa83hNWBA==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", + "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.6.tgz", - "integrity": "sha512-SCzhcQWHXfrfMSKcj8zHg1/kL9kb3aa5TN4plc/EREOs5Xop0ci5bdVBApbk2yfVi8aL+Ly4Qpp3/TRAUInjrg==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", + "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.6.tgz", - "integrity": "sha512-1/gW5NaGsEOZ02fjnFiU8/OEEXU1uVbv2um0pQ9YVL3IHSkyk6xOwokzyqqO1qDZQUAllb+V8irtClPWntbVqw==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", + "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==", "dev": true }, "@webassemblyjs/helper-code-frame": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.6.tgz", - "integrity": "sha512-+suMJOkSn9+vEvDvgyWyrJo5vJsWSDXZmJAjtoUq4zS4eqHyXImpktvHOZwXp1XQjO5H+YQwsBgqTQEc0J/5zg==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", + "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", "dev": true, "requires": { - "@webassemblyjs/wast-printer": "1.7.6" + "@webassemblyjs/wast-printer": "1.8.5" } }, "@webassemblyjs/helper-fsm": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.6.tgz", - "integrity": "sha512-HCS6KN3wgxUihGBW7WFzEC/o8Eyvk0d56uazusnxXthDPnkWiMv+kGi9xXswL2cvfYfeK5yiM17z2K5BVlwypw==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", + "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==", "dev": true }, "@webassemblyjs/helper-module-context": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.6.tgz", - "integrity": "sha512-e8/6GbY7OjLM+6OsN7f2krC2qYVNaSr0B0oe4lWdmq5sL++8dYDD1TFbD1TdAdWMRTYNr/Qq7ovXWzia2EbSjw==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", + "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", "dev": true, "requires": { + "@webassemblyjs/ast": "1.8.5", "mamacro": "^0.0.3" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.6.tgz", - "integrity": "sha512-PzYFCb7RjjSdAOljyvLWVqd6adAOabJW+8yRT+NWhXuf1nNZWH+igFZCUK9k7Cx7CsBbzIfXjJc7u56zZgFj9Q==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", + "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.6.tgz", - "integrity": "sha512-3GS628ppDPSuwcYlQ7cDCGr4W2n9c4hLzvnRKeuz+lGsJSmc/ADVoYpm1ts2vlB1tGHkjtQMni+yu8mHoMlKlA==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", + "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/helper-buffer": "1.7.6", - "@webassemblyjs/helper-wasm-bytecode": "1.7.6", - "@webassemblyjs/wasm-gen": "1.7.6" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5" } }, "@webassemblyjs/ieee754": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.6.tgz", - "integrity": "sha512-V4cIp0ruyw+hawUHwQLn6o2mFEw4t50tk530oKsYXQhEzKR+xNGDxs/SFFuyTO7X3NzEu4usA3w5jzhl2RYyzQ==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", + "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.6.tgz", - "integrity": "sha512-ojdlG8WpM394lBow4ncTGJoIVZ4aAtNOWHhfAM7m7zprmkVcKK+2kK5YJ9Bmj6/ketTtOn7wGSHCtMt+LzqgYQ==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", + "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", "dev": true, "requires": { - "@xtuc/long": "4.2.1" + "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.6.tgz", - "integrity": "sha512-oId+tLxQ+AeDC34ELRYNSqJRaScB0TClUU6KQfpB8rNT6oelYlz8axsPhf6yPTg7PBJ/Z5WcXmUYiHEWgbbHJw==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", + "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.6.tgz", - "integrity": "sha512-pTNjLO3o41v/Vz9VFLl+I3YLImpCSpodFW77pNoH4agn5I6GgSxXHXtvWDTvYJFty0jSeXZWLEmbaSIRUDlekg==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", + "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/helper-buffer": "1.7.6", - "@webassemblyjs/helper-wasm-bytecode": "1.7.6", - "@webassemblyjs/helper-wasm-section": "1.7.6", - "@webassemblyjs/wasm-gen": "1.7.6", - "@webassemblyjs/wasm-opt": "1.7.6", - "@webassemblyjs/wasm-parser": "1.7.6", - "@webassemblyjs/wast-printer": "1.7.6" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/helper-wasm-section": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-opt": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "@webassemblyjs/wast-printer": "1.8.5" } }, "@webassemblyjs/wasm-gen": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.6.tgz", - "integrity": "sha512-mQvFJVumtmRKEUXMohwn8nSrtjJJl6oXwF3FotC5t6e2hlKMh8sIaW03Sck2MDzw9xPogZD7tdP5kjPlbH9EcQ==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", + "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/helper-wasm-bytecode": "1.7.6", - "@webassemblyjs/ieee754": "1.7.6", - "@webassemblyjs/leb128": "1.7.6", - "@webassemblyjs/utf8": "1.7.6" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" } }, "@webassemblyjs/wasm-opt": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.6.tgz", - "integrity": "sha512-go44K90fSIsDwRgtHhX14VtbdDPdK2sZQtZqUcMRvTojdozj5tLI0VVJAzLCfz51NOkFXezPeVTAYFqrZ6rI8Q==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", + "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/helper-buffer": "1.7.6", - "@webassemblyjs/wasm-gen": "1.7.6", - "@webassemblyjs/wasm-parser": "1.7.6" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5" } }, "@webassemblyjs/wasm-parser": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.6.tgz", - "integrity": "sha512-t1T6TfwNY85pDA/HWPA8kB9xA4sp9ajlRg5W7EKikqrynTyFo+/qDzIpvdkOkOGjlS6d4n4SX59SPuIayR22Yg==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", + "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/helper-api-error": "1.7.6", - "@webassemblyjs/helper-wasm-bytecode": "1.7.6", - "@webassemblyjs/ieee754": "1.7.6", - "@webassemblyjs/leb128": "1.7.6", - "@webassemblyjs/utf8": "1.7.6" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" } }, "@webassemblyjs/wast-parser": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.6.tgz", - "integrity": "sha512-1MaWTErN0ziOsNUlLdvwS+NS1QWuI/kgJaAGAMHX8+fMJFgOJDmN/xsG4h/A1Gtf/tz5VyXQciaqHZqp2q0vfg==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", + "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/floating-point-hex-parser": "1.7.6", - "@webassemblyjs/helper-api-error": "1.7.6", - "@webassemblyjs/helper-code-frame": "1.7.6", - "@webassemblyjs/helper-fsm": "1.7.6", - "@xtuc/long": "4.2.1", - "mamacro": "^0.0.3" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/floating-point-hex-parser": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-code-frame": "1.8.5", + "@webassemblyjs/helper-fsm": "1.8.5", + "@xtuc/long": "4.2.2" } }, "@webassemblyjs/wast-printer": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.6.tgz", - "integrity": "sha512-vHdHSK1tOetvDcl1IV1OdDeGNe/NDDQ+KzuZHMtqTVP1xO/tZ/IKNpj5BaGk1OYFdsDWQqb31PIwdEyPntOWRQ==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", + "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/wast-parser": "1.7.6", - "@xtuc/long": "4.2.1" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5", + "@xtuc/long": "4.2.2" } }, "@xtuc/ieee754": { @@ -188,26 +187,17 @@ "dev": true }, "@xtuc/long": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz", - "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz", + "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==", "dev": true }, - "acorn-dynamic-import": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", - "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", - "dev": true, - "requires": { - "acorn": "^5.0.0" - } - }, "ajv": { "version": "6.6.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.1.tgz", @@ -252,6 +242,17 @@ "requires": { "micromatch": "^3.1.4", "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } } }, "aproba": { @@ -296,11 +297,12 @@ } }, "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, "requires": { + "object-assign": "^4.1.1", "util": "0.10.3" }, "dependencies": { @@ -328,9 +330,9 @@ "dev": true }, "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", "dev": true }, "atob": { @@ -1025,9 +1027,9 @@ } }, "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", "dev": true }, "big.js": { @@ -1037,15 +1039,25 @@ "dev": true }, "binary-extensions": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", - "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, "bn.js": { @@ -1181,9 +1193,9 @@ } }, "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "dev": true, "requires": { "base64-js": "^1.0.2", @@ -1210,31 +1222,32 @@ "dev": true }, "cacache": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz", - "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", + "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", "dev": true, "requires": { - "bluebird": "^3.5.3", + "bluebird": "^3.5.5", "chownr": "^1.1.1", "figgy-pudding": "^3.5.1", - "glob": "^7.1.3", + "glob": "^7.1.4", "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", "lru-cache": "^5.1.1", "mississippi": "^3.0.0", "mkdirp": "^0.5.1", "move-concurrently": "^1.0.1", "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", + "rimraf": "^2.6.3", "ssri": "^6.0.1", "unique-filename": "^1.1.1", "y18n": "^4.0.0" }, "dependencies": { "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -1245,15 +1258,6 @@ "path-is-absolute": "^1.0.0" } }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -1262,12 +1266,6 @@ "requires": { "glob": "^7.1.3" } - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", - "dev": true } } }, @@ -1314,24 +1312,23 @@ } }, "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", "dev": true, "requires": { "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", "glob-parent": "^3.1.0", - "inherits": "^2.0.1", + "inherits": "^2.0.3", "is-binary-path": "^1.0.0", "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", + "normalize-path": "^3.0.0", "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" + "readdirp": "^2.2.1", + "upath": "^1.1.1" } }, "chownr": { @@ -1341,9 +1338,9 @@ "dev": true }, "chrome-trace-event": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz", - "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -1383,39 +1380,33 @@ } }, "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.1.0" } } } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -1483,13 +1474,10 @@ } }, "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "^0.1.4" - } + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true }, "constants-browserify": { "version": "1.0.0", @@ -1794,12 +1782,6 @@ "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", "dev": true }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -1885,9 +1867,9 @@ "dev": true }, "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, "requires": { "inherits": "^2.0.1", @@ -1951,9 +1933,9 @@ "dev": true }, "elliptic": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", - "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", + "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", "dev": true, "requires": { "bn.js": "^4.4.0", @@ -2037,9 +2019,9 @@ "dev": true }, "eslint-scope": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", - "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "dev": true, "requires": { "esrecurse": "^4.1.0", @@ -2061,9 +2043,9 @@ } }, "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, "esutils": { @@ -2073,9 +2055,9 @@ "dev": true }, "events": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz", + "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==", "dev": true }, "evp_bytestokey": { @@ -2251,6 +2233,13 @@ "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", "dev": true }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -2387,14 +2376,15 @@ "dev": true }, "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz", + "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==", "dev": true, "optional": true, "requires": { + "bindings": "^1.5.0", "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" + "node-pre-gyp": "*" }, "dependencies": { "abbrev": { @@ -2442,7 +2432,7 @@ } }, "chownr": { - "version": "1.1.1", + "version": "1.1.3", "bundled": true, "dev": true, "optional": true @@ -2472,7 +2462,7 @@ "optional": true }, "debug": { - "version": "4.1.1", + "version": "3.2.6", "bundled": true, "dev": true, "optional": true, @@ -2499,12 +2489,12 @@ "optional": true }, "fs-minipass": { - "version": "1.2.5", + "version": "1.2.7", "bundled": true, "dev": true, "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "^2.6.0" } }, "fs.realpath": { @@ -2530,7 +2520,7 @@ } }, "glob": { - "version": "7.1.3", + "version": "7.1.6", "bundled": true, "dev": true, "optional": true, @@ -2559,7 +2549,7 @@ } }, "ignore-walk": { - "version": "3.0.1", + "version": "3.0.3", "bundled": true, "dev": true, "optional": true, @@ -2578,7 +2568,7 @@ } }, "inherits": { - "version": "2.0.3", + "version": "2.0.4", "bundled": true, "dev": true, "optional": true @@ -2620,7 +2610,7 @@ "optional": true }, "minipass": { - "version": "2.3.5", + "version": "2.9.0", "bundled": true, "dev": true, "optional": true, @@ -2630,12 +2620,12 @@ } }, "minizlib": { - "version": "1.2.1", + "version": "1.3.3", "bundled": true, "dev": true, "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "^2.9.0" } }, "mkdirp": { @@ -2648,24 +2638,24 @@ } }, "ms": { - "version": "2.1.1", + "version": "2.1.2", "bundled": true, "dev": true, "optional": true }, "needle": { - "version": "2.3.0", + "version": "2.4.0", "bundled": true, "dev": true, "optional": true, "requires": { - "debug": "^4.1.0", + "debug": "^3.2.6", "iconv-lite": "^0.4.4", "sax": "^1.2.4" } }, "node-pre-gyp": { - "version": "0.12.0", + "version": "0.14.0", "bundled": true, "dev": true, "optional": true, @@ -2679,7 +2669,7 @@ "rc": "^1.2.7", "rimraf": "^2.6.1", "semver": "^5.3.0", - "tar": "^4" + "tar": "^4.4.2" } }, "nopt": { @@ -2693,13 +2683,22 @@ } }, "npm-bundled": { - "version": "1.0.6", + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", "bundled": true, "dev": true, "optional": true }, "npm-packlist": { - "version": "1.4.1", + "version": "1.4.7", "bundled": true, "dev": true, "optional": true, @@ -2770,7 +2769,7 @@ "optional": true }, "process-nextick-args": { - "version": "2.0.0", + "version": "2.0.1", "bundled": true, "dev": true, "optional": true @@ -2811,7 +2810,7 @@ } }, "rimraf": { - "version": "2.6.3", + "version": "2.7.1", "bundled": true, "dev": true, "optional": true, @@ -2838,7 +2837,7 @@ "optional": true }, "semver": { - "version": "5.7.0", + "version": "5.7.1", "bundled": true, "dev": true, "optional": true @@ -2891,18 +2890,18 @@ "optional": true }, "tar": { - "version": "4.4.8", + "version": "4.4.13", "bundled": true, "dev": true, "optional": true, "requires": { "chownr": "^1.1.1", "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", "mkdirp": "^0.5.0", "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" + "yallist": "^3.0.3" } }, "util-deprecate": { @@ -2927,7 +2926,7 @@ "optional": true }, "yallist": { - "version": "3.0.3", + "version": "3.1.1", "bundled": true, "dev": true, "optional": true @@ -2941,9 +2940,9 @@ "dev": true }, "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "get-stream": { @@ -2997,14 +2996,25 @@ } }, "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" + "global-prefix": "^3.0.0" + }, + "dependencies": { + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + } } }, "global-prefix": { @@ -3145,9 +3155,9 @@ "dev": true }, "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", "dev": true }, "iferr": { @@ -3186,9 +3196,9 @@ } }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -3226,10 +3236,10 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", "dev": true }, "inflight": { @@ -3395,9 +3405,9 @@ "dev": true }, "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -3459,6 +3469,12 @@ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -3523,9 +3539,9 @@ } }, "loader-runner": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.1.tgz", - "integrity": "sha512-By6ZFY7ETWOc9RFaAIb23IjJVcM4dvJC/N57nmdz9RSkMXvAXGI7SyVlAw3v8vjtDRlqThgVDVmTnr9fqMlxkw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", "dev": true }, "loader-utils": { @@ -3555,12 +3571,6 @@ "integrity": "sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw==", "dev": true }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true - }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -3571,13 +3581,12 @@ } }, "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "yallist": "^3.0.2" } }, "make-dir": { @@ -3848,9 +3857,9 @@ } }, "neo-async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", - "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", "dev": true }, "nice-try": { @@ -3860,9 +3869,9 @@ "dev": true }, "node-libs-browser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", - "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", "dev": true, "requires": { "assert": "^1.1.1", @@ -3872,10 +3881,10 @@ "constants-browserify": "^1.0.0", "crypto-browserify": "^3.11.0", "domain-browser": "^1.1.1", - "events": "^1.0.0", + "events": "^3.0.0", "https-browserify": "^1.0.0", "os-browserify": "^0.3.0", - "path-browserify": "0.0.0", + "path-browserify": "0.0.1", "process": "^0.11.10", "punycode": "^1.2.4", "querystring-es3": "^0.2.0", @@ -3886,8 +3895,8 @@ "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", "url": "^0.11.0", - "util": "^0.10.3", - "vm-browserify": "0.0.4" + "util": "^0.11.0", + "vm-browserify": "^1.0.1" }, "dependencies": { "punycode": { @@ -3935,13 +3944,10 @@ } }, "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "npm-run-path": { "version": "2.0.2", @@ -3958,6 +3964,12 @@ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", @@ -4118,9 +4130,9 @@ "dev": true }, "pako": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.7.tgz", - "integrity": "sha512-3HNK5tW4x8o5mO8RuHZp3Ydw9icZXx0RANAOMzlMzx7LVXhMJ4mo3MOBpzyd7r/+RUu8BmndP47LXT+vzjtWcQ==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", "dev": true }, "parallel-transform": { @@ -4135,16 +4147,17 @@ } }, "parse-asn1": { - "version": "5.1.1", - "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", - "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", + "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", "dev": true, "requires": { "asn1.js": "^4.0.0", "browserify-aes": "^1.0.0", "create-hash": "^1.1.0", "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3" + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" } }, "parse-passwd": { @@ -4160,9 +4173,9 @@ "dev": true }, "path-browserify": { - "version": "0.0.0", - "resolved": "http://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", "dev": true }, "path-dirname": { @@ -4259,12 +4272,6 @@ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", "dev": true }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, "public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", @@ -4331,9 +4338,9 @@ "dev": true }, "randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { "safe-buffer": "^5.1.0" @@ -4476,9 +4483,9 @@ "dev": true }, "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, "resolve": { @@ -4507,6 +4514,19 @@ "requires": { "expand-tilde": "^2.0.0", "global-modules": "^1.0.0" + }, + "dependencies": { + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + } } }, "resolve-from": { @@ -4596,12 +4616,13 @@ } }, "schema-utils": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", - "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", "ajv-keywords": "^3.1.0" } }, @@ -4614,7 +4635,8 @@ "serialize-javascript": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", - "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==" + "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", + "dev": true }, "set-blocking": { "version": "2.0.0", @@ -4891,9 +4913,9 @@ } }, "stream-browserify": { - "version": "2.0.1", - "resolved": "http://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", "dev": true, "requires": { "inherits": "~2.0.1", @@ -4930,28 +4952,29 @@ "dev": true }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { + "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "strip-ansi": "^5.1.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.1.0" } } } @@ -5032,6 +5055,210 @@ } } }, + "terser": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.3.tgz", + "integrity": "sha512-Lw+ieAXmY69d09IIc/yqeBqXpEQIpDGZqT34ui1QWXIUpR2RjbqEkT8X7Lgex19hslSqcWM5iMN2kM11eMsESQ==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", + "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + } + } + }, + "terser-webpack-plugin": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz", + "integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^2.1.2", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "dependencies": { + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "cacache": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", + "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "p-limit": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + } + } + }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -5049,9 +5276,9 @@ } }, "timers-browserify": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", - "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", "dev": true, "requires": { "setimmediate": "^1.0.4" @@ -5118,9 +5345,9 @@ "dev": true }, "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", "dev": true }, "tslint": { @@ -5189,15 +5416,21 @@ "dev": true }, "uglify-js": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.4.tgz", - "integrity": "sha512-GpKo28q/7Bm5BcX9vOu4S46FwisbPbAmkkqPnGIpKvKTM96I85N6XHQV+k4I6FA2wxgLhcsSyHoNhzucwCflvA==", + "version": "3.7.6", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.7.6.tgz", + "integrity": "sha512-yYqjArOYSxvqeeiYH2VGjZOqq6SVmhxzaPjJC1W2F9e+bqvFL9QXQ2osQuKUFjM2hGjKG2YclQnRKWQSt/nOTQ==", "dev": true, "requires": { - "commander": "~2.20.0", + "commander": "~2.20.3", "source-map": "~0.6.1" }, "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -5207,19 +5440,20 @@ } }, "uglifyjs-webpack-plugin": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-2.1.2.tgz", - "integrity": "sha512-G1fJx2uOAAfvdZ77SVCzmFo6mv8uKaHoZBL9Qq/ciC8r6p0ANOL1uY85fIUiyWXKw5RzAaJYZfNSL58Or2hQ0A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-2.2.0.tgz", + "integrity": "sha512-mHSkufBmBuJ+KHQhv5H0MXijtsoA1lynJt1lXOaotja8/I0pR4L9oGaPIZw+bQBOFittXZg9OC1sXSGO9D9ZYg==", "dev": true, "requires": { - "cacache": "^11.2.0", - "find-cache-dir": "^2.0.0", + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", "schema-utils": "^1.0.0", - "serialize-javascript": "^1.4.0", + "serialize-javascript": "^1.7.0", "source-map": "^0.6.1", - "uglify-js": "^3.0.0", - "webpack-sources": "^1.1.0", - "worker-farm": "^1.5.2" + "uglify-js": "^3.6.0", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" }, "dependencies": { "find-cache-dir": { @@ -5263,9 +5497,9 @@ } }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -5301,17 +5535,6 @@ "find-up": "^3.0.0" } }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, "serialize-javascript": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz", @@ -5407,9 +5630,9 @@ } }, "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true }, "uri-js": { @@ -5452,9 +5675,9 @@ "dev": true }, "util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", "dev": true, "requires": { "inherits": "2.0.3" @@ -5467,19 +5690,16 @@ "dev": true }, "v8-compile-cache": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz", - "integrity": "sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz", + "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==", "dev": true }, "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true, - "requires": { - "indexof": "0.0.1" - } + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true }, "watchpack": { "version": "1.6.0", @@ -5493,187 +5713,133 @@ } }, "webpack": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.19.0.tgz", - "integrity": "sha512-Ak3mMGtA8F1ar4ZP6VCLiICNIPoillROGYstnEd+LzI5Tkvz0qTITeTMcAFjxyYsaxu98F97yrCWdcxRUMPAYw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/helper-module-context": "1.7.6", - "@webassemblyjs/wasm-edit": "1.7.6", - "@webassemblyjs/wasm-parser": "1.7.6", - "acorn": "^5.6.2", - "acorn-dynamic-import": "^3.0.0", - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0", - "chrome-trace-event": "^1.0.0", + "version": "4.41.5", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.5.tgz", + "integrity": "sha512-wp0Co4vpyumnp3KlkmpM5LWuzvZYayDwM2n17EHFr4qxBBbRokC7DJawPJC7TfSFZ9HZ6GsdH40EBj4UV0nmpw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/wasm-edit": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "acorn": "^6.2.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.0", + "eslint-scope": "^4.0.3", "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.3.0", - "loader-utils": "^1.1.0", - "memory-fs": "~0.4.1", - "micromatch": "^3.1.8", - "mkdirp": "~0.5.0", - "neo-async": "^2.5.0", - "node-libs-browser": "^2.0.0", - "schema-utils": "^0.4.4", - "tapable": "^1.1.0", - "uglifyjs-webpack-plugin": "^1.2.4", - "watchpack": "^1.5.0", - "webpack-sources": "^1.2.0" + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.6.0", + "webpack-sources": "^1.4.1" }, "dependencies": { - "cacache": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", - "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "ajv": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz", + "integrity": "sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==", "dev": true, "requires": { - "bluebird": "^3.5.1", - "chownr": "^1.0.1", - "glob": "^7.1.2", - "graceful-fs": "^4.1.11", - "lru-cache": "^4.1.1", - "mississippi": "^2.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", - "ssri": "^5.2.4", - "unique-filename": "^1.1.0", - "y18n": "^4.0.0" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - } + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", + "ajv-keywords": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", "dev": true }, - "mississippi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", - "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^2.0.1", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" + "minimist": "^1.2.0" } }, - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" } }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, - "ssri": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", - "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.1" - } + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true }, - "uglify-es": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", - "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dev": true, "requires": { - "commander": "~2.13.0", + "source-list-map": "^2.0.0", "source-map": "~0.6.1" } - }, - "uglifyjs-webpack-plugin": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz", - "integrity": "sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==", - "dev": true, - "requires": { - "cacache": "^10.0.4", - "find-cache-dir": "^1.0.0", - "schema-utils": "^0.4.5", - "serialize-javascript": "^1.4.0", - "source-map": "^0.6.1", - "uglify-es": "^3.3.4", - "webpack-sources": "^1.1.0", - "worker-farm": "^1.5.2" - }, - "dependencies": { - "serialize-javascript": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz", - "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==", - "dev": true - } - } } } }, "webpack-cli": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.0.tgz", - "integrity": "sha512-t1M7G4z5FhHKJ92WRKwZ1rtvi7rHc0NZoZRbSkol0YKl4HvcC8+DsmGDmK7MmZxHSAetHagiOsjOB6MmzC2TUw==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.0", - "findup-sync": "^2.0.0", - "global-modules": "^1.0.0", - "import-local": "^2.0.0", - "interpret": "^1.1.0", - "loader-utils": "^1.1.0", - "supports-color": "^5.5.0", - "v8-compile-cache": "^2.0.2", - "yargs": "^12.0.5" + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.10.tgz", + "integrity": "sha512-u1dgND9+MXaEt74sJR4PR7qkPxXUSQ0RXYq8x1L6Jg1MYVEmGPrH6Ah6C4arD4r0J1P5HKjRqpab36k0eIzPqg==", + "dev": true, + "requires": { + "chalk": "2.4.2", + "cross-spawn": "6.0.5", + "enhanced-resolve": "4.1.0", + "findup-sync": "3.0.0", + "global-modules": "2.0.0", + "import-local": "2.0.0", + "interpret": "1.2.0", + "loader-utils": "1.2.3", + "supports-color": "6.1.0", + "v8-compile-cache": "2.0.3", + "yargs": "13.2.4" }, "dependencies": { "ansi-styles": { @@ -5685,6 +5851,12 @@ "color-convert": "^1.9.0" } }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -5694,33 +5866,61 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", "dev": true, "requires": { "detect-file": "^1.0.0", - "is-glob": "^3.1.0", + "is-glob": "^4.0.0", "micromatch": "^3.0.4", "resolve-dir": "^1.0.1" } }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { - "is-extglob": "^2.1.0" + "minimist": "^1.2.0" } }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -5729,9 +5929,9 @@ } }, "webpack-sources": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", - "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dev": true, "requires": { "source-list-map": "^2.0.0", @@ -5767,42 +5967,47 @@ "integrity": "sha1-gbDpXoZQ5JyUsiKY//hoa1VTz2w=" }, "worker-farm": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", - "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", "dev": true, "requires": { "errno": "~0.1.7" } }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" }, "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "color-convert": "^1.9.0" } }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "ansi-regex": "^4.1.0" } } } @@ -5831,29 +6036,28 @@ "dev": true }, "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", + "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", "dev": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", + "cliui": "^5.0.0", "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^3.0.0", "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" + "y18n": "^4.0.0", + "yargs-parser": "^13.1.0" }, "dependencies": { "find-up": { @@ -5876,9 +6080,9 @@ } }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -5902,9 +6106,9 @@ } }, "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", "dev": true, "requires": { "camelcase": "^5.0.0", diff --git a/package.json b/package.json index 2a3f9c0e9..05734582f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mathjax-full", - "version": "3.0.0", + "version": "3.0.1", "description": "Beautiful math in all browsers. MathJax is an open-source JavaScript display engine for LaTeX, MathML, and AsciiMath notation that works in all browsers. This package includes the source code as well as the packaged components.", "license": "Apache-2.0", "main": "components/src/node-main/node-main.js", @@ -54,11 +54,11 @@ "tslint": "^3.15.0", "tslint-jsdoc-rules": "*", "tslint-unix-formatter": "*", - "typescript": "^3.5.2", + "typescript": "~3.5.2", "typescript-tools": "^0.3.1", - "uglifyjs-webpack-plugin": "^2.1.2", - "webpack": "4.19.0", - "webpack-cli": "^3.2.3" + "uglifyjs-webpack-plugin": "^2.2.0", + "webpack": "^4.41.5", + "webpack-cli": "^3.3.10" }, "dependencies": { "esm": "^3.2.25", From 208c699ef26be815521dce57fc2ae48089a0afae Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Wed, 5 Feb 2020 09:51:53 -0500 Subject: [PATCH 092/103] Update version number --- ts/components/global.ts | 2 +- ts/mathjax.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ts/components/global.ts b/ts/components/global.ts index 6a3f945a0..78ebaa10c 100644 --- a/ts/components/global.ts +++ b/ts/components/global.ts @@ -114,7 +114,7 @@ if (typeof global.MathJax === 'undefined') { */ if (!(global.MathJax as MathJaxObject).version) { global.MathJax = { - version: '3.0.0', + version: '3.0.1', _: {}, config: global.MathJax }; diff --git a/ts/mathjax.ts b/ts/mathjax.ts index a28441304..fec814797 100644 --- a/ts/mathjax.ts +++ b/ts/mathjax.ts @@ -34,7 +34,7 @@ export const mathjax = { /** * The MathJax version number */ - version: '3.0.0', + version: '3.0.1', /** * The list of registers document handlers From 4c58725edfb3dd30c4482e95380b5cea62274690 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Wed, 5 Feb 2020 10:35:34 -0500 Subject: [PATCH 093/103] Fix reference to npm package, and remove unwanted U+2028 characters --- CONTRIBUTING.md | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a99930bb7..7153d85d6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -121,7 +121,8 @@ do you expect to happen instead? Feature requests are welcome. Before you submit one, be sure to have: -1. **Used the GitHub search** to check that the feature hasn't already
 been requested. +1. **Used the GitHub search** to check that the feature hasn't already + been requested. 2. Take a moment to think about whether your idea fits with the scope and aims of the project, or if it might better fit being a [custom extension](https://github.com/mathjax/MathJax-third-party-extensions). @@ -146,7 +147,14 @@ a refactor, or an improvement to a feature, etc., please be sure to: ## Working on MathJax core -You want to contribute code? We describe how below. First, note that the MathJax source code is in the repository, not the repository, which contains the packaged component files for distribution on CDNs and the [mathjax npm package](https://www.npmjs.com/package/mathjax) (the source code is included in the [mathjax-full npm package](https://www.npmjs.com/package/mathjax-src)). +You want to contribute code? We describe how below. First, note that +the MathJax source code is in the + repository, not the + repository, which contains the +packaged component files for distribution on CDNs and the [mathjax npm +package](https://www.npmjs.com/package/mathjax) (the source code is +included in the [mathjax-full npm +package](https://www.npmjs.com/package/mathjax-full)). ### Key Branches & Tags @@ -155,7 +163,7 @@ MathJax uses several permanent branches in the [MathJax source repository](https - **[develop](https://github.com/mathjax/MathJax-src/tree/develop)** is the development branch. All work on the next release happens here so you should generally branch off `develop` if you are going to - submit
 a pull request. Do **NOT** use this branch for a production + submit a pull request. Do **NOT** use this branch for a production site. - **[master](https://github.com/mathjax/MathJax-src)** contains the latest @@ -163,19 +171,19 @@ MathJax uses several permanent branches in the [MathJax source repository](https **NOT** use this branch to work on MathJax's source. These branches reflect version 3 of MathJax, which is substantially -different
from the version 2 codebase. Version 2 will continue to be -maintained while web
sites transition to version 3, with work being -done using the following branches 
in the [MathJax distribution +different from the version 2 codebase. Version 2 will continue to be +maintained while web sites transition to version 3, with work being +done using the following branches in the [MathJax distribution repository](https://github.com/mathjax/MathJax): -- **[legacy-v2-develop](https://github.com/mathjax/MathJax/tree/legacy-v2-develop)**
 +- **[legacy-v2-develop](https://github.com/mathjax/MathJax/tree/legacy-v2-develop)** is the development branch for changes to the legacy version 2 code. - Any
 pull requests for version 2 should be branched from here. Do - **NOT** use
 this branch for a production site. + Any pull requests for version 2 should be branched from here. Do + **NOT** use this branch for a production site. - **[legacy-v2](https://github.com/mathjax/MathJax/tree/legacy-v2)** - is the
 branch that contains any updates to version 2 following - the release of
 version 3. Do **NOT** use this branch to work on + is the branch that contains any updates to version 2 following + the release of version 3. Do **NOT** use this branch to work on MathJax's source. In addition to these branches, MathJax uses tags to identify the From 1b0a70e64c7d44965db3e6c49fd2a95bdbeefbf2 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Wed, 5 Feb 2020 11:15:48 -0500 Subject: [PATCH 094/103] Add version badges to README --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index a910c4681..23d6e7c58 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ # MathJax (Source Repository) +GitHub release version +GitHub release version (branch) ## Beautiful math in all browsers From d7d03220bc3d61877da87749505f0a190f7c84ee Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Wed, 5 Feb 2020 11:16:56 -0500 Subject: [PATCH 095/103] Reposition badges --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 23d6e7c58..5f600820c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,5 @@ # MathJax (Source Repository) -GitHub release version -GitHub release version (branch) +GitHub release version GitHub release version (branch) ## Beautiful math in all browsers From 60c5d44716c1f72625c85beae5ffa46ad5a1ca8c Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Wed, 5 Feb 2020 12:05:03 -0500 Subject: [PATCH 096/103] Update package version number and SRE version --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index bfef284fb..2185184fd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "mathjax-full", - "version": "3.0.0", + "version": "3.0.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -4858,9 +4858,9 @@ "dev": true }, "speech-rule-engine": { - "version": "3.0.0-beta.6", - "resolved": "https://registry.npmjs.org/speech-rule-engine/-/speech-rule-engine-3.0.0-beta.6.tgz", - "integrity": "sha512-B7gcT53jAsKpx7WvFYQcyUlFmgS3Wa9KlDy0FY8SOTa+Wz5EqmI0MpCD5/fYm8/2qiCPp8HwZg+H3cBgM+sNVw==", + "version": "3.0.0-beta.8", + "resolved": "https://registry.npmjs.org/speech-rule-engine/-/speech-rule-engine-3.0.0-beta.8.tgz", + "integrity": "sha512-gnNap93Xrz5ngIqa/BOaJGatC64B7dqDrXK/pr4yAaZAcW6tKVO5PwaTvw9QqVab86ad5scpA39Nxwhlb11tTg==", "requires": { "commander": "*", "wicked-good-xpath": "*", diff --git a/package.json b/package.json index 05734582f..4929d08e7 100644 --- a/package.json +++ b/package.json @@ -63,6 +63,6 @@ "dependencies": { "esm": "^3.2.25", "mj-context-menu": "^0.2.0", - "speech-rule-engine": "^3.0.0-beta.6" + "speech-rule-engine": "^3.0.0-beta.8" } } From 744737dbfd2dab06008aa750f133a8a2f75d954e Mon Sep 17 00:00:00 2001 From: zorkow Date: Wed, 5 Feb 2020 19:52:11 +0000 Subject: [PATCH 097/103] Fixes capitalisation on amsCd components file. --- components/src/input/tex/extensions/ams_cd/{amscd.js => amsCd.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename components/src/input/tex/extensions/ams_cd/{amscd.js => amsCd.js} (100%) diff --git a/components/src/input/tex/extensions/ams_cd/amscd.js b/components/src/input/tex/extensions/ams_cd/amsCd.js similarity index 100% rename from components/src/input/tex/extensions/ams_cd/amscd.js rename to components/src/input/tex/extensions/ams_cd/amsCd.js From ed7f053ad2fb4ef9fc724790d1b5f3252fdcbcc2 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Thu, 6 Feb 2020 08:32:37 -0500 Subject: [PATCH 098/103] Allow enrichment to occur in IE11 --- ts/a11y/semantic-enrich.ts | 25 +++++++++++++++++++++++-- ts/a11y/sre.ts | 2 +- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/ts/a11y/semantic-enrich.ts b/ts/a11y/semantic-enrich.ts index 692679335..23ca06129 100644 --- a/ts/a11y/semantic-enrich.ts +++ b/ts/a11y/semantic-enrich.ts @@ -106,6 +106,28 @@ export function EnrichedMathItemMixin Date: Thu, 6 Feb 2020 11:32:52 -0500 Subject: [PATCH 099/103] Update mj-context-menu version to 0.2.1 to resolve IE problems --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2185184fd..6907696c4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3764,9 +3764,9 @@ } }, "mj-context-menu": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/mj-context-menu/-/mj-context-menu-0.2.0.tgz", - "integrity": "sha512-yJxrWBHCjFZEHsZgfs7m5g9OSCNzsVYadW6f6lX3pgZL67vmodtSW/4zhsYmuDKweXfHs0M1kJge1uQIasWA+g==" + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/mj-context-menu/-/mj-context-menu-0.2.1.tgz", + "integrity": "sha512-rR5WBcP+Vfx66JUpakW7BWiQlzw10qcPgsZUioQSMeTCtzb2hTAErmvDwHZPwzVYRh1LhDTIBXRhMzAndxd7UA==" }, "mkdirp": { "version": "0.5.1", diff --git a/package.json b/package.json index 4929d08e7..c8ce6fd8f 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ }, "dependencies": { "esm": "^3.2.25", - "mj-context-menu": "^0.2.0", + "mj-context-menu": "^0.2.1", "speech-rule-engine": "^3.0.0-beta.8" } } From db06dd47365d38ed51f7426dbed50caac1f20a13 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Fri, 7 Feb 2020 08:59:38 -0500 Subject: [PATCH 100/103] Update mj-context-menu to 0.2.2 (non-emtpy dist folder) --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6907696c4..6085789c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3764,9 +3764,9 @@ } }, "mj-context-menu": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/mj-context-menu/-/mj-context-menu-0.2.1.tgz", - "integrity": "sha512-rR5WBcP+Vfx66JUpakW7BWiQlzw10qcPgsZUioQSMeTCtzb2hTAErmvDwHZPwzVYRh1LhDTIBXRhMzAndxd7UA==" + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/mj-context-menu/-/mj-context-menu-0.2.2.tgz", + "integrity": "sha512-OHlnKQqfFPEYZGdz2JWL0obrr82vVilha0WCUZslYfN+v+oz4VpmERnoHdTUWvOUVHNYjFkpOYnLEeHnt1BdsQ==" }, "mkdirp": { "version": "0.5.1", diff --git a/package.json b/package.json index c8ce6fd8f..998af05bd 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ }, "dependencies": { "esm": "^3.2.25", - "mj-context-menu": "^0.2.1", + "mj-context-menu": "^0.2.2", "speech-rule-engine": "^3.0.0-beta.8" } } From b3e7583ad84301db25df513207a0259e526b07f0 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Fri, 7 Feb 2020 09:40:58 -0500 Subject: [PATCH 101/103] Change legacy-v2 sheild label --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5f600820c..f042a3e10 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # MathJax (Source Repository) -GitHub release version GitHub release version (branch) +GitHub release version GitHub release version (branch) ## Beautiful math in all browsers From 0c73745a10aac508483c3486fcb1eac2f65659b8 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Fri, 7 Feb 2020 12:01:30 -0500 Subject: [PATCH 102/103] Update README install instructions --- README.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index f042a3e10..96f9b8d45 100644 --- a/README.md +++ b/README.md @@ -66,12 +66,13 @@ Repository](https://github.com/mathjax/MathJax-demos-web) for more information. ### Using MathJax Components in node applications -To use MathJax components in a node application, install the `mathjax` -package: +To use MathJax components in a node application, install the `mathjax` package: - npm install mathjax + npm install mathjax@3 -and require `mathjax` within your application: +(we are still making updates to version 2, so you should include `@3` since the latest chronological version may not be version 3). + +Then require `mathjax` within your application: require('mathjax').init({ ... }).then((MathJax) => { ... }); @@ -121,8 +122,8 @@ If you want to work from the GitHub repository directly, then do the following: git clone https://github.com/mathjax/MathJax-src.git mathjax-src cd mathjax-src - npm run compile - npm run make-components + npm run --silent compile + npm run --silent make-components in order to compile the JavaScript files from the TypeScript source, and build the component files from the JavaScript files. From 0eb170588b8bd6bca3b0a5692e8118b4aa6cb105 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Fri, 7 Feb 2020 12:06:52 -0500 Subject: [PATCH 103/103] Add numfocus shield --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 96f9b8d45..beade86f7 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # MathJax (Source Repository) GitHub release version GitHub release version (branch) +powered-by NumFocus ## Beautiful math in all browsers