pax_global_header00006660000000000000000000000064142501552100014505gustar00rootroot0000000000000052 comment=ad8f5c21cb810236551da8c6512ba733e67357ee MathJax-src-3.2.2/000077500000000000000000000000001425015521000136325ustar00rootroot00000000000000MathJax-src-3.2.2/.github/000077500000000000000000000000001425015521000151725ustar00rootroot00000000000000MathJax-src-3.2.2/.github/FUNDING.yml000066400000000000000000000001071425015521000170050ustar00rootroot00000000000000github: [numfocus] custom: ['https://numfocus.org/donate-to-mathjax'] MathJax-src-3.2.2/.github/ISSUE_TEMPLATE/000077500000000000000000000000001425015521000173555ustar00rootroot00000000000000MathJax-src-3.2.2/.github/ISSUE_TEMPLATE/bug_report.md000066400000000000000000000010351425015521000220460ustar00rootroot00000000000000--- name: Bug report about: Create a report to help us improve MathJax title: '' labels: '' assignees: '' --- Please submit MathJax bug reports to https://github.com/mathjax/MathJax/issues unless they are about structural issues in this repository (e.g., the package.json file, the compilation process, the repository layout, etc). Bugs with how MathJax works should be reported at the link above. If you are not part of the MathJax team, it is unlikely that you should be posting an issue here. Use the tracker linked above instead. MathJax-src-3.2.2/.github/ISSUE_TEMPLATE/feature_request.md000066400000000000000000000010261425015521000231010ustar00rootroot00000000000000--- name: Feature request about: Suggest an idea for MathJax title: '' labels: '' assignees: '' --- Please submit MathJax feature requests at https://github.com/mathjax/MathJax/issues unless they are about structural issues in this repository (e.g., the package.json file, the compilation process, the repository layout, etc). New features for MathJax should be requested at the link above. If you are not part of the MathJax team, it is unlikely that you should be posting an issue here. Use the tracker linked above instead. MathJax-src-3.2.2/.github/ISSUE_TEMPLATE/mathjax-source-problem.md000066400000000000000000000012571425015521000242740ustar00rootroot00000000000000--- name: MathJax Source Problem about: Suggest improvements to the source respository title: '' labels: '' assignees: '' --- This issue tracker is for problems with the source code repository (e.g., its structure, package file, compilation process, organization, etc.), not for problems with the MathJax code itself. If you are reporting a bug in how MathJax works, please use the [MathJax issue tracker](https://github.com/mathjax/MathJax/issues), rather than this one, so that all the issues are in one place for easier searching and sorting. If you are not part of the MathJax team, it is unlikely that you should be posting an issue here. Use the tracker linked above instead. MathJax-src-3.2.2/.gitignore000066400000000000000000000000551425015521000156220ustar00rootroot00000000000000*~ node_modules components/src/**/lib js es5 MathJax-src-3.2.2/.travis.yml000066400000000000000000000017411425015521000157460ustar00rootroot00000000000000dist: focal language: node_js node_js: - stable sudo: false script: - components/bin/version - npm install - npm run compile - npm run make-components branches: only: - "/^\\d+\\.\\d+/" deploy: provider: npm email: manager@mathjax.org api_key: secure: iiJYaydsd6nypSMgjvQiTYIy+YF/oil5fqfVLmMkAQtykAqE5oS/HcJ6QxQa8DKHQCmNNhmUqMnD7H5jVhXGcbhEcx7dNxr7pXkrY2Vkyj8voYFIfZ05rwfaojQQPlPdrkwiLmAcUnz1v9gP20M6uVJrhVpBSe4bfHxSHbSUBjlRu4md8fXyA9cLJ3hu/QHV2ahjRDHL+axklCH8YFMW2bN7IRYALUaFeN6gZFWQvq6A4gT1zaFo0yTsej5z+PmyvDHYGzI1KfUioNa81KMWvSMIkRooJes2JrDFdo4HYXgYhZ/wb+7FLOJGeLLQejfQiVw+MS+7R+C6Ss/TcxddeBGg+x9+pZY4AvnVjuWfYW7WSh+iMZ1ujFE3xhqjVUI6WpowSfLK2lguY/8AZ1hKuWxnWw/UwCGcy6qOG0HMyE05mkl+VvPMITckkkeM/an4k7PeR+DY9L25Imp0jmpCyfk72KXMAEgVLAjnsy+l0EnZWK7oeYzDwEaw8HdOCmKKraRYFSetbqC+25g1iKc8ylTs1IxN7HXo0e0dTGSxwtU14L26GMHrC2pVsDdeR7+b5ll0C/6kevK794eQpzSEM50Addb1+fUJ3bn1y22H7OaglnJYxfuP44AYTENOn3fDJrIgcVG/yp273MImSYZiXL+xQBK8ZPEG5z36sH5/iAI= on: tags: true skip_cleanup: true MathJax-src-3.2.2/CONTRIBUTING.md000066400000000000000000000331741425015521000160730ustar00rootroot00000000000000# Contributing to MathJax You are interested in giving us a hand? That's awesome! We've put together some brief guidelines that should help you get started quickly and easily. There are lots and lots of ways to get involved, this document covers: * [reporting an issue](#reporting-an-issue) * [bug reports](#bug-reports) * [feature requests](#feature-requests) * [change requests](#change-requests) * [working on MathJax core](#working-on-mathjax-core) * [key branches and tags](#key-branches--tags) * [submitting pull requests](#submitting-pull-requests) * [testing and quality assurance](#testing-and-quality-assurance) * [writing documentation](#writing-documentation) * [translation](#translation) * [Conduct](#conduct) ## Reporting An Issue If you're about to raise an issue because you think you've found a problem with MathJax, or you'd like to make a request for a new feature in the codebase, or any other reason, please read this first. The [MathJax issue tracker](https://github.com/mathjax/MathJax/issues) is the preferred channel for [bug reports](#bug-reports), [feature requests](#feature-requests), [change requests](#change-requests), and [submitting pull requests](#submitting-pull-requests), but please respect the following restrictions: * Please **search for existing issues**. Help us keep duplicate issues to a minimum by checking to see if someone has already reported your problem or requested your idea. * Please **do not** use the issue tracker for personal support requests (use [the MathJax User Group](https://groups.google.com/forum/#!forum/mathjax-users)). * Please **be civil**. Keep the discussion on topic and respect the opinions of others. See also our [Conduct Guidelines](#conduct) ### Bug Reports A bug is a *demonstrable problem* that is caused by the code in the repository. Good bug reports are extremely helpful — thank you! Guidelines for bug reports: 1. **Use the GitHub issue search** — check if the issue has already been reported. 2. **Check if the issue has been fixed** — look for [closed issues in the current milestone](https://github.com/mathjax/MathJax/issues?q=is%3Aclosed) or try to reproduce it using the latest `develop` branch. Please note that you will need to [compile MathJax and make the components](https://docs.mathjax.org/en/latest/web/hosting.html#getting-mathjax-via-git) in order to test MathJax from the source repository. 3. **Share a live sample of the problem** — without a live page it is usually impossible to debug problems; see also the [Bug Report Template](#template) below. 4. **Isolate the problem** — a live sample is a starting point but if you want to speed things up, create a [reduced test case](https://css-tricks.com/reduced-test-cases/). Be specific about your setup (browser, OS versions, etc). Use services like [jsbin](http://jsbin.com), [CodePen](http://codepen.io), or [jsFiddle](http://jsfiddle.com) to make collaboration on minimal test cases easier for everyone. 5. **Include a screenshot/cast as a last resort** — Is your issue about a layout or design feature or bug that is hard to reproduce or isolate? Then please provide a screenshot or screencast. Tools like [LICEcap](http://www.cockos.com/licecap/) or [SauceLabs](http://www.saucelabs.com) allow you to quickly and easily record a screencasts. If you make it an animated gif, you can embed it directly into your GitHub issue. 6. Use the [Bug Report Template](#template) below or [click this link](https://github.com/MathJax/MathJax/issues/new?title=Bug%3A&body=%23%23%23%20Issue%20Summary%0A%0A%23%23%23%20Steps%20to%20Reproduce%0A%0A1.%20This%20is%20the%20first%20step%0A%0AThis%20is%20a%20bug%20because...%0A%0A%23%23%23%20Technical%20details%0A%0A*%20MathJax%20Version%3A%20master%20-%20latest%20commit%3A%20%20INSERT%20COMMIT%20REF%0A*%20Client%20OS%3A%20%0A*%20Browser%3A%20%0A*%20) to start creating a bug report with the template automatically. A good bug report shouldn't leave others needing to request more information from you. Be sure to include the details of your environment. Template Example ([click to use](https://github.com/MathJax/MathJax/issues/new?title=Bug%3A&body=%23%23%23%20Issue%20Summary%0A%0A%23%23%23%20Steps%20to%20Reproduce%0A%0A1.%20This%20is%20the%20first%20step%0A%0AThis%20is%20a%20bug%20because...%0A%0A%23%23%23%20Technical%20details%0A%0A*%20MathJax%20Version%3A%20master%20-%20latest%20commit%3A%20%20INSERT%20COMMIT%20REF%0A*%20Client%20OS%3A%20%0A*%20Browser%3A%20%0A*%20)): ``` Short and descriptive example bug report title ### Issue Summary A summary of the issue and the browser/OS environment in which it occurs. If suitable, include the steps required to reproduce the bug. ### Steps to Reproduce 1. This is the first step 2. This is the second step 3. Further steps, etc. Any other information you want to share that is relevant to the issue being reported. Especially, why do you consider this to be a bug? What do you expect to happen instead? ### Technical details: * MathJax Version: 2.3 (latest commit: f3aaf3a2a3e964df2770dc4aaaa9c87ce5f47e2c) * Client OS: Mac OS X 10.8.4 * Browser: Chrome 29.0.1547.57 ``` ### Feature Requests 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. 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). 3. Remember, it's up to *you* to make a strong case to convince the project's leaders of the merits of this feature. Please provide as much detail and context as possible, this means explaining the use case and why it is likely to be common. ### Change Requests Change requests cover both architectural and functional changes to how MathJax works. If you have an idea for a new or different dependency, a refactor, or an improvement to a feature, etc., please be sure to: 1. **Use the GitHub search** to check that someone else didn't get there first. 2. Take a moment to think about the best way to make a case for, and explain what you're thinking. Are you sure this shouldn't really be a [bug report](#bug-reports) or a [feature request](#feature-requests)? Is it really one idea or is it many? What's the context? What problem are you solving? Why is what you are suggesting better than what's already there? ## 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-full)). ### Key Branches & Tags MathJax uses several permanent branches in the [MathJax source repository](https://github.com/mathjax/MathJax-src): - **[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 site. - **[master](https://github.com/mathjax/MathJax-src)** contains the latest release of MathJax. This branch may be used in production. Do **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 repository](https://github.com/mathjax/MathJax): - **[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. - **[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 MathJax's source. In addition to these branches, MathJax uses tags to identify the various versions. These can be checked out to obtain the specified release; for example, `git checkout 2.7.5` would get you the files for version 2.7.5 of MathJax. Note that version 3 is written in Typescript, and so must be compiled to obtain usable javascript files, and that the components need to be built once that is done. See the [documentation](https://docs.mathjax.org/en/latest/web/hosting.html#getting-mathjax-via-git) for details. For version 2, the source javascript files are not compressed until a release is made, so you should use the copies in the `unpacked` directory during development. ### Submitting Pull Requests Pull requests are welcome. If you're looking to submit a PR for something that doesn't have an open issue, please consider [raising an issue](#reporting-an-issue) that your PR can close, especially if you're fixing a bug. This makes it more likely that there will be enough information available for your PR to be properly tested and merged. ##### Need Help? If you're not completely clear on how to submit/update/*do* Pull Requests, please check out our [source control policies](https://github.com/mathjax/MathJax/wiki/Source-control-policies). For more insights, check the excellent in depth [Git Workflow guide](https://github.com/TryGhost/Ghost/wiki/Git-Workflow) from Ghost, in particular * [Ghost Workflow guide: commit messages](https://github.com/TryGhost/Ghost/wiki/Git-workflow#commit-messages) ### Testing and Quality Assurance If you're looking to get involved with the code base and don't know where to start, checking out and testing a pull request is one of the most useful things you could do. These are some [excellent instructions](https://gist.github.com/piscisaureus/3342247) on configuring your GitHub repository to allow you to checkout pull requests in the same way as branches. ### Writing documentation MathJax's main documentation can be found at [docs.mathjax.org](http://docs.mathjax.org). The source of the docs is hosted in the [mathjax/MathJax-docs](http://github.com/mathjax/MathJax-docs) repo here on GitHub. The documentation is generated using [Sphinx-doc](http://sphinx-doc.org/) and hosted on [Read the docs](http://readthedocs.org). You can clone the repo and submit pull requests following the [pull-request](#submitting-pull-requests) guidelines. ### Translation If you wish to add or update translations of MathJax, please do it on [TranslateWiki.net](https://translatewiki.net/w/i.php?title=Special:Translate&group=out-mathjax-0-all) (and while you're there you can help other open source projects, too). For bug reports and other questions that don't fit on TranslateWiki.net, head over to the [mathjax/mathjax-i18n](https://github.com/mathjax/MathJax-i18n) repository. The translation files currently are for version 2, as localization hasn't been added to version 3 yet. ## Conduct As a NumFOCUS fiscally sponsored project, MathJax is governed by the [NumFOCUS code of conduct](https://numfocus.org/code-of-conduct), which we summarize as follows: We are committed to providing a friendly, safe and welcoming environment for all, regardless of gender, sexual orientation, disability, ethnicity, religion, or similar personal characteristic. Please be kind and courteous. There's no need to be mean or rude. Respect that people have differences of opinion and that every design or implementation choice carries a trade-off and numerous costs. There is seldom a right answer, merely an optimal answer given a set of values and circumstances. Please keep unstructured critique to a minimum. If you have solid ideas you want to experiment with, make a fork and see how it works. We will exclude you from interaction if you insult, demean or harass anyone. That is not welcome behaviour. We interpret the term "harassment" as including the definition in the [Unacceptable Behavior](https://numfocus.org/code-of-conduct#unacceptable-behavior) section of the [NumFOCUS code of conduct](https://numfocus.org/code-of-conduct); if you have any lack of clarity about what might be included in that concept, please read that definition. In particular, we don't tolerate behavior that excludes people in socially marginalized groups. Private harassment is also unacceptable. No matter who you are, if you feel you have been or are being harassed or made uncomfortable by a community member, please contact one of the channel ops or any of the [MathJax](https://github.com/MathJax/MathJax) core team immediately. Whether you're a regular contributor or a newcomer, we care about making this community a safe place for you and we've got your back. Likewise any spamming, trolling, flaming, baiting, or other attention-stealing behaviour is not welcome. We also recommend that you read [discourse's rules](http://blog.discourse.org/2013/03/the-universal-rules-of-civilized-discourse/) for further suggestions on appropriate behavior. ## References * We heavily borrowed from Mozilla and Ghost -- thank you! * * * * MathJax-src-3.2.2/LICENSE000066400000000000000000000261361425015521000146470ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] 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. MathJax-src-3.2.2/README.md000066400000000000000000000166511425015521000151220ustar00rootroot00000000000000# MathJax (Source Repository) ![GitHub release version](https://img.shields.io/github/v/release/mathjax/MathJax-src.svg?sort=semver) ![GitHub release version (v2)](https://img.shields.io/github/package-json/v/mathjax/MathJax/legacy-v2.svg?label=release-v2) ![NPM version](https://img.shields.io/npm/v/mathjax.svg?style=flat) ![powered by NumFOCUS](https://img.shields.io/badge/powered%20by-NumFOCUS-orange.svg?style=flat) ![jsdelivr rank](https://flat.badgen.net/jsdelivr/rank/npm/mathjax?color=green) ![jsDelivr hits (npm)](https://img.shields.io/jsdelivr/npm/hm/mathjax) ![npm monthly downloads (full)](https://img.shields.io/npm/dm/mathjax?label=npm) ![npm monthly downloads (full)](https://img.shields.io/npm/dm/mathjax-full?label=npm%20%28full%29) ![npm total downloads](https://img.shields.io/npm/dt/mathjax.svg?style=flat&label=npm%20total) ![npm total downloads](https://img.shields.io/npm/dt/mathjax-full.svg?style=flat&label=npm%20total%20%28full%29) ## Beautiful math in all browsers MathJax is an open-source JavaScript display engine for LaTeX, MathML, and AsciiMath notation that works in all modern browsers. It was designed with the goal of consolidating the recent advances in web technologies into a single, definitive, math-on-the-web platform supporting the major browsers and operating systems. It requires no setup on the part of the user (no plugins to download or software to install), so the page author can write web documents that include mathematics and be confident that users will be able to view it naturally and easily. Simply include MathJax and some mathematics in a web page, and MathJax does the rest. Some of the main features of MathJax include: - High-quality display of LaTeX, MathML, and AsciiMath notation in HTML pages - Supported in most browsers with no plug-ins, extra fonts, or special setup for the reader - Easy for authors, flexible for publishers, extensible for developers - Supports math accessibility, cut-and-paste interoperability, and other advanced functionality - Powerful API for integration with other web applications See for additional details about MathJax, and for the MathJax documentation. ## What's in this Repository This repository contains the source files for MathJax, which are written in TypeScript. These are compiled into JavaScript files and then combined into component files for use on the web. The component files are available from several [CDN services that host MathJax](https://docs.mathjax.org/en/latest/web/start.html#using-mathjax-from-a-content-delivery-network-cdn), and also from the [MathJax Component Repository](https://github.com/mathjax/MathJax). Node applications can use either the component files, or call the MathJax JavaScript files directly. ## Installation and Use ### Using MathJax in web browsers If you are loading MathJax from a CDN into a web page, there is no need to install anything. Simply use a `script` tag that loads MathJax from the CDN. E.g., ``` html ``` See the [MathJax documentation](https://docs.mathjax.org/en/latest/index.html#browser-components), the [MathJax Web Demos](https://github.com/mathjax/MathJax-demos-web), and the [MathJax Component 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: ``` bash npm install mathjax@3 ``` (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: ``` javascript require('mathjax').init({ ... }).then((MathJax) => { ... }); ``` where the first `{ ... }` is a MathJax configuration, and the second `{ ... }` is the code to run after MathJax has been loaded. E.g. ``` javascript require('mathjax').init({ loader: {load: ['input/tex', 'output/svg']} }).then((MathJax) => { const svg = MathJax.tex2svg('\\frac{1}{x^2-1}', {display: true}); console.log(MathJax.startup.adaptor.outerHTML(svg)); }).catch((err) => console.log(err.message)); ``` **Note:** this technique is for node-based applications only, not for browser applications. This method sets up an alternative DOM implementation, which you don't need in the browser, and tells MathJax to use node's `require()` command to load external modules. This setup will not work properly in the browser, even if you webpack it or bundle it in other ways. See the [documentation](https://docs.mathjax.org/en/latest/index.html#server-nodejs) and the [MathJax Node Repository](https://github.com/mathjax/MathJax-demos-node) for more details. ### Using MathJax modules directly in node applications You can use the MathJax JavaScript files (as opposed to MathJax components) directly in node applications. This gives you the greatest flexibility, but requires more coding. To use this approach, install the `mathjax-full` package: npm install mathjax-full This will provide the following directories: node_modules/ mathjax-full/ ts/ the MathJax source TypeScript files js/ the compiled JavaScript files components/ the component build tools and control files es5/ the packages component files You can use the components and JavaScript files directly in your node applications (see the [MathJax node demos](https://github.com/mathjax/MathJax-demos-node) for examples). If you want to work from the GitHub repository directly, then do the following: ``` bash git clone https://github.com/mathjax/MathJax-src.git mathjax-src cd mathjax-src 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. ## Code Contributions If you are interested in contributing code to MathJax, please see the [documentation for contributors](CONTRIBUTING.md) for details on how to do this, and for the policies for making pull requests. In particular, please be careful that you are working from the proper branch in the git repository, or you may be asked to rebase your changes when you make a pull request. ## MathJax Community The main MathJax website is , and it includes announcements and other important information. A [MathJax user forum](http://groups.google.com/group/mathjax-users) for asking questions and getting assistance is hosted at Google, and the [MathJax bug tracker](https://github.com/mathjax/MathJax/issues) is hosted at GitHub. Before reporting a bug, please check that it has not already been reported. Also, please use the bug tracker (rather than the help forum) for reporting bugs, and use the user's forum (rather than the bug tracker) for questions about how to use MathJax. ## MathJax Resources * [MathJax Documentation](https://docs.mathjax.org) * [MathJax Components](https://github.com/mathjax/MathJax) * [MathJax Source Code](https://github.com/mathjax/MathJax-src) * [MathJax Web Examples](https://github.com/mathjax/MathJax-demos-web) * [MathJax Node Examples](https://github.com/mathjax/MathJax-demos-node) * [MathJax Bug Tracker](https://github.com/mathjax/MathJax/issues) * [MathJax Users' Group](http://groups.google.com/group/mathjax-users) MathJax-src-3.2.2/components/000077500000000000000000000000001425015521000160175ustar00rootroot00000000000000MathJax-src-3.2.2/components/bin/000077500000000000000000000000001425015521000165675ustar00rootroot00000000000000MathJax-src-3.2.2/components/bin/build000077500000000000000000000300511425015521000176130ustar00rootroot00000000000000#! /usr/bin/env node /************************************************************* * * Copyright (c) 2018 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 Builds the lib directory for a component * * @author dpvc@mathjax.org (Davide Cervone) */ const fs = require('fs'); const path = require('path'); /** * The amount of space for each level of indentation */ const INDENT = ' '; /** * The pattern to use when looking for explort commands to process */ const EXPORTPATTERN = /(^export(?:\s+default)?(?:\s+abstract)?\s+[^ {*}]+\s+[a-zA-Z0-9_.$]+)/m; const EXPORT_IGNORE = ['type', 'interface']; const EXPORT_PROCESS = ['let', 'const', 'var', 'function', 'class', 'namespace']; /** * The relative path to the MathJax directory */ const mjPath = path.relative(process.cwd(), path.resolve(__dirname, '..', '..', 'js')); const mjGlobal = path.join('..', mjPath, 'components', 'global.js'); /** * Read the configuration for the component */ const config = JSON.parse(fs.readFileSync(process.argv[2] || 'build.json')); function getType() { const component = config.component || 'part'; if (component.match(/\/(svg|chtml|common)\/fonts\//)) return RegExp.$1 + '-font'; if (component.match(/\/(mathml|tex)\/.+\//)) return RegExp.$1 + '-extension'; if (component.match(/^(.+)\//)) return RegExp.$1; return component; } /** * Extract the configuration values */ const COMPONENT = path.basename(config.component || 'part'); // name of the component const ID = config.id || config.component || 'part'; // the ID of the component const TARGETS = config.targets || []; // the files to include in the component const EXCLUDE = new Map((config.exclude || []).map(name => [name, true])); // files to exclude from the component const EXCLUDESUBDIRS = config.excludeSubdirs === 'true'; // exclude subdirectories or not const JS = config.js || config.mathjax || mjPath; // path to the compiled .js files const LIB = config.lib || './lib'; // path to the lib directory to create const TS = config.ts || JS.replace(/js$/, 'ts'); // path to the .ts files const GLOBAL = config.global || mjGlobal; // path to the global.js file const VERSION = config.version || mjGlobal.replace(/global/, 'version'); // path to the version.js file const TYPE = config.type || getType(); // the module type /** * The list of files that need to be added to the lib directory */ let PACKAGE = []; /** * Process an array of files/directories to be included in the component * * @param {string} base The root directory for the .ts files * @param {string} dir The relative path within the root for the files to process * @param {string[]} list An array of file/directory names to process * @param {boolean} top True if this is the initial list of files */ function processList(base, dir, list, top = true) { for (const item of list) { const file = path.join(dir, item); if (!EXCLUDE.has(file)) { const stat = fs.statSync(path.resolve(base, file)); if (stat.isDirectory()) { if (top || !EXCLUDESUBDIRS) { processDir(base, file); } } else if (file.match(/\.ts$/)) { processFile(base, file); } } } } /** * Process the contents of the directory * * @param {string} base The root directory for the .ts files * @param {string} dir The relative path within the root for the directory to process */ function processDir(base, dir) { const root = path.resolve(base, dir); processList(base, dir, fs.readdirSync(root), false); } /** * Process the contents of a .ts file * * Look for export commands within the file, and determine the objects * that they reference, then produce the library file that defines * them, and add the file to the package list. * * @param {string} base The root directory for the .ts files * @param {string} name The path of the file relative to the base */ function processFile(base, name) { console.info(' ' + name); const file = fs.readFileSync(path.resolve(base, name)).toString(); const parts = file.split(EXPORTPATTERN); const objects = processParts(parts); const lines = processLines(name, objects); makeFile(name, lines); if (objects.length) { PACKAGE.push(name); } } /** * Process the export lines to record the ones that need to be added to the * library file. * * @param {string[]} parts The file broken into export lines and the text between them * @return {string[]} An array of names of exported objects */ function processParts(parts) { const objects = []; for (let i = 1; i < parts.length; i += 2) { const words = parts[i].split(/\s+/); const type = words[words.length - 2]; const name = words[words.length - 1]; if (words[1] === 'default' || type === 'default') { objects.push('default'); } else if (EXPORT_PROCESS.indexOf(type) >= 0) { objects.push(name); } else if (EXPORT_IGNORE.indexOf(type) < 0) { console.info(" Can't process '" + parts[i] + "'"); } } return objects; } /** * Create the lines of the lib file using the object names from the file. * * @param {string} name The path of the file relative to the root .ts directory * @param {string[]} objects Array of names of the object exported by the file * @return {string[]} Array of lines for the contents of the library file */ function processLines(file, objects) { if (objects.length === 0) return []; const dir = path.dirname(file).replace(/^\.$/, ''); const dots = dir.replace(/[^\/]+/g, '..') || '.'; const relative = path.join(dots, '..', JS, dir, path.basename(file)).replace(/\.ts$/, '.js'); const name = path.parse(file).name; const lines = [ '"use strict";', `Object.defineProperty(exports, '__esModule', {value: true});` ]; let source = ((dir.replace(/\//g, '.') + '.' + name).replace(/^\./, '') + (exists(path.resolve(JS, file.replace(/\.ts$/, ''))) ? '_ts' : '')) .replace(/\.[^.]*/g, (x) => (x.substr(1).match(/[^a-zA-Z_]/) ? '[\'' + x.substr(1) + '\']' : x)); for (const id of objects) { lines.push(`exports.${id} = MathJax._.${source}.${id};`); } return lines; } /** * @param {string} file Path to a file * @return {boolean} True if the file exists, false if not */ function exists(file) { if (!fs.existsSync(file)) return false; // // For case-insensitive file systems (like Mac OS), // check that the file names match exactly // const [dir, name] = [path.dirname(file), path.basename(file)]; return fs.readdirSync(dir).indexOf(name) >= 0; } /** * Recursively make any needed directories * * @param {string} dir The directory relative to the library directory */ function makeDir(dir) { const fulldir = path.resolve(LIB, dir); if (fs.existsSync(fulldir)) return; makeDir(path.dirname(fulldir)); fs.mkdirSync(fulldir); } /** * Make a file in the library directory from the given lines of javascript * * @param {string} file The name of the file relative to the root .ts directory * @param {string[]} lines The contents of the file to create */ function makeFile(file, lines) { if (!lines.length) return; const [dir, name] = [path.dirname(file), path.basename(file)]; makeDir(dir); fs.writeFileSync(path.resolve(LIB, dir, name.replace(/\.ts$/, '.js')), lines.join('\n') + '\n'); } /** * Make the library file that adds all the exported objects into the MathJax global object */ function processGlobal() { console.info(' ' + COMPONENT + '.ts'); const lines = [ `import {combineWithMathJax} from '${GLOBAL}';`, `import {VERSION} from '${VERSION}';`, '', ]; const packages = []; PACKAGE = PACKAGE.sort(sortDir); while (PACKAGE.length) { const dir = path.dirname(PACKAGE[0]).split(path.sep)[0]; packages.push(processPackage(lines, INDENT, dir)); } const name = (ID.match(/[^a-zA-Z0-9_]/) ? `"${ID}"` : ID); lines.push( '', 'if (MathJax.loader) {', INDENT + `MathJax.loader.checkVersion('${ID}', VERSION, '${TYPE}');`, '}', '', `combineWithMathJax({_: {`, INDENT + packages.join(',\n' + INDENT), '}});' ); fs.writeFileSync(path.join(LIB, COMPONENT + '.js'), lines.join('\n') + '\n'); } /** * Sort file paths alphabetically */ function sortDir(a, b) { const A = a.replace(/\//g, '|'); // Replace directory separator by one that is after the alphnumerics const B = b.replace(/\//g, '|'); return (A === B ? 0 : A < B ? -1 : 1); } let importCount = 0; /** * Recursively process packages, collecting them into groups by subdirectory, properly indented * * @param {string[]} lines The array where lines of code defining the packages are to be stored * @param {string} space The current level of indentation * @param {string} dir The subdirectory currently being processed * @return {string} The string to use to load all the objects from the given directory */ function processPackage(lines, space, dir) { const packages = []; // // Loop through the lines that are in the current directory // while (PACKAGE.length && (PACKAGE[0].substr(0, dir.length) === dir || dir === '.')) { // // If the current package is in this directory (not a subdirectory) // Get the location of transpiled mathjax file // Get the name to use for the data from that file // Create an entry for the file in the MathJax global that loads the reuired component // Otherwise (its in a subdirectory) // Get the subdirectory name // Process the subdirectory using an additional indentation // if (path.dirname(PACKAGE[0]) === dir) { const file = PACKAGE.shift(); const name = path.basename(file); const relativefile = path.join('..', JS, dir, name).replace(/\.ts$/, '.js'); const component = 'module' + (++importCount); lines.push(`import * as ${component} from '${relativefile}';`); let property = name.replace(/\.ts$/, ''); if (property !== name && exists(path.resolve(JS, file.replace(/\.ts$/, '')))) { property += '_ts'; } if (property.match(/[^a-zA-Z0-9_]/)) { property = `"${property}"`; } packages.push(`${property}: ${component}`); } else { let subdir = path.dirname(PACKAGE[0]); while (path.dirname(subdir) !== dir && subdir !== '.') { subdir = path.dirname(subdir); } packages.push(processPackage(lines, space + (dir === '.' ? '' : INDENT), subdir)); } } // // Create the string defining the object that loads all the needed files into the proper places // if (dir === '.') return packages.join(',\n '); return path.basename(dir) + ': {\n' + INDENT + space + packages.join(',\n' + INDENT + space) + '\n' + space + '}'; } /** * @param {string} dir The path to the directory tree to be removed (recursively) */ function rmDir(dir) { if (!dir) return; if (fs.existsSync(dir)) { for (const name of fs.readdirSync(dir)) { const file = path.join(dir, name); if (fs.lstatSync(file).isDirectory()) { rmDir(file); } else { fs.unlinkSync(file); } } fs.rmdirSync(dir); } } // // Remove the existing lib directory contents, if any. // Load all the target files from the MathJax .ts directory. // Create the file that loads all the target objects into the MathJax global object. // rmDir(LIB); console.info("Processing:"); processList(TS, '', TARGETS); processGlobal(); MathJax-src-3.2.2/components/bin/copy000077500000000000000000000045311425015521000174720ustar00rootroot00000000000000#! /usr/bin/env node /************************************************************* * * Copyright (c) 2018 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 Copies specified files to the distribution directory * * @author dpvc@mathjax.org (Davide Cervone) */ const fs = require('fs'); const path = require('path'); /** * The amount of space for each level of indentation */ const INDENT = ' '; /** * The configuration data for the copy operation */ const config = JSON.parse(fs.readFileSync(process.argv[2] || 'copy.json')); /** * Get the directory for node modules (either the parent of the MathJax directory, * or the MathJax node_modules directory, if it exists). */ const parent = path.resolve(__dirname, '..', '..'); const nodeDir = (dir => (fs.existsSync(dir) ? dir : path.resolve(parent, '..')))(path.join(parent, 'node_modules')); /** * Copy a file or directory tree * * @param {string} from The directory to copy from * @param {string} to The directory to copy to * @param {string} name The name of the file or directory to copy * @param {string} space The indentation for output */ function copyFile(from, to, name, space) { !fs.existsSync(to) && fs.mkdirSync(to, {recursive: true}); const copy = path.resolve(from, name); const dest = path.resolve(to, name); if (fs.lstatSync(copy).isDirectory()) { console.info(space + name + '/'); for (const file of fs.readdirSync(copy)) { copyFile(copy, dest, file, space + INDENT); } } else { console.info(space + name); fs.copyFileSync(copy, dest); } } /** * Copy the given files */ const wd = process.cwd(); const to = path.resolve(wd, config.to); const from = path.resolve(wd, config.from.replace(/\[node\]/, nodeDir)); for (const name of config.copy) { copyFile(from, to, name, ''); } MathJax-src-3.2.2/components/bin/makeAll000077500000000000000000000106151425015521000200660ustar00rootroot00000000000000#! /usr/bin/env node /************************************************************* * * Copyright (c) 2018 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 Processes all the build and webpack files in a directory * or collection of directories * * @author dpvc@mathjax.org (Davide Cervone) */ const fs = require('fs'); const path = require('path'); const {execSync} = require('child_process'); const options = { recursive: true }; /** * Get the directories to process and check for options */ const dirs = process.argv.slice(2); if (dirs[0] === '--no-subdirs') { dirs.shift(); options.recursive = false; } if (dirs.length === 0) { dirs.push('.'); } /** * The commads to runb the bin/build scripts * (on Unix, could be done without the 'node ' prefix, but * for Windows, these are needed.) */ const build = `node '${path.join(__dirname, 'build')}'`; const copy = `node '${path.join(__dirname, 'copy')}'`; const pack = `node '${path.join(__dirname, 'pack')}'`; /** * Regular expression for the components directory */ const compRE = new RegExp(path.dirname(__dirname).replace(/([\\.{}[\]()?*^$])/g, '\\$1')); const dirRE = new RegExp(process.cwd().replace(/([\\.{}[\]()?*^$])/g, '\\$1')); /** * Process the contents of an array of directories * * @param {string} dirs The directories to process */ function processList(dirs) { for (const dir of dirs) { const fulldir = path.resolve(dir); processDir(fulldir, buildLib); processDir(fulldir, webpackLib); processDir(fulldir, copyLib); } } /** * Run an action (build or webpack) on a directory and its subdirectories * * @param {string} dir The directory to process * @param {Function} action The action to take */ function processDir(dir, action) { action(dir); if (options.recursive) { processSubdirs(dir, action); } } /** * Look for subdirectories and process them * * @param {string} dir The directory whose subdirectories are to be processed * @param {Function} action The action to take */ function processSubdirs(dir, action) { for (const name of fs.readdirSync(dir)) { const file = path.join(dir, name); if (fs.lstatSync(file).isDirectory()) { processDir(file, action); } } } /** * Run bin/build if there is a configuration file for it * * @param {string} dir The directory to check */ function buildLib(dir) { const file = path.join(dir, 'build.json'); if (!fs.existsSync(file)) return; console.info('Building ' + dir.replace(compRE, '').replace(dirRE, '.')); const wd = process.cwd(); try { process.chdir(dir); const result = execSync(build); console.info(' ' + String(result).replace(/\n/g, '\n ')); } catch (err) { console.info(' ' + err.message); } process.chdir(wd); } /** * Run webpack if there is a configuration file for it * * @param {string} dir The directory to check */ function webpackLib(dir) { const file = path.join(dir, 'webpack.config.js'); if (!fs.existsSync(file)) return; console.info('Webpacking ' + dir.replace(compRE, '').replace(dirRE, '.')); const wd = process.cwd(); try { process.chdir(dir); const result = execSync(pack); console.info(' ' + String(result).replace(/\n/g, '\n ')); } catch (err) { console.info(' ' + err.message); } process.chdir(wd); } /** * Copy the designated files if there is a configurtion file for it * * @param {string} dir The directory to check */ function copyLib(dir) { const file = path.join(dir, 'copy.json'); if (!fs.existsSync(file)) return; console.info('Copying ' + dir.replace(compRE, '')); try { process.chdir(dir); const result = execSync(copy); console.info(' ' + String(result).replace(/\n/g, '\n ')); } catch (err) { console.info(' ' + err.message); } } /** * Process all the specified directories */ processList(dirs); MathJax-src-3.2.2/components/bin/pack000077500000000000000000000076201425015521000174400ustar00rootroot00000000000000#! /usr/bin/env node /************************************************************* * * Copyright (c) 2018 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 webpack the component in the current directory * * @author dpvc@mathjax.org (Davide Cervone) */ const fs = require('fs'); const path = require('path'); const {spawn} = require('child_process'); /** * @param {string} name The file name to turn into a Regular expression * @return {RegExp} The regular expression for the name, */ function fileRegExp(name) { return new RegExp(name.replace(/([\\.{}[\]()?*^$])/g, '\\$1'), 'g'); } /** * @param {Object} The file or asset data whose size is to be returned * @return {string} The string giving the size in KB */ function fileSize(file) { return ' (' + (file.size / 1024).toFixed(2).replace(/\.?0+$/, '') + ' KB)'; } /** * Regular expressions for the components directory and the MathJax .js location */ const compRE = fileRegExp(path.dirname(__dirname)); const rootRE = fileRegExp(path.join(path.dirname(path.dirname(__dirname)), 'js')); const nodeRE = fileRegExp(path.join(path.dirname(path.dirname(__dirname)), 'node_modules')); /** * @return {JSON} The parsed JSON from webpack */ async function readJSON() { return new Promise((ok, fail) => { const buffer = []; const child = spawn('npx', ['webpack', '--json']); child.stdout.on('data', (data) => buffer.push(String(data))); child.stdout.on('close', (code) => { const json = JSON.parse(buffer.join('')); if (json.errors && json.errors.length) { fail(json.errors[0].message); } ok(json); }); }); } /** * Run webpack if there is a configuration file for it * * @param {string} dir The directory to pack */ async function webpackLib(dir) { try { process.chdir(dir); const dirRE = fileRegExp(path.resolve(dir)); // // Get js directory from the webpack.config.js file // const jsdir = require(path.resolve(dir, 'webpack.config.js')).plugins[0].definitions.__JSDIR__; const jsRE = fileRegExp(jsdir); const libRE = fileRegExp(path.resolve(jsdir, '..', 'components')); // // Get the json from webpack and print the asset name and size // const json = await readJSON(); for (const asset of json.assets) { console.log(asset.name + fileSize(asset)); } // // Sort the modules and print their names and sizes // const modules = json.modules; for (const module of modules) { module.name = path.resolve(dir, module.name) .replace(/ \+ \d+ modules/, '') .replace(dirRE, '.'); } const list = []; for (const module of modules) { if (module.moduleType.match(/javascript/)) { let name = module.name .replace(compRE, '[components]') .replace(rootRE, '[mathjax]') .replace(nodeRE, '[node]') .replace(jsRE, '[js]') .replace(libRE, '[lib]'); if (name.charAt(0) !== '.' && name.charAt(0) !== '[') { name = path.relative(dir, name); } list.push(' ' + name + fileSize(module)); } } console.log( list .filter(a => a.slice(2, 4) === './').sort() .concat(list.filter(a => a.slice(2, 4) !== './').sort()) .join('\n') ); } catch (err) { console.error(err); } } webpackLib(process.argv[2] || '.'); MathJax-src-3.2.2/components/bin/version000077500000000000000000000037511425015521000202100ustar00rootroot00000000000000#! /usr/bin/env node /************************************************************* * * Copyright (c) 2022 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 Creates the version.ts file from the package version number * * @author dpvc@mathjax.org (Davide Cervone) */ const fs = require('fs'); const path = require('path'); const package = path.resolve(__dirname, '..', '..', 'package.json'); const version = require(package).version; const lines = `/************************************************************* * * Copyright (c) 2022 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 The version of MathJax (used to tell what version a component * was compiled against). * * @author dpvc@mathjax.org (Davide Cervone) */ export const VERSION = '${version}'; `; fs.writeFileSync(path.resolve(__dirname, '..', '..', 'ts', 'components', 'version.ts'), lines); MathJax-src-3.2.2/components/src/000077500000000000000000000000001425015521000166065ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/a11y/000077500000000000000000000000001425015521000173615ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/a11y/assistive-mml/000077500000000000000000000000001425015521000221565ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/a11y/assistive-mml/assistive-mml.js000066400000000000000000000003201425015521000253040ustar00rootroot00000000000000import './lib/assistive-mml.js'; import {AssistiveMmlHandler} from '../../../../js/a11y/assistive-mml.js'; if (MathJax.startup) { MathJax.startup.extendHandler(handler => AssistiveMmlHandler(handler)); } MathJax-src-3.2.2/components/src/a11y/assistive-mml/build.json000066400000000000000000000001211425015521000241420ustar00rootroot00000000000000{ "component": "a11y/assistive-mml", "targets": ["a11y/assistive-mml.ts"] } MathJax-src-3.2.2/components/src/a11y/assistive-mml/webpack.config.js000066400000000000000000000006321425015521000253750ustar00rootroot00000000000000const 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 ); MathJax-src-3.2.2/components/src/a11y/complexity/000077500000000000000000000000001425015521000215565ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/a11y/complexity/build.json000066400000000000000000000002101425015521000235410ustar00rootroot00000000000000{ "component": "a11y/complexity", "targets": [ "a11y/complexity.ts", "a11y/complexity", "a11y/semantic-enrich.ts" ] } MathJax-src-3.2.2/components/src/a11y/complexity/complexity.js000066400000000000000000000005421425015521000243120ustar00rootroot00000000000000import './lib/complexity.js'; import {combineDefaults} from '../../../../js/components/global.js'; import {ComplexityHandler} from '../../../../js/a11y/complexity.js'; if (MathJax.startup) { MathJax.startup.extendHandler(handler => ComplexityHandler(handler)); combineDefaults(MathJax.config, 'options', MathJax.config['a11y/complexity'] || {}); } MathJax-src-3.2.2/components/src/a11y/complexity/webpack.config.js000066400000000000000000000007111425015521000247730ustar00rootroot00000000000000const PACKAGE = require('../../../webpack.common.js'); module.exports = PACKAGE( 'a11y/complexity', // the package to build '../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/a11y/semantic-enrich/lib', 'components/src/input/mml/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/a11y/explorer/000077500000000000000000000000001425015521000212215ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/a11y/explorer/build.json000066400000000000000000000001271425015521000232130ustar00rootroot00000000000000{ "component": "a11y/explorer", "targets": ["a11y/explorer.ts", "a11y/explorer"] } MathJax-src-3.2.2/components/src/a11y/explorer/explorer.js000066400000000000000000000004031425015521000234140ustar00rootroot00000000000000import './lib/explorer.js'; import {combineDefaults} from '../../../../js/components/global.js'; import {ExplorerHandler} from '../../../../js/a11y/explorer.js'; if (MathJax.startup) { MathJax.startup.extendHandler(handler => ExplorerHandler(handler)); } MathJax-src-3.2.2/components/src/a11y/explorer/webpack.config.js000066400000000000000000000010161425015521000244350ustar00rootroot00000000000000const PACKAGE = require('../../../webpack.common.js'); module.exports = PACKAGE( 'a11y/explorer', // the package to build '../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/ui/menu/lib', 'components/src/a11y/semantic-enrich/lib', 'components/src/a11y/sre/lib', 'components/src/input/mml/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/a11y/semantic-enrich/000077500000000000000000000000001425015521000224325ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/a11y/semantic-enrich/build.json000066400000000000000000000001251425015521000244220ustar00rootroot00000000000000{ "component": "a11y/semantic-enrich", "targets": ["a11y/semantic-enrich.ts"] } MathJax-src-3.2.2/components/src/a11y/semantic-enrich/semantic-enrich.js000066400000000000000000000007771425015521000260540ustar00rootroot00000000000000import './lib/semantic-enrich.js'; import {combineDefaults} from '../../../../js/components/global.js'; import Sre from '../../../../js/a11y/sre.js'; import {EnrichHandler} from '../../../../js/a11y/semantic-enrich.js'; import {MathML} from '../../../../js/input/mathml.js'; if (MathJax.loader) { combineDefaults(MathJax.config.loader, 'a11y/semantic-enrich', {checkReady: () => Sre.sreReady()}); } if (MathJax.startup) { MathJax.startup.extendHandler(handler => EnrichHandler(handler, new MathML())); } MathJax-src-3.2.2/components/src/a11y/semantic-enrich/webpack.config.js000066400000000000000000000006751425015521000256600ustar00rootroot00000000000000const PACKAGE = require('../../../webpack.common.js'); module.exports = PACKAGE( 'a11y/semantic-enrich', // the package to build '../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/mml/lib', 'components/src/core/lib', 'components/src/a11y/sre/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/a11y/sre/000077500000000000000000000000001425015521000201525ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/a11y/sre/build.json000066400000000000000000000000751425015521000221460ustar00rootroot00000000000000{ "component": "a11y/sre", "targets": ["a11y/sre.ts"] } MathJax-src-3.2.2/components/src/a11y/sre/sre.js000066400000000000000000000003531425015521000213020ustar00rootroot00000000000000import './lib/sre.js'; import './sre_config.js'; import Sre from '../../../../js/a11y/sre.js'; if (MathJax.startup) { ((typeof window !== 'undefined') ? window : global). SREfeature.custom = (loc) => Sre.preloadLocales(loc); } MathJax-src-3.2.2/components/src/a11y/sre/sre_config.js000066400000000000000000000011321425015521000226230ustar00rootroot00000000000000import {combineDefaults} from '../../../../js/components/global.js'; import {Package} from '../../../../js/components/package.js'; // This sets up the correct link to the mathmaps files. if (MathJax.startup) { let path = Package.resolvePath('[sre]', false); if (typeof window !== 'undefined') { window.SREfeature = {json: path}; } else { // In Node get the absolute path to the mathmaps directory. try { path = MathJax.config.loader.require.resolve( path + '/base.json').replace(/\/base\.json$/, ''); } catch(_err) { } global.SREfeature = {json: path}; } } MathJax-src-3.2.2/components/src/a11y/sre/webpack.config.js000066400000000000000000000006741425015521000233770ustar00rootroot00000000000000const PACKAGE = require('../../../webpack.common.js'); module.exports = PACKAGE( 'a11y/sre', // the package to build '../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/mml/lib', 'components/src/core/lib', 'components/src/startup/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/adaptors/000077500000000000000000000000001425015521000204235ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/adaptors/liteDOM/000077500000000000000000000000001425015521000217205ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/adaptors/liteDOM/build.json000066400000000000000000000001421425015521000237070ustar00rootroot00000000000000{ "component": "adaptors/liteDOM", "targets": ["adaptors/liteAdaptor.ts", "adaptors/lite"] } MathJax-src-3.2.2/components/src/adaptors/liteDOM/liteDOM.js000066400000000000000000000003601425015521000235520ustar00rootroot00000000000000import './lib/liteDOM.js'; import {liteAdaptor} from '../../../../js/adaptors/liteAdaptor.js'; if (MathJax.startup) { MathJax.startup.registerConstructor('liteAdaptor', liteAdaptor); MathJax.startup.useAdaptor('liteAdaptor', true); } MathJax-src-3.2.2/components/src/adaptors/liteDOM/webpack.config.js000066400000000000000000000005231425015521000251360ustar00rootroot00000000000000const PACKAGE = require('../../../webpack.common.js'); module.exports = PACKAGE( 'adaptors/liteDOM', // the package to build '../../../../js', // location of the MathJax js library ['components/src/core/lib'], // packages to link to __dirname // our directory ); MathJax-src-3.2.2/components/src/core/000077500000000000000000000000001425015521000175365ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/core/build.json000066400000000000000000000005631425015521000215340ustar00rootroot00000000000000{ "component": "core", "targets": [ "mathjax.ts", "core", "util", "handlers", "adaptors/HTMLAdaptor.ts", "adaptors/browserAdaptor.ts", "components/global.ts" ], "exclude": [ "core/MmlTree/JsonMmlVisitor.ts", "core/MmlTree/LegacyMmlVisitor.ts", "core/MmlTree/TestMmlVisitor.ts", "util/asyncLoad", "util/entities" ] } MathJax-src-3.2.2/components/src/core/core.js000066400000000000000000000010161425015521000210220ustar00rootroot00000000000000import './lib/core.js'; import {HTMLHandler} from '../../../js/handlers/html/HTMLHandler.js'; import {browserAdaptor} from '../../../js/adaptors/browserAdaptor.js'; if (MathJax.startup) { MathJax.startup.registerConstructor('HTMLHandler', HTMLHandler); MathJax.startup.registerConstructor('browserAdaptor', browserAdaptor); MathJax.startup.useHandler('HTMLHandler'); MathJax.startup.useAdaptor('browserAdaptor'); } if (MathJax.loader) { MathJax._.mathjax.mathjax.asyncLoad = (name => MathJax.loader.load(name)); } MathJax-src-3.2.2/components/src/core/webpack.config.js000066400000000000000000000005201425015521000227510ustar00rootroot00000000000000const PACKAGE = require('../../webpack.common.js'); module.exports = PACKAGE( 'core', // the package to build '../../../js', // location of the MathJax js library [], // packages to link to __dirname // our directory ); MathJax-src-3.2.2/components/src/dependencies.js000066400000000000000000000065561425015521000216060ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2019-2021 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. */ export const dependencies = { 'a11y/semantic-enrich': ['input/mml', 'a11y/sre'], 'a11y/complexity': ['a11y/semantic-enrich'], 'a11y/explorer': ['a11y/semantic-enrich', 'ui/menu'], '[mml]/mml3': ['input/mml'], '[tex]/all-packages': ['input/tex-base'], '[tex]/action': ['input/tex-base', '[tex]/newcommand'], '[tex]/autoload': ['input/tex-base', '[tex]/require'], '[tex]/ams': ['input/tex-base'], '[tex]/amscd': ['input/tex-base'], '[tex]/bbox': ['input/tex-base', '[tex]/ams', '[tex]/newcommand'], '[tex]/boldsymbol': ['input/tex-base'], '[tex]/braket': ['input/tex-base'], '[tex]/bussproofs': ['input/tex-base'], '[tex]/cancel': ['input/tex-base', '[tex]/enclose'], '[tex]/centernot': ['input/tex-base'], '[tex]/color': ['input/tex-base'], '[tex]/colorv2': ['input/tex-base'], '[tex]/colortbl': ['input/tex-base', '[tex]/color'], '[tex]/configmacros': ['input/tex-base', '[tex]/newcommand'], '[tex]/enclose': ['input/tex-base'], '[tex]/extpfeil': ['input/tex-base', '[tex]/newcommand', '[tex]/ams'], '[tex]/html': ['input/tex-base'], '[tex]/mathtools': ['input/tex-base', '[tex]/newcommand', '[tex]/ams'], '[tex]/mhchem': ['input/tex-base', '[tex]/ams'], '[tex]/newcommand': ['input/tex-base'], '[tex]/noerrors': ['input/tex-base'], '[tex]/noundefined': ['input/tex-base'], '[tex]/physics': ['input/tex-base'], '[tex]/require': ['input/tex-base'], '[tex]/setoptions': ['input/tex-base'], '[tex]/tagformat': ['input/tex-base'], '[tex]/textcomp': ['input/tex-base', '[tex]/textmacros'], '[tex]/textmacros': ['input/tex-base'], '[tex]/unicode': ['input/tex-base'], '[tex]/verb': ['input/tex-base'], '[tex]/cases': ['[tex]/empheq'], '[tex]/empheq': ['input/tex-base', '[tex]/ams'] }; export const paths = { tex: '[mathjax]/input/tex/extensions', mml: '[mathjax]/input/mml/extensions', sre: '[mathjax]/sre/mathmaps' }; const allPackages = Array.from(Object.keys(dependencies)) .filter(name => name.substr(0,5) === '[tex]' && name !== '[tex]/autoload' && name !== '[tex]/colorv2' && name !== '[tex]/all-packages'); export const provides = { 'startup': ['loader'], 'input/tex': [ 'input/tex-base', '[tex]/ams', '[tex]/newcommand', '[tex]/noundefined', '[tex]/require', '[tex]/autoload', '[tex]/configmacros' ], 'input/tex-full': [ 'input/tex-base', '[tex]/all-packages', ...allPackages ], '[tex]/all-packages': allPackages }; // // Compatibility with v3.0 names for TeX extensions // export const compatibility = { '[tex]/amsCd': '[tex]/amscd', '[tex]/colorV2': '[tex]/colorv2', '[tex]/configMacros': '[tex]/configmacros', '[tex]/tagFormat': '[tex]/tagformat' }; MathJax-src-3.2.2/components/src/input/000077500000000000000000000000001425015521000177455ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/asciimath/000077500000000000000000000000001425015521000217075ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/asciimath/asciimath.js000066400000000000000000000003351425015521000242100ustar00rootroot00000000000000import './lib/asciimath.js'; import {AsciiMath} from '../../../../js/input/asciimath.js'; if (MathJax.startup) { MathJax.startup.registerConstructor('asciimath', AsciiMath); MathJax.startup.useInput('asciimath'); } MathJax-src-3.2.2/components/src/input/asciimath/build.json000066400000000000000000000001711425015521000237000ustar00rootroot00000000000000{ "component": "input/asciimath", "targets": ["input/asciimath.ts", "input/asciimath"], "excludeSubdirs": "true" } MathJax-src-3.2.2/components/src/input/asciimath/webpack.config.js000066400000000000000000000005231425015521000251250ustar00rootroot00000000000000const PACKAGE = require('../../../webpack.common.js'); module.exports = PACKAGE( 'input/asciimath', // the package to build '../../../../js', // location of the MathJax js library ['components/src/core/lib'], // packages to link to __dirname // our directory ); MathJax-src-3.2.2/components/src/input/mml/000077500000000000000000000000001425015521000205325ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/mml/build.json000066400000000000000000000001711425015521000225230ustar00rootroot00000000000000{ "component": "input/mml", "targets": [ "input/mathml.ts", "input/mathml" ], "excludeSubdirs": "true" } MathJax-src-3.2.2/components/src/input/mml/entities/000077500000000000000000000000001425015521000223565ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/mml/entities/entities.js000066400000000000000000000000621425015521000245360ustar00rootroot00000000000000import '../../../../../js/util/entities/all.js'; MathJax-src-3.2.2/components/src/input/mml/entities/webpack.config.js000066400000000000000000000005261425015521000255770ustar00rootroot00000000000000const PACKAGE = require('../../../../webpack.common.js'); module.exports = PACKAGE( 'input/mml/entities', // the package to build '../../../../../js', // location of the MathJax js library ['components/src/core/lib'], // packages to link to __dirname // our directory ); MathJax-src-3.2.2/components/src/input/mml/extensions/000077500000000000000000000000001425015521000227315ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/mml/extensions/mml3/000077500000000000000000000000001425015521000236015ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/mml/extensions/mml3/build.json000066400000000000000000000001511425015521000255700ustar00rootroot00000000000000{ "id": "[mml]/mml3", "component": "input/mml/extensions/mml3", "targets": ["input/mathml/mml3"] } MathJax-src-3.2.2/components/src/input/mml/extensions/mml3/copy.json000066400000000000000000000002221425015521000254420ustar00rootroot00000000000000{ "to": "../../../../../../es5/input/mml/extensions", "from": "../../../../../../ts/input/mathml/mml3", "copy": [ "mml3.sef.json" ] } MathJax-src-3.2.2/components/src/input/mml/extensions/mml3/mml3.js000066400000000000000000000003011425015521000250010ustar00rootroot00000000000000import './lib/mml3.js'; import {Mml3Handler} from '../../../../../../js/input/mathml/mml3/mml3.js'; if (MathJax.startup) { MathJax.startup.extendHandler(handler => Mml3Handler(handler)); } MathJax-src-3.2.2/components/src/input/mml/extensions/mml3/webpack.config.js000066400000000000000000000006401425015521000270170ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/mml/extensions/mml3', // 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 ); MathJax-src-3.2.2/components/src/input/mml/mml.js000066400000000000000000000010321425015521000216510ustar00rootroot00000000000000import './lib/mml.js'; import {MathML} from '../../../../js/input/mathml.js'; if (MathJax.startup) { MathJax.startup.registerConstructor('mml', MathML); MathJax.startup.useInput('mml'); } if (MathJax.loader) { // // Install a path-filter to cause loading of an entity file to load all entities, // since the individual files don't have individual components. // MathJax.loader.pathFilters.add((data) => { data.name = data.name.replace(/\/util\/entities\/.*?\.js/, '/input/mml/entities.js'); return true; }); } MathJax-src-3.2.2/components/src/input/mml/webpack.config.js000066400000000000000000000005231425015521000237500ustar00rootroot00000000000000const PACKAGE = require('../../../webpack.common.js'); module.exports = PACKAGE( 'input/mml', // the package to build '../../../../js', // location of the MathJax js library ['components/src/core/lib'], // packages to link to __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex-base/000077500000000000000000000000001425015521000214555ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex-base/build.json000066400000000000000000000002711425015521000234470ustar00rootroot00000000000000{ "component": "input/tex-base", "targets": [ "input/tex.ts", "input/tex", "input/tex/base" ], "exclude": ["input/tex/AllPackages.ts"], "excludeSubdirs": "true" } MathJax-src-3.2.2/components/src/input/tex-base/tex-base.js000066400000000000000000000001461425015521000235240ustar00rootroot00000000000000import './lib/tex-base.js'; import {registerTeX} from '../tex/register.js'; registerTeX(['base']); MathJax-src-3.2.2/components/src/input/tex-base/webpack.config.js000066400000000000000000000005231425015521000246730ustar00rootroot00000000000000const PACKAGE = require('../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex-base', // the package to build '../../../../js', // location of the MathJax js library ['components/src/core/lib'], // packages to link to __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex-full/000077500000000000000000000000001425015521000215055ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex-full/build.json000066400000000000000000000001351425015521000234760ustar00rootroot00000000000000{ "component": "input/tex-full", "targets": [ "input/tex.ts", "input/tex" ] } MathJax-src-3.2.2/components/src/input/tex-full/tex-full.js000066400000000000000000000003741425015521000236070ustar00rootroot00000000000000import './lib/tex-full.js'; import '../tex/extensions/all-packages/all-packages.js'; import {registerTeX} from '../tex/register.js'; if (MathJax.loader) { MathJax.loader.preLoad( 'input/tex-base', '[tex]/all-packages' ); } registerTeX(); MathJax-src-3.2.2/components/src/input/tex-full/webpack.config.js000066400000000000000000000006301425015521000247220ustar00rootroot00000000000000const PACKAGE = require('../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex-full', // the package to build '../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/startup/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/000077500000000000000000000000001425015521000205455ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/build.json000066400000000000000000000005231425015521000225370ustar00rootroot00000000000000{ "component": "input/tex", "targets": [ "input/tex.ts", "input/tex", "input/tex/base", "input/tex/ams", "input/tex/newcommand", "input/tex/noundefined", "input/tex/require", "input/tex/autoload", "input/tex/configmacros" ], "exclude": ["input/tex/AllPackages.ts"], "excludeSubdirs": "true" } MathJax-src-3.2.2/components/src/input/tex/extensions/000077500000000000000000000000001425015521000227445ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/action/000077500000000000000000000000001425015521000242215ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/action/action.js000066400000000000000000000000321425015521000260270ustar00rootroot00000000000000import './lib/action.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/action/build.json000066400000000000000000000001541425015521000262130ustar00rootroot00000000000000{ "id": "[tex]/action", "component": "input/tex/extensions/action", "targets": ["input/tex/action"] } MathJax-src-3.2.2/components/src/input/tex/extensions/action/webpack.config.js000066400000000000000000000006451425015521000274440ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/action', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex-base/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/all-packages/000077500000000000000000000000001425015521000252705ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/all-packages/all-packages.js000066400000000000000000000006671425015521000301630ustar00rootroot00000000000000import './lib/all-packages.js'; import {AllPackages} from '../../../../../../js/input/tex/AllPackages.js'; import '../../../../../../js/input/tex/autoload/AutoloadConfiguration.js'; import '../../../../../../js/input/tex/require/RequireConfiguration.js'; import {registerTeX} from '../../register.js'; if (MathJax.loader) { MathJax.loader.preLoad('[tex]/autoload', '[tex]/require'); } registerTeX(['require', ...AllPackages], false); MathJax-src-3.2.2/components/src/input/tex/extensions/all-packages/build.json000066400000000000000000000002741425015521000272650ustar00rootroot00000000000000{ "id": "[tex]/all-packages", "component": "input/tex/extensions/all-packages", "targets": [ "input/tex/AllPackages.ts", "input/tex/autoload", "input/tex/require" ] } MathJax-src-3.2.2/components/src/input/tex/extensions/all-packages/webpack.config.js000066400000000000000000000007071425015521000305120ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/all-packages',// the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex-base/lib', 'components/src/startup/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/ams/000077500000000000000000000000001425015521000235245ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/ams/ams.js000066400000000000000000000000271425015521000246410ustar00rootroot00000000000000import './lib/ams.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/ams/build.json000066400000000000000000000001431425015521000255140ustar00rootroot00000000000000{ "id": "[tex]/ams", "component": "input/tex/extensions/ams", "targets": ["input/tex/ams"] } MathJax-src-3.2.2/components/src/input/tex/extensions/ams/webpack.config.js000066400000000000000000000006451425015521000267470ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/ams', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex-base/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/amscd/000077500000000000000000000000001425015521000240335ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/amscd/amscd.js000066400000000000000000000000311425015521000254520ustar00rootroot00000000000000import './lib/amscd.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/amscd/build.json000066400000000000000000000001511425015521000260220ustar00rootroot00000000000000{ "id": "[tex]/amscd", "component": "input/tex/extensions/amscd", "targets": ["input/tex/amscd"] } MathJax-src-3.2.2/components/src/input/tex/extensions/amscd/webpack.config.js000066400000000000000000000006451425015521000272560ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( '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', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/autoload/000077500000000000000000000000001425015521000245545ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/autoload/autoload.js000066400000000000000000000000341425015521000267170ustar00rootroot00000000000000import './lib/autoload.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/autoload/build.json000066400000000000000000000001621425015521000265450ustar00rootroot00000000000000{ "id": "[tex]/autoload", "component": "input/tex/extensions/autoload", "targets": ["input/tex/autoload"] } MathJax-src-3.2.2/components/src/input/tex/extensions/autoload/webpack.config.js000066400000000000000000000007761425015521000300040ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/autoload', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex/extensions/require/lib', 'components/src/input/tex-base/lib', 'components/src/startup/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/bbox/000077500000000000000000000000001425015521000236765ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/bbox/bbox.js000066400000000000000000000000301425015521000251570ustar00rootroot00000000000000import './lib/bbox.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/bbox/build.json000066400000000000000000000001461425015521000256710ustar00rootroot00000000000000{ "id": "[tex]/bbox", "component": "input/tex/extensions/bbox", "targets": ["input/tex/bbox"] } MathJax-src-3.2.2/components/src/input/tex/extensions/bbox/webpack.config.js000066400000000000000000000006451425015521000271210ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/bbox', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex-base/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/boldsymbol/000077500000000000000000000000001425015521000251125ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/boldsymbol/boldsymbol.js000066400000000000000000000000361425015521000276150ustar00rootroot00000000000000import './lib/boldsymbol.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/boldsymbol/build.json000066400000000000000000000001701425015521000271020ustar00rootroot00000000000000{ "id": "[tex]/boldsymbol", "component": "input/tex/extensions/boldsymbol", "targets": ["input/tex/boldsymbol"] } MathJax-src-3.2.2/components/src/input/tex/extensions/boldsymbol/webpack.config.js000066400000000000000000000006451425015521000303350ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/boldsymbol', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex-base/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/braket/000077500000000000000000000000001425015521000242145ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/braket/braket.js000066400000000000000000000000321425015521000260150ustar00rootroot00000000000000import './lib/braket.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/braket/build.json000066400000000000000000000001541425015521000262060ustar00rootroot00000000000000{ "id": "[tex]/braket", "component": "input/tex/extensions/braket", "targets": ["input/tex/braket"] } MathJax-src-3.2.2/components/src/input/tex/extensions/braket/webpack.config.js000066400000000000000000000006451425015521000274370ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/braket', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex-base/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/bussproofs/000077500000000000000000000000001425015521000251515ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/bussproofs/build.json000066400000000000000000000001701425015521000271410ustar00rootroot00000000000000{ "id": "[tex]/bussproofs", "component": "input/tex/extensions/bussproofs", "targets": ["input/tex/bussproofs"] } MathJax-src-3.2.2/components/src/input/tex/extensions/bussproofs/bussproofs.js000066400000000000000000000000361425015521000277130ustar00rootroot00000000000000import './lib/bussproofs.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/bussproofs/webpack.config.js000066400000000000000000000006451425015521000303740ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/bussproofs', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex-base/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/cancel/000077500000000000000000000000001425015521000241715ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/cancel/build.json000066400000000000000000000001541425015521000261630ustar00rootroot00000000000000{ "id": "[tex]/cancel", "component": "input/tex/extensions/cancel", "targets": ["input/tex/cancel"] } MathJax-src-3.2.2/components/src/input/tex/extensions/cancel/cancel.js000066400000000000000000000000321425015521000257470ustar00rootroot00000000000000import './lib/cancel.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/cancel/webpack.config.js000066400000000000000000000007341425015521000274130ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/cancel', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex-base/lib', 'components/src/input/tex/extensions/enclose/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/cases/000077500000000000000000000000001425015521000240425ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/cases/build.json000066400000000000000000000001511425015521000260310ustar00rootroot00000000000000{ "id": "[tex]/cases", "component": "input/tex/extensions/cases", "targets": ["input/tex/cases"] } MathJax-src-3.2.2/components/src/input/tex/extensions/cases/cases.js000066400000000000000000000000311425015521000254700ustar00rootroot00000000000000import './lib/cases.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/cases/webpack.config.js000066400000000000000000000011071425015521000272570ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/cases', // the package to build '../../../../../../js', // location of the compiled js files [ // packages to link to (relative to Mathjax components) 'components/src/input/tex-base/lib', 'components/src/input/tex/extensions/ams/lib', 'components/src/input/tex/extensions/empheq/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/centernot/000077500000000000000000000000001425015521000247455ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/centernot/build.json000066400000000000000000000001651425015521000267410ustar00rootroot00000000000000{ "id": "[tex]/centernot", "component": "input/tex/extensions/centernot", "targets": ["input/tex/centernot"] } MathJax-src-3.2.2/components/src/input/tex/extensions/centernot/centernot.js000066400000000000000000000000351425015521000273020ustar00rootroot00000000000000import './lib/centernot.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/centernot/webpack.config.js000066400000000000000000000006451425015521000301700ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/centernot', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex-base/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/color/000077500000000000000000000000001425015521000240625ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/color/build.json000066400000000000000000000001511425015521000260510ustar00rootroot00000000000000{ "id": "[tex]/color", "component": "input/tex/extensions/color", "targets": ["input/tex/color"] } MathJax-src-3.2.2/components/src/input/tex/extensions/color/color.js000066400000000000000000000000311425015521000255300ustar00rootroot00000000000000import './lib/color.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/color/webpack.config.js000066400000000000000000000006451425015521000273050ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/color', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex-base/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/colortbl/000077500000000000000000000000001425015521000245645ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/colortbl/build.json000066400000000000000000000001621425015521000265550ustar00rootroot00000000000000{ "id": "[tex]/colortbl", "component": "input/tex/extensions/colortbl", "targets": ["input/tex/colortbl"] } MathJax-src-3.2.2/components/src/input/tex/extensions/colortbl/colortbl.js000066400000000000000000000000341425015521000267370ustar00rootroot00000000000000import './lib/colortbl.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/colortbl/webpack.config.js000066400000000000000000000006451425015521000300070ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/colortbl', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex-base/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/colorv2/000077500000000000000000000000001425015521000243325ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/colorv2/build.json000066400000000000000000000001571425015521000263270ustar00rootroot00000000000000{ "id": "[tex]/colorv2", "component": "input/tex/extensions/colorv2", "targets": ["input/tex/colorv2"] } MathJax-src-3.2.2/components/src/input/tex/extensions/colorv2/colorv2.js000066400000000000000000000000331425015521000262520ustar00rootroot00000000000000import './lib/colorv2.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/colorv2/webpack.config.js000066400000000000000000000006451425015521000275550ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/colorv2', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex-base/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/configmacros/000077500000000000000000000000001425015521000254165ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/configmacros/build.json000066400000000000000000000001761425015521000274140ustar00rootroot00000000000000{ "id": "[tex]/configmacros", "component": "input/tex/extensions/configmacros", "targets": ["input/tex/configmacros"] } MathJax-src-3.2.2/components/src/input/tex/extensions/configmacros/configmacros.js000066400000000000000000000000401425015521000304200ustar00rootroot00000000000000import './lib/configmacros.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/configmacros/webpack.config.js000066400000000000000000000010011425015521000306240ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/configmacros',// the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex/extensions/newcommand/lib', 'components/src/input/tex-base/lib', 'components/src/core/lib', 'components/src/startup/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/empheq/000077500000000000000000000000001425015521000242235ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/empheq/build.json000066400000000000000000000001541425015521000262150ustar00rootroot00000000000000{ "id": "[tex]/empheq", "component": "input/tex/extensions/empheq", "targets": ["input/tex/empheq"] } MathJax-src-3.2.2/components/src/input/tex/extensions/empheq/empheq.js000066400000000000000000000000321425015521000260330ustar00rootroot00000000000000import './lib/empheq.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/empheq/webpack.config.js000066400000000000000000000006651425015521000274500ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/empheq', // the package to build '../../../../../../js', // location of the compiled js files [ // packages to link to 'components/src/input/tex-base/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/enclose/000077500000000000000000000000001425015521000243745ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/enclose/build.json000066400000000000000000000001571425015521000263710ustar00rootroot00000000000000{ "id": "[tex]/enclose", "component": "input/tex/extensions/enclose", "targets": ["input/tex/enclose"] } MathJax-src-3.2.2/components/src/input/tex/extensions/enclose/enclose.js000066400000000000000000000000331425015521000263560ustar00rootroot00000000000000import './lib/enclose.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/enclose/webpack.config.js000066400000000000000000000006451425015521000276170ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/enclose', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex-base/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/extpfeil/000077500000000000000000000000001425015521000245645ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/extpfeil/build.json000066400000000000000000000001621425015521000265550ustar00rootroot00000000000000{ "id": "[tex]/extpfeil", "component": "input/tex/extensions/extpfeil", "targets": ["input/tex/extpfeil"] } MathJax-src-3.2.2/components/src/input/tex/extensions/extpfeil/extpfeil.js000066400000000000000000000000341425015521000267370ustar00rootroot00000000000000import './lib/extpfeil.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/extpfeil/webpack.config.js000066400000000000000000000010221425015521000277750ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/extpfeil', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex/extensions/ams/lib', 'components/src/input/tex/extensions/newcommand/lib', 'components/src/input/tex-base/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/gensymb/000077500000000000000000000000001425015521000244105ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/gensymb/build.json000066400000000000000000000001571425015521000264050ustar00rootroot00000000000000{ "id": "[tex]/gensymb", "component": "input/tex/extensions/gensymb", "targets": ["input/tex/gensymb"] } MathJax-src-3.2.2/components/src/input/tex/extensions/gensymb/gensymb.js000066400000000000000000000000331425015521000264060ustar00rootroot00000000000000import './lib/gensymb.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/gensymb/webpack.config.js000066400000000000000000000006441425015521000276320ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/gensymb', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex-base/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/html/000077500000000000000000000000001425015521000237105ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/html/build.json000066400000000000000000000001461425015521000257030ustar00rootroot00000000000000{ "id": "[tex]/html", "component": "input/tex/extensions/html", "targets": ["input/tex/html"] } MathJax-src-3.2.2/components/src/input/tex/extensions/html/html.js000066400000000000000000000000301425015521000252030ustar00rootroot00000000000000import './lib/html.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/html/webpack.config.js000066400000000000000000000006451425015521000271330ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/html', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex-base/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/mathtools/000077500000000000000000000000001425015521000247565ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/mathtools/build.json000066400000000000000000000001651425015521000267520ustar00rootroot00000000000000{ "id": "[tex]/mathtools", "component": "input/tex/extensions/mathtools", "targets": ["input/tex/mathtools"] } MathJax-src-3.2.2/components/src/input/tex/extensions/mathtools/mathtools.js000066400000000000000000000000351425015521000273240ustar00rootroot00000000000000import './lib/mathtools.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/mathtools/webpack.config.js000066400000000000000000000010221425015521000301670ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/mathtools', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex/extensions/ams/lib', 'components/src/input/tex/extensions/newcommand/lib', 'components/src/input/tex-base/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/mhchem/000077500000000000000000000000001425015521000242055ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/mhchem/build.json000066400000000000000000000002421425015521000261750ustar00rootroot00000000000000{ "id": "[tex]/mhchem", "component": "input/tex/extensions/mhchem", "targets": ["input/tex/mhchem"], "exclude": ["input/tex/mhchem/mhchem_parser.d.ts"] } MathJax-src-3.2.2/components/src/input/tex/extensions/mhchem/mhchem.js000066400000000000000000000000321425015521000257770ustar00rootroot00000000000000import './lib/mhchem.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/mhchem/webpack.config.js000066400000000000000000000007301425015521000274230ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/mhchem', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex/extensions/ams/lib', 'components/src/input/tex-base/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/newcommand/000077500000000000000000000000001425015521000250745ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/newcommand/build.json000066400000000000000000000001701425015521000270640ustar00rootroot00000000000000{ "id": "[tex]/newcommand", "component": "input/tex/extensions/newcommand", "targets": ["input/tex/newcommand"] } MathJax-src-3.2.2/components/src/input/tex/extensions/newcommand/newcommand.js000066400000000000000000000000361425015521000275610ustar00rootroot00000000000000import './lib/newcommand.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/newcommand/webpack.config.js000066400000000000000000000006451425015521000303170ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/newcommand', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex-base/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/noerrors/000077500000000000000000000000001425015521000246155ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/noerrors/build.json000066400000000000000000000001621425015521000266060ustar00rootroot00000000000000{ "id": "[tex]/noerrors", "component": "input/tex/extensions/noerrors", "targets": ["input/tex/noerrors"] } MathJax-src-3.2.2/components/src/input/tex/extensions/noerrors/noerrors.js000066400000000000000000000000341425015521000270210ustar00rootroot00000000000000import './lib/noerrors.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/noerrors/webpack.config.js000066400000000000000000000006451425015521000300400ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/noerrors', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex-base/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/noundefined/000077500000000000000000000000001425015521000252425ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/noundefined/build.json000066400000000000000000000001731425015521000272350ustar00rootroot00000000000000{ "id": "[tex]/noundefined", "component": "input/tex/extensions/noundefined", "targets": ["input/tex/noundefined"] } MathJax-src-3.2.2/components/src/input/tex/extensions/noundefined/noundefined.js000066400000000000000000000000371425015521000300760ustar00rootroot00000000000000import './lib/noundefined.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/noundefined/webpack.config.js000066400000000000000000000006451425015521000304650ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/noundefined', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex-base/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/physics/000077500000000000000000000000001425015521000244265ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/physics/build.json000066400000000000000000000001571425015521000264230ustar00rootroot00000000000000{ "id": "[tex]/physics", "component": "input/tex/extensions/physics", "targets": ["input/tex/physics"] } MathJax-src-3.2.2/components/src/input/tex/extensions/physics/physics.js000066400000000000000000000000331425015521000264420ustar00rootroot00000000000000import './lib/physics.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/physics/webpack.config.js000066400000000000000000000006451425015521000276510ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/physics', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex-base/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/require/000077500000000000000000000000001425015521000244205ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/require/build.json000066400000000000000000000001571425015521000264150ustar00rootroot00000000000000{ "id": "[tex]/require", "component": "input/tex/extensions/require", "targets": ["input/tex/require"] } MathJax-src-3.2.2/components/src/input/tex/extensions/require/require.js000066400000000000000000000000331425015521000264260ustar00rootroot00000000000000import './lib/require.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/require/webpack.config.js000066400000000000000000000007071425015521000276420ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/require', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex-base/lib', 'components/src/core/lib', 'components/src/startup/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/setoptions/000077500000000000000000000000001425015521000251535ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/setoptions/build.json000066400000000000000000000001701425015521000271430ustar00rootroot00000000000000{ "id": "[tex]/setoptions", "component": "input/tex/extensions/setoptions", "targets": ["input/tex/setoptions"] } MathJax-src-3.2.2/components/src/input/tex/extensions/setoptions/setoptions.js000066400000000000000000000000361425015521000277170ustar00rootroot00000000000000import './lib/setoptions.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/setoptions/webpack.config.js000066400000000000000000000006451425015521000303760ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/setoptions', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex-base/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/tagformat/000077500000000000000000000000001425015521000247305ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/tagformat/build.json000066400000000000000000000001651425015521000267240ustar00rootroot00000000000000{ "id": "[tex]/tagformat", "component": "input/tex/extensions/tagformat", "targets": ["input/tex/tagformat"] } MathJax-src-3.2.2/components/src/input/tex/extensions/tagformat/tagformat.js000066400000000000000000000000351425015521000272500ustar00rootroot00000000000000import './lib/tagformat.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/tagformat/webpack.config.js000066400000000000000000000006451425015521000301530ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/tagformat', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex-base/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/textcomp/000077500000000000000000000000001425015521000246075ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/textcomp/build.json000066400000000000000000000001621425015521000266000ustar00rootroot00000000000000{ "id": "[tex]/textcomp", "component": "input/tex/extensions/textcomp", "targets": ["input/tex/textcomp"] } MathJax-src-3.2.2/components/src/input/tex/extensions/textcomp/textcomp.js000066400000000000000000000000341425015521000270050ustar00rootroot00000000000000import './lib/textcomp.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/textcomp/webpack.config.js000066400000000000000000000007371425015521000300340ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/textcomp', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex/extensions/textmacros/lib', 'components/src/input/tex-base/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/textmacros/000077500000000000000000000000001425015521000251355ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/textmacros/build.json000066400000000000000000000001701425015521000271250ustar00rootroot00000000000000{ "id": "[tex]/textmacros", "component": "input/tex/extensions/textmacros", "targets": ["input/tex/textmacros"] } MathJax-src-3.2.2/components/src/input/tex/extensions/textmacros/textmacros.js000066400000000000000000000000361425015521000276630ustar00rootroot00000000000000import './lib/textmacros.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/textmacros/webpack.config.js000066400000000000000000000006451425015521000303600ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/textmacros', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex-base/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/unicode/000077500000000000000000000000001425015521000243725ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/unicode/build.json000066400000000000000000000001571425015521000263670ustar00rootroot00000000000000{ "id": "[tex]/unicode", "component": "input/tex/extensions/unicode", "targets": ["input/tex/unicode"] } MathJax-src-3.2.2/components/src/input/tex/extensions/unicode/unicode.js000066400000000000000000000000331425015521000263520ustar00rootroot00000000000000import './lib/unicode.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/unicode/webpack.config.js000066400000000000000000000006451425015521000276150ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/unicode', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex-base/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/upgreek/000077500000000000000000000000001425015521000244065ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/upgreek/build.json000066400000000000000000000001571425015521000264030ustar00rootroot00000000000000{ "id": "[tex]/upgreek", "component": "input/tex/extensions/upgreek", "targets": ["input/tex/upgreek"] } MathJax-src-3.2.2/components/src/input/tex/extensions/upgreek/upgreek.js000066400000000000000000000000331425015521000264020ustar00rootroot00000000000000import './lib/upgreek.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/upgreek/webpack.config.js000066400000000000000000000006441425015521000276300ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/upgreek', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex-base/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/extensions/verb/000077500000000000000000000000001425015521000237025ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/input/tex/extensions/verb/build.json000066400000000000000000000001461425015521000256750ustar00rootroot00000000000000{ "id": "[tex]/verb", "component": "input/tex/extensions/verb", "targets": ["input/tex/verb"] } MathJax-src-3.2.2/components/src/input/tex/extensions/verb/verb.js000066400000000000000000000000301425015521000251670ustar00rootroot00000000000000import './lib/verb.js'; MathJax-src-3.2.2/components/src/input/tex/extensions/verb/webpack.config.js000066400000000000000000000006451425015521000271250ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex/extensions/verb', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/input/tex-base/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/input/tex/register.js000066400000000000000000000010101425015521000227170ustar00rootroot00000000000000import {insert} from '../../../../js/util/Options.js'; export function registerTeX(packageList = [], tex = true) { if (MathJax.startup) { if (tex) { MathJax.startup.registerConstructor('tex', MathJax._.input.tex_ts.TeX); MathJax.startup.useInput('tex'); } if (!MathJax.config.tex) { MathJax.config.tex = {}; } let packages = MathJax.config.tex.packages; MathJax.config.tex.packages = packageList; if (packages) { insert(MathJax.config.tex, {packages}); } } } MathJax-src-3.2.2/components/src/input/tex/tex.js000066400000000000000000000006241425015521000217050ustar00rootroot00000000000000import './lib/tex.js'; import {registerTeX} from './register.js'; import {Loader} from '../../../../js/components/loader.js'; Loader.preLoad( 'input/tex-base', '[tex]/ams', '[tex]/newcommand', '[tex]/noundefined', '[tex]/require', '[tex]/autoload', '[tex]/configmacros' ); registerTeX([ 'base', 'ams', 'newcommand', 'noundefined', 'require', 'autoload', 'configmacros' ]); MathJax-src-3.2.2/components/src/input/tex/webpack.config.js000066400000000000000000000006301425015521000237620ustar00rootroot00000000000000const PACKAGE = require('../../../webpack.common.js'); module.exports = PACKAGE( 'input/tex', // the package to build '../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/startup/lib', 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/latest/000077500000000000000000000000001425015521000201025ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/latest/latest.js000066400000000000000000000001141425015521000217300ustar00rootroot00000000000000import {loadLatest} from '../../../js/components/latest.js'; loadLatest(); MathJax-src-3.2.2/components/src/latest/webpack.config.js000066400000000000000000000005201425015521000233150ustar00rootroot00000000000000const PACKAGE = require('../../webpack.common.js'); module.exports = PACKAGE( 'latest', // the package to build '../../../js', // location of the MathJax js library [], // packages to link to __dirname // our directory ); MathJax-src-3.2.2/components/src/loader/000077500000000000000000000000001425015521000200545ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/loader/build.json000066400000000000000000000001501425015521000220420ustar00rootroot00000000000000{ "component": "loader", "targets": [ "components/loader.ts", "components/package.ts" ] } MathJax-src-3.2.2/components/src/loader/loader.js000066400000000000000000000010331425015521000216550ustar00rootroot00000000000000import './lib/loader.js'; import {Loader, CONFIG} from '../../../js/components/loader.js'; import {combineDefaults} from '../../../js/components/global.js'; import {dependencies, paths, provides} from '../dependencies.js'; combineDefaults(MathJax.config.loader, 'dependencies', dependencies); combineDefaults(MathJax.config.loader, 'paths', paths); combineDefaults(MathJax.config.loader, 'provides', provides); Loader.load(...CONFIG.load) .then(() => CONFIG.ready()) .catch((message, name) => CONFIG.failed(message, name)); MathJax-src-3.2.2/components/src/loader/webpack.config.js000066400000000000000000000005201425015521000232670ustar00rootroot00000000000000const PACKAGE = require('../../webpack.common.js'); module.exports = PACKAGE( 'loader', // the package to build '../../../js', // location of the MathJax js library [], // packages to link to __dirname // our directory ); MathJax-src-3.2.2/components/src/mml-chtml/000077500000000000000000000000001425015521000205005ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/mml-chtml/mml-chtml.js000066400000000000000000000004501425015521000227270ustar00rootroot00000000000000import '../startup/init.js'; import './preload.js'; import '../core/core.js'; import '../input/mml/mml.js'; import '../output/chtml/chtml.js'; import '../output/chtml/fonts/tex/tex.js'; import '../ui/menu/menu.js'; import '../a11y/assistive-mml/assistive-mml.js'; import '../startup/startup.js'; MathJax-src-3.2.2/components/src/mml-chtml/preload.js000066400000000000000000000003161425015521000224640ustar00rootroot00000000000000import {Loader} from '../../../js/components/loader.js'; Loader.preLoad( 'loader', 'startup', 'core', 'input/mml', 'output/chtml', 'output/chtml/fonts/tex.js', 'ui/menu', 'a11y/assistive-mml' ); MathJax-src-3.2.2/components/src/mml-chtml/webpack.config.js000066400000000000000000000005201425015521000237130ustar00rootroot00000000000000const PACKAGE = require('../../webpack.common.js'); module.exports = PACKAGE( 'mml-chtml', // the package to build '../../../js', // location of the MathJax js library [], // packages to link to __dirname // our directory ); MathJax-src-3.2.2/components/src/mml-svg/000077500000000000000000000000001425015521000201705ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/mml-svg/mml-svg.js000066400000000000000000000004421425015521000221100ustar00rootroot00000000000000import '../startup/init.js'; import './preload.js'; import '../core/core.js'; import '../input/mml/mml.js'; import '../output/svg/svg.js'; import '../output/svg/fonts/tex/tex.js'; import '../ui/menu/menu.js'; import '../a11y/assistive-mml/assistive-mml.js'; import '../startup/startup.js'; MathJax-src-3.2.2/components/src/mml-svg/preload.js000066400000000000000000000003121425015521000221500ustar00rootroot00000000000000import {Loader} from '../../../js/components/loader.js'; Loader.preLoad( 'loader', 'startup', 'core', 'input/mml', 'output/svg', 'output/svg/fonts/tex.js', 'ui/menu', 'a11y/assistive-mml' ); MathJax-src-3.2.2/components/src/mml-svg/webpack.config.js000066400000000000000000000005201425015521000234030ustar00rootroot00000000000000const PACKAGE = require('../../webpack.common.js'); module.exports = PACKAGE( 'mml-svg', // the package to build '../../../js', // location of the MathJax js library [], // packages to link to __dirname // our directory ); MathJax-src-3.2.2/components/src/node-main/000077500000000000000000000000001425015521000204555ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/node-main/node-main.js000066400000000000000000000056521425015521000226720ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2019-2021 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. */ const path = eval("require('path')"); // use actual node version, not webpack's version /* * Load the needed MathJax components */ require('../startup/init.js'); const {Loader, CONFIG} = require('../../../js/components/loader.js'); const {combineDefaults, combineConfig} = require('../../../js/components/global.js'); /* * Set up the initial configuration */ combineDefaults(MathJax.config, 'loader', { require: eval('require'), // use node's require() to load files failed: (err) => {throw err} // pass on error message to init()'s catch function }); /* * Preload core and liteDOM adaptor (needed for node) */ Loader.preLoad('loader', 'startup', 'core', 'adaptors/liteDOM'); require('../core/core.js'); require('../adaptors/liteDOM/liteDOM.js'); /* * Set the mathjax root path to the location where node-main.js was loaded from, * using the actual node __dirname, not the webpack one, and removing * the directory if we are loaded from components/src/node-main. */ const dir = CONFIG.paths.mathjax = eval('__dirname'); if (path.basename(dir) === 'node-main') { CONFIG.paths.mathjax = path.dirname(dir); combineDefaults(CONFIG, 'source', require('../source.js').source); // // Set the asynchronous loader to use the js directory, so we can load // other files like entity definitions // const ROOT = path.resolve(dir, '../../../js'); const REQUIRE = MathJax.config.loader.require; MathJax._.mathjax.mathjax.asyncLoad = function (name) { return REQUIRE(name.charAt(0) === '.' ? path.resolve(ROOT, name) : name); }; } /* * The initialization function. Use as: * * require('mathjax').init({ ... }).then((MathJax) => { ... }); * * where the argument to init() is a MathJax configuration (what would be set as MathJax = {...}). * The init() function returns a promise that is resolved when MathJax is loaded and ready, and that * is passed the MathJax global variable when it is called. */ const init = (config = {}) => { combineConfig(MathJax.config, config); return Loader.load(...CONFIG.load) .then(() => CONFIG.ready()) .then(() => MathJax) // Pass MathJax global as argument to subsequent .then() calls .catch(error => CONFIG.failed(error)); } /* * Export the init() function */ export {init}; MathJax-src-3.2.2/components/src/node-main/webpack.config.js000066400000000000000000000007571425015521000237040ustar00rootroot00000000000000const PACKAGE = require('../../webpack.common.js'); const package = PACKAGE( 'node-main', // the package to build '../../../js', // location of the MathJax js library [], // packages to link to __dirname // our directory ); // make node-main.js exports available to caller package.output.library = { name: 'init', type: 'commonjs', export: 'init' }; module.exports = package; MathJax-src-3.2.2/components/src/output/000077500000000000000000000000001425015521000201465ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/output/chtml/000077500000000000000000000000001425015521000212555ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/output/chtml/build.json000066400000000000000000000002411425015521000232440ustar00rootroot00000000000000{ "component": "output/chtml", "targets": ["output/chtml.ts", "output/chtml", "output/common"], "exclude": ["output/chtml/fonts", "output/common/fonts"] } MathJax-src-3.2.2/components/src/output/chtml/chtml.js000066400000000000000000000006731425015521000227300ustar00rootroot00000000000000import './lib/chtml.js'; import {combineDefaults} from '../../../../js/components/global.js'; import {CHTML} from '../../../../js/output/chtml.js'; if (MathJax.loader) { combineDefaults(MathJax.config.loader, 'output/chtml', { checkReady() { return MathJax.loader.load("output/chtml/fonts/tex"); } }); } if (MathJax.startup) { MathJax.startup.registerConstructor('chtml', CHTML); MathJax.startup.useOutput('chtml'); } MathJax-src-3.2.2/components/src/output/chtml/fonts/000077500000000000000000000000001425015521000224065ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/output/chtml/fonts/tex/000077500000000000000000000000001425015521000232065ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/output/chtml/fonts/tex/build.json000066400000000000000000000002151425015521000251760ustar00rootroot00000000000000{ "component": "output/chtml/fonts/tex", "targets": ["output/chtml/fonts/tex.ts", "output/chtml/fonts/tex", "output/common/fonts/tex"] } MathJax-src-3.2.2/components/src/output/chtml/fonts/tex/copy.json000066400000000000000000000016441425015521000250600ustar00rootroot00000000000000{ "to": "../../../../../../es5/output/chtml/fonts/woff-v2", "from": "../../../../../../ts/output/chtml/fonts/tex-woff-v2", "copy": [ "MathJax_AMS-Regular.woff", "MathJax_Calligraphic-Bold.woff", "MathJax_Calligraphic-Regular.woff", "MathJax_Fraktur-Bold.woff", "MathJax_Fraktur-Regular.woff", "MathJax_Main-Bold.woff", "MathJax_Main-Italic.woff", "MathJax_Main-Regular.woff", "MathJax_Math-BoldItalic.woff", "MathJax_Math-Italic.woff", "MathJax_Math-Regular.woff", "MathJax_SansSerif-Bold.woff", "MathJax_SansSerif-Italic.woff", "MathJax_SansSerif-Regular.woff", "MathJax_Script-Regular.woff", "MathJax_Size1-Regular.woff", "MathJax_Size2-Regular.woff", "MathJax_Size3-Regular.woff", "MathJax_Size4-Regular.woff", "MathJax_Typewriter-Regular.woff", "MathJax_Vector-Bold.woff", "MathJax_Vector-Regular.woff", "MathJax_Zero.woff" ] } MathJax-src-3.2.2/components/src/output/chtml/fonts/tex/tex.js000066400000000000000000000011561425015521000243470ustar00rootroot00000000000000import './lib/tex.js'; import {combineDefaults} from '../../../../../../js/components/global.js'; import {Package} from '../../../../../../js/components/package.js'; import {selectOptionsFromKeys} from '../../../../../../js/util/Options.js'; import {TeXFont} from '../../../../../../js/output/chtml/fonts/tex.js'; if (MathJax.startup) { combineDefaults(MathJax.config, 'chtml', { fontURL: Package.resolvePath('output/chtml/fonts/woff-v2', false) }); const options = selectOptionsFromKeys(MathJax.config.chtml || {}, TeXFont.OPTIONS); combineDefaults(MathJax.config, 'chtml', {font: new TeXFont(options)}); } MathJax-src-3.2.2/components/src/output/chtml/fonts/tex/webpack.config.js000066400000000000000000000007051425015521000264260ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'output/chtml/fonts/tex', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/core/lib', 'components/src/output/chtml/lib', 'components/src/startup/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/output/chtml/nofont.js000066400000000000000000000002201425015521000231100ustar00rootroot00000000000000import {FontData} from '../../../../js/output/chtml/FontData.js'; export class TeXFont extends FontData {}; TeXFont.OPTIONS = {fontURL: '.'}; MathJax-src-3.2.2/components/src/output/chtml/webpack.config.js000066400000000000000000000011121425015521000244660ustar00rootroot00000000000000const webpack = require("webpack"); const PACKAGE = require('../../../webpack.common.js'); module.exports = PACKAGE( 'output/chtml', // the package to build '../../../../js', // location of the MathJax js library ['components/src/core/lib'], // packages to link to __dirname // our directory ); module.exports.plugins.push( new webpack.NormalModuleReplacementPlugin( /\/fonts\/tex\.js$/, function (resource) { resource.request = '../../components/src/output/chtml/nofont.js'; } ) ); MathJax-src-3.2.2/components/src/output/svg/000077500000000000000000000000001425015521000207455ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/output/svg/build.json000066400000000000000000000002311425015521000227330ustar00rootroot00000000000000{ "component": "output/svg", "targets": ["output/svg.ts", "output/svg", "output/common"], "exclude": ["output/svg/fonts", "output/common/fonts"] } MathJax-src-3.2.2/components/src/output/svg/fonts/000077500000000000000000000000001425015521000220765ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/output/svg/fonts/tex/000077500000000000000000000000001425015521000226765ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/output/svg/fonts/tex/build.json000066400000000000000000000002071425015521000246670ustar00rootroot00000000000000{ "component": "output/svg/fonts/tex", "targets": ["output/svg/fonts/tex.ts", "output/svg/fonts/tex", "output/common/fonts/tex"] } MathJax-src-3.2.2/components/src/output/svg/fonts/tex/tex.js000066400000000000000000000006531425015521000240400ustar00rootroot00000000000000import './lib/tex.js'; import {TeXFont} from '../../../../../../js/output/svg/fonts/tex.js'; import {combineDefaults} from '../../../../../../js/components/global.js'; import {selectOptionsFromKeys} from '../../../../../../js/util/Options.js'; if (MathJax.startup) { const options = selectOptionsFromKeys(MathJax.config.svg || {}, TeXFont.OPTIONS); combineDefaults(MathJax.config, 'svg', {font: new TeXFont(options)}); } MathJax-src-3.2.2/components/src/output/svg/fonts/tex/webpack.config.js000066400000000000000000000006411425015521000261150ustar00rootroot00000000000000const PACKAGE = require('../../../../../webpack.common.js'); module.exports = PACKAGE( 'output/svg/fonts/tex', // the package to build '../../../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/core/lib', 'components/src/output/svg/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/output/svg/nofont.js000066400000000000000000000002161425015521000226050ustar00rootroot00000000000000import {FontData} from '../../../../js/output/svg/FontData.js'; export class TeXFont extends FontData {}; TeXFont.OPTIONS = {fontURL: '.'}; MathJax-src-3.2.2/components/src/output/svg/svg.js000066400000000000000000000006531425015521000221060ustar00rootroot00000000000000import './lib/svg.js'; import {combineDefaults} from '../../../../js/components/global.js'; import {SVG} from '../../../../js/output/svg.js'; if (MathJax.loader) { combineDefaults(MathJax.config.loader, 'output/svg', { checkReady() { return MathJax.loader.load("output/svg/fonts/tex"); } }); } if (MathJax.startup) { MathJax.startup.registerConstructor('svg', SVG); MathJax.startup.useOutput('svg'); } MathJax-src-3.2.2/components/src/output/svg/webpack.config.js000066400000000000000000000011101425015521000241540ustar00rootroot00000000000000const webpack = require("webpack"); const PACKAGE = require('../../../webpack.common.js'); module.exports = PACKAGE( 'output/svg', // the package to build '../../../../js', // location of the MathJax js library ['components/src/core/lib'], // packages to link to __dirname // our directory ); module.exports.plugins.push( new webpack.NormalModuleReplacementPlugin( /\/fonts\/tex\.js$/, function (resource) { resource.request = '../../components/src/output/svg/nofont.js'; } ) ); MathJax-src-3.2.2/components/src/source.js000066400000000000000000000105001425015521000204400ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2019-2021 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. */ const src = __dirname; export const source = { 'core': `${src}/core/core.js`, 'adaptors/liteDOM': `${src}/adaptors/liteDOM/liteDOM.js`, 'input/tex': `${src}/input/tex/tex.js`, 'input/tex-base': `${src}/input/tex-base/tex-base.js`, 'input/tex-full': `${src}/input/tex-full/tex-full.js`, '[tex]/action': `${src}/input/tex/extensions/action/action.js`, '[tex]/all-packages': `${src}/input/tex/extensions/all-packages/all-packages.js`, '[tex]/autoload': `${src}/input/tex/extensions/autoload/autoload.js`, '[tex]/ams': `${src}/input/tex/extensions/ams/ams.js`, '[tex]/amscd': `${src}/input/tex/extensions/amscd/amscd.js`, '[tex]/bbox': `${src}/input/tex/extensions/bbox/bbox.js`, '[tex]/boldsymbol': `${src}/input/tex/extensions/boldsymbol/boldsymbol.js`, '[tex]/braket': `${src}/input/tex/extensions/braket/braket.js`, '[tex]/bussproofs': `${src}/input/tex/extensions/bussproofs/bussproofs.js`, '[tex]/cancel': `${src}/input/tex/extensions/cancel/cancel.js`, '[tex]/centernot': `${src}/input/tex/extensions/centernot/centernot.js`, '[tex]/color': `${src}/input/tex/extensions/color/color.js`, '[tex]/colorv2': `${src}/input/tex/extensions/colorv2/colorv2.js`, '[tex]/configmacros': `${src}/input/tex/extensions/configmacros/configmacros.js`, '[tex]/enclose': `${src}/input/tex/extensions/enclose/enclose.js`, '[tex]/extpfeil': `${src}/input/tex/extensions/extpfeil/extpfeil.js`, '[tex]/html': `${src}/input/tex/extensions/html/html.js`, '[tex]/mathtools': `${src}/input/tex/extensions/mathtools/mathtools.js`, '[tex]/mhchem': `${src}/input/tex/extensions/mhchem/mhchem.js`, '[tex]/newcommand': `${src}/input/tex/extensions/newcommand/newcommand.js`, '[tex]/noerrors': `${src}/input/tex/extensions/noerrors/noerrors.js`, '[tex]/noundefined': `${src}/input/tex/extensions/noundefined/noundefined.js`, '[tex]/physics': `${src}/input/tex/extensions/physics/physics.js`, '[tex]/require': `${src}/input/tex/extensions/require/require.js`, '[tex]/setoptions': `${src}/input/tex/extensions/setoptions/setoptions.js`, '[tex]/tagformat': `${src}/input/tex/extensions/tagformat/tagformat.js`, '[tex]/textmacros': `${src}/input/tex/extensions/textmacros/textmacros.js`, '[tex]/unicode': `${src}/input/tex/extensions/unicode/unicode.js`, '[tex]/verb': `${src}/input/tex/extensions/verb/verb.js`, '[tex]/cases': `${src}/input/tex/extensions/cases/cases.js`, '[tex]/empheq': `${src}/input/tex/extensions/empheq/empheq.js`, 'input/mml': `${src}/input/mml/mml.js`, 'input/mml/entities': `${src}/input/mml/entities/entities.js`, '[mml]/mml3': `${src}/input/mml/extensions/mml3/mml3.js`, 'input/asciimath': `${src}/input/asciimath/asciimath.js`, 'output/chtml': `${src}/output/chtml/chtml.js`, '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`, 'a11y/sre': `${src}/a11y/sre/sre.js`, 'ui/lazy': `${src}/ui/lazy/lazy.js`, 'ui/menu': `${src}/ui/menu/menu.js`, 'ui/safe': `${src}/ui/safe/safe.js`, 'mml-chtml': `${src}/mml-chtml/mml-chtml.js`, 'mml-svg': `${src}/mml-svg/mml-svg.js`, 'tex-chtml': `${src}/tex-chtml/tex-chtml.js`, 'tex-svg': `${src}/tex-svg/tex-svg.js`, 'tex-mml-chtml': `${src}/tex-mml-chtml/tex-mml-chtml.js`, 'tex-mml-svg': `${src}/tex-mml-svg/tex-mml-svg.js`, 'loader': `${src}/loader/loader.js`, 'startup': `${src}/startup/startup.js` }; MathJax-src-3.2.2/components/src/sre/000077500000000000000000000000001425015521000173775ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/sre/copy.json000066400000000000000000000001521425015521000212420ustar00rootroot00000000000000{ "to": "../../../es5/sre", "from": "[node]/speech-rule-engine/lib", "copy": [ "mathmaps" ] } MathJax-src-3.2.2/components/src/startup/000077500000000000000000000000001425015521000203105ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/startup/build.json000066400000000000000000000002061425015521000223000ustar00rootroot00000000000000{ "component": "startup", "targets": [ "components/loader.ts", "components/package.ts", "components/startup.ts" ] } MathJax-src-3.2.2/components/src/startup/init.js000066400000000000000000000006551425015521000216170ustar00rootroot00000000000000import './lib/startup.js'; import {combineDefaults} from '../../../js/components/global.js'; import {dependencies, paths, provides, compatibility} from '../dependencies.js'; combineDefaults(MathJax.config.loader, 'dependencies', dependencies); combineDefaults(MathJax.config.loader, 'paths', paths); combineDefaults(MathJax.config.loader, 'provides', provides); combineDefaults(MathJax.config.loader, 'source', compatibility); MathJax-src-3.2.2/components/src/startup/startup.js000066400000000000000000000003341425015521000223500ustar00rootroot00000000000000import './init.js'; import {Loader, CONFIG} from '../../../js/components/loader.js'; Loader.preLoad('loader'); Loader.load(...CONFIG.load) .then(() => CONFIG.ready()) .catch(error => CONFIG.failed(error)); MathJax-src-3.2.2/components/src/startup/webpack.config.js000066400000000000000000000005201425015521000235230ustar00rootroot00000000000000const PACKAGE = require('../../webpack.common.js'); module.exports = PACKAGE( 'startup', // the package to build '../../../js', // location of the MathJax js library [], // packages to link to __dirname // our directory ); MathJax-src-3.2.2/components/src/tex-chtml-full-speech/000077500000000000000000000000001425015521000227205ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/tex-chtml-full-speech/preload.js000066400000000000000000000003371425015521000247070ustar00rootroot00000000000000import {Loader} from '../../../js/components/loader.js'; Loader.preLoad( 'loader', 'startup', 'core', 'input/tex-full', 'output/chtml', 'output/chtml/fonts/tex.js', 'ui/menu', 'a11y/assistive-mml', 'a11y/sre' ); MathJax-src-3.2.2/components/src/tex-chtml-full-speech/tex-chtml-full-speech.js000066400000000000000000000012241425015521000273670ustar00rootroot00000000000000import '../startup/init.js'; import './preload.js'; import '../core/core.js'; import '../input/tex-full/tex-full.js'; import '../output/chtml/chtml.js'; import '../output/chtml/fonts/tex/tex.js'; import '../ui/menu/menu.js'; import '../a11y/assistive-mml/assistive-mml.js'; import '../a11y/sre/sre.js'; import MathMaps from '../../../js/a11y/mathmaps.js'; import base from 'speech-rule-engine/lib/mathmaps/base.json'; import en from 'speech-rule-engine/lib/mathmaps/en.json'; import nemeth from 'speech-rule-engine/lib/mathmaps/nemeth.json'; MathMaps.set('base', base); MathMaps.set('en', en); MathMaps.set('nemeth', nemeth); import '../startup/startup.js'; MathJax-src-3.2.2/components/src/tex-chtml-full-speech/webpack.config.js000066400000000000000000000005251425015521000261400ustar00rootroot00000000000000const PACKAGE = require('../../webpack.common.js'); module.exports = PACKAGE( 'tex-chtml-full-speech', // the package to build '../../../js', // location of the MathJax js library [ // packages to link to ], __dirname // our directory ); MathJax-src-3.2.2/components/src/tex-chtml-full/000077500000000000000000000000001425015521000214535ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/tex-chtml-full/preload.js000066400000000000000000000003231425015521000234350ustar00rootroot00000000000000import {Loader} from '../../../js/components/loader.js'; Loader.preLoad( 'loader', 'startup', 'core', 'input/tex-full', 'output/chtml', 'output/chtml/fonts/tex.js', 'ui/menu', 'a11y/assistive-mml' ); MathJax-src-3.2.2/components/src/tex-chtml-full/tex-chtml-full.js000066400000000000000000000004621425015521000246600ustar00rootroot00000000000000import '../startup/init.js'; import './preload.js'; import '../core/core.js'; import '../input/tex-full/tex-full.js'; import '../output/chtml/chtml.js'; import '../output/chtml/fonts/tex/tex.js'; import '../ui/menu/menu.js'; import '../a11y/assistive-mml/assistive-mml.js'; import '../startup/startup.js'; MathJax-src-3.2.2/components/src/tex-chtml-full/webpack.config.js000066400000000000000000000005201425015521000246660ustar00rootroot00000000000000const PACKAGE = require('../../webpack.common.js'); module.exports = PACKAGE( 'tex-chtml-full', // the package to build '../../../js', // location of the MathJax js library [], // packages to link to __dirname // our directory ); MathJax-src-3.2.2/components/src/tex-chtml/000077500000000000000000000000001425015521000205135ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/tex-chtml/preload.js000066400000000000000000000003161425015521000224770ustar00rootroot00000000000000import {Loader} from '../../../js/components/loader.js'; Loader.preLoad( 'loader', 'startup', 'core', 'input/tex', 'output/chtml', 'output/chtml/fonts/tex.js', 'ui/menu', 'a11y/assistive-mml' ); MathJax-src-3.2.2/components/src/tex-chtml/tex-chtml.js000066400000000000000000000004501425015521000227550ustar00rootroot00000000000000import '../startup/init.js'; import './preload.js'; import '../core/core.js'; import '../input/tex/tex.js'; import '../output/chtml/chtml.js'; import '../output/chtml/fonts/tex/tex.js'; import '../ui/menu/menu.js'; import '../a11y/assistive-mml/assistive-mml.js'; import '../startup/startup.js'; MathJax-src-3.2.2/components/src/tex-chtml/webpack.config.js000066400000000000000000000005201425015521000237260ustar00rootroot00000000000000const PACKAGE = require('../../webpack.common.js'); module.exports = PACKAGE( 'tex-chtml', // the package to build '../../../js', // location of the MathJax js library [], // packages to link to __dirname // our directory ); MathJax-src-3.2.2/components/src/tex-mml-chtml/000077500000000000000000000000001425015521000212765ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/tex-mml-chtml/preload.js000066400000000000000000000003331425015521000232610ustar00rootroot00000000000000import {Loader} from '../../../js/components/loader.js'; Loader.preLoad( 'loader', 'startup', 'core', 'input/tex', 'input/mml', 'output/chtml', 'output/chtml/fonts/tex.js', 'ui/menu', 'a11y/assistive-mml' ); MathJax-src-3.2.2/components/src/tex-mml-chtml/tex-mml-chtml.js000066400000000000000000000005061425015521000243250ustar00rootroot00000000000000import '../startup/init.js'; import './preload.js'; import '../core/core.js'; import '../input/tex/tex.js'; import '../input/mml/mml.js'; import '../output/chtml/chtml.js'; import '../output/chtml/fonts/tex/tex.js'; import '../ui/menu/menu.js'; import '../a11y/assistive-mml/assistive-mml.js'; import '../startup/startup.js'; MathJax-src-3.2.2/components/src/tex-mml-chtml/webpack.config.js000066400000000000000000000005201425015521000245110ustar00rootroot00000000000000const PACKAGE = require('../../webpack.common.js'); module.exports = PACKAGE( 'tex-mml-chtml', // the package to build '../../../js', // location of the MathJax js library [], // packages to link to __dirname // our directory ); MathJax-src-3.2.2/components/src/tex-mml-svg/000077500000000000000000000000001425015521000207665ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/tex-mml-svg/preload.js000066400000000000000000000003271425015521000227540ustar00rootroot00000000000000import {Loader} from '../../../js/components/loader.js'; Loader.preLoad( 'loader', 'startup', 'core', 'input/tex', 'input/mml', 'output/svg', 'output/svg/fonts/tex.js', 'ui/menu', 'a11y/assistive-mml' ); MathJax-src-3.2.2/components/src/tex-mml-svg/tex-mml-svg.js000066400000000000000000000005001425015521000234770ustar00rootroot00000000000000import '../startup/init.js'; import './preload.js'; import '../core/core.js'; import '../input/tex/tex.js'; import '../input/mml/mml.js'; import '../output/svg/svg.js'; import '../output/svg/fonts/tex/tex.js'; import '../ui/menu/menu.js'; import '../a11y/assistive-mml/assistive-mml.js'; import '../startup/startup.js'; MathJax-src-3.2.2/components/src/tex-mml-svg/webpack.config.js000066400000000000000000000005201425015521000242010ustar00rootroot00000000000000const PACKAGE = require('../../webpack.common.js'); module.exports = PACKAGE( 'tex-mml-svg', // the package to build '../../../js', // location of the MathJax js library [], // packages to link to __dirname // our directory ); MathJax-src-3.2.2/components/src/tex-svg-full/000077500000000000000000000000001425015521000211435ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/tex-svg-full/preload.js000066400000000000000000000003171425015521000231300ustar00rootroot00000000000000import {Loader} from '../../../js/components/loader.js'; Loader.preLoad( 'loader', 'startup', 'core', 'input/tex-full', 'output/svg', 'output/svg/fonts/tex.js', 'ui/menu', 'a11y/assistive-mml' ); MathJax-src-3.2.2/components/src/tex-svg-full/tex-svg-full.js000066400000000000000000000004541425015521000240410ustar00rootroot00000000000000import '../startup/init.js'; import './preload.js'; import '../core/core.js'; import '../input/tex-full/tex-full.js'; import '../output/svg/svg.js'; import '../output/svg/fonts/tex/tex.js'; import '../ui/menu/menu.js'; import '../a11y/assistive-mml/assistive-mml.js'; import '../startup/startup.js'; MathJax-src-3.2.2/components/src/tex-svg-full/webpack.config.js000066400000000000000000000005201425015521000243560ustar00rootroot00000000000000const PACKAGE = require('../../webpack.common.js'); module.exports = PACKAGE( 'tex-svg-full', // the package to build '../../../js', // location of the MathJax js library [], // packages to link to __dirname // our directory ); MathJax-src-3.2.2/components/src/tex-svg/000077500000000000000000000000001425015521000202035ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/tex-svg/preload.js000066400000000000000000000003121425015521000221630ustar00rootroot00000000000000import {Loader} from '../../../js/components/loader.js'; Loader.preLoad( 'loader', 'startup', 'core', 'input/tex', 'output/svg', 'output/svg/fonts/tex.js', 'ui/menu', 'a11y/assistive-mml' ); MathJax-src-3.2.2/components/src/tex-svg/tex-svg.js000066400000000000000000000004421425015521000221360ustar00rootroot00000000000000import '../startup/init.js'; import './preload.js'; import '../core/core.js'; import '../input/tex/tex.js'; import '../output/svg/svg.js'; import '../output/svg/fonts/tex/tex.js'; import '../ui/menu/menu.js'; import '../a11y/assistive-mml/assistive-mml.js'; import '../startup/startup.js'; MathJax-src-3.2.2/components/src/tex-svg/webpack.config.js000066400000000000000000000005201425015521000234160ustar00rootroot00000000000000const PACKAGE = require('../../webpack.common.js'); module.exports = PACKAGE( 'tex-svg', // the package to build '../../../js', // location of the MathJax js library [], // packages to link to __dirname // our directory ); MathJax-src-3.2.2/components/src/ui/000077500000000000000000000000001425015521000172235ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/ui/lazy/000077500000000000000000000000001425015521000202025ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/ui/lazy/build.json000066400000000000000000000000701425015521000221710ustar00rootroot00000000000000{ "component": "ui/lazy", "targets": ["ui/lazy"] } MathJax-src-3.2.2/components/src/ui/lazy/lazy.js000066400000000000000000000002701425015521000215160ustar00rootroot00000000000000import './lib/lazy.js'; import {LazyHandler} from '../../../../js/ui/lazy/LazyHandler.js'; if (MathJax.startup) { MathJax.startup.extendHandler(handler => LazyHandler(handler)); } MathJax-src-3.2.2/components/src/ui/lazy/webpack.config.js000066400000000000000000000005661425015521000234270ustar00rootroot00000000000000const PACKAGE = require('../../../webpack.common.js'); module.exports = PACKAGE( 'ui/lazy', // the package to build '../../../../js', // location of the MathJax js library [ // packages to link to 'components/src/core/lib' ], __dirname // our directory ); MathJax-src-3.2.2/components/src/ui/menu/000077500000000000000000000000001425015521000201675ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/ui/menu/build.json000066400000000000000000000000671425015521000221640ustar00rootroot00000000000000{ "component": "ui/menu", "targets": ["ui/menu"] } MathJax-src-3.2.2/components/src/ui/menu/menu.js000066400000000000000000000003351425015521000214720ustar00rootroot00000000000000import './lib/menu.js'; import {MenuHandler} from '../../../../js/ui/menu/MenuHandler.js'; if (MathJax.startup && typeof window !== 'undefined') { MathJax.startup.extendHandler(handler => MenuHandler(handler), 20); } MathJax-src-3.2.2/components/src/ui/menu/webpack.config.js000066400000000000000000000005761425015521000234150ustar00rootroot00000000000000const PACKAGE = require('../../../webpack.common.js'); module.exports = PACKAGE( 'ui/menu', // the package to build '../../../../js', // location of the MathJax js library ['components/src/core/lib', 'node_modules/mj-context-menu/js'], // packages to link to __dirname // our directory ); MathJax-src-3.2.2/components/src/ui/safe/000077500000000000000000000000001425015521000201415ustar00rootroot00000000000000MathJax-src-3.2.2/components/src/ui/safe/build.json000066400000000000000000000000671425015521000221360ustar00rootroot00000000000000{ "component": "ui/safe", "targets": ["ui/safe"] } MathJax-src-3.2.2/components/src/ui/safe/safe.js000066400000000000000000000003311425015521000214120ustar00rootroot00000000000000import './lib/safe.js'; import {SafeHandler} from '../../../../js/ui/safe/SafeHandler.js'; if (MathJax.startup && typeof window !== 'undefined') { MathJax.startup.extendHandler(handler => SafeHandler(handler)); } MathJax-src-3.2.2/components/src/ui/safe/webpack.config.js000066400000000000000000000005231425015521000233570ustar00rootroot00000000000000const PACKAGE = require('../../../webpack.common.js'); module.exports = PACKAGE( 'ui/safe', // the package to build '../../../../js', // location of the MathJax js library ['components/src/core/lib'], // packages to link to __dirname // our directory ); MathJax-src-3.2.2/components/webpack.common.js000066400000000000000000000140451425015521000212640ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2018 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 Creates configurations for webpacking of MathJax components * * @author dpvc@mathjax.org (Davide Cervone) */ const fs = require('fs'); const path = require('path'); const webpack = require('webpack'); const TerserPlugin = require('terser-webpack-plugin'); /**************************************************************/ /** * @param {string} string The string whose special characters are to be escaped * @return {string} The string with regex special characters escaped */ function quoteRE(string) { return string.replace(/([\\.{}[\]()?*^$])/g, '\\$1') } /** * Creates the plugin needed for including jsdir in the output * * @param {string} js The location of the compiled js files * @param {string} dir The directory of the component being built * @return {any[]} The plugin array (empty or with the conversion plugin) */ const PLUGINS = function (js, dir) { const mjdir = path.resolve(__dirname, '..', 'js'); const jsdir = path.resolve(dir, js); // // Record the js directory for the pack command // return [new webpack.DefinePlugin({ __JSDIR__: jsdir })]; }; /** * Creates the plugin needed for converting mathjax references to component/lib references * * @param {string} js The location of the compiled js files * @param {string[]} lib The component library directories to be linked against * @param {string} dir The directory of the component being built * @return {any[]} The plugin array (empty or with the conversion plugin) */ const RESOLVE = function (js, libs, dir) { const mjdir = path.resolve(__dirname, '..', 'js'); const jsdir = path.resolve(dir, js); const mjRE = new RegExp('^(?:' + quoteRE(jsdir) + '|' + quoteRE(mjdir) + ')' + quoteRE(path.sep)); const root = path.dirname(mjdir); // // Add directory names to libraries // libs = libs.map(lib => path.join(lib.charAt(0) === '.' ? dir : root, lib) + path.sep); // // Function replace imported files by ones in the specified component lib directories. // const replaceLibs = (resource) => { // // The full file name to check. // const request = require.resolve( resource.request ? resource.request.charAt(0) === '.' ? path.resolve(resource.path, resource.request) : resource.request : resource.path ); // // Only check files in the MathJax js directory. // if (!request.match(mjRE)) return; // // Loop through the libraries and see if the imported file is there. // If so, replace the request with the library version and return. // for (const lib of libs) { const file = request.replace(mjRE, lib); if (fs.existsSync(file)) { resource.path = file; resource.request = undefined; return; } } } // // A plugin that looks for files and modules to see if they need replacing with library versions. // class ResolveReplacementPlugin { apply(compiler) { compiler.hooks.file.tap(ResolveReplacementPlugin.name, replaceLibs); compiler.hooks.module.tap(ResolveReplacementPlugin.name, replaceLibs); } } return {plugins: [new ResolveReplacementPlugin()]}; } /** * Add babel-loader to appropriate directories * * @param {string} dir The directory for the component being built * @return {any} The modules specification for the webpack configuration */ const MODULE = function (dir) { // // Only need to transpile our directory and components directory // const dirRE = (dir.substr(0, __dirname.length) === __dirname ? quoteRE(__dirname) : '(?:' + quoteRE(__dirname) + '|' + quoteRE(dir) + ')'); return { // NOTE: for babel transpilation rules: [{ test: new RegExp(dirRE + quoteRE(path.sep) + '.*\\.js$'), exclude: new RegExp(quoteRE(path.join(path.dirname(__dirname), 'es5') + path.sep)), use: { loader: 'babel-loader', options: { presets: ['@babel/env'] } } }] } }; /** * Create a webpack configuration for a distribution file * * @param {string} name The name of the component to create * @param {string} js The path to the compiled .js files * @param {string[]} libs Array of paths to component lib directories to link against * @param {string} dir The directory of the component buing built * @param {string} dist The path to the directory where the component .js file will be placed * (defaults to es5 in the same directory as the js directory) */ const PACKAGE = function (name, js, libs, dir, dist) { const distDir = dist ? path.resolve(dir, dist) : path.resolve(path.dirname(js), 'es5', path.dirname(name)); name = path.basename(name); return { name: name, entry: path.join(dir, name + '.js'), output: { path: distDir, filename: name + (dist === '.' ? '.min.js' : '.js') }, target: ['web', 'es5'], // needed for IE11 and old browsers plugins: PLUGINS(js, dir), resolve: RESOLVE(js, libs, dir), module: MODULE(dir), performance: { hints: false }, optimization: { minimize: true, minimizer: [new TerserPlugin({ extractComments: false, terserOptions: { output: { ascii_only: true } } })] }, mode: 'production' }; } module.exports = PACKAGE; MathJax-src-3.2.2/package-lock.json000066400000000000000000012540251425015521000170570ustar00rootroot00000000000000{ "name": "mathjax-full", "version": "3.2.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "mathjax-full", "version": "3.2.1", "license": "Apache-2.0", "dependencies": { "esm": "^3.2.25", "mhchemparser": "^4.1.0", "mj-context-menu": "^0.6.1", "speech-rule-engine": "^4.0.6" }, "devDependencies": { "@babel/core": "^7.17.12", "@babel/preset-env": "^7.17.12", "babel-loader": "^8.2.5", "copyfiles": "^2.4.1", "diff": "^5.0.0", "rimraf": "^3.0.2", "tape": "^5.5.3", "terser-webpack-plugin": "^5.3.1", "tslint": "^6.1.3", "tslint-jsdoc-rules": "^0.2.0", "tslint-unix-formatter": "^0.2.0", "typescript": "^4.6.4", "typescript-tools": "^0.3.1", "webpack": "^5.72.1", "webpack-cli": "^4.9.2" } }, "node_modules/@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@babel/code-frame": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "dev": true, "dependencies": { "@babel/highlight": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { "version": "7.17.10", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz", "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.12.tgz", "integrity": "sha512-44ODe6O1IVz9s2oJE3rZ4trNNKTX9O7KpQpfAP4t8QII/zwrVRHL7i2pxhqtcY7tqMLrrKfMlBKnm1QlrRFs5w==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", "@babel/generator": "^7.17.12", "@babel/helper-compilation-targets": "^7.17.10", "@babel/helper-module-transforms": "^7.17.12", "@babel/helpers": "^7.17.9", "@babel/parser": "^7.17.12", "@babel/template": "^7.16.7", "@babel/traverse": "^7.17.12", "@babel/types": "^7.17.12", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.1", "semver": "^6.3.0" }, "engines": { "node": ">=6.9.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/babel" } }, "node_modules/@babel/generator": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.12.tgz", "integrity": "sha512-V49KtZiiiLjH/CnIW6OjJdrenrGoyh6AmKQ3k2AZFKozC1h846Q4NYlZ5nqAigPDUXfGzC88+LOUuG8yKd2kCw==", "dev": true, "dependencies": { "@babel/types": "^7.17.12", "@jridgewell/gen-mapping": "^0.3.0", "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@babel/helper-annotate-as-pure": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", "dev": true, "dependencies": { "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", "dev": true, "dependencies": { "@babel/helper-explode-assignable-expression": "^7.16.7", "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { "version": "7.17.10", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.10.tgz", "integrity": "sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==", "dev": true, "dependencies": { "@babel/compat-data": "^7.17.10", "@babel/helper-validator-option": "^7.16.7", "browserslist": "^4.20.2", "semver": "^6.3.0" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.12.tgz", "integrity": "sha512-sZoOeUTkFJMyhqCei2+Z+wtH/BehW8NVKQt7IRUQlRiOARuXymJYfN/FCcI8CvVbR0XVyDM6eLFOlR7YtiXnew==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-function-name": "^7.17.9", "@babel/helper-member-expression-to-functions": "^7.17.7", "@babel/helper-optimise-call-expression": "^7.16.7", "@babel/helper-replace-supers": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-create-regexp-features-plugin": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz", "integrity": "sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.7", "regexpu-core": "^5.0.1" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-define-polyfill-provider": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.13.0", "@babel/helper-module-imports": "^7.12.13", "@babel/helper-plugin-utils": "^7.13.0", "@babel/traverse": "^7.13.0", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", "resolve": "^1.14.2", "semver": "^6.1.2" }, "peerDependencies": { "@babel/core": "^7.4.0-0" } }, "node_modules/@babel/helper-environment-visitor": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", "dev": true, "dependencies": { "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-explode-assignable-expression": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", "dev": true, "dependencies": { "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { "version": "7.17.9", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", "dev": true, "dependencies": { "@babel/template": "^7.16.7", "@babel/types": "^7.17.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", "dev": true, "dependencies": { "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.17.7", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", "dev": true, "dependencies": { "@babel/types": "^7.17.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", "dev": true, "dependencies": { "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.12.tgz", "integrity": "sha512-t5s2BeSWIghhFRPh9XMn6EIGmvn8Lmw5RVASJzkIx1mSemubQQBNIZiQD7WzaFmaHIrjAec4x8z9Yx8SjJ1/LA==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-module-imports": "^7.16.7", "@babel/helper-simple-access": "^7.17.7", "@babel/helper-split-export-declaration": "^7.16.7", "@babel/helper-validator-identifier": "^7.16.7", "@babel/template": "^7.16.7", "@babel/traverse": "^7.17.12", "@babel/types": "^7.17.12" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-optimise-call-expression": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", "dev": true, "dependencies": { "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { "version": "7.16.8", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-wrap-function": "^7.16.8", "@babel/types": "^7.16.8" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-replace-supers": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-member-expression-to-functions": "^7.16.7", "@babel/helper-optimise-call-expression": "^7.16.7", "@babel/traverse": "^7.16.7", "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { "version": "7.17.7", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", "dev": true, "dependencies": { "@babel/types": "^7.17.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", "dev": true, "dependencies": { "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", "dev": true, "dependencies": { "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { "version": "7.16.8", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", "dev": true, "dependencies": { "@babel/helper-function-name": "^7.16.7", "@babel/template": "^7.16.7", "@babel/traverse": "^7.16.8", "@babel/types": "^7.16.8" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { "version": "7.17.9", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", "dev": true, "dependencies": { "@babel/template": "^7.16.7", "@babel/traverse": "^7.17.9", "@babel/types": "^7.17.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.12.tgz", "integrity": "sha512-FLzHmN9V3AJIrWfOpvRlZCeVg/WLdicSnTMsLur6uDj9TT8ymUlG9XxURdW/XvuygK+2CW0poOJABdA4m/YKxA==", "dev": true, "bin": { "parser": "bin/babel-parser.js" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.17.12.tgz", "integrity": "sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz", "integrity": "sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", "@babel/plugin-proposal-optional-chaining": "^7.17.12" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.13.0" } }, "node_modules/@babel/plugin-proposal-async-generator-functions": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.17.12.tgz", "integrity": "sha512-RWVvqD1ooLKP6IqWTA5GyFVX2isGEgC5iFxKzfYOIy/QEFdxYyCybBDtIGjipHpb9bDWHzcqGqFakf+mVmBTdQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-remap-async-to-generator": "^7.16.8", "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-class-properties": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz", "integrity": "sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw==", "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.17.12", "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-class-static-block": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.12.tgz", "integrity": "sha512-8ILyDG6eL14F8iub97dVc8q35Md0PJYAnA5Kz9NACFOkt6ffCcr0FISyUPKHsvuAy36fkpIitxZ9bVYPFMGQHA==", "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.17.12", "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.12.0" } }, "node_modules/@babel/plugin-proposal-dynamic-import": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-export-namespace-from": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz", "integrity": "sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-json-strings": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz", "integrity": "sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-logical-assignment-operators": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz", "integrity": "sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz", "integrity": "sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-numeric-separator": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-object-rest-spread": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.12.tgz", "integrity": "sha512-6l9cO3YXXRh4yPCPRA776ZyJ3RobG4ZKJZhp7NDRbKIOeV3dBPG8FXCF7ZtiO2RTCIOkQOph1xDDcc01iWVNjQ==", "dev": true, "dependencies": { "@babel/compat-data": "^7.17.10", "@babel/helper-compilation-targets": "^7.17.10", "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-transform-parameters": "^7.17.12" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-optional-catch-binding": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-optional-chaining": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz", "integrity": "sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-private-methods": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz", "integrity": "sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A==", "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.17.12", "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz", "integrity": "sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-create-class-features-plugin": "^7.17.12", "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-unicode-property-regex": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz", "integrity": "sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A==", "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.17.12", "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-class-static-block": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz", "integrity": "sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-async-to-generator": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.17.12.tgz", "integrity": "sha512-J8dbrWIOO3orDzir57NRsjg4uxucvhby0L/KZuGsWDj0g7twWK3g7JhJhOrXtuXiw8MeiSdJ3E0OW9H8LYEzLQ==", "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.16.7", "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-remap-async-to-generator": "^7.16.8" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-block-scoping": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.17.12.tgz", "integrity": "sha512-jw8XW/B1i7Lqwqj2CbrViPcZijSxfguBWZP2aN59NHgxUyO/OcO1mfdCxH13QhN5LbWhPkX+f+brKGhZTiqtZQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-classes": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.17.12.tgz", "integrity": "sha512-cvO7lc7pZat6BsvH6l/EGaI8zpl8paICaoGk+7x7guvtfak/TbIf66nYmJOH13EuG0H+Xx3M+9LQDtSvZFKXKw==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-function-name": "^7.17.9", "@babel/helper-optimise-call-expression": "^7.16.7", "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-replace-supers": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz", "integrity": "sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-destructuring": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.12.tgz", "integrity": "sha512-P8pt0YiKtX5UMUL5Xzsc9Oyij+pJE6JuC+F1k0/brq/OOGs5jDa1If3OY0LRWGvJsJhI+8tsiecL3nJLc0WTlg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-dotall-regex": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.16.7", "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-duplicate-keys": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz", "integrity": "sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", "dev": true, "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-for-of": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.17.12.tgz", "integrity": "sha512-76lTwYaCxw8ldT7tNmye4LLwSoKDbRCBzu6n/DcK/P3FOR29+38CIIaVIZfwol9By8W/QHORYEnYSLuvcQKrsg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-function-name": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.16.7", "@babel/helper-function-name": "^7.16.7", "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-literals": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz", "integrity": "sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-member-expression-literals": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-amd": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.17.12.tgz", "integrity": "sha512-p5rt9tB5Ndcc2Za7CeNxVf7YAjRcUMR6yi8o8tKjb9KhRkEvXwa+C0hj6DA5bVDkKRxB0NYhMUGbVKoFu4+zEA==", "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.17.12", "@babel/helper-plugin-utils": "^7.17.12", "babel-plugin-dynamic-import-node": "^2.3.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-commonjs": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.12.tgz", "integrity": "sha512-tVPs6MImAJz+DiX8Y1xXEMdTk5Lwxu9jiPjlS+nv5M2A59R7+/d1+9A8C/sbuY0b3QjIxqClkj6KAplEtRvzaA==", "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.17.12", "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-simple-access": "^7.17.7", "babel-plugin-dynamic-import-node": "^2.3.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-systemjs": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.12.tgz", "integrity": "sha512-NVhDb0q00hqZcuLduUf/kMzbOQHiocmPbIxIvk23HLiEqaTKC/l4eRxeC7lO63M72BmACoiKOcb9AkOAJRerpw==", "dev": true, "dependencies": { "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-module-transforms": "^7.17.12", "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-validator-identifier": "^7.16.7", "babel-plugin-dynamic-import-node": "^2.3.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-umd": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.17.12.tgz", "integrity": "sha512-BnsPkrUHsjzZGpnrmJeDFkOMMljWFHPjDc9xDcz71/C+ybF3lfC3V4m3dwXPLZrE5b3bgd4V+3/Pj+3620d7IA==", "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.17.12", "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz", "integrity": "sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA==", "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.17.12", "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-transform-new-target": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.17.12.tgz", "integrity": "sha512-CaOtzk2fDYisbjAD4Sd1MTKGVIpRtx9bWLyj24Y/k6p4s4gQ3CqDGJauFJxt8M/LEx003d0i3klVqnN73qvK3w==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-object-super": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.16.7", "@babel/helper-replace-supers": "^7.16.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-parameters": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz", "integrity": "sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-property-literals": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-regenerator": { "version": "7.17.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.17.9.tgz", "integrity": "sha512-Lc2TfbxR1HOyn/c6b4Y/b6NHoTb67n/IoWLxTu4kC7h4KQnWlhCq2S8Tx0t2SVvv5Uu87Hs+6JEJ5kt2tYGylQ==", "dev": true, "dependencies": { "regenerator-transform": "^0.15.0" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-reserved-words": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz", "integrity": "sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-spread": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz", "integrity": "sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-sticky-regex": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-template-literals": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.17.12.tgz", "integrity": "sha512-kAKJ7DX1dSRa2s7WN1xUAuaQmkTpN+uig4wCKWivVXIObqGbVTUlSavHyfI2iZvz89GFAMGm9p2DBJ4Y1Tp0hw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-typeof-symbol": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz", "integrity": "sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.17.12" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-unicode-escapes": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-unicode-regex": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.16.7", "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/preset-env": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.17.12.tgz", "integrity": "sha512-Kke30Rj3Lmcx97bVs71LO0s8M6FmJ7tUAQI9fNId62rf0cYG1UAWwdNO9/sE0/pLEahAw1MqMorymoD12bj5Fg==", "dev": true, "dependencies": { "@babel/compat-data": "^7.17.10", "@babel/helper-compilation-targets": "^7.17.10", "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-validator-option": "^7.16.7", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.17.12", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.17.12", "@babel/plugin-proposal-async-generator-functions": "^7.17.12", "@babel/plugin-proposal-class-properties": "^7.17.12", "@babel/plugin-proposal-class-static-block": "^7.17.12", "@babel/plugin-proposal-dynamic-import": "^7.16.7", "@babel/plugin-proposal-export-namespace-from": "^7.17.12", "@babel/plugin-proposal-json-strings": "^7.17.12", "@babel/plugin-proposal-logical-assignment-operators": "^7.17.12", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.17.12", "@babel/plugin-proposal-numeric-separator": "^7.16.7", "@babel/plugin-proposal-object-rest-spread": "^7.17.12", "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", "@babel/plugin-proposal-optional-chaining": "^7.17.12", "@babel/plugin-proposal-private-methods": "^7.17.12", "@babel/plugin-proposal-private-property-in-object": "^7.17.12", "@babel/plugin-proposal-unicode-property-regex": "^7.17.12", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-transform-arrow-functions": "^7.17.12", "@babel/plugin-transform-async-to-generator": "^7.17.12", "@babel/plugin-transform-block-scoped-functions": "^7.16.7", "@babel/plugin-transform-block-scoping": "^7.17.12", "@babel/plugin-transform-classes": "^7.17.12", "@babel/plugin-transform-computed-properties": "^7.17.12", "@babel/plugin-transform-destructuring": "^7.17.12", "@babel/plugin-transform-dotall-regex": "^7.16.7", "@babel/plugin-transform-duplicate-keys": "^7.17.12", "@babel/plugin-transform-exponentiation-operator": "^7.16.7", "@babel/plugin-transform-for-of": "^7.17.12", "@babel/plugin-transform-function-name": "^7.16.7", "@babel/plugin-transform-literals": "^7.17.12", "@babel/plugin-transform-member-expression-literals": "^7.16.7", "@babel/plugin-transform-modules-amd": "^7.17.12", "@babel/plugin-transform-modules-commonjs": "^7.17.12", "@babel/plugin-transform-modules-systemjs": "^7.17.12", "@babel/plugin-transform-modules-umd": "^7.17.12", "@babel/plugin-transform-named-capturing-groups-regex": "^7.17.12", "@babel/plugin-transform-new-target": "^7.17.12", "@babel/plugin-transform-object-super": "^7.16.7", "@babel/plugin-transform-parameters": "^7.17.12", "@babel/plugin-transform-property-literals": "^7.16.7", "@babel/plugin-transform-regenerator": "^7.17.9", "@babel/plugin-transform-reserved-words": "^7.17.12", "@babel/plugin-transform-shorthand-properties": "^7.16.7", "@babel/plugin-transform-spread": "^7.17.12", "@babel/plugin-transform-sticky-regex": "^7.16.7", "@babel/plugin-transform-template-literals": "^7.17.12", "@babel/plugin-transform-typeof-symbol": "^7.17.12", "@babel/plugin-transform-unicode-escapes": "^7.16.7", "@babel/plugin-transform-unicode-regex": "^7.16.7", "@babel/preset-modules": "^0.1.5", "@babel/types": "^7.17.12", "babel-plugin-polyfill-corejs2": "^0.3.0", "babel-plugin-polyfill-corejs3": "^0.5.0", "babel-plugin-polyfill-regenerator": "^0.3.0", "core-js-compat": "^3.22.1", "semver": "^6.3.0" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/preset-modules": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", "@babel/plugin-transform-dotall-regex": "^7.4.4", "@babel/types": "^7.4.4", "esutils": "^2.0.2" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/runtime": { "version": "7.17.9", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz", "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", "dev": true, "dependencies": { "regenerator-runtime": "^0.13.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", "dev": true, "dependencies": { "@babel/code-frame": "^7.16.7", "@babel/parser": "^7.16.7", "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.12.tgz", "integrity": "sha512-zULPs+TbCvOkIFd4FrG53xrpxvCBwLIgo6tO0tJorY7YV2IWFxUfS/lXDJbGgfyYt9ery/Gxj2niwttNnB0gIw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.16.7", "@babel/generator": "^7.17.12", "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-function-name": "^7.17.9", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", "@babel/parser": "^7.17.12", "@babel/types": "^7.17.12", "debug": "^4.1.0", "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz", "integrity": "sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==", "dev": true, "engines": { "node": ">=10.0.0" } }, "node_modules/@jridgewell/gen-mapping": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.13", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", "dev": true }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "node_modules/@types/eslint": { "version": "8.2.2", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.2.2.tgz", "integrity": "sha512-nQxgB8/Sg+QKhnV8e0WzPpxjIGT3tuJDDzybkDi8ItE/IgTlHo07U0shaIjzhcvQxlq9SDRE42lsJ23uvEgJ2A==", "dev": true, "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, "node_modules/@types/eslint-scope": { "version": "3.7.3", "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", "dev": true, "dependencies": { "@types/eslint": "*", "@types/estree": "*" } }, "node_modules/@types/estree": { "version": "0.0.51", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", "dev": true }, "node_modules/@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, "node_modules/@types/node": { "version": "17.0.9", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.9.tgz", "integrity": "sha512-5dNBXu/FOER+EXnyah7rn8xlNrfMOQb/qXnw4NQgLkCygKBKhdmF/CA5oXVOKZLBEahw8s2WP9LxIcN/oDDRgQ==", "dev": true }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "dev": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", "dev": true }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", "dev": true }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "dev": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "dev": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", "@webassemblyjs/wasm-gen": "1.11.1" } }, "node_modules/@webassemblyjs/ieee754": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "dev": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "dev": true, "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "dev": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", "@webassemblyjs/helper-wasm-section": "1.11.1", "@webassemblyjs/wasm-gen": "1.11.1", "@webassemblyjs/wasm-opt": "1.11.1", "@webassemblyjs/wasm-parser": "1.11.1", "@webassemblyjs/wast-printer": "1.11.1" } }, "node_modules/@webassemblyjs/wasm-gen": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "dev": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", "@webassemblyjs/ieee754": "1.11.1", "@webassemblyjs/leb128": "1.11.1", "@webassemblyjs/utf8": "1.11.1" } }, "node_modules/@webassemblyjs/wasm-opt": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "dev": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", "@webassemblyjs/wasm-gen": "1.11.1", "@webassemblyjs/wasm-parser": "1.11.1" } }, "node_modules/@webassemblyjs/wasm-parser": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "dev": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", "@webassemblyjs/ieee754": "1.11.1", "@webassemblyjs/leb128": "1.11.1", "@webassemblyjs/utf8": "1.11.1" } }, "node_modules/@webassemblyjs/wast-printer": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "dev": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" } }, "node_modules/@webpack-cli/configtest": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz", "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==", "dev": true, "peerDependencies": { "webpack": "4.x.x || 5.x.x", "webpack-cli": "4.x.x" } }, "node_modules/@webpack-cli/info": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.1.tgz", "integrity": "sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA==", "dev": true, "dependencies": { "envinfo": "^7.7.3" }, "peerDependencies": { "webpack-cli": "4.x.x" } }, "node_modules/@webpack-cli/serve": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz", "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==", "dev": true, "peerDependencies": { "webpack-cli": "4.x.x" }, "peerDependenciesMeta": { "webpack-dev-server": { "optional": true } } }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true }, "node_modules/@xtuc/long": { "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 }, "node_modules/acorn": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", "dev": true, "bin": { "acorn": "bin/acorn" }, "engines": { "node": ">=0.4.0" } }, "node_modules/acorn-import-assertions": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", "dev": true, "peerDependencies": { "acorn": "^8" } }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, "peerDependencies": { "ajv": "^6.9.1" } }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/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, "dependencies": { "color-convert": "^1.9.0" }, "engines": { "node": ">=4" } }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "dependencies": { "sprintf-js": "~1.0.2" } }, "node_modules/array.prototype.every": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/array.prototype.every/-/array.prototype.every-1.1.3.tgz", "integrity": "sha512-vWnriJI//SOMOWtXbU/VXhJ/InfnNHPF6BLKn5WfY8xXy+NWql0fUy20GO3sdqBhCAO+qw8S/E5nJiZX+QFdCA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.0", "is-string": "^1.0.7" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/babel-loader": { "version": "8.2.5", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", "dev": true, "dependencies": { "find-cache-dir": "^3.3.1", "loader-utils": "^2.0.0", "make-dir": "^3.1.0", "schema-utils": "^2.6.5" }, "engines": { "node": ">= 8.9" }, "peerDependencies": { "@babel/core": "^7.0.0", "webpack": ">=2" } }, "node_modules/babel-plugin-dynamic-import-node": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dev": true, "dependencies": { "object.assign": "^4.1.0" } }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", "dev": true, "dependencies": { "@babel/compat-data": "^7.13.11", "@babel/helper-define-polyfill-provider": "^0.3.1", "semver": "^6.1.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.1.tgz", "integrity": "sha512-TihqEe4sQcb/QcPJvxe94/9RZuLQuF1+To4WqQcRvc+3J3gLCPIPgDKzGLG6zmQLfH3nn25heRuDNkS2KR4I8A==", "dev": true, "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.1", "core-js-compat": "^3.20.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/babel-plugin-polyfill-regenerator": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", "dev": true, "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "node_modules/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, "engines": { "node": "*" } }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/browserslist": { "version": "4.20.3", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", "dev": true, "funding": [ { "type": "opencollective", "url": "https://opencollective.com/browserslist" }, { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" } ], "dependencies": { "caniuse-lite": "^1.0.30001332", "electron-to-chromium": "^1.4.118", "escalade": "^3.1.1", "node-releases": "^2.0.3", "picocolors": "^1.0.0" }, "bin": { "browserslist": "cli.js" }, "engines": { "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, "node_modules/builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/caniuse-lite": { "version": "1.0.30001341", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001341.tgz", "integrity": "sha512-2SodVrFFtvGENGCv0ChVJIDQ0KPaS1cg7/qtfMaICgeMolDdo/Z2OD32F0Aq9yl6F4YFwGPBS5AaPqNYiW4PoA==", "dev": true, "funding": [ { "type": "opencollective", "url": "https://opencollective.com/browserslist" }, { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" } ] }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" }, "engines": { "node": ">=4" } }, "node_modules/chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true, "engines": { "node": ">=6.0" } }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", "shallow-clone": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "dependencies": { "color-name": "1.1.3" } }, "node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "node_modules/colorette": { "version": "2.0.16", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", "dev": true }, "node_modules/commander": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-9.2.0.tgz", "integrity": "sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==", "engines": { "node": "^12.20.0 || >=14" } }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "node_modules/convert-source-map": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "dependencies": { "safe-buffer": "~5.1.1" } }, "node_modules/copyfiles": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-2.4.1.tgz", "integrity": "sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==", "dev": true, "dependencies": { "glob": "^7.0.5", "minimatch": "^3.0.3", "mkdirp": "^1.0.4", "noms": "0.0.0", "through2": "^2.0.1", "untildify": "^4.0.0", "yargs": "^16.1.0" }, "bin": { "copyfiles": "copyfiles", "copyup": "copyfiles" } }, "node_modules/copyfiles/node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" }, "engines": { "node": ">=10" } }, "node_modules/copyfiles/node_modules/yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/core-js-compat": { "version": "3.22.5", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.22.5.tgz", "integrity": "sha512-rEF75n3QtInrYICvJjrAgV03HwKiYvtKHdPtaba1KucG+cNZ4NJnH9isqt979e67KZlhpbCOTwnsvnIr+CVeOg==", "dev": true, "dependencies": { "browserslist": "^4.20.3", "semver": "7.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, "node_modules/core-js-compat/node_modules/semver": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" }, "engines": { "node": ">= 8" } }, "node_modules/debug": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "dependencies": { "ms": "2.1.2" }, "engines": { "node": ">=6.0" }, "peerDependenciesMeta": { "supports-color": { "optional": true } } }, "node_modules/deep-equal": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.5.tgz", "integrity": "sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==", "dev": true, "dependencies": { "call-bind": "^1.0.0", "es-get-iterator": "^1.1.1", "get-intrinsic": "^1.0.1", "is-arguments": "^1.0.4", "is-date-object": "^1.0.2", "is-regex": "^1.1.1", "isarray": "^2.0.5", "object-is": "^1.1.4", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "regexp.prototype.flags": "^1.3.0", "side-channel": "^1.0.3", "which-boxed-primitive": "^1.0.1", "which-collection": "^1.0.1", "which-typed-array": "^1.1.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/deep-equal/node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true }, "node_modules/define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "dependencies": { "object-keys": "^1.0.12" }, "engines": { "node": ">= 0.4" } }, "node_modules/defined": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true }, "node_modules/diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true, "engines": { "node": ">=0.3.1" } }, "node_modules/dotignore": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz", "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==", "dev": true, "dependencies": { "minimatch": "^3.0.4" }, "bin": { "ignored": "bin/ignored" } }, "node_modules/electron-to-chromium": { "version": "1.4.137", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz", "integrity": "sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA==", "dev": true }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "node_modules/emojis-list": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true, "engines": { "node": ">= 4" } }, "node_modules/enhanced-resolve": { "version": "5.9.3", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz", "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" }, "engines": { "node": ">=10.13.0" } }, "node_modules/envinfo": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", "dev": true, "bin": { "envinfo": "dist/cli.js" }, "engines": { "node": ">=4" } }, "node_modules/es-abstract": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "get-intrinsic": "^1.1.1", "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-symbols": "^1.0.2", "internal-slot": "^1.0.3", "is-callable": "^1.2.4", "is-negative-zero": "^2.0.1", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.1", "is-string": "^1.0.7", "is-weakref": "^1.0.1", "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", "string.prototype.trimstart": "^1.0.4", "unbox-primitive": "^1.0.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/es-get-iterator": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.0", "has-symbols": "^1.0.1", "is-arguments": "^1.1.0", "is-map": "^2.0.2", "is-set": "^2.0.2", "is-string": "^1.0.5", "isarray": "^2.0.5" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/es-get-iterator/node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true }, "node_modules/es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", "dev": true }, "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, "engines": { "node": ">=0.8.0" } }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/esm": { "version": "3.2.25", "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", "engines": { "node": ">=6" } }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" }, "engines": { "node": ">=4" } }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "dependencies": { "estraverse": "^5.2.0" }, "engines": { "node": ">=4.0" } }, "node_modules/esrecurse/node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { "node": ">=4.0" } }, "node_modules/estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, "engines": { "node": ">=4.0" } }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, "engines": { "node": ">=0.8.x" } }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, "node_modules/fastest-levenshtein": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", "dev": true }, "node_modules/find-cache-dir": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, "dependencies": { "commondir": "^1.0.1", "make-dir": "^3.0.2", "pkg-dir": "^4.1.0" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, "node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, "dependencies": { "is-callable": "^1.1.3" } }, "node_modules/foreach": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", "dev": true }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/get-caller-file": { "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, "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-intrinsic": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, "engines": { "node": ">=8.0.0" } }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "dependencies": { "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" }, "engines": { "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "dependencies": { "function-bind": "^1.1.1" }, "engines": { "node": ">= 0.4.0" } }, "node_modules/has-bigints": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-dynamic-import": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-dynamic-import/-/has-dynamic-import-2.0.1.tgz", "integrity": "sha512-X3fbtsZmwb6W7fJGR9o7x65fZoodygCrZ3TVycvghP62yYQfS0t4RS0Qcz+j5tQYUKeSWS09tHkWW6WhFV3XhQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/has-symbols": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, "engines": { "node": ">=10.17.0" } }, "node_modules/import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" }, "bin": { "import-local-fixture": "fixtures/cli.js" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "node_modules/internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "dev": true, "dependencies": { "get-intrinsic": "^1.1.0", "has": "^1.0.3", "side-channel": "^1.0.4" }, "engines": { "node": ">= 0.4" } }, "node_modules/interpret": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", "dev": true, "engines": { "node": ">= 0.10" } }, "node_modules/is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "dependencies": { "has-bigints": "^1.0.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-callable": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-core-module": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", "dev": true, "dependencies": { "has": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/is-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-number-object": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "dependencies": { "isobject": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-set": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-shared-array-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-symbol": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-typed-array": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz", "integrity": "sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==", "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "es-abstract": "^1.18.5", "foreach": "^2.0.5", "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-weakmap": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-weakset": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/jest-worker": { "version": "27.4.6", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.6.tgz", "integrity": "sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw==", "dev": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, "engines": { "node": ">= 10.13.0" } }, "node_modules/jest-worker/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, "node_modules/js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true, "bin": { "jsesc": "bin/jsesc" }, "engines": { "node": ">=4" } }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "node_modules/json5": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", "dev": true, "bin": { "json5": "lib/cli.js" }, "engines": { "node": ">=6" } }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/loader-runner": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", "dev": true, "engines": { "node": ">=6.11.5" } }, "node_modules/loader-utils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", "dev": true, "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", "json5": "^2.1.2" }, "engines": { "node": ">=8.9.0" } }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { "p-locate": "^4.1.0" }, "engines": { "node": ">=8" } }, "node_modules/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 }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "dependencies": { "semver": "^6.0.0" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, "node_modules/mhchemparser": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/mhchemparser/-/mhchemparser-4.1.1.tgz", "integrity": "sha512-R75CUN6O6e1t8bgailrF1qPq+HhVeFTM3XQ0uzI+mXTybmphy3b6h4NbLOYhemViQ3lUs+6CKRkC3Ws1TlYREA==" }, "node_modules/mime-db": { "version": "1.51.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.34", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dev": true, "dependencies": { "mime-db": "1.51.0" }, "engines": { "node": ">= 0.6" } }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, "engines": { "node": "*" } }, "node_modules/minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "node_modules/mj-context-menu": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/mj-context-menu/-/mj-context-menu-0.6.1.tgz", "integrity": "sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA==" }, "node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, "bin": { "mkdirp": "bin/cmd.js" }, "engines": { "node": ">=10" } }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, "node_modules/node-releases": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==", "dev": true }, "node_modules/noms": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz", "integrity": "sha1-2o69nzr51nYJGbJ9nNyAkqczKFk=", "dev": true, "dependencies": { "inherits": "^2.0.1", "readable-stream": "~1.0.31" } }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "dependencies": { "path-key": "^3.0.0" }, "engines": { "node": ">=8" } }, "node_modules/object-inspect": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-is": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", "has-symbols": "^1.0.1", "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "dependencies": { "wrappy": "1" } }, "node_modules/onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "dependencies": { "mimic-fn": "^2.1.0" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { "p-try": "^2.0.0" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "dependencies": { "p-limit": "^2.2.0" }, "engines": { "node": ">=8" } }, "node_modules/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, "engines": { "node": ">=6" } }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "dependencies": { "find-up": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "dependencies": { "safe-buffer": "^5.1.0" } }, "node_modules/readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", "isarray": "0.0.1", "string_decoder": "~0.10.x" } }, "node_modules/rechoir": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", "dev": true, "dependencies": { "resolve": "^1.9.0" }, "engines": { "node": ">= 0.10" } }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, "node_modules/regenerate-unicode-properties": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", "dev": true, "dependencies": { "regenerate": "^1.4.2" }, "engines": { "node": ">=4" } }, "node_modules/regenerator-runtime": { "version": "0.13.9", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true }, "node_modules/regenerator-transform": { "version": "0.15.0", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", "dev": true, "dependencies": { "@babel/runtime": "^7.8.4" } }, "node_modules/regexp.prototype.flags": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz", "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/regexpu-core": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", "dev": true, "dependencies": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.0.1", "regjsgen": "^0.6.0", "regjsparser": "^0.8.2", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/regjsgen": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", "dev": true }, "node_modules/regjsparser": { "version": "0.8.4", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", "dev": true, "dependencies": { "jsesc": "~0.5.0" }, "bin": { "regjsparser": "bin/parser" } }, "node_modules/regjsparser/node_modules/jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true, "bin": { "jsesc": "bin/jsesc" } }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/resolve": { "version": "1.21.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", "dev": true, "dependencies": { "is-core-module": "^2.8.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "dependencies": { "resolve-from": "^5.0.0" }, "engines": { "node": ">=8" } }, "node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/resumer": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", "dev": true, "dependencies": { "through": "~2.3.4" } }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, "node_modules/schema-utils": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.5", "ajv": "^6.12.4", "ajv-keywords": "^3.5.2" }, "engines": { "node": ">= 8.9.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" } }, "node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "dependencies": { "kind-of": "^6.0.2" }, "engines": { "node": ">=8" } }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, "engines": { "node": ">=8" } }, "node_modules/shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", "object-inspect": "^1.9.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/signal-exit": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", "dev": true }, "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "node_modules/source-map-support/node_modules/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, "engines": { "node": ">=0.10.0" } }, "node_modules/speech-rule-engine": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/speech-rule-engine/-/speech-rule-engine-4.0.6.tgz", "integrity": "sha512-Hqa4ywf7d3lX2YsnnE8BeEdqFyaTwPSyyVhVGWZlQw4XVh0NCijyVsMZD3I9HsG5JBuDXyRaMVVNZcGJlKbZxA==", "dependencies": { "commander": "9.2.0", "wicked-good-xpath": "1.3.0", "xmldom-sre": "0.1.31" }, "bin": { "sre": "bin/sre" } }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, "node_modules/string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, "node_modules/string.prototype.trim": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.5.tgz", "integrity": "sha512-Lnh17webJVsD6ECeovpVN17RlAKjmz4rF9S+8Y45CkMc/ufVpTkU3vZIyIC7sllQ1FCvObZnnCdNs/HXTUOTlg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimend": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/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, "dependencies": { "has-flag": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/tape": { "version": "5.5.3", "resolved": "https://registry.npmjs.org/tape/-/tape-5.5.3.tgz", "integrity": "sha512-hPBJZBL9S7bH9vECg/KSM24slGYV589jJr4dmtiJrLD71AL66+8o4b9HdZazXZyvnilqA7eE8z5/flKiy0KsBg==", "dev": true, "dependencies": { "array.prototype.every": "^1.1.3", "call-bind": "^1.0.2", "deep-equal": "^2.0.5", "defined": "^1.0.0", "dotignore": "^0.1.2", "for-each": "^0.3.3", "get-package-type": "^0.1.0", "glob": "^7.2.0", "has": "^1.0.3", "has-dynamic-import": "^2.0.1", "inherits": "^2.0.4", "is-regex": "^1.1.4", "minimist": "^1.2.6", "object-inspect": "^1.12.0", "object-is": "^1.1.5", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "resolve": "^2.0.0-next.3", "resumer": "^0.0.0", "string.prototype.trim": "^1.2.5", "through": "^2.3.8" }, "bin": { "tape": "bin/tape" } }, "node_modules/tape/node_modules/resolve": { "version": "2.0.0-next.3", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", "dev": true, "dependencies": { "is-core-module": "^2.2.0", "path-parse": "^1.0.6" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/terser": { "version": "5.10.0", "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", "dev": true, "dependencies": { "commander": "^2.20.0", "source-map": "~0.7.2", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" }, "engines": { "node": ">=10" }, "peerDependencies": { "acorn": "^8.5.0" }, "peerDependenciesMeta": { "acorn": { "optional": true } } }, "node_modules/terser-webpack-plugin": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz", "integrity": "sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==", "dev": true, "dependencies": { "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.0", "source-map": "^0.6.1", "terser": "^5.7.2" }, "engines": { "node": ">= 10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { "webpack": "^5.1.0" }, "peerDependenciesMeta": { "@swc/core": { "optional": true }, "esbuild": { "optional": true }, "uglify-js": { "optional": true } } }, "node_modules/terser-webpack-plugin/node_modules/schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, "engines": { "node": ">= 10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" } }, "node_modules/terser-webpack-plugin/node_modules/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, "engines": { "node": ">=0.10.0" } }, "node_modules/terser/node_modules/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 }, "node_modules/terser/node_modules/source-map": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true, "engines": { "node": ">= 8" } }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, "node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" } }, "node_modules/through2/node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "node_modules/through2/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "node_modules/through2/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, "node_modules/tslint": { "version": "6.1.3", "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", "deprecated": "TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information.", "dev": true, "dependencies": { "@babel/code-frame": "^7.0.0", "builtin-modules": "^1.1.1", "chalk": "^2.3.0", "commander": "^2.12.1", "diff": "^4.0.1", "glob": "^7.1.1", "js-yaml": "^3.13.1", "minimatch": "^3.0.4", "mkdirp": "^0.5.3", "resolve": "^1.3.2", "semver": "^5.3.0", "tslib": "^1.13.0", "tsutils": "^2.29.0" }, "bin": { "tslint": "bin/tslint" }, "engines": { "node": ">=4.8.0" }, "peerDependencies": { "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 4.0.0-dev" } }, "node_modules/tslint-jsdoc-rules": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/tslint-jsdoc-rules/-/tslint-jsdoc-rules-0.2.0.tgz", "integrity": "sha512-7r6OP+cuGSsW+FHVKlg1gJrZ0RAfaHQjLJD3Grw9gAvemjAxBkkswiAlgAYy+DIG/SLUQ0EOh6LTzJNP7bk0eQ==", "dev": true, "dependencies": { "tslint": "^5.*" } }, "node_modules/tslint-jsdoc-rules/node_modules/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 }, "node_modules/tslint-jsdoc-rules/node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, "engines": { "node": ">=0.3.1" } }, "node_modules/tslint-jsdoc-rules/node_modules/mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "dependencies": { "minimist": "^1.2.5" }, "bin": { "mkdirp": "bin/cmd.js" } }, "node_modules/tslint-jsdoc-rules/node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "bin": { "semver": "bin/semver" } }, "node_modules/tslint-jsdoc-rules/node_modules/tslint": { "version": "5.20.1", "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", "dev": true, "dependencies": { "@babel/code-frame": "^7.0.0", "builtin-modules": "^1.1.1", "chalk": "^2.3.0", "commander": "^2.12.1", "diff": "^4.0.1", "glob": "^7.1.1", "js-yaml": "^3.13.1", "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "resolve": "^1.3.2", "semver": "^5.3.0", "tslib": "^1.8.0", "tsutils": "^2.29.0" }, "bin": { "tslint": "bin/tslint" }, "engines": { "node": ">=4.8.0" }, "peerDependencies": { "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev" } }, "node_modules/tslint-unix-formatter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/tslint-unix-formatter/-/tslint-unix-formatter-0.2.0.tgz", "integrity": "sha512-EDEzVIPm4DWXOvmgYs5T53p3uIE1GFPO9Z+4lAam2qNkgKCXdW6jx2ieaX6g5OvA/vorH7CbbmRHVA8NQgZQQA==", "dev": true, "dependencies": { "tslint": "^5.*" } }, "node_modules/tslint-unix-formatter/node_modules/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 }, "node_modules/tslint-unix-formatter/node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, "engines": { "node": ">=0.3.1" } }, "node_modules/tslint-unix-formatter/node_modules/mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "dependencies": { "minimist": "^1.2.5" }, "bin": { "mkdirp": "bin/cmd.js" } }, "node_modules/tslint-unix-formatter/node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "bin": { "semver": "bin/semver" } }, "node_modules/tslint-unix-formatter/node_modules/tslint": { "version": "5.20.1", "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", "dev": true, "dependencies": { "@babel/code-frame": "^7.0.0", "builtin-modules": "^1.1.1", "chalk": "^2.3.0", "commander": "^2.12.1", "diff": "^4.0.1", "glob": "^7.1.1", "js-yaml": "^3.13.1", "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "resolve": "^1.3.2", "semver": "^5.3.0", "tslib": "^1.8.0", "tsutils": "^2.29.0" }, "bin": { "tslint": "bin/tslint" }, "engines": { "node": ">=4.8.0" }, "peerDependencies": { "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev" } }, "node_modules/tslint/node_modules/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 }, "node_modules/tslint/node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, "engines": { "node": ">=0.3.1" } }, "node_modules/tslint/node_modules/mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "dependencies": { "minimist": "^1.2.5" }, "bin": { "mkdirp": "bin/cmd.js" } }, "node_modules/tslint/node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "bin": { "semver": "bin/semver" } }, "node_modules/tsutils": { "version": "2.29.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", "dev": true, "dependencies": { "tslib": "^1.8.1" }, "peerDependencies": { "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" } }, "node_modules/typescript": { "version": "4.6.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { "node": ">=4.2.0" } }, "node_modules/typescript-tools": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/typescript-tools/-/typescript-tools-0.3.1.tgz", "integrity": "sha1-MlhSu+lFwwIQpjbOdjMHcHpTxEk=", "dev": true, "bin": { "tss": "bin/tss" } }, "node_modules/unbox-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", "dev": true, "dependencies": { "function-bind": "^1.1.1", "has-bigints": "^1.0.1", "has-symbols": "^1.0.2", "which-boxed-primitive": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/unicode-match-property-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/unicode-match-property-value-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/unicode-property-aliases-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/untildify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "dependencies": { "punycode": "^2.1.0" } }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, "node_modules/watchpack": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", "dev": true, "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" }, "engines": { "node": ">=10.13.0" } }, "node_modules/webpack": { "version": "5.72.1", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.72.1.tgz", "integrity": "sha512-dXG5zXCLspQR4krZVR6QgajnZOjW2K/djHvdcRaDQvsjV9z9vaW6+ja5dZOYbqBBjF6kGXka/2ZyxNdc+8Jung==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^0.0.51", "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/wasm-edit": "1.11.1", "@webassemblyjs/wasm-parser": "1.11.1", "acorn": "^8.4.1", "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.9.3", "es-module-lexer": "^0.9.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.9", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^3.1.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.1.3", "watchpack": "^2.3.1", "webpack-sources": "^3.2.3" }, "bin": { "webpack": "bin/webpack.js" }, "engines": { "node": ">=10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependenciesMeta": { "webpack-cli": { "optional": true } } }, "node_modules/webpack-cli": { "version": "4.9.2", "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.2.tgz", "integrity": "sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==", "dev": true, "dependencies": { "@discoveryjs/json-ext": "^0.5.0", "@webpack-cli/configtest": "^1.1.1", "@webpack-cli/info": "^1.4.1", "@webpack-cli/serve": "^1.6.1", "colorette": "^2.0.14", "commander": "^7.0.0", "execa": "^5.0.0", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", "interpret": "^2.2.0", "rechoir": "^0.7.0", "webpack-merge": "^5.7.3" }, "bin": { "webpack-cli": "bin/cli.js" }, "engines": { "node": ">=10.13.0" }, "peerDependencies": { "webpack": "4.x.x || 5.x.x" }, "peerDependenciesMeta": { "@webpack-cli/generators": { "optional": true }, "@webpack-cli/migrate": { "optional": true }, "webpack-bundle-analyzer": { "optional": true }, "webpack-dev-server": { "optional": true } } }, "node_modules/webpack-cli/node_modules/commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, "engines": { "node": ">= 10" } }, "node_modules/webpack-merge": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", "dev": true, "dependencies": { "clone-deep": "^4.0.1", "wildcard": "^2.0.0" }, "engines": { "node": ">=10.0.0" } }, "node_modules/webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true, "engines": { "node": ">=10.13.0" } }, "node_modules/webpack/node_modules/schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, "engines": { "node": ">= 10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" } }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "bin/node-which" }, "engines": { "node": ">= 8" } }, "node_modules/which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-collection": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", "dev": true, "dependencies": { "is-map": "^2.0.1", "is-set": "^2.0.1", "is-weakmap": "^2.0.1", "is-weakset": "^2.0.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-typed-array": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz", "integrity": "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==", "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "es-abstract": "^1.18.5", "foreach": "^2.0.5", "has-tostringtag": "^1.0.0", "is-typed-array": "^1.1.7" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/wicked-good-xpath": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/wicked-good-xpath/-/wicked-good-xpath-1.3.0.tgz", "integrity": "sha1-gbDpXoZQ5JyUsiKY//hoa1VTz2w=" }, "node_modules/wildcard": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", "dev": true }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/wrap-ansi/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/wrap-ansi/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, "node_modules/xmldom-sre": { "version": "0.1.31", "resolved": "https://registry.npmjs.org/xmldom-sre/-/xmldom-sre-0.1.31.tgz", "integrity": "sha512-f9s+fUkX04BxQf+7mMWAp5zk61pciie+fFLC9hX9UVvCeJQfNHRHXpeo5MPcR0EUf57PYLdt+ZO4f3Ipk2oZUw==", "engines": { "node": ">=0.1" } }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, "engines": { "node": ">=0.4" } }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "engines": { "node": ">=10" } } }, "dependencies": { "@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", "dev": true, "requires": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" } }, "@babel/code-frame": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "dev": true, "requires": { "@babel/highlight": "^7.16.7" } }, "@babel/compat-data": { "version": "7.17.10", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz", "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==", "dev": true }, "@babel/core": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.12.tgz", "integrity": "sha512-44ODe6O1IVz9s2oJE3rZ4trNNKTX9O7KpQpfAP4t8QII/zwrVRHL7i2pxhqtcY7tqMLrrKfMlBKnm1QlrRFs5w==", "dev": true, "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", "@babel/generator": "^7.17.12", "@babel/helper-compilation-targets": "^7.17.10", "@babel/helper-module-transforms": "^7.17.12", "@babel/helpers": "^7.17.9", "@babel/parser": "^7.17.12", "@babel/template": "^7.16.7", "@babel/traverse": "^7.17.12", "@babel/types": "^7.17.12", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.1", "semver": "^6.3.0" } }, "@babel/generator": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.12.tgz", "integrity": "sha512-V49KtZiiiLjH/CnIW6OjJdrenrGoyh6AmKQ3k2AZFKozC1h846Q4NYlZ5nqAigPDUXfGzC88+LOUuG8yKd2kCw==", "dev": true, "requires": { "@babel/types": "^7.17.12", "@jridgewell/gen-mapping": "^0.3.0", "jsesc": "^2.5.1" }, "dependencies": { "@jridgewell/gen-mapping": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", "dev": true, "requires": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.9" } } } }, "@babel/helper-annotate-as-pure": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", "dev": true, "requires": { "@babel/types": "^7.16.7" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", "dev": true, "requires": { "@babel/helper-explode-assignable-expression": "^7.16.7", "@babel/types": "^7.16.7" } }, "@babel/helper-compilation-targets": { "version": "7.17.10", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.10.tgz", "integrity": "sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==", "dev": true, "requires": { "@babel/compat-data": "^7.17.10", "@babel/helper-validator-option": "^7.16.7", "browserslist": "^4.20.2", "semver": "^6.3.0" } }, "@babel/helper-create-class-features-plugin": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.12.tgz", "integrity": "sha512-sZoOeUTkFJMyhqCei2+Z+wtH/BehW8NVKQt7IRUQlRiOARuXymJYfN/FCcI8CvVbR0XVyDM6eLFOlR7YtiXnew==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-function-name": "^7.17.9", "@babel/helper-member-expression-to-functions": "^7.17.7", "@babel/helper-optimise-call-expression": "^7.16.7", "@babel/helper-replace-supers": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7" } }, "@babel/helper-create-regexp-features-plugin": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz", "integrity": "sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", "regexpu-core": "^5.0.1" } }, "@babel/helper-define-polyfill-provider": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", "dev": true, "requires": { "@babel/helper-compilation-targets": "^7.13.0", "@babel/helper-module-imports": "^7.12.13", "@babel/helper-plugin-utils": "^7.13.0", "@babel/traverse": "^7.13.0", "debug": "^4.1.1", "lodash.debounce": "^4.0.8", "resolve": "^1.14.2", "semver": "^6.1.2" } }, "@babel/helper-environment-visitor": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", "dev": true, "requires": { "@babel/types": "^7.16.7" } }, "@babel/helper-explode-assignable-expression": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", "dev": true, "requires": { "@babel/types": "^7.16.7" } }, "@babel/helper-function-name": { "version": "7.17.9", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", "dev": true, "requires": { "@babel/template": "^7.16.7", "@babel/types": "^7.17.0" } }, "@babel/helper-hoist-variables": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", "dev": true, "requires": { "@babel/types": "^7.16.7" } }, "@babel/helper-member-expression-to-functions": { "version": "7.17.7", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", "dev": true, "requires": { "@babel/types": "^7.17.0" } }, "@babel/helper-module-imports": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", "dev": true, "requires": { "@babel/types": "^7.16.7" } }, "@babel/helper-module-transforms": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.12.tgz", "integrity": "sha512-t5s2BeSWIghhFRPh9XMn6EIGmvn8Lmw5RVASJzkIx1mSemubQQBNIZiQD7WzaFmaHIrjAec4x8z9Yx8SjJ1/LA==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-module-imports": "^7.16.7", "@babel/helper-simple-access": "^7.17.7", "@babel/helper-split-export-declaration": "^7.16.7", "@babel/helper-validator-identifier": "^7.16.7", "@babel/template": "^7.16.7", "@babel/traverse": "^7.17.12", "@babel/types": "^7.17.12" } }, "@babel/helper-optimise-call-expression": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", "dev": true, "requires": { "@babel/types": "^7.16.7" } }, "@babel/helper-plugin-utils": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", "dev": true }, "@babel/helper-remap-async-to-generator": { "version": "7.16.8", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-wrap-function": "^7.16.8", "@babel/types": "^7.16.8" } }, "@babel/helper-replace-supers": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-member-expression-to-functions": "^7.16.7", "@babel/helper-optimise-call-expression": "^7.16.7", "@babel/traverse": "^7.16.7", "@babel/types": "^7.16.7" } }, "@babel/helper-simple-access": { "version": "7.17.7", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", "dev": true, "requires": { "@babel/types": "^7.17.0" } }, "@babel/helper-skip-transparent-expression-wrappers": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", "dev": true, "requires": { "@babel/types": "^7.16.0" } }, "@babel/helper-split-export-declaration": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", "dev": true, "requires": { "@babel/types": "^7.16.7" } }, "@babel/helper-validator-identifier": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", "dev": true }, "@babel/helper-validator-option": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", "dev": true }, "@babel/helper-wrap-function": { "version": "7.16.8", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", "dev": true, "requires": { "@babel/helper-function-name": "^7.16.7", "@babel/template": "^7.16.7", "@babel/traverse": "^7.16.8", "@babel/types": "^7.16.8" } }, "@babel/helpers": { "version": "7.17.9", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", "dev": true, "requires": { "@babel/template": "^7.16.7", "@babel/traverse": "^7.17.9", "@babel/types": "^7.17.0" } }, "@babel/highlight": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.12.tgz", "integrity": "sha512-FLzHmN9V3AJIrWfOpvRlZCeVg/WLdicSnTMsLur6uDj9TT8ymUlG9XxURdW/XvuygK+2CW0poOJABdA4m/YKxA==", "dev": true }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.17.12.tgz", "integrity": "sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz", "integrity": "sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", "@babel/plugin-proposal-optional-chaining": "^7.17.12" } }, "@babel/plugin-proposal-async-generator-functions": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.17.12.tgz", "integrity": "sha512-RWVvqD1ooLKP6IqWTA5GyFVX2isGEgC5iFxKzfYOIy/QEFdxYyCybBDtIGjipHpb9bDWHzcqGqFakf+mVmBTdQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-remap-async-to-generator": "^7.16.8", "@babel/plugin-syntax-async-generators": "^7.8.4" } }, "@babel/plugin-proposal-class-properties": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz", "integrity": "sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw==", "dev": true, "requires": { "@babel/helper-create-class-features-plugin": "^7.17.12", "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-proposal-class-static-block": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.12.tgz", "integrity": "sha512-8ILyDG6eL14F8iub97dVc8q35Md0PJYAnA5Kz9NACFOkt6ffCcr0FISyUPKHsvuAy36fkpIitxZ9bVYPFMGQHA==", "dev": true, "requires": { "@babel/helper-create-class-features-plugin": "^7.17.12", "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-class-static-block": "^7.14.5" } }, "@babel/plugin-proposal-dynamic-import": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, "@babel/plugin-proposal-export-namespace-from": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz", "integrity": "sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, "@babel/plugin-proposal-json-strings": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz", "integrity": "sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-json-strings": "^7.8.3" } }, "@babel/plugin-proposal-logical-assignment-operators": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz", "integrity": "sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, "@babel/plugin-proposal-nullish-coalescing-operator": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz", "integrity": "sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, "@babel/plugin-proposal-numeric-separator": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-proposal-object-rest-spread": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.12.tgz", "integrity": "sha512-6l9cO3YXXRh4yPCPRA776ZyJ3RobG4ZKJZhp7NDRbKIOeV3dBPG8FXCF7ZtiO2RTCIOkQOph1xDDcc01iWVNjQ==", "dev": true, "requires": { "@babel/compat-data": "^7.17.10", "@babel/helper-compilation-targets": "^7.17.10", "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-transform-parameters": "^7.17.12" } }, "@babel/plugin-proposal-optional-catch-binding": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, "@babel/plugin-proposal-optional-chaining": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz", "integrity": "sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, "@babel/plugin-proposal-private-methods": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz", "integrity": "sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A==", "dev": true, "requires": { "@babel/helper-create-class-features-plugin": "^7.17.12", "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-proposal-private-property-in-object": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz", "integrity": "sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-create-class-features-plugin": "^7.17.12", "@babel/helper-plugin-utils": "^7.17.12", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" } }, "@babel/plugin-proposal-unicode-property-regex": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz", "integrity": "sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.17.12", "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-class-properties": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-syntax-class-static-block": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-arrow-functions": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz", "integrity": "sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-async-to-generator": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.17.12.tgz", "integrity": "sha512-J8dbrWIOO3orDzir57NRsjg4uxucvhby0L/KZuGsWDj0g7twWK3g7JhJhOrXtuXiw8MeiSdJ3E0OW9H8LYEzLQ==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.16.7", "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-remap-async-to-generator": "^7.16.8" } }, "@babel/plugin-transform-block-scoped-functions": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-block-scoping": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.17.12.tgz", "integrity": "sha512-jw8XW/B1i7Lqwqj2CbrViPcZijSxfguBWZP2aN59NHgxUyO/OcO1mfdCxH13QhN5LbWhPkX+f+brKGhZTiqtZQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-classes": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.17.12.tgz", "integrity": "sha512-cvO7lc7pZat6BsvH6l/EGaI8zpl8paICaoGk+7x7guvtfak/TbIf66nYmJOH13EuG0H+Xx3M+9LQDtSvZFKXKw==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-function-name": "^7.17.9", "@babel/helper-optimise-call-expression": "^7.16.7", "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-replace-supers": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz", "integrity": "sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-destructuring": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.12.tgz", "integrity": "sha512-P8pt0YiKtX5UMUL5Xzsc9Oyij+pJE6JuC+F1k0/brq/OOGs5jDa1If3OY0LRWGvJsJhI+8tsiecL3nJLc0WTlg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-dotall-regex": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.16.7", "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-duplicate-keys": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz", "integrity": "sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-exponentiation-operator": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", "dev": true, "requires": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-for-of": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.17.12.tgz", "integrity": "sha512-76lTwYaCxw8ldT7tNmye4LLwSoKDbRCBzu6n/DcK/P3FOR29+38CIIaVIZfwol9By8W/QHORYEnYSLuvcQKrsg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-function-name": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", "dev": true, "requires": { "@babel/helper-compilation-targets": "^7.16.7", "@babel/helper-function-name": "^7.16.7", "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-literals": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz", "integrity": "sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-member-expression-literals": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-modules-amd": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.17.12.tgz", "integrity": "sha512-p5rt9tB5Ndcc2Za7CeNxVf7YAjRcUMR6yi8o8tKjb9KhRkEvXwa+C0hj6DA5bVDkKRxB0NYhMUGbVKoFu4+zEA==", "dev": true, "requires": { "@babel/helper-module-transforms": "^7.17.12", "@babel/helper-plugin-utils": "^7.17.12", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.12.tgz", "integrity": "sha512-tVPs6MImAJz+DiX8Y1xXEMdTk5Lwxu9jiPjlS+nv5M2A59R7+/d1+9A8C/sbuY0b3QjIxqClkj6KAplEtRvzaA==", "dev": true, "requires": { "@babel/helper-module-transforms": "^7.17.12", "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-simple-access": "^7.17.7", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.12.tgz", "integrity": "sha512-NVhDb0q00hqZcuLduUf/kMzbOQHiocmPbIxIvk23HLiEqaTKC/l4eRxeC7lO63M72BmACoiKOcb9AkOAJRerpw==", "dev": true, "requires": { "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-module-transforms": "^7.17.12", "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-validator-identifier": "^7.16.7", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-umd": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.17.12.tgz", "integrity": "sha512-BnsPkrUHsjzZGpnrmJeDFkOMMljWFHPjDc9xDcz71/C+ybF3lfC3V4m3dwXPLZrE5b3bgd4V+3/Pj+3620d7IA==", "dev": true, "requires": { "@babel/helper-module-transforms": "^7.17.12", "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-named-capturing-groups-regex": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz", "integrity": "sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.17.12", "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-new-target": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.17.12.tgz", "integrity": "sha512-CaOtzk2fDYisbjAD4Sd1MTKGVIpRtx9bWLyj24Y/k6p4s4gQ3CqDGJauFJxt8M/LEx003d0i3klVqnN73qvK3w==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-object-super": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.16.7", "@babel/helper-replace-supers": "^7.16.7" } }, "@babel/plugin-transform-parameters": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz", "integrity": "sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-property-literals": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-regenerator": { "version": "7.17.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.17.9.tgz", "integrity": "sha512-Lc2TfbxR1HOyn/c6b4Y/b6NHoTb67n/IoWLxTu4kC7h4KQnWlhCq2S8Tx0t2SVvv5Uu87Hs+6JEJ5kt2tYGylQ==", "dev": true, "requires": { "regenerator-transform": "^0.15.0" } }, "@babel/plugin-transform-reserved-words": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz", "integrity": "sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-shorthand-properties": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-spread": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz", "integrity": "sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" } }, "@babel/plugin-transform-sticky-regex": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-template-literals": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.17.12.tgz", "integrity": "sha512-kAKJ7DX1dSRa2s7WN1xUAuaQmkTpN+uig4wCKWivVXIObqGbVTUlSavHyfI2iZvz89GFAMGm9p2DBJ4Y1Tp0hw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-typeof-symbol": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz", "integrity": "sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/plugin-transform-unicode-escapes": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-unicode-regex": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.16.7", "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/preset-env": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.17.12.tgz", "integrity": "sha512-Kke30Rj3Lmcx97bVs71LO0s8M6FmJ7tUAQI9fNId62rf0cYG1UAWwdNO9/sE0/pLEahAw1MqMorymoD12bj5Fg==", "dev": true, "requires": { "@babel/compat-data": "^7.17.10", "@babel/helper-compilation-targets": "^7.17.10", "@babel/helper-plugin-utils": "^7.17.12", "@babel/helper-validator-option": "^7.16.7", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.17.12", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.17.12", "@babel/plugin-proposal-async-generator-functions": "^7.17.12", "@babel/plugin-proposal-class-properties": "^7.17.12", "@babel/plugin-proposal-class-static-block": "^7.17.12", "@babel/plugin-proposal-dynamic-import": "^7.16.7", "@babel/plugin-proposal-export-namespace-from": "^7.17.12", "@babel/plugin-proposal-json-strings": "^7.17.12", "@babel/plugin-proposal-logical-assignment-operators": "^7.17.12", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.17.12", "@babel/plugin-proposal-numeric-separator": "^7.16.7", "@babel/plugin-proposal-object-rest-spread": "^7.17.12", "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", "@babel/plugin-proposal-optional-chaining": "^7.17.12", "@babel/plugin-proposal-private-methods": "^7.17.12", "@babel/plugin-proposal-private-property-in-object": "^7.17.12", "@babel/plugin-proposal-unicode-property-regex": "^7.17.12", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-transform-arrow-functions": "^7.17.12", "@babel/plugin-transform-async-to-generator": "^7.17.12", "@babel/plugin-transform-block-scoped-functions": "^7.16.7", "@babel/plugin-transform-block-scoping": "^7.17.12", "@babel/plugin-transform-classes": "^7.17.12", "@babel/plugin-transform-computed-properties": "^7.17.12", "@babel/plugin-transform-destructuring": "^7.17.12", "@babel/plugin-transform-dotall-regex": "^7.16.7", "@babel/plugin-transform-duplicate-keys": "^7.17.12", "@babel/plugin-transform-exponentiation-operator": "^7.16.7", "@babel/plugin-transform-for-of": "^7.17.12", "@babel/plugin-transform-function-name": "^7.16.7", "@babel/plugin-transform-literals": "^7.17.12", "@babel/plugin-transform-member-expression-literals": "^7.16.7", "@babel/plugin-transform-modules-amd": "^7.17.12", "@babel/plugin-transform-modules-commonjs": "^7.17.12", "@babel/plugin-transform-modules-systemjs": "^7.17.12", "@babel/plugin-transform-modules-umd": "^7.17.12", "@babel/plugin-transform-named-capturing-groups-regex": "^7.17.12", "@babel/plugin-transform-new-target": "^7.17.12", "@babel/plugin-transform-object-super": "^7.16.7", "@babel/plugin-transform-parameters": "^7.17.12", "@babel/plugin-transform-property-literals": "^7.16.7", "@babel/plugin-transform-regenerator": "^7.17.9", "@babel/plugin-transform-reserved-words": "^7.17.12", "@babel/plugin-transform-shorthand-properties": "^7.16.7", "@babel/plugin-transform-spread": "^7.17.12", "@babel/plugin-transform-sticky-regex": "^7.16.7", "@babel/plugin-transform-template-literals": "^7.17.12", "@babel/plugin-transform-typeof-symbol": "^7.17.12", "@babel/plugin-transform-unicode-escapes": "^7.16.7", "@babel/plugin-transform-unicode-regex": "^7.16.7", "@babel/preset-modules": "^0.1.5", "@babel/types": "^7.17.12", "babel-plugin-polyfill-corejs2": "^0.3.0", "babel-plugin-polyfill-corejs3": "^0.5.0", "babel-plugin-polyfill-regenerator": "^0.3.0", "core-js-compat": "^3.22.1", "semver": "^6.3.0" } }, "@babel/preset-modules": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", "@babel/plugin-transform-dotall-regex": "^7.4.4", "@babel/types": "^7.4.4", "esutils": "^2.0.2" } }, "@babel/runtime": { "version": "7.17.9", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz", "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/template": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", "@babel/parser": "^7.16.7", "@babel/types": "^7.16.7" } }, "@babel/traverse": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.12.tgz", "integrity": "sha512-zULPs+TbCvOkIFd4FrG53xrpxvCBwLIgo6tO0tJorY7YV2IWFxUfS/lXDJbGgfyYt9ery/Gxj2niwttNnB0gIw==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", "@babel/generator": "^7.17.12", "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-function-name": "^7.17.9", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", "@babel/parser": "^7.17.12", "@babel/types": "^7.17.12", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.12.tgz", "integrity": "sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" } }, "@discoveryjs/json-ext": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz", "integrity": "sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==", "dev": true }, "@jridgewell/gen-mapping": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", "dev": true, "requires": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "@jridgewell/resolve-uri": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", "dev": true }, "@jridgewell/set-array": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", "dev": true }, "@jridgewell/sourcemap-codec": { "version": "1.4.13", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", "dev": true }, "@jridgewell/trace-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "@types/eslint": { "version": "8.2.2", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.2.2.tgz", "integrity": "sha512-nQxgB8/Sg+QKhnV8e0WzPpxjIGT3tuJDDzybkDi8ItE/IgTlHo07U0shaIjzhcvQxlq9SDRE42lsJ23uvEgJ2A==", "dev": true, "requires": { "@types/estree": "*", "@types/json-schema": "*" } }, "@types/eslint-scope": { "version": "3.7.3", "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", "dev": true, "requires": { "@types/eslint": "*", "@types/estree": "*" } }, "@types/estree": { "version": "0.0.51", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", "dev": true }, "@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, "@types/node": { "version": "17.0.9", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.9.tgz", "integrity": "sha512-5dNBXu/FOER+EXnyah7rn8xlNrfMOQb/qXnw4NQgLkCygKBKhdmF/CA5oXVOKZLBEahw8s2WP9LxIcN/oDDRgQ==", "dev": true }, "@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "dev": true, "requires": { "@webassemblyjs/helper-numbers": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1" } }, "@webassemblyjs/floating-point-hex-parser": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", "dev": true }, "@webassemblyjs/helper-api-error": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", "dev": true }, "@webassemblyjs/helper-buffer": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", "dev": true }, "@webassemblyjs/helper-numbers": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "dev": true, "requires": { "@webassemblyjs/floating-point-hex-parser": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", "dev": true }, "@webassemblyjs/helper-wasm-section": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", "@webassemblyjs/wasm-gen": "1.11.1" } }, "@webassemblyjs/ieee754": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "dev": true, "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", "dev": true }, "@webassemblyjs/wasm-edit": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", "@webassemblyjs/helper-wasm-section": "1.11.1", "@webassemblyjs/wasm-gen": "1.11.1", "@webassemblyjs/wasm-opt": "1.11.1", "@webassemblyjs/wasm-parser": "1.11.1", "@webassemblyjs/wast-printer": "1.11.1" } }, "@webassemblyjs/wasm-gen": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", "@webassemblyjs/ieee754": "1.11.1", "@webassemblyjs/leb128": "1.11.1", "@webassemblyjs/utf8": "1.11.1" } }, "@webassemblyjs/wasm-opt": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", "@webassemblyjs/wasm-gen": "1.11.1", "@webassemblyjs/wasm-parser": "1.11.1" } }, "@webassemblyjs/wasm-parser": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", "@webassemblyjs/ieee754": "1.11.1", "@webassemblyjs/leb128": "1.11.1", "@webassemblyjs/utf8": "1.11.1" } }, "@webassemblyjs/wast-printer": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" } }, "@webpack-cli/configtest": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz", "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==", "dev": true, "requires": {} }, "@webpack-cli/info": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.1.tgz", "integrity": "sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA==", "dev": true, "requires": { "envinfo": "^7.7.3" } }, "@webpack-cli/serve": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz", "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==", "dev": true, "requires": {} }, "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true }, "@xtuc/long": { "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": "8.7.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", "dev": true }, "acorn-import-assertions": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", "dev": true, "requires": {} }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, "requires": {} }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "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": { "color-convert": "^1.9.0" } }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { "sprintf-js": "~1.0.2" } }, "array.prototype.every": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/array.prototype.every/-/array.prototype.every-1.1.3.tgz", "integrity": "sha512-vWnriJI//SOMOWtXbU/VXhJ/InfnNHPF6BLKn5WfY8xXy+NWql0fUy20GO3sdqBhCAO+qw8S/E5nJiZX+QFdCA==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.0", "is-string": "^1.0.7" } }, "available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true }, "babel-loader": { "version": "8.2.5", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", "dev": true, "requires": { "find-cache-dir": "^3.3.1", "loader-utils": "^2.0.0", "make-dir": "^3.1.0", "schema-utils": "^2.6.5" } }, "babel-plugin-dynamic-import-node": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dev": true, "requires": { "object.assign": "^4.1.0" } }, "babel-plugin-polyfill-corejs2": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", "dev": true, "requires": { "@babel/compat-data": "^7.13.11", "@babel/helper-define-polyfill-provider": "^0.3.1", "semver": "^6.1.1" } }, "babel-plugin-polyfill-corejs3": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.1.tgz", "integrity": "sha512-TihqEe4sQcb/QcPJvxe94/9RZuLQuF1+To4WqQcRvc+3J3gLCPIPgDKzGLG6zmQLfH3nn25heRuDNkS2KR4I8A==", "dev": true, "requires": { "@babel/helper-define-polyfill-provider": "^0.3.1", "core-js-compat": "^3.20.0" } }, "babel-plugin-polyfill-regenerator": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", "dev": true, "requires": { "@babel/helper-define-polyfill-provider": "^0.3.1" } }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "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 }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "browserslist": { "version": "4.20.3", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", "dev": true, "requires": { "caniuse-lite": "^1.0.30001332", "electron-to-chromium": "^1.4.118", "escalade": "^3.1.1", "node-releases": "^2.0.3", "picocolors": "^1.0.0" } }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" } }, "caniuse-lite": { "version": "1.0.30001341", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001341.tgz", "integrity": "sha512-2SodVrFFtvGENGCv0ChVJIDQ0KPaS1cg7/qtfMaICgeMolDdo/Z2OD32F0Aq9yl6F4YFwGPBS5AaPqNYiW4PoA==", "dev": true }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, "clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "requires": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", "shallow-clone": "^3.0.0" } }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { "color-name": "1.1.3" } }, "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "colorette": { "version": "2.0.16", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", "dev": true }, "commander": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-9.2.0.tgz", "integrity": "sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==" }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "convert-source-map": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "requires": { "safe-buffer": "~5.1.1" } }, "copyfiles": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-2.4.1.tgz", "integrity": "sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==", "dev": true, "requires": { "glob": "^7.0.5", "minimatch": "^3.0.3", "mkdirp": "^1.0.4", "noms": "0.0.0", "through2": "^2.0.1", "untildify": "^4.0.0", "yargs": "^16.1.0" }, "dependencies": { "yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } }, "yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true } } }, "core-js-compat": { "version": "3.22.5", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.22.5.tgz", "integrity": "sha512-rEF75n3QtInrYICvJjrAgV03HwKiYvtKHdPtaba1KucG+cNZ4NJnH9isqt979e67KZlhpbCOTwnsvnIr+CVeOg==", "dev": true, "requires": { "browserslist": "^4.20.3", "semver": "7.0.0" }, "dependencies": { "semver": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", "dev": true } } }, "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "debug": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { "ms": "2.1.2" } }, "deep-equal": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.5.tgz", "integrity": "sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==", "dev": true, "requires": { "call-bind": "^1.0.0", "es-get-iterator": "^1.1.1", "get-intrinsic": "^1.0.1", "is-arguments": "^1.0.4", "is-date-object": "^1.0.2", "is-regex": "^1.1.1", "isarray": "^2.0.5", "object-is": "^1.1.4", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "regexp.prototype.flags": "^1.3.0", "side-channel": "^1.0.3", "which-boxed-primitive": "^1.0.1", "which-collection": "^1.0.1", "which-typed-array": "^1.1.2" }, "dependencies": { "isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true } } }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { "object-keys": "^1.0.12" } }, "defined": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true }, "diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, "dotignore": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz", "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==", "dev": true, "requires": { "minimatch": "^3.0.4" } }, "electron-to-chromium": { "version": "1.4.137", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz", "integrity": "sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA==", "dev": true }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "emojis-list": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true }, "enhanced-resolve": { "version": "5.9.3", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz", "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==", "dev": true, "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "envinfo": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", "dev": true }, "es-abstract": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "get-intrinsic": "^1.1.1", "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-symbols": "^1.0.2", "internal-slot": "^1.0.3", "is-callable": "^1.2.4", "is-negative-zero": "^2.0.1", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.1", "is-string": "^1.0.7", "is-weakref": "^1.0.1", "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", "string.prototype.trimstart": "^1.0.4", "unbox-primitive": "^1.0.1" } }, "es-get-iterator": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", "dev": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.0", "has-symbols": "^1.0.1", "is-arguments": "^1.1.0", "is-map": "^2.0.2", "is-set": "^2.0.2", "is-string": "^1.0.5", "isarray": "^2.0.5" }, "dependencies": { "isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true } } }, "es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", "dev": true }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" } }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, "esm": { "version": "3.2.25", "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==" }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { "estraverse": "^5.2.0" }, "dependencies": { "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } }, "estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, "events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true }, "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "requires": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, "fastest-levenshtein": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", "dev": true }, "find-cache-dir": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, "requires": { "commondir": "^1.0.1", "make-dir": "^3.0.2", "pkg-dir": "^4.1.0" } }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, "requires": { "is-callable": "^1.1.3" } }, "foreach": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", "dev": true }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true }, "get-caller-file": { "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-intrinsic": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1" } }, "get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true }, "get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, "get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" } }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "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" } }, "glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, "graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { "function-bind": "^1.1.1" } }, "has-bigints": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", "dev": true }, "has-dynamic-import": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-dynamic-import/-/has-dynamic-import-2.0.1.tgz", "integrity": "sha512-X3fbtsZmwb6W7fJGR9o7x65fZoodygCrZ3TVycvghP62yYQfS0t4RS0Qcz+j5tQYUKeSWS09tHkWW6WhFV3XhQ==", "dev": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" } }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "has-symbols": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, "has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, "requires": { "has-symbols": "^1.0.2" } }, "human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, "import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, "requires": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" } }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" } }, "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "dev": true, "requires": { "get-intrinsic": "^1.1.0", "has": "^1.0.3", "side-channel": "^1.0.4" } }, "interpret": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", "dev": true }, "is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, "is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "requires": { "has-bigints": "^1.0.1" } }, "is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, "is-callable": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true }, "is-core-module": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", "dev": true, "requires": { "has": "^1.0.3" } }, "is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" } }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "is-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", "dev": true }, "is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true }, "is-number-object": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" } }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { "isobject": "^3.0.1" } }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" } }, "is-set": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", "dev": true }, "is-shared-array-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", "dev": true }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, "is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" } }, "is-symbol": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "requires": { "has-symbols": "^1.0.2" } }, "is-typed-array": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz", "integrity": "sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==", "dev": true, "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "es-abstract": "^1.18.5", "foreach": "^2.0.5", "has-tostringtag": "^1.0.0" } }, "is-weakmap": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", "dev": true }, "is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "requires": { "call-bind": "^1.0.2" } }, "is-weakset": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", "dev": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" } }, "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, "jest-worker": { "version": "27.4.6", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.6.tgz", "integrity": "sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw==", "dev": true, "requires": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, "dependencies": { "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" } } } }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, "js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" } }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "json5": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", "dev": true }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, "loader-runner": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", "dev": true }, "loader-utils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", "dev": true, "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", "json5": "^2.1.2" } }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { "p-locate": "^4.1.0" } }, "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 }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { "semver": "^6.0.0" } }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, "mhchemparser": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/mhchemparser/-/mhchemparser-4.1.1.tgz", "integrity": "sha512-R75CUN6O6e1t8bgailrF1qPq+HhVeFTM3XQ0uzI+mXTybmphy3b6h4NbLOYhemViQ3lUs+6CKRkC3Ws1TlYREA==" }, "mime-db": { "version": "1.51.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", "dev": true }, "mime-types": { "version": "2.1.34", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dev": true, "requires": { "mime-db": "1.51.0" } }, "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "mj-context-menu": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/mj-context-menu/-/mj-context-menu-0.6.1.tgz", "integrity": "sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA==" }, "mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, "node-releases": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==", "dev": true }, "noms": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz", "integrity": "sha1-2o69nzr51nYJGbJ9nNyAkqczKFk=", "dev": true, "requires": { "inherits": "^2.0.1", "readable-stream": "~1.0.31" } }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "requires": { "path-key": "^3.0.0" } }, "object-inspect": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", "dev": true }, "object-is": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" } }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, "object.assign": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", "has-symbols": "^1.0.1", "object-keys": "^1.1.1" } }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { "wrappy": "1" } }, "onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { "mimic-fn": "^2.1.0" } }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" } }, "p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { "p-limit": "^2.2.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 }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { "find-up": "^4.0.0" } }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, "randombytes": { "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" } }, "readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", "isarray": "0.0.1", "string_decoder": "~0.10.x" } }, "rechoir": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", "dev": true, "requires": { "resolve": "^1.9.0" } }, "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, "regenerate-unicode-properties": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", "dev": true, "requires": { "regenerate": "^1.4.2" } }, "regenerator-runtime": { "version": "0.13.9", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true }, "regenerator-transform": { "version": "0.15.0", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", "dev": true, "requires": { "@babel/runtime": "^7.8.4" } }, "regexp.prototype.flags": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz", "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" } }, "regexpu-core": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", "dev": true, "requires": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.0.1", "regjsgen": "^0.6.0", "regjsparser": "^0.8.2", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.0.0" } }, "regjsgen": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", "dev": true }, "regjsparser": { "version": "0.8.4", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", "dev": true, "requires": { "jsesc": "~0.5.0" }, "dependencies": { "jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true } } }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, "resolve": { "version": "1.21.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", "dev": true, "requires": { "is-core-module": "^2.8.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "requires": { "resolve-from": "^5.0.0" } }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true }, "resumer": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", "dev": true, "requires": { "through": "~2.3.4" } }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" } }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, "schema-utils": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "dev": true, "requires": { "@types/json-schema": "^7.0.5", "ajv": "^6.12.4", "ajv-keywords": "^3.5.2" } }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, "serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "requires": { "randombytes": "^2.1.0" } }, "shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "requires": { "kind-of": "^6.0.2" } }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { "shebang-regex": "^3.0.0" } }, "shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, "side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", "object-inspect": "^1.9.0" } }, "signal-exit": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", "dev": true }, "source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" }, "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 } } }, "speech-rule-engine": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/speech-rule-engine/-/speech-rule-engine-4.0.6.tgz", "integrity": "sha512-Hqa4ywf7d3lX2YsnnE8BeEdqFyaTwPSyyVhVGWZlQw4XVh0NCijyVsMZD3I9HsG5JBuDXyRaMVVNZcGJlKbZxA==", "requires": { "commander": "9.2.0", "wicked-good-xpath": "1.3.0", "xmldom-sre": "0.1.31" } }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, "string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "string.prototype.trim": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.5.tgz", "integrity": "sha512-Lnh17webJVsD6ECeovpVN17RlAKjmz4rF9S+8Y45CkMc/ufVpTkU3vZIyIC7sllQ1FCvObZnnCdNs/HXTUOTlg==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.1" } }, "string.prototype.trimend": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" } }, "string.prototype.trimstart": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" } }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { "ansi-regex": "^5.0.1" } }, "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "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==", "dev": true, "requires": { "has-flag": "^3.0.0" } }, "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, "tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true }, "tape": { "version": "5.5.3", "resolved": "https://registry.npmjs.org/tape/-/tape-5.5.3.tgz", "integrity": "sha512-hPBJZBL9S7bH9vECg/KSM24slGYV589jJr4dmtiJrLD71AL66+8o4b9HdZazXZyvnilqA7eE8z5/flKiy0KsBg==", "dev": true, "requires": { "array.prototype.every": "^1.1.3", "call-bind": "^1.0.2", "deep-equal": "^2.0.5", "defined": "^1.0.0", "dotignore": "^0.1.2", "for-each": "^0.3.3", "get-package-type": "^0.1.0", "glob": "^7.2.0", "has": "^1.0.3", "has-dynamic-import": "^2.0.1", "inherits": "^2.0.4", "is-regex": "^1.1.4", "minimist": "^1.2.6", "object-inspect": "^1.12.0", "object-is": "^1.1.5", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "resolve": "^2.0.0-next.3", "resumer": "^0.0.0", "string.prototype.trim": "^1.2.5", "through": "^2.3.8" }, "dependencies": { "resolve": { "version": "2.0.0-next.3", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", "dev": true, "requires": { "is-core-module": "^2.2.0", "path-parse": "^1.0.6" } } } }, "terser": { "version": "5.10.0", "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", "dev": true, "requires": { "commander": "^2.20.0", "source-map": "~0.7.2", "source-map-support": "~0.5.20" }, "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.7.3", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true } } }, "terser-webpack-plugin": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz", "integrity": "sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==", "dev": true, "requires": { "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.0", "source-map": "^0.6.1", "terser": "^5.7.2" }, "dependencies": { "schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } }, "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 } } }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" }, "dependencies": { "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" } } } }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, "tslint": { "version": "6.1.3", "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "builtin-modules": "^1.1.1", "chalk": "^2.3.0", "commander": "^2.12.1", "diff": "^4.0.1", "glob": "^7.1.1", "js-yaml": "^3.13.1", "minimatch": "^3.0.4", "mkdirp": "^0.5.3", "resolve": "^1.3.2", "semver": "^5.3.0", "tslib": "^1.13.0", "tsutils": "^2.29.0" }, "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 }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, "mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { "minimist": "^1.2.5" } }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, "tslint-jsdoc-rules": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/tslint-jsdoc-rules/-/tslint-jsdoc-rules-0.2.0.tgz", "integrity": "sha512-7r6OP+cuGSsW+FHVKlg1gJrZ0RAfaHQjLJD3Grw9gAvemjAxBkkswiAlgAYy+DIG/SLUQ0EOh6LTzJNP7bk0eQ==", "dev": true, "requires": { "tslint": "^5.*" }, "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 }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, "mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { "minimist": "^1.2.5" } }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "tslint": { "version": "5.20.1", "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "builtin-modules": "^1.1.1", "chalk": "^2.3.0", "commander": "^2.12.1", "diff": "^4.0.1", "glob": "^7.1.1", "js-yaml": "^3.13.1", "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "resolve": "^1.3.2", "semver": "^5.3.0", "tslib": "^1.8.0", "tsutils": "^2.29.0" } } } }, "tslint-unix-formatter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/tslint-unix-formatter/-/tslint-unix-formatter-0.2.0.tgz", "integrity": "sha512-EDEzVIPm4DWXOvmgYs5T53p3uIE1GFPO9Z+4lAam2qNkgKCXdW6jx2ieaX6g5OvA/vorH7CbbmRHVA8NQgZQQA==", "dev": true, "requires": { "tslint": "^5.*" }, "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 }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, "mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { "minimist": "^1.2.5" } }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "tslint": { "version": "5.20.1", "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "builtin-modules": "^1.1.1", "chalk": "^2.3.0", "commander": "^2.12.1", "diff": "^4.0.1", "glob": "^7.1.1", "js-yaml": "^3.13.1", "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "resolve": "^1.3.2", "semver": "^5.3.0", "tslib": "^1.8.0", "tsutils": "^2.29.0" } } } }, "tsutils": { "version": "2.29.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", "dev": true, "requires": { "tslib": "^1.8.1" } }, "typescript": { "version": "4.6.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", "dev": true }, "typescript-tools": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/typescript-tools/-/typescript-tools-0.3.1.tgz", "integrity": "sha1-MlhSu+lFwwIQpjbOdjMHcHpTxEk=", "dev": true }, "unbox-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", "dev": true, "requires": { "function-bind": "^1.1.1", "has-bigints": "^1.0.1", "has-symbols": "^1.0.2", "which-boxed-primitive": "^1.0.2" } }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "dev": true }, "unicode-match-property-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, "requires": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" } }, "unicode-match-property-value-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", "dev": true }, "unicode-property-aliases-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", "dev": true }, "untildify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", "dev": true }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { "punycode": "^2.1.0" } }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, "watchpack": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", "dev": true, "requires": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" } }, "webpack": { "version": "5.72.1", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.72.1.tgz", "integrity": "sha512-dXG5zXCLspQR4krZVR6QgajnZOjW2K/djHvdcRaDQvsjV9z9vaW6+ja5dZOYbqBBjF6kGXka/2ZyxNdc+8Jung==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^0.0.51", "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/wasm-edit": "1.11.1", "@webassemblyjs/wasm-parser": "1.11.1", "acorn": "^8.4.1", "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.9.3", "es-module-lexer": "^0.9.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.9", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^3.1.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.1.3", "watchpack": "^2.3.1", "webpack-sources": "^3.2.3" }, "dependencies": { "schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } } } }, "webpack-cli": { "version": "4.9.2", "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.2.tgz", "integrity": "sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==", "dev": true, "requires": { "@discoveryjs/json-ext": "^0.5.0", "@webpack-cli/configtest": "^1.1.1", "@webpack-cli/info": "^1.4.1", "@webpack-cli/serve": "^1.6.1", "colorette": "^2.0.14", "commander": "^7.0.0", "execa": "^5.0.0", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", "interpret": "^2.2.0", "rechoir": "^0.7.0", "webpack-merge": "^5.7.3" }, "dependencies": { "commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true } } }, "webpack-merge": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", "dev": true, "requires": { "clone-deep": "^4.0.1", "wildcard": "^2.0.0" } }, "webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { "isexe": "^2.0.0" } }, "which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "requires": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" } }, "which-collection": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", "dev": true, "requires": { "is-map": "^2.0.1", "is-set": "^2.0.1", "is-weakmap": "^2.0.1", "is-weakset": "^2.0.1" } }, "which-typed-array": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz", "integrity": "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==", "dev": true, "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "es-abstract": "^1.18.5", "foreach": "^2.0.5", "has-tostringtag": "^1.0.0", "is-typed-array": "^1.1.7" } }, "wicked-good-xpath": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/wicked-good-xpath/-/wicked-good-xpath-1.3.0.tgz", "integrity": "sha1-gbDpXoZQ5JyUsiKY//hoa1VTz2w=" }, "wildcard": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", "dev": true }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, "dependencies": { "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" } }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" } }, "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true } } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, "xmldom-sre": { "version": "0.1.31", "resolved": "https://registry.npmjs.org/xmldom-sre/-/xmldom-sre-0.1.31.tgz", "integrity": "sha512-f9s+fUkX04BxQf+7mMWAp5zk61pciie+fFLC9hX9UVvCeJQfNHRHXpeo5MPcR0EUf57PYLdt+ZO4f3Ipk2oZUw==" }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true } } } MathJax-src-3.2.2/package.json000066400000000000000000000046611425015521000161270ustar00rootroot00000000000000{ "name": "mathjax-full", "version": "3.2.2", "description": "Beautiful and accessible math in all browsers. MathJax is an open-source JavaScript display engine for LaTeX, MathML, and AsciiMath notation that works in all browsers and in server-side node applications. This package includes the source code as well as the packaged components.", "license": "Apache-2.0", "main": "components/src/node-main/node-main.js", "files": [ "/es5", "/js", "/ts", "/components", "LICENSE", "README.md", "CONTRIBUTING.md", "tsconfig.json", "tslint.json" ], "repository": { "type": "git", "url": "https://github.com/mathjax/Mathjax-src/" }, "keywords": [ "MathJax", "math", "svg", "HTML", "MathML", "TeX", "AsciiMath" ], "scripts": { "clean:js": "npx rimraf js", "clean:es5": "npx rimraf es5", "clean:lib": "npx rimraf 'components/src/**/lib'", "clean": "npm run --silent clean:js && npm run --silent clean:es5 && npm run --silent clean:lib", "copy:mj2": "npx copyfiles -u 1 'ts/input/asciimath/mathjax2/**/*' js", "copy:mml3": "npx copyfiles -u 1 'ts/input/mathml/mml3/mml3.sef.json' js", "precompile": "npm run --silent clean:js", "compile": "npx tsc", "postcompile": "npm run --silent copy:mj2 && npm run --silent copy:mml3", "premake-components": "npm run --silent clean:es5 && npm run --silent clean:lib", "make-components": "cd components && node bin/makeAll src | grep --line-buffered 'Building\\|Webpacking\\|Copying\\|npx'", "premake-mml3-xslt": "cd ts/input/mathml/mml3 && grep '^\\s*\\(<\\|or\\|xmlns\\|excl\\|\">\\)' mml3.ts > mml3.xsl", "make-mml3-xslt": "cd ts/input/mathml/mml3 && npx xslt3 -t -xsl:mml3.xsl -export:mml3.sef.json -nogo", "postmake-mml3-xslt": "npx rimraf ts/input/mathml/mml3/mml3.xsl" }, "devDependencies": { "@babel/core": "^7.17.12", "@babel/preset-env": "^7.17.12", "babel-loader": "^8.2.5", "copyfiles": "^2.4.1", "diff": "^5.0.0", "rimraf": "^3.0.2", "tape": "^5.5.3", "terser-webpack-plugin": "^5.3.1", "tslint": "^6.1.3", "tslint-jsdoc-rules": "^0.2.0", "tslint-unix-formatter": "^0.2.0", "typescript": "^4.6.4", "typescript-tools": "^0.3.1", "webpack": "^5.72.1", "webpack-cli": "^4.9.2" }, "dependencies": { "esm": "^3.2.25", "mhchemparser": "^4.1.0", "mj-context-menu": "^0.6.1", "speech-rule-engine": "^4.0.6" } } MathJax-src-3.2.2/ts/000077500000000000000000000000001425015521000142605ustar00rootroot00000000000000MathJax-src-3.2.2/ts/a11y/000077500000000000000000000000001425015521000150335ustar00rootroot00000000000000MathJax-src-3.2.2/ts/a11y/assistive-mml.ts000066400000000000000000000222611425015521000202030ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2019-2022 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'; import {StyleList} from '../util/StyleList.js'; /*==========================================================================*/ export class LimitedMmlVisitor extends SerializedMmlVisitor { /** * @override */ protected getAttributes(node: MmlNode): string { /** * Remove id from attribute output */ return super.getAttributes(node).replace(/ ?id=".*?"/, ''); } } /** * Generic constructor for Mixins */ export type Constructor = new(...args: any[]) => T; /*==========================================================================*/ /** * Add STATE value for having assistive MathML (after TYPESETTING) */ newState('ASSISTIVEMML', 153); /** * The functions 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 * @param {boolean} force True to force assistive MathML even if enableAssistiveMml is false */ assistiveMml(document: MathDocument, force?: boolean): 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 * @param {boolean} force True to force assistive MathML evenif enableAssistiveMml is false */ public assistiveMml(document: AssistiveMmlMathDocument, force: boolean = false) { if (this.state() >= STATE.ASSISTIVEMML) return; if (!this.isEscaped && (document.options.enableAssistiveMml || force)) { 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', { 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(adaptor.firstChild(this.typesetRoot) as N, 'aria-hidden', 'true'); adaptor.setStyle(this.typesetRoot, 'position', 'relative'); adaptor.append(this.typesetRoot, node); } this.state(STATE.ASSISTIVEMML); } }; } /*==========================================================================*/ /** * The functions added to MathDocument for assistive MathML * * @template N The HTMLElement node class * @template T The Text node class * @template D The Document class */ export interface AssistiveMmlMathDocument extends AbstractMathDocument { /** * @param {MmlNode} node The node to be serializes * @return {string} The serialization of the node */ toMML: (node: MmlNode) => string; /** * Add assistive MathML to the MathItems in the MathDocument * * @return {AssistiveMmlMathDocument} The MathDocument (so calls can be chained) */ assistiveMml(): AssistiveMmlMathDocument; } /** * The mixin for adding assistive MathML to MathDocuments * * @param {B} BaseDocument The MathDocument class to be extended * @return {AssistiveMmlMathDocument} 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 BaseClass extends BaseDocument { /** * @override */ public static OPTIONS: OptionList = { ...BaseDocument.OPTIONS, enableAssistiveMml: true, renderActions: expandable({ ...BaseDocument.OPTIONS.renderActions, assistiveMml: [STATE.ASSISTIVEMML] }) }; /** * styles needed for the hidden MathML */ public static assistiveStyles: StyleList = { 'mjx-assistive-mml': { position: 'absolute !important', top: '0px', left: '0px', clip: 'rect(1px, 1px, 1px, 1px)', padding: '1px 0px 0px 0px !important', border: '0px !important', display: 'block !important', width: 'auto !important', overflow: 'hidden !important', /* * Don't allow the assistive MathML to become part of the selection */ '-webkit-touch-callout': 'none', '-webkit-user-select': 'none', '-khtml-user-select': 'none', '-moz-user-select': 'none', '-ms-user-select': 'none', 'user-select': 'none' }, 'mjx-assistive-mml[display="block"]': { width: '100% !important' } }; /** * Visitor used for serializing internal MathML nodes */ protected visitor: LimitedMmlVisitor; /** * Augment the MathItem class used for this MathDocument, and create the serialization visitor. * * @override * @constructor */ constructor(...args: any[]) { super(...args); const CLASS = (this.constructor as typeof BaseClass); const ProcessBits = CLASS.ProcessBits; if (!ProcessBits.has('assistive-mml')) { ProcessBits.allocate('assistive-mml'); } this.visitor = new LimitedMmlVisitor(this.mmlFactory); this.options.MathItem = AssistiveMmlMathItemMixin>>( this.options.MathItem ); if ('addStyles' in this) { (this as any).addStyles(CLASS.assistiveStyles); } } /** * @param {MmlNode} node The node to be serializes * @return {string} The serialization of the node */ public toMML(node: MmlNode): string { 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 { handler.documentClass = AssistiveMmlMathDocumentMixin>>( handler.documentClass ); return handler; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MathJax-src-3.2.2/ts/a11y/complexity.ts�������������������������������������������������������������0000664�0000000�0000000�00000017041�14250155210�0017603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************* * * Copyright (c) 2018-2022 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 computes complexity of the internal MathML * and optionally marks collapsible items * * @author dpvc@mathjax.org (Davide Cervone) */ import {Handler} from '../core/Handler.js'; import {MathDocumentConstructor} from '../core/MathDocument.js'; import {STATE, newState} from '../core/MathItem.js'; import {MathML} from '../input/mathml.js'; import {MmlNode} from '../core/MmlTree/MmlNode.js'; import {EnrichHandler, EnrichedMathItem, EnrichedMathDocument} from './semantic-enrich.js'; import {ComplexityVisitor} from './complexity/visitor.js'; import {OptionList, selectOptionsFromKeys, expandable} from '../util/Options.js'; /** * Generic constructor for Mixins */ export type Constructor = new(...args: any[]) => T; /** * Shorthands for constructors */ export type EMItemC = Constructor>; export type CMItemC = Constructor>; export type EMDocC = MathDocumentConstructor>; export type CMDocC = Constructor>; /*==========================================================================*/ /** * Add STATE value for having complexity added (after ENRICHED and before TYPESET) */ newState('COMPLEXITY', 40); /** * The functions added to MathItem for complexity * * @template N The HTMLElement node class * @template T The Text node class * @template D The Document class */ export interface ComplexityMathItem extends EnrichedMathItem { /** * @param {ComplexityMathDocument} document The MathDocument for the MathItem * @param {boolean} force True to force the computation even if enableComplexity is false */ complexity(document: ComplexityMathDocument, force?: boolean): void; } /** * The mixin for adding complexity to MathItems * * @param {B} BaseMathItem The MathItem class to be extended * @param {function(MmlNode): void} computeComplexity Method of complexity computation. * @return {ComplexityMathItem} The complexity 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 ComplexityMathItemMixin>(BaseMathItem: B, computeComplexity: (node: MmlNode) => void): CMItemC & B { return class extends BaseMathItem { /** * @param {ComplexityMathDocument} document The MathDocument for the MathItem * @param {boolean} force True to force the computation even if enableComplexity is false */ public complexity(document: ComplexityMathDocument, force: boolean = false) { if (this.state() >= STATE.COMPLEXITY) return; if (!this.isEscaped && (document.options.enableComplexity || force)) { this.enrich(document, true); computeComplexity(this.root); } this.state(STATE.COMPLEXITY); } }; } /*==========================================================================*/ /** * The functions added to MathDocument for complexity * * @template N The HTMLElement node class * @template T The Text node class * @template D The Document class */ export interface ComplexityMathDocument extends EnrichedMathDocument { /** * Perform complexity computations on the MathItems in the MathDocument * * @return {ComplexityMathDocument} The MathDocument (so calls can be chained) */ complexity(): ComplexityMathDocument; } /** * The mixin for adding complexity to MathDocuments * * @param {B} BaseDocument The MathDocument class to be extended * @return {EnrichedMathDocument} The enriched 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 ComplexityMathDocumentMixin>(BaseDocument: B): CMDocC & B { return class extends BaseDocument { /** * The options for this type of document */ public static OPTIONS: OptionList = { ...BaseDocument.OPTIONS, ...ComplexityVisitor.OPTIONS, enableComplexity: true, ComplexityVisitor: ComplexityVisitor, renderActions: expandable({ ...BaseDocument.OPTIONS.renderActions, complexity: [STATE.COMPLEXITY] }) }; /** * The visitor that computes complexities */ protected complexityVisitor: ComplexityVisitor; /** * Extend the MathItem class used for this MathDocument * * @override * @constructor */ constructor(...args: any[]) { super(...args); const ProcessBits = (this.constructor as typeof BaseDocument).ProcessBits; if (!ProcessBits.has('complexity')) { ProcessBits.allocate('complexity'); } const visitorOptions = selectOptionsFromKeys(this.options, this.options.ComplexityVisitor.OPTIONS); this.complexityVisitor = new this.options.ComplexityVisitor(this.mmlFactory, visitorOptions); const computeComplexity = ((node: MmlNode) => this.complexityVisitor.visitTree(node)); this.options.MathItem = ComplexityMathItemMixin>( this.options.MathItem, computeComplexity ); } /** * Compute the complexity the MathItems in this MathDocument */ public complexity() { if (!this.processed.isSet('complexity')) { if (this.options.enableComplexity) { for (const math of this.math) { (math as ComplexityMathItem).complexity(this); } } this.processed.set('complexity'); } return this; } /** * @override */ public state(state: number, restore: boolean = false) { super.state(state, restore); if (state < STATE.COMPLEXITY) { this.processed.clear('complexity'); } return this; } }; } /*==========================================================================*/ /** * Add complexity computations a Handler instance * * @param {Handler} handler The Handler instance to enhance * @param {MathML} MmlJax The MathML input jax to use for reading the enriched MathML * @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 ComplexityHandler( handler: Handler, MmlJax: MathML = null ): Handler { if (!handler.documentClass.prototype.enrich && MmlJax) { handler = EnrichHandler(handler, MmlJax); } handler.documentClass = ComplexityMathDocumentMixin>(handler.documentClass as any); return handler; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MathJax-src-3.2.2/ts/a11y/complexity/���������������������������������������������������������������0000775�0000000�0000000�00000000000�14250155210�0017230�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������MathJax-src-3.2.2/ts/a11y/complexity/collapse.ts����������������������������������������������������0000664�0000000�0000000�00000044675�14250155210�0021422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************* * * Copyright (c) 2018-2022 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 Implements a class that marks complex items for collapsing * * @author dpvc@mathjax.org (Davide Cervone) */ import {MmlNode, AbstractMmlTokenNode, TextNode} from '../../core/MmlTree/MmlNode.js'; import {ComplexityVisitor} from './visitor.js'; /*==========================================================================*/ /** * Function for checking if a node should be collapsible */ export type CollapseFunction = (node: MmlNode, complexity: number) => number; /** * Map of types to collase functions */ export type CollapseFunctionMap = Map; /** * A list of values indexed by semantic-type, possibly sub-indexed by semantic-role * * @template T The type of the indexed item */ export type TypeRole = {[type: string]: T | {[role: string]: T}}; /** * The class for determining of a subtree can be collapsed */ export class Collapse { /** * A constant to use to indicate no collapsing */ public static NOCOLLAPSE: number = 10000000; // really big complexity /** * The complexity object containing this one */ public complexity: ComplexityVisitor; /** * The cutt-off complexity values for when a structure * of the given type should collapse */ public cutoff: TypeRole = { identifier: 3, number: 3, text: 10, infixop: 15, relseq: 15, multirel: 15, fenced: 18, bigop: 20, integral: 20, fraction: 12, sqrt: 9, root: 12, vector: 15, matrix: 15, cases: 15, superscript: 9, subscript: 9, subsup: 9, punctuated: { endpunct: Collapse.NOCOLLAPSE, startpunct: Collapse.NOCOLLAPSE, value: 12 } }; /** * These are the characters to use for the various collapsed elements * (if an object, then semantic-role is used to get the character * from the object) */ public marker: TypeRole = { identifier: 'x', number: '#', text: '...', appl: { 'limit function': 'lim', value: 'f()' }, fraction: '/', sqrt: '\u221A', root: '\u221A', superscript: '\u25FD\u02D9', subscript: '\u25FD.', subsup: '\u25FD:', vector: { binomial: '(:)', determinant: '|:|', value: '\u27E8:\u27E9' }, matrix: { squarematrix: '[::]', rowvector: '\u27E8\u22EF\u27E9', columnvector: '\u27E8\u22EE\u27E9', determinant: '|::|', value: '(::)' }, cases: '{:', infixop: { addition: '+', subtraction: '\u2212', multiplication: '\u22C5', implicit: '\u22C5', value: '+' }, punctuated: { text: '...', value: ',' } }; /** * The type-to-function mapping for semantic types */ public collapse: CollapseFunctionMap = new Map([ // // For fenced elements, if the contents are collapsed, // collapse the fence instead. // ['fenced', (node, complexity) => { complexity = this.uncollapseChild(complexity, node, 1); if (complexity > this.cutoff.fenced && node.attributes.get('data-semantic-role') === 'leftright') { complexity = this.recordCollapse( node, complexity, this.getText(node.childNodes[0] as MmlNode) + this.getText(node.childNodes[node.childNodes.length - 1] as MmlNode) ); } return complexity; }], // // Collapse function applications if the argument is collapsed // (FIXME: Handle role="limit function" a bit better?) // ['appl', (node, complexity) => { if (this.canUncollapse(node, 2, 2)) { complexity = this.complexity.visitNode(node, false); const marker = this.marker.appl as {[name: string]: string}; const text = marker[node.attributes.get('data-semantic-role') as string] || marker.value; complexity = this.recordCollapse(node, complexity, text); } return complexity; }], // // For sqrt elements, if the contents are collapsed, // collapse the sqrt instead. // ['sqrt', (node, complexity) => { complexity = this.uncollapseChild(complexity, node, 0); if (complexity > this.cutoff.sqrt) { complexity = this.recordCollapse(node, complexity, this.marker.sqrt as string); } return complexity; }], ['root', (node, complexity) => { complexity = this.uncollapseChild(complexity, node, 0, 2); if (complexity > this.cutoff.sqrt) { complexity = this.recordCollapse(node, complexity, this.marker.sqrt as string); } return complexity; }], // // For enclose, include enclosure in collapse // ['enclose', (node, complexity) => { if (this.splitAttribute(node, 'children').length === 1) { const child = this.canUncollapse(node, 1); if (child) { const marker = child.getProperty('collapse-marker') as string; this.unrecordCollapse(child); complexity = this.recordCollapse(node, this.complexity.visitNode(node, false), marker); } } return complexity; }], // // For bigops, get the character to use from the largeop at its core. // ['bigop', (node, complexity) => { if (complexity > this.cutoff.bigop || !node.isKind('mo')) { const id = this.splitAttribute(node, 'content').pop(); const op = this.findChildText(node, id); complexity = this.recordCollapse(node, complexity, op); } return complexity; }], ['integral', (node, complexity) => { if (complexity > this.cutoff.integral || !node.isKind('mo')) { const id = this.splitAttribute(node, 'content').pop(); const op = this.findChildText(node, id); complexity = this.recordCollapse(node, complexity, op); } return complexity; }], // // For relseq and multirel, use proper symbol // ['relseq', (node, complexity) => { if (complexity > this.cutoff.relseq) { const id = this.splitAttribute(node, 'content')[0]; const text = this.findChildText(node, id); complexity = this.recordCollapse(node, complexity, text); } return complexity; }], ['multirel', (node, complexity) => { if (complexity > this.cutoff.relseq) { const id = this.splitAttribute(node, 'content')[0]; const text = this.findChildText(node, id) + '\u22EF'; complexity = this.recordCollapse(node, complexity, text); } return complexity; }], // // Include super- and subscripts into a collapsed base // ['superscript', (node, complexity) => { complexity = this.uncollapseChild(complexity, node, 0, 2); if (complexity > this.cutoff.superscript) { complexity = this.recordCollapse(node, complexity, this.marker.superscript as string); } return complexity; }], ['subscript', (node, complexity) => { complexity = this.uncollapseChild(complexity, node, 0, 2); if (complexity > this.cutoff.subscript) { complexity = this.recordCollapse(node, complexity, this.marker.subscript as string); } return complexity; }], ['subsup', (node, complexity) => { complexity = this.uncollapseChild(complexity, node, 0, 3); if (complexity > this.cutoff.subsup) { complexity = this.recordCollapse(node, complexity, this.marker.subsup as string); } return complexity; }] ] as [string, CollapseFunction][]); /** * The highest id number used for mactions so far */ private idCount = 0; /** * @param {ComplexityVisitor} visitor The visitor for computing complexities */ constructor(visitor: ComplexityVisitor) { this.complexity = visitor; } /** * Check if a node should be collapsible and insert the * maction node to handle that. Return the updated * complexity. * * @param {MmlNode} node The node to check * @param {number} complexity The current complexity of the node * @return {number} The revised complexity */ public check(node: MmlNode, complexity: number): number { const type = node.attributes.get('data-semantic-type') as string; if (this.collapse.has(type)) { return this.collapse.get(type).call(this, node, complexity); } if (this.cutoff.hasOwnProperty(type)) { return this.defaultCheck(node, complexity, type); } return complexity; } /** * Check if the complexity exceeds the cutoff value for the type * * @param {MmlNode} node The node to check * @param {number} complexity The current complexity of the node * @param {string} type The semantic type of the node * @return {number} The revised complexity */ protected defaultCheck(node: MmlNode, complexity: number, type: string): number { const role = node.attributes.get('data-semantic-role') as string; const check = this.cutoff[type]; const cutoff = (typeof check === 'number' ? check : check[role] || check.value); if (complexity > cutoff) { const marker = this.marker[type] || '??'; const text = (typeof marker === 'string' ? marker : marker[role] || marker.value); complexity = this.recordCollapse(node, complexity, text); } return complexity; } /** * @param {MmlNode} node The node to check * @param {number} complexity The current complexity of the node * @param {string} text The text to use for the collapsed node * @return {number} The revised complexity for the collapsed node */ protected recordCollapse(node: MmlNode, complexity: number, text: string): number { text = '\u25C2' + text + '\u25B8'; node.setProperty('collapse-marker', text); node.setProperty('collapse-complexity', complexity); return text.length * this.complexity.complexity.text; } /** * Remove collapse markers (to move them to a parent node) * * @param {MmlNode} node The node to uncollapse */ protected unrecordCollapse(node: MmlNode) { const complexity = node.getProperty('collapse-complexity'); if (complexity != null) { node.attributes.set('data-semantic-complexity', complexity); node.removeProperty('collapse-complexity'); node.removeProperty('collapse-marker'); } } /** * @param {MmlNode} node The node to check if its child is collapsible * @param {number} n The position of the child node to check * @param {number=} m The number of children node must have * @return {MmlNode|null} The child node that was collapsed (or null) */ protected canUncollapse(node: MmlNode, n: number, m: number = 1): MmlNode | null { if (this.splitAttribute(node, 'children').length === m) { const mml = (node.childNodes.length === 1 && (node.childNodes[0] as MmlNode).isInferred ? node.childNodes[0] as MmlNode : node); if (mml && mml.childNodes[n]) { const child = mml.childNodes[n] as MmlNode; if (child.getProperty('collapse-marker')) { return child; } } } return null; } /** * @param {number} complexity The current complexity * @param {MmlNode} node The node to check * @param {number} n The position of the child node to check * @param {number=} m The number of children the node must have * @return {number} The updated complexity */ protected uncollapseChild(complexity: number, node: MmlNode, n: number, m: number = 1): number { const child = this.canUncollapse(node, n, m); if (child) { this.unrecordCollapse(child); if (child.parent !== node) { child.parent.attributes.set('data-semantic-complexity', undefined); } complexity = this.complexity.visitNode(node, false) as number; } return complexity; } /** * @param {MmlNode} node The node whose attribute is to be split * @param {string} id The name of the data-semantic attribute to split * @return {string[]} Array of ids in the attribute split at commas */ protected splitAttribute(node: MmlNode, id: string): string[] { return (node.attributes.get('data-semantic-' + id) as string || '').split(/,/); } /** * @param {MmlNode} node The node whose text content is needed * @return{string} The text of the node (and its children), combined */ protected getText(node: MmlNode): string { if (node.isToken) return (node as AbstractMmlTokenNode).getText(); return node.childNodes.map((n: MmlNode) => this.getText(n)).join(''); } /** * @param {MmlNode} node The node whose child text is needed * @param {string} id The (semantic) id of the child needed * @return {string} The text of the specified child node */ protected findChildText(node: MmlNode, id: string): string { const child = this.findChild(node, id); return this.getText(child.coreMO() || child); } /** * @param {MmlNode} node The node whose child is to be located * @param {string} id The (semantic) id of the child to be found * @return {MmlNode|null} The child node (or null if not found) */ protected findChild(node: MmlNode, id: string): MmlNode | null { if (!node || node.attributes.get('data-semantic-id') === id) return node; if (!node.isToken) { for (const mml of node.childNodes) { const child = this.findChild(mml as MmlNode, id); if (child) return child; } } return null; } /** * Add maction nodes to the nodes in the tree that can collapse * * @paramn {MmlNode} node The root of the tree to check */ public makeCollapse(node: MmlNode) { const nodes: MmlNode[] = []; node.walkTree((child: MmlNode) => { if (child.getProperty('collapse-marker')) { nodes.push(child); } }); this.makeActions(nodes); } /** * @param {MmlNode[]} nodes The list of nodes to replace by maction nodes */ public makeActions(nodes: MmlNode[]) { for (const node of nodes) { this.makeAction(node); } } /** * @return {string} A unique id string. */ private makeId(): string { return 'mjx-collapse-' + this.idCount++; } /** * @param {MmlNode} node The node to make collapsible by replacing with an maction */ public makeAction(node: MmlNode) { if (node.isKind('math')) { node = this.addMrow(node); } const factory = this.complexity.factory; const marker = node.getProperty('collapse-marker') as string; const parent = node.parent; let maction = factory.create('maction', { actiontype: 'toggle', selection: 2, 'data-collapsible': true, id: this.makeId(), 'data-semantic-complexity': node.attributes.get('data-semantic-complexity') }, [ factory.create('mtext', {mathcolor: 'blue'}, [ (factory.create('text') as TextNode).setText(marker) ]) ]); maction.inheritAttributesFrom(node); node.attributes.set('data-semantic-complexity', node.getProperty('collapse-complexity')); node.removeProperty('collapse-marker'); node.removeProperty('collapse-complexity'); parent.replaceChild(maction, node); maction.appendChild(node); } /** * If the node is to be collapsible, add an mrow to it instead so that we can wrap it * in an maction (can't put one around the node). * * @param {MmlNode} node The math node to create an mrow for * @return {MmlNode} The newly created mrow */ public addMrow(node: MmlNode): MmlNode { const mrow = this.complexity.factory.create('mrow', null, node.childNodes[0].childNodes as MmlNode[]); node.childNodes[0].setChildren([mrow]); const attributes = node.attributes.getAllAttributes(); for (const name of Object.keys(attributes)) { if (name.substr(0, 14) === 'data-semantic-') { mrow.attributes.set(name, attributes[name]); delete attributes[name]; } } mrow.setProperty('collapse-marker', node.getProperty('collapse-marker')); mrow.setProperty('collapse-complexity', node.getProperty('collapse-complexity')); node.removeProperty('collapse-marker'); node.removeProperty('collapse-complexity'); return mrow; } } �������������������������������������������������������������������MathJax-src-3.2.2/ts/a11y/complexity/visitor.ts�����������������������������������������������������0000664�0000000�0000000�00000035765�14250155210�0021317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************* * * Copyright (c) 2018-2022 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 Implements a class that computes complexities for enriched math * * @author dpvc@mathjax.org (Davide Cervone) */ import {MmlNode, AbstractMmlTokenNode} from '../../core/MmlTree/MmlNode.js'; import {MmlMroot} from '../../core/MmlTree/MmlNodes/mroot.js'; import {MmlMaction} from '../../core/MmlTree/MmlNodes/maction.js'; import {MmlMsubsup, MmlMsub, MmlMsup} from '../../core/MmlTree/MmlNodes/msubsup.js'; import {MmlMunderover, MmlMunder, MmlMover} from '../../core/MmlTree/MmlNodes/munderover.js'; import {MmlVisitor} from '../../core/MmlTree/MmlVisitor.js'; import {MmlFactory} from '../../core/MmlTree/MmlFactory.js'; import {Collapse} from './collapse.js'; import {OptionList, userOptions, defaultOptions} from '../../util/Options.js'; /*==========================================================================*/ /** * A visitor pattern that computes complexities within the MathML tree */ export class ComplexityVisitor extends MmlVisitor { /** * The options for handling collapsing */ public static OPTIONS: OptionList = { identifyCollapsible: true, // mark elements that should be collapsed makeCollapsible: true, // insert maction to allow collapsing Collapse: Collapse // the Collapse class to use }; /** * Values used to compute complexities */ public complexity: {[name: string]: number} = { text: .5, // each character of a token element adds this to complexity token: .5, // each token element gets this additional complexity child: 1, // child nodes add this to their parent node's complexity script: .8, // script elements reduce their complexity by this factor sqrt: 2, // sqrt adds this extra complexity subsup: 2, // sub-sup adds this extra complexity underover: 2, // under-over adds this extra complexity fraction: 2, // fractions add this extra complexity enclose: 2, // menclose adds this extra complexity action: 2, // maction adds this extra complexity phantom: 0, // mphantom makes complexity 0? xml: 2, // Can't really measure complexity of annotation-xml, so punt glyph: 2 // Can't really measure complexity of mglyph, to punt }; /** * The object used to handle collapsable content */ public collapse: Collapse; /** * The MmlFactory for this visitor */ public factory: MmlFactory; /** * The options for this visitor */ public options: OptionList; /** * @override */ constructor(factory: MmlFactory, options: OptionList) { super(factory); let CLASS = this.constructor as typeof ComplexityVisitor; this.options = userOptions(defaultOptions({}, CLASS.OPTIONS), options); this.collapse = new this.options.Collapse(this); this.factory = factory; } /*==========================================================================*/ /** * @override */ public visitTree(node: MmlNode) { super.visitTree(node, true); if (this.options.makeCollapsible) { this.collapse.makeCollapse(node); } } /** * @override */ public visitNode(node: MmlNode, save: boolean) { if (node.attributes.get('data-semantic-complexity')) return; return super.visitNode(node, save); } /** * For token nodes, use the content length, otherwise, add up the child complexities * * @override */ public visitDefault(node: MmlNode, save: boolean) { let complexity; if (node.isToken) { const text = (node as AbstractMmlTokenNode).getText(); complexity = this.complexity.text * text.length + this.complexity.token; } else { complexity = this.childrenComplexity(node); } return this.setComplexity(node, complexity, save); } /** * For a fraction, add the complexities of the children and scale by script factor, then * add the fraction amount * * @param {MmlNode} node The node whose complixity is being computed * @param {boolean} save True if the complexity is to be saved or just returned */ protected visitMfracNode(node: MmlNode, save: boolean) { const complexity = this.childrenComplexity(node) * this.complexity.script + this.complexity.fraction; return this.setComplexity(node, complexity, save); } /** * For square roots, use the child complexity plus the sqrt complexity * * @param {MmlNode} node The node whose complixity is being computed * @param {boolean} save True if the complexity is to be saved or just returned */ protected visitMsqrtNode(node: MmlNode, save: boolean) { const complexity = this.childrenComplexity(node) + this.complexity.sqrt; return this.setComplexity(node, complexity, save); } /** * For roots, do the sqrt root computation and remove a bit for the root * (since it is counted in the children sum but is smaller) * * @param {MmlMroot} node The node whose complixity is being computed * @param {boolean} save True if the complexity is to be saved or just returned */ protected visitMrootNode(node: MmlMroot, save: boolean) { const complexity = this.childrenComplexity(node) + this.complexity.sqrt - (1 - this.complexity.script) * this.getComplexity(node.childNodes[1]); return this.setComplexity(node, complexity, save); } /** * Phantom complexity is 0 * * @param {MmlNode} node The node whose complixity is being computed * @param {boolean} save True if the complexity is to be saved or just returned */ protected visitMphantomNode(node: MmlNode, save: boolean) { return this.setComplexity(node, this.complexity.phantom, save); } /** * For ms, add the complexity of the quotes to that of the content, and use the * length of that times the text factor as the complexity * * @param {MmlNode} node The node whose complixity is being computed * @param {boolean} save True if the complexity is to be saved or just returned */ protected visitMsNode(node: MmlNode, save: boolean) { const text = node.attributes.get('lquote') + (node as AbstractMmlTokenNode).getText() + node.attributes.get('rquote'); const complexity = text.length * this.complexity.text; return this.setComplexity(node, complexity, save); } /** * For supscripts and superscripts use the maximum of the script complexities, * multiply by the script factor, and add the base complexity. Add the child * complexity for each child, and the subsup complexity. * * @param {MmlMsubsup} node The node whose complixity is being computed * @param {boolean} save True if the complexity is to be saved or just returned */ protected visitMsubsupNode(node: MmlMsubsup, save: boolean) { super.visitDefault(node, true); const sub = node.childNodes[node.sub]; const sup = node.childNodes[node.sup]; const base = node.childNodes[node.base]; let complexity = Math.max( sub ? this.getComplexity(sub) : 0, sup ? this.getComplexity(sup) : 0 ) * this.complexity.script; complexity += this.complexity.child * ((sub ? 1 : 0) + (sup ? 1 : 0)); complexity += (base ? this.getComplexity(base) + this.complexity.child : 0); complexity += this.complexity.subsup; return this.setComplexity(node, complexity, save); } /** * @param {MmlMsub} node The node whose complixity is being computed * @param {boolean} save True if the complexity is to be saved or just returned */ protected visitMsubNode(node: MmlMsub, save: boolean) { return this.visitMsubsupNode(node, save); } /** * @param {MmlMsup} node The node whose complixity is being computed * @param {boolean} save True if the complexity is to be saved or just returned */ protected visitMsupNode(node: MmlMsup, save: boolean) { return this.visitMsubsupNode(node, save); } /** * For under/over, get the maximum of the complexities of the under and over * elements times the script factor, and that the maximum of that with the * base complexity. Add child complexity for all children, and add the * underover amount. * * @param {MmlMunderover} node The node whose complixity is being computed * @param {boolean} save True if the complexity is to be saved or just returned */ protected visitMunderoverNode(node: MmlMunderover, save: boolean) { super.visitDefault(node, true); const under = node.childNodes[node.under]; const over = node.childNodes[node.over]; const base = node.childNodes[node.base]; let complexity = Math.max( under ? this.getComplexity(under) : 0, over ? this.getComplexity(over) : 0, ) * this.complexity.script; if (base) { complexity = Math.max(this.getComplexity(base), complexity); } complexity += this.complexity.child * ((under ? 1 : 0) + (over ? 1 : 0) + (base ? 1 : 0)); complexity += this.complexity.underover; return this.setComplexity(node, complexity, save); } /** * @param {MmlMunder} node The node whose complixity is being computed * @param {boolean} save True if the complexity is to be saved or just returned */ protected visitMunderNode(node: MmlMunder, save: boolean) { return this.visitMunderoverNode(node, save); } /** * @param {MmlMover} node The node whose complixity is being computed * @param {boolean} save True if the complexity is to be saved or just returned */ protected visitMoverNode(node: MmlMover, save: boolean) { return this.visitMunderoverNode(node, save); } /** * For enclose, use sum of child complexities plus some for the enclose * * @param {MmlNode} node The node whose complixity is being computed * @param {boolean} save True if the complexity is to be saved or just returned */ protected visitMencloseNode(node: MmlNode, save: boolean) { const complexity = this.childrenComplexity(node) + this.complexity.enclose; return this.setComplexity(node, complexity, save); } /** * For actions, use the complexity of the selected child * * @param {MmlMaction} node The node whose complixity is being computed * @param {boolean} save True if the complexity is to be saved or just returned */ protected visitMactionNode(node: MmlMaction, save: boolean) { this.childrenComplexity(node); const complexity = this.getComplexity(node.selected); return this.setComplexity(node, complexity, save); } /** * For semantics, get the complexity from the first child * * @param {MmlNode} node The node whose complixity is being computed * @param {boolean} save True if the complexity is to be saved or just returned */ protected visitMsemanticsNode(node: MmlNode, save: boolean) { const child = node.childNodes[0] as MmlNode; let complexity = 0; if (child) { this.visitNode(child, true); complexity = this.getComplexity(child); } return this.setComplexity(node, complexity, save); } /** * Can't really measure annotations, so just use a specific value * * @param {MmlNode} node The node whose complixity is being computed * @param {boolean} save True if the complexity is to be saved or just returned */ protected visitAnnotationNode(node: MmlNode, save: boolean) { return this.setComplexity(node, this.complexity.xml, save); } /** * Can't really measure annotations, so just use a specific value * * @param {MmlNode} node The node whose complixity is being computed * @param {boolean} save True if the complexity is to be saved or just returned */ protected visitAnnotation_xmlNode(node: MmlNode, save: boolean) { return this.setComplexity(node, this.complexity.xml, save); } /** * Can't really measure mglyph complexity, so just use a specific value * * @param {MmlNode} node The node whose complixity is being computed * @param {boolean} save True if the complexity is to be saved or just returned */ protected visitMglyphNode(node: MmlNode, save: boolean) { return this.setComplexity(node, this.complexity.glyph, save); } /*==========================================================================*/ /** * @param {MmlNode} node The node whose complixity is needed * @return {number} The complexity fof the node (if collapsable, then the collapsed complexity) */ public getComplexity(node: MmlNode): number { const collapsed = node.getProperty('collapsedComplexity'); return (collapsed != null ? collapsed : node.attributes.get('data-semantic-complexity')) as number; } /** * @param {MmlNode} node The node whose complixity is being set * @param {complexity} number The complexity for the node * @param {boolean} save True if complexity is to be set or just reported */ protected setComplexity(node: MmlNode, complexity: number, save: boolean) { if (save) { if (this.options.identifyCollapsible) { complexity = this.collapse.check(node, complexity); } node.attributes.set('data-semantic-complexity', complexity); } return complexity; } /** * @param {MmlNode} node The node whose children complexities are to be added * @return {number} The sum of the complexities, plus child complexity for each one */ protected childrenComplexity(node: MmlNode): number { super.visitDefault(node, true); let complexity = 0; for (const child of node.childNodes) { complexity += this.getComplexity(child as MmlNode); } if (node.childNodes.length > 1) { complexity += node.childNodes.length * this.complexity.child; } return complexity; } } �����������MathJax-src-3.2.2/ts/a11y/explorer.ts���������������������������������������������������������������0000664�0000000�0000000�00000054070�14250155210�0017251�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************* * * Copyright (c) 2018-2022 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 implements the Explorer * * @author dpvc@mathjax.org (Davide Cervone) */ import {Handler} from '../core/Handler.js'; import {MmlNode} from '../core/MmlTree/MmlNode.js'; import {MathML} from '../input/mathml.js'; import {STATE, newState} from '../core/MathItem.js'; import {EnrichedMathItem, EnrichedMathDocument, EnrichHandler} from './semantic-enrich.js'; import {MathDocumentConstructor} from '../core/MathDocument.js'; import {OptionList, expandable} from '../util/Options.js'; import {SerializedMmlVisitor} from '../core/MmlTree/SerializedMmlVisitor.js'; import {MJContextMenu} from '../ui/menu/MJContextMenu.js'; import {Explorer} from './explorer/Explorer.js'; import * as ke from './explorer/KeyExplorer.js'; import * as me from './explorer/MouseExplorer.js'; import {TreeColorer, FlameColorer} from './explorer/TreeExplorer.js'; import {LiveRegion, ToolTip, HoverRegion} from './explorer/Region.js'; import {Submenu} from 'mj-context-menu/js/item_submenu.js'; import Sre from './sre.js'; /** * Generic constructor for Mixins */ export type Constructor = new(...args: any[]) => T; /** * Shorthands for types with HTMLElement, Text, and Document instead of generics */ export type HANDLER = Handler; export type HTMLDOCUMENT = EnrichedMathDocument; export type HTMLMATHITEM = EnrichedMathItem; export type MATHML = MathML; /*==========================================================================*/ /** * Add STATE value for having the Explorer added (after TYPESET and before INSERTED or CONTEXT_MENU) */ newState('EXPLORER', 160); /** * The properties added to MathItem for the Explorer */ export interface ExplorerMathItem extends HTMLMATHITEM { /** * @param {HTMLDocument} document The document where the Explorer is being added * @param {boolean} force True to force the explorer even if enableExplorer is false */ explorable(document: HTMLDOCUMENT, force?: boolean): void; /** * @param {HTMLDocument} document The document where the Explorer is being added */ attachExplorers(document: HTMLDOCUMENT): void; } /** * The mixin for adding the Explorer to MathItems * * @param {B} BaseMathItem The MathItem class to be extended * @param {Function} toMathML The function to serialize the internal MathML * @returns {ExplorerMathItem} The Explorer MathItem class * * @template B The MathItem class to extend */ export function ExplorerMathItemMixin>( BaseMathItem: B, toMathML: (node: MmlNode) => string ): Constructor & B { return class extends BaseMathItem { /** * The Explorer objects for this math item */ protected explorers: {[key: string]: Explorer} = {}; /** * The currently attached explorers */ protected attached: string[] = []; /** * True when a rerendered element should restart these explorers */ protected restart: string[] = []; /** * True when a rerendered element should regain the focus */ protected refocus: boolean = false; /** * Save explorer id during rerendering. */ protected savedId: string = null; /** * Add the explorer to the output for this math item * * @param {HTMLDocument} document The MathDocument for the MathItem * @param {boolean} force True to force the explorer even if enableExplorer is false */ public explorable(document: ExplorerMathDocument, force: boolean = false) { if (this.state() >= STATE.EXPLORER) return; if (!this.isEscaped && (document.options.enableExplorer || force)) { const node = this.typesetRoot; const mml = toMathML(this.root); if (this.savedId) { this.typesetRoot.setAttribute('sre-explorer-id', this.savedId); this.savedId = null; } // Init explorers: this.explorers = initExplorers(document, node, mml); this.attachExplorers(document); } this.state(STATE.EXPLORER); } /** * Attaches the explorers that are currently meant to be active given * the document options. Detaches all others. * @param {ExplorerMathDocument} document The current document. */ public attachExplorers(document: ExplorerMathDocument) { this.attached = []; let keyExplorers = []; for (let key of Object.keys(this.explorers)) { let explorer = this.explorers[key]; if (explorer instanceof ke.AbstractKeyExplorer) { explorer.AddEvents(); explorer.stoppable = false; keyExplorers.unshift(explorer); } if (document.options.a11y[key]) { explorer.Attach(); this.attached.push(key); } else { explorer.Detach(); } } // Ensure that the last currently attached key explorer stops propagating // key events. for (let explorer of keyExplorers) { if (explorer.attached) { explorer.stoppable = true; break; } } } /** * @override */ public rerender(document: ExplorerMathDocument, start: number = STATE.RERENDER) { this.savedId = this.typesetRoot.getAttribute('sre-explorer-id'); this.refocus = (window.document.activeElement === this.typesetRoot); for (let key of this.attached) { let explorer = this.explorers[key]; if (explorer.active) { this.restart.push(key); explorer.Stop(); } } super.rerender(document, start); } /** * @override */ public updateDocument(document: ExplorerMathDocument) { super.updateDocument(document); this.refocus && this.typesetRoot.focus(); this.restart.forEach(x => this.explorers[x].Start()); this.restart = []; this.refocus = false; } }; } /** * The functions added to MathDocument for the Explorer */ export interface ExplorerMathDocument extends HTMLDOCUMENT { /** * The objects needed for the explorer */ explorerRegions: ExplorerRegions; /** * Add the Explorer to the MathItems in the MathDocument * * @returns {MathDocument} The MathDocument (so calls can be chained) */ explorable(): HTMLDOCUMENT; } /** * The mixin for adding the Explorer to MathDocuments * * @param {B} BaseDocument The MathDocument class to be extended * @returns {ExplorerMathDocument} The extended MathDocument class */ export function ExplorerMathDocumentMixin>( BaseDocument: B ): MathDocumentConstructor & B { return class extends BaseDocument { /** * @override */ public static OPTIONS: OptionList = { ...BaseDocument.OPTIONS, enableExplorer: true, renderActions: expandable({ ...BaseDocument.OPTIONS.renderActions, explorable: [STATE.EXPLORER] }), sre: expandable({ ...BaseDocument.OPTIONS.sre, speech: 'shallow', // overrides option in EnrichedMathDocument }), a11y: { align: 'top', // placement of magnified expression backgroundColor: 'Blue', // color for background of selected sub-expression backgroundOpacity: 20, // opacity for background of selected sub-expression braille: false, // switch on Braille output flame: false, // color collapsible sub-expressions foregroundColor: 'Black', // color to use for text of selected sub-expression foregroundOpacity: 100, // opacity for text of selected sub-expression highlight: 'None', // type of highlighting for collapsible sub-expressions hover: false, // show collapsible sub-expression on mouse hovering infoPrefix: false, // show speech prefixes on mouse hovering infoRole: false, // show semantic role on mouse hovering infoType: false, // show semantic type on mouse hovering keyMagnifier: false, // switch on magnification via key exploration magnification: 'None', // type of magnification magnify: '400%', // percentage of magnification of zoomed expressions mouseMagnifier: false, // switch on magnification via mouse hovering speech: true, // switch on speech output subtitles: true, // show speech as a subtitle treeColoring: false, // tree color expression viewBraille: false // display Braille output as subtitles } }; /** * The objects needed for the explorer */ public explorerRegions: ExplorerRegions; /** * Extend the MathItem class used for this MathDocument * and create the visitor and explorer objects needed for the explorer * * @override * @constructor */ constructor(...args: any[]) { super(...args); const ProcessBits = (this.constructor as typeof BaseDocument).ProcessBits; if (!ProcessBits.has('explorer')) { ProcessBits.allocate('explorer'); } const visitor = new SerializedMmlVisitor(this.mmlFactory); const toMathML = ((node: MmlNode) => visitor.visitTree(node)); this.options.MathItem = ExplorerMathItemMixin(this.options.MathItem, toMathML); // TODO: set backward compatibility options here. this.explorerRegions = initExplorerRegions(this); } /** * Add the Explorer to the MathItems in this MathDocument * * @return {ExplorerMathDocument} The MathDocument (so calls can be chained) */ public explorable(): ExplorerMathDocument { if (!this.processed.isSet('explorer')) { if (this.options.enableExplorer) { for (const math of this.math) { (math as ExplorerMathItem).explorable(this); } } this.processed.set('explorer'); } return this; } /** * @override */ public state(state: number, restore: boolean = false) { super.state(state, restore); if (state < STATE.EXPLORER) { this.processed.clear('explorer'); } return this; } }; } /*==========================================================================*/ /** * Add Explorer functions to a Handler instance * * @param {Handler} handler The Handler instance to enhance * @param {MathML} MmlJax A MathML input jax to be used for the semantic enrichment * @returns {Handler} The handler that was modified (for purposes of chainging extensions) */ export function ExplorerHandler(handler: HANDLER, MmlJax: MATHML = null): HANDLER { if (!handler.documentClass.prototype.enrich && MmlJax) { handler = EnrichHandler(handler, MmlJax); } handler.documentClass = ExplorerMathDocumentMixin(handler.documentClass as any); return handler; } /*==========================================================================*/ /** * The regions objects needed for the explorers. */ export type ExplorerRegions = { speechRegion?: LiveRegion, brailleRegion?: LiveRegion, magnifier?: HoverRegion, tooltip1?: ToolTip, tooltip2?: ToolTip, tooltip3?: ToolTip }; /** * Initializes the regions needed for a document. * @param {ExplorerMathDocument} document The current document. */ function initExplorerRegions(document: ExplorerMathDocument) { return { speechRegion: new LiveRegion(document), brailleRegion: new LiveRegion(document), magnifier: new HoverRegion(document), tooltip1: new ToolTip(document), tooltip2: new ToolTip(document), tooltip3: new ToolTip(document) }; } /** * Type of explorer initialization methods. * @type {(ExplorerMathDocument, HTMLElement, any[]): Explorer} */ type ExplorerInit = (doc: ExplorerMathDocument, node: HTMLElement, ...rest: any[]) => Explorer; /** * Generation methods for all MathJax explorers available via option settings. */ let allExplorers: {[options: string]: ExplorerInit} = { speech: (doc: ExplorerMathDocument, node: HTMLElement, ...rest: any[]) => { let explorer = ke.SpeechExplorer.create( doc, doc.explorerRegions.speechRegion, node, ...rest) as ke.SpeechExplorer; explorer.speechGenerator.setOptions({ locale: doc.options.sre.locale, domain: doc.options.sre.domain, style: doc.options.sre.style, modality: 'speech'}); // This weeds out the case of providing a non-existent locale option. let locale = explorer.speechGenerator.getOptions().locale; if (locale !== Sre.engineSetup().locale) { doc.options.sre.locale = Sre.engineSetup().locale; explorer.speechGenerator.setOptions({locale: doc.options.sre.locale}); } explorer.showRegion = 'subtitles'; return explorer; }, braille: (doc: ExplorerMathDocument, node: HTMLElement, ...rest: any[]) => { let explorer = ke.SpeechExplorer.create( doc, doc.explorerRegions.brailleRegion, node, ...rest) as ke.SpeechExplorer; explorer.speechGenerator.setOptions({locale: 'nemeth', domain: 'default', style: 'default', modality: 'braille'}); explorer.showRegion = 'viewBraille'; return explorer; }, keyMagnifier: (doc: ExplorerMathDocument, node: HTMLElement, ...rest: any[]) => ke.Magnifier.create(doc, doc.explorerRegions.magnifier, node, ...rest), mouseMagnifier: (doc: ExplorerMathDocument, node: HTMLElement, ..._rest: any[]) => me.ContentHoverer.create(doc, doc.explorerRegions.magnifier, node, (x: HTMLElement) => x.hasAttribute('data-semantic-type'), (x: HTMLElement) => x), hover: (doc: ExplorerMathDocument, node: HTMLElement, ..._rest: any[]) => me.FlameHoverer.create(doc, null, node), infoType: (doc: ExplorerMathDocument, node: HTMLElement, ..._rest: any[]) => me.ValueHoverer.create(doc, doc.explorerRegions.tooltip1, node, (x: HTMLElement) => x.hasAttribute('data-semantic-type'), (x: HTMLElement) => x.getAttribute('data-semantic-type')), infoRole: (doc: ExplorerMathDocument, node: HTMLElement, ..._rest: any[]) => me.ValueHoverer.create(doc, doc.explorerRegions.tooltip2, node, (x: HTMLElement) => x.hasAttribute('data-semantic-role'), (x: HTMLElement) => x.getAttribute('data-semantic-role')), infoPrefix: (doc: ExplorerMathDocument, node: HTMLElement, ..._rest: any[]) => me.ValueHoverer.create(doc, doc.explorerRegions.tooltip3, node, (x: HTMLElement) => x.hasAttribute('data-semantic-prefix'), (x: HTMLElement) => x.getAttribute('data-semantic-prefix')), flame: (doc: ExplorerMathDocument, node: HTMLElement, ..._rest: any[]) => FlameColorer.create(doc, null, node), treeColoring: (doc: ExplorerMathDocument, node: HTMLElement, ...rest: any[]) => TreeColorer.create(doc, null, node, ...rest) }; /** * Initialises explorers for a document. * @param {ExplorerMathDocument} document The target document. * @param {HTMLElement} node The node explorers will be attached to. * @param {string} mml The corresponding Mathml node as a string. * @return {Explorer[]} A list of initialised explorers. */ function initExplorers(document: ExplorerMathDocument, node: HTMLElement, mml: string): {[key: string]: Explorer} { let explorers: {[key: string]: Explorer} = {}; for (let key of Object.keys(allExplorers)) { explorers[key] = allExplorers[key](document, node, mml); } return explorers; } /* Context Menu Interactions */ /** * Sets a list of a11y options for a given document. * @param {HTMLDOCUMENT} document The current document. * @param {{[key: string]: any}} options Association list for a11y option value pairs. */ export function setA11yOptions(document: HTMLDOCUMENT, options: {[key: string]: any}) { let sreOptions = Sre.engineSetup() as {[name: string]: string}; for (let key in options) { if (document.options.a11y[key] !== undefined) { setA11yOption(document, key, options[key]); if (key === 'locale') { document.options.sre[key] = options[key]; } continue; } if (sreOptions[key] !== undefined) { document.options.sre[key] = options[key]; } } // Reinit explorers for (let item of document.math) { (item as ExplorerMathItem).attachExplorers(document as ExplorerMathDocument); } } /** * Sets a single a11y option for a menu name. * @param {HTMLDOCUMENT} document The current document. * @param {string} option The option name in the menu. * @param {string|boolean} value The new value. */ export function setA11yOption(document: HTMLDOCUMENT, option: string, value: string | boolean) { switch (option) { case 'magnification': switch (value) { case 'None': document.options.a11y.magnification = value; document.options.a11y.keyMagnifier = false; document.options.a11y.mouseMagnifier = false; break; case 'Keyboard': document.options.a11y.magnification = value; document.options.a11y.keyMagnifier = true; document.options.a11y.mouseMagnifier = false; break; case 'Mouse': document.options.a11y.magnification = value; document.options.a11y.keyMagnifier = false; document.options.a11y.mouseMagnifier = true; break; } break; case 'highlight': switch (value) { case 'None': document.options.a11y.highlight = value; document.options.a11y.hover = false; document.options.a11y.flame = false; break; case 'Hover': document.options.a11y.highlight = value; document.options.a11y.hover = true; document.options.a11y.flame = false; break; case 'Flame': document.options.a11y.highlight = value; document.options.a11y.hover = false; document.options.a11y.flame = true; break; } break; default: document.options.a11y[option] = value; } } /** * Values for the ClearSpeak preference variables. */ let csPrefsSetting: {[pref: string]: string} = {}; /** * Generator of all variables for the Clearspeak Preference settings. * @param {MJContextMenu} menu The current context menu. * @param {string[]} prefs The preferences. */ let csPrefsVariables = function(menu: MJContextMenu, prefs: string[]) { let srVariable = menu.pool.lookup('speechRules'); for (let pref of prefs) { if (csPrefsSetting[pref]) continue; menu.factory.get('variable')(menu.factory, { name: 'csprf_' + pref, setter: (value: string) => { csPrefsSetting[pref] = value; srVariable.setValue( 'clearspeak-' + Sre.clearspeakPreferences.addPreference( Sre.clearspeakStyle(), pref, value) ); }, getter: () => { return csPrefsSetting[pref] || 'Auto'; } }, menu.pool); } }; /** * Generate the selection box for the Clearspeak Preferences. * @param {MJContextMenu} menu The current context menu. * @param {string} locale The current locale. */ let csSelectionBox = function(menu: MJContextMenu, locale: string) { let prefs = Sre.clearspeakPreferences.getLocalePreferences(); let props = prefs[locale]; if (!props) { let csEntry = menu.findID('Accessibility', 'Speech', 'Clearspeak'); if (csEntry) { csEntry.disable(); } return null; } csPrefsVariables(menu, Object.keys(props)); let items = []; for (const prop of Object.getOwnPropertyNames(props)) { items.push({ 'title': prop, 'values': props[prop].map(x => x.replace(RegExp('^' + prop + '_'), '')), 'variable': 'csprf_' + prop }); } let sb = menu.factory.get('selectionBox')(menu.factory, { 'title': 'Clearspeak Preferences', 'signature': '', 'order': 'alphabetic', 'grid': 'square', 'selections': items }, menu); return {'type': 'command', 'id': 'ClearspeakPreferences', 'content': 'Select Preferences', 'action': () => sb.post(0, 0)}; }; /** * Creates dynamic clearspeak menu. * @param {MJContextMenu} menu The context menu. * @param {Submenu} sub The submenu to attach. */ let csMenu = function(menu: MJContextMenu, sub: Submenu) { let locale = menu.pool.lookup('locale').getValue() as string; const box = csSelectionBox(menu, locale); let items: Object[] = []; try { items = Sre.clearspeakPreferences.smartPreferences( menu.mathItem, locale); } catch (e) { console.log(e); } if (box) { items.splice(2, 0, box); } return menu.factory.get('subMenu')(menu.factory, { items: items, id: 'Clearspeak' }, sub); }; MJContextMenu.DynamicSubmenus.set('Clearspeak', csMenu); /** * Creates dynamic locale menu. * @param {MJContextMenu} menu The context menu. * @param {Submenu} sub The submenu to attach. */ let language = function(menu: MJContextMenu, sub: Submenu) { let radios: {type: string, id: string, content: string, variable: string}[] = []; for (let lang of Sre.locales.keys()) { if (lang === 'nemeth') continue; radios.push({type: 'radio', id: lang, content: Sre.locales.get(lang) || lang, variable: 'locale'}); } radios.sort((x, y) => x.content.localeCompare(y.content, 'en')); return menu.factory.get('subMenu')(menu.factory, { items: radios, id: 'Language'}, sub); }; MJContextMenu.DynamicSubmenus.set('A11yLanguage', language); MathJax-src-3.2.2/ts/a11y/explorer/000077500000000000000000000000001425015521000166735ustar00rootroot00000000000000MathJax-src-3.2.2/ts/a11y/explorer/Explorer.ts000066400000000000000000000142161425015521000210470ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2009-2022 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 Explorers for A11Y purposes. * * @author v.sorge@mathjax.org (Volker Sorge) */ import {A11yDocument, Region} from './Region.js'; import Sre from '../sre.js'; /** * A11y explorers. * @interface */ export interface Explorer { /** * Flag indicating if the explorer is active. * @type {boolean} */ active: boolean; /** * Flag indicating if event bubbling is stopped. * @type {boolean} */ stoppable: boolean; /** * Attaches navigator and its event handlers to a node. */ Attach(): void; /** * Detaches navigator and its event handlers to a node. */ Detach(): void; /** * Starts the explorer. */ Start(): void; /** * Stops the explorer. */ Stop(): void; /** * Adds the events of the explorer to the node's event listener. */ AddEvents(): void; /** * Removes the events of the explorer from the node's event listener. */ RemoveEvents(): void; /** * Update the explorer after state changes. * @param {boolean=} force Forces the update in any case. (E.g., even if * explorer is inactive.) */ Update(force?: boolean): void; } /** * Abstract class implementing the very basic explorer functionality. * * Explorers use creator pattern to ensure they automatically attach themselves * to their node. This class provides the create method and is consequently not * declared abstract. * * @constructor * @implements {Explorer} * * @template T The type that is consumed by the Region of this explorer. */ export class AbstractExplorer implements Explorer { /** * @override */ public stoppable: boolean = true; /** * Named events and their functions. * @type {[string, function(x: Event)][]} */ protected events: [string, (x: Event) => void][] = []; /** * The Sre highlighter associated with the walker. * @type {Sre.highlighter} */ protected highlighter: Sre.highlighter = this.getHighlighter(); /** * Flag if explorer is active. * @type {boolean} */ private _active: boolean = false; /** * Stops event bubbling. * @param {Event} event The event that is stopped. */ protected static stopEvent(event: Event) { if (event.preventDefault) { event.preventDefault(); } else { event.returnValue = false; } if (event.stopImmediatePropagation) { event.stopImmediatePropagation(); } else if (event.stopPropagation) { event.stopPropagation(); } event.cancelBubble = true; } /** * Creator pattern for explorers. * @param {A11yDocument} document The current document. * @param {Region} region A region to display results. * @param {HTMLElement} node The node on which the explorer works. * @param {any[]} ...rest Remaining information. * @return {Explorer} An object of the particular explorer class. * * @template T */ public static create( document: A11yDocument, region: Region, node: HTMLElement, ...rest: any[] ): Explorer { let explorer = new this(document, region, node, ...rest); return explorer; } /** * @constructor * @param {A11yDocument} document The current document. * @param {Region} region A region to display results. * @param {HTMLElement} node The node on which the explorer works. * @param {any[]} ...rest Remaining information. */ protected constructor( public document: A11yDocument, protected region: Region, protected node: HTMLElement, ..._rest: any[] ) { } /** * @return {[string, (x: Event) => void][]} The events associated with this * explorer. */ protected Events(): [string, (x: Event) => void][] { return this.events; } /** * @override */ public get active(): boolean { return this._active; } /** * @override */ public set active(flag: boolean) { this._active = flag; } /** * @override */ public Attach() { this.AddEvents(); } /** * @override */ public Detach() { this.RemoveEvents(); } /** * @override */ public Start() { this.highlighter = this.getHighlighter(); this.active = true; } /** * @override */ public Stop() { if (this.active) { this.region.Clear(); this.region.Hide(); this.active = false; } } /** * @override */ public AddEvents() { for (let [eventkind, eventfunc] of this.events) { this.node.addEventListener(eventkind, eventfunc); } } /** * @override */ public RemoveEvents() { for (let [eventkind, eventfunc] of this.events) { this.node.removeEventListener(eventkind, eventfunc); } } /** * @override */ // @ts-ignore: unused variable public Update(force: boolean = false): void {} /** * @return {Sre.Highlighter} A highlighter for the explorer. */ protected getHighlighter(): Sre.highlighter { let opts = this.document.options.a11y; let foreground = {color: opts.foregroundColor.toLowerCase(), alpha: opts.foregroundOpacity / 100}; let background = {color: opts.backgroundColor.toLowerCase(), alpha: opts.backgroundOpacity / 100}; return Sre.getHighlighter( background, foreground, {renderer: this.document.outputJax.name, browser: 'v3'}); } /** * Stops the events of this explorer from bubbling. * @param {Event} event The event to stop. */ protected stopEvent(event: Event) { if (this.stoppable) { AbstractExplorer.stopEvent(event); } } } MathJax-src-3.2.2/ts/a11y/explorer/KeyExplorer.ts000066400000000000000000000256251425015521000215260ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2009-2022 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 Explorers based on keyboard events. * * @author v.sorge@mathjax.org (Volker Sorge) */ import {A11yDocument, Region} from './Region.js'; import {Explorer, AbstractExplorer} from './Explorer.js'; import Sre from '../sre.js'; /** * Interface for keyboard explorers. Adds the necessary keyboard events. * @interface * @extends {Explorer} */ export interface KeyExplorer extends Explorer { /** * Function to be executed on key down. * @param {KeyboardEvent} event The keyboard event. */ KeyDown(event: KeyboardEvent): void; /** * Function to be executed on focus in. * @param {KeyboardEvent} event The keyboard event. */ FocusIn(event: FocusEvent): void; /** * Function to be executed on focus out. * @param {KeyboardEvent} event The keyboard event. */ FocusOut(event: FocusEvent): void; } /** * @constructor * @extends {AbstractExplorer} * * @template T The type that is consumed by the Region of this explorer. */ export abstract class AbstractKeyExplorer extends AbstractExplorer implements KeyExplorer { /** * Flag indicating if the explorer is attached to an object. */ public attached: boolean = false; /** * The attached Sre walker. * @type {Walker} */ protected walker: Sre.walker; private eventsAttached: boolean = false; /** * @override */ protected events: [string, (x: Event) => void][] = super.Events().concat( [['keydown', this.KeyDown.bind(this)], ['focusin', this.FocusIn.bind(this)], ['focusout', this.FocusOut.bind(this)]]); /** * The original tabindex value before explorer was attached. * @type {boolean} */ private oldIndex: number = null; /** * @override */ public abstract KeyDown(event: KeyboardEvent): void; /** * @override */ public FocusIn(_event: FocusEvent) { } /** * @override */ public FocusOut(_event: FocusEvent) { this.Stop(); } /** * @override */ public Update(force: boolean = false) { if (!this.active && !force) return; this.highlighter.unhighlight(); let nodes = this.walker.getFocus(true).getNodes(); if (!nodes.length) { this.walker.refocus(); nodes = this.walker.getFocus().getNodes(); } this.highlighter.highlight(nodes as HTMLElement[]); } /** * @override */ public Attach() { super.Attach(); this.attached = true; this.oldIndex = this.node.tabIndex; this.node.tabIndex = 1; this.node.setAttribute('role', 'application'); } /** * @override */ public AddEvents() { if (!this.eventsAttached) { super.AddEvents(); this.eventsAttached = true; } } /** * @override */ public Detach() { if (this.active) { this.node.tabIndex = this.oldIndex; this.oldIndex = null; this.node.removeAttribute('role'); } this.attached = false; } /** * @override */ public Stop() { if (this.active) { this.highlighter.unhighlight(); this.walker.deactivate(); } super.Stop(); } } /** * Explorer that pushes speech to live region. * @constructor * @extends {AbstractKeyExplorer} */ export class SpeechExplorer extends AbstractKeyExplorer { private static updatePromise = Promise.resolve(); /** * The Sre speech generator associated with the walker. * @type {SpeechGenerator} */ public speechGenerator: Sre.speechGenerator; /** * The name of the option used to control when this is being shown * @type {string} */ 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 * necessary, as otherwise it leads to incorrect stacking. * @type {boolean} */ private restarted: boolean = false; /** * @constructor * @extends {AbstractKeyExplorer} */ constructor(public document: A11yDocument, protected region: Region, protected node: HTMLElement, private mml: string) { super(document, region, node); this.initWalker(); } /** * @override */ public Start() { if (!this.attached) return; let options = this.getOptions(); if (!this.init) { this.init = true; SpeechExplorer.updatePromise = SpeechExplorer.updatePromise.then(async () => { return Sre.sreReady() .then(() => Sre.setupEngine({locale: options.locale})) .then(() => { // Important that both are in the same block so speech explorers // are restarted sequentially. this.Speech(this.walker); this.Start(); }); }) .catch((error: Error) => console.log(error.message)); return; } super.Start(); this.speechGenerator = Sre.getSpeechGenerator('Direct'); this.speechGenerator.setOptions(options); this.walker = Sre.getWalker( 'table', this.node, this.speechGenerator, this.highlighter, this.mml); this.walker.activate(); this.Update(); if (this.document.options.a11y[this.showRegion]) { SpeechExplorer.updatePromise.then( () => this.region.Show(this.node, this.highlighter)); } this.restarted = true; } /** * @override */ public Update(force: boolean = false) { super.Update(force); let options = this.speechGenerator.getOptions(); // This is a necessary in case speech options have changed via keypress // during walking. if (options.modality === 'speech') { this.document.options.sre.domain = options.domain; this.document.options.sre.style = options.style; this.document.options.a11y.speechRules = options.domain + '-' + options.style; } SpeechExplorer.updatePromise = SpeechExplorer.updatePromise.then(async () => { return Sre.sreReady() .then(() => Sre.setupEngine({modality: options.modality, locale: options.locale})) .then(() => this.region.Update(this.walker.speech())); }); } /** * Computes the speech for the current expression once Sre is ready. * @param {Walker} walker The sre walker. */ public Speech(walker: Sre.walker) { SpeechExplorer.updatePromise.then(() => { 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); } }); } /** * @override */ public KeyDown(event: KeyboardEvent) { const code = event.keyCode; this.walker.modifier = event.shiftKey; if (code === 27) { this.Stop(); this.stopEvent(event); return; } if (this.active) { this.Move(code); if (this.triggerLink(code)) return; this.stopEvent(event); return; } if (code === 32 && event.shiftKey || code === 13) { this.Start(); this.stopEvent(event); } } /** * Programmatically triggers a link if the focused node contains one. * @param {number} code The keycode of the last key pressed. */ protected triggerLink(code: number) { if (code !== 13) { return false; } let node = this.walker.getFocus().getNodes()?.[0]; let focus = node?. getAttribute('data-semantic-postfix')?. match(/(^| )link($| )/); if (focus) { node.parentNode.dispatchEvent(new MouseEvent('click')); return true; } return false; } /** * @override */ public Move(key: number) { this.walker.move(key); this.Update(); } /** * Initialises the Sre walker. */ private initWalker() { this.speechGenerator = Sre.getSpeechGenerator('Tree'); let dummy = Sre.getWalker( 'dummy', this.node, this.speechGenerator, this.highlighter, this.mml); this.walker = dummy; } /** * Retrieves the speech options to sync with document options. * @return {{[key: string]: string}} The options settings for the speech * generator. */ private getOptions(): {[key: string]: string} { let options = this.speechGenerator.getOptions(); let sreOptions = this.document.options.sre; if (options.modality === 'speech' && (options.locale !== sreOptions.locale || options.domain !== sreOptions.domain || options.style !== sreOptions.style)) { options.domain = sreOptions.domain; options.style = sreOptions.style; options.locale = sreOptions.locale; this.walker.update(options); } return options; } } /** * Explorer that magnifies what is currently explored. Uses a hover region. * @constructor * @extends {AbstractKeyExplorer} */ export class Magnifier extends AbstractKeyExplorer { /** * @constructor * @extends {AbstractKeyExplorer} */ constructor(public document: A11yDocument, protected region: Region, protected node: HTMLElement, private mml: string) { super(document, region, node); this.walker = Sre.getWalker( 'table', this.node, Sre.getSpeechGenerator('Dummy'), this.highlighter, this.mml); } /** * @override */ public Update(force: boolean = false) { super.Update(force); this.showFocus(); } /** * @override */ public Start() { super.Start(); if (!this.attached) return; this.region.Show(this.node, this.highlighter); this.walker.activate(); this.Update(); } /** * Shows the nodes that are currently focused. */ private showFocus() { let node = this.walker.getFocus().getNodes()[0] as HTMLElement; this.region.Show(node, this.highlighter); } /** * @override */ public Move(key: number) { let result = this.walker.move(key); if (result) { this.Update(); } } /** * @override */ public KeyDown(event: KeyboardEvent) { const code = event.keyCode; this.walker.modifier = event.shiftKey; if (code === 27) { this.Stop(); this.stopEvent(event); return; } if (this.active && code !== 13) { this.Move(code); this.stopEvent(event); return; } if (code === 32 && event.shiftKey || code === 13) { this.Start(); this.stopEvent(event); } } } MathJax-src-3.2.2/ts/a11y/explorer/MouseExplorer.ts000066400000000000000000000130211425015521000220510ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2009-2022 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 Explorers based on mouse events. * * @author v.sorge@mathjax.org (Volker Sorge) */ import {A11yDocument, DummyRegion, Region} from './Region.js'; import {Explorer, AbstractExplorer} from './Explorer.js'; import '../sre.js'; /** * Interface for mouse explorers. Adds the necessary mouse events. * @interface * @extends {Explorer} */ export interface MouseExplorer extends Explorer { /** * Function to be executed on mouse over. * @param {MouseEvent} event The mouse event. */ MouseOver(event: MouseEvent): void; /** * Function to be executed on mouse out. * @param {MouseEvent} event The mouse event. */ MouseOut(event: MouseEvent): void; } /** * @constructor * @extends {AbstractExplorer} * * @template T The type that is consumed by the Region of this explorer. */ export abstract class AbstractMouseExplorer extends AbstractExplorer implements MouseExplorer { /** * @override */ protected events: [string, (x: Event) => void][] = super.Events().concat([ ['mouseover', this.MouseOver.bind(this)], ['mouseout', this.MouseOut.bind(this)] ]); /** * @override */ public MouseOver(_event: MouseEvent) { this.Start(); } /** * @override */ public MouseOut(_event: MouseEvent) { this.Stop(); } } /** * Exploration via hovering. * @constructor * @extends {AbstractMouseExplorer} */ export abstract class Hoverer extends AbstractMouseExplorer { /** * Remember the last position to avoid flickering. * @type {[number, number]} */ protected coord: [number, number]; /** * @constructor * @extends {AbstractMouseExplorer} * * @param {A11yDocument} document The current document. * @param {Region} region A region to display results. * @param {HTMLElement} node The node on which the explorer works. * @param {(node: HTMLElement) => boolean} nodeQuery Predicate on nodes that * will fire the hoverer. * @param {(node: HTMLElement) => T} nodeAccess Accessor to extract node value * that is passed to the region. * * @template T */ protected constructor(public document: A11yDocument, protected region: Region, protected node: HTMLElement, protected nodeQuery: (node: HTMLElement) => boolean, protected nodeAccess: (node: HTMLElement) => T) { super(document, region, node); } /** * @override */ public MouseOut(event: MouseEvent) { if (event.clientX === this.coord[0] && event.clientY === this.coord[1]) { return; } this.highlighter.unhighlight(); this.region.Hide(); super.MouseOut(event); } /** * @override */ public MouseOver(event: MouseEvent) { super.MouseOver(event); let target = event.target as HTMLElement; this.coord = [event.clientX, event.clientY]; let [node, kind] = this.getNode(target); if (!node) { return; } this.highlighter.unhighlight(); this.highlighter.highlight([node]); this.region.Update(kind); this.region.Show(node, this.highlighter); } /** * Retrieves the closest node on which the node query fires. Thereby closest * is defined as: * 1. The node or its ancestor on which the query is true. * 2. In case 1 does not exist the left-most child on which query is true. * 3. Otherwise fails. * * @param {HTMLElement} node The node on which the mouse event fired. * @return {[HTMLElement, T]} Node and output pair if successful. */ public getNode(node: HTMLElement): [HTMLElement, T] { let original = node; while (node && node !== this.node) { if (this.nodeQuery(node)) { return [node, this.nodeAccess(node)]; } node = node.parentNode as HTMLElement; } node = original; while (node) { if (this.nodeQuery(node)) { return [node, this.nodeAccess(node)]; } let child = node.childNodes[0] as HTMLElement; node = (child && child.tagName === 'defs') ? // This is for SVG. node.childNodes[1] as HTMLElement : child; } return [null, null]; } } /** * Hoverer that displays information on nodes (e.g., as tooltips). * @constructor * @extends {Hoverer} */ export class ValueHoverer extends Hoverer { } /** * Hoverer that displays node content (e.g., for magnification). * @constructor * @extends {Hoverer} */ export class ContentHoverer extends Hoverer { } /** * Highlights maction nodes on hovering. * @constructor * @extends {Hoverer} */ export class FlameHoverer extends Hoverer { /** * @override */ protected constructor( public document: A11yDocument, _ignore: any, protected node: HTMLElement) { super(document, new DummyRegion(document), node, x => this.highlighter.isMactionNode(x), () => {}); } } MathJax-src-3.2.2/ts/a11y/explorer/Region.ts000066400000000000000000000312341425015521000204710ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2009-2022 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 Regions for A11y purposes. * * @author v.sorge@mathjax.org (Volker Sorge) */ import {MathDocument} from '../../core/MathDocument.js'; import {CssStyles} from '../../util/StyleList.js'; import Sre from '../sre.js'; export type A11yDocument = MathDocument; export interface Region { /** * Adds a style sheet for the live region to the document. */ AddStyles(): void; /** * Adds the region element to the document. */ AddElement(): void; /** * Shows the live region in the document. * @param {HTMLElement} node * @param {Sre.highlighter} highlighter */ Show(node: HTMLElement, highlighter: Sre.highlighter): void; /** * Takes the element out of the document flow. */ Hide(): void; /** * Clears the content of the region. */ Clear(): void; /** * Updates the content of the region. * @template T */ Update(content: T): void; } export abstract class AbstractRegion implements Region { /** * CSS Classname of the element. * @type {String} */ protected static className: string; /** * True if the style has already been added to the document. * @type {boolean} */ protected static styleAdded: boolean = false; /** * The CSS style that needs to be added for this type of region. * @type {CssStyles} */ protected static style: CssStyles; /** * The outer div node. * @type {HTMLElement} */ protected div: HTMLElement; /** * The inner node. * @type {HTMLElement} */ protected inner: HTMLElement; /** * The actual class name to refer to static elements of a class. * @type {typeof AbstractRegion} */ protected CLASS: typeof AbstractRegion; /** * @constructor * @param {A11yDocument} document The document the live region is added to. */ constructor(public document: A11yDocument) { this.CLASS = this.constructor as typeof AbstractRegion; this.AddStyles(); this.AddElement(); } /** * @override */ public AddStyles() { if (this.CLASS.styleAdded) { return; } // TODO: should that be added to document.documentStyleSheet()? let node = this.document.adaptor.node('style'); node.innerHTML = this.CLASS.style.cssText; this.document.adaptor.head(this.document.adaptor.document). appendChild(node); this.CLASS.styleAdded = true; } /** * @override */ public AddElement() { let element = this.document.adaptor.node('div'); element.classList.add(this.CLASS.className); element.style.backgroundColor = 'white'; this.div = element; this.inner = this.document.adaptor.node('div'); this.div.appendChild(this.inner); this.document.adaptor. body(this.document.adaptor.document). appendChild(this.div); } /** * @override */ public Show(node: HTMLElement, highlighter: Sre.highlighter) { this.position(node); this.highlight(highlighter); this.div.classList.add(this.CLASS.className + '_Show'); } /** * Computes the position where to place the element wrt. to the given node. * @param {HTMLElement} node The reference node. */ protected abstract position(node: HTMLElement): void; /** * Highlights the region. * @param {Sre.highlighter} highlighter The Sre highlighter. */ protected abstract highlight(highlighter: Sre.highlighter): void; /** * @override */ public Hide() { this.div.classList.remove(this.CLASS.className + '_Show'); } /** * @override */ public abstract Clear(): void; /** * @override */ public abstract Update(content: T): void; /** * Auxiliary position method that stacks shown regions of the same type. * @param {HTMLElement} node The reference node. */ protected stackRegions(node: HTMLElement) { // TODO: This could be made more efficient by caching regions of a class. const rect = node.getBoundingClientRect(); let baseBottom = 0; let baseLeft = Number.POSITIVE_INFINITY; let regions = this.document.adaptor.document.getElementsByClassName( this.CLASS.className + '_Show'); // Get all the shown regions (one is this element!) and append at bottom. for (let i = 0, region; region = regions[i]; i++) { if (region !== this.div) { baseBottom = Math.max(region.getBoundingClientRect().bottom, baseBottom); baseLeft = Math.min(region.getBoundingClientRect().left, baseLeft); } } const bot = (baseBottom ? baseBottom : rect.bottom + 10) + window.pageYOffset; const left = (baseLeft < Number.POSITIVE_INFINITY ? baseLeft : rect.left) + window.pageXOffset; this.div.style.top = bot + 'px'; this.div.style.left = left + 'px'; } } export class DummyRegion extends AbstractRegion { /** * @override */ public Clear() {} /** * @override */ public Update() {} /** * @override */ public Hide() {} /** * @override */ public Show() {} /** * @override */ public AddElement() {} /** * @override */ public AddStyles() {} /** * @override */ public position() {} /** * @override */ public highlight(_highlighter: Sre.highlighter) {} } export class StringRegion extends AbstractRegion { /** * @override */ public Clear(): void { this.Update(''); this.inner.style.top = ''; this.inner.style.backgroundColor = ''; } /** * @override */ public Update(speech: string) { this.inner.textContent = ''; this.inner.textContent = speech; } /** * @override */ protected position(node: HTMLElement) { this.stackRegions(node); } /** * @override */ protected highlight(highlighter: Sre.highlighter) { const color = highlighter.colorString(); this.inner.style.backgroundColor = color.background; this.inner.style.color = color.foreground; } } export class ToolTip extends StringRegion { /** * @override */ protected static className = 'MJX_ToolTip'; /** * @override */ protected static style: CssStyles = new CssStyles({ ['.' + ToolTip.className]: { position: 'absolute', display: 'inline-block', height: '1px', width: '1px' }, ['.' + ToolTip.className + '_Show']: { width: 'auto', height: 'auto', opacity: 1, 'text-align': 'center', 'border-radius': '6px', padding: '0px 0px', 'border-bottom': '1px dotted black', position: 'absolute', 'z-index': 202 } }); } export class LiveRegion extends StringRegion { /** * @override */ protected static className = 'MJX_LiveRegion'; /** * @override */ protected static style: CssStyles = new CssStyles({ ['.' + LiveRegion.className]: { position: 'absolute', top: '0', height: '1px', width: '1px', padding: '1px', overflow: 'hidden' }, ['.' + LiveRegion.className + '_Show']: { top: '0', position: 'absolute', width: 'auto', height: 'auto', padding: '0px 0px', opacity: 1, 'z-index': '202', left: 0, right: 0, 'margin': '0 auto', 'background-color': 'rgba(0, 0, 255, 0.2)', 'box-shadow': '0px 10px 20px #888', border: '2px solid #CCCCCC' } }); /** * @constructor * @param {A11yDocument} document The document the live region is added to. */ constructor(public document: A11yDocument) { super(document); this.div.setAttribute('aria-live', 'assertive'); } } // Region that overlays the current element. export class HoverRegion extends AbstractRegion { /** * @override */ protected static className = 'MJX_HoverRegion'; /** * @override */ protected static style: CssStyles = new CssStyles({ ['.' + HoverRegion.className]: { position: 'absolute', height: '1px', width: '1px', padding: '1px', overflow: 'hidden' }, ['.' + HoverRegion.className + '_Show']: { position: 'absolute', width: 'max-content', height: 'auto', padding: '0px 0px', opacity: 1, 'z-index': '202', 'margin': '0 auto', 'background-color': 'rgba(0, 0, 255, 0.2)', 'box-shadow': '0px 10px 20px #888', border: '2px solid #CCCCCC' } }); /** * @constructor * @param {A11yDocument} document The document the live region is added to. */ constructor(public document: A11yDocument) { super(document); this.inner.style.lineHeight = '0'; } /** * Sets the position of the region with respect to align parameter. There are * three options: top, bottom and center. Center is the default. * * @param {HTMLElement} node The node that is displayed. */ protected position(node: HTMLElement) { const nodeRect = node.getBoundingClientRect(); const divRect = this.div.getBoundingClientRect(); const xCenter = nodeRect.left + (nodeRect.width / 2); let left = xCenter - (divRect.width / 2); left = (left < 0) ? 0 : left; left = left + window.pageXOffset; let top; switch (this.document.options.a11y.align) { case 'top': top = nodeRect.top - divRect.height - 10 ; break; case 'bottom': top = nodeRect.bottom + 10; break; case 'center': default: const yCenter = nodeRect.top + (nodeRect.height / 2); top = yCenter - (divRect.height / 2); } top = top + window.pageYOffset; top = (top < 0) ? 0 : top; this.div.style.top = top + 'px'; this.div.style.left = left + 'px'; } /** * @override */ protected highlight(highlighter: Sre.highlighter) { // TODO Do this with styles to avoid the interaction of SVG/CHTML. if (this.inner.firstChild && !(this.inner.firstChild as HTMLElement).hasAttribute('sre-highlight')) { return; } const color = highlighter.colorString(); this.inner.style.backgroundColor = color.background; this.inner.style.color = color.foreground; } /** * @override */ public Show(node: HTMLElement, highlighter: Sre.highlighter) { this.div.style.fontSize = this.document.options.a11y.magnify; this.Update(node); super.Show(node, highlighter); } /** * @override */ public Clear() { this.inner.textContent = ''; this.inner.style.top = ''; this.inner.style.backgroundColor = ''; } /** * @override */ public Update(node: HTMLElement) { this.Clear(); let mjx = this.cloneNode(node); this.inner.appendChild(mjx); } /** * Clones the node to put into the hover region. * @param {HTMLElement} node The original node. * @return {HTMLElement} The cloned node. */ private cloneNode(node: HTMLElement): HTMLElement { let mjx = node.cloneNode(true) as HTMLElement; if (mjx.nodeName !== 'MJX-CONTAINER') { // remove element spacing (could be done in CSS) if (mjx.nodeName !== 'g') { mjx.style.marginLeft = mjx.style.marginRight = '0'; } let container = node; while (container && container.nodeName !== 'MJX-CONTAINER') { container = container.parentNode as HTMLElement; } if (mjx.nodeName !== 'MJX-MATH' && mjx.nodeName !== 'svg') { const child = container.firstChild; mjx = child.cloneNode(false).appendChild(mjx).parentNode as HTMLElement; // // SVG specific // if (mjx.nodeName === 'svg') { (mjx.firstChild as HTMLElement).setAttribute('transform', 'matrix(1 0 0 -1 0 0)'); const W = parseFloat(mjx.getAttribute('viewBox').split(/ /)[2]); const w = parseFloat(mjx.getAttribute('width')); const {x, y, width, height} = (node as any).getBBox(); mjx.setAttribute('viewBox', [x, -(y + height), width, height].join(' ')); mjx.removeAttribute('style'); mjx.setAttribute('width', (w / W * width) + 'ex'); mjx.setAttribute('height', (w / W * height) + 'ex'); container.setAttribute('sre-highlight', 'false'); } } mjx = container.cloneNode(false).appendChild(mjx).parentNode as HTMLElement; // remove displayed math margins (could be done in CSS) mjx.style.margin = '0'; } return mjx; } } MathJax-src-3.2.2/ts/a11y/explorer/TreeExplorer.ts000066400000000000000000000051221425015521000216630ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2009-2022 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 Tree Explorers allow to switch on effects on the entire * expression tree. * * @author v.sorge@mathjax.org (Volker Sorge) */ import {A11yDocument, Region} from './Region.js'; import {Explorer, AbstractExplorer} from './Explorer.js'; import Sre from '../sre.js'; export interface TreeExplorer extends Explorer { } export class AbstractTreeExplorer extends AbstractExplorer { /** * @override */ protected constructor(public document: A11yDocument, protected region: Region, protected node: HTMLElement, protected mml: HTMLElement) { super(document, null, node); } /** * @override */ public readonly stoppable = false; /** * @override */ public Attach() { super.Attach(); this.Start(); } /** * @override */ public Detach() { this.Stop(); super.Detach(); } } export class FlameColorer extends AbstractTreeExplorer { /** * @override */ public Start() { if (this.active) return; this.active = true; this.highlighter.highlightAll(this.node); } /** * @override */ public Stop() { if (this.active) { this.highlighter.unhighlightAll(); } this.active = false; } } export class TreeColorer extends AbstractTreeExplorer { /** * @override */ public Start() { if (this.active) return; this.active = true; let generator = Sre.getSpeechGenerator('Color'); if (!this.node.hasAttribute('hasforegroundcolor')) { generator.generateSpeech(this.node, this.mml); this.node.setAttribute('hasforegroundcolor', 'true'); } // TODO: Make this cleaner in Sre. (this.highlighter as any).colorizeAll(this.node); } /** * @override */ public Stop() { if (this.active) { (this.highlighter as any).uncolorizeAll(this.node); } this.active = false; } } MathJax-src-3.2.2/ts/a11y/mathmaps.ts000066400000000000000000000016411425015521000172170ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2018-2022 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 Base imports of sre locales. * * @author dpvc@mathjax.org (Davide Cervone) * @author v.sorge@mathjax.org (Volker Sorge) */ const MathMaps: Map = new Map(); export default MathMaps; MathJax-src-3.2.2/ts/a11y/semantic-enrich.ts000066400000000000000000000271411425015521000204610ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2018-2022 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 semantic enrichment to internal MathML * * @author dpvc@mathjax.org (Davide Cervone) */ import {mathjax} from '../mathjax.js'; 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 {MathML} from '../input/mathml.js'; import {SerializedMmlVisitor} from '../core/MmlTree/SerializedMmlVisitor.js'; import {OptionList, expandable} from '../util/Options.js'; import Sre from './sre.js'; /*==========================================================================*/ /** * The current speech setting for Sre */ let currentSpeech = 'none'; /** * Generic constructor for Mixins */ export type Constructor = new(...args: any[]) => T; /*==========================================================================*/ /** * Add STATE value for being enriched (after COMPILED and before TYPESET) */ newState('ENRICHED', 30); /** * Add STATE value for adding speech (after TYPESET) */ newState('ATTACHSPEECH', 155); /** * The functions added to MathItem for enrichment * * @template N The HTMLElement node class * @template T The Text node class * @template D The Document class */ export interface EnrichedMathItem extends MathItem { /** * @param {MathDocument} document The document where enrichment is occurring * @param {boolean} force True to force the enrichment even if not enabled */ enrich(document: MathDocument, force?: boolean): void; /** * @param {MathDocument} document The document where enrichment is occurring */ attachSpeech(document: MathDocument): void; } /** * The mixin for adding enrichment to MathItems * * @param {B} BaseMathItem The MathItem class to be extended * @param {MathML} MmlJax The MathML input jax used to convert the enriched MathML * @param {Function} toMathML The function to serialize the internal MathML * @return {EnrichedMathItem} The enriched 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 EnrichedMathItemMixin>>( BaseMathItem: B, MmlJax: MathML, toMathML: (node: MmlNode) => string ): Constructor> & B { return class extends BaseMathItem { /** * @param {any} node The node to be serialized * @return {string} The serialized version of node */ protected serializeMml(node: any): string { if ('outerHTML' in node) { return node.outerHTML; } // // For IE11 // if (typeof Element !== 'undefined' && typeof window !== 'undefined' && node instanceof Element) { const div = window.document.createElement('div'); div.appendChild(node); return div.innerHTML; } // // For NodeJS version of Sre // return node.toString(); } /** * @param {MathDocument} document The MathDocument for the MathItem * @param {boolean} force True to force the enrichment even if not enabled */ public enrich(document: MathDocument, force: boolean = false) { if (this.state() >= STATE.ENRICHED) return; if (!this.isEscaped && (document.options.enableEnrichment || force)) { if (document.options.sre.speech !== currentSpeech) { currentSpeech = document.options.sre.speech; mathjax.retryAfter( Sre.setupEngine(document.options.sre).then( () => Sre.sreReady())); } const math = new document.options.MathItem('', MmlJax); try { const mml = this.inputData.originalMml = toMathML(this.root); math.math = this.serializeMml(Sre.toEnriched(mml)); math.display = this.display; math.compile(document); this.root = math.root; this.inputData.enrichedMml = math.math; } catch (err) { document.options.enrichError(document, this, err); } } this.state(STATE.ENRICHED); } /** * @param {MathDocument} document The MathDocument for the MathItem */ public attachSpeech(document: MathDocument) { if (this.state() >= STATE.ATTACHSPEECH) return; 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; adaptor.setAttribute(node, 'aria-label', speech); for (const child of adaptor.childNodes(node) as N[]) { adaptor.setAttribute(child, 'aria-hidden', 'true'); } } this.state(STATE.ATTACHSPEECH); } /** * Retrieves the actual speech element that should be used as aria label. * @param {MmlNode} node The root node to search from. * @return {string} The speech content. */ private getSpeech(node: MmlNode): string { const attributes = node.attributes; if (!attributes) return ''; const speech = attributes.getExplicit('data-semantic-speech') as string; if (!attributes.getExplicit('data-semantic-parent') && speech) { return speech; } for (let child of node.childNodes) { let value = this.getSpeech(child as MmlNode); if (value != null) { return value; } } return ''; } }; } /*==========================================================================*/ /** * The functions added to MathDocument for enrichment * * @template N The HTMLElement node class * @template T The Text node class * @template D The Document class */ export interface EnrichedMathDocument extends AbstractMathDocument { /** * Perform enrichment on the MathItems in the MathDocument * * @return {EnrichedMathDocument} The MathDocument (so calls can be chained) */ enrich(): EnrichedMathDocument; /** * Attach speech to the MathItems in the MathDocument * * @return {EnrichedMathDocument} The MathDocument (so calls can be chained) */ attachSpeech(): EnrichedMathDocument; /** * @param {EnrichedMathDocument} doc The MathDocument for the error * @paarm {EnrichedMathItem} math The MathItem causing the error * @param {Error} err The error being processed */ enrichError(doc: EnrichedMathDocument, math: EnrichedMathItem, err: Error): void; } /** * The mixin for adding enrichment to MathDocuments * * @param {B} BaseDocument The MathDocument class to be extended * @param {MathML} MmlJax The MathML input jax used to convert the enriched MathML * @return {EnrichedMathDocument} The enriched 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 EnrichedMathDocumentMixin>>( BaseDocument: B, MmlJax: MathML, ): MathDocumentConstructor> & B { return class extends BaseDocument { /** * @override */ public static OPTIONS: OptionList = { ...BaseDocument.OPTIONS, enableEnrichment: true, enrichError: (doc: EnrichedMathDocument, math: EnrichedMathItem, err: Error) => doc.enrichError(doc, math, err), renderActions: expandable({ ...BaseDocument.OPTIONS.renderActions, enrich: [STATE.ENRICHED], attachSpeech: [STATE.ATTACHSPEECH] }), sre: expandable({ speech: 'none', // by default no speech is included domain: 'mathspeak', // speech rules domain style: 'default', // speech rules style locale: 'en' // switch the locale }), }; /** * Enrich the MathItem class used for this MathDocument, and create the * temporary MathItem used for enrchment * * @override * @constructor */ constructor(...args: any[]) { super(...args); MmlJax.setMmlFactory(this.mmlFactory); const ProcessBits = (this.constructor as typeof AbstractMathDocument).ProcessBits; if (!ProcessBits.has('enriched')) { ProcessBits.allocate('enriched'); ProcessBits.allocate('attach-speech'); } const visitor = new SerializedMmlVisitor(this.mmlFactory); const toMathML = ((node: MmlNode) => visitor.visitTree(node)); this.options.MathItem = EnrichedMathItemMixin>>( this.options.MathItem, MmlJax, toMathML ); } /** * Attach speech from a MathItem to a node */ public attachSpeech() { if (!this.processed.isSet('attach-speech')) { for (const math of this.math) { (math as EnrichedMathItem).attachSpeech(this); } this.processed.set('attach-speech'); } return this; } /** * Enrich the MathItems in this MathDocument */ public enrich() { if (!this.processed.isSet('enriched')) { if (this.options.enableEnrichment) { for (const math of this.math) { (math as EnrichedMathItem).enrich(this); } } this.processed.set('enriched'); } return this; } /** */ public enrichError(_doc: EnrichedMathDocument, _math: EnrichedMathItem, err: Error) { console.warn('Enrichment error:', err); } /** * @override */ public state(state: number, restore: boolean = false) { super.state(state, restore); if (state < STATE.ENRICHED) { this.processed.clear('enriched'); } return this; } }; } /*==========================================================================*/ /** * Add enrichment a Handler instance * * @param {Handler} handler The Handler instance to enhance * @param {MathML} MmlJax The MathML input jax to use for reading the enriched MathML * @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 EnrichHandler(handler: Handler, MmlJax: MathML): Handler { MmlJax.setAdaptor(handler.adaptor); handler.documentClass = EnrichedMathDocumentMixin>>( handler.documentClass, MmlJax ); return handler; } MathJax-src-3.2.2/ts/a11y/sre.ts000066400000000000000000000065251425015521000162040ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2018-2022 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 Provides the interface functionality to SRE. * * @author dpvc@mathjax.org (Davide Cervone) * @author v.sorge@mathjax.org (Volker Sorge) */ import * as Api from 'speech-rule-engine/js/common/system.js'; import {Walker} from 'speech-rule-engine/js/walker/walker.js'; import * as WalkerFactory from 'speech-rule-engine/js/walker/walker_factory.js'; import * as SpeechGeneratorFactory from 'speech-rule-engine/js/speech_generator/speech_generator_factory.js'; import * as EngineConst from 'speech-rule-engine/js/common/engine_const.js'; import Engine from 'speech-rule-engine/js/common/engine.js'; import {ClearspeakPreferences} from 'speech-rule-engine/js/speech_rules/clearspeak_preferences.js'; import {Highlighter} from 'speech-rule-engine/js/highlighter/highlighter.js'; import * as HighlighterFactory from 'speech-rule-engine/js/highlighter/highlighter_factory.js'; import {SpeechGenerator} from 'speech-rule-engine/js/speech_generator/speech_generator.js'; import {Variables} from 'speech-rule-engine/js/common/variables.js'; import MathMaps from './mathmaps.js'; export namespace Sre { export type highlighter = Highlighter; export type speechGenerator = SpeechGenerator; export type walker = Walker; export const locales = Variables.LOCALES; export const sreReady = Api.engineReady; export const setupEngine = Api.setupEngine; export const engineSetup = Api.engineSetup; export const toEnriched = Api.toEnriched; export const toSpeech = Api.toSpeech; export const clearspeakPreferences = ClearspeakPreferences; export const getHighlighter = HighlighterFactory.highlighter; export const getSpeechGenerator = SpeechGeneratorFactory.generator; export const getWalker = WalkerFactory.walker; export const clearspeakStyle = () => { return EngineConst.DOMAIN_TO_STYLES['clearspeak']; }; /** * Loads locales that are already included in the imported MathMaps. Defaults * to standard loading if a locale is not yet preloaded. */ export const preloadLocales = async function(locale: string) { const json = MathMaps.get(locale); return json ? new Promise((res, _rej) => res(JSON.stringify(json))) : Api.localeLoader()(locale); }; } /** * A promise that resolves when SRE is loaded and ready, and rejects if * SRE can't be loaded, or does not become ready within the timout period. * * @deprecated */ export const sreReady = Sre.sreReady; // Setting delay stops SRE from setting itself up (and loading locales) when it // is not actually being used. As we are not yet sure in which environment we // are (browser, node) we can not use a configuration vector. Engine.getInstance().delay = true; export default Sre; MathJax-src-3.2.2/ts/adaptors/000077500000000000000000000000001425015521000160755ustar00rootroot00000000000000MathJax-src-3.2.2/ts/adaptors/HTMLAdaptor.ts000066400000000000000000000307651425015521000205370ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2018-2022 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 Implements the HTML DOM adaptor * * @author dpvc@mathjax.org (Davide Cervone) */ import {OptionList} from '../util/Options.js'; import {AttributeData, AbstractDOMAdaptor, DOMAdaptor, PageBBox} from '../core/DOMAdaptor.js'; /*****************************************************************/ /** * The minimum fields needed for a Document * * @template N The HTMLElement node class * @template T The Text node class */ export interface MinDocument { documentElement: N; head: N; body: N; title: string; doctype: {name: string}; /* tslint:disable:jsdoc-require */ createElement(kind: string): N; createElementNS(ns: string, kind: string): N; createTextNode(text: string): T; querySelectorAll(selector: string): ArrayLike; /* tslint:enable */ } /*****************************************************************/ /** * The minimum fields needed for an HTML Element * * @template N The HTMLElement node class * @template T The Text node class */ export interface MinHTMLElement { nodeType: number; nodeName: string; nodeValue: string; textContent: string; innerHTML: string; outerHTML: string; parentNode: N | Node; nextSibling: N | T | Node; previousSibling: N | T | Node; offsetWidth: number; offsetHeight: number; attributes: AttributeData[] | NamedNodeMap; className: string; classList: DOMTokenList; style: OptionList; sheet?: {insertRule: (rule: string, index?: number) => void}; childNodes: (N | T)[] | NodeList; firstChild: N | T | Node; lastChild: N | T | Node; /* tslint:disable:jsdoc-require */ getElementsByTagName(name: string): N[] | HTMLCollectionOf; getElementsByTagNameNS(ns: string, name: string): N[] | HTMLCollectionOf; contains(child: N | T): boolean; appendChild(child: N | T): N | T | Node; removeChild(child: N | T): N | T | Node; replaceChild(nnode: N | T, onode: N | T): N | T | Node; insertBefore(nchild: N | T, ochild: N | T): void; cloneNode(deep: boolean): N | Node; setAttribute(name: string, value: string): void; setAttributeNS(ns: string, name: string, value: string): void; getAttribute(name: string): string; removeAttribute(name: string): void; hasAttribute(name: string): boolean; getBoundingClientRect(): Object; getBBox?(): {x: number, y: number, width: number, height: number}; /* tslint:endable */ } /*****************************************************************/ /** * The minimum fields needed for a Text element * * @template N The HTMLElement node class * @template T The Text node class */ export interface MinText { nodeType: number; nodeName: string; nodeValue: string; parentNode: N | Node; nextSibling: N | T | Node; previousSibling: N | T | Node; splitText(n: number): T; } /*****************************************************************/ /** * The minimum fields needed for a DOMParser * * @template D The Document class */ export interface MinDOMParser { parseFromString(text: string, format?: string): D; } /*****************************************************************/ /** * The minimum fields needed for a DOMParser * * @template N The HTMLElement node class */ export interface MinXMLSerializer { serializeToString(node: N): string; } /*****************************************************************/ /** * The minimum fields needed for a Window * * @template N The HTMLElement node class * @template D The Document class */ export interface MinWindow { document: D; DOMParser: { new(): MinDOMParser }; XMLSerializer: { new(): MinXMLSerializer; }; NodeList: any; HTMLCollection: any; HTMLElement: any; DocumentFragment: any; Document: any; getComputedStyle(node: N): any; } /*****************************************************************/ /** * The minimum needed for an HTML Adaptor * * @template N The HTMLElement node class * @template T The Text node class * @template D The Document class */ export interface MinHTMLAdaptor extends DOMAdaptor { window: MinWindow; } /*****************************************************************/ /** * Abstract HTMLAdaptor class for manipulating HTML elements * (subclass of AbstractDOMAdaptor) * * N = HTMLElement node class * T = Text node class * D = Document class * * @template N The HTMLElement node class * @template T The Text node class * @template D The Document class */ export class HTMLAdaptor, T extends MinText, D extends MinDocument> extends AbstractDOMAdaptor implements MinHTMLAdaptor { /** * The window object for this adaptor */ public window: MinWindow; /** * The DOMParser used to parse a string into a DOM tree */ public parser: MinDOMParser; /** * @override * @constructor */ constructor(window: MinWindow) { super(window.document); this.window = window; this.parser = new (window.DOMParser as any)(); } /** * @override */ public parse(text: string, format: string = 'text/html') { return this.parser.parseFromString(text, format); } /** * @override */ protected create(kind: string, ns?: string) { return (ns ? this.document.createElementNS(ns, kind) : this.document.createElement(kind)); } /** * @override */ public text(text: string) { return this.document.createTextNode(text); } /** * @override */ public head(doc: D) { return doc.head || (doc as any as N); } /** * @override */ public body(doc: D) { return doc.body || (doc as any as N); } /** * @override */ public root(doc: D) { return doc.documentElement || (doc as any as N); } /** * @override */ public doctype(doc: D) { return (doc.doctype ? `` : ''); } /** * @override */ public tags(node: N, name: string, ns: string = null) { let nodes = (ns ? node.getElementsByTagNameNS(ns, name) : node.getElementsByTagName(name)); return Array.from(nodes as N[]) as N[]; } /** * @override */ public getElements(nodes: (string | N | N[])[], _document: D) { let containers: N[] = []; for (const node of nodes) { if (typeof(node) === 'string') { containers = containers.concat(Array.from(this.document.querySelectorAll(node))); } else if (Array.isArray(node)) { containers = containers.concat(Array.from(node) as N[]); } else if (node instanceof this.window.NodeList || node instanceof this.window.HTMLCollection) { containers = containers.concat(Array.from(node as any as N[])); } else { containers.push(node); } } return containers; } /** * @override */ public contains(container: N, node: N | T) { return container.contains(node); } /** * @override */ public parent(node: N | T) { return node.parentNode as N; } /** * @override */ public append(node: N, child: N | T) { return node.appendChild(child) as N | T; } /** * @override */ public insert(nchild: N | T, ochild: N | T) { return this.parent(ochild).insertBefore(nchild, ochild); } /** * @override */ public remove(child: N | T) { return this.parent(child).removeChild(child) as N | T; } /** * @override */ public replace(nnode: N | T, onode: N | T) { return this.parent(onode).replaceChild(nnode, onode) as N | T; } /** * @override */ public clone(node: N) { return node.cloneNode(true) as N; } /** * @override */ public split(node: T, n: number) { return node.splitText(n); } /** * @override */ public next(node: N | T) { return node.nextSibling as N | T; } /** * @override */ public previous(node: N | T) { return node.previousSibling as N | T; } /** * @override */ public firstChild(node: N) { return node.firstChild as N | T; } /** * @override */ public lastChild(node: N) { return node.lastChild as N | T; } /** * @override */ public childNodes(node: N) { return Array.from(node.childNodes as (N | T)[]); } /** * @override */ public childNode(node: N, i: number) { return node.childNodes[i] as N | T; } /** * @override */ public kind(node: N | T) { const n = node.nodeType; return (n === 1 || n === 3 || n === 8 ? node.nodeName.toLowerCase() : ''); } /** * @override */ public value(node: N | T) { return node.nodeValue || ''; } /** * @override */ public textContent(node: N) { return node.textContent; } /** * @override */ public innerHTML(node: N) { return node.innerHTML; } /** * @override */ public outerHTML(node: N) { return node.outerHTML; } public serializeXML(node: N) { const serializer = new this.window.XMLSerializer(); return serializer.serializeToString(node) as string; } /** * @override */ public setAttribute(node: N, name: string, value: string, ns: string = null) { if (!ns) { return node.setAttribute(name, value); } name = ns.replace(/.*\//, '') + ':' + name.replace(/^.*:/, ''); return node.setAttributeNS(ns, name, value); } /** * @override */ public getAttribute(node: N, name: string) { return node.getAttribute(name); } /** * @override */ public removeAttribute(node: N, name: string) { return node.removeAttribute(name); } /** * @override */ public hasAttribute(node: N, name: string) { return node.hasAttribute(name); } /** * @override */ public allAttributes(node: N) { return Array.from(node.attributes).map( (x: AttributeData) => { return {name: x.name, value: x.value} as AttributeData; } ); } /** * @override */ public addClass(node: N, name: string) { if (node.classList) { node.classList.add(name); } else { node.className = (node.className + ' ' + name).trim(); } } /** * @override */ public removeClass(node: N, name: string) { if (node.classList) { node.classList.remove(name); } else { node.className = node.className.split(/ /).filter((c) => c !== name).join(' '); } } /** * @override */ public hasClass(node: N, name: string) { if (node.classList) { return node.classList.contains(name); } return node.className.split(/ /).indexOf(name) >= 0; } /** * @override */ public setStyle(node: N, name: string, value: string) { (node.style as OptionList)[name] = value; } /** * @override */ public getStyle(node: N, name: string) { return (node.style as OptionList)[name]; } /** * @override */ public allStyles(node: N) { return node.style.cssText; } /** * @override */ public insertRules(node: N, rules: string[]) { for (const rule of rules.reverse()) { try { node.sheet.insertRule(rule, 0); } catch (e) { console.warn(`MathJax: can't insert css rule '${rule}': ${e.message}`); } } } /** * @override */ public fontSize(node: N) { const style = this.window.getComputedStyle(node); return parseFloat(style.fontSize); } /** * @override */ public fontFamily(node: N) { const style = this.window.getComputedStyle(node); return style.fontFamily || ''; } /** * @override */ public nodeSize(node: N, em: number = 1, local: boolean = false) { if (local && node.getBBox) { let {width, height} = node.getBBox(); return [width / em , height / em] as [number, number]; } return [node.offsetWidth / em, node.offsetHeight / em] as [number, number]; } /** * @override */ public nodeBBox(node: N) { const {left, right, top, bottom} = node.getBoundingClientRect() as PageBBox; return {left, right, top, bottom}; } } MathJax-src-3.2.2/ts/adaptors/NodeMixin.ts000066400000000000000000000124431425015521000203430ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2022-2022 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 Implements a mixin for node-based adaptors that overrides * the methods that obtain DOM node sizes, when those aren't * available from the DOM itself. * * @author dpvc@mathjax.org (Davide Cervone) */ import {DOMAdaptor} from '../core/DOMAdaptor.js'; import {userOptions, defaultOptions, OptionList} from '../util/Options.js'; /** * A constructor for a given class * * @template T The class to construct */ export type Constructor = (new(...args: any[]) => T); /** * The type of an Adaptor class */ export type AdaptorConstructor = Constructor>; /** * The options to the NodeMixin */ export const NodeMixinOptions: OptionList = { badCSS: true, // getComputedStyles() is not implemented in the DOM badSizes: true, // element sizes (e.g., ClientWidth, etc.) are not implemented in the DOM }; /** * @template N The HTMLElement node class * @template T The Text node class * @template D The Document class */ export function NodeMixin>( Base: A, options: typeof NodeMixinOptions = {} ): A { options = userOptions(defaultOptions({}, NodeMixinOptions), options); return class NodeAdaptor extends Base { /** * The default options */ public static OPTIONS: OptionList = { ...(options.badCSS ? { fontSize: 16, // We can't compute the font size, so always use this fontFamily: 'Times', // We can't compute the font family, so always use this } : {}), ...(options.badSizes ? { cjkCharWidth: 1, // Width (in em units) of full width characters unknownCharWidth: .6, // Width (in em units) of unknown (non-full-width) characters unknownCharHeight: .8, // Height (in em units) of unknown characters } : {}) }; /** * Pattern to identify CJK (i.e., full-width) characters */ public static cjkPattern = new RegExp([ '[', '\u1100-\u115F', // Hangul Jamo '\u2329\u232A', // LEFT-POINTING ANGLE BRACKET, RIGHT-POINTING ANGLE BRACKET '\u2E80-\u303E', // CJK Radicals Supplement ... CJK Symbols and Punctuation '\u3040-\u3247', // Hiragana ... Enclosed CJK Letters and Months '\u3250-\u4DBF', // Enclosed CJK Letters and Months ... CJK Unified Ideographs Extension A '\u4E00-\uA4C6', // CJK Unified Ideographs ... Yi Radicals '\uA960-\uA97C', // Hangul Jamo Extended-A '\uAC00-\uD7A3', // Hangul Syllables '\uF900-\uFAFF', // CJK Compatibility Ideographs '\uFE10-\uFE19', // Vertical Forms '\uFE30-\uFE6B', // CJK Compatibility Forms ... Small Form Variants '\uFF01-\uFF60\uFFE0-\uFFE6', // Halfwidth and Fullwidth Forms '\u{1B000}-\u{1B001}', // Kana Supplement '\u{1F200}-\u{1F251}', // Enclosed Ideographic Supplement '\u{20000}-\u{3FFFD}', // CJK Unified Ideographs Extension B ... Tertiary Ideographic Plane ']' ].join(''), 'gu'); /** * The options for the instance */ public options: OptionList; /** * @param {any} window The window to work with * @param {OptionList} options The options for the adaptor * @constructor */ constructor(...args: any[]) { super(args[0]); let CLASS = this.constructor as typeof NodeAdaptor; this.options = userOptions(defaultOptions({}, CLASS.OPTIONS), args[1]); } /** * For DOMs that don't handle CSS well, use the font size from the options * * @override */ public fontSize(node: N) { return (options.badCSS ? this.options.fontSize : super.fontSize(node)); } /** * For DOMs that don't handle CSS well, use the font family from the options * * @override */ public fontFamily(node: N) { return (options.badCSS ? this.options.fontFamily : super.fontFamily(node)); } /** * @override */ public nodeSize(node: N, em: number = 1, local: boolean = null) { if (!options.badSizes) { return super.nodeSize(node, em, local); } const text = this.textContent(node); const non = Array.from(text.replace(NodeAdaptor.cjkPattern, '')).length; // # of non-CJK chars const CJK = Array.from(text).length - non; // # of cjk chars return [ CJK * this.options.cjkCharWidth + non * this.options.unknownCharWidth, this.options.unknownCharHeight ] as [number, number]; } /** * @override */ public nodeBBox(node: N) { return (options.badSizes ? {left: 0, right: 0, top: 0, bottom: 0} : super.nodeBBox(node)); } }; } MathJax-src-3.2.2/ts/adaptors/browserAdaptor.ts000066400000000000000000000026541425015521000214520ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2018-2022 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 Implements the browser DOM adaptor * * @author dpvc@mathjax.org (Davide Cervone) */ import {HTMLAdaptor} from './HTMLAdaptor.js'; // // Let Typescript know about these // declare global { interface Window { Document: typeof Document; DOMParser: typeof DOMParser; XMLSerializer: typeof XMLSerializer; HTMLElement: typeof HTMLElement; HTMLCollection: typeof HTMLCollection; NodeList: typeof NodeList; DocumentFragment: typeof DocumentFragment; } } /** * Function to create an HTML adpator for browsers * * @return {HTMLAdaptor} The newly created adaptor */ export function browserAdaptor(): HTMLAdaptor { return new HTMLAdaptor(window); } MathJax-src-3.2.2/ts/adaptors/chooseAdaptor.ts000066400000000000000000000022341425015521000212410ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2018-2022 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 Chooses between jdsom and browser DOM adaptors * * @author dpvc@mathjax.org (Davide Cervone) */ import {liteAdaptor} from './liteAdaptor.js'; import {browserAdaptor} from './browserAdaptor.js'; let choose; try { document; // errors if not in browser choose = browserAdaptor; } catch (e) { choose = liteAdaptor; } /** * Function to select which adaptor to use (depending on whether we are in a browser or node.js) */ export const chooseAdaptor = choose; MathJax-src-3.2.2/ts/adaptors/jsdomAdaptor.ts000066400000000000000000000030311425015521000210710ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2018-2022 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 Implements the jdsom DOM adaptor * * @author dpvc@mathjax.org (Davide Cervone) */ import {HTMLAdaptor} from './HTMLAdaptor.js'; import {NodeMixin, Constructor} from './NodeMixin.js'; import {OptionList} from '../util/Options.js'; /** * The constructor for an HTMLAdaptor */ export type HTMLAdaptorConstructor = Constructor>; /** * The JsdomAdaptor class */ export class JsdomAdaptor extends NodeMixin(HTMLAdaptor) {} /** * Function for creating an HTML adaptor using jsdom * * @param {any} JSDOM The jsdom object to use for this adaptor * @return {HTMLAdaptor} The newly created adaptor */ export function jsdomAdaptor(JSDOM: any, options: OptionList = null): JsdomAdaptor { return new JsdomAdaptor(new JSDOM().window, options); } MathJax-src-3.2.2/ts/adaptors/linkedomAdaptor.ts000066400000000000000000000043621425015521000215670ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2022-2022 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 Implements the linkedom DOM adaptor * * @author dpvc@mathjax.org (Davide Cervone) */ import {HTMLAdaptor} from './HTMLAdaptor.js'; import {NodeMixin, Constructor} from './NodeMixin.js'; import {OptionList} from '../util/Options.js'; /** * The constructor for an HTMLAdaptor */ export type HTMLAdaptorConstructor = Constructor>; /** * The LinkedomAdaptor class */ export class LinkedomAdaptor extends NodeMixin(HTMLAdaptor) { /** * @override */ public parse(text: string, format: string = 'text/html') { // // Make sure the text string has nodes (in particular, it can't be empty) // if (!text.match(/^(?:\s|\n)*' + text + ''; return this.parser.parseFromString(text, format); } /** * @override * * This will do an HTML serialization, which may be good enough, but * won't necessarily close some tags properly. */ public serializeXML(node: HTMLElement) { return this.outerHTML(node); } } /** * Function for creating an HTML adaptor using linkedom * * @param {any} parseHTML The linkedom HTML parser to use for this adaptor * @return {LinkeddomAdaptor} The newly created adaptor */ export function linkedomAdaptor(parseHTML: any, options: OptionList = null): LinkedomAdaptor { const window = parseHTML(''); window.constructor.prototype.HTMLCollection = class {}; // add fake class for missing HTMLCollecton return new LinkedomAdaptor(window, options); } MathJax-src-3.2.2/ts/adaptors/lite/000077500000000000000000000000001425015521000170325ustar00rootroot00000000000000MathJax-src-3.2.2/ts/adaptors/lite/Document.ts000066400000000000000000000030651425015521000211640ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2018-2022 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 Implements a lightweight DOM adaptor * * @author dpvc@mathjax.org (Davide Cervone) */ import {LiteElement} from './Element.js'; /************************************************************/ /** * Implements a lightweight Document replacement */ export class LiteDocument { /** * The document's element */ public root: LiteElement; /** * The document's element */ public head: LiteElement; /** * The document's element */ public body: LiteElement; /** * the DOCTYPE comment */ public type: string; /** * The kind is always #document */ public get kind() { return '#document'; } /** * @constructor */ constructor() { this.root = new LiteElement('html', {}, [ this.head = new LiteElement('head'), this.body = new LiteElement('body') ]); this.type = ''; } } MathJax-src-3.2.2/ts/adaptors/lite/Element.ts000066400000000000000000000042001425015521000207670ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2018-2022 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 Implements a lightweight HTML Element replacement * * @author dpvc@mathjax.org (Davide Cervone) */ import {OptionList} from '../../util/Options.js'; import {Styles} from '../../util/Styles.js'; import {LiteText} from './Text.js'; /** * Type for attribute lists */ export type LiteAttributeList = OptionList; /** * Type for generic nodes in LiteAdaptor */ export type LiteNode = LiteElement | LiteText; /************************************************************/ /** * Implements a lightweight HTML element replacement */ export class LiteElement { /** * The type of element (tag name) */ public kind: string; /** * The element's attribute list */ public attributes: LiteAttributeList; /** * The element's children */ public children: LiteNode[]; /** * The element's parent */ public parent: LiteElement; /** * The styles for the element */ public styles: Styles; /** * @param {string} kind The type of node to create * @param {LiteAttributeList} attributes The list of attributes to set (if any) * @param {LiteNode[]} children The children for the node (if any) * @constructor */ constructor(kind: string, attributes: LiteAttributeList = {}, children: LiteNode[] = []) { this.kind = kind; this.attributes = {...attributes}; this.children = [...children]; for (const child of this.children) { child.parent = this; } this.styles = null; } } MathJax-src-3.2.2/ts/adaptors/lite/List.ts000066400000000000000000000034571425015521000203260ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2018-2022 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 Implements a lightweight DOM adaptor * * @author dpvc@mathjax.org (Davide Cervone) */ import {LiteNode} from './Element.js'; /************************************************************/ /** * Implements a lightweight DocumentFragment or NodeList replacement * * @template N The HTMLElement node class */ export class LiteList { /** * The nodes held in the fragment */ public nodes: N[] = []; /** * @param {N[]} children The children for the fragment * @constructor */ constructor(children: N[]) { this.nodes = [...children]; } /** * @param {N} node A node to append to the fragment */ public append(node: N) { this.nodes.push(node); } /** * Make this class iterable (so it can be used with Array.from()) */ public [Symbol.iterator](): Iterator { let i = 0; return { /** * @return {IteratorResult} */ next(): IteratorResult { return (i === this.nodes.length ? {value: null, done: true} : {value: this.nodes[i++], done: false}); } }; } } MathJax-src-3.2.2/ts/adaptors/lite/Parser.ts000066400000000000000000000335321425015521000206440ustar00rootroot00000000000000 /************************************************************* * * Copyright (c) 2018-2022 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 Implements a lightweight DOM adaptor * * @author dpvc@mathjax.org (Davide Cervone) */ import {AttributeData} from '../../core/DOMAdaptor.js'; import {MinDOMParser} from '../HTMLAdaptor.js'; import * as Entities from '../../util/Entities.js'; import {LiteDocument} from './Document.js'; import {LiteElement} from './Element.js'; import {LiteText, LiteComment} from './Text.js'; import {LiteAdaptor} from '../liteAdaptor.js'; /** * Patterns used in parsing serialized HTML */ export namespace PATTERNS { export const TAGNAME = '[a-z][^\\s\\n>]*'; export const ATTNAME = '[a-z][^\\s\\n>=]*'; export const VALUE = `(?:'[^']*'|"[^"]*"|[^\\s\\n]+)`; export const VALUESPLIT = `(?:'([^']*)'|"([^"]*)"|([^\\s\\n]+))`; export const SPACE = '(?:\\s|\\n)+'; export const OPTIONALSPACE = '(?:\\s|\\n)*'; export const ATTRIBUTE = ATTNAME + '(?:' + OPTIONALSPACE + '=' + OPTIONALSPACE + VALUE + ')?'; export const ATTRIBUTESPLIT = '(' + ATTNAME + ')(?:' + OPTIONALSPACE + '=' + OPTIONALSPACE + VALUESPLIT + ')?'; export const TAG = '(<(?:' + TAGNAME + '(?:' + SPACE + ATTRIBUTE + ')*' + OPTIONALSPACE + '/?|/' + TAGNAME + '|!--[^]*?--|![^]*?)(?:>|$))'; export const tag = new RegExp(TAG, 'i'); export const attr = new RegExp(ATTRIBUTE, 'i'); export const attrsplit = new RegExp(ATTRIBUTESPLIT, 'i'); } /************************************************************/ /** * Implements a lightweight DOMParser replacement * (Not perfect, but handles most well-formed HTML) */ export class LiteParser implements MinDOMParser { /** * The list of self-closing tags */ public static SELF_CLOSING: {[name: string]: boolean} = { area: true, base: true, br: true, col: true, command: true, embed: true, hr: true, img: true, input: true, keygen: true, link: true, menuitem: true, meta: true, param: true, source: true, track: true, wbr: true }; /** * The list of tags chose content is not parsed (PCDATA) */ public static PCDATA: {[name: string]: boolean} = { option: true, textarea: true, fieldset: true, title: true, style: true, script: true }; /** * The list of attributes that don't get entity translation */ public static CDATA_ATTR: {[name: string]: boolean} = { style: true, datafld: true, datasrc: true, href: true, src: true, longdesc: true, usemap: true, cite: true, datetime: true, action: true, axis: true, profile: true, content: true, scheme: true }; /** * @override */ public parseFromString(text: string, _format: string = 'text/html', adaptor: LiteAdaptor = null) { const root = adaptor.createDocument(); let node = adaptor.body(root); // // Split the HTML into an array of text, tag, text, tag, ... // Then loop through them and add text nodes and process tags. // let parts = text.replace(/<\?.*?\?>/g, '').split(PATTERNS.tag); while (parts.length) { const text = parts.shift(); const tag = parts.shift(); if (text) { this.addText(adaptor, node, text); } if (tag && tag.charAt(tag.length - 1) === '>') { if (tag.charAt(1) === '!') { this.addComment(adaptor, node, tag); } else if (tag.charAt(1) === '/') { node = this.closeTag(adaptor, node, tag); } else { node = this.openTag(adaptor, node, tag, parts); } } } this.checkDocument(adaptor, root); return root; } /** * @param {LiteAdaptor} adaptor The adaptor for managing nodes * @param {LiteElement} node The node to add a text element to * @param {string} text The text for the text node * @return {LiteText} The text element */ protected addText(adaptor: LiteAdaptor, node: LiteElement, text: string): LiteText { text = Entities.translate(text); return adaptor.append(node, adaptor.text(text)) as LiteText; } /** * @param {LiteAdaptor} adaptor The adaptor for managing nodes * @param {LiteElement} node The node to add a comment to * @param {string} comment The text for the comment node * @return {LiteComment} The comment element */ protected addComment(adaptor: LiteAdaptor, node: LiteElement, comment: string): LiteComment { return adaptor.append(node, new LiteComment(comment)) as LiteComment; } /** * @param {LiteAdaptor} adaptor The adaptor for managing nodes * @param {LiteElement} node The node to close * @param {string} tag The close tag being processed * @return {LiteElement} The first unclosed parent node */ protected closeTag(adaptor: LiteAdaptor, node: LiteElement, tag: string): LiteElement { const kind = tag.slice(2, tag.length - 1).toLowerCase(); while (adaptor.parent(node) && adaptor.kind(node) !== kind) { node = adaptor.parent(node); } return adaptor.parent(node); } /** * @param {LiteAdaptor} adaptor The adaptor for managing nodes * @param {LiteElement} node The parent node for the tag * @param {string} tag The tag being processed * @param {string[]} parts The rest of the text/tag array * @return {LiteElement} The node to which the next tag will be added */ protected openTag(adaptor: LiteAdaptor, node: LiteElement, tag: string, parts: string[]): LiteElement { const PCDATA = (this.constructor as typeof LiteParser).PCDATA; const SELF_CLOSING = (this.constructor as typeof LiteParser).SELF_CLOSING; // // Get the child to be added to the node // 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, // where value1, value2, and value3 are the value of the node (only one is defined) // that come from matching quoted strings with ' (value1), " (value2) or no quotes (value3). // const attributes = tag.replace(/^<.*?[\s\n>]/, '').split(PATTERNS.attrsplit); // // If the tag was complete (it ends with > or has no attributes) // if (attributes.pop().match(/>$/) || attributes.length < 5) { this.addAttributes(adaptor, child, attributes); adaptor.append(node, child); // // For non-self-closing tags, // For tags whose contents is PCDATA (like Version 2.2 Mar 3, 2014. Latest version at https://github.com/mathjax/asciimathml If you use it on a webpage, please send the URL to jipsen@chapman.edu Copyright (c) 2014 Peter Jipsen and other ASCIIMathML.js contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ //var asciimath = {}; //(function(){ var mathcolor = "blue"; // change it to "" (to inherit) or another color //var mathfontsize = "1em"; // change to e.g. 1.2em for larger math //var mathfontfamily = "serif"; // change to "" to inherit (works in IE) // or another family (e.g. "arial") //var automathrecognize = false; // writing "amath" on page makes this true //var checkForMathML = true; // check if browser can display MathML //var notifyIfNoMathML = true; // display note at top if no MathML capability //var alertIfNoMathML = false; // show alert box if no MathML capability //var translateOnLoad = true; // set to false to do call translators from js //var translateASCIIMath = true; // false to preserve `..` var displaystyle = true; // puts limits above and below large operators var showasciiformulaonhover = true; // helps students learn ASCIIMath var decimalsign = "."; // change to "," if you like, beware of `(1,2)`! //var AMdelimiter1 = "`", AMescape1 = "\\\\`"; // can use other characters //var AMdocumentId = "wikitext" // PmWiki element containing math (default=body) var fixphi = true; //false to return to legacy phi/varphi mapping /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ var isIE = (navigator.appName.slice(0,9)=="Microsoft"); /* var noMathML = false, translated = false; if (isIE) { // add MathPlayer info to IE webpages document.write(""); document.write(""); } // Add a stylesheet, replacing any previous custom stylesheet (adapted from TW) function setStylesheet(s) { var id = "AMMLcustomStyleSheet"; var n = document.getElementById(id); if(document.createStyleSheet) { // Test for IE's non-standard createStyleSheet method if(n) n.parentNode.removeChild(n); // This failed without the   document.getElementsByTagName("head")[0].insertAdjacentHTML("beforeEnd"," "); } else { if(n) { n.replaceChild(document.createTextNode(s),n.firstChild); } else { n = document.createElement("style"); n.type = "text/css"; n.id = id; n.appendChild(document.createTextNode(s)); document.getElementsByTagName("head")[0].appendChild(n); } } } setStylesheet("#AMMLcloseDiv \{font-size:0.8em; padding-top:1em; color:#014\}\n#AMMLwarningBox \{position:absolute; width:100%; top:0; left:0; z-index:200; text-align:center; font-size:1em; font-weight:bold; padding:0.5em 0 0.5em 0; color:#ffc; background:#c30\}"); function init(){ var msg, warnings = new Array(); if (document.getElementById==null){ alert("This webpage requires a recent browser such as Mozilla Firefox"); return null; } if (checkForMathML && (msg = checkMathML())) warnings.push(msg); if (warnings.length>0) displayWarnings(warnings); if (!noMathML) initSymbols(); return true; } function checkMathML(){ if (navigator.appName.slice(0,8)=="Netscape") if (navigator.appVersion.slice(0,1)>="5") noMathML = null; else noMathML = true; else if (navigator.appName.slice(0,9)=="Microsoft") try { var ActiveX = new ActiveXObject("MathPlayer.Factory.1"); noMathML = null; } catch (e) { noMathML = true; } else if (navigator.appName.slice(0,5)=="Opera") if (navigator.appVersion.slice(0,3)>="9.5") noMathML = null; else noMathML = true; //noMathML = true; //uncomment to check if (noMathML && notifyIfNoMathML) { var msg = "To view the ASCIIMathML notation use Internet Explorer + MathPlayer or Mozilla Firefox 2.0 or later."; if (alertIfNoMathML) alert(msg); else return msg; } } function hideWarning(){ var body = document.getElementsByTagName("body")[0]; body.removeChild(document.getElementById('AMMLwarningBox')); body.onclick = null; } function displayWarnings(warnings) { var i, frag, nd = createElementXHTML("div"); var body = document.getElementsByTagName("body")[0]; body.onclick=hideWarning; nd.id = 'AMMLwarningBox'; for (i=0; i<", tag:"mo", output:"\u22C9", tex:"ltimes", ttype:CONST}, {input:"><|", tag:"mo", output:"\u22CA", tex:"rtimes", ttype:CONST}, {input:"|><|", tag:"mo", output:"\u22C8", tex:"bowtie", ttype:CONST}, {input:"-:", tag:"mo", output:"\u00F7", tex:"div", ttype:CONST}, {input:"divide", tag:"mo", output:"-:", tex:null, ttype:DEFINITION}, {input:"@", tag:"mo", output:"\u2218", tex:"circ", ttype:CONST}, {input:"o+", tag:"mo", output:"\u2295", tex:"oplus", ttype:CONST}, {input:"ox", tag:"mo", output:"\u2297", tex:"otimes", ttype:CONST}, {input:"o.", tag:"mo", output:"\u2299", tex:"odot", ttype:CONST}, {input:"sum", tag:"mo", output:"\u2211", tex:null, ttype:UNDEROVER}, {input:"prod", tag:"mo", output:"\u220F", tex:null, ttype:UNDEROVER}, {input:"^^", tag:"mo", output:"\u2227", tex:"wedge", ttype:CONST}, {input:"^^^", tag:"mo", output:"\u22C0", tex:"bigwedge", ttype:UNDEROVER}, {input:"vv", tag:"mo", output:"\u2228", tex:"vee", ttype:CONST}, {input:"vvv", tag:"mo", output:"\u22C1", tex:"bigvee", ttype:UNDEROVER}, {input:"nn", tag:"mo", output:"\u2229", tex:"cap", ttype:CONST}, {input:"nnn", tag:"mo", output:"\u22C2", tex:"bigcap", ttype:UNDEROVER}, {input:"uu", tag:"mo", output:"\u222A", tex:"cup", ttype:CONST}, {input:"uuu", tag:"mo", output:"\u22C3", tex:"bigcup", ttype:UNDEROVER}, //binary relation symbols {input:"!=", tag:"mo", output:"\u2260", tex:"ne", ttype:CONST}, {input:":=", tag:"mo", output:":=", tex:null, ttype:CONST}, {input:"lt", tag:"mo", output:"<", tex:null, ttype:CONST}, {input:"<=", tag:"mo", output:"\u2264", tex:"le", ttype:CONST}, {input:"lt=", tag:"mo", output:"\u2264", tex:"leq", ttype:CONST}, {input:"gt", tag:"mo", output:">", tex:null, ttype:CONST}, {input:">=", tag:"mo", output:"\u2265", tex:"ge", ttype:CONST}, {input:"gt=", tag:"mo", output:"\u2265", tex:"geq", ttype:CONST}, {input:"-<", tag:"mo", output:"\u227A", tex:"prec", ttype:CONST}, {input:"-lt", tag:"mo", output:"\u227A", tex:null, ttype:CONST}, {input:">-", tag:"mo", output:"\u227B", tex:"succ", ttype:CONST}, {input:"-<=", tag:"mo", output:"\u2AAF", tex:"preceq", ttype:CONST}, {input:">-=", tag:"mo", output:"\u2AB0", tex:"succeq", ttype:CONST}, {input:"in", tag:"mo", output:"\u2208", tex:null, ttype:CONST}, {input:"!in", tag:"mo", output:"\u2209", tex:"notin", ttype:CONST}, {input:"sub", tag:"mo", output:"\u2282", tex:"subset", ttype:CONST}, {input:"sup", tag:"mo", output:"\u2283", tex:"supset", ttype:CONST}, {input:"sube", tag:"mo", output:"\u2286", tex:"subseteq", ttype:CONST}, {input:"supe", tag:"mo", output:"\u2287", tex:"supseteq", ttype:CONST}, {input:"-=", tag:"mo", output:"\u2261", tex:"equiv", ttype:CONST}, {input:"~=", tag:"mo", output:"\u2245", tex:"cong", ttype:CONST}, {input:"~~", tag:"mo", output:"\u2248", tex:"approx", ttype:CONST}, {input:"~", tag:"mo", output:"\u223C", tex:"sim", ttype:CONST}, {input:"prop", tag:"mo", output:"\u221D", tex:"propto", ttype:CONST}, //logical symbols {input:"and", tag:"mtext", output:"and", tex:null, ttype:SPACE}, {input:"or", tag:"mtext", output:"or", tex:null, ttype:SPACE}, {input:"not", tag:"mo", output:"\u00AC", tex:"neg", ttype:CONST}, {input:"=>", tag:"mo", output:"\u21D2", tex:"implies", ttype:CONST}, {input:"if", tag:"mo", output:"if", tex:null, ttype:SPACE}, {input:"<=>", tag:"mo", output:"\u21D4", tex:"iff", ttype:CONST}, {input:"AA", tag:"mo", output:"\u2200", tex:"forall", ttype:CONST}, {input:"EE", tag:"mo", output:"\u2203", tex:"exists", ttype:CONST}, {input:"_|_", tag:"mo", output:"\u22A5", tex:"bot", ttype:CONST}, {input:"TT", tag:"mo", output:"\u22A4", tex:"top", ttype:CONST}, {input:"|--", tag:"mo", output:"\u22A2", tex:"vdash", ttype:CONST}, {input:"|==", tag:"mo", output:"\u22A8", tex:"models", ttype:CONST}, //grouping brackets {input:"(", tag:"mo", output:"(", tex:"left(", ttype:LEFTBRACKET}, {input:")", tag:"mo", output:")", tex:"right)", ttype:RIGHTBRACKET}, {input:"[", tag:"mo", output:"[", tex:"left[", ttype:LEFTBRACKET}, {input:"]", tag:"mo", output:"]", tex:"right]", ttype:RIGHTBRACKET}, {input:"{", tag:"mo", output:"{", tex:null, ttype:LEFTBRACKET}, {input:"}", tag:"mo", output:"}", tex:null, ttype:RIGHTBRACKET}, {input:"|", tag:"mo", output:"|", tex:null, ttype:LEFTRIGHT}, {input:":|:", tag:"mo", output:"|", tex:null, ttype:CONST}, {input:"|:", tag:"mo", output:"|", tex:null, ttype:LEFTBRACKET}, {input:":|", tag:"mo", output:"|", tex:null, ttype:RIGHTBRACKET}, //{input:"||", tag:"mo", output:"||", tex:null, ttype:LEFTRIGHT}, {input:"(:", tag:"mo", output:"\u2329", tex:"langle", ttype:LEFTBRACKET}, {input:":)", tag:"mo", output:"\u232A", tex:"rangle", ttype:RIGHTBRACKET}, {input:"<<", tag:"mo", output:"\u2329", tex:null, ttype:LEFTBRACKET}, {input:">>", tag:"mo", output:"\u232A", tex:null, ttype:RIGHTBRACKET}, {input:"{:", tag:"mo", output:"{:", tex:null, ttype:LEFTBRACKET, invisible:true}, {input:":}", tag:"mo", output:":}", tex:null, ttype:RIGHTBRACKET, invisible:true}, //miscellaneous symbols {input:"int", tag:"mo", output:"\u222B", tex:null, ttype:CONST}, {input:"dx", tag:"mi", output:"{:d x:}", tex:null, ttype:DEFINITION}, {input:"dy", tag:"mi", output:"{:d y:}", tex:null, ttype:DEFINITION}, {input:"dz", tag:"mi", output:"{:d z:}", tex:null, ttype:DEFINITION}, {input:"dt", tag:"mi", output:"{:d t:}", tex:null, ttype:DEFINITION}, {input:"oint", tag:"mo", output:"\u222E", tex:null, ttype:CONST}, {input:"del", tag:"mo", output:"\u2202", tex:"partial", ttype:CONST}, {input:"grad", tag:"mo", output:"\u2207", tex:"nabla", ttype:CONST}, {input:"+-", tag:"mo", output:"\u00B1", tex:"pm", ttype:CONST}, {input:"-+", tag:"mo", output:"\u2213", tex:"mp", ttype:CONST}, {input:"O/", tag:"mo", output:"\u2205", tex:"emptyset", ttype:CONST}, {input:"oo", tag:"mo", output:"\u221E", tex:"infty", ttype:CONST}, {input:"aleph", tag:"mo", output:"\u2135", tex:null, ttype:CONST}, {input:"...", tag:"mo", output:"...", tex:"ldots", ttype:CONST}, {input:":.", tag:"mo", output:"\u2234", tex:"therefore", ttype:CONST}, {input:":'", tag:"mo", output:"\u2235", tex:"because", ttype:CONST}, {input:"/_", tag:"mo", output:"\u2220", tex:"angle", ttype:CONST}, {input:"/_\\", tag:"mo", output:"\u25B3", tex:"triangle", ttype:CONST}, {input:"'", tag:"mo", output:"\u2032", tex:"prime", ttype:CONST}, {input:"tilde", tag:"mover", output:"~", tex:null, ttype:UNARY, acc:true}, {input:"\\ ", tag:"mo", output:"\u00A0", tex:null, ttype:CONST}, {input:"frown", tag:"mo", output:"\u2322", tex:null, ttype:CONST}, {input:"quad", tag:"mo", output:"\u00A0\u00A0", tex:null, ttype:CONST}, {input:"qquad", tag:"mo", output:"\u00A0\u00A0\u00A0\u00A0", tex:null, ttype:CONST}, {input:"cdots", tag:"mo", output:"\u22EF", tex:null, ttype:CONST}, {input:"vdots", tag:"mo", output:"\u22EE", tex:null, ttype:CONST}, {input:"ddots", tag:"mo", output:"\u22F1", tex:null, ttype:CONST}, {input:"diamond", tag:"mo", output:"\u22C4", tex:null, ttype:CONST}, {input:"square", tag:"mo", output:"\u25A1", tex:null, ttype:CONST}, {input:"|__", tag:"mo", output:"\u230A", tex:"lfloor", ttype:CONST}, {input:"__|", tag:"mo", output:"\u230B", tex:"rfloor", ttype:CONST}, {input:"|~", tag:"mo", output:"\u2308", tex:"lceiling", ttype:CONST}, {input:"~|", tag:"mo", output:"\u2309", tex:"rceiling", ttype:CONST}, {input:"CC", tag:"mo", output:"\u2102", tex:null, ttype:CONST}, {input:"NN", tag:"mo", output:"\u2115", tex:null, ttype:CONST}, {input:"QQ", tag:"mo", output:"\u211A", tex:null, ttype:CONST}, {input:"RR", tag:"mo", output:"\u211D", tex:null, ttype:CONST}, {input:"ZZ", tag:"mo", output:"\u2124", tex:null, ttype:CONST}, {input:"f", tag:"mi", output:"f", tex:null, ttype:UNARY, func:true}, {input:"g", tag:"mi", output:"g", tex:null, ttype:UNARY, func:true}, //standard functions {input:"lim", tag:"mo", output:"lim", tex:null, ttype:UNDEROVER}, {input:"Lim", tag:"mo", output:"Lim", tex:null, ttype:UNDEROVER}, {input:"sin", tag:"mo", output:"sin", tex:null, ttype:UNARY, func:true}, {input:"cos", tag:"mo", output:"cos", tex:null, ttype:UNARY, func:true}, {input:"tan", tag:"mo", output:"tan", tex:null, ttype:UNARY, func:true}, {input:"sinh", tag:"mo", output:"sinh", tex:null, ttype:UNARY, func:true}, {input:"cosh", tag:"mo", output:"cosh", tex:null, ttype:UNARY, func:true}, {input:"tanh", tag:"mo", output:"tanh", tex:null, ttype:UNARY, func:true}, {input:"cot", tag:"mo", output:"cot", tex:null, ttype:UNARY, func:true}, {input:"sec", tag:"mo", output:"sec", tex:null, ttype:UNARY, func:true}, {input:"csc", tag:"mo", output:"csc", tex:null, ttype:UNARY, func:true}, {input:"arcsin", tag:"mo", output:"arcsin", tex:null, ttype:UNARY, func:true}, {input:"arccos", tag:"mo", output:"arccos", tex:null, ttype:UNARY, func:true}, {input:"arctan", tag:"mo", output:"arctan", tex:null, ttype:UNARY, func:true}, {input:"coth", tag:"mo", output:"coth", tex:null, ttype:UNARY, func:true}, {input:"sech", tag:"mo", output:"sech", tex:null, ttype:UNARY, func:true}, {input:"csch", tag:"mo", output:"csch", tex:null, ttype:UNARY, func:true}, {input:"exp", tag:"mo", output:"exp", tex:null, ttype:UNARY, func:true}, {input:"abs", tag:"mo", output:"abs", tex:null, ttype:UNARY, rewriteleftright:["|","|"]}, {input:"norm", tag:"mo", output:"norm", tex:null, ttype:UNARY, rewriteleftright:["\u2225","\u2225"]}, {input:"floor", tag:"mo", output:"floor", tex:null, ttype:UNARY, rewriteleftright:["\u230A","\u230B"]}, {input:"ceil", tag:"mo", output:"ceil", tex:null, ttype:UNARY, rewriteleftright:["\u2308","\u2309"]}, {input:"log", tag:"mo", output:"log", tex:null, ttype:UNARY, func:true}, {input:"ln", tag:"mo", output:"ln", tex:null, ttype:UNARY, func:true}, {input:"det", tag:"mo", output:"det", tex:null, ttype:UNARY, func:true}, {input:"dim", tag:"mo", output:"dim", tex:null, ttype:CONST}, {input:"mod", tag:"mo", output:"mod", tex:null, ttype:CONST}, {input:"gcd", tag:"mo", output:"gcd", tex:null, ttype:UNARY, func:true}, {input:"lcm", tag:"mo", output:"lcm", tex:null, ttype:UNARY, func:true}, {input:"lub", tag:"mo", output:"lub", tex:null, ttype:CONST}, {input:"glb", tag:"mo", output:"glb", tex:null, ttype:CONST}, {input:"min", tag:"mo", output:"min", tex:null, ttype:UNDEROVER}, {input:"max", tag:"mo", output:"max", tex:null, ttype:UNDEROVER}, {input:"Sin", tag:"mo", output:"Sin", tex:null, ttype:UNARY, func:true}, {input:"Cos", tag:"mo", output:"Cos", tex:null, ttype:UNARY, func:true}, {input:"Tan", tag:"mo", output:"Tan", tex:null, ttype:UNARY, func:true}, {input:"Arcsin", tag:"mo", output:"Arcsin", tex:null, ttype:UNARY, func:true}, {input:"Arccos", tag:"mo", output:"Arccos", tex:null, ttype:UNARY, func:true}, {input:"Arctan", tag:"mo", output:"Arctan", tex:null, ttype:UNARY, func:true}, {input:"Sinh", tag:"mo", output:"Sinh", tex:null, ttype:UNARY, func:true}, {input:"Cosh", tag:"mo", output:"Cosh", tex:null, ttype:UNARY, func:true}, {input:"Tanh", tag:"mo", output:"Tanh", tex:null, ttype:UNARY, func:true}, {input:"Cot", tag:"mo", output:"Cot", tex:null, ttype:UNARY, func:true}, {input:"Sec", tag:"mo", output:"Sec", tex:null, ttype:UNARY, func:true}, {input:"Csc", tag:"mo", output:"Csc", tex:null, ttype:UNARY, func:true}, {input:"Log", tag:"mo", output:"Log", tex:null, ttype:UNARY, func:true}, {input:"Ln", tag:"mo", output:"Ln", tex:null, ttype:UNARY, func:true}, {input:"Abs", tag:"mo", output:"abs", tex:null, ttype:UNARY, notexcopy:true, rewriteleftright:["|","|"]}, //arrows {input:"uarr", tag:"mo", output:"\u2191", tex:"uparrow", ttype:CONST}, {input:"darr", tag:"mo", output:"\u2193", tex:"downarrow", ttype:CONST}, {input:"rarr", tag:"mo", output:"\u2192", tex:"rightarrow", ttype:CONST}, {input:"->", tag:"mo", output:"\u2192", tex:"to", ttype:CONST}, {input:">->", tag:"mo", output:"\u21A3", tex:"rightarrowtail", ttype:CONST}, {input:"->>", tag:"mo", output:"\u21A0", tex:"twoheadrightarrow", ttype:CONST}, {input:">->>", tag:"mo", output:"\u2916", tex:"twoheadrightarrowtail", ttype:CONST}, {input:"|->", tag:"mo", output:"\u21A6", tex:"mapsto", ttype:CONST}, {input:"larr", tag:"mo", output:"\u2190", tex:"leftarrow", ttype:CONST}, {input:"harr", tag:"mo", output:"\u2194", tex:"leftrightarrow", ttype:CONST}, {input:"rArr", tag:"mo", output:"\u21D2", tex:"Rightarrow", ttype:CONST}, {input:"lArr", tag:"mo", output:"\u21D0", tex:"Leftarrow", ttype:CONST}, {input:"hArr", tag:"mo", output:"\u21D4", tex:"Leftrightarrow", ttype:CONST}, //commands with argument {input:"sqrt", tag:"msqrt", output:"sqrt", tex:null, ttype:UNARY}, {input:"root", tag:"mroot", output:"root", tex:null, ttype:BINARY}, {input:"frac", tag:"mfrac", output:"/", tex:null, ttype:BINARY}, {input:"/", tag:"mfrac", output:"/", tex:null, ttype:INFIX}, {input:"stackrel", tag:"mover", output:"stackrel", tex:null, ttype:BINARY}, {input:"overset", tag:"mover", output:"stackrel", tex:null, ttype:BINARY}, {input:"underset", tag:"munder", output:"stackrel", tex:null, ttype:BINARY}, {input:"_", tag:"msub", output:"_", tex:null, ttype:INFIX}, {input:"^", tag:"msup", output:"^", tex:null, ttype:INFIX}, {input:"hat", tag:"mover", output:"\u005E", tex:null, ttype:UNARY, acc:true}, {input:"bar", tag:"mover", output:"\u00AF", tex:"overline", ttype:UNARY, acc:true}, {input:"vec", tag:"mover", output:"\u2192", tex:null, ttype:UNARY, acc:true}, {input:"dot", tag:"mover", output:".", tex:null, ttype:UNARY, acc:true}, {input:"ddot", tag:"mover", output:"..", tex:null, ttype:UNARY, acc:true}, {input:"overarc", tag:"mover", output:"\u23DC", tex:"overparen", ttype:UNARY, acc:true}, {input:"ul", tag:"munder", output:"\u0332", tex:"underline", ttype:UNARY, acc:true}, {input:"ubrace", tag:"munder", output:"\u23DF", tex:"underbrace", ttype:UNARYUNDEROVER, acc:true}, {input:"obrace", tag:"mover", output:"\u23DE", tex:"overbrace", ttype:UNARYUNDEROVER, acc:true}, {input:"text", tag:"mtext", output:"text", tex:null, ttype:TEXT}, {input:"mbox", tag:"mtext", output:"mbox", tex:null, ttype:TEXT}, {input:"color", tag:"mstyle", ttype:BINARY}, {input:"id", tag:"mrow", ttype:BINARY}, {input:"class", tag:"mrow", ttype:BINARY}, {input:"cancel", tag:"menclose", output:"cancel", tex:null, ttype:UNARY}, AMquote, {input:"bb", tag:"mstyle", atname:"mathvariant", atval:"bold", output:"bb", tex:null, ttype:UNARY}, {input:"mathbf", tag:"mstyle", atname:"mathvariant", atval:"bold", output:"mathbf", tex:null, ttype:UNARY}, {input:"sf", tag:"mstyle", atname:"mathvariant", atval:"sans-serif", output:"sf", tex:null, ttype:UNARY}, {input:"mathsf", tag:"mstyle", atname:"mathvariant", atval:"sans-serif", output:"mathsf", tex:null, ttype:UNARY}, {input:"bbb", tag:"mstyle", atname:"mathvariant", atval:"double-struck", output:"bbb", tex:null, ttype:UNARY, codes:AMbbb}, {input:"mathbb", tag:"mstyle", atname:"mathvariant", atval:"double-struck", output:"mathbb", tex:null, ttype:UNARY, codes:AMbbb}, {input:"cc", tag:"mstyle", atname:"mathvariant", atval:"script", output:"cc", tex:null, ttype:UNARY, codes:AMcal}, {input:"mathcal", tag:"mstyle", atname:"mathvariant", atval:"script", output:"mathcal", tex:null, ttype:UNARY, codes:AMcal}, {input:"tt", tag:"mstyle", atname:"mathvariant", atval:"monospace", output:"tt", tex:null, ttype:UNARY}, {input:"mathtt", tag:"mstyle", atname:"mathvariant", atval:"monospace", output:"mathtt", tex:null, ttype:UNARY}, {input:"fr", tag:"mstyle", atname:"mathvariant", atval:"fraktur", output:"fr", tex:null, ttype:UNARY, codes:AMfrk}, {input:"mathfrak", tag:"mstyle", atname:"mathvariant", atval:"fraktur", output:"mathfrak", tex:null, ttype:UNARY, codes:AMfrk} ]; function compareNames(s1,s2) { if (s1.input > s2.input) return 1 else return -1; } var AMnames = []; //list of input symbols function initSymbols() { var i; var symlen = AMsymbols.length; for (i=0; i=n where str appears or would be inserted // assumes arr is sorted if (n==0) { var h,m; n = -1; h = arr.length; while (n+1> 1; if (arr[m]=str } function AMgetSymbol(str) { //return maximal initial substring of str that appears in names //return null if there is none var k = 0; //new pos var j = 0; //old pos var mk; //match pos var st; var tagst; var match = ""; var more = true; for (var i=1; i<=str.length && more; i++) { st = str.slice(0,i); //initial substring of length i j = k; k = position(AMnames, st, j); if (k=AMnames[k]; } AMpreviousSymbol=AMcurrentSymbol; if (match!=""){ AMcurrentSymbol=AMsymbols[mk].ttype; return AMsymbols[mk]; } // if str[0] is a digit or - return maxsubstring of digits.digits AMcurrentSymbol=CONST; k = 1; st = str.slice(0,1); var integ = true; while ("0"<=st && st<="9" && k<=str.length) { st = str.slice(k,k+1); k++; } if (st == decimalsign) { st = str.slice(k,k+1); if ("0"<=st && st<="9") { integ = false; k++; while ("0"<=st && st<="9" && k<=str.length) { st = str.slice(k,k+1); k++; } } } if ((integ && k>1) || k>2) { st = str.slice(0,k-1); tagst = "mn"; } else { k = 2; st = str.slice(0,1); //take 1 character tagst = (("A">st || st>"Z") && ("a">st || st>"z")?"mo":"mi"); } if (st=="-" && str.charAt(1)!==' ' && AMpreviousSymbol==INFIX) { AMcurrentSymbol = INFIX; //trick "/" into recognizing "-" on second parse return {input:st, tag:tagst, output:st, ttype:UNARY, func:true}; } return {input:st, tag:tagst, output:st, ttype:CONST}; } function AMremoveBrackets(node) { var st; if (!node.hasChildNodes()) { return; } if (node.firstChild.hasChildNodes() && (node.nodeName=="mrow" || node.nodeName=="M:MROW")) { st = node.firstChild.firstChild.nodeValue; if (st=="(" || st=="[" || st=="{") node.removeChild(node.firstChild); } if (node.lastChild.hasChildNodes() && (node.nodeName=="mrow" || node.nodeName=="M:MROW")) { st = node.lastChild.firstChild.nodeValue; if (st==")" || st=="]" || st=="}") node.removeChild(node.lastChild); } } /*Parsing ASCII math expressions with the following grammar v ::= [A-Za-z] | greek letters | numbers | other constant symbols u ::= sqrt | text | bb | other unary symbols for font commands b ::= frac | root | stackrel binary symbols l ::= ( | [ | { | (: | {: left brackets r ::= ) | ] | } | :) | :} right brackets S ::= v | lEr | uS | bSS Simple expression I ::= S_S | S^S | S_S^S | S Intermediate expression E ::= IE | I/I Expression Each terminal symbol is translated into a corresponding mathml node.*/ var AMnestingDepth,AMpreviousSymbol,AMcurrentSymbol; function AMparseSexpr(str) { //parses str and returns [node,tailstr] var symbol, node, result, i, st,// rightvert = false, newFrag = document.createDocumentFragment(); str = AMremoveCharsAndBlanks(str,0); symbol = AMgetSymbol(str); //either a token or a bracket or empty if (symbol == null || symbol.ttype == RIGHTBRACKET && AMnestingDepth > 0) { return [null,str]; } if (symbol.ttype == DEFINITION) { str = symbol.output+AMremoveCharsAndBlanks(str,symbol.input.length); symbol = AMgetSymbol(str); } switch (symbol.ttype) { case UNDEROVER: case CONST: str = AMremoveCharsAndBlanks(str,symbol.input.length); return [createMmlNode(symbol.tag, //its a constant document.createTextNode(symbol.output)),str]; case LEFTBRACKET: //read (expr+) AMnestingDepth++; str = AMremoveCharsAndBlanks(str,symbol.input.length); result = AMparseExpr(str,true); AMnestingDepth--; if (typeof symbol.invisible == "boolean" && symbol.invisible) node = createMmlNode("mrow",result[0]); else { node = createMmlNode("mo",document.createTextNode(symbol.output)); node = createMmlNode("mrow",node); node.appendChild(result[0]); } return [node,result[1]]; case TEXT: if (symbol!=AMquote) str = AMremoveCharsAndBlanks(str,symbol.input.length); if (str.charAt(0)=="{") i=str.indexOf("}"); else if (str.charAt(0)=="(") i=str.indexOf(")"); else if (str.charAt(0)=="[") i=str.indexOf("]"); else if (symbol==AMquote) i=str.slice(1).indexOf("\"")+1; else i = 0; if (i==-1) i = str.length; st = str.slice(1,i); if (st.charAt(0) == " ") { node = createMmlNode("mspace"); node.setAttribute("width","1ex"); newFrag.appendChild(node); } newFrag.appendChild( createMmlNode(symbol.tag,document.createTextNode(st))); if (st.charAt(st.length-1) == " ") { node = createMmlNode("mspace"); node.setAttribute("width","1ex"); newFrag.appendChild(node); } str = AMremoveCharsAndBlanks(str,i+1); return [createMmlNode("mrow",newFrag),str]; case UNARYUNDEROVER: case UNARY: str = AMremoveCharsAndBlanks(str,symbol.input.length); result = AMparseSexpr(str); if (result[0]==null) return [createMmlNode(symbol.tag, document.createTextNode(symbol.output)),str]; if (typeof symbol.func == "boolean" && symbol.func) { // functions hack st = str.charAt(0); if (st=="^" || st=="_" || st=="/" || st=="|" || st=="," || (symbol.input.length==1 && symbol.input.match(/\w/) && st!="(")) { return [createMmlNode(symbol.tag, document.createTextNode(symbol.output)),str]; } else { node = createMmlNode("mrow", createMmlNode(symbol.tag,document.createTextNode(symbol.output))); node.appendChild(result[0]); return [node,result[1]]; } } AMremoveBrackets(result[0]); if (symbol.input == "sqrt") { // sqrt return [createMmlNode(symbol.tag,result[0]),result[1]]; } else if (typeof symbol.rewriteleftright != "undefined") { // abs, floor, ceil node = createMmlNode("mrow", createMmlNode("mo",document.createTextNode(symbol.rewriteleftright[0]))); node.appendChild(result[0]); node.appendChild(createMmlNode("mo",document.createTextNode(symbol.rewriteleftright[1]))); return [node,result[1]]; } else if (symbol.input == "cancel") { // cancel node = createMmlNode(symbol.tag,result[0]); node.setAttribute("notation","updiagonalstrike"); return [node,result[1]]; } else if (typeof symbol.acc == "boolean" && symbol.acc) { // accent node = createMmlNode(symbol.tag,result[0]); var accnode = createMmlNode("mo",document.createTextNode(symbol.output)); if (symbol.input=="vec" && ( (result[0].nodeName=="mrow" && result[0].childNodes.length==1 && result[0].firstChild.firstChild.nodeValue !== null && result[0].firstChild.firstChild.nodeValue.length==1) || (result[0].firstChild.nodeValue !== null && result[0].firstChild.nodeValue.length==1) )) { accnode.setAttribute("stretchy",false); } node.appendChild(accnode); return [node,result[1]]; } else { // font change command if (!isIE && typeof symbol.codes != "undefined") { for (i=0; i64 && st.charCodeAt(j)<91) newst = newst + symbol.codes[st.charCodeAt(j)-65]; else if (st.charCodeAt(j)>96 && st.charCodeAt(j)<123) newst = newst + symbol.codes[st.charCodeAt(j)-71]; else newst = newst + st.charAt(j); if (result[0].nodeName=="mi") result[0]=createMmlNode("mo"). appendChild(document.createTextNode(newst)); else result[0].replaceChild(createMmlNode("mo"). appendChild(document.createTextNode(newst)), result[0].childNodes[i]); } } node = createMmlNode(symbol.tag,result[0]); node.setAttribute(symbol.atname,symbol.atval); return [node,result[1]]; } case BINARY: str = AMremoveCharsAndBlanks(str,symbol.input.length); result = AMparseSexpr(str); if (result[0]==null) return [createMmlNode("mo", document.createTextNode(symbol.input)),str]; AMremoveBrackets(result[0]); var result2 = AMparseSexpr(result[1]); if (result2[0]==null) return [createMmlNode("mo", document.createTextNode(symbol.input)),str]; AMremoveBrackets(result2[0]); if (['color', 'class', 'id'].indexOf(symbol.input) >= 0) { // Get the second argument if (str.charAt(0)=="{") i=str.indexOf("}"); else if (str.charAt(0)=="(") i=str.indexOf(")"); else if (str.charAt(0)=="[") i=str.indexOf("]"); st = str.slice(1,i); // Make a mathml node node = createMmlNode(symbol.tag,result2[0]); // Set the correct attribute if (symbol.input === "color") node.setAttribute("mathcolor", st) else if (symbol.input === "class") node.setAttribute("class", st) else if (symbol.input === "id") node.setAttribute("id", st) return [node,result2[1]]; } if (symbol.input=="root" || symbol.output=="stackrel") newFrag.appendChild(result2[0]); newFrag.appendChild(result[0]); if (symbol.input=="frac") newFrag.appendChild(result2[0]); return [createMmlNode(symbol.tag,newFrag),result2[1]]; case INFIX: str = AMremoveCharsAndBlanks(str,symbol.input.length); return [createMmlNode("mo",document.createTextNode(symbol.output)),str]; case SPACE: str = AMremoveCharsAndBlanks(str,symbol.input.length); node = createMmlNode("mspace"); node.setAttribute("width","1ex"); newFrag.appendChild(node); newFrag.appendChild( createMmlNode(symbol.tag,document.createTextNode(symbol.output))); node = createMmlNode("mspace"); node.setAttribute("width","1ex"); newFrag.appendChild(node); return [createMmlNode("mrow",newFrag),str]; case LEFTRIGHT: // if (rightvert) return [null,str]; else rightvert = true; AMnestingDepth++; str = AMremoveCharsAndBlanks(str,symbol.input.length); result = AMparseExpr(str,false); AMnestingDepth--; st = ""; if (result[0].lastChild!=null) st = result[0].lastChild.firstChild.nodeValue; if (st == "|" && str.charAt(0)!==",") { // its an absolute value subterm node = createMmlNode("mo",document.createTextNode(symbol.output)); node = createMmlNode("mrow",node); node.appendChild(result[0]); return [node,result[1]]; } else { // the "|" is a \mid so use unicode 2223 (divides) for spacing node = createMmlNode("mo",document.createTextNode("\u2223")); node = createMmlNode("mrow",node); return [node,str]; } default: //alert("default"); str = AMremoveCharsAndBlanks(str,symbol.input.length); return [createMmlNode(symbol.tag, //its a constant document.createTextNode(symbol.output)),str]; } } function AMparseIexpr(str) { var symbol, sym1, sym2, node, result, underover; str = AMremoveCharsAndBlanks(str,0); sym1 = AMgetSymbol(str); result = AMparseSexpr(str); node = result[0]; str = result[1]; symbol = AMgetSymbol(str); if (symbol.ttype == INFIX && symbol.input != "/") { str = AMremoveCharsAndBlanks(str,symbol.input.length); // if (symbol.input == "/") result = AMparseIexpr(str); else ... result = AMparseSexpr(str); if (result[0] == null) // show box in place of missing argument result[0] = createMmlNode("mo",document.createTextNode("\u25A1")); else AMremoveBrackets(result[0]); str = result[1]; // if (symbol.input == "/") AMremoveBrackets(node); underover = (sym1.ttype == UNDEROVER || sym1.ttype == UNARYUNDEROVER); if (symbol.input == "_") { sym2 = AMgetSymbol(str); if (sym2.input == "^") { str = AMremoveCharsAndBlanks(str,sym2.input.length); var res2 = AMparseSexpr(str); AMremoveBrackets(res2[0]); str = res2[1]; node = createMmlNode((underover?"munderover":"msubsup"),node); node.appendChild(result[0]); node.appendChild(res2[0]); node = createMmlNode("mrow",node); // so sum does not stretch } else { node = createMmlNode((underover?"munder":"msub"),node); node.appendChild(result[0]); } } else if (symbol.input == "^" && underover) { node = createMmlNode("mover",node); node.appendChild(result[0]); } else { node = createMmlNode(symbol.tag,node); node.appendChild(result[0]); } if (typeof sym1.func != 'undefined' && sym1.func) { sym2 = AMgetSymbol(str); if (sym2.ttype != INFIX && sym2.ttype != RIGHTBRACKET && (sym1.input.length>1 || sym2.ttype == LEFTBRACKET)) { result = AMparseIexpr(str); node = createMmlNode("mrow",node); node.appendChild(result[0]); str = result[1]; } } } return [node,str]; } function AMparseExpr(str,rightbracket) { var symbol, node, result, i, newFrag = document.createDocumentFragment(); do { str = AMremoveCharsAndBlanks(str,0); result = AMparseIexpr(str); node = result[0]; str = result[1]; symbol = AMgetSymbol(str); if (symbol.ttype == INFIX && symbol.input == "/") { str = AMremoveCharsAndBlanks(str,symbol.input.length); result = AMparseIexpr(str); if (result[0] == null) // show box in place of missing argument result[0] = createMmlNode("mo",document.createTextNode("\u25A1")); else AMremoveBrackets(result[0]); str = result[1]; AMremoveBrackets(node); node = createMmlNode(symbol.tag,node); node.appendChild(result[0]); newFrag.appendChild(node); symbol = AMgetSymbol(str); } else if (node!=undefined) newFrag.appendChild(node); } while ((symbol.ttype != RIGHTBRACKET && (symbol.ttype != LEFTRIGHT || rightbracket) || AMnestingDepth == 0) && symbol!=null && symbol.output!=""); if (symbol.ttype == RIGHTBRACKET || symbol.ttype == LEFTRIGHT) { // if (AMnestingDepth > 0) AMnestingDepth--; var len = newFrag.childNodes.length; if (len>0 && newFrag.childNodes[len-1].nodeName == "mrow" && newFrag.childNodes[len-1].lastChild && newFrag.childNodes[len-1].lastChild.firstChild ) { //matrix //removed to allow row vectors: //&& len>1 && //newFrag.childNodes[len-2].nodeName == "mo" && //newFrag.childNodes[len-2].firstChild.nodeValue == "," var right = newFrag.childNodes[len-1].lastChild.firstChild.nodeValue; if (right==")" || right=="]") { var left = newFrag.childNodes[len-1].firstChild.firstChild.nodeValue; if (left=="(" && right==")" && symbol.output != "}" || left=="[" && right=="]") { var pos = []; // positions of commas var matrix = true; var m = newFrag.childNodes.length; for (i=0; matrix && i1) matrix = pos[i].length == pos[i-2].length; } matrix = matrix && (pos.length>1 || pos[0].length>0); var columnlines = []; if (matrix) { var row, frag, n, k, table = document.createDocumentFragment(); for (i=0; i(-,-,...,-,-) n = node.childNodes.length; k = 0; node.removeChild(node.firstChild); //remove ( for (j=1; j2) { newFrag.removeChild(newFrag.firstChild); //remove ) newFrag.removeChild(newFrag.firstChild); //remove , } table.appendChild(createMmlNode("mtr",row)); } node = createMmlNode("mtable",table); node.setAttribute("columnlines", columnlines.join(" ")); if (typeof symbol.invisible == "boolean" && symbol.invisible) node.setAttribute("columnalign","left"); newFrag.replaceChild(node,newFrag.firstChild); } } } } str = AMremoveCharsAndBlanks(str,symbol.input.length); if (typeof symbol.invisible != "boolean" || !symbol.invisible) { node = createMmlNode("mo",document.createTextNode(symbol.output)); newFrag.appendChild(node); } } return [newFrag,str]; } function parseMath(str,latex) { var frag, node; AMnestingDepth = 0; //some basic cleanup for dealing with stuff editors like TinyMCE adds str = str.replace(/ /g,""); str = str.replace(/>/g,">"); str = str.replace(/</g,"<"); frag = AMparseExpr(str.replace(/^\s+/g,""),false)[0]; node = createMmlNode("mstyle",frag); if (mathcolor != "") node.setAttribute("mathcolor",mathcolor); if (mathfontsize != "") { node.setAttribute("fontsize", mathfontsize); node.setAttribute("mathsize", mathfontsize); } if (mathfontfamily != "") { node.setAttribute("fontfamily", mathfontfamily); node.setAttribute("mathvariant", mathfontfamily); } if (displaystyle) node.setAttribute("displaystyle","true"); node = createMmlNode("math",node); if (showasciiformulaonhover) //fixed by djhsu so newline node.setAttribute("title",str.replace(/\s+/g," "));//does not show in Gecko return node; } /* function strarr2docFrag(arr, linebreaks, latex) { var newFrag=document.createDocumentFragment(); var expr = false; for (var i=0; i,\\|!:;'~]|\\.(?!(?:\x20|$))|"+ambigAMtoken+englishAMtoken+simpleAMtoken; var re = new RegExp("(^|\\s)((("+token+")\\s?)(("+token+secondenglishAMtoken+")\\s?)+)([,.?]?(?=\\s|$))","g"); str = str.replace(re," `$2`$7"); var arr = str.split(AMdelimiter1); var re1 = new RegExp("(^|\\s)([b-zB-HJ-Z+*<>]|"+texcommand+ambigAMtoken+simpleAMtoken+")(\\s|\\n|$)","g"); var re2 = new RegExp("(^|\\s)([a-z]|"+texcommand+ambigAMtoken+simpleAMtoken+")([,.])","g"); // removed |\d+ for now for (i=0; i1 || mtch) { if (!noMathML) { frg = strarr2docFrag(arr,n.nodeType==8,latex); var len = frg.childNodes.length; n.parentNode.replaceChild(frg,n); return len-1; } else return 0; } } } else return 0; } else if (n.nodeName!="math") { for (i=0; i extends AbstractInputJax { /** * The name of this input jax */ public static NAME: string = 'MathML'; /** * @override */ public static OPTIONS: OptionList = defaultOptions({ parseAs: 'html', // Whether to use HTML or XML parsing for the MathML string forceReparse: false, // Whether to force the string to be reparsed, or use the one from the document DOM FindMathML: null, // The FindMathML instance to override the default one MathMLCompile: null, // The MathMLCompile instance to override the default one /* * The function to use to handle a parsing error (throw an error by default) */ parseError: function (node: Node) { this.error(this.adaptor.textContent(node).replace(/\n.*/g, '')); } }, AbstractInputJax.OPTIONS); /** * The FindMathML instance used to locate MathML in the document */ protected findMathML: FindMathML; /** * The MathMLCompile instance used to convert the MathML tree to internal format */ protected mathml: MathMLCompile; /** * A list of functions to call on the parsed MathML DOM before conversion to internal structure */ public mmlFilters: FunctionList; /** * @override */ constructor(options: OptionList = {}) { let [mml, find, compile] = separateOptions(options, FindMathML.OPTIONS, MathMLCompile.OPTIONS); super(mml); this.findMathML = this.options['FindMathML'] || new FindMathML(find); this.mathml = this.options['MathMLCompile'] || new MathMLCompile(compile); this.mmlFilters = new FunctionList(); } /** * Set the adaptor in any of the objects that need it * * @override */ public setAdaptor(adaptor: DOMAdaptor) { super.setAdaptor(adaptor); this.findMathML.adaptor = adaptor; this.mathml.adaptor = adaptor; } /** * @param {MmlFactory} mmlFactory The MmlFactory to use for this MathML input jax */ public setMmlFactory(mmlFactory: MmlFactory) { super.setMmlFactory(mmlFactory); this.mathml.setMmlFactory(mmlFactory); } /** * Don't process strings (process nodes) * * @override */ public get processStrings() { return false; } /** * Convert a MathItem to internal format: * If there is no existing MathML node, or we are asked to reparse everything * Execute the preFilters on the math * Parse the MathML string in the desired format, and check the result for errors * If we got an HTML document: * Check that it has only one child (the element), and use it * Otherwise * Use the root element from the XML document * If the node is not a node, report the error. * Execute the mmlFilters on the parsed MathML * Compile the MathML to internal format, and execute the postFilters * Return the resulting internal format * * @override */ public compile(math: MathItem, document: MathDocument) { let mml = math.start.node; if (!mml || !math.end.node || this.options['forceReparse'] || this.adaptor.kind(mml) === '#text') { let mathml = this.executeFilters(this.preFilters, math, document, (math.math || '').trim()); let doc = this.checkForErrors(this.adaptor.parse(mathml, 'text/' + this.options['parseAs'])); let body = this.adaptor.body(doc); if (this.adaptor.childNodes(body).length !== 1) { this.error('MathML must consist of a single element'); } mml = this.adaptor.remove(this.adaptor.firstChild(body)) as N; if (this.adaptor.kind(mml).replace(/^[a-z]+:/, '') !== 'math') { this.error('MathML must be formed by a element, not <' + this.adaptor.kind(mml) + '>'); } } mml = this.executeFilters(this.mmlFilters, math, document, mml); return this.executeFilters(this.postFilters, math, document, this.mathml.compile(mml as N)); } /** * Check a parsed MathML string for errors. * * @param {D} doc The document returns from the DOMParser * @return {D} The document */ protected checkForErrors(doc: D): D { let err = this.adaptor.tags(this.adaptor.body(doc), 'parsererror')[0]; if (err) { if (this.adaptor.textContent(err) === '') { this.error('Error processing MathML'); } this.options['parseError'].call(this, err); } return doc; } /** * Throw an error * * @param {string} message The error message to produce */ protected error(message: string) { throw new Error(message); } /** * @override */ public findMath(node: N) { return this.findMathML.findMath(node); } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MathJax-src-3.2.2/ts/input/mathml/������������������������������������������������������������������0000775�0000000�0000000�00000000000�14250155210�0016701�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������MathJax-src-3.2.2/ts/input/mathml/FindMathML.ts�����������������������������������������������������0000664�0000000�0000000�00000007617�14250155210�0021207�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************* * * Copyright (c) 2017-2022 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 Implements the MathML version of the FindMath object * * @author dpvc@mathjax.org (Davide Cervone) */ import {AbstractFindMath} from '../../core/FindMath.js'; import {DOMAdaptor} from '../../core/DOMAdaptor.js'; import {OptionList} from '../../util/Options.js'; import {ProtoItem} from '../../core/MathItem.js'; /** * The MathML namespace */ const NAMESPACE = 'http://www.w3.org/1998/Math/MathML'; /*****************************************************************/ /** * Implements the FindMathML object (extends AbstractFindMath) * * @template N The HTMLElement node class * @template T The Text node class * @template D The Document class */ export class FindMathML extends AbstractFindMath { /** * @override */ public static OPTIONS: OptionList = {}; /** * The DOMAdaptor for the document being processed */ public adaptor: DOMAdaptor; /** * Locates math nodes, possibly with namespace prefixes. * Store them in a set so that if found more than once, they will only * appear in the list once. * * @override */ public findMath(node: N) { let set = new Set(); this.findMathNodes(node, set); this.findMathPrefixed(node, set); const html = this.adaptor.root(this.adaptor.document); if (this.adaptor.kind(html) === 'html' && set.size === 0) { this.findMathNS(node, set); } return this.processMath(set); } /** * Find plain tags * * @param {N} node The container to seaerch for math * @param {Set} set The set in which to store the math nodes */ protected findMathNodes(node: N, set: Set) { for (const math of this.adaptor.tags(node, 'math')) { set.add(math); } } /** * Find tags (or whatever prefixes there are) * * @param {N} node The container to seaerch for math * @param {NodeSet} set The set in which to store the math nodes */ protected findMathPrefixed(node: N, set: Set) { let html = this.adaptor.root(this.adaptor.document); for (const attr of this.adaptor.allAttributes(html)) { if (attr.name.substr(0, 6) === 'xmlns:' && attr.value === NAMESPACE) { let prefix = attr.name.substr(6); for (const math of this.adaptor.tags(node, prefix + ':math')) { set.add(math); } } } } /** * Find namespaced math in XHTML documents (is this really needed?) * * @param {N} node The container to seaerch for math * @param {NodeSet} set The set in which to store the math nodes */ protected findMathNS(node: N, set: Set) { for (const math of this.adaptor.tags(node, 'math', NAMESPACE)) { set.add(math); } } /** * Produce the array of proto math items from the node set */ protected processMath(set: Set) { let math: ProtoItem[] = []; for (const mml of Array.from(set)) { let display = (this.adaptor.getAttribute(mml, 'display') === 'block' || this.adaptor.getAttribute(mml, 'mode') === 'display'); let start = {node: mml, n: 0, delim: ''}; let end = {node: mml, n: 0, delim: ''}; math.push({math: this.adaptor.outerHTML(mml), start, end, display}); } return math; } } �����������������������������������������������������������������������������������������������������������������MathJax-src-3.2.2/ts/input/mathml/MathMLCompile.ts��������������������������������������������������0000664�0000000�0000000�00000026402�14250155210�0021710�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************* * * Copyright (c) 2017-2022 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 Implementation of the Compile function for the MathML input jax * * @author dpvc@mathjax.org (Davide Cervone) */ import {MmlFactory} from '../../core/MmlTree/MmlFactory.js'; import {MmlNode, TextNode, XMLNode, AbstractMmlNode, AbstractMmlTokenNode, TEXCLASS} from '../../core/MmlTree/MmlNode.js'; import {userOptions, defaultOptions, OptionList} from '../../util/Options.js'; import * as Entities from '../../util/Entities.js'; import {DOMAdaptor} from '../../core/DOMAdaptor.js'; /********************************************************************/ /** * The class for performing the MathML DOM node to * internal MmlNode conversion. * * @template N The HTMLElement node class * @template T The Text node class * @template D The Document class */ export class MathMLCompile { /** * The default options for this object */ public static OPTIONS: OptionList = { MmlFactory: null, // The MmlFactory to use (defaults to a new MmlFactory) fixMisplacedChildren: true, // True if we want to use heuristics to try to fix // problems with the tree based on HTML not handling // self-closing tags properly verify: { // Options to pass to verifyTree() controlling MathML verification ...AbstractMmlNode.verifyDefaults }, translateEntities: true // True means translate entities in text nodes }; /** * The DOMAdaptor for the document being processed */ public adaptor: DOMAdaptor; /** * The instance of the MmlFactory object and */ protected factory: MmlFactory; /** * The options (the defaults with the user options merged in) */ protected options: OptionList; /** * Merge the user options into the defaults, and save them * Create the MmlFactory object * * @param {OptionList} options The options controlling the conversion */ constructor(options: OptionList = {}) { const Class = this.constructor as typeof MathMLCompile; this.options = userOptions(defaultOptions({}, Class.OPTIONS), options); } /** * @param{MmlFactory} mmlFactory The MathML factory to use for new nodes */ public setMmlFactory(mmlFactory: MmlFactory) { this.factory = mmlFactory; } /** * Convert a MathML DOM tree to internal MmlNodes * * @param {N} node The node to convert to MmlNodes * @return {MmlNode} The MmlNode at the root of the converted tree */ public compile(node: N): MmlNode { let mml = this.makeNode(node); mml.verifyTree(this.options['verify']); mml.setInheritedAttributes({}, false, 0, false); mml.walkTree(this.markMrows); return mml; } /** * Recursively convert nodes and their children, taking MathJax classes * into account. * * FIXME: we should use data-* attributes rather than classes for these * * @param {N} node The node to convert to an MmlNode * @return {MmlNode} The converted MmlNode */ public makeNode(node: N): MmlNode { const adaptor = this.adaptor; let limits = false; let kind = adaptor.kind(node).replace(/^.*:/, ''); let texClass = adaptor.getAttribute(node, 'data-mjx-texclass') || ''; if (texClass) { texClass = this.filterAttribute('data-mjx-texclass', texClass) || ''; } let type = texClass && kind === 'mrow' ? 'TeXAtom' : kind; for (const name of this.filterClassList(adaptor.allClasses(node))) { if (name.match(/^MJX-TeXAtom-/) && kind === 'mrow') { texClass = name.substr(12); type = 'TeXAtom'; } else if (name === 'MJX-fixedlimits') { limits = true; } } this.factory.getNodeClass(type) || this.error('Unknown node type "' + type + '"'); let mml = this.factory.create(type); if (type === 'TeXAtom' && texClass === 'OP' && !limits) { mml.setProperty('movesupsub', true); mml.attributes.setInherited('movablelimits', true); } if (texClass) { mml.texClass = (TEXCLASS as {[name: string]: number})[texClass]; mml.setProperty('texClass', mml.texClass); } this.addAttributes(mml, node); this.checkClass(mml, node); this.addChildren(mml, node); return mml; } /** * Copy the attributes from a MathML node to an MmlNode. * * @param {MmlNode} mml The MmlNode to which attributes will be added * @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; let value = this.filterAttribute(name, attr.value); if (value === null || name === 'xmlns') { continue; } if (name.substr(0, 9) === 'data-mjx-') { switch (name.substr(9)) { case 'alternate': mml.setProperty('variantForm', true); break; case 'variant': mml.attributes.set('mathvariant', value); ignoreVariant = true; break; case 'smallmatrix': mml.setProperty('scriptlevel', 1); mml.setProperty('useHeight', false); break; case 'accent': mml.setProperty('mathaccent', value === 'true'); break; case 'auto-op': mml.setProperty('autoOP', value === 'true'); break; case 'script-align': mml.setProperty('scriptalign', value); break; } } else if (name !== 'class') { let val = value.toLowerCase(); if (val === 'true' || val === 'false') { mml.attributes.set(name, val === 'true'); } else if (!ignoreVariant || name !== 'mathvariant') { mml.attributes.set(name, value); } } } } /** * Provide a hook for the Safe extension to filter attribute values. * * @param {string} name The name of an attribute to filter * @param {string} value The value to filter */ protected filterAttribute(_name: string, value: string) { return value; } /** * Provide a hook for the Safe extension to filter class names. * * @param {string[]} list The list of class names to filter */ protected filterClassList(list: string[]) { return list; } /** * Convert the children of the MathML node and add them to the MmlNode * * @param {MmlNode} mml The MmlNode to which children will be added * @param {N} node The MathML node whose children are to be copied */ protected addChildren(mml: MmlNode, node: N) { if (mml.arity === 0) { return; } 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, adaptor)); } else { let childMml = mml.appendChild(this.makeNode(child)) as MmlNode; if (childMml.arity === 0 && adaptor.childNodes(child).length) { if (this.options['fixMisplacedChildren']) { this.addChildren(mml, child); } else { childMml.mError('There should not be children for ' + childMml.kind + ' nodes', this.options['verify'], true); } } } } } /** * Add text to a token node * * @param {MmlNode} mml The MmlNode to which text will be added * @param {N} child The text node whose contents is to be copied */ protected addText(mml: MmlNode, child: N) { let text = this.adaptor.value(child); if ((mml.isToken || mml.getProperty('isChars')) && mml.arity) { if (mml.isToken) { text = Entities.translate(text); text = this.trimSpace(text); } mml.appendChild((this.factory.create('text') as TextNode).setText(text)); } else if (text.match(/\S/)) { this.error('Unexpected text node "' + text + '"'); } } /** * Check for special MJX values in the class and process them * * @param {MmlNode} mml The MmlNode to be modified according to the class markers * @param {N} node The MathML node whose class is to be processed */ protected checkClass(mml: MmlNode, node: N) { let classList = []; for (const name of this.filterClassList(this.adaptor.allClasses(node))) { if (name.substr(0, 4) === 'MJX-') { if (name === 'MJX-variant') { mml.setProperty('variantForm', true); } else if (name.substr(0, 11) !== 'MJX-TeXAtom') { mml.attributes.set('mathvariant', this.fixCalligraphic(name.substr(3))); } } else { classList.push(name); } } if (classList.length) { mml.attributes.set('class', classList.join(' ')); } } /** * Fix the old incorrect spelling of calligraphic. * * @param {string} variant The mathvariant name * @return {string} The corrected variant */ protected fixCalligraphic(variant: string): string { return variant.replace(/caligraphic/, 'calligraphic'); } /** * Check to see if an mrow has delimiters at both ends (so looks like an mfenced structure). * * @param {MmlNode} mml The node to check for mfenced structure */ protected markMrows(mml: MmlNode) { if (mml.isKind('mrow') && !mml.isInferred && mml.childNodes.length >= 2) { let first = mml.childNodes[0] as MmlNode; let last = mml.childNodes[mml.childNodes.length - 1] as MmlNode; if (first.isKind('mo') && first.attributes.get('fence') && first.attributes.get('stretchy') && last.isKind('mo') && last.attributes.get('fence') && last.attributes.get('stretchy')) { if (first.childNodes.length) { mml.setProperty('open', (first as AbstractMmlTokenNode).getText()); } if (last.childNodes.length) { mml.setProperty('close', (last as AbstractMmlTokenNode).getText()); } } } } /** * @param {string} text The text to have leading/trailing spaced removed * @return {string} The trimmed text */ protected trimSpace(text: string): string { return text.replace(/[\t\n\r]/g, ' ') // whitespace to spaces .replace(/^ +/, '') // initial whitespace .replace(/ +$/, '') // trailing whitespace .replace(/ +/g, ' '); // internal multiple whitespace } /** * @param {string} message The error message to produce */ protected error(message: string) { throw new Error(message); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MathJax-src-3.2.2/ts/input/mathml/mml3/�������������������������������������������������������������0000775�0000000�0000000�00000000000�14250155210�0017551�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������MathJax-src-3.2.2/ts/input/mathml/mml3/mml3-node.ts�������������������������������������������������0000664�0000000�0000000�00000005525�14250155210�0021723�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************* * * Copyright (c) 2021-2022 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 Auxiliary function for elementary MathML3 support (experimental) * using David Carlisle's XLST transform. * * @author dpvc@mathjax.org (Davide Cervone) */ import {MathDocument} from '../../../core/MathDocument.js'; /** * Create the transform function that uses Saxon-js to perform the * xslt transformation. * * @template N The HTMLElement node class * @template T The Text node class * @template D The Document class * * @return {(node: N, doc: MathDocument) => N)} The transformation function */ export function createTransform(): (node: N, doc: MathDocument) => N { /* tslint:disable-next-line:no-eval */ const nodeRequire = eval('require'); // get the actual require from node. /* tslint:disable-next-line:no-eval */ const dirname = eval('__dirname'); // get the actual __dirname try { nodeRequire.resolve('saxon-js'); // check if saxon-js is installed. } catch (err) { throw Error('Saxon-js not found. Run the command:\n npm install saxon-js\nand try again.'); } const Saxon = nodeRequire('saxon-js'); // dynamically load Saxon-JS. const path = nodeRequire('path'); // use the real version from node. const fs = nodeRequire('fs'); // use the real version from node. const xsltFile = path.resolve(dirname, 'mml3.sef.json'); // load the preprocessed stylesheet. const xslt = JSON.parse(fs.readFileSync(xsltFile)); // and parse it. return (node: N, doc: MathDocument) => { const adaptor = doc.adaptor; let mml = adaptor.outerHTML(node); // // Make sure the namespace is present // if (!mml.match(/ xmlns[=:]/)) { mml = mml.replace(/<(?:(\w+)(:))?math/, '<$1$2math xmlns$2$1="http://www.w3.org/1998/Math/MathML"'); } // // Try to run the transform, and if it fails, return the original MathML // let result; try { result = adaptor.firstChild(adaptor.body(adaptor.parse(Saxon.transform({ stylesheetInternal: xslt, sourceText: mml, destination: 'serialized' }).principalResult))) as N; } catch (err) { result = node; } return result; }; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������MathJax-src-3.2.2/ts/input/mathml/mml3/mml3.sef.json������������������������������������������������0000664�0000000�0000000�00000605504�14250155210�0022102�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������{"N":"package","version":"10","packageVersion":"1","saxonVersion":"Saxon-JS 2.3","target":"JS","targetVersion":"2","name":"TOP-LEVEL","relocatable":"true","buildDateTime":"2022-02-18T15:46:36.585-05:00","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","C":[{"N":"co","id":"0","binds":"0 3 2 1","C":[{"N":"mode","onNo":"TC","flags":"","patternSlots":"0","prec":"","C":[{"N":"templateRule","rank":"0","prec":"0","seq":"52","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"524","module":"mml3.xsl","expand-text":"false","match":"m:mlongdiv","prio":"11","matches":"NE nQ{http://www.w3.org/1998/Math/MathML}mlongdiv","C":[{"N":"p.nodeTest","role":"match","test":"NE nQ{http://www.w3.org/1998/Math/MathML}mlongdiv","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mlongdiv","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common "},{"N":"let","var":"Q{}ms","slot":"0","sType":"* ","line":"525","role":"action","C":[{"N":"doc","sType":"1ND ","base":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","role":"select","C":[{"N":"elem","name":"m:mstack","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mstack ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"526","C":[{"N":"sequence","sType":"*N ","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"527","sType":"?NA nQ{}decimalpoint","C":[{"N":"lastOf","sType":"?NA nQ{}decimalpoint","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"527","C":[{"N":"docOrder","C":[{"N":"slash","op":"/","C":[{"N":"fn","name":"reverse","C":[{"N":"axis","name":"ancestor-or-self","nodeTest":"*NE"}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}decimalpoint"}]}]}]}]},{"N":"choose","sType":"*N ","type":"item()*","line":"528","C":[{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"529","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}longdivstyle"},{"N":"str","val":"left)(right"}]},{"N":"elem","name":"m:msrow","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}msrow ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"530","C":[{"N":"sequence","sType":"*NE ","C":[{"N":"elem","name":"m:mrow","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mrow ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"531","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","sType":"?NE","C":[{"N":"first","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"9","C":[{"N":"axis","name":"child","nodeTest":"*NE"}]}]}]},{"N":"elem","name":"m:mo","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mo ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"532","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":")"}]}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"533","sType":"?NE","C":[{"N":"subscript","flags":"p","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"533","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"int","val":"3"}]}]},{"N":"elem","name":"m:mo","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mo ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"534","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"("}]}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"535","sType":"?NE","C":[{"N":"subscript","flags":"p","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"535","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"int","val":"2"}]}]}]}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"538","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}longdivstyle"},{"N":"str","val":"left/\\right"}]},{"N":"elem","name":"m:msrow","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}msrow ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"539","C":[{"N":"sequence","sType":"*NE ","C":[{"N":"elem","name":"m:mrow","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mrow ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"540","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","sType":"?NE","C":[{"N":"first","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"17","C":[{"N":"axis","name":"child","nodeTest":"*NE"}]}]}]},{"N":"elem","name":"m:mo","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mo ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"541","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"/"}]}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"542","sType":"?NE","C":[{"N":"subscript","flags":"p","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"542","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"int","val":"3"}]}]},{"N":"elem","name":"m:mo","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mo ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"543","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\\"}]}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"544","sType":"?NE","C":[{"N":"subscript","flags":"p","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"544","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"int","val":"2"}]}]}]}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"547","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}longdivstyle"},{"N":"str","val":":right=right"}]},{"N":"elem","name":"m:msrow","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}msrow ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"548","C":[{"N":"sequence","sType":"*NE ","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"549","sType":"?NE","C":[{"N":"subscript","flags":"p","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"549","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"int","val":"3"}]}]},{"N":"elem","name":"m:mo","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mo ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"550","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":":"}]}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"551","sType":"?NE","C":[{"N":"first","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"551","C":[{"N":"axis","name":"child","nodeTest":"*NE"}]}]},{"N":"elem","name":"m:mo","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mo ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"552","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"="}]}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"553","sType":"?NE","C":[{"N":"subscript","flags":"p","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"553","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"int","val":"2"}]}]}]}]},{"N":"or","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"560","C":[{"N":"or","C":[{"N":"or","C":[{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}longdivstyle"},{"N":"str","val":"stackedrightright"}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}longdivstyle"},{"N":"str","val":"mediumstackedrightright"}]}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}longdivstyle"},{"N":"str","val":"shortstackedrightright"}]}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}longdivstyle"},{"N":"str","val":"stackedleftleft"}]}]},{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"align","sType":"1NA ","line":"561","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"top"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"562","sType":"?NE","C":[{"N":"subscript","flags":"p","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"562","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"int","val":"3"}]}]}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"564","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}longdivstyle"},{"N":"str","val":"stackedleftlinetop"}]},{"N":"sequence","sType":"*NE ","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"565","sType":"?NE","C":[{"N":"subscript","flags":"p","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"565","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"int","val":"2"}]}]},{"N":"elem","name":"m:msline","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}msline ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"566","C":[{"N":"att","name":"length","nsuri":"","sType":"1NA ","C":[{"N":"fn","name":"string-join","sType":"1AS ","C":[{"N":"first","C":[{"N":"convert","type":"AS*","from":"AZ","to":"AS","C":[{"N":"data","C":[{"N":"mergeAdj","sType":"1ADI","C":[{"N":"fn","name":"string-length","sType":"1ADI","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"566","C":[{"N":"fn","name":"string","C":[{"N":"subscript","flags":"p","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"int","val":"3"}]}]}]}]}]}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]},{"N":"elem","name":"m:msrow","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}msrow ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"567","C":[{"N":"sequence","sType":"*NE ","C":[{"N":"elem","name":"m:mrow","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mrow ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"568","C":[{"N":"elem","name":"m:menclose","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}menclose ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"569","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"notation","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"bottom right"}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"570","sType":"?NE","C":[{"N":"first","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"570","C":[{"N":"axis","name":"child","nodeTest":"*NE"}]}]}]}]}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"573","sType":"?NE","C":[{"N":"subscript","flags":"p","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"573","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"int","val":"3"}]}]}]}]}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"576","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}longdivstyle"},{"N":"str","val":"righttop"}]},{"N":"sequence","sType":"*NE ","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"577","sType":"?NE","C":[{"N":"subscript","flags":"p","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"577","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"int","val":"2"}]}]},{"N":"elem","name":"m:msline","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}msline ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"578","C":[{"N":"att","name":"length","nsuri":"","sType":"1NA ","C":[{"N":"fn","name":"string-join","sType":"1AS ","C":[{"N":"first","C":[{"N":"convert","type":"AS*","from":"AZ","to":"AS","C":[{"N":"data","C":[{"N":"mergeAdj","sType":"1ADI","C":[{"N":"fn","name":"string-length","sType":"1ADI","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"578","C":[{"N":"fn","name":"string","C":[{"N":"subscript","flags":"p","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"int","val":"3"}]}]}]}]}]}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]},{"N":"elem","name":"m:msrow","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}msrow ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"579","C":[{"N":"sequence","sType":"*NE ","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"580","sType":"?NE","C":[{"N":"subscript","flags":"p","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"580","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"int","val":"3"}]}]},{"N":"elem","name":"m:menclose","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}menclose ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"581","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"notation","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"top left bottom"}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"582","sType":"?NE","C":[{"N":"first","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"582","C":[{"N":"axis","name":"child","nodeTest":"*NE"}]}]}]}]}]}]}]},{"N":"true"},{"N":"sequence","sType":"*NE ","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"586","sType":"?NE","C":[{"N":"subscript","flags":"p","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"586","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"int","val":"2"}]}]},{"N":"elem","name":"m:msline","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}msline ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"587","C":[{"N":"att","name":"length","nsuri":"","sType":"1NA ","C":[{"N":"fn","name":"string-join","sType":"1AS ","C":[{"N":"first","C":[{"N":"convert","type":"AS*","from":"AZ","to":"AS","C":[{"N":"data","C":[{"N":"mergeAdj","sType":"1AO","C":[{"N":"arith10","op":"+","calc":"d+d","sType":"1AO","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"587","C":[{"N":"fn","name":"string-length","C":[{"N":"fn","name":"string","C":[{"N":"subscript","flags":"p","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"int","val":"3"}]}]}]},{"N":"int","val":"1"}]}]}]}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]},{"N":"elem","name":"m:msrow","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}msrow ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"588","C":[{"N":"sequence","sType":"*NE ","C":[{"N":"elem","name":"m:mrow","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mrow ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"589","C":[{"N":"sequence","sType":"*NE ","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","sType":"?NE","C":[{"N":"first","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"52","C":[{"N":"axis","name":"child","nodeTest":"*NE"}]}]},{"N":"elem","name":"m:mspace","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mspace ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","C":[{"N":"att","name":"width","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":".2em"}]}]}]}]},{"N":"elem","name":"m:mpadded","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mpadded ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"590","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"voffset","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":".1em"}]},{"N":"att","name":"lspace","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"-.15em"}]},{"N":"att","name":"depth","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"-.2em"}]},{"N":"att","name":"height","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"-.2em"}]},{"N":"elem","name":"m:mo","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mo ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"591","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"minsize","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"1.2em"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":")"}]}]}]}]}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"593","sType":"?NE","C":[{"N":"subscript","flags":"p","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"593","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"int","val":"3"}]}]}]}]}]}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"597","sType":"*NE","C":[{"N":"filter","flags":"p","sType":"*NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"597","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"gc10","op":">","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"fn","name":"position"},{"N":"int","val":"3"}]}]}]}]}]}]},{"N":"choose","sType":"* ","type":"item()*","line":"600","C":[{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"601","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}longdivstyle"},{"N":"str","val":"stackedrightright"}]},{"N":"sequence","sType":"*NE ","C":[{"N":"elem","name":"m:menclose","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}menclose ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"602","C":[{"N":"sequence","sType":"* ","C":[{"N":"att","name":"notation","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"right"}]},{"N":"applyT","sType":"* ","line":"603","mode":"#unnamed","bSlot":"0","C":[{"N":"varRef","name":"Q{}ms","slot":"0","sType":"*","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"603"}]}]}]},{"N":"elem","name":"m:mtable","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtable ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"605","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"align","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"top"}]},{"N":"elem","name":"m:mtr","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtr ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"606","C":[{"N":"elem","name":"m:menclose","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}menclose ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"607","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"notation","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"bottom"}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"608","sType":"?NE","C":[{"N":"first","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"608","C":[{"N":"axis","name":"child","nodeTest":"*NE"}]}]}]}]}]},{"N":"elem","name":"m:mtr","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtr ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"611","C":[{"N":"elem","name":"mtd","sType":"1NE nQ{}mtd ","nsuri":"","namespaces":"","line":"612","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","sType":"?NE","C":[{"N":"subscript","flags":"p","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"68","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"int","val":"2"}]}]}]}]}]}]}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"616","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}longdivstyle"},{"N":"str","val":"mediumstackedrightright"}]},{"N":"sequence","sType":"* ","C":[{"N":"applyT","sType":"* ","line":"617","mode":"#unnamed","bSlot":"0","C":[{"N":"varRef","name":"Q{}ms","slot":"0","sType":"*","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"617"}]},{"N":"elem","name":"m:menclose","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}menclose ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"618","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"notation","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"left"}]},{"N":"elem","name":"m:mtable","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtable ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"619","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"align","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"top"}]},{"N":"elem","name":"m:mtr","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtr ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"620","C":[{"N":"elem","name":"m:menclose","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}menclose ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"621","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"notation","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"bottom"}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"622","sType":"?NE","C":[{"N":"first","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"622","C":[{"N":"axis","name":"child","nodeTest":"*NE"}]}]}]}]}]},{"N":"elem","name":"m:mtr","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtr ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"625","C":[{"N":"elem","name":"mtd","sType":"1NE nQ{}mtd ","nsuri":"","namespaces":"","line":"626","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","sType":"?NE","C":[{"N":"subscript","flags":"p","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"78","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"int","val":"2"}]}]}]}]}]}]}]}]}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"631","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}longdivstyle"},{"N":"str","val":"shortstackedrightright"}]},{"N":"sequence","sType":"* ","C":[{"N":"applyT","sType":"* ","line":"632","mode":"#unnamed","bSlot":"0","C":[{"N":"varRef","name":"Q{}ms","slot":"0","sType":"*","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"632"}]},{"N":"elem","name":"m:mtable","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtable ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"633","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"align","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"top"}]},{"N":"elem","name":"m:mtr","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtr ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"634","C":[{"N":"elem","name":"m:menclose","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}menclose ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"635","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"notation","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"left bottom"}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"636","sType":"?NE","C":[{"N":"first","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"636","C":[{"N":"axis","name":"child","nodeTest":"*NE"}]}]}]}]}]},{"N":"elem","name":"m:mtr","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtr ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"639","C":[{"N":"elem","name":"mtd","sType":"1NE nQ{}mtd ","nsuri":"","namespaces":"","line":"640","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","sType":"?NE","C":[{"N":"subscript","flags":"p","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"87","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"int","val":"2"}]}]}]}]}]}]}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"644","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}longdivstyle"},{"N":"str","val":"stackedleftleft"}]},{"N":"sequence","sType":"*NE ","C":[{"N":"elem","name":"m:mtable","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtable ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"645","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"align","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"top"}]},{"N":"elem","name":"m:mtr","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtr ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"646","C":[{"N":"elem","name":"m:menclose","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}menclose ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"647","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"notation","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"bottom"}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"648","sType":"?NE","C":[{"N":"first","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"648","C":[{"N":"axis","name":"child","nodeTest":"*NE"}]}]}]}]}]},{"N":"elem","name":"m:mtr","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtr ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"651","C":[{"N":"elem","name":"mtd","sType":"1NE nQ{}mtd ","nsuri":"","namespaces":"","line":"652","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","sType":"?NE","C":[{"N":"subscript","flags":"p","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"95","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"int","val":"2"}]}]}]}]}]}]},{"N":"elem","name":"m:menclose","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}menclose ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"655","C":[{"N":"sequence","sType":"* ","C":[{"N":"att","name":"notation","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"left"}]},{"N":"applyT","sType":"* ","line":"656","mode":"#unnamed","bSlot":"0","C":[{"N":"varRef","name":"Q{}ms","slot":"0","sType":"*","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"656"}]}]}]}]},{"N":"true"},{"N":"applyT","sType":"* ","line":"660","mode":"#unnamed","bSlot":"0","C":[{"N":"varRef","name":"Q{}ms","slot":"0","sType":"*","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"660"}]}]}]}]},{"N":"templateRule","rank":"1","prec":"0","seq":"38","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"171","module":"mml3.xsl","expand-text":"false","match":"m:mstack","prio":"11","matches":"NE nQ{http://www.w3.org/1998/Math/MathML}mstack","C":[{"N":"p.nodeTest","role":"match","test":"NE nQ{http://www.w3.org/1998/Math/MathML}mstack","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mstack","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common "},{"N":"let","var":"Q{}m","slot":"0","sType":"* ","line":"172","role":"action","C":[{"N":"doc","sType":"1ND ","base":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","role":"select","C":[{"N":"elem","name":"m:mtable","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtable ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"173","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"columnspacing","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"0em"}]},{"N":"att","name":"rowspacing","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"0em"}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"174","sType":"*NA nQ{}align","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}align","sType":"*NA nQ{}align","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"174"}]},{"N":"let","var":"Q{}t","slot":"0","sType":"*N ","line":"175","C":[{"N":"doc","sType":"1ND ","base":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","role":"select","C":[{"N":"applyT","sType":"* ","line":"176","mode":"Q{}mstack1","bSlot":"1","C":[{"N":"axis","name":"child","nodeTest":"*NE","sType":"*NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"176"},{"N":"withParam","name":"Q{}p","slot":"0","sType":"1ADI","C":[{"N":"int","val":"0","sType":"1ADI","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"177"}]}]}]},{"N":"let","var":"Q{}maxl","slot":"1","sType":"*N ","line":"180","C":[{"N":"doc","sType":"1ND ","base":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","role":"select","C":[{"N":"forEach","sType":"* ","line":"181","C":[{"N":"sort","sType":"*NA nQ{}l","C":[{"N":"docOrder","sType":"*NA nQ{}l","role":"select","line":"181","C":[{"N":"docOrder","sType":"*NA nQ{}l","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}t","slot":"0"}]},{"N":"axis","name":"child","nodeTest":"*NE"}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}l"}]}]}]},{"N":"sortKey","sType":"*A ","C":[{"N":"data","sType":"*A ","role":"select","C":[{"N":"dot","sType":"1NA nQ{}l ","role":"select"}]},{"N":"str","sType":"1AS ","val":"descending","role":"order"},{"N":"str","sType":"1AS ","val":"en","role":"lang"},{"N":"str","sType":"1AS ","val":"#default","role":"caseOrder"},{"N":"str","sType":"1AS ","val":"true","role":"stable"},{"N":"str","sType":"1AS ","val":"number","role":"dataType"}]}]},{"N":"choose","sType":"? ","line":"183","C":[{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"183","C":[{"N":"fn","name":"position"},{"N":"int","val":"1"}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"184","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"dot","sType":"1NA nQ{}l","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"184"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]}]}]},{"N":"forEach","sType":"*N ","line":"188","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"188","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}t","slot":"0"}]},{"N":"filter","flags":"p","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"or","C":[{"N":"fn","name":"not","C":[{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}class"},{"N":"str","val":"mscarries"}]}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"slash","op":"/","C":[{"N":"first","C":[{"N":"axis","name":"following-sibling","nodeTest":"*NE"}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}class"}]},{"N":"str","val":"mscarries"}]}]}]}]}]}]},{"N":"let","var":"Q{}c","slot":"2","sType":"*N ","line":"189","C":[{"N":"fn","name":"reverse","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"189","C":[{"N":"filter","C":[{"N":"first","C":[{"N":"axis","name":"preceding-sibling","nodeTest":"*NE"}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}class"},{"N":"str","val":"mscarries"}]}]}]},{"N":"sequence","sType":"?N ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\n"}]},{"N":"elem","name":"m:mtr","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtr ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"191","C":[{"N":"sequence","sType":"* ","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"192","sType":"*NA nQ{}class","C":[{"N":"filter","sType":"*NA nQ{}class","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"192","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}class"},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"dot"},{"N":"str","val":"msline"}]}]}]},{"N":"let","var":"Q{}offset","slot":"3","sType":"* ","line":"193","C":[{"N":"arith10","op":"-","calc":"d-d","sType":"?AO","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"193","C":[{"N":"atomSing","diag":"1|0||arith","card":"?","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}maxl","slot":"1"}]}]},{"N":"atomSing","diag":"1|1||arith","card":"?","C":[{"N":"first","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}l"}]}]}]},{"N":"choose","sType":"* ","type":"item()*","line":"194","C":[{"N":"and","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"195","C":[{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}class"},{"N":"str","val":"msline"}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}l"},{"N":"str","val":"*"}]}]},{"N":"let","var":"Q{}msl","slot":"4","sType":"* ","line":"196","C":[{"N":"first","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"196","C":[{"N":"axis","name":"child","nodeTest":"*NE"}]},{"N":"forEach","sType":"*","line":"197","C":[{"N":"filter","flags":"p","sType":"*N","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"197","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"descendant","nodeTest":"*N u[NT,NP,NC,NE]"}]},{"N":"gc10","op":"<=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"fn","name":"position"},{"N":"varRef","name":"Q{}maxl","slot":"1"}]}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"198","sType":"*","C":[{"N":"varRef","name":"Q{}msl","slot":"4","sType":"*","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"198"}]}]}]},{"N":"varRef","name":"Q{}c","slot":"2","sType":"*","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"201"},{"N":"let","var":"Q{}ldiff","slot":"4","sType":"*NE ","line":"202","C":[{"N":"arith10","op":"-","calc":"d-d","sType":"?AO","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"202","C":[{"N":"atomSing","diag":"1|0||arith","card":"?","C":[{"N":"first","C":[{"N":"docOrder","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}c","slot":"2"}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}l"}]}]}]}]},{"N":"atomSing","diag":"1|1||arith","card":"?","C":[{"N":"first","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}l"}]}]}]},{"N":"let","var":"Q{}loffset","slot":"5","sType":"*NE ","line":"203","C":[{"N":"arith10","op":"-","calc":"d-d","sType":"?AO","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"203","C":[{"N":"atomSing","diag":"1|0||arith","card":"?","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}maxl","slot":"1"}]}]},{"N":"atomSing","diag":"1|1||arith","card":"?","C":[{"N":"first","C":[{"N":"docOrder","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}c","slot":"2"}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}l"}]}]}]}]}]},{"N":"sequence","sType":"*NE ","C":[{"N":"forEach","sType":"*NE ","line":"204","C":[{"N":"filter","flags":"p","sType":"*NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"204","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"descendant","nodeTest":"*NE"}]},{"N":"gc10","op":"<=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"fn","name":"position"},{"N":"varRef","name":"Q{}offset","slot":"3"}]}]},{"N":"let","var":"Q{}pn","slot":"6","sType":"*NE ","line":"205","C":[{"N":"fn","name":"position","sType":"1ADI","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"205"},{"N":"let","var":"Q{}cy","slot":"7","sType":"*NE ","line":"206","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"206","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}c","slot":"2"}]},{"N":"filter","flags":"p","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"fn","name":"position"},{"N":"arith10","op":"-","calc":"d-d","C":[{"N":"atomSing","diag":"1|0||arith","card":"?","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}pn","slot":"6"}]}]},{"N":"atomSing","diag":"1|1||arith","card":"?","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}loffset","slot":"5"}]}]}]}]}]}]}]}]},{"N":"elem","name":"m:mtd","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtd ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"207","C":[{"N":"choose","sType":"? ","line":"208","C":[{"N":"docOrder","sType":"*NE","line":"208","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}cy","slot":"7"}]},{"N":"axis","name":"child","nodeTest":"*NE"}]}]}]},{"N":"elem","name":"m:mover","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mover ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"209","C":[{"N":"sequence","sType":"*NE ","C":[{"N":"elem","name":"m:mphantom","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mphantom ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","C":[{"N":"elem","name":"m:mn","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mn ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"0"}]}]}]},{"N":"elem","name":"m:mpadded","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mpadded ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"width","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"0em"}]},{"N":"att","name":"lspace","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"-0.5width"}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"210","sType":"*NE","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"210","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}cy","slot":"7"}]},{"N":"axis","name":"child","nodeTest":"*NE"}]}]}]}]}]}]}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]}]}]}]}]},{"N":"forEach","sType":"*NE ","line":"214","C":[{"N":"axis","name":"child","nodeTest":"*NE","sType":"*NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"214"},{"N":"let","var":"Q{}pn","slot":"6","sType":"*NE ","line":"215","C":[{"N":"fn","name":"position","sType":"1ADI","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"215"},{"N":"let","var":"Q{}cy","slot":"7","sType":"*NE ","line":"216","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"216","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}c","slot":"2"}]},{"N":"filter","flags":"p","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"fn","name":"position"},{"N":"arith10","op":"+","calc":"d+d","C":[{"N":"atomSing","diag":"1|0||arith","card":"?","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}pn","slot":"6"}]}]},{"N":"atomSing","diag":"1|1||arith","card":"?","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}ldiff","slot":"4"}]}]}]}]}]}]}]}]},{"N":"copy","sType":"1NE ","flags":"cin","line":"217","C":[{"N":"sequence","sType":"* ","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"218","sType":"*NA","C":[{"N":"axis","name":"attribute","nodeTest":"*NA","sType":"*NA","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"218"}]},{"N":"let","var":"Q{}b","slot":"8","sType":"* ","line":"219","C":[{"N":"doc","sType":"1ND ","base":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","role":"select","C":[{"N":"choose","sType":"*NE ","type":"item()*","line":"220","C":[{"N":"fn","name":"not","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"221","C":[{"N":"or","C":[{"N":"fn","name":"string","C":[{"N":"first","C":[{"N":"docOrder","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}cy","slot":"7"}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}crossout"}]}]}]}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"docOrder","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}cy","slot":"7"}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}crossout"}]}]},{"N":"str","val":"none"}]}]}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","sType":"*NE","C":[{"N":"axis","name":"child","nodeTest":"*NE","sType":"*NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"45"}]},{"N":"true"},{"N":"elem","name":"m:menclose","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}menclose ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"223","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"notation","nsuri":"","sType":"1NA ","C":[{"N":"fn","name":"string-join","sType":"1AS ","C":[{"N":"first","C":[{"N":"convert","type":"AS*","from":"AZ","to":"AS","C":[{"N":"data","C":[{"N":"mergeAdj","sType":"*NA nQ{}crossout","C":[{"N":"docOrder","sType":"*NA nQ{}crossout","line":"223","C":[{"N":"docOrder","sType":"*NA nQ{}crossout","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}cy","slot":"7"}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}crossout"}]}]}]}]}]}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","sType":"*NE","C":[{"N":"axis","name":"child","nodeTest":"*NE","sType":"*NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"48"}]}]}]}]}]},{"N":"choose","sType":"* ","type":"item()*","line":"227","C":[{"N":"or","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"228","C":[{"N":"docOrder","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}cy","slot":"7"}]},{"N":"axis","name":"child","nodeTest":"*NE nQ{http://www.w3.org/1998/Math/MathML}none"}]}]},{"N":"fn","name":"not","C":[{"N":"docOrder","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}cy","slot":"7"}]},{"N":"axis","name":"child","nodeTest":"*NE"}]}]}]}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","sType":"*","C":[{"N":"varRef","name":"Q{}b","slot":"8","sType":"*","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"51"}]},{"N":"or","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"229","C":[{"N":"fn","name":"not","C":[{"N":"fn","name":"string","C":[{"N":"first","C":[{"N":"docOrder","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}cy","slot":"7"}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}location"}]}]}]}]}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"docOrder","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}cy","slot":"7"}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}location"}]}]},{"N":"str","val":"n"}]}]},{"N":"elem","name":"m:mover","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mover ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"230","C":[{"N":"sequence","sType":"* ","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"231","sType":"*","C":[{"N":"varRef","name":"Q{}b","slot":"8","sType":"*","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"231"}]},{"N":"elem","name":"m:mpadded","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mpadded ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"231","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"width","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"0em"}]},{"N":"att","name":"lspace","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"-0.5width"}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"232","sType":"*NE","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"232","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}cy","slot":"7"}]},{"N":"axis","name":"child","nodeTest":"*NE"}]}]}]}]}]}]}]}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"236","C":[{"N":"docOrder","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}cy","slot":"7"}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}location"}]}]},{"N":"str","val":"nw"}]},{"N":"elem","name":"m:mmultiscripts","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mmultiscripts ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"237","C":[{"N":"sequence","sType":"* ","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","sType":"*","C":[{"N":"varRef","name":"Q{}b","slot":"8","sType":"*","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"59"}]},{"N":"elem","name":"m:mprescripts","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mprescripts ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","C":[{"N":"empty","sType":"0 "}]},{"N":"elem","name":"m:none","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}none ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","C":[{"N":"empty","sType":"0 "}]},{"N":"elem","name":"m:mpadded","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mpadded ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"lspace","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"-1width"}]},{"N":"att","name":"width","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"0em"}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","sType":"*NE","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"63","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}cy","slot":"7"}]},{"N":"axis","name":"child","nodeTest":"*NE"}]}]}]}]}]}]}]}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"239","C":[{"N":"docOrder","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}cy","slot":"7"}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}location"}]}]},{"N":"str","val":"s"}]},{"N":"elem","name":"m:munder","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}munder ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"240","C":[{"N":"sequence","sType":"* ","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","sType":"*","C":[{"N":"varRef","name":"Q{}b","slot":"8","sType":"*","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"66"}]},{"N":"elem","name":"m:mpadded","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mpadded ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"width","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"0em"}]},{"N":"att","name":"lspace","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"-0.5width"}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","sType":"*NE","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"68","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}cy","slot":"7"}]},{"N":"axis","name":"child","nodeTest":"*NE"}]}]}]}]}]}]}]}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"242","C":[{"N":"docOrder","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}cy","slot":"7"}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}location"}]}]},{"N":"str","val":"sw"}]},{"N":"elem","name":"m:mmultiscripts","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mmultiscripts ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"243","C":[{"N":"sequence","sType":"* ","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","sType":"*","C":[{"N":"varRef","name":"Q{}b","slot":"8","sType":"*","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"71"}]},{"N":"elem","name":"m:mprescripts","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mprescripts ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","C":[{"N":"empty","sType":"0 "}]},{"N":"elem","name":"m:mpadded","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mpadded ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"lspace","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"-1width"}]},{"N":"att","name":"width","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"0em"}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","sType":"*NE","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"74","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}cy","slot":"7"}]},{"N":"axis","name":"child","nodeTest":"*NE"}]}]}]}]}]}]},{"N":"elem","name":"m:none","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}none ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","C":[{"N":"empty","sType":"0 "}]}]}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"245","C":[{"N":"docOrder","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}cy","slot":"7"}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}location"}]}]},{"N":"str","val":"ne"}]},{"N":"elem","name":"m:msup","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}msup ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"246","C":[{"N":"sequence","sType":"* ","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","sType":"*","C":[{"N":"varRef","name":"Q{}b","slot":"8","sType":"*","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"78"}]},{"N":"elem","name":"m:mpadded","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mpadded ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"width","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"0em"}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","sType":"*NE","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"80","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}cy","slot":"7"}]},{"N":"axis","name":"child","nodeTest":"*NE"}]}]}]}]}]}]}]}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"248","C":[{"N":"docOrder","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}cy","slot":"7"}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}location"}]}]},{"N":"str","val":"se"}]},{"N":"elem","name":"m:msub","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}msub ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"249","C":[{"N":"sequence","sType":"* ","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","sType":"*","C":[{"N":"varRef","name":"Q{}b","slot":"8","sType":"*","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"83"}]},{"N":"elem","name":"m:mpadded","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mpadded ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"width","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"0em"}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","sType":"*NE","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"85","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}cy","slot":"7"}]},{"N":"axis","name":"child","nodeTest":"*NE"}]}]}]}]}]}]}]}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"251","C":[{"N":"docOrder","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}cy","slot":"7"}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}location"}]}]},{"N":"str","val":"w"}]},{"N":"sequence","sType":"* ","C":[{"N":"elem","name":"m:msup","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}msup ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"252","C":[{"N":"sequence","sType":"*NE ","C":[{"N":"elem","name":"m:mrow","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mrow ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","C":[{"N":"empty","sType":"0 "}]},{"N":"elem","name":"m:mpadded","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mpadded ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"lspace","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"-1width"}]},{"N":"att","name":"width","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"0em"}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","sType":"*NE","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"90","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}cy","slot":"7"}]},{"N":"axis","name":"child","nodeTest":"*NE"}]}]}]}]}]}]}]}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"253","sType":"*","C":[{"N":"varRef","name":"Q{}b","slot":"8","sType":"*","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"253"}]}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"255","C":[{"N":"docOrder","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}cy","slot":"7"}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}location"}]}]},{"N":"str","val":"e"}]},{"N":"sequence","sType":"* ","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"256","sType":"*","C":[{"N":"varRef","name":"Q{}b","slot":"8","sType":"*","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"256"}]},{"N":"elem","name":"m:msup","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}msup ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"257","C":[{"N":"sequence","sType":"*NE ","C":[{"N":"elem","name":"m:mrow","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mrow ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","C":[{"N":"empty","sType":"0 "}]},{"N":"elem","name":"m:mpadded","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mpadded ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"width","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"0em"}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","sType":"*NE","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"97","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}cy","slot":"7"}]},{"N":"axis","name":"child","nodeTest":"*NE"}]}]}]}]}]}]}]}]}]},{"N":"true"},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"260","sType":"*","C":[{"N":"varRef","name":"Q{}b","slot":"8","sType":"*","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"260"}]}]}]}]}]}]}]}]}]}]}]},{"N":"true"},{"N":"sequence","sType":"*NE ","C":[{"N":"forEach","sType":"*NE nQ{http://www.w3.org/1998/Math/MathML}mtd ","line":"267","C":[{"N":"filter","flags":"p","sType":"*NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"267","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"descendant","nodeTest":"*NE"}]},{"N":"gc10","op":"<=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"fn","name":"position"},{"N":"varRef","name":"Q{}offset","slot":"3"}]}]},{"N":"elem","name":"m:mtd","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtd ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","C":[{"N":"empty","sType":"0 "}]}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"268","sType":"*NE","C":[{"N":"axis","name":"child","nodeTest":"*NE","sType":"*NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"268"}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{"N":"applyT","sType":"* ","line":"275","mode":"Q{}ml","bSlot":"2","C":[{"N":"varRef","name":"Q{}m","slot":"0","sType":"*","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"275"}]}]}]},{"N":"templateRule","rank":"2","prec":"0","seq":"1","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"13","module":"mml3.xsl","expand-text":"false","match":"m:*[@dir='rtl']","prio":"10","matches":"NE nQ{http://www.w3.org/1998/Math/MathML}*","C":[{"N":"p.withPredicate","role":"match","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}*","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"p.nodeTest","test":"NE nQ{http://www.w3.org/1998/Math/MathML}*"},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"attVal","name":"Q{}dir"},{"N":"str","val":"rtl"}]}]},{"N":"applyT","sType":"* ","line":"14","mode":"Q{}rtl","role":"action","bSlot":"3","C":[{"N":"dot","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}*","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"14"}]}]},{"N":"templateRule","rank":"3","prec":"0","seq":"0","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"7","module":"mml3.xsl","expand-text":"false","match":"*","prio":"-0.5","matches":"NE","C":[{"N":"p.nodeTest","role":"match","test":"NE","sType":"1NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common "},{"N":"copy","sType":"1NE ","flags":"cin","role":"action","line":"8","C":[{"N":"sequence","sType":"* ","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"9","sType":"*NA","C":[{"N":"axis","name":"attribute","nodeTest":"*NA","sType":"*NA","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"9"}]},{"N":"applyT","sType":"* ","line":"10","mode":"#unnamed","bSlot":"0","C":[{"N":"axis","name":"child","nodeTest":"*N u[NT,NP,NC,NE]","sType":"*N u[NT,NP,NC,NE]","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"10"}]}]}]}]}]}]},{"N":"co","id":"1","binds":"1 0","C":[{"N":"mode","onNo":"TC","flags":"","patternSlots":"0","name":"Q{}rtl","prec":"","C":[{"N":"templateRule","rank":"0","prec":"0","seq":"27","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"144","module":"mml3.xsl","expand-text":"false","match":"m:mmultiscripts[not(m:mprescripts)]","prio":"3","matches":"NE nQ{http://www.w3.org/1998/Math/MathML}mmultiscripts","C":[{"N":"p.withPredicate","role":"match","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mmultiscripts","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"p.nodeTest","test":"NE nQ{http://www.w3.org/1998/Math/MathML}mmultiscripts"},{"N":"fn","name":"not","C":[{"N":"axis","name":"child","nodeTest":"*NE nQ{http://www.w3.org/1998/Math/MathML}mprescripts"}]}]},{"N":"elem","name":"m:mmultiscripts","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mmultiscripts ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","role":"action","line":"145","C":[{"N":"sequence","sType":"* ","C":[{"N":"applyT","sType":"* ","line":"146","mode":"Q{}rtl","bSlot":"0","C":[{"N":"first","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"146","C":[{"N":"axis","name":"child","nodeTest":"*NE"}]}]},{"N":"elem","name":"m:mprescripts","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mprescripts ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"147","C":[{"N":"empty","sType":"0 "}]},{"N":"forEach","sType":"* ","line":"148","C":[{"N":"sort","sType":"*NE","C":[{"N":"filter","flags":"p","sType":"*NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"148","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"arith10","op":"mod","calc":"d%d","C":[{"N":"fn","name":"position"},{"N":"int","val":"2"}]},{"N":"int","val":"0"}]}]},{"N":"sortKey","sType":"?ADI ","C":[{"N":"first","role":"select","sType":"?ADI ","C":[{"N":"fn","name":"position","sType":"1ADI","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"149"}]},{"N":"str","sType":"1AS ","val":"descending","role":"order"},{"N":"str","sType":"1AS ","val":"en","role":"lang"},{"N":"str","sType":"1AS ","val":"#default","role":"caseOrder"},{"N":"str","sType":"1AS ","val":"true","role":"stable"},{"N":"str","sType":"1AS ","val":"number","role":"dataType"}]}]},{"N":"sequence","sType":"* ","C":[{"N":"applyT","sType":"* ","line":"150","mode":"Q{}rtl","bSlot":"0","C":[{"N":"dot","sType":"1NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"150"}]},{"N":"applyT","sType":"* ","line":"151","mode":"Q{}rtl","bSlot":"0","C":[{"N":"first","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"151","C":[{"N":"axis","name":"following-sibling","nodeTest":"*NE"}]}]}]}]}]}]}]},{"N":"templateRule","rank":"1","prec":"0","seq":"26","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"128","module":"mml3.xsl","expand-text":"false","match":"m:mmultiscripts","prio":"2","matches":"NE nQ{http://www.w3.org/1998/Math/MathML}mmultiscripts","C":[{"N":"p.nodeTest","role":"match","test":"NE nQ{http://www.w3.org/1998/Math/MathML}mmultiscripts","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mmultiscripts","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common "},{"N":"elem","name":"m:mmultiscripts","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mmultiscripts ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","role":"action","line":"129","C":[{"N":"sequence","sType":"* ","C":[{"N":"applyT","sType":"* ","line":"130","mode":"Q{}rtl","bSlot":"0","C":[{"N":"first","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"130","C":[{"N":"axis","name":"child","nodeTest":"*NE"}]}]},{"N":"forEach","sType":"* ","line":"131","C":[{"N":"sort","sType":"*NE","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"131","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"slash","op":"/","C":[{"N":"axis","name":"child","nodeTest":"*NE nQ{http://www.w3.org/1998/Math/MathML}mprescripts"},{"N":"filter","flags":"p","C":[{"N":"axis","name":"following-sibling","nodeTest":"*NE"},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"arith10","op":"mod","calc":"d%d","C":[{"N":"fn","name":"position"},{"N":"int","val":"2"}]},{"N":"int","val":"1"}]}]}]}]}]},{"N":"sortKey","sType":"?ADI ","C":[{"N":"first","role":"select","sType":"?ADI ","C":[{"N":"fn","name":"position","sType":"1ADI","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"132"}]},{"N":"str","sType":"1AS ","val":"descending","role":"order"},{"N":"str","sType":"1AS ","val":"en","role":"lang"},{"N":"str","sType":"1AS ","val":"#default","role":"caseOrder"},{"N":"str","sType":"1AS ","val":"true","role":"stable"},{"N":"str","sType":"1AS ","val":"number","role":"dataType"}]}]},{"N":"sequence","sType":"* ","C":[{"N":"applyT","sType":"* ","line":"133","mode":"Q{}rtl","bSlot":"0","C":[{"N":"dot","sType":"1NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"133"}]},{"N":"applyT","sType":"* ","line":"134","mode":"Q{}rtl","bSlot":"0","C":[{"N":"first","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"134","C":[{"N":"axis","name":"following-sibling","nodeTest":"*NE"}]}]}]}]},{"N":"elem","name":"m:mprescripts","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mprescripts ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"136","C":[{"N":"empty","sType":"0 "}]},{"N":"forEach","sType":"* ","line":"137","C":[{"N":"sort","sType":"*NE","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"137","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"slash","op":"/","C":[{"N":"axis","name":"child","nodeTest":"*NE nQ{http://www.w3.org/1998/Math/MathML}mprescripts"},{"N":"fn","name":"reverse","C":[{"N":"filter","flags":"p","C":[{"N":"filter","flags":"p","C":[{"N":"axis","name":"preceding-sibling","nodeTest":"*NE"},{"N":"gc10","op":"!=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"fn","name":"position"},{"N":"fn","name":"last"}]}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"arith10","op":"mod","calc":"d%d","C":[{"N":"fn","name":"position"},{"N":"int","val":"2"}]},{"N":"int","val":"0"}]}]}]}]}]}]},{"N":"sortKey","sType":"?ADI ","C":[{"N":"first","role":"select","sType":"?ADI ","C":[{"N":"fn","name":"position","sType":"1ADI","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"138"}]},{"N":"str","sType":"1AS ","val":"descending","role":"order"},{"N":"str","sType":"1AS ","val":"en","role":"lang"},{"N":"str","sType":"1AS ","val":"#default","role":"caseOrder"},{"N":"str","sType":"1AS ","val":"true","role":"stable"},{"N":"str","sType":"1AS ","val":"number","role":"dataType"}]}]},{"N":"sequence","sType":"* ","C":[{"N":"applyT","sType":"* ","line":"139","mode":"Q{}rtl","bSlot":"0","C":[{"N":"dot","sType":"1NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"139"}]},{"N":"applyT","sType":"* ","line":"140","mode":"Q{}rtl","bSlot":"0","C":[{"N":"first","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"140","C":[{"N":"axis","name":"following-sibling","nodeTest":"*NE"}]}]}]}]}]}]}]},{"N":"templateRule","rank":"2","prec":"0","seq":"25","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"120","module":"mml3.xsl","expand-text":"false","match":"m:msubsup","prio":"2","matches":"NE nQ{http://www.w3.org/1998/Math/MathML}msubsup","C":[{"N":"p.nodeTest","role":"match","test":"NE nQ{http://www.w3.org/1998/Math/MathML}msubsup","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}msubsup","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common "},{"N":"elem","name":"m:mmultiscripts","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mmultiscripts ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","role":"action","line":"121","C":[{"N":"sequence","sType":"* ","C":[{"N":"applyT","sType":"* ","line":"122","mode":"Q{}rtl","bSlot":"0","C":[{"N":"first","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"122","C":[{"N":"axis","name":"child","nodeTest":"*NE"}]}]},{"N":"elem","name":"m:mprescripts","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mprescripts ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"123","C":[{"N":"empty","sType":"0 "}]},{"N":"applyT","sType":"* ","line":"124","mode":"Q{}rtl","bSlot":"0","C":[{"N":"subscript","flags":"p","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"124","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"int","val":"2"}]}]},{"N":"applyT","sType":"* ","line":"125","mode":"Q{}rtl","bSlot":"0","C":[{"N":"subscript","flags":"p","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"125","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"int","val":"3"}]}]}]}]}]},{"N":"templateRule","rank":"3","prec":"0","seq":"24","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"112","module":"mml3.xsl","expand-text":"false","match":"m:msub","prio":"2","matches":"NE nQ{http://www.w3.org/1998/Math/MathML}msub","C":[{"N":"p.nodeTest","role":"match","test":"NE nQ{http://www.w3.org/1998/Math/MathML}msub","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}msub","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common "},{"N":"elem","name":"m:mmultiscripts","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mmultiscripts ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","role":"action","line":"113","C":[{"N":"sequence","sType":"* ","C":[{"N":"applyT","sType":"* ","line":"114","mode":"Q{}rtl","bSlot":"0","C":[{"N":"first","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"114","C":[{"N":"axis","name":"child","nodeTest":"*NE"}]}]},{"N":"elem","name":"m:mprescripts","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mprescripts ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"115","C":[{"N":"empty","sType":"0 "}]},{"N":"applyT","sType":"* ","line":"116","mode":"Q{}rtl","bSlot":"0","C":[{"N":"subscript","flags":"p","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"116","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"int","val":"2"}]}]},{"N":"elem","name":"m:none","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}none ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"117","C":[{"N":"empty","sType":"0 "}]}]}]}]},{"N":"templateRule","rank":"4","prec":"0","seq":"23","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"104","module":"mml3.xsl","expand-text":"false","match":"m:msup","prio":"2","matches":"NE nQ{http://www.w3.org/1998/Math/MathML}msup","C":[{"N":"p.nodeTest","role":"match","test":"NE nQ{http://www.w3.org/1998/Math/MathML}msup","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}msup","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common "},{"N":"elem","name":"m:mmultiscripts","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mmultiscripts ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","role":"action","line":"105","C":[{"N":"sequence","sType":"* ","C":[{"N":"applyT","sType":"* ","line":"106","mode":"Q{}rtl","bSlot":"0","C":[{"N":"first","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"106","C":[{"N":"axis","name":"child","nodeTest":"*NE"}]}]},{"N":"elem","name":"m:mprescripts","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mprescripts ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"107","C":[{"N":"empty","sType":"0 "}]},{"N":"elem","name":"m:none","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}none ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"108","C":[{"N":"empty","sType":"0 "}]},{"N":"applyT","sType":"* ","line":"109","mode":"Q{}rtl","bSlot":"0","C":[{"N":"subscript","flags":"p","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"109","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"int","val":"2"}]}]}]}]}]},{"N":"templateRule","rank":"5","prec":"0","seq":"22","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"97","module":"mml3.xsl","expand-text":"false","match":"m:mtable|m:munder|m:mover|m:munderover","prio":"2","matches":"NE u[NE u[NE u[NE nQ{http://www.w3.org/1998/Math/MathML}mtable,NE nQ{http://www.w3.org/1998/Math/MathML}munder],NE nQ{http://www.w3.org/1998/Math/MathML}mover],NE nQ{http://www.w3.org/1998/Math/MathML}munderover]","C":[{"N":"p.venn","role":"match","op":"union","sType":"1NE u[NE u[NE u[NE nQ{http://www.w3.org/1998/Math/MathML}mtable,NE nQ{http://www.w3.org/1998/Math/MathML}munder],NE nQ{http://www.w3.org/1998/Math/MathML}mover],NE nQ{http://www.w3.org/1998/Math/MathML}munderover]","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"p.venn","op":"union","C":[{"N":"p.venn","op":"union","C":[{"N":"p.nodeTest","test":"NE nQ{http://www.w3.org/1998/Math/MathML}mtable"},{"N":"p.nodeTest","test":"NE nQ{http://www.w3.org/1998/Math/MathML}munder"}]},{"N":"p.nodeTest","test":"NE nQ{http://www.w3.org/1998/Math/MathML}mover"}]},{"N":"p.nodeTest","test":"NE nQ{http://www.w3.org/1998/Math/MathML}munderover"}]},{"N":"copy","sType":"1NE u[1NE u[1NE u[1NE nQ{http://www.w3.org/1998/Math/MathML}mtable ,1NE nQ{http://www.w3.org/1998/Math/MathML}munder ] ,1NE nQ{http://www.w3.org/1998/Math/MathML}mover ] ,1NE nQ{http://www.w3.org/1998/Math/MathML}munderover ] ","flags":"cin","role":"action","line":"98","C":[{"N":"sequence","sType":"* ","C":[{"N":"applyT","sType":"* ","line":"99","mode":"Q{}rtl","bSlot":"0","C":[{"N":"axis","name":"attribute","nodeTest":"*NA","sType":"*NA","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"99"}]},{"N":"applyT","sType":"* ","line":"100","mode":"Q{}rtl","bSlot":"0","C":[{"N":"axis","name":"child","nodeTest":"*N u[NT,NP,NC,NE]","sType":"*N u[NT,NP,NC,NE]","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"100"}]}]}]}]},{"N":"templateRule","rank":"6","prec":"0","seq":"53","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"664","module":"mml3.xsl","expand-text":"false","match":"m:menclose[@notation='madruwb']","prio":"0.5","matches":"NE nQ{http://www.w3.org/1998/Math/MathML}menclose","C":[{"N":"p.withPredicate","role":"match","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}menclose","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"p.nodeTest","test":"NE nQ{http://www.w3.org/1998/Math/MathML}menclose"},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"attVal","name":"Q{}notation"},{"N":"str","val":"madruwb"}]}]},{"N":"elem","name":"m:menclose","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}menclose ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","role":"action","line":"665","C":[{"N":"sequence","sType":"* ","C":[{"N":"att","name":"notation","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"bottom right"}]},{"N":"applyT","sType":"* ","line":"666","mode":"Q{}rtl","bSlot":"0","C":[{"N":"axis","name":"child","nodeTest":"*N u[NT,NP,NC,NE]","sType":"*N u[NT,NP,NC,NE]","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"666"}]}]}]}]},{"N":"templateRule","rank":"7","prec":"0","seq":"36","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"163","module":"mml3.xsl","expand-text":"false","match":"@notation[.='radical']","prio":"0.5","matches":"NA nQ{}notation","C":[{"N":"p.withPredicate","role":"match","sType":"1NA nQ{}notation","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"p.nodeTest","test":"NA nQ{}notation"},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"atomSing","diag":"1|0||gc","card":"?","C":[{"N":"dot"}]},{"N":"str","val":"radical"}]}]},{"N":"att","name":"notation","sType":"1NA ","role":"action","line":"164","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"top right"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":""}]}]}]},{"N":"templateRule","rank":"8","prec":"0","seq":"35","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"162","module":"mml3.xsl","expand-text":"false","match":"text()[.='∋']","prio":"0.5","matches":"NT","C":[{"N":"p.withPredicate","role":"match","sType":"1NT","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"p.nodeTest","test":"NT"},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"atomSing","diag":"1|0||gc","card":"?","C":[{"N":"dot"}]},{"N":"str","val":"∋"}]}]},{"N":"valueOf","sType":"1NT ","role":"action","C":[{"N":"str","sType":"1AS ","val":"∈"}]}]},{"N":"templateRule","rank":"9","prec":"0","seq":"34","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"161","module":"mml3.xsl","expand-text":"false","match":"text()[.='∈']","prio":"0.5","matches":"NT","C":[{"N":"p.withPredicate","role":"match","sType":"1NT","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"p.nodeTest","test":"NT"},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"atomSing","diag":"1|0||gc","card":"?","C":[{"N":"dot"}]},{"N":"str","val":"∈"}]}]},{"N":"valueOf","sType":"1NT ","role":"action","C":[{"N":"str","sType":"1AS ","val":"∋"}]}]},{"N":"templateRule","rank":"10","prec":"0","seq":"33","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"160","module":"mml3.xsl","expand-text":"false","match":"text()[.='>']","prio":"0.5","matches":"NT","C":[{"N":"p.withPredicate","role":"match","sType":"1NT","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"p.nodeTest","test":"NT"},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"atomSing","diag":"1|0||gc","card":"?","C":[{"N":"dot"}]},{"N":"str","val":">"}]}]},{"N":"valueOf","sType":"1NT ","role":"action","C":[{"N":"str","sType":"1AS ","val":"<"}]}]},{"N":"templateRule","rank":"11","prec":"0","seq":"32","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"159","module":"mml3.xsl","expand-text":"false","match":"text()[.='<']","prio":"0.5","matches":"NT","C":[{"N":"p.withPredicate","role":"match","sType":"1NT","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"p.nodeTest","test":"NT"},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"atomSing","diag":"1|0||gc","card":"?","C":[{"N":"dot"}]},{"N":"str","val":"<"}]}]},{"N":"valueOf","sType":"1NT ","role":"action","C":[{"N":"str","sType":"1AS ","val":">"}]}]},{"N":"templateRule","rank":"12","prec":"0","seq":"31","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"158","module":"mml3.xsl","expand-text":"false","match":"text()[.='}']","prio":"0.5","matches":"NT","C":[{"N":"p.withPredicate","role":"match","sType":"1NT","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"p.nodeTest","test":"NT"},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"atomSing","diag":"1|0||gc","card":"?","C":[{"N":"dot"}]},{"N":"str","val":"}"}]}]},{"N":"valueOf","sType":"1NT ","role":"action","C":[{"N":"str","sType":"1AS ","val":"{"}]}]},{"N":"templateRule","rank":"13","prec":"0","seq":"30","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"157","module":"mml3.xsl","expand-text":"false","match":"text()[.='{']","prio":"0.5","matches":"NT","C":[{"N":"p.withPredicate","role":"match","sType":"1NT","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"p.nodeTest","test":"NT"},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"atomSing","diag":"1|0||gc","card":"?","C":[{"N":"dot"}]},{"N":"str","val":"{"}]}]},{"N":"valueOf","sType":"1NT ","role":"action","C":[{"N":"str","sType":"1AS ","val":"}"}]}]},{"N":"templateRule","rank":"14","prec":"0","seq":"29","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"156","module":"mml3.xsl","expand-text":"false","match":"text()[.=')']","prio":"0.5","matches":"NT","C":[{"N":"p.withPredicate","role":"match","sType":"1NT","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"p.nodeTest","test":"NT"},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"atomSing","diag":"1|0||gc","card":"?","C":[{"N":"dot"}]},{"N":"str","val":")"}]}]},{"N":"valueOf","sType":"1NT ","role":"action","C":[{"N":"str","sType":"1AS ","val":"("}]}]},{"N":"templateRule","rank":"15","prec":"0","seq":"28","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"155","module":"mml3.xsl","expand-text":"false","match":"text()[.='(']","prio":"0.5","matches":"NT","C":[{"N":"p.withPredicate","role":"match","sType":"1NT","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"p.nodeTest","test":"NT"},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"atomSing","diag":"1|0||gc","card":"?","C":[{"N":"dot"}]},{"N":"str","val":"("}]}]},{"N":"valueOf","sType":"1NT ","role":"action","C":[{"N":"str","sType":"1AS ","val":")"}]}]},{"N":"templateRule","rank":"16","prec":"0","seq":"18","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"72","module":"mml3.xsl","expand-text":"false","match":"m:mfrac[@bevelled='true']","prio":"0.5","matches":"NE nQ{http://www.w3.org/1998/Math/MathML}mfrac","C":[{"N":"p.withPredicate","role":"match","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mfrac","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"p.nodeTest","test":"NE nQ{http://www.w3.org/1998/Math/MathML}mfrac"},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"attVal","name":"Q{}bevelled"},{"N":"str","val":"true"}]}]},{"N":"elem","name":"m:mrow","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mrow ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","role":"action","line":"73","C":[{"N":"sequence","sType":"*NE ","C":[{"N":"elem","name":"m:msub","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}msub ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"74","C":[{"N":"sequence","sType":"* ","C":[{"N":"elem","name":"m:mi","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mi ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","C":[{"N":"empty","sType":"0 "}]},{"N":"applyT","sType":"* ","mode":"Q{}rtl","bSlot":"0","C":[{"N":"subscript","flags":"p","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"5","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"int","val":"2"}]}]}]}]},{"N":"elem","name":"m:mo","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mo ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"75","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\\"}]}]},{"N":"elem","name":"m:msup","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}msup ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"76","C":[{"N":"sequence","sType":"* ","C":[{"N":"elem","name":"m:mi","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mi ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","C":[{"N":"empty","sType":"0 "}]},{"N":"applyT","sType":"* ","mode":"Q{}rtl","bSlot":"0","C":[{"N":"first","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"9","C":[{"N":"axis","name":"child","nodeTest":"*NE"}]}]}]}]}]}]}]},{"N":"templateRule","rank":"17","prec":"0","seq":"17","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"69","module":"mml3.xsl","expand-text":"false","match":"@close[.='}']","prio":"0.5","matches":"NA nQ{}close","C":[{"N":"p.withPredicate","role":"match","sType":"1NA nQ{}close","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"p.nodeTest","test":"NA nQ{}close"},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"atomSing","diag":"1|0||gc","card":"?","C":[{"N":"dot"}]},{"N":"str","val":"}"}]}]},{"N":"att","name":"open","sType":"1NA ","role":"action","line":"70","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"{"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":""}]}]}]},{"N":"templateRule","rank":"18","prec":"0","seq":"16","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"66","module":"mml3.xsl","expand-text":"false","match":"@close[.='{']","prio":"0.5","matches":"NA nQ{}close","C":[{"N":"p.withPredicate","role":"match","sType":"1NA nQ{}close","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"p.nodeTest","test":"NA nQ{}close"},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"atomSing","diag":"1|0||gc","card":"?","C":[{"N":"dot"}]},{"N":"str","val":"{"}]}]},{"N":"att","name":"open","sType":"1NA ","role":"action","line":"67","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"}"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":""}]}]}]},{"N":"templateRule","rank":"19","prec":"0","seq":"15","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"63","module":"mml3.xsl","expand-text":"false","match":"@close[.=']']","prio":"0.5","matches":"NA nQ{}close","C":[{"N":"p.withPredicate","role":"match","sType":"1NA nQ{}close","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"p.nodeTest","test":"NA nQ{}close"},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"atomSing","diag":"1|0||gc","card":"?","C":[{"N":"dot"}]},{"N":"str","val":"]"}]}]},{"N":"att","name":"open","sType":"1NA ","role":"action","line":"64","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"["}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":""}]}]}]},{"N":"templateRule","rank":"20","prec":"0","seq":"14","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"60","module":"mml3.xsl","expand-text":"false","match":"@close[.='[']","prio":"0.5","matches":"NA nQ{}close","C":[{"N":"p.withPredicate","role":"match","sType":"1NA nQ{}close","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"p.nodeTest","test":"NA nQ{}close"},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"atomSing","diag":"1|0||gc","card":"?","C":[{"N":"dot"}]},{"N":"str","val":"["}]}]},{"N":"att","name":"open","sType":"1NA ","role":"action","line":"61","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"]"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":""}]}]}]},{"N":"templateRule","rank":"21","prec":"0","seq":"13","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"57","module":"mml3.xsl","expand-text":"false","match":"@close[.=')']","prio":"0.5","matches":"NA nQ{}close","C":[{"N":"p.withPredicate","role":"match","sType":"1NA nQ{}close","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"p.nodeTest","test":"NA nQ{}close"},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"atomSing","diag":"1|0||gc","card":"?","C":[{"N":"dot"}]},{"N":"str","val":")"}]}]},{"N":"att","name":"open","sType":"1NA ","role":"action","line":"58","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"("}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":""}]}]}]},{"N":"templateRule","rank":"22","prec":"0","seq":"12","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"54","module":"mml3.xsl","expand-text":"false","match":"@close[.='(']","prio":"0.5","matches":"NA nQ{}close","C":[{"N":"p.withPredicate","role":"match","sType":"1NA nQ{}close","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"p.nodeTest","test":"NA nQ{}close"},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"atomSing","diag":"1|0||gc","card":"?","C":[{"N":"dot"}]},{"N":"str","val":"("}]}]},{"N":"att","name":"open","sType":"1NA ","role":"action","line":"55","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":")"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":""}]}]}]},{"N":"templateRule","rank":"23","prec":"0","seq":"10","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"48","module":"mml3.xsl","expand-text":"false","match":"@open[.='}']","prio":"0.5","matches":"NA nQ{}open","C":[{"N":"p.withPredicate","role":"match","sType":"1NA nQ{}open","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"p.nodeTest","test":"NA nQ{}open"},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"atomSing","diag":"1|0||gc","card":"?","C":[{"N":"dot"}]},{"N":"str","val":"}"}]}]},{"N":"att","name":"close","sType":"1NA ","role":"action","line":"49","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"{"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":""}]}]}]},{"N":"templateRule","rank":"24","prec":"0","seq":"9","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"45","module":"mml3.xsl","expand-text":"false","match":"@open[.='{']","prio":"0.5","matches":"NA nQ{}open","C":[{"N":"p.withPredicate","role":"match","sType":"1NA nQ{}open","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"p.nodeTest","test":"NA nQ{}open"},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"atomSing","diag":"1|0||gc","card":"?","C":[{"N":"dot"}]},{"N":"str","val":"{"}]}]},{"N":"att","name":"close","sType":"1NA ","role":"action","line":"46","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"}"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":""}]}]}]},{"N":"templateRule","rank":"25","prec":"0","seq":"8","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"42","module":"mml3.xsl","expand-text":"false","match":"@open[.=']']","prio":"0.5","matches":"NA nQ{}open","C":[{"N":"p.withPredicate","role":"match","sType":"1NA nQ{}open","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"p.nodeTest","test":"NA nQ{}open"},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"atomSing","diag":"1|0||gc","card":"?","C":[{"N":"dot"}]},{"N":"str","val":"]"}]}]},{"N":"att","name":"close","sType":"1NA ","role":"action","line":"43","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"["}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":""}]}]}]},{"N":"templateRule","rank":"26","prec":"0","seq":"7","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"39","module":"mml3.xsl","expand-text":"false","match":"@open[.='[']","prio":"0.5","matches":"NA nQ{}open","C":[{"N":"p.withPredicate","role":"match","sType":"1NA nQ{}open","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"p.nodeTest","test":"NA nQ{}open"},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"atomSing","diag":"1|0||gc","card":"?","C":[{"N":"dot"}]},{"N":"str","val":"["}]}]},{"N":"att","name":"close","sType":"1NA ","role":"action","line":"40","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"]"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":""}]}]}]},{"N":"templateRule","rank":"27","prec":"0","seq":"6","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"36","module":"mml3.xsl","expand-text":"false","match":"@open[.=')']","prio":"0.5","matches":"NA nQ{}open","C":[{"N":"p.withPredicate","role":"match","sType":"1NA nQ{}open","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"p.nodeTest","test":"NA nQ{}open"},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"atomSing","diag":"1|0||gc","card":"?","C":[{"N":"dot"}]},{"N":"str","val":")"}]}]},{"N":"att","name":"close","sType":"1NA ","role":"action","line":"37","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"("}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":""}]}]}]},{"N":"templateRule","rank":"28","prec":"0","seq":"5","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"33","module":"mml3.xsl","expand-text":"false","match":"@open[.='(']","prio":"0.5","matches":"NA nQ{}open","C":[{"N":"p.withPredicate","role":"match","sType":"1NA nQ{}open","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"p.nodeTest","test":"NA nQ{}open"},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"atomSing","diag":"1|0||gc","card":"?","C":[{"N":"dot"}]},{"N":"str","val":"("}]}]},{"N":"att","name":"close","sType":"1NA ","role":"action","line":"34","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":")"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":""}]}]}]},{"N":"templateRule","rank":"29","prec":"0","seq":"37","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"166","module":"mml3.xsl","expand-text":"false","match":"m:mlongdiv|m:mstack","prio":"0","matches":"NE nQ{http://www.w3.org/1998/Math/MathML}mlongdiv","C":[{"N":"p.nodeTest","role":"match","test":"NE nQ{http://www.w3.org/1998/Math/MathML}mlongdiv","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mlongdiv"},{"N":"elem","name":"m:mrow","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mrow ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","role":"action","line":"167","C":[{"N":"sequence","sType":"* ","C":[{"N":"att","name":"dir","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"ltr"}]},{"N":"applyT","sType":"* ","line":"168","mode":"#unnamed","bSlot":"1","C":[{"N":"dot","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mlongdiv","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"168"}]}]}]}]},{"N":"templateRule","rank":"30","prec":"0","seq":"37","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"166","module":"mml3.xsl","expand-text":"false","match":"m:mlongdiv|m:mstack","prio":"0","matches":"NE nQ{http://www.w3.org/1998/Math/MathML}mstack","C":[{"N":"p.nodeTest","role":"match","test":"NE nQ{http://www.w3.org/1998/Math/MathML}mstack","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mstack"},{"N":"elem","name":"m:mrow","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mrow ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","role":"action","line":"167","C":[{"N":"sequence","sType":"* ","C":[{"N":"att","name":"dir","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"ltr"}]},{"N":"applyT","sType":"* ","line":"168","mode":"#unnamed","bSlot":"1","C":[{"N":"dot","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mstack","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"168"}]}]}]}]},{"N":"templateRule","rank":"31","prec":"0","seq":"21","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"92","module":"mml3.xsl","expand-text":"false","match":"m:msqrt","prio":"0","matches":"NE nQ{http://www.w3.org/1998/Math/MathML}msqrt","C":[{"N":"p.nodeTest","role":"match","test":"NE nQ{http://www.w3.org/1998/Math/MathML}msqrt","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}msqrt","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common "},{"N":"elem","name":"m:menclose","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}menclose ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","role":"action","line":"93","C":[{"N":"sequence","sType":"* ","C":[{"N":"att","name":"notation","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"top right"}]},{"N":"applyT","sType":"* ","line":"94","mode":"Q{}rtl","bSlot":"0","C":[{"N":"docOrder","sType":"*N u[NA,NE]","role":"select","line":"94","C":[{"N":"union","op":"|","sType":"*N u[NA,NE]","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"axis","name":"attribute","nodeTest":"*NA"},{"N":"first","C":[{"N":"axis","name":"child","nodeTest":"*NE"}]}]}]}]}]}]}]},{"N":"templateRule","rank":"32","prec":"0","seq":"20","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"84","module":"mml3.xsl","expand-text":"false","match":"m:mroot","prio":"0","matches":"NE nQ{http://www.w3.org/1998/Math/MathML}mroot","C":[{"N":"p.nodeTest","role":"match","test":"NE nQ{http://www.w3.org/1998/Math/MathML}mroot","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mroot","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common "},{"N":"elem","name":"m:msup","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}msup ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","role":"action","line":"85","C":[{"N":"sequence","sType":"* ","C":[{"N":"elem","name":"m:menclose","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}menclose ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"86","C":[{"N":"sequence","sType":"* ","C":[{"N":"att","name":"notation","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"top right"}]},{"N":"applyT","sType":"* ","line":"87","mode":"Q{}rtl","bSlot":"0","C":[{"N":"docOrder","sType":"*N u[NA,NE]","role":"select","line":"87","C":[{"N":"union","op":"|","sType":"*N u[NA,NE]","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"axis","name":"attribute","nodeTest":"*NA"},{"N":"first","C":[{"N":"axis","name":"child","nodeTest":"*NE"}]}]}]}]}]}]},{"N":"applyT","sType":"* ","line":"89","mode":"Q{}rtl","bSlot":"0","C":[{"N":"subscript","flags":"p","sType":"?NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"89","C":[{"N":"axis","name":"child","nodeTest":"*NE"},{"N":"int","val":"2"}]}]}]}]}]},{"N":"templateRule","rank":"33","prec":"0","seq":"19","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"79","module":"mml3.xsl","expand-text":"false","match":"m:mfrac","prio":"0","matches":"NE nQ{http://www.w3.org/1998/Math/MathML}mfrac","C":[{"N":"p.nodeTest","role":"match","test":"NE nQ{http://www.w3.org/1998/Math/MathML}mfrac","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mfrac","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common "},{"N":"copy","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mfrac ","flags":"cin","role":"action","line":"80","C":[{"N":"applyT","sType":"* ","line":"81","mode":"Q{}rtl","bSlot":"0","C":[{"N":"docOrder","sType":"*N u[NA,NE]","role":"select","line":"81","C":[{"N":"union","op":"|","sType":"*N u[NA,NE]","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"axis","name":"attribute","nodeTest":"*NA"},{"N":"axis","name":"child","nodeTest":"*NE"}]}]}]}]}]},{"N":"templateRule","rank":"34","prec":"0","seq":"11","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"51","module":"mml3.xsl","expand-text":"false","match":"@close","prio":"0","matches":"NA nQ{}close","C":[{"N":"p.nodeTest","role":"match","test":"NA nQ{}close","sType":"1NA nQ{}close","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common "},{"N":"att","name":"open","sType":"1NA ","role":"action","line":"52","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","flags":"l","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"dot","sType":"1NA nQ{}close","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"3"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":""}]}]}]},{"N":"templateRule","rank":"35","prec":"0","seq":"4","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"30","module":"mml3.xsl","expand-text":"false","match":"@open","prio":"0","matches":"NA nQ{}open","C":[{"N":"p.nodeTest","role":"match","test":"NA nQ{}open","sType":"1NA nQ{}open","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common "},{"N":"att","name":"close","sType":"1NA ","role":"action","line":"31","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","flags":"l","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"dot","sType":"1NA nQ{}open","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"3"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":""}]}]}]},{"N":"templateRule","rank":"36","prec":"0","seq":"3","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"20","module":"mml3.xsl","expand-text":"false","match":"*","prio":"-0.5","matches":"NE","C":[{"N":"p.nodeTest","role":"match","test":"NE","sType":"1NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common "},{"N":"copy","sType":"1NE ","flags":"cin","role":"action","line":"21","C":[{"N":"sequence","sType":"* ","C":[{"N":"applyT","sType":"* ","line":"22","mode":"Q{}rtl","bSlot":"0","C":[{"N":"axis","name":"attribute","nodeTest":"*NA","sType":"*NA","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"22"}]},{"N":"forEach","sType":"* ","line":"23","C":[{"N":"sort","sType":"*N u[NT,NP,NC,NE]","C":[{"N":"axis","name":"child","nodeTest":"*N u[NT,NP,NC,NE]","sType":"*N u[NT,NP,NC,NE]","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"23"},{"N":"sortKey","sType":"?ADI ","C":[{"N":"first","role":"select","sType":"?ADI ","C":[{"N":"fn","name":"position","sType":"1ADI","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"24"}]},{"N":"str","sType":"1AS ","val":"descending","role":"order"},{"N":"str","sType":"1AS ","val":"en","role":"lang"},{"N":"str","sType":"1AS ","val":"#default","role":"caseOrder"},{"N":"str","sType":"1AS ","val":"true","role":"stable"},{"N":"str","sType":"1AS ","val":"number","role":"dataType"}]}]},{"N":"sequence","sType":"* ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":" "}]},{"N":"applyT","sType":"* ","line":"26","mode":"Q{}rtl","bSlot":"0","C":[{"N":"dot","sType":"1N u[N u[N u[NT,NP],NC],NE]","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"26"}]}]}]}]}]}]},{"N":"templateRule","rank":"37","prec":"0","seq":"2","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"16","module":"mml3.xsl","expand-text":"false","match":"@*","prio":"-0.5","matches":"NA","C":[{"N":"p.nodeTest","role":"match","test":"NA","sType":"1NA","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common "},{"N":"sequence","role":"action","sType":"*NA ","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"17","sType":"1NA","C":[{"N":"dot","sType":"1NA","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"17"}]},{"N":"att","name":"dir","sType":"1NA ","line":"18","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"ltr"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":""}]}]}]}]}]}]},{"N":"co","id":"2","binds":"2","C":[{"N":"mode","onNo":"TC","flags":"","patternSlots":"0","name":"Q{}ml","prec":"","C":[{"N":"templateRule","rank":"0","prec":"0","seq":"42","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"313","module":"mml3.xsl","expand-text":"false","match":"m:mtr[not(preceding-sibling::*)][@class='msline']","prio":"3","matches":"NE nQ{http://www.w3.org/1998/Math/MathML}mtr","C":[{"N":"p.withPredicate","role":"match","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtr","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"p.withPredicate","C":[{"N":"p.nodeTest","test":"NE nQ{http://www.w3.org/1998/Math/MathML}mtr"},{"N":"fn","name":"not","C":[{"N":"fn","name":"reverse","C":[{"N":"axis","name":"preceding-sibling","nodeTest":"*NE"}]}]}]},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"attVal","name":"Q{}class"},{"N":"str","val":"msline"}]}]},{"N":"elem","name":"m:mtr","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtr ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","role":"action","line":"314","C":[{"N":"sequence","sType":"*N ","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"315","sType":"*NA","C":[{"N":"axis","name":"attribute","nodeTest":"*NA","sType":"*NA","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"315"}]},{"N":"forEach","sType":"*NE nQ{http://www.w3.org/1998/Math/MathML}mtd ","line":"316","C":[{"N":"axis","name":"child","nodeTest":"*NE nQ{http://www.w3.org/1998/Math/MathML}mtd","sType":"*NE nQ{http://www.w3.org/1998/Math/MathML}mtd","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"316"},{"N":"elem","name":"m:mtd","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtd ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"317","C":[{"N":"sequence","sType":"* ","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"318","sType":"*NA","C":[{"N":"axis","name":"attribute","nodeTest":"*NA","sType":"*NA","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"318"}]},{"N":"choose","sType":"? ","line":"319","C":[{"N":"axis","name":"child","nodeTest":"*NE nQ{http://www.w3.org/1998/Math/MathML}mpadded","sType":"*NE nQ{http://www.w3.org/1998/Math/MathML}mpadded","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"319"},{"N":"elem","name":"m:menclose","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}menclose ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"320","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"notation","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"bottom"}]},{"N":"elem","name":"m:mpadded","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mpadded ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"321","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"depth","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":".1em"}]},{"N":"att","name":"height","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"1em"}]},{"N":"att","name":"width","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":".5em"}]},{"N":"elem","name":"m:mspace","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mspace ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"322","C":[{"N":"att","name":"width","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":".2em"}]}]}]}]}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]}]}]}]}]}]}]},{"N":"templateRule","rank":"1","prec":"0","seq":"43","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"330","module":"mml3.xsl","expand-text":"false","match":"m:mtr[@class='msline']","prio":"2","matches":"NE nQ{http://www.w3.org/1998/Math/MathML}mtr","C":[{"N":"p.withPredicate","role":"match","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtr","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"p.nodeTest","test":"NE nQ{http://www.w3.org/1998/Math/MathML}mtr"},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"attVal","name":"Q{}class"},{"N":"str","val":"msline"}]}]},{"N":"empty","sType":"0 ","role":"action"}]},{"N":"templateRule","rank":"2","prec":"0","seq":"41","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"286","module":"mml3.xsl","expand-text":"false","match":"m:mtr[following-sibling::*[1][@class='msline']]","prio":"0.5","matches":"NE nQ{http://www.w3.org/1998/Math/MathML}mtr","C":[{"N":"p.withPredicate","role":"match","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtr","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"p.nodeTest","test":"NE nQ{http://www.w3.org/1998/Math/MathML}mtr"},{"N":"filter","C":[{"N":"first","C":[{"N":"axis","name":"following-sibling","nodeTest":"*NE"}]},{"N":"gc","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"attVal","name":"Q{}class"},{"N":"str","val":"msline"}]}]}]},{"N":"elem","name":"m:mtr","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtr ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","role":"action","line":"287","C":[{"N":"sequence","sType":"*N ","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"288","sType":"*NA","C":[{"N":"axis","name":"attribute","nodeTest":"*NA","sType":"*NA","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"288"}]},{"N":"let","var":"Q{}m","slot":"0","sType":"*NE ","line":"289","C":[{"N":"docOrder","sType":"*NE nQ{http://www.w3.org/1998/Math/MathML}mtd","role":"select","line":"289","C":[{"N":"slash","op":"/","sType":"*NE nQ{http://www.w3.org/1998/Math/MathML}mtd","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"first","C":[{"N":"axis","name":"following-sibling","nodeTest":"*NE"}]},{"N":"axis","name":"child","nodeTest":"*NE nQ{http://www.w3.org/1998/Math/MathML}mtd"}]}]},{"N":"forEach","sType":"*NE ","line":"290","C":[{"N":"axis","name":"child","nodeTest":"*NE nQ{http://www.w3.org/1998/Math/MathML}mtd","sType":"*NE nQ{http://www.w3.org/1998/Math/MathML}mtd","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"290"},{"N":"let","var":"Q{}p","slot":"1","sType":"*NE ","line":"291","C":[{"N":"fn","name":"position","sType":"1ADI","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"291"},{"N":"elem","name":"m:mtd","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtd ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"292","C":[{"N":"sequence","sType":"*N ","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"293","sType":"*NA","C":[{"N":"axis","name":"attribute","nodeTest":"*NA","sType":"*NA","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"293"}]},{"N":"choose","sType":"*NE ","type":"item()*","line":"294","C":[{"N":"docOrder","sType":"*NE nQ{http://www.w3.org/1998/Math/MathML}mpadded","line":"295","C":[{"N":"docOrder","sType":"*NE nQ{http://www.w3.org/1998/Math/MathML}mpadded","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"filter","flags":"i","C":[{"N":"varRef","name":"Q{}m","slot":"0"},{"N":"varRef","name":"Q{}p","slot":"1"}]}]},{"N":"axis","name":"child","nodeTest":"*NE nQ{http://www.w3.org/1998/Math/MathML}mpadded"}]}]}]},{"N":"elem","name":"m:mpadded","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mpadded ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"296","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"depth","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"+.2em"}]},{"N":"elem","name":"m:menclose","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}menclose ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"297","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"notation","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"bottom"}]},{"N":"elem","name":"m:mpadded","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mpadded ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"298","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"depth","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":".1em"}]},{"N":"att","name":"height","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":".8em"}]},{"N":"att","name":"width","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":".8em"}]},{"N":"elem","name":"m:mspace","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mspace ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"299","C":[{"N":"att","name":"width","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":".15em"}]}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"300","sType":"*NE","C":[{"N":"axis","name":"child","nodeTest":"*NE","sType":"*NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"300"}]}]}]}]}]}]}]},{"N":"true"},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"306","sType":"*NE","C":[{"N":"axis","name":"child","nodeTest":"*NE","sType":"*NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"306"}]}]}]}]}]}]}]}]}]}]},{"N":"templateRule","rank":"3","prec":"0","seq":"39","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"277","module":"mml3.xsl","expand-text":"false","match":"m:none","prio":"0","matches":"NE nQ{http://www.w3.org/1998/Math/MathML}none","C":[{"N":"p.nodeTest","role":"match","test":"NE nQ{http://www.w3.org/1998/Math/MathML}none","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}none","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common "},{"N":"elem","name":"m:mrow","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mrow ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","role":"action","line":"278","C":[{"N":"empty","sType":"0 "}]}]},{"N":"templateRule","rank":"4","prec":"0","seq":"40","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"280","module":"mml3.xsl","expand-text":"false","match":"*","prio":"-0.5","matches":"NE","C":[{"N":"p.nodeTest","role":"match","test":"NE","sType":"1NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common "},{"N":"copy","sType":"1NE ","flags":"cin","role":"action","line":"281","C":[{"N":"sequence","sType":"* ","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"282","sType":"*NA","C":[{"N":"axis","name":"attribute","nodeTest":"*NA","sType":"*NA","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"282"}]},{"N":"applyT","sType":"* ","line":"283","mode":"Q{}ml","bSlot":"0","C":[{"N":"axis","name":"child","nodeTest":"*N u[NT,NP,NC,NE]","sType":"*N u[NT,NP,NC,NE]","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"283"}]}]}]}]}]}]},{"N":"co","id":"3","binds":"4 3 0","C":[{"N":"mode","onNo":"TC","flags":"","patternSlots":"0","name":"Q{}mstack1","prec":"","C":[{"N":"templateRule","rank":"0","prec":"0","seq":"49","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"481","module":"mml3.xsl","expand-text":"false","match":"m:mscarries","prio":"0","matches":"NE nQ{http://www.w3.org/1998/Math/MathML}mscarries","C":[{"N":"p.nodeTest","role":"match","test":"NE nQ{http://www.w3.org/1998/Math/MathML}mscarries","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mscarries","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common "},{"N":"sequence","role":"action","sType":"* ","C":[{"N":"param","name":"Q{}p","slot":"0","sType":"* ","as":"* ","flags":"","line":"482","C":[{"N":"str","sType":"1AS ","val":"","role":"select"},{"N":"supplied","role":"conversion","slot":"0","sType":"* "}]},{"N":"let","var":"Q{}align1","slot":"1","sType":"*NE ","line":"483","C":[{"N":"docOrder","sType":"*NA nQ{}stackalign","role":"select","line":"483","C":[{"N":"slash","op":"/","sType":"*NA nQ{}stackalign","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"fn","name":"reverse","C":[{"N":"first","C":[{"N":"axis","name":"ancestor","nodeTest":"*NE nQ{http://www.w3.org/1998/Math/MathML}mstack"}]}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}stackalign"}]}]},{"N":"let","var":"Q{}l1","slot":"2","sType":"*NE ","line":"484","C":[{"N":"doc","sType":"1ND ","base":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","role":"select","C":[{"N":"choose","sType":"?NT ","type":"item()*","line":"485","C":[{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"486","C":[{"N":"fn","name":"string","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}align1","slot":"1"}]}]},{"N":"str","val":"left"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"0"}]},{"N":"true"},{"N":"valueOf","flags":"l","sType":"1NT ","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"fn","sType":"1ADI","name":"count","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"8","C":[{"N":"axis","name":"child","nodeTest":"*NE"}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]},{"N":"elem","name":"m:mtr","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtr ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"490","C":[{"N":"sequence","sType":"* ","C":[{"N":"att","name":"class","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"mscarries"}]},{"N":"att","name":"l","nsuri":"","sType":"1NA ","C":[{"N":"fn","name":"string-join","sType":"1AS ","C":[{"N":"first","C":[{"N":"convert","type":"AS*","from":"AZ","to":"AS","C":[{"N":"data","C":[{"N":"mergeAdj","sType":"?AO","C":[{"N":"arith10","op":"+","calc":"d+d","sType":"?AO","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"490","C":[{"N":"arith10","op":"+","calc":"d+d","C":[{"N":"atomSing","diag":"1|0||arith","card":"?","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}p","slot":"0"}]}]},{"N":"atomSing","diag":"1|1||arith","card":"?","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}l1","slot":"2"}]}]}]},{"N":"fn","name":"sum","C":[{"N":"attVal","name":"Q{}position"}]}]}]}]}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"applyT","sType":"* ","line":"491","mode":"Q{}msc","bSlot":"0","C":[{"N":"axis","name":"child","nodeTest":"*NE","sType":"*NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"491"}]}]}]}]}]}]}]},{"N":"templateRule","rank":"1","prec":"0","seq":"48","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"428","module":"mml3.xsl","expand-text":"false","match":"m:msline","prio":"0","matches":"NE nQ{http://www.w3.org/1998/Math/MathML}msline","C":[{"N":"p.nodeTest","role":"match","test":"NE nQ{http://www.w3.org/1998/Math/MathML}msline","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}msline","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common "},{"N":"sequence","role":"action","sType":"* ","C":[{"N":"param","name":"Q{}p","slot":"0","sType":"* ","as":"* ","flags":"","line":"429","C":[{"N":"str","sType":"1AS ","val":"","role":"select"},{"N":"supplied","role":"conversion","slot":"0","sType":"* "}]},{"N":"let","var":"Q{}align1","slot":"1","sType":"*NE ","line":"430","C":[{"N":"docOrder","sType":"*NA nQ{}stackalign","role":"select","line":"430","C":[{"N":"slash","op":"/","sType":"*NA nQ{}stackalign","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"fn","name":"reverse","C":[{"N":"first","C":[{"N":"axis","name":"ancestor","nodeTest":"*NE nQ{http://www.w3.org/1998/Math/MathML}mstack"}]}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}stackalign"}]}]},{"N":"let","var":"Q{}align","slot":"2","sType":"*NE ","line":"431","C":[{"N":"doc","sType":"1ND ","base":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","role":"select","C":[{"N":"choose","sType":"?NT ","type":"item()*","line":"432","C":[{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"433","C":[{"N":"fn","name":"string","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}align1","slot":"1"}]}]},{"N":"str","val":""}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"decimalpoint"}]},{"N":"true"},{"N":"valueOf","flags":"l","sType":"1NT ","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}align1","slot":"1","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"8"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]},{"N":"elem","name":"m:mtr","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtr ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"437","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"class","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"msline"}]},{"N":"att","name":"l","sType":"1NA ","line":"438","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"choose","sType":"?NT ","type":"item()*","line":"439","C":[{"N":"or","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"440","C":[{"N":"fn","name":"not","C":[{"N":"fn","name":"string","C":[{"N":"first","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}length"}]}]}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}length"},{"N":"int","val":"0"}]}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"*"}]},{"N":"or","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"441","C":[{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"fn","name":"string","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}align","slot":"2"}]}]},{"N":"str","val":"right"}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"fn","name":"string","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}align","slot":"2"}]}]},{"N":"str","val":"decimalpoint"}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"arith10","sType":"?AO","op":"+","calc":"d+d","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"14","C":[{"N":"atomSing","diag":"1|0||arith","card":"?","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}p","slot":"0"}]}]},{"N":"atomSing","diag":"1|1||arith","card":"?","C":[{"N":"first","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}length"}]}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"true"},{"N":"valueOf","flags":"l","sType":"1NT ","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}p","slot":"0","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"16"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"let","var":"Q{}w","slot":"3","sType":"*NE ","line":"445","C":[{"N":"doc","sType":"1ND ","base":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","role":"select","C":[{"N":"choose","sType":"?NT ","type":"item()*","line":"446","C":[{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"447","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}mslinethickness"},{"N":"str","val":"thin"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"0.1em"}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"448","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}mslinethickness"},{"N":"str","val":"medium"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"0.15em"}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"449","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}mslinethickness"},{"N":"str","val":"thick"}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"0.2em"}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}mslinethickness","sType":"*NA nQ{}mslinethickness","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"450"},{"N":"valueOf","flags":"l","sType":"1NT ","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"axis","sType":"*NA nQ{}mslinethickness","name":"attribute","nodeTest":"*NA nQ{}mslinethickness","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"23"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"true"},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"0.15em"}]}]}]},{"N":"choose","sType":"*NE ","type":"item()*","line":"454","C":[{"N":"or","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"455","C":[{"N":"fn","name":"not","C":[{"N":"fn","name":"string","C":[{"N":"first","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}length"}]}]}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}length"},{"N":"int","val":"0"}]}]},{"N":"elem","name":"m:mtd","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtd ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"456","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"class","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"mslinemax"}]},{"N":"elem","name":"m:mpadded","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mpadded ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"457","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"lspace","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"-0.2em"}]},{"N":"att","name":"width","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"0em"}]},{"N":"att","name":"height","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"0em"}]},{"N":"elem","name":"m:mfrac","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mfrac ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"458","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"linethickness","nsuri":"","sType":"1NA ","C":[{"N":"fn","name":"string-join","sType":"1AS ","C":[{"N":"first","C":[{"N":"convert","type":"AS*","from":"AZ","to":"AS","C":[{"N":"data","C":[{"N":"mergeAdj","sType":"*","C":[{"N":"varRef","name":"Q{}w","slot":"3","sType":"*","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"458"}]}]}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"elem","name":"m:mspace","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mspace ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"459","C":[{"N":"att","name":"width","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":".5em"}]}]},{"N":"elem","name":"m:mrow","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mrow ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"460","C":[{"N":"empty","sType":"0 "}]}]}]}]}]}]}]},{"N":"true"},{"N":"let","var":"Q{}l","slot":"4","sType":"*NE ","line":"466","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}length","sType":"*NA nQ{}length","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"466"},{"N":"forEach","sType":"*NE nQ{http://www.w3.org/1998/Math/MathML}mtd ","line":"467","C":[{"N":"filter","flags":"p","sType":"*N","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"467","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"descendant","nodeTest":"*N u[NT,NP,NC,NE]"}]},{"N":"gc10","op":"<=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"fn","name":"position"},{"N":"varRef","name":"Q{}l","slot":"4"}]}]},{"N":"elem","name":"m:mtd","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtd ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"468","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"class","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"msline"}]},{"N":"elem","name":"m:mpadded","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mpadded ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"469","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"lspace","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"-0.2em"}]},{"N":"att","name":"width","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"0em"}]},{"N":"att","name":"height","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"0em"}]},{"N":"elem","name":"m:mfrac","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mfrac ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"470","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"linethickness","nsuri":"","sType":"1NA ","C":[{"N":"fn","name":"string-join","sType":"1AS ","C":[{"N":"first","C":[{"N":"convert","type":"AS*","from":"AZ","to":"AS","C":[{"N":"data","C":[{"N":"mergeAdj","sType":"*","C":[{"N":"varRef","name":"Q{}w","slot":"3","sType":"*","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"470"}]}]}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"elem","name":"m:mspace","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mspace ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"471","C":[{"N":"att","name":"width","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":".5em"}]}]},{"N":"elem","name":"m:mrow","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mrow ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"472","C":[{"N":"empty","sType":"0 "}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{"N":"templateRule","rank":"2","prec":"0","seq":"47","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"418","module":"mml3.xsl","expand-text":"false","match":"m:msgroup","prio":"0","matches":"NE nQ{http://www.w3.org/1998/Math/MathML}msgroup","C":[{"N":"p.nodeTest","role":"match","test":"NE nQ{http://www.w3.org/1998/Math/MathML}msgroup","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}msgroup","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common "},{"N":"sequence","role":"action","sType":"* ","C":[{"N":"param","name":"Q{}p","slot":"0","sType":"* ","as":"* ","flags":"","line":"419","C":[{"N":"str","sType":"1AS ","val":"","role":"select"},{"N":"supplied","role":"conversion","slot":"0","sType":"* "}]},{"N":"let","var":"Q{}s","slot":"1","sType":"* ","line":"420","C":[{"N":"fn","name":"number","sType":"1AO","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"420","C":[{"N":"fn","name":"sum","C":[{"N":"attVal","name":"Q{}shift"}]}]},{"N":"let","var":"Q{}thisp","slot":"2","sType":"* ","line":"421","C":[{"N":"fn","name":"number","sType":"1AO","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"421","C":[{"N":"fn","name":"sum","C":[{"N":"attVal","name":"Q{}position"}]}]},{"N":"forEach","sType":"* ","line":"422","C":[{"N":"axis","name":"child","nodeTest":"*NE","sType":"*NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"422"},{"N":"applyT","sType":"* ","line":"423","mode":"Q{}mstack1","bSlot":"1","C":[{"N":"dot","sType":"1NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"423"},{"N":"withParam","name":"Q{}p","slot":"0","sType":"1AO","C":[{"N":"arith10","op":"+","calc":"d+d","sType":"1AO","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"424","C":[{"N":"arith10","op":"+","calc":"d+d","C":[{"N":"fn","name":"number","C":[{"N":"atomSing","diag":"0|0||number","card":"?","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}p","slot":"0"}]}]}]},{"N":"atomSing","diag":"1|1||arith","card":"?","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}thisp","slot":"2"}]}]}]},{"N":"arith10","op":"*","calc":"d*d","C":[{"N":"arith10","op":"-","calc":"d-d","C":[{"N":"fn","name":"position"},{"N":"int","val":"1"}]},{"N":"atomSing","diag":"1|1||arith","card":"?","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}s","slot":"1"}]}]}]}]}]}]}]}]}]}]}]},{"N":"templateRule","rank":"3","prec":"0","seq":"46","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"376","module":"mml3.xsl","expand-text":"false","match":"m:mn","prio":"0","matches":"NE nQ{http://www.w3.org/1998/Math/MathML}mn","C":[{"N":"p.nodeTest","role":"match","test":"NE nQ{http://www.w3.org/1998/Math/MathML}mn","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mn","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common "},{"N":"sequence","role":"action","sType":"* ","C":[{"N":"param","name":"Q{}p","slot":"0","sType":"* ","as":"* ","flags":"","line":"377","C":[{"N":"str","sType":"1AS ","val":"","role":"select"},{"N":"supplied","role":"conversion","slot":"0","sType":"* "}]},{"N":"let","var":"Q{}align1","slot":"1","sType":"*NE ","line":"378","C":[{"N":"docOrder","sType":"*NA nQ{}stackalign","role":"select","line":"378","C":[{"N":"slash","op":"/","sType":"*NA nQ{}stackalign","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"fn","name":"reverse","C":[{"N":"first","C":[{"N":"axis","name":"ancestor","nodeTest":"*NE nQ{http://www.w3.org/1998/Math/MathML}mstack"}]}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}stackalign"}]}]},{"N":"let","var":"Q{}dp1","slot":"2","sType":"*NE ","line":"379","C":[{"N":"docOrder","sType":"*NA nQ{}decimalpoint","role":"select","line":"379","C":[{"N":"slash","op":"/","sType":"*NA nQ{}decimalpoint","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"fn","name":"reverse","C":[{"N":"first","C":[{"N":"filter","C":[{"N":"axis","name":"ancestor","nodeTest":"*NE"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}decimalpoint"}]}]}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}decimalpoint"}]}]},{"N":"let","var":"Q{}align","slot":"3","sType":"*NE ","line":"380","C":[{"N":"doc","sType":"1ND ","base":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","role":"select","C":[{"N":"choose","sType":"?NT ","type":"item()*","line":"381","C":[{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"382","C":[{"N":"fn","name":"string","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}align1","slot":"1"}]}]},{"N":"str","val":""}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"decimalpoint"}]},{"N":"true"},{"N":"valueOf","flags":"l","sType":"1NT ","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}align1","slot":"1","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"9"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]},{"N":"let","var":"Q{}dp","slot":"4","sType":"*NE ","line":"386","C":[{"N":"doc","sType":"1ND ","base":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","role":"select","C":[{"N":"choose","sType":"?NT ","type":"item()*","line":"387","C":[{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"388","C":[{"N":"fn","name":"string","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}dp1","slot":"2"}]}]},{"N":"str","val":""}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"."}]},{"N":"true"},{"N":"valueOf","flags":"l","sType":"1NT ","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}dp1","slot":"2","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"14"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]},{"N":"elem","name":"m:mtr","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtr ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"392","C":[{"N":"sequence","sType":"* ","C":[{"N":"att","name":"l","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"$p"}]},{"N":"let","var":"Q{}mn","slot":"5","sType":"* ","line":"393","C":[{"N":"fn","name":"normalize-space","sType":"1AS","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"393","C":[{"N":"fn","name":"string","C":[{"N":"dot"}]}]},{"N":"let","var":"Q{}len","slot":"6","sType":"* ","line":"394","C":[{"N":"fn","name":"string-length","sType":"1ADI","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"394","C":[{"N":"fn","name":"string","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}mn","slot":"5"}]}]}]},{"N":"sequence","sType":"* ","C":[{"N":"choose","sType":"? ","type":"item()*","line":"395","C":[{"N":"or","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"396","C":[{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"varRef","name":"Q{}align","slot":"3"},{"N":"str","val":"right"}]},{"N":"and","C":[{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"varRef","name":"Q{}align","slot":"3"},{"N":"str","val":"decimalpoint"}]},{"N":"fn","name":"not","C":[{"N":"fn","name":"contains","C":[{"N":"fn","name":"string","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}mn","slot":"5"}]}]},{"N":"fn","name":"string","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}dp","slot":"4"}]}]},{"N":"str","val":"http://www.w3.org/2005/xpath-functions/collation/codepoint"}]}]}]}]},{"N":"att","name":"l","sType":"1NA ","line":"397","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","flags":"l","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"arith10","sType":"?AO","op":"+","calc":"d+d","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"21","C":[{"N":"atomSing","diag":"1|0||arith","card":"?","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}p","slot":"0"}]}]},{"N":"atomSing","diag":"1|1||arith","card":"?","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}len","slot":"6"}]}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"399","C":[{"N":"varRef","name":"Q{}align","slot":"3"},{"N":"str","val":"center"}]},{"N":"att","name":"l","sType":"1NA ","line":"400","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","flags":"l","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"fn","sType":"?A m[AO,AD,AF]","name":"round","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"24","C":[{"N":"arith10","op":"div","calc":"d/d","C":[{"N":"arith10","op":"+","calc":"d+d","C":[{"N":"atomSing","diag":"1|0||arith","card":"?","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}p","slot":"0"}]}]},{"N":"atomSing","diag":"1|1||arith","card":"?","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}len","slot":"6"}]}]}]},{"N":"int","val":"2"}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"402","C":[{"N":"varRef","name":"Q{}align","slot":"3"},{"N":"str","val":"decimalpoint"}]},{"N":"att","name":"l","sType":"1NA ","line":"403","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","flags":"l","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"arith10","sType":"?AO","op":"+","calc":"d+d","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"27","C":[{"N":"atomSing","diag":"1|0||arith","card":"?","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}p","slot":"0"}]}]},{"N":"fn","name":"string-length","C":[{"N":"fn","name":"substring-before","C":[{"N":"fn","name":"string","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}mn","slot":"5"}]}]},{"N":"fn","name":"string","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}dp","slot":"4"}]}]},{"N":"str","val":"http://www.w3.org/2005/xpath-functions/collation/codepoint"}]}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"forEach","sType":"*NE ","line":"406","C":[{"N":"filter","flags":"p","sType":"*N","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"406","C":[{"N":"slash","op":"/","C":[{"N":"root"},{"N":"axis","name":"descendant","nodeTest":"*N u[NT,NP,NC,NE]"}]},{"N":"gc10","op":"<=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"fn","name":"position"},{"N":"varRef","name":"Q{}len","slot":"6"}]}]},{"N":"let","var":"Q{}pos","slot":"7","sType":"*NE ","line":"407","C":[{"N":"fn","name":"position","sType":"1ADI","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"407"},{"N":"let","var":"Q{}digit","slot":"8","sType":"*NE ","line":"408","C":[{"N":"fn","name":"substring","sType":"1AS","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"408","C":[{"N":"fn","name":"string","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}mn","slot":"5"}]}]},{"N":"fn","name":"number","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}pos","slot":"7"}]}]},{"N":"fn","name":"number","C":[{"N":"int","val":"1"}]}]},{"N":"elem","name":"m:mtd","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtd ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"409","C":[{"N":"sequence","sType":"* ","C":[{"N":"choose","sType":"? ","line":"410","C":[{"N":"or","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"410","C":[{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"varRef","name":"Q{}digit","slot":"8"},{"N":"str","val":"."}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"varRef","name":"Q{}digit","slot":"8"},{"N":"str","val":","}]}]},{"N":"elem","name":"m:mspace","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mspace ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"411","C":[{"N":"att","name":"width","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":".15em"}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"elem","name":"m:mn","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mn ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"413","C":[{"N":"valueOf","flags":"l","sType":"1NT ","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}digit","slot":"8","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"35"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]}]},{"N":"templateRule","rank":"4","prec":"0","seq":"45","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"341","module":"mml3.xsl","expand-text":"false","match":"m:msrow","prio":"0","matches":"NE nQ{http://www.w3.org/1998/Math/MathML}msrow","C":[{"N":"p.nodeTest","role":"match","test":"NE nQ{http://www.w3.org/1998/Math/MathML}msrow","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}msrow","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common "},{"N":"sequence","role":"action","sType":"* ","C":[{"N":"param","name":"Q{}p","slot":"0","sType":"* ","as":"* ","flags":"","line":"342","C":[{"N":"str","sType":"1AS ","val":"","role":"select"},{"N":"supplied","role":"conversion","slot":"0","sType":"* "}]},{"N":"param","name":"Q{}maxl","slot":"1","sType":"* ","as":"* ","flags":"","line":"343","C":[{"N":"int","val":"0","sType":"1ADI","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"343"},{"N":"supplied","role":"conversion","slot":"1","sType":"* "}]},{"N":"let","var":"Q{}align1","slot":"2","sType":"*N ","line":"344","C":[{"N":"docOrder","sType":"*NA nQ{}stackalign","role":"select","line":"344","C":[{"N":"slash","op":"/","sType":"*NA nQ{}stackalign","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"fn","name":"reverse","C":[{"N":"first","C":[{"N":"axis","name":"ancestor","nodeTest":"*NE nQ{http://www.w3.org/1998/Math/MathML}mstack"}]}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}stackalign"}]}]},{"N":"let","var":"Q{}align","slot":"3","sType":"*N ","line":"345","C":[{"N":"doc","sType":"1ND ","base":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","role":"select","C":[{"N":"choose","sType":"?NT ","type":"item()*","line":"346","C":[{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"347","C":[{"N":"fn","name":"string","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}align1","slot":"2"}]}]},{"N":"str","val":""}]},{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"decimalpoint"}]},{"N":"true"},{"N":"valueOf","flags":"l","sType":"1NT ","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}align1","slot":"2","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"9"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]},{"N":"let","var":"Q{}row","slot":"4","sType":"*N ","line":"351","C":[{"N":"doc","sType":"1ND ","base":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","role":"select","C":[{"N":"applyT","sType":"* ","line":"352","mode":"Q{}mstack1","bSlot":"1","C":[{"N":"axis","name":"child","nodeTest":"*NE","sType":"*NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"352"},{"N":"withParam","name":"Q{}p","slot":"0","sType":"1ADI","C":[{"N":"int","val":"0","sType":"1ADI","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"353"}]}]}]},{"N":"sequence","sType":"*N ","C":[{"N":"valueOf","sType":"1NT ","C":[{"N":"str","sType":"1AS ","val":"\n"}]},{"N":"let","var":"Q{}l1","slot":"5","sType":"*NE ","line":"357","C":[{"N":"doc","sType":"1ND ","base":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","role":"select","C":[{"N":"choose","sType":"*NT ","type":"item()*","line":"358","C":[{"N":"and","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"359","C":[{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"varRef","name":"Q{}align","slot":"3"},{"N":"str","val":"decimalpoint"}]},{"N":"axis","name":"child","nodeTest":"*NE nQ{http://www.w3.org/1998/Math/MathML}mn"}]},{"N":"forEach","sType":"*NT ","line":"360","C":[{"N":"docOrder","sType":"*NE nQ{http://www.w3.org/1998/Math/MathML}mtr","role":"select","line":"360","C":[{"N":"docOrder","sType":"*NE nQ{http://www.w3.org/1998/Math/MathML}mtr","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}row","slot":"4"}]},{"N":"first","C":[{"N":"filter","C":[{"N":"axis","name":"child","nodeTest":"*NE nQ{http://www.w3.org/1998/Math/MathML}mtr"},{"N":"slash","op":"/","C":[{"N":"axis","name":"child","nodeTest":"*NE nQ{http://www.w3.org/1998/Math/MathML}mtd"},{"N":"axis","name":"child","nodeTest":"*NE nQ{http://www.w3.org/1998/Math/MathML}mn"}]}]}]}]}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"361","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"arith10","sType":"1AO","op":"+","calc":"d+d","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"361","C":[{"N":"fn","name":"number","C":[{"N":"fn","name":"sum","C":[{"N":"attVal","name":"Q{}l"}]}]},{"N":"fn","name":"count","C":[{"N":"docOrder","C":[{"N":"slash","op":"/","C":[{"N":"fn","name":"reverse","C":[{"N":"axis","name":"preceding-sibling","nodeTest":"*NE"}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}l"}]}]}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]},{"N":"or","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"364","C":[{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"varRef","name":"Q{}align","slot":"3"},{"N":"str","val":"right"}]},{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","C":[{"N":"varRef","name":"Q{}align","slot":"3"},{"N":"str","val":"decimalpoint"}]}]},{"N":"valueOf","flags":"l","sType":"1NT ","line":"365","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"fn","sType":"1ADI","name":"count","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"365","C":[{"N":"docOrder","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}row","slot":"4"}]},{"N":"axis","name":"child","nodeTest":"*NE nQ{http://www.w3.org/1998/Math/MathML}mtr"}]},{"N":"axis","name":"child","nodeTest":"*NE nQ{http://www.w3.org/1998/Math/MathML}mtd"}]}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"true"},{"N":"valueOf","flags":"l","sType":"1NT ","line":"368","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"int","sType":"1ADI","val":"0","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"368"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]},{"N":"elem","name":"m:mtr","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtr ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"372","C":[{"N":"sequence","sType":"*N ","C":[{"N":"att","name":"class","nsuri":"","sType":"1NA ","C":[{"N":"str","sType":"1AS ","val":"msrow"}]},{"N":"att","name":"l","nsuri":"","sType":"1NA ","C":[{"N":"fn","name":"string-join","sType":"1AS ","C":[{"N":"first","C":[{"N":"convert","type":"AS*","from":"AZ","to":"AS","C":[{"N":"data","C":[{"N":"mergeAdj","sType":"1AO","C":[{"N":"arith10","op":"+","calc":"d+d","sType":"1AO","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"372","C":[{"N":"arith10","op":"+","calc":"d+d","C":[{"N":"fn","name":"number","C":[{"N":"atomSing","diag":"0|0||number","card":"?","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}l1","slot":"5"}]}]}]},{"N":"fn","name":"number","C":[{"N":"fn","name":"sum","C":[{"N":"attVal","name":"Q{}position"}]}]}]},{"N":"atomSing","diag":"1|1||arith","card":"?","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}p","slot":"0"}]}]}]}]}]}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"373","sType":"*NE","C":[{"N":"docOrder","sType":"*NE","role":"select","line":"373","C":[{"N":"docOrder","sType":"*NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"slash","op":"/","C":[{"N":"slash","op":"/","C":[{"N":"treat","as":"N","diag":"1|0|XPTY0019|slash","C":[{"N":"varRef","name":"Q{}row","slot":"4"}]},{"N":"axis","name":"child","nodeTest":"*NE nQ{http://www.w3.org/1998/Math/MathML}mtr"}]},{"N":"axis","name":"child","nodeTest":"*NE"}]}]}]}]}]}]}]}]}]}]}]}]}]},{"N":"templateRule","rank":"5","prec":"0","seq":"44","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"331","module":"mml3.xsl","expand-text":"false","match":"*","prio":"-0.5","matches":"NE","C":[{"N":"p.nodeTest","role":"match","test":"NE","sType":"1NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common "},{"N":"sequence","role":"action","sType":"* ","C":[{"N":"param","name":"Q{}p","slot":"0","sType":"* ","as":"* ","flags":"","line":"332","C":[{"N":"str","sType":"1AS ","val":"","role":"select"},{"N":"supplied","role":"conversion","slot":"0","sType":"* "}]},{"N":"param","name":"Q{}maxl","slot":"1","sType":"* ","as":"* ","flags":"","line":"333","C":[{"N":"int","val":"0","sType":"1ADI","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"333"},{"N":"supplied","role":"conversion","slot":"1","sType":"* "}]},{"N":"elem","name":"m:mtr","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtr ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"334","C":[{"N":"sequence","sType":"* ","C":[{"N":"att","name":"l","nsuri":"","sType":"1NA ","C":[{"N":"fn","name":"string-join","sType":"1AS ","C":[{"N":"first","C":[{"N":"convert","type":"AS*","from":"AZ","to":"AS","C":[{"N":"data","C":[{"N":"mergeAdj","sType":"1AO","C":[{"N":"arith10","op":"+","calc":"d+d","sType":"1AO","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"334","C":[{"N":"int","val":"1"},{"N":"atomSing","diag":"1|1||arith","card":"?","C":[{"N":"first","C":[{"N":"varRef","name":"Q{}p","slot":"0"}]}]}]}]}]}]}]},{"N":"str","sType":"1AS ","val":" "}]}]},{"N":"choose","sType":"? ","line":"335","C":[{"N":"gc10","op":"=","comp":"GAC|http://www.w3.org/2005/xpath-functions/collation/codepoint","card":"1:1","sType":"1AB","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"335","C":[{"N":"slash","op":"/","C":[{"N":"fn","name":"reverse","C":[{"N":"first","C":[{"N":"axis","name":"ancestor","nodeTest":"*NE nQ{}mstack"}]}]},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}stackalign"}]},{"N":"str","val":"left"}]},{"N":"att","name":"l","sType":"1NA ","line":"336","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"valueOf","sType":"1NT ","flags":"l","C":[{"N":"fn","name":"string-join","role":"select","C":[{"N":"first","C":[{"N":"forEach","sType":"*AS ","C":[{"N":"data","sType":"*A ","C":[{"N":"mergeAdj","C":[{"N":"varRef","sType":"*","name":"Q{}p","slot":"0","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"7"}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":" "}]}]}]}]},{"N":"fn","name":"string","sType":"1AS ","C":[{"N":"dot"}]}]}]},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"true"},{"N":"empty","sType":"0 "}]},{"N":"elem","name":"m:mtd","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtd ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"338","C":[{"N":"applyT","sType":"* ","mode":"#unnamed","bSlot":"2","C":[{"N":"dot","sType":"1NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"9"}]}]}]}]}]}]}]}]},{"N":"co","id":"4","binds":"0","C":[{"N":"mode","onNo":"TC","flags":"","patternSlots":"0","name":"Q{}msc","prec":"","C":[{"N":"templateRule","rank":"0","prec":"0","seq":"51","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"509","module":"mml3.xsl","expand-text":"false","match":"m:mscarry","prio":"0","matches":"NE nQ{http://www.w3.org/1998/Math/MathML}mscarry","C":[{"N":"p.nodeTest","role":"match","test":"NE nQ{http://www.w3.org/1998/Math/MathML}mscarry","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mscarry","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common "},{"N":"elem","name":"m:mtd","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtd ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","role":"action","line":"510","C":[{"N":"sequence","sType":"* ","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"511","sType":"*NA u[NA nQ{}location,NA nQ{}crossout]","C":[{"N":"docOrder","sType":"*NA u[NA nQ{}location,NA nQ{}crossout]","role":"select","line":"511","C":[{"N":"union","op":"|","sType":"*NA u[NA nQ{}location,NA nQ{}crossout]","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}location"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}crossout"}]}]}]},{"N":"choose","sType":"* ","type":"item()*","line":"512","C":[{"N":"docOrder","sType":"*NA nQ{}scriptsizemultiplier","line":"513","C":[{"N":"slash","op":"/","sType":"*NA nQ{}scriptsizemultiplier","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"axis","name":"parent","nodeTest":"?N"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}scriptsizemultiplier"}]}]},{"N":"elem","name":"m:mstyle","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mstyle ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"514","C":[{"N":"sequence","sType":"* ","C":[{"N":"att","name":"mathsize","nsuri":"","sType":"1NA ","C":[{"N":"fn","name":"concat","sType":"1AS ","C":[{"N":"fn","name":"string-join","sType":"1AS ","C":[{"N":"first","C":[{"N":"convert","type":"AS*","from":"AZ","to":"AS","C":[{"N":"data","C":[{"N":"mergeAdj","sType":"?A m[AO,AD,AF]","C":[{"N":"fn","name":"round","sType":"?A m[AO,AD,AF]","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"514","C":[{"N":"arith10","op":"div","calc":"d/d","C":[{"N":"atomSing","diag":"1|0||arith","card":"?","C":[{"N":"first","C":[{"N":"slash","op":"/","C":[{"N":"axis","name":"parent","nodeTest":"?N"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}scriptsizemultiplier"}]}]}]},{"N":"dec","val":"0.007"}]}]}]}]}]}]},{"N":"str","sType":"1AS ","val":" "}]},{"N":"str","sType":"1AS ","val":"%"},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"applyT","sType":"* ","line":"515","mode":"#unnamed","bSlot":"0","C":[{"N":"axis","name":"child","nodeTest":"*N u[NT,NP,NC,NE]","sType":"*N u[NT,NP,NC,NE]","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"515"}]}]}]},{"N":"true"},{"N":"applyT","sType":"* ","line":"519","mode":"#unnamed","bSlot":"0","C":[{"N":"axis","name":"child","nodeTest":"*N u[NT,NP,NC,NE]","sType":"*N u[NT,NP,NC,NE]","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"519"}]}]}]}]}]},{"N":"templateRule","rank":"1","prec":"0","seq":"50","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common","minImp":"0","flags":"s","baseUri":"file:///Users/dpvc/Desktop/Folders/Tumlook/Data/Code/JavaScript/MathJax/Code/Git/mathjax/MathJax-src/ts/input/mathml/mml3/mml3.xsl","slots":"200","line":"494","module":"mml3.xsl","expand-text":"false","match":"*","prio":"-0.5","matches":"NE","C":[{"N":"p.nodeTest","role":"match","test":"NE","sType":"1NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common "},{"N":"elem","name":"m:mtd","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mtd ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","role":"action","line":"495","C":[{"N":"sequence","sType":"* ","C":[{"N":"copyOf","flags":"c","ns":"xml=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ex=http://ns.saxonica.com/xslt/export","line":"496","sType":"*NA u[NA nQ{}location,NA nQ{}crossout]","C":[{"N":"docOrder","sType":"*NA u[NA nQ{}location,NA nQ{}crossout]","role":"select","line":"496","C":[{"N":"union","op":"|","sType":"*NA u[NA nQ{}location,NA nQ{}crossout]","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"slash","op":"/","C":[{"N":"axis","name":"parent","nodeTest":"?N"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}location"}]},{"N":"slash","op":"/","C":[{"N":"axis","name":"parent","nodeTest":"?N"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}crossout"}]}]}]}]},{"N":"choose","sType":"* ","type":"item()*","line":"497","C":[{"N":"docOrder","sType":"*NA nQ{}scriptsizemultiplier","line":"498","C":[{"N":"slash","op":"/","sType":"*NA nQ{}scriptsizemultiplier","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","C":[{"N":"axis","name":"parent","nodeTest":"?N"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}scriptsizemultiplier"}]}]},{"N":"elem","name":"m:mstyle","sType":"1NE nQ{http://www.w3.org/1998/Math/MathML}mstyle ","nsuri":"http://www.w3.org/1998/Math/MathML","namespaces":"","line":"499","C":[{"N":"sequence","sType":"* ","C":[{"N":"att","name":"mathsize","nsuri":"","sType":"1NA ","C":[{"N":"fn","name":"concat","sType":"1AS ","C":[{"N":"fn","name":"string-join","sType":"1AS ","C":[{"N":"first","C":[{"N":"convert","type":"AS*","from":"AZ","to":"AS","C":[{"N":"data","C":[{"N":"mergeAdj","sType":"?A m[AO,AD,AF]","C":[{"N":"fn","name":"round","sType":"?A m[AO,AD,AF]","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","line":"499","C":[{"N":"arith10","op":"div","calc":"d/d","C":[{"N":"atomSing","diag":"1|0||arith","card":"?","C":[{"N":"first","C":[{"N":"slash","op":"/","C":[{"N":"axis","name":"parent","nodeTest":"?N"},{"N":"axis","name":"attribute","nodeTest":"*NA nQ{}scriptsizemultiplier"}]}]}]},{"N":"dec","val":"0.007"}]}]}]}]}]}]},{"N":"str","sType":"1AS ","val":" "}]},{"N":"str","sType":"1AS ","val":"%"},{"N":"str","sType":"1AS ","val":""}]}]},{"N":"applyT","sType":"* ","line":"500","mode":"#unnamed","bSlot":"0","C":[{"N":"dot","sType":"1NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"500"}]}]}]},{"N":"true"},{"N":"applyT","sType":"* ","line":"504","mode":"#unnamed","bSlot":"0","C":[{"N":"dot","sType":"1NE","ns":"= xml=~ fn=~ xsl=~ m=http://www.w3.org/1998/Math/MathML c=http://exslt.org/common ","role":"select","line":"504"}]}]}]}]}]}]}]},{"N":"overridden"},{"N":"output","C":[{"N":"property","name":"Q{http://saxon.sf.net/}stylesheet-version","value":"10"},{"N":"property","name":"indent","value":"yes"},{"N":"property","name":"omit-xml-declaration","value":"yes"}]},{"N":"decimalFormat"}],"Σ":"9a493c8"}��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MathJax-src-3.2.2/ts/input/mathml/mml3/mml3.ts������������������������������������������������������0000664�0000000�0000000�00000065357�14250155210�0021011�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************* * * Copyright (c) 2021-2022 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 Implements the elementary MathML3 support (experimental) * using David Carlisle's XLST transform. * * @author dpvc@mathjax.org (Davide Cervone) */ import {MathItem} from '../../../core/MathItem.js'; import {MathDocument} from '../../../core/MathDocument.js'; import {Handler} from '../../../core/Handler.js'; import {OptionList} from '../../../util/Options.js'; import {createTransform} from './mml3-node.js'; import {MathML} from '../../mathml.js'; /** * The data for a MathML prefilter. * * @template N The HTMLElement node class * @template T The Text node class * @template D The Document class */ export type FILTERDATA = {math: MathItem, document: MathDocument, data: N}; /** * Class that handles XSLT transform for MathML3 elementary math tags. */ export class Mml3 { /** * The XSLT transform as a string; */ public static XSLT: string; // added below (it is huge) /** * The function to convert serialized MathML using the XSLT. * (Different for browser and node environments.) */ protected transform: (node: N, doc: MathDocument) => N; /** * @param {MathDocument} document The MathDocument for the transformation * @constructor */ constructor(document: MathDocument) { if (typeof XSLTProcessor === 'undefined') { // // For Node, get the trasnform from the external module // this.transform = createTransform(); } else { // // For in-browser use, use the browser's XSLTProcessor // const processor = new XSLTProcessor(); const parsed = document.adaptor.parse(Mml3.XSLT, 'text/xml') as any as Node; processor.importStylesheet(parsed); this.transform = (node: N) => { const adaptor = document.adaptor; const div = adaptor.node('div', {}, [adaptor.clone(node)]); const mml = processor.transformToDocument(div as any as Node) as any as N; return adaptor.tags(mml, 'math')[0]; }; } } /** * The mathml filter for the MathML input jax * * @param {FILTERDATA} args The data from the pre-filter chain. */ public mmlFilter(args: FILTERDATA) { if (args.document.options.enableMml3) { args.data = this.transform(args.data, args.document); } } } /** * Add Mml3 support into the handler. */ export function Mml3Handler(handler: Handler): Handler { handler.documentClass = class extends handler.documentClass { /** * @override */ public static OPTIONS: OptionList = { ...handler.documentClass.OPTIONS, enableMml3: true, }; /** * Add a prefilter to the MathML input jax, if there is one. * * @override * @constructor */ constructor(...args: any[]) { super(...args); for (const jax of this.inputJax || []) { if (jax.name === 'MathML') { if (!jax.options._mml3) { // prevent filter being added twice (e.g., when a11y tools load) const mml3 = new Mml3(this); (jax as MathML).mmlFilters.add(mml3.mmlFilter.bind(mml3)); jax.options._mml3 = true; } break; } } } }; return handler; } // // The actual XSLT transform // Mml3.XSLT = ` ltr ) ( ] [ } { ) ( ] [ } { \ ) ( } { > < top right 0 decimalpoint decimalpoint . decimalpoint * 0.1em 0.15em 0.2em 0.15em 0 ) ( / \ : = top ) `; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MathJax-src-3.2.2/ts/input/tex.ts�������������������������������������������������������������������0000664�0000000�0000000�00000015565�14250155210�0016603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************* * * Copyright (c) 2017-2022 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 Implements the TeX InputJax object * * @author dpvc@mathjax.org (Davide Cervone) */ import {AbstractInputJax} from '../core/InputJax.js'; import {userOptions, separateOptions, OptionList} from '../util/Options.js'; import {MathDocument} from '../core/MathDocument.js'; import {MathItem} from '../core/MathItem.js'; import {MmlNode} from '../core/MmlTree/MmlNode.js'; import {MmlFactory} from '../core/MmlTree/MmlFactory.js'; import {FindTeX} from './tex/FindTeX.js'; import FilterUtil from './tex/FilterUtil.js'; import NodeUtil from './tex/NodeUtil.js'; import TexParser from './tex/TexParser.js'; import TexError from './tex/TexError.js'; import ParseOptions from './tex/ParseOptions.js'; import {TagsFactory} from './tex/Tags.js'; import {ParserConfiguration} from './tex/Configuration.js'; // Import base as it is the default package loaded. import './tex/base/BaseConfiguration.js'; /*****************************************************************/ /* * Implements the TeX class (extends AbstractInputJax) */ /** * @template N The HTMLElement node class * @template T The Text node class * @template D The Document class */ export class TeX extends AbstractInputJax { /** * Name of input jax. * @type {string} */ public static NAME: string = 'TeX'; /** * Default options for the jax. * @type {OptionList} */ public static OPTIONS: OptionList = { ...AbstractInputJax.OPTIONS, FindTeX: null, packages: ['base'], // Digit pattern to match numbers. digits: /^(?:[0-9]+(?:\{,\}[0-9]{3})*(?:\.[0-9]*)?|\.[0-9]+)/, // Maximum size of TeX string to process. maxBuffer: 5 * 1024, formatError: (jax: TeX, err: TexError) => jax.formatError(err) }; /** * The FindTeX instance used for locating TeX in strings */ protected findTeX: FindTeX; /** * The configuration of the TeX jax. * @type {ParserConfiguration} */ protected configuration: ParserConfiguration; /** * The LaTeX code that is parsed. * @type {string} */ protected latex: string; /** * The Math node that results from parsing. * @type {MmlNode} */ protected mathNode: MmlNode; private _parseOptions: ParseOptions; /** * Initialises the configurations. * @param {string[]} packages Names of packages. * @return {Configuration} The configuration object. */ protected static configure(packages: (string | [string, number])[]): ParserConfiguration { let configuration = new ParserConfiguration(packages, ['tex']); configuration.init(); return configuration; } /** * Initialises the Tags factory. Add tagging structures from packages and set * tagging to given default. * @param {ParseOptions} options The parse options. * @param {Configuration} configuration The configuration. */ protected static tags(options: ParseOptions, configuration: ParserConfiguration) { TagsFactory.addTags(configuration.tags); TagsFactory.setDefault(options.options.tags); options.tags = TagsFactory.getDefault(); options.tags.configuration = options; } /** * @override */ constructor(options: OptionList = {}) { const [rest, tex, find] = separateOptions(options, TeX.OPTIONS, FindTeX.OPTIONS); super(tex); this.findTeX = this.options['FindTeX'] || new FindTeX(find); const packages = this.options.packages; const configuration = this.configuration = TeX.configure(packages); const parseOptions = this._parseOptions = new ParseOptions(configuration, [this.options, TagsFactory.OPTIONS]); userOptions(parseOptions.options, rest); configuration.config(this); TeX.tags(parseOptions, configuration); 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); } /** * @override */ public setMmlFactory(mmlFactory: MmlFactory) { super.setMmlFactory(mmlFactory); this._parseOptions.nodeFactory.setMmlFactory(mmlFactory); } /** * @return {ParseOptions} The parse options that configure this JaX instance. */ public get parseOptions(): ParseOptions { return this._parseOptions; } /** * @override */ public reset(tag: number = 0) { this.parseOptions.tags.reset(tag); } /** * @override */ public compile(math: MathItem, document: MathDocument): MmlNode { this.parseOptions.clear(); this.executeFilters(this.preFilters, math, document, this.parseOptions); let display = math.display; this.latex = math.math; let node: MmlNode; this.parseOptions.tags.startEquation(math); let globalEnv; try { let parser = new TexParser(this.latex, {display: display, isInner: false}, this.parseOptions); node = parser.mml(); globalEnv = parser.stack.global; } catch (err) { if (!(err instanceof TexError)) { throw err; } this.parseOptions.error = true; node = this.options.formatError(this, err); } node = this.parseOptions.nodeFactory.create('node', 'math', [node]); if (globalEnv?.indentalign) { NodeUtil.setAttribute(node, 'indentalign', globalEnv.indentalign); } if (display) { NodeUtil.setAttribute(node, 'display', 'block'); } this.parseOptions.tags.finishEquation(math); this.parseOptions.root = node; this.executeFilters(this.postFilters, math, document, this.parseOptions); this.mathNode = this.parseOptions.root; return this.mathNode; } /** * @override */ public findMath(strings: string[]) { return this.findTeX.findMath(strings); } /** * Default formatter for error messages: * wrap an error into a node for output. * @param {TeXError} err The TexError. * @return {Node} The merror node. */ public formatError(err: TexError): MmlNode { let message = err.message.replace(/\n.*/, ''); return this.parseOptions.nodeFactory.create( 'error', message, err.id, this.latex); } } �������������������������������������������������������������������������������������������������������������������������������������������MathJax-src-3.2.2/ts/input/tex/���������������������������������������������������������������������0000775�0000000�0000000�00000000000�14250155210�0016217�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������MathJax-src-3.2.2/ts/input/tex/AllPackages.ts�������������������������������������������������������0000664�0000000�0000000�00000006647�14250155210�0020753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************* * * Copyright (c) 2018-2022 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 Loads all the TeX extensions * * @author dpvc@mathjax.org (Davide Cervone) */ import './base/BaseConfiguration.js'; import './action/ActionConfiguration.js'; import './ams/AmsConfiguration.js'; import './amscd/AmsCdConfiguration.js'; import './bbox/BboxConfiguration.js'; import './boldsymbol/BoldsymbolConfiguration.js'; import './braket/BraketConfiguration.js'; import './bussproofs/BussproofsConfiguration.js'; import './cancel/CancelConfiguration.js'; import './cases/CasesConfiguration.js'; import './centernot/CenternotConfiguration.js'; import './color/ColorConfiguration.js'; import './colorv2/ColorV2Configuration.js'; import './colortbl/ColortblConfiguration.js'; import './configmacros/ConfigMacrosConfiguration.js'; import './empheq/EmpheqConfiguration.js'; import './enclose/EncloseConfiguration.js'; import './extpfeil/ExtpfeilConfiguration.js'; import './gensymb/GensymbConfiguration.js'; import './html/HtmlConfiguration.js'; import './mathtools/MathtoolsConfiguration.js'; import './mhchem/MhchemConfiguration.js'; import './newcommand/NewcommandConfiguration.js'; import './noerrors/NoErrorsConfiguration.js'; import './noundefined/NoUndefinedConfiguration.js'; import './physics/PhysicsConfiguration.js'; import './setoptions/SetOptionsConfiguration.js'; import './tagformat/TagFormatConfiguration.js'; import './textcomp/TextcompConfiguration.js'; import './textmacros/TextMacrosConfiguration.js'; import './upgreek/UpgreekConfiguration.js'; import './unicode/UnicodeConfiguration.js'; import './verb/VerbConfiguration.js'; declare const MathJax: any; if (typeof MathJax !== 'undefined' && MathJax.loader) { MathJax.loader.preLoad( '[tex]/action', '[tex]/ams', '[tex]/amscd', '[tex]/bbox', '[tex]/boldsymbol', '[tex]/braket', '[tex]/bussproofs', '[tex]/cancel', '[tex]/cases', '[tex]/centernot', '[tex]/color', '[tex]/colorv2', '[tex]/colortbl', '[tex]/empheq', '[tex]/enclose', '[tex]/extpfeil', '[tex]/gensymb', '[tex]/html', '[tex]/mathtools', '[tex]/mhchem', '[tex]/newcommand', '[tex]/noerrors', '[tex]/noundefined', '[tex]/physics', '[tex]/upgreek', '[tex]/unicode', '[tex]/verb', '[tex]/configmacros', '[tex]/tagformat', '[tex]/textcomp', '[tex]/textmacros', '[tex]/setoptions', ); } export const AllPackages: string[] = [ 'base', 'action', 'ams', 'amscd', 'bbox', 'boldsymbol', 'braket', 'bussproofs', 'cancel', 'cases', 'centernot', 'color', 'colortbl', 'empheq', 'enclose', 'extpfeil', 'gensymb', 'html', 'mathtools', 'mhchem', 'newcommand', 'noerrors', 'noundefined', 'upgreek', 'unicode', 'verb', 'configmacros', 'tagformat', 'textcomp', 'textmacros' ]; �����������������������������������������������������������������������������������������MathJax-src-3.2.2/ts/input/tex/Configuration.ts�����������������������������������������������������0000664�0000000�0000000�00000034706�14250155210�0021410�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************* * * Copyright (c) 2018-2022 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 Configuration options for the TexParser. * * @author v.sorge@mathjax.org (Volker Sorge) */ import {HandlerConfig, FallbackConfig} from './MapHandler.js'; import {StackItemClass} from './StackItem.js'; import {TagsClass} from './Tags.js'; import {userOptions, defaultOptions, OptionList} from '../../util/Options.js'; import {SubHandlers} from './MapHandler.js'; import {FunctionList} from '../../util/FunctionList.js'; import {TeX} from '../tex.js'; import {PrioritizedList} from '../../util/PrioritizedList.js'; import {TagsFactory} from './Tags.js'; export type StackItemConfig = {[kind: string]: StackItemClass}; export type TagsConfig = {[kind: string]: TagsClass}; export type Processor = [T, number]; export type ProtoProcessor = Processor | T; export type ProcessorList = Processor[]; export type ConfigMethod = (c: ParserConfiguration, j: TeX) => void; export type InitMethod = (c: ParserConfiguration) => void; export class Configuration { /** * Creates a function priority pair. * @param {ProtoProcessor} func The function or processor. * @param {number} priority The default priority. * @return {Processor} The processor pair. * @template T */ private static makeProcessor(func: ProtoProcessor, priority: number): Processor { return Array.isArray(func) ? func : [func, priority]; } /** * Creates a configuration for a package. * @param {string} name The package name or empty string. * @param {Object} config See `create` method. * @return {Configuration} The newly generated configuration. */ private static _create(name: string, config: {handler?: HandlerConfig, fallback?: FallbackConfig, items?: StackItemConfig, tags?: TagsConfig, options?: OptionList, nodes?: {[key: string]: any}, preprocessors?: ProtoProcessor[], postprocessors?: ProtoProcessor[], init?: ProtoProcessor, config?: ProtoProcessor, priority?: number, parser?: string, } = {}): Configuration { let priority = config.priority || PrioritizedList.DEFAULTPRIORITY; let init = config.init ? this.makeProcessor(config.init, priority) : null; let conf = config.config ? this.makeProcessor(config.config, priority) : null; let preprocessors = (config.preprocessors || []).map( pre => this.makeProcessor(pre, priority)); let postprocessors = (config.postprocessors || []).map( post => this.makeProcessor(post, priority)); let parser = config.parser || 'tex'; return new Configuration( name, config.handler || {}, config.fallback || {}, config.items || {}, config.tags || {}, config.options || {}, config.nodes || {}, preprocessors, postprocessors, init, conf, priority, parser ); } /** * Creator pattern for creating a named package configuration. This will be * administered in the configuration handler and can be retrieved again. * @param {string} name The package name. * @param {Object} config The configuration parameters: * Configuration for the TexParser consist of the following: * * _handler_ configuration mapping handler types to lists of symbol mappings. * * _fallback_ configuration mapping handler types to fallback methods. * * _items_ for the StackItem factory. * * _tags_ mapping tagging configurations to tagging objects. * * _options_ parse options for the packages. * * _nodes_ for the Node factory. * * _preprocessors_ list of functions for preprocessing the LaTeX * string wrt. to given parse options. Can contain a priority. * * _postprocessors_ list of functions for postprocessing the MmlNode * wrt. to given parse options. Can contain a priority. * * _init_ init method and optionally its priority. * * _config_ config method and optionally its priority. * * _priority_ default priority of the configuration. * * _parser_ the name of the parser that this configuration targets. * @return {Configuration} The newly generated configuration. */ public static create(name: string, config: {handler?: HandlerConfig, fallback?: FallbackConfig, items?: StackItemConfig, tags?: TagsConfig, options?: OptionList, nodes?: {[key: string]: any}, preprocessors?: ProtoProcessor[], postprocessors?: ProtoProcessor[], init?: ProtoProcessor, config?: ProtoProcessor, priority?: number, parser?: string, } = {}): Configuration { let configuration = Configuration._create(name, config); ConfigurationHandler.set(name, configuration); return configuration; } /** * Creates an unnamed, ephemeral package configuration. It will not added to * the configuration handler. * @param {Object} config See `create` method. * @return {Configuration} The ephemeral package configuration. */ public static local(config: {handler?: HandlerConfig, fallback?: FallbackConfig, items?: StackItemConfig, tags?: TagsConfig, options?: OptionList, nodes?: {[key: string]: any}, preprocessors?: ProtoProcessor[], postprocessors?: ProtoProcessor[], init?: ProtoProcessor, config?: ProtoProcessor, priority?: number, parser?: string, } = {}): Configuration { return Configuration._create('', config); } /** * @constructor */ private constructor(readonly name: string, readonly handler: HandlerConfig = {}, readonly fallback: FallbackConfig = {}, readonly items: StackItemConfig = {}, readonly tags: TagsConfig = {}, readonly options: OptionList = {}, readonly nodes: {[key: string]: any} = {}, readonly preprocessors: ProcessorList = [], readonly postprocessors: ProcessorList = [], readonly initMethod: Processor = null, readonly configMethod: Processor = null, public priority: number, readonly parser: string ) { this.handler = Object.assign( {character: [], delimiter: [], macro: [], environment: []}, handler); } /** * The init method. * @type {Function} */ public get init(): InitMethod { return this.initMethod ? this.initMethod[0] : null; } /** * The config method to call once jax is ready. * @type {FunctionList} */ public get config(): ConfigMethod { return this.configMethod ? this.configMethod[0] : null; } } export namespace ConfigurationHandler { let maps: Map = new Map(); /** * Adds a new configuration to the handler overwriting old ones. * * @param {string} name The name of the configuration. * @param {Configuration} map The configuration mapping. */ export let set = function(name: string, map: Configuration): void { maps.set(name, map); }; /** * Looks up a configuration. * * @param {string} name The name of the configuration. * @return {Configuration} The configuration with the given name or null. */ export let get = function(name: string): Configuration { return maps.get(name); }; /** * @return {string[]} All configurations in the handler. */ export let keys = function(): IterableIterator { return maps.keys(); }; } /** * Parser configuration combines the configurations of the currently selected * packages. * @constructor */ export class ParserConfiguration { /** * Priority list of init methods. * @type {FunctionList} */ protected initMethod: FunctionList = new FunctionList(); /** * Priority list of init methods to call once jax is ready. * @type {FunctionList} */ protected configMethod: FunctionList = new FunctionList(); /** * An ordered list of cofigurations. * @type {PrioritizedList} */ protected configurations: PrioritizedList = new PrioritizedList(); /** * The list of parsers this configuration targets */ protected parsers: string[] = []; /** * The subhandlers for this configuration. * @type {SubHandlers} */ public handlers: SubHandlers = new SubHandlers(); /** * The collated stack items. * @type {StackItemConfig} */ public items: StackItemConfig = {}; /** * The collated tag configurations. * @type {TagsConfig} */ public tags: TagsConfig = {}; /** * The collated options. * @type {OptionList} */ public options: OptionList = {}; /** * The collated node creators. * @type {{[key: string]: any}} */ public nodes: {[key: string]: any} = {}; /** * @constructor * @param {(string|[string,number])[]} packages A list of packages with * optional priorities. * @parm {string[]} parsers The names of the parsers this package targets */ constructor(packages: (string | [string, number])[], parsers: string[] = ['tex']) { this.parsers = parsers; for (const pkg of packages.slice().reverse()) { this.addPackage(pkg); } for (let {item: config, priority: priority} of this.configurations) { this.append(config, priority); } } /** * Init method for the configuration; */ public init() { this.initMethod.execute(this); } /** * Init method for when the jax is ready * @param {TeX} jax The TeX jax for this configuration */ public config(jax: TeX) { this.configMethod.execute(this, jax); for (const config of this.configurations) { this.addFilters(jax, config.item); } } /** * Retrieves and adds configuration for a package with priority. * @param {(string | [string, number]} pkg Package with priority. */ public addPackage(pkg: (string | [string, number])) { const name = typeof pkg === 'string' ? pkg : pkg[0]; const conf = this.getPackage(name); conf && this.configurations.add(conf, typeof pkg === 'string' ? conf.priority : pkg[1]); } /** * Adds a configuration after the input jax is created. (Used by \require.) * Sets items, nodes and runs configuration method explicitly. * * @param {string} name The name of the package to add * @param {TeX} jax The TeX jax where it is being registered * @param {OptionList=} options The options for the configuration. */ public add(name: string, jax: TeX, options: OptionList = {}) { const config = this.getPackage(name); this.append(config); this.configurations.add(config, config.priority); this.init(); const parser = jax.parseOptions; parser.nodeFactory.setCreators(config.nodes); for (const kind of Object.keys(config.items)) { parser.itemFactory.setNodeClass(kind, config.items[kind]); } TagsFactory.addTags(config.tags); defaultOptions(parser.options, config.options); userOptions(parser.options, options); this.addFilters(jax, config); if (config.config) { config.config(this, jax); } } /** * Find a package and check that it is for the targeted parser * * @param {string} name The name of the package to check * @return {Configuration} The configuration for the package */ protected getPackage(name: string): Configuration { const config = ConfigurationHandler.get(name); if (config && this.parsers.indexOf(config.parser) < 0) { throw Error(`Package ${name} doesn't target the proper parser`); } return config; } /** * Appends a configuration to the overall configuration object. * @param {Configuration} config A configuration. * @param {number} priority The configurations optional priority. */ public append(config: Configuration, priority?: number) { priority = priority || config.priority; if (config.initMethod) { this.initMethod.add(config.initMethod[0], config.initMethod[1]); } if (config.configMethod) { this.configMethod.add(config.configMethod[0], config.configMethod[1]); } this.handlers.add(config.handler, config.fallback, priority); Object.assign(this.items, config.items); Object.assign(this.tags, config.tags); defaultOptions(this.options, config.options); Object.assign(this.nodes, config.nodes); } /** * Adds pre- and postprocessor as filters to the jax. * @param {TeX, config: Configuration) { for (const [pre, priority] of config.preprocessors) { jax.preFilters.add(pre, priority); } for (const [post, priority] of config.postprocessors) { jax.postFilters.add(post, priority); } } } ����������������������������������������������������������MathJax-src-3.2.2/ts/input/tex/FilterUtil.ts��������������������������������������������������������0000664�0000000�0000000�00000024357�14250155210�0020665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************* * * Copyright (c) 2017-2022 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 Utility functions for standard pre and post filters. * * @author sorge@mathjax.org (Volker Sorge) */ import {TEXCLASS, MMLNODE, MmlNode} from '../../core/MmlTree/MmlNode.js'; 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'; namespace FilterUtil { /** * Visitor to set stretchy attributes to false on elements, if they are * not used as delimiters. Also wraps non-stretchy infix delimiters into a * TeXAtom. * @param {MmlNode} math The node to rewrite. * @param {ParseOptions} data The parse options. */ export let cleanStretchy = function(arg: {math: any, data: ParseOptions}) { let options = arg.data; for (let mo of options.getList('fixStretchy')) { if (NodeUtil.getProperty(mo, 'fixStretchy')) { let symbol = NodeUtil.getForm(mo); if (symbol && symbol[3] && symbol[3]['stretchy']) { NodeUtil.setAttribute(mo, 'stretchy', false); } const parent = mo.parent; if (!NodeUtil.getTexClass(mo) && (!symbol || !symbol[2])) { const texAtom = options.nodeFactory.create('node', 'TeXAtom', [mo]); parent.replaceChild(texAtom, mo); texAtom.inheritAttributesFrom(mo); } NodeUtil.removeProperties(mo, 'fixStretchy'); } } }; /** * Visitor that removes superfluous attributes from nodes. I.e., if a node has * an attribute, which is also an inherited attribute it will be removed. This * is necessary as attributes are set bottom up in the parser. * @param {ParseOptions} data The parse options. */ export let cleanAttributes = function(arg: {data: ParseOptions}) { let node = arg.data.root as MmlNode; node.walkTree((mml: MmlNode, _d: any) => { let attribs = mml.attributes as any; if (!attribs) { return; } const keep = new Set((attribs.get('mjx-keep-attrs') || '').split(/ /)); delete (attribs.getAllAttributes())['mjx-keep-attrs']; for (const key of attribs.getExplicitNames()) { if (!keep.has(key) && attribs.attributes[key] === mml.attributes.getInherited(key)) { delete attribs.attributes[key]; } } }, {}); }; /** * Combine adjacent elements that are relations (since MathML treats the * spacing very differently) * @param {ParseOptions} data The parse options. */ export let combineRelations = function(arg: {data: ParseOptions}) { const remove: MmlNode[] = []; for (let mo of arg.data.getList('mo')) { if (mo.getProperty('relationsCombined') || !mo.parent || (mo.parent && !NodeUtil.isType(mo.parent, 'mrow')) || NodeUtil.getTexClass(mo) !== TEXCLASS.REL) { // @test Prime, PrimeSup, Named Function continue; } let mml = mo.parent; let m2: MmlNode; let children = mml.childNodes as MMLNODE[]; let next = children.indexOf(mo) + 1; let variantForm = NodeUtil.getProperty(mo, 'variantForm'); while (next < children.length && (m2 = children[next]) && NodeUtil.isType(m2, 'mo') && NodeUtil.getTexClass(m2) === TEXCLASS.REL) { if (variantForm === NodeUtil.getProperty(m2, 'variantForm') && _compareExplicit(mo, m2)) { // @test Shift Left, Less Equal, // Multirel Font X, Multirel Mathvariant X NodeUtil.appendChildren(mo, NodeUtil.getChildren(m2)); // This treatment means we might loose some inheritance structure, but // no properties. _copyExplicit(['stretchy', 'rspace'], mo, m2); for (const name of m2.getPropertyNames()) { mo.setProperty(name, m2.getProperty(name)); } children.splice(next, 1); remove.push(m2); m2.parent = null; m2.setProperty('relationsCombined', true); } else { // @test Preset Rspace Lspace if (mo.attributes.getExplicit('rspace') == null) { // @test Mulitrel Mathvariant 3, Mulitrel Mathvariant 4 NodeUtil.setAttribute(mo, 'rspace', '0pt'); } if (m2.attributes.getExplicit('lspace') == null) { // @test Mulitrel Mathvariant 3, Mulitrel Mathvariant 4 NodeUtil.setAttribute(m2, 'lspace', '0pt'); } break; } } mo.attributes.setInherited('form', (mo as MmlMo).getForms()[0]); } arg.data.removeFromList('mo', remove); }; /** * Copies the specified explicit attributes from node2 to node1. * @param {string[]} attrs List of explicit attribute names. * @param {MmlNode} node1 The goal node. * @param {MmlNode} node2 The source node. */ let _copyExplicit = function(attrs: string[], node1: MmlNode, node2: MmlNode) { let attr1 = node1.attributes; let attr2 = node2.attributes; attrs.forEach(x => { let attr = attr2.getExplicit(x); if (attr != null) { // @test Infix Stretchy Right, Preset Lspace Rspace attr1.set(x, attr); } }); }; /** * Compares the explicit attributes of two nodes. Returns true if they * coincide, with the following exceptions: * - lspace attribute of node1 is ignored. * - rspace attribute of node2 is ignored. * - stretchy=false attributes are ignored. * @param {MmlNode} node1 The first node. * @param {MmlNode} node2 Its next sibling. */ let _compareExplicit = function(node1: MmlNode, node2: MmlNode) { let filter = (attr: Attributes, space: string): string[] => { let exp = attr.getExplicitNames(); return exp.filter(x => { return x !== space && (x !== 'stretchy' || attr.getExplicit('stretchy')); }); }; let attr1 = node1.attributes; let attr2 = node2.attributes; let exp1 = filter(attr1, 'lspace'); let exp2 = filter(attr2, 'rspace'); if (exp1.length !== exp2.length) { return false; } for (let name of exp1) { if (attr1.getExplicit(name) !== attr2.getExplicit(name)) { return false; } } return true; }; /** * Cleans msubsup and munderover elements. * @param {ParseOptions} options The parse options. * @param {string} low String representing the lower part of the expression. * @param {string} up String representing the upper part. */ let _cleanSubSup = function(options: ParseOptions, low: string, up: string) { const remove: MmlNode[] = []; for (let mml of options.getList('m' + low + up) as any[]) { const children = mml.childNodes; if (children[mml[low]] && children[mml[up]]) { continue; } const parent = mml.parent; let newNode = (children[mml[low]] ? options.nodeFactory.create('node', 'm' + low, [children[mml.base], children[mml[low]]]) : options.nodeFactory.create('node', 'm' + up, [children[mml.base], children[mml[up]]])); NodeUtil.copyAttributes(mml, newNode); if (parent) { parent.replaceChild(newNode, mml); } else { options.root = newNode; } remove.push(mml); } options.removeFromList('m' + low + up, remove); }; /** * Visitor that rewrites incomplete msubsup/munderover elements in the given * node into corresponding msub/sup/under/over nodes. * @param {MmlNode} math The node to rewrite. * @param {ParseOptions} data The parse options. */ export let cleanSubSup = function(arg: {math: any, data: ParseOptions}) { let options = arg.data; if (options.error) { return; } _cleanSubSup(options, 'sub', 'sup'); _cleanSubSup(options, 'under', 'over'); }; /** * 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) { const remove: MmlNode[] = []; for (const mml of options.getList(underover)) { 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; } remove.push(mml); } } options.removeFromList(underover, remove); }; /** * Visitor that rewrites in-line munderover elements with movablelimits but bases * that are not mo's into explicit msubsup elements. * * @param {ParseOptions} data 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. * @param {ParseOptions} data The parse options. */ export let setInherited = function(arg: {math: any, data: ParseOptions}) { arg.data.root.setInheritedAttributes({}, arg.math['display'], 0, false); }; } export default FilterUtil; MathJax-src-3.2.2/ts/input/tex/FindTeX.ts000066400000000000000000000203371425015521000200750ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2017-2022 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 Implements the TeX version of the FindMath object * * @author dpvc@mathjax.org (Davide Cervone) */ import {AbstractFindMath} from '../../core/FindMath.js'; import {OptionList} from '../../util/Options.js'; import {sortLength, quotePattern} from '../../util/string.js'; import {ProtoItem, protoItem} from '../../core/MathItem.js'; /** * Shorthand types for data about end delimiters and delimiter pairs */ export type EndItem = [string, boolean, RegExp]; export type Delims = [string, string]; /*****************************************************************/ /* * Implements the FindTeX class (extends AbstractFindMath) * * Locates TeX expressions within strings */ /* * @template N The HTMLElement node class * @template T The Text node class * @template D The Document class */ export class FindTeX extends AbstractFindMath { /** * @type {OptionList} */ public static OPTIONS: OptionList = { inlineMath: [ // The start/end delimiter pairs for in-line math // ['$', '$'], // (comment out any you don't want, or add your own, but ['\\(', '\\)'] // be sure that you don't have an extra comma at the end) ], displayMath: [ // The start/end delimiter pairs for display math ['$$', '$$'], // (comment out any you don't want, or add your own, but ['\\[', '\\]'] // be sure that you don't have an extra comma at the end) ], processEscapes: true, // set to true to allow \$ to produce a dollar without // starting in-line math mode processEnvironments: true, // set to true to process \begin{xxx}...\end{xxx} outside // of math mode, false to prevent that processRefs: true, // set to true to process \ref{...} outside of math mode }; /** * The regular expression for any starting delimiter */ protected start: RegExp; /** * The end-delimiter data keyed to the opening delimiter string */ protected end: {[name: string]: EndItem}; /** * False if the configuration has no delimiters (so search can be skipped), true otherwise */ protected hasPatterns: boolean; /** * The index of the \begin...\end pattern in the regex match array */ protected env: number; /** * The index of the \ref and escaped character patters in the regex match array */ protected sub: number; /** * @override */ constructor(options: OptionList) { super(options); this.getPatterns(); } /** * Create the patterns needed for searching the strings for TeX * based on the configuration options */ protected getPatterns() { let options = this.options; let starts: string[] = [], parts: string[] = [], subparts: string[] = []; this.end = {}; this.env = this.sub = 0; let i = 1; options['inlineMath'].forEach((delims: Delims) => this.addPattern(starts, delims, false)); options['displayMath'].forEach((delims: Delims) => this.addPattern(starts, delims, true)); if (starts.length) { parts.push(starts.sort(sortLength).join('|')); } if (options['processEnvironments']) { parts.push('\\\\begin\\s*\\{([^}]*)\\}'); this.env = i; i++; } if (options['processEscapes']) { subparts.push('\\\\([\\\\$])'); } if (options['processRefs']) { subparts.push('(\\\\(?:eq)?ref\\s*\\{[^}]*\\})'); } if (subparts.length) { parts.push('(' + subparts.join('|') + ')'); this.sub = i; } this.start = new RegExp(parts.join('|'), 'g'); this.hasPatterns = (parts.length > 0); } /** * Add the needed patterns for a pair of delimiters * * @param {string[]} starts Array of starting delimiter strings * @param {Delims} delims Array of delimiter strings, as [start, end] * @param {boolean} display True if the delimiters are for display mode */ protected addPattern(starts: string[], delims: Delims, display: boolean) { let [open, close] = delims; starts.push(quotePattern(open)); this.end[open] = [close, display, this.endPattern(close)]; } /** * Create the pattern for a close delimiter * * @param {string} end The end delimiter text * @param {string} endp The end delimiter pattern (overrides the literal end pattern) * @return {RegExp} The regular expression for the end delimiter */ protected endPattern(end: string, endp?: string): RegExp { return new RegExp((endp || quotePattern(end)) + '|\\\\(?:[a-zA-Z]|.)|[{}]', 'g'); } /** * Search for the end delimiter given the start delimiter, * skipping braced groups, and control sequences that aren't * the close delimiter. * * @param {string} text The string being searched for the end delimiter * @param {number} n The index of the string being searched * @param {RegExpExecArray} start The result array from the start-delimiter search * @param {EndItem} end The end-delimiter data corresponding to the start delimiter * @return {ProtoItem} The proto math item for the math, if found */ protected findEnd(text: string, n: number, start: RegExpExecArray, end: EndItem): ProtoItem { let [close, display, pattern] = end; let i = pattern.lastIndex = start.index + start[0].length; let match: RegExpExecArray, braces: number = 0; while ((match = pattern.exec(text))) { if ((match[1] || match[0]) === close && braces === 0) { return protoItem(start[0], text.substr(i, match.index - i), match[0], n, start.index, match.index + match[0].length, display); } else if (match[0] === '{') { braces++; } else if (match[0] === '}' && braces) { braces--; } } return null; } /** * Search a string for math delimited by one of the delimiter pairs, * or by \begin{env}...\end{env}, or \eqref{...}, \ref{...}, \\, or \$. * * @param {ProtoItem[]} math The array of proto math items located so far * @param {number} n The index of the string being searched * @param {string} text The string being searched */ protected findMathInString(math: ProtoItem[], n: number, text: string) { let start, match; this.start.lastIndex = 0; while ((start = this.start.exec(text))) { if (start[this.env] !== undefined && this.env) { let end = '\\\\end\\s*(\\{' + quotePattern(start[this.env]) + '\\})'; match = this.findEnd(text, n, start, ['{' + start[this.env] + '}', true, this.endPattern(null, end)]); if (match) { match.math = match.open + match.math + match.close; match.open = match.close = ''; } } else if (start[this.sub] !== undefined && this.sub) { let math = start[this.sub]; let end = start.index + start[this.sub].length; if (math.length === 2) { match = protoItem('', math.substr(1), '', n, start.index, end); } else { match = protoItem('', math, '', n, start.index, end, false); } } else { match = this.findEnd(text, n, start, this.end[start[0]]); } if (match) { math.push(match); this.start.lastIndex = match.end.n; } } } /** * Search for math in an array of strings and return an array of matches. * * @override */ public findMath(strings: string[]) { let math: ProtoItem[] = []; if (this.hasPatterns) { for (let i = 0, m = strings.length; i < m; i++) { this.findMathInString(math, i, strings[i]); } } return math; } } MathJax-src-3.2.2/ts/input/tex/MapHandler.ts000066400000000000000000000152401425015521000206040ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2017-2022 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 Singleton class for handling symbol maps. * * @author v.sorge@mathjax.org (Volker Sorge) */ import {AbstractSymbolMap, SymbolMap} from './SymbolMap.js'; import {ParseInput, ParseResult, ParseMethod} from './Types.js'; // import {ParserConfiguration} from './Configuration.js'; import {PrioritizedList} from '../../util/PrioritizedList.js'; import {FunctionList} from '../../util/FunctionList.js'; export type HandlerType = 'delimiter' | 'macro' | 'character' | 'environment'; export type HandlerConfig = {[P in HandlerType]?: string[]}; export type FallbackConfig = {[P in HandlerType]?: ParseMethod}; export namespace MapHandler { let maps: Map = new Map(); /** * Adds a new symbol map to the map handler. Might overwrite an existing * symbol map of the same name. * * @param {SymbolMap} map Registers a new symbol map. */ export let register = function(map: SymbolMap): void { maps.set(map.name, map); }; /** * Looks up a symbol map if it exists. * * @param {string} name The name of the symbol map. * @return {SymbolMap} The symbol map with the given name or null. */ export let getMap = function(name: string): SymbolMap { return maps.get(name); }; } /** * Class of symbol mappings that are active in a configuration. */ export class SubHandler { private _configuration: PrioritizedList = new PrioritizedList(); private _fallback: FunctionList = new FunctionList(); /** * Adds a list of symbol maps to the handler. * @param {string[]} maps The names of the symbol maps to add. * @param {ParseMethod} fallback A fallback method. * @param {number} priority Optionally a priority. */ public add(maps: string[], fallback: ParseMethod, priority: number = PrioritizedList.DEFAULTPRIORITY) { for (const name of maps.slice().reverse()) { let map = MapHandler.getMap(name); if (!map) { this.warn('Configuration ' + name + ' not found! Omitted.'); return; } this._configuration.add(map, priority); } if (fallback) { this._fallback.add(fallback, priority); } } /** * Parses the given input with the first applicable symbol map. * @param {ParseInput} input The input for the parser. * @return {ParseResult} The output of the parsing function. */ public parse(input: ParseInput): ParseResult { for (let {item: map} of this._configuration) { const result = map.parse(input); if (result) { return result; } } let [env, symbol] = input; Array.from(this._fallback)[0].item(env, symbol); } /** * Maps a symbol to its "parse value" if it exists. * * @param {string} symbol The symbol to parse. * @return {T} A boolean, Character, or Macro. */ public lookup(symbol: string): T { let map = this.applicable(symbol) as AbstractSymbolMap; return map ? map.lookup(symbol) : null; } /** * Checks if a symbol is contained in one of the symbol mappings of this * configuration. * * @param {string} symbol The symbol to parse. * @return {boolean} True if the symbol is contained in the mapping. */ public contains(symbol: string): boolean { return this.applicable(symbol) ? true : false; } /** * @override */ public toString(): string { let names = []; for (let {item: map} of this._configuration) { names.push(map.name); } return names.join(', '); } /** * Retrieves the first applicable symbol map in the configuration. * @param {string} symbol The symbol to parse. * @return {SymbolMap} A map that can parse the symbol. */ public applicable(symbol: string): SymbolMap { for (let {item: map} of this._configuration) { if (map.contains(symbol)) { return map; } } return null; } /** * Retrieves the map of the given name. * @param {string} name Name of the symbol map. * @return {SymbolMap} The map if it exists. */ public retrieve(name: string): SymbolMap { for (let {item: map} of this._configuration) { if (map.name === name) { return map; } } return null; } /** * Prints a warning message. * @param {string} message The warning. */ private warn(message: string) { console.log('TexParser Warning: ' + message); } } export class SubHandlers { private map = new Map(); /** * Adds a symbol map to the configuration if it exists. * @param {string} name of the symbol map. */ public add(handlers: HandlerConfig, fallbacks: FallbackConfig, priority: number = PrioritizedList.DEFAULTPRIORITY): void { for (const key of Object.keys(handlers)) { let name = key as HandlerType; let subHandler = this.get(name); if (!subHandler) { subHandler = new SubHandler(); this.set(name, subHandler); } subHandler.add(handlers[name], fallbacks[name], priority); } } /** * Setter for subhandlers. * @param {HandlerType} name The name of the subhandler. * @param {SubHandler} subHandler The subhandler. */ public set(name: HandlerType, subHandler: SubHandler) { this.map.set(name, subHandler); } /** * Getter for subhandler. * @param {HandlerType} name Name of the subhandler. * @return {SubHandler} The subhandler by that name if it exists. */ public get(name: HandlerType): SubHandler { return this.map.get(name); } /** * Retrieves a symbol map of the given name. * @param {string} name Name of the symbol map. * @return {SymbolMap} The map if it exists. O/w null. */ public retrieve(name: string): SymbolMap { for (const handler of this.map.values()) { let map = handler.retrieve(name); if (map) { return map; } } return null; } /** * All names of registered subhandlers. * @return {IterableIterator} Iterable list of keys. */ public keys(): IterableIterator { return this.map.keys(); } } MathJax-src-3.2.2/ts/input/tex/NodeFactory.ts000066400000000000000000000124571425015521000210150ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2009-2022 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 Node factory for creating MmlNodes. This allows extension * packages to add node constructors or overwrite existing ones. * * @author v.sorge@mathjax.org (Volker Sorge) */ import {TextNode, MmlNode} from '../../core/MmlTree/MmlNode.js'; import {MmlFactory} from '../../core/MmlTree/MmlFactory.js'; import ParseOptions from './ParseOptions.js'; import NodeUtil from './NodeUtil.js'; export type NodeFactoryMethod = (factory: NodeFactory, kind: string, ...rest: any[]) => MmlNode; export class NodeFactory { /** * Parser configuration that can be used to pass information between node methods. * @type {ParseOption} */ public configuration: ParseOptions; /** * The external node factory. * @type {MmlFactory} */ protected mmlFactory: MmlFactory = null; /** * The factory table populated with some default methods. */ private factory: {[kind: string]: NodeFactoryMethod} = {'node': NodeFactory.createNode, 'token': NodeFactory.createToken, 'text': NodeFactory.createText, 'error': NodeFactory.createError }; /** * Default node generation function. * @param {NodeFactory} factory The current node factory. * @param {string} kind The type of node to create. * @param {MmlNode[]} children Its children. * @param {any=} def Its properties. * @param {TextNode=} text An optional text node if this is a token. * @return {MmlNode} The newly created Mml node. */ public static createNode(factory: NodeFactory, kind: string, children: MmlNode[] = [], def: any = {}, text?: TextNode): MmlNode { const node = factory.mmlFactory.create(kind); node.setChildren(children); if (text) { node.appendChild(text); } NodeUtil.setProperties(node, def); return node; } /** * Default token generation function. * @param {NodeFactory} factory The current node factory. * @param {string} kind The type of node to create. * @param {any} def Its properties. * @param {string} text Text of the token. * @return {MmlNode} The newly created token node. */ public static createToken(factory: NodeFactory, kind: string, def: any = {}, text: string = ''): MmlNode { const textNode = factory.create('text', text); return factory.create('node', kind, [], def, textNode); } /** * Default text node generation function. * @param {NodeFactory} factory The current node factory. * @param {string} text The text for the new node. * @return {TextNode} The newly created text node. */ public static createText(factory: NodeFactory, text: string): TextNode { if (text == null) { return null; } return (factory.mmlFactory.create('text') as TextNode).setText(text); } /** * Default error node generation function. * @param {NodeFactory} factory The current node factory. * @param {string} message The error message. * @return {MmlNode} The newly created error node. */ public static createError(factory: NodeFactory, message: string): MmlNode { let text = factory.create('text', message); let mtext = factory.create('node', 'mtext', [], {}, text); let error = factory.create('node', 'merror', [mtext], {'data-mjx-error': message}); return error; } /** * @param {MmlFactory} mmlFactory The MmlFactory for the TeX jax to use */ public setMmlFactory(mmlFactory: MmlFactory) { this.mmlFactory = mmlFactory; } /** * Adds a method to the factory. * @param {string} kind The type of node the method creates. * @param {NodeFactoryMethod} func The node creator. */ public set(kind: string, func: NodeFactoryMethod) { this.factory[kind] = func; } /** * Adds a set of node creators to the factory. * @param {Object.} maps The set of functions. */ public setCreators(maps: {[kind: string]: NodeFactoryMethod}) { for (let kind in maps) { this.set(kind, maps[kind]); } } /** * Creates a node for the internal data structure from the factory. * @param {string} kind The type of node to be created. * @param {any[]} ...rest The arguments for the node. * @return {MmlNode} The created node. */ public create(kind: string, ...rest: any[]): MmlNode { const func = this.factory[kind] || this.factory['node']; const node = func(this, rest[0], ...rest.slice(1)); if (kind === 'node') { this.configuration.addNode(rest[0], node); } return node; } /** * @param {string} kind The method for generating a node of given kind. */ public get(kind: string) { return this.factory[kind]; } } MathJax-src-3.2.2/ts/input/tex/NodeUtil.ts000066400000000000000000000201231425015521000203100ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2009-2022 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 Node utility methods. * * @author v.sorge@mathjax.org (Volker Sorge) */ import {TextNode, MMLNODE, MmlNode, AbstractMmlNode, AbstractMmlEmptyNode} from '../../core/MmlTree/MmlNode.js'; import {MmlMo} from '../../core/MmlTree/MmlNodes/mo.js'; import {Property, PropertyList} from '../../core/Tree/Node.js'; import {Args} from './Types.js'; import {OperatorDef} from '../../core/MmlTree/OperatorDictionary.js'; namespace NodeUtil { const attrs: Map = new Map([ ['autoOP', true], ['fnOP', true], ['movesupsub', true], ['subsupOK', true], ['texprimestyle', true], ['useHeight', true], ['variantForm', true], ['withDelims', true], ['mathaccent', true], ['open', true], ['close', true] ]); /** * Creates a single character from a unicode hex string. * @param {string} code The code. * @return {string} The newly created entity. */ export function createEntity(code: string): string { return String.fromCodePoint(parseInt(code, 16)); } /** * Get the children of the a node. * @param {MmlNode} node The node. * @return {MMLNODE[]} Its children. */ export function getChildren(node: MmlNode): MMLNODE[] { return (node.childNodes as MMLNODE[]); } /** * Get text content of a node. * @param {TextNode} node The node. * @return {string} Its text content. */ export function getText(node: TextNode): string { return node.getText(); } /** * Append children to a node. * @param {MmlNode} node The node. * @param {MMLNODE[]} children A list of new children. */ export function appendChildren(node: MmlNode, children: MMLNODE[]) { for (let child of children) { node.appendChild(child); } } /** * Sets an attribute of a node. * @param {MmlNode} node The node. * @param {string} attribute An attribute. * @param {Args} value The attribute value. */ export function setAttribute(node: MmlNode, attribute: string, value: Args) { node.attributes.set(attribute, value); } /** * Sets a property of a node. * @param {MmlNode} node The node. * @param {string} property The property. * @param {Args} value The property value. */ export function setProperty(node: MmlNode, property: string, value: Args) { node.setProperty(property, value); } /** * Sets properties and attributes of a node. * @param {MmlNode} node The node. * @param {PropertyList} properties A list of property/attribute value pairs. */ export function setProperties(node: MmlNode, properties: PropertyList) { for (const name of Object.keys(properties)) { let value = properties[name]; if (name === 'texClass') { node.texClass = (value as number); node.setProperty(name, value); } else if (name === 'movablelimits') { node.setProperty('movablelimits', value); if (node.isKind('mo') || node.isKind('mstyle')) { node.attributes.set('movablelimits', value); } } else if (name === 'inferred') { // ignore } else if (attrs.has(name)) { node.setProperty(name, value); } else { node.attributes.set(name, value); } } } /** * Returns the property of a node. * @param {MmlNode} node The node. * @param {string} property A property name. * @return {Property} Value of the property. */ export function getProperty(node: MmlNode, property: string): Property { return node.getProperty(property); } /** * Returns the attribute of a node. * @param {MmlNode} node The node. * @param {string} attr A attribute name. * @return {Property} Value of the attribute. */ export function getAttribute(node: MmlNode, attr: string): Property { return node.attributes.get(attr); } /** * Removes a set of properties from a node. * @param {MmlNode} node The node. * @param {string[]} ...properties A list of properties. */ export function removeProperties(node: MmlNode, ...properties: string[]) { node.removeProperty(...properties); } /** * Returns a child node at a given position. * @param {MmlNode} node The node. * @param {number} position The position of the child. * @return {MMLNODE} The child node at position. */ export function getChildAt(node: MmlNode, position: number): MMLNODE { return (node.childNodes[position] as MMLNODE); } /** * Set node child at position. * @param {MmlNode} node The node. * @param {number} position The position of the new child. * @param {MmlNode} child The new child. */ export function setChild(node: MmlNode, position: number, child: MmlNode) { let children = node.childNodes; children[position] = child; if (child) { child.parent = node; } } /** * Copies children between nodes. * @param {MmlNode} oldNode The source node. * @param {MmlNode} newNode The target node. */ export function copyChildren(oldNode: MmlNode, newNode: MmlNode) { let children = oldNode.childNodes as (TextNode | MmlNode)[]; for (let i = 0; i < children.length; i++) { setChild(newNode, i, children[i]); } } /** * Copies attributes between nodes. * @param {MmlNode} oldNode The source node. * @param {MmlNode} newNode The target node. */ export function copyAttributes(oldNode: MmlNode, newNode: MmlNode) { newNode.attributes = oldNode.attributes; setProperties(newNode, oldNode.getAllProperties()); } /** * Checks if node is of a particular type. * @param {MmlNode} node The node. * @param {string} kind The type to check. * @return {boolean} True if node is of the given type. */ export function isType(node: MmlNode, kind: string): boolean { return node.isKind(kind); } /** * Checks if the node is embellished. * @param {MmlNode} node The node. * @return {boolean} True if node is embellished. */ export function isEmbellished(node: MmlNode): boolean { return node.isEmbellished; } /** * Gets the texclass of a node. * @param {MmlNode} node The node. * @return {number} Its texclass. */ export function getTexClass(node: MmlNode): number { return node.texClass; } /** * Gets the mo element at the core of the node. * @param {MmlNode} node The node. * @return {MmlNode} The MO node at the core. */ export function getCoreMO(node: MmlNode): MmlNode { return node.coreMO(); } /** * Checks if an object is a node. * @param {any} item The object. * @return {boolean} True if it is a node. */ export function isNode(item: any): boolean { return item instanceof AbstractMmlNode || item instanceof AbstractMmlEmptyNode; } /** * Checks if the node is an inferred mrow. * @param {MmlNode} node The node. * @return {boolean} True if the node is an inferred mrow. */ export function isInferred(node: MmlNode): boolean { return node.isInferred; } /** * Gets the operator definition of a node. * @param {MmlNode} node The node. * @return {OperatorDef} If node is an MO returns the operator definition. O/w * null. */ export function getForm(node: MmlNode): OperatorDef { if (!isType(node, 'mo')) { return null; } let mo = node as MmlMo; let forms = mo.getForms(); for (let form of forms) { let symbol = MmlMo.OPTABLE[form][mo.getText()]; if (symbol) { return symbol; } } return null; } } export default NodeUtil; MathJax-src-3.2.2/ts/input/tex/ParseMethods.ts000066400000000000000000000127671425015521000212020ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2017-2022 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 Base methods for TeX Parsing. * * @author v.sorge@mathjax.org (Volker Sorge) */ import {Symbol} from './Symbol.js'; import TexParser from './TexParser.js'; import NodeUtil from './NodeUtil.js'; import {TexConstant} from './TexConstants.js'; import {MmlNode} from '../../core/MmlTree/MmlNode.js'; import ParseUtil from './ParseUtil.js'; namespace ParseMethods { /** * Handle a variable (a single letter or multi-letter if allowed). * @param {TexParser} parser The current tex parser. * @param {string} c The letter to transform into an mi. */ export function variable(parser: TexParser, c: string) { // @test Identifier Font const def = ParseUtil.getFontDef(parser); const env = parser.stack.env; if (env.multiLetterIdentifiers && env.font !== '') { c = parser.string.substr(parser.i - 1).match(env.multiLetterIdentifiers as any as RegExp)[0]; parser.i += c.length - 1; if (def.mathvariant === TexConstant.Variant.NORMAL && env.noAutoOP && c.length > 1) { def.autoOP = false; } } // @test Identifier const node = parser.create('token', 'mi', def, c); parser.Push(node); } /** * Handle a number (a sequence of digits, with decimal separator, etc.). * @param {TexParser} parser The current tex parser. * @param {string} c The first character of a number than can be parsed with * the digits pattern. */ export function digit(parser: TexParser, c: string) { let mml: MmlNode; const pattern = parser.configuration.options['digits']; const n = parser.string.slice(parser.i - 1).match(pattern); // @test Integer Font const def = ParseUtil.getFontDef(parser); if (n) { // @test Integer, Number, Decimal (European) mml = parser.create('token', 'mn', def, n[0].replace(/[{}]/g, '')); parser.i += n[0].length - 1; } else { // @test Decimal Point, Decimal Point European mml = parser.create('token', 'mo', def, c); } parser.Push(mml); } /** * Lookup a control-sequence and process it. * @param {TexParser} parser The current tex parser. * @param {string} c The string '\'. */ export function controlSequence(parser: TexParser, _c: string) { const name = parser.GetCS(); parser.parse('macro', [parser, name]); } /** * Handle normal mathchar (as an mi). * @param {TexParser} parser The current tex parser. * @param {Symbol} mchar The parsed symbol. */ export function mathchar0mi(parser: TexParser, mchar: Symbol) { const def = mchar.attributes || {mathvariant: TexConstant.Variant.ITALIC}; // @test Greek const node = parser.create('token', 'mi', def, mchar.char); parser.Push(node); } /** * Handle normal mathchar (as an mo). * @param {TexParser} parser The current tex parser. * @param {Symbol} mchar The parsed symbol. */ export function mathchar0mo(parser: TexParser, mchar: Symbol) { const def = mchar.attributes || {}; def['stretchy'] = false; // @test Large Set const node = parser.create('token', 'mo', def, mchar.char); NodeUtil.setProperty(node, 'fixStretchy', true); parser.configuration.addNode('fixStretchy', node); // PROBLEM: Attributes stop working when Char7 are explicitly set. parser.Push(node); } /** * Handle mathchar in current family. * @param {TexParser} parser The current tex parser. * @param {Symbol} mchar The parsed symbol. */ export function mathchar7(parser: TexParser, mchar: Symbol) { const def = mchar.attributes || {mathvariant: TexConstant.Variant.NORMAL}; if (parser.stack.env['font']) { // @test MathChar7 Single Font def['mathvariant'] = parser.stack.env['font']; } // @test MathChar7 Single, MathChar7 Operator, MathChar7 Multi const node = parser.create('token', 'mi', def, mchar.char); parser.Push(node); } /** * Handle delimiter. * @param {TexParser} parser The current tex parser. * @param {Symbol} delim The parsed delimiter symbol. */ export function delimiter(parser: TexParser, delim: Symbol) { let def = delim.attributes || {}; // @test Fenced2, Delimiter (AMS) def = Object.assign({fence: false, stretchy: false}, def); const node = parser.create('token', 'mo', def, delim.char); parser.Push(node); } /** * Parse an environment. * @param {TexParser} parser The current tex parser. * @param {string} env The name of the environment. * @param {Function} func The parse method for the environment. * @param {any[]} args A list of additional arguments. */ export function environment(parser: TexParser, env: string, func: Function, args: any[]) { const end = args[0]; let mml = parser.itemFactory.create('begin').setProperties({name: env, end: end}); mml = func(parser, mml, ...args.slice(1)); parser.Push(mml); } } export default ParseMethods; MathJax-src-3.2.2/ts/input/tex/ParseOptions.ts000066400000000000000000000147401425015521000212230ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2018-2022 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 Factory generating maps to keep options for the TeX parser. * * @author v.sorge@mathjax.org (Volker Sorge) */ import StackItemFactory from './StackItemFactory.js'; import {Tags} from './Tags.js'; import {SubHandlers} from './MapHandler.js'; import {NodeFactory} from './NodeFactory.js'; import NodeUtil from './NodeUtil.js'; import {MmlNode} from '../../core/MmlTree/MmlNode.js'; import TexParser from './TexParser.js'; import {defaultOptions, OptionList} from '../../util/Options.js'; import {ParserConfiguration} from './Configuration.js'; /** * @class */ export default class ParseOptions { /** * A set of sub handlers * @type {SubHandlers} */ public handlers: SubHandlers; /** * A set of options, mapping names to string or boolean values. * @type {OptionList} */ public options: OptionList = {}; /** * The current item factory. * @type {StackItemFactory} */ public itemFactory: StackItemFactory; /** * The current node factory. * @type {NodeFactory} */ public nodeFactory: NodeFactory; /** * The current tagging object. * @type {Tags} */ public tags: Tags; /** * Storage area for parser-specific package data (indexed by package name) * @type {Map} */ public packageData: Map = new Map(); // Fields for ephemeral options, i.e., options that will be cleared for each // run of the parser. /** * Stack of previous tex parsers. This is used to keep track of parser * settings when expressions are recursively parsed. * @type {TexParser[]} */ public parsers: TexParser[] = []; /** * The current root node. * @type {MmlNode} */ public root: MmlNode = null; /** * List of node lists saved with respect to some property or their kind. * @type {{[key: string]: MmlNode[]}} */ public nodeLists: {[key: string]: MmlNode[]} = {}; /** * Error state of the parser. * @type {boolean} */ public error: boolean = false; /** * @constructor * @param {Configuration} configuration Configuration object of the current * TeX parser. * @param {OptionList[]} options [TeX options, Tag options, {packages}] */ public constructor(configuration: ParserConfiguration, options: OptionList[] = []) { this.handlers = configuration.handlers; // Add node factory methods from packages. this.nodeFactory = new NodeFactory(); this.nodeFactory.configuration = this; this.nodeFactory.setCreators(configuration.nodes); // Add stackitems from packages. this.itemFactory = new StackItemFactory(configuration.items); this.itemFactory.configuration = this; // Set default options for parser from packages and for tags. defaultOptions(this.options, ...options); defaultOptions(this.options, configuration.options); } // Methods for dealing with ephemeral fields. /** * Pushes a new tex parser onto the stack. * @param {TexParser} parser The new parser. */ public pushParser(parser: TexParser) { this.parsers.unshift(parser); } /** * Pops a parser of the tex parser stack. */ public popParser() { this.parsers.shift(); } /** * @return {TexParser} The currently active tex parser. */ public get parser(): TexParser { return this.parsers[0]; } /** * Clears all the ephemeral options. */ public clear() { this.parsers = []; this.root = null; this.nodeLists = {}; this.error = false; this.tags.resetTag(); } /** * Saves a tree node to a list of nodes for post processing. * @param {string} property The property name that will be used for * postprocessing. * @param {MmlNode} node The node to save. */ public addNode(property: string, node: MmlNode) { let list = this.nodeLists[property]; if (!list) { list = this.nodeLists[property] = []; } list.push(node); if (node.kind !== property) { // // If the list is not just for its kind, record that it is in this list // so that if it is copied, the copy can also be added to the list. // const inlists = (NodeUtil.getProperty(node, 'in-lists') as string || ''); const lists = (inlists ? inlists.split(/,/) : []).concat(property).join(','); NodeUtil.setProperty(node, 'in-lists', lists); } } /** * Gets a saved node list with respect to a given property. It first ensures * that all the nodes are "live", i.e., actually live in the current * tree. Sometimes nodes are created, saved in the node list but discarded * later in the parsing. These will be filtered out here. * * NB: Do not use this method before the root field of the options is * set. Otherwise, your node list will always be empty! * @param {string} property The property for which to retrieve the node list. */ public getList(property: string) { let list = this.nodeLists[property] || []; let result = []; for (let node of list) { if (this.inTree(node)) { result.push(node); } } this.nodeLists[property] = result; return result; } /** * Remove a list of nodes from a saved list (e.g., when a filter removes the * node from the DOM, like for munderover => munder). * * @param {string} property The property from which to remove nodes. * @param {MmlNode[]} nodes The nodes to remove. */ public removeFromList(property: string, nodes: MmlNode[]) { const list = this.nodeLists[property] || []; for (const node of nodes) { const i = list.indexOf(node); if (i >= 0) { list.splice(i, 1); } } } /** * Tests if the node is in the tree spanned by the current root node. * @param {MmlNode} node The node to test. */ private inTree(node: MmlNode) { while (node && node !== this.root) { node = node.parent; } return !!node; } } MathJax-src-3.2.2/ts/input/tex/ParseUtil.ts000066400000000000000000000621061425015521000205040ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2009-2022 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 A namespace for utility functions for the TeX Parser. * * @author v.sorge@mathjax.org (Volker Sorge) */ import {TEXCLASS, MmlNode} from '../../core/MmlTree/MmlNode.js'; import {EnvList} from './StackItem.js'; import {ArrayItem} from './base/BaseItems.js'; import ParseOptions from './ParseOptions.js'; import NodeUtil from './NodeUtil.js'; import TexParser from './TexParser.js'; import TexError from './TexError.js'; import {entities} from '../../util/Entities.js'; import {MmlMunderover} from '../../core/MmlTree/MmlNodes/munderover.js'; namespace ParseUtil { // TODO (VS): Combine some of this with lengths in util. const emPerInch = 7.2; const pxPerInch = 72; // Note, the following are TeX CM font values. const UNIT_CASES: {[key: string]: ((m: number) => number)} = { 'em': m => m, 'ex': m => m * .43, 'pt': m => m / 10, // 10 pt to an em 'pc': m => m * 1.2, // 12 pt to a pc 'px': m => m * emPerInch / pxPerInch, 'in': m => m * emPerInch, 'cm': m => m * emPerInch / 2.54, // 2.54 cm to an inch 'mm': m => m * emPerInch / 25.4, // 10 mm to a cm 'mu': m => m / 18, }; const num = '([-+]?([.,]\\d+|\\d+([.,]\\d*)?))'; const unit = '(pt|em|ex|mu|px|mm|cm|in|pc)'; const dimenEnd = RegExp('^\\s*' + num + '\\s*' + unit + '\\s*$'); const dimenRest = RegExp('^\\s*' + num + '\\s*' + unit + ' ?'); /** * Matches for a dimension argument. * @param {string} dim The argument. * @param {boolean} rest Allow for trailing garbage in the dimension string. * @return {[string, string, number]} The match result as (Anglosaxon) value, * unit name, length of matched string. The latter is interesting in the * case of trailing garbage. */ export function matchDimen( dim: string, rest: boolean = false): [string, string, number] { 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', length]; } /** * Convert a dimension string into standard em dimension. * @param {string} dim The attribute string. * @return {number} The numerical value. */ export function dimen2em(dim: string): number { let [value, unit] = matchDimen(dim); let m = parseFloat(value || '1'); let func = UNIT_CASES[unit]; return func ? func(m) : 0; } /** * Turns a number into an em value. * @param {number} m The number. * @return {string} The em dimension string. */ export function Em(m: number): string { if (Math.abs(m) < .0006) { return '0em'; } return m.toFixed(3).replace(/\.?0+$/, '') + 'em'; } /** * Takes an array of numbers and returns a space-separated string of em values. * @param {number[]} W The widths to be turned into em values * @return {string} The numbers with em units, separated by spaces. */ export function cols(...W: number[]): string { return W.map(n => Em(n)).join(' '); } /** * Create an mrow that has stretchy delimiters at either end, as needed * @param {ParseOptions} configuration Current parse options. * @param {string} open The opening fence. * @param {MmlNode} mml The enclosed node. * @param {string} close The closing fence. * @param {string=} big Bigg command. */ export function fenced(configuration: ParseOptions, open: string, mml: MmlNode, close: string, big: string = '', color: string = '') { // @test Fenced, Fenced3 let nf = configuration.nodeFactory; let mrow = nf.create('node', 'mrow', [], {open: open, close: close, texClass: TEXCLASS.INNER}); let mo; if (big) { mo = new TexParser('\\' + big + 'l' + open, configuration.parser.stack.env, configuration).mml(); } else { let openNode = nf.create('text', open); mo = nf.create('node', 'mo', [], {fence: true, stretchy: true, symmetric: true, texClass: TEXCLASS.OPEN}, openNode); } NodeUtil.appendChildren(mrow, [mo, mml]); if (big) { mo = new TexParser('\\' + big + 'r' + close, configuration.parser.stack.env, configuration).mml(); } else { let closeNode = nf.create('text', close); mo = nf.create('node', 'mo', [], {fence: true, stretchy: true, symmetric: true, texClass: TEXCLASS.CLOSE}, closeNode); } color && mo.attributes.set('mathcolor', color); NodeUtil.appendChildren(mrow, [mo]); return mrow; } /** * Create an mrow that has \\mathchoice using \\bigg and \\big for the delimiters. * @param {ParseOptions} configuration The current parse options. * @param {string} open The opening fence. * @param {MmlNode} mml The enclosed node. * @param {string} close The closing fence. * @return {MmlNode} The mrow node. */ export function fixedFence(configuration: ParseOptions, open: string, mml: MmlNode, close: string): MmlNode { // @test Choose, Over With Delims, Above with Delims let mrow = configuration.nodeFactory.create('node', 'mrow', [], {open: open, close: close, texClass: TEXCLASS.ORD}); if (open) { NodeUtil.appendChildren(mrow, [mathPalette(configuration, open, 'l')]); } if (NodeUtil.isType(mml, 'mrow')) { NodeUtil.appendChildren(mrow, NodeUtil.getChildren(mml)); } else { NodeUtil.appendChildren(mrow, [mml]); } if (close) { NodeUtil.appendChildren(mrow, [mathPalette(configuration, close, 'r')]); } return mrow; } /** * Generates a mathchoice element for fences. These will be resolved later, * once the position, and therefore size, of the of the fenced expression is * known. * @param {ParseOptions} configuration The current parse otpions. * @param {string} fence The fence. * @param {string} side The side of the fence (l or r). * @return {MmlNode} The mathchoice node. */ export function mathPalette(configuration: ParseOptions, fence: string, side: string): MmlNode { if (fence === '{' || fence === '}') { fence = '\\' + fence; } let D = '{\\bigg' + side + ' ' + fence + '}'; let T = '{\\big' + side + ' ' + fence + '}'; return new TexParser('\\mathchoice' + D + T + T + T, {}, configuration).mml(); } /** * 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 options. * @param {MmlNode[]} 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++) { let child = nodes[i]; if (child && (!NodeUtil.isType(child, 'mspace') && (!NodeUtil.isType(child, 'TeXAtom') || (NodeUtil.getChildren(child)[0] && NodeUtil.getChildren(NodeUtil.getChildren(child)[0]).length)))) { if (NodeUtil.isEmbellished(child) || (NodeUtil.isType(child, 'TeXAtom') && NodeUtil.getTexClass(child) === TEXCLASS.REL)) { let mi = configuration.nodeFactory.create('node', 'mi'); nodes.unshift(mi); } break; } } } /** * 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. * @param {string} font The mathvariant to use * @return {MmlNode[]} The nodes corresponding to the internal math expression. */ export function internalMath(parser: TexParser, text: string, level?: number | string, font?: string): MmlNode[] { if (parser.configuration.options.internalMath) { return parser.configuration.options.internalMath(parser, text, level, font); } let mathvariant = font || parser.stack.env.font; let def = (mathvariant ? {mathvariant} : {}); let mml: MmlNode[] = [], i = 0, k = 0, c, node, match = '', braces = 0; if (text.match(/\\?[${}\\]|\\\(|\\(eq)?ref\s*\{/)) { while (i < text.length) { c = text.charAt(i++); if (c === '$') { if (match === '$' && braces === 0) { // @test Interspersed Text node = parser.create( 'node', 'TeXAtom', [(new TexParser(text.slice(k, i - 1), {}, parser.configuration)).mml()]); mml.push(node); match = ''; k = i; } else if (match === '') { // @test Interspersed Text if (k < i - 1) { // @test Interspersed Text mml.push(internalText(parser, text.slice(k, i - 1), def)); } match = '$'; k = i; } } else if (c === '{' && match !== '') { // @test Mbox Mbox, Mbox Math braces++; } else if (c === '}') { // @test Mbox Mbox, Mbox Math if (match === '}' && braces === 0) { // @test Mbox Eqref, Mbox Math let atom = (new TexParser(text.slice(k, i), {}, parser.configuration)).mml(); node = parser.create('node', 'TeXAtom', [atom], def); mml.push(node); match = ''; k = i; } else if (match !== '') { // @test Mbox Math, Mbox Mbox if (braces) { // @test Mbox Math, Mbox Mbox braces--; } } } else if (c === '\\') { // @test Mbox Eqref, Mbox CR if (match === '' && text.substr(i).match(/^(eq)?ref\s*\{/)) { // @test Mbox Eqref let len = ((RegExp as any)['$&'] as string).length; if (k < i - 1) { // @test Mbox Eqref mml.push(internalText(parser, text.slice(k, i - 1), def)); } match = '}'; k = i - 1; i += len; } else { // @test Mbox CR, Mbox Mbox c = text.charAt(i++); if (c === '(' && match === '') { // @test Mbox Internal Display if (k < i - 2) { // @test Mbox Internal Display mml.push(internalText(parser, text.slice(k, i - 2), def)); } match = ')'; k = i; } else if (c === ')' && match === ')' && braces === 0) { // @test Mbox Internal Display node = parser.create( 'node', 'TeXAtom', [(new TexParser(text.slice(k, i - 2), {}, parser.configuration)).mml()]); mml.push(node); match = ''; k = i; } else if (c.match(/[${}\\]/) && match === '') { // @test Mbox CR i--; text = text.substr(0, i - 1) + text.substr(i); // remove \ from \$, \{, \}, or \\ } } } } if (match !== '') { // @test Internal Math Error throw new TexError('MathNotTerminated', 'Math not terminated in text box'); } } if (k < text.length) { // @test Interspersed Text, Mbox Mbox mml.push(internalText(parser, text.slice(k), def)); } if (level != null) { // @test Label, Fbox, Hbox mml = [parser.create('node', 'mstyle', mml, {displaystyle: false, scriptlevel: level})]; } else if (mml.length > 1) { // @test Interspersed Text mml = [parser.create('node', 'mrow', mml)]; } return mml; } /** * Parses text internal to boxes or labels. * @param {TexParser} parser The current tex parser. * @param {string} text The text to parse. * @param {EnvList} def The attributes of the text node. * @return {MmlNode} The text node. */ export function internalText(parser: TexParser, text: string, def: EnvList): MmlNode { // @test Label, Fbox, Hbox text = text.replace(/^\s+/, entities.nbsp).replace(/\s+$/, entities.nbsp); let textNode = parser.create('text', text); return parser.create('node', 'mtext', [], def, textNode); } /** * Create an munderover node with the given script position. * @param {TexParser} parser The current TeX parser. * @param {MmlNode} base The base node. * @param {MmlNode} script The under- or over-script. * @param {string} pos Either 'over' or 'under'. * @param {boolean} stack True if super- or sub-scripts should stack. * @return {MmlNode} The generated node (MmlMunderover or TeXAtom) */ export function underOver(parser: TexParser, base: MmlNode, script: MmlNode, pos: string, stack: boolean): MmlNode { // @test Overline ParseUtil.checkMovableLimits(base); if (NodeUtil.isType(base, 'munderover') && NodeUtil.isEmbellished(base)) { // @test Overline Limits NodeUtil.setProperties(NodeUtil.getCoreMO(base), {lspace: 0, rspace: 0}); const mo = parser.create('node', 'mo', [], {rspace: 0}); base = parser.create('node', 'mrow', [mo, base]); // TODO? add an empty so it's not embellished any more } const mml = parser.create('node', 'munderover', [base]) as MmlMunderover; NodeUtil.setChild(mml, pos === 'over' ? mml.over : mml.under, script); let node: MmlNode = mml; if (stack) { // @test Overbrace 1 2 3, Underbrace, Overbrace Op 1 2 node = parser.create('node', 'TeXAtom', [mml], {texClass: TEXCLASS.OP, movesupsub: true}); } NodeUtil.setProperty(node, 'subsupOK', true); return node; } /** * Set movablelimits to false if necessary. * @param {MmlNode} base The base node being tested. */ export function checkMovableLimits(base: MmlNode) { const symbol = (NodeUtil.isType(base, 'mo') ? NodeUtil.getForm(base) : null); if (NodeUtil.getProperty(base, 'movablelimits') || (symbol && symbol[3] && symbol[3].movablelimits)) { // @test Overline Sum NodeUtil.setProperties(base, {movablelimits: false}); } } /** * Trim spaces from a string. * @param {string} text The string to clean. * @return {string} The string with leading and trailing whitespace removed. */ export function trimSpaces(text: string): string { if (typeof(text) !== 'string') { return text; } let TEXT = text.trim(); if (TEXT.match(/\\$/) && text.match(/ $/)) { TEXT += ' '; } return TEXT; } /** * Sets alignment in array definitions. * @param {ArrayItem} array The array item. * @param {string} align The alignment string. * @return {ArrayItem} The altered array item. */ export function setArrayAlign(array: ArrayItem, align: string): ArrayItem { // @test Array1, Array2, Array Test align = ParseUtil.trimSpaces(align || ''); if (align === 't') { array.arraydef.align = 'baseline 1'; } else if (align === 'b') { array.arraydef.align = 'baseline -1'; } else if (align === 'c') { array.arraydef.align = 'axis'; } else if (align) { array.arraydef.align = align; } // FIXME: should be an error? return array; } /** * Replace macro parameters with their values. * @param {TexParser} parser The current TeX parser. * @param {string[]} args A list of arguments for macro parameters. * @param {string} str The macro parameter string. * @return {string} The string with all parameters replaced by arguments. */ export function substituteArgs(parser: TexParser, args: string[], str: string): string { let text = ''; let newstring = ''; let i = 0; while (i < str.length) { let c = str.charAt(i++); if (c === '\\') { text += c + str.charAt(i++); } else if (c === '#') { c = str.charAt(i++); if (c === '#') { text += c; } else { if (!c.match(/[1-9]/) || parseInt(c, 10) > args.length) { throw new TexError('IllegalMacroParam', 'Illegal macro parameter reference'); } newstring = addArgs(parser, addArgs(parser, newstring, text), args[parseInt(c, 10) - 1]); text = ''; } } else { text += c; } } return addArgs(parser, newstring, text); } /** * Adds a new expanded argument to an already macro parameter string. Makes * sure that macros are followed by a space if their names could accidentally * be continued into the following text. * @param {TexParser} parser The current TeX parser. * @param {string} s1 The already expanded string. * @param {string} s2 The string to add. * @return {string} The combined string. */ export function addArgs(parser: TexParser, s1: string, s2: string): string { if (s2.match(/^[a-z]/i) && s1.match(/(^|[^\\])(\\\\)*\\[a-z]+$/i)) { s1 += ' '; } if (s1.length + s2.length > parser.configuration.options['maxBuffer']) { throw new TexError('MaxBufferSize', 'MathJax internal buffer size exceeded; is there a' + ' recursive macro call?'); } return s1 + s2; } /** * Report an error if there are too many macro substitutions. * @param {TexParser} parser The current TeX parser. * @param {boolean} isMacro True if we are substituting a macro, false for environment. */ export function checkMaxMacros(parser: TexParser, isMacro: boolean = true) { if (++parser.macroCount <= parser.configuration.options['maxMacros']) { return; } if (isMacro) { throw new TexError('MaxMacroSub1', 'MathJax maximum macro substitution count exceeded; ' + 'is here a recursive macro call?'); } else { throw new TexError('MaxMacroSub2', 'MathJax maximum substitution count exceeded; ' + 'is there a recursive latex environment?'); } } /** * Check for bad nesting of equation environments */ export function checkEqnEnv(parser: TexParser) { if (parser.stack.global.eqnenv) { // @test ErroneousNestingEq throw new TexError('ErroneousNestingEq', 'Erroneous nesting of equation structures'); } parser.stack.global.eqnenv = true; } /** * Copy an MmlNode and add it (and its children) to the proper lists. * * @param {MmlNode} node The MmlNode to copy * @param {TexParser} parser The active tex parser * @return {MmlNode} The duplicate tree */ export function copyNode(node: MmlNode, parser: TexParser): MmlNode { const tree = node.copy() as MmlNode; const options = parser.configuration; tree.walkTree((n: MmlNode) => { options.addNode(n.kind, n); const lists = (n.getProperty('in-lists') as string || '').split(/,/); for (const list of lists) { list && options.addNode(list, n); } }); return tree; } /** * This is a placeholder for future security filtering of attributes. * @param {TexParser} parser The current parser. * @param {string} name The attribute name. * @param {string} value The attribute value to filter. * @return {string} The filtered value. */ export function MmlFilterAttribute(_parser: TexParser, _name: string, value: string): string { // TODO: Implement in security package. return value; } /** * Initialises an stack environment with current font definition in the parser. * @param {TexParser} parser The current tex parser. * @return {EnvList} The initialised environment list. */ export function getFontDef(parser: TexParser): EnvList { const font = parser.stack.env['font']; return (font ? {mathvariant: font} : {}); } /** * Splits a package option list of the form [x=y,z=1] into an attribute list * of the form {x: y, z: 1}. * @param {string} attrib The attributes of the package. * @param {{[key: string]: number}?} allowed A list of allowed options. If * given only allowed arguments are returned. * @param {boolean?} error If true, raises an exception if not allowed options * are found. * @return {EnvList} The attribute list. */ export function keyvalOptions(attrib: string, allowed: {[key: string]: number} = null, error: boolean = false): EnvList { let def: EnvList = readKeyval(attrib); if (allowed) { for (let key of Object.keys(def)) { if (!allowed.hasOwnProperty(key)) { if (error) { throw new TexError('InvalidOption', 'Invalid option: %1', key); } delete def[key]; } } } return def; } /** * Implementation of the keyval function from https://www.ctan.org/pkg/keyval * @param {string} text The optional parameter string for a package or * command. * @return {EnvList} Set of options as key/value pairs. */ function readKeyval(text: string): EnvList { let options: EnvList = {}; let rest = text; let end, key, val; while (rest) { [key, end, rest] = readValue(rest, ['=', ',']); if (end === '=') { [val, end, rest] = readValue(rest, [',']); val = (val === 'false' || val === 'true') ? JSON.parse(val) : val; options[key] = val; } else if (key) { options[key] = true; } } return options; } /** * Removes pairs of outer braces. * @param {string} text The string to clean. * @param {number} count The number of outer braces to slice off. * @return {string} The cleaned string. */ function removeBraces(text: string, count: number): string { while (count > 0) { text = text.trim().slice(1, -1); count--; } return text.trim(); } /** * Read a value from the given string until an end parameter is reached or * string is exhausted. * @param {string} text The string to process. * @param {string[]} end List of possible end characters. * @return {[string, string, string]} The collected value, the actual end * character, and the rest of the string still to parse. */ function readValue(text: string, end: string[]): [string, string, string] { let length = text.length; let braces = 0; let value = ''; let index = 0; let start = 0; // Counter for the starting left braces. let startCount = true; // Flag for counting starting left braces. let stopCount = false; // If true right braces are found directly // after starting braces, but no other char yet. while (index < length) { let c = text[index++]; switch (c) { case ' ': // Ignore spaces. break; case '{': if (startCount) { // Count start left braces at start. start++; } else { stopCount = false; if (start > braces) { // Some start left braces have been closed. start = braces; } } braces++; break; case '}': if (braces) { // Closing braces. braces--; } if (startCount || stopCount) { // Closing braces at the start. start--; stopCount = true; // Continue to close braces. } startCount = false; // Stop counting start left braces. break; default: if (!braces && end.indexOf(c) !== -1) { // End character reached. return [stopCount ? 'true' : // If Stop count is true we // have balanced braces, only. removeBraces(value, start), c, text.slice(index)]; } startCount = false; stopCount = false; } value += c; } if (braces) { throw new TexError('ExtraOpenMissingClose', 'Extra open brace or missing close brace'); } return [stopCount ? 'true' : removeBraces(value, start), '', text.slice(index)]; } } export default ParseUtil; MathJax-src-3.2.2/ts/input/tex/Stack.ts000066400000000000000000000076631425015521000176500ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2009-2022 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 The Stack for the TeX parser. * * @author v.sorge@mathjax.org (Volker Sorge) */ import NodeUtil from './NodeUtil.js'; import {MmlNode} from '../../core/MmlTree/MmlNode.js'; import {StackItem, EnvList} from './StackItem.js'; import StackItemFactory from './StackItemFactory.js'; export default class Stack { /** * @type {EnvList} */ public global: EnvList = {}; /** * The actual stack, a list of stack items. * @type {Array.} */ private stack: StackItem[] = []; /** * @constructor * @param {StackItemFactory} factory The stack item factory. * @param {EnvList} env The environment. * @param {boolean} inner True if parser has been called recursively. */ constructor(private _factory: StackItemFactory, private _env: EnvList, inner: boolean) { this.global = {isInner: inner}; this.stack = [ this._factory.create('start', this.global) ]; if (_env) { this.stack[0].env = _env; } this.env = this.stack[0].env; } /** * Set the environment of the stack. * @param {EnvList} env The new environment. */ public set env(env: EnvList) { this._env = env; } /** * Retrieves the environment of that stack. * @return {EnvList} The current environment. */ public get env(): EnvList { return this._env; } /** * Pushes items or nodes onto stack. * @param {...StackItem|MmlNode} args A list of items to push. */ public Push(...args: (StackItem | MmlNode)[]) { for (const node of args) { if (!node) { continue; } const item = NodeUtil.isNode(node) ? this._factory.create('mml', node) : node as StackItem; item.global = this.global; const [top, success] = this.stack.length ? this.Top().checkItem(item) : [null, true]; if (!success) { continue; } if (top) { this.Pop(); this.Push(...top); continue; } this.stack.push(item); if (item.env) { if (item.copyEnv) { Object.assign(item.env, this.env); } this.env = item.env; } else { item.env = this.env; } } } /** * Pop the topmost elements off the stack. * @return {StackItem} A stack item. */ public Pop(): StackItem { const item = this.stack.pop(); if (!item.isOpen) { delete item.env; } this.env = (this.stack.length ? this.Top().env : {}); return item; } /** * Lookup the nth elements on the stack without removing them. * @param {number=} n Position of element that should be returned. Default 1. * @return {StackItem} Nth item on the stack. */ public Top(n: number = 1): StackItem { return this.stack.length < n ? null : this.stack[this.stack.length - n]; } /** * Lookup the topmost element on the stack, returning the Mml node in that * item. Optionally pops the Mml node from that stack item. * @param {boolean=} noPop Pop top item if true. * @return {MmlNode} The Mml node in the topmost stack item. */ public Prev(noPop?: boolean): MmlNode | void { const top = this.Top(); return noPop ? top.First : top.Pop(); } /** * @override */ public toString() { return 'stack[\n ' + this.stack.join('\n ') + '\n]'; } } MathJax-src-3.2.2/ts/input/tex/StackItem.ts000066400000000000000000000301231425015521000204520ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2009-2022 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 Stack items hold information on the TexParser stack. * * @author v.sorge@mathjax.org (Volker Sorge) */ import {MmlNode} from '../../core/MmlTree/MmlNode.js'; import {FactoryNodeClass} from '../../core/Tree/Factory.js'; import TexError from './TexError.js'; import StackItemFactory from './StackItemFactory.js'; // Union types for abbreviation. export type EnvProp = string | number | boolean; export type EnvList = {[key: string]: EnvProp}; // This is the type for all fields that used to be set with With. export type Prop = string | number | boolean | MmlNode | PropList; export type PropList = {[key: string]: Prop}; export type CheckType = [(MmlNode | StackItem)[], boolean]; export interface NodeStack { /** * Get or set the topmost element on the node stack without removing it. * @return {MmlNode} The topmost node on the stack. */ First: MmlNode; /** * Get or set the last element on the node stack without removing it. * @return {MmlNode} The last node on the stack. */ Last: MmlNode; /** * @return {MmlNode} The topmost node on the item's node stack. */ Pop(): MmlNode | void; /** * Pushes new nodes onto the items node stack. * @param {MmlNode[]} ...nodes A list of nodes. */ Push(...nodes: MmlNode[]): void; /** * Get the top n elements on the node stack without removing them. * @param {number=} n Number of elements that should be returned. * @return {MmlNode[]} List of nodes on top of stack. */ Peek(n?: number): MmlNode[]; /** * @return {number} The size of the stack. */ Size(): number; /** * Clears the stack. */ Clear(): void; /** * Returns nodes on the stack item's node stack as an Mml node. I.e., in case * the item contains more than one node, it creates an mrow. * @param {boolean=} inferred If set the mrow will be an inferred mrow. * @param {boolean=} forceRow If set an mrow will be created, regardless of * how many nodes the item contains. * @return {MmlNode} The topmost Mml node. */ toMml(inferred?: boolean, forceRow?: boolean): MmlNode; } export abstract class MmlStack implements NodeStack { /** * @constructor * @extends {NodeStack} * @param {MmlNode[]} nodes An initial list of nodes to put on the stack. */ constructor(private _nodes: MmlNode[]) { } /** * @return {MmlNode[]} The nodes on the stack. */ protected get nodes(): MmlNode[] { return this._nodes; } /** * @override */ public Push(...nodes: MmlNode[]) { this._nodes.push(...nodes); } /** * @override */ public Pop(): MmlNode { return this._nodes.pop(); } /** * @override */ public get First(): MmlNode { return this._nodes[this.Size() - 1]; } /** * @override */ public set First(node: MmlNode) { this._nodes[this.Size() - 1] = node; } /** * @override */ public get Last(): MmlNode { return this._nodes[0]; } /** * @override */ public set Last(node: MmlNode) { this._nodes[0] = node; } /** * @override */ public Peek(n?: number): MmlNode[] { if (n == null) { n = 1; } return this._nodes.slice(this.Size() - n); } /** * @override */ public Size(): number { return this._nodes.length; } /** * @override */ public Clear(): void { this._nodes = []; } protected abstract get factory(): StackItemFactory; /** * @override */ public toMml(inferred: boolean = true, forceRow?: boolean) { if (this._nodes.length === 1 && !forceRow) { return this.First; } // @test Two Identifiers return this.create( 'node', inferred ? 'inferredMrow' : 'mrow', this._nodes, {}); } /** * Convenience method to create nodes with the node factory on this stack. * @param {string} kind The kind of node to create. * @param {any[]} ...rest The remaining arguments for the creation method. * @return {MmlNode} The newly created node. */ public create(kind: string, ...rest: any[]): MmlNode { return this.factory.configuration.nodeFactory.create(kind, ...rest); } } export interface StackItem extends NodeStack { /** * Type of stack item. * @type {string} */ kind: string; /** * Is this a closing item, e.g., end. * @type {boolean} */ isClose: boolean; /** * Is this an opening item, e.g., begin. * @type {boolean} */ isOpen: boolean; /** * Is this a finalising item, i.e., one that only collects nodes. * @type {boolean} */ isFinal: boolean; /** * Global properties of the parser. * @type {EnvList} */ global: EnvList; /** * Local properties of the stack item. * @type {EnvList} */ env: EnvList; /** * Copy local properties when pushed to stack? * @type {boolean} */ copyEnv: boolean; /** * Tests if item is of the given type. * @param {string} kind The type. * @return {boolean} True if item is of that type. */ isKind(kind: string): boolean; /** * Get a property of the item. * @param {string} key Property name. * @return {Prop} Property value if it exists. */ getProperty(key: string): Prop; /** * Set a property. * @param {string} key Property name. * @param {Prop} value Property value. * @return {StackItem} The item for pipelining. */ setProperty(key: string, value: Prop): StackItem; /** * Sets a list of properties. * @param {PropList} def The properties to set. * @return {StackItem} Returns the stack item object for pipelining. */ setProperties(def: PropList): StackItem; /** * Convenience method for returning the string property "name". * @return {string} The value for the name property. */ getName(): string; /** * TeX parsing in MathJax is essentially implemented via a nested stack * automaton. That is the tex parser works on a stack, and each item on the * stack can have a data stack of its own. Data on the stack is either a stack * item or a node. * * The checkItem method effectively implements the recursive checking of * input data from the parser against data recursively given on the stack. * * I.e., new input is parsed resulting in a new item. When pushed on the stack * it is checked against the top most item on the stack. This either leads to * the item being pushed onto the stack or combined with the top most * element(s), pushing a new item, which is recursively checked, unless an * error is thrown. * * A simple example: If \\end{foo} is parsed, an endItem is created, pushed on * the stack. Nodes on the stack are collapsed into content of the 'foo' * environment, until a beginItem for 'foo' is found. If a beginItem is not * for 'foo' or does not exist an error is thrown. * * @param {StackItem} item The pushed item. * @return {CheckType} True/false or an item or node. */ checkItem(item: StackItem): CheckType; } export interface StackItemClass extends FactoryNodeClass { // new (factory: StackItemFactory, ...args: any[]): StackItem; } /** * Abstract basic item class that implements most of the stack item * functionality. In particular, it contains the base method for checkItem. */ export abstract class BaseItem extends MmlStack implements StackItem { /** * The fail value. * @type {CheckType} */ protected static fail: CheckType = [null, false]; /** * The success value. * @type {CheckType} */ protected static success: CheckType = [null, true]; /** * A list of basic errors. * @type {{[key: string]: string[]}} */ protected static errors: {[key: string]: string[]} = { // @test ExtraOpenMissingClose end: ['MissingBeginExtraEnd', 'Missing \\begin{%1} or extra \\end{%1}'], // @test ExtraCloseMissingOpen close: ['ExtraCloseMissingOpen', 'Extra close brace or missing open brace'], // @test MissingLeftExtraRight right: ['MissingLeftExtraRight', 'Missing \\left or extra \\right'], middle: ['ExtraMiddle', 'Extra \\middle'] }; /** * @override */ public global: EnvList = {}; private _env: EnvList; private _properties: PropList = {}; /** * @constructor * @extends {MmlStack} */ constructor(protected factory: StackItemFactory, ...nodes: MmlNode[]) { super(nodes); if (this.isOpen) { this._env = {}; } } /** * @return {string} The type of the stack item. */ public get kind(): string { return 'base'; } /** * @return {EnvList} Get the private environment */ public get env(): EnvList { return this._env; } /** * Set the private environment * @param {EnvList} value New private environemt. */ public set env(value: EnvList) { this._env = value; } /** * Default is to copy local environment when pushed on stack */ public get copyEnv() { return true; } /** * @override */ public getProperty(key: string): Prop { return this._properties[key]; } /** * @override */ public setProperty(key: string, value: Prop) { this._properties[key] = value; return this; } /** * @return {boolean} True if item is an opening entity, i.e., it expects a * closing counterpart on the stack later. */ get isOpen(): boolean { return false; } /** * @return {boolean} True if item is an closing entity, i.e., it needs an * opening counterpart already on the stack. */ get isClose(): boolean { return false; } /** * @return {boolean} True if item is final, i.e., it contains one or multiple * finished parsed nodes. */ get isFinal(): boolean { return false; } /** * @override */ public isKind(kind: string) { return kind === this.kind; } /** * @override */ public checkItem(item: StackItem): CheckType { if (item.isKind('over') && this.isOpen) { item.setProperty('num', this.toMml(false)); this.Clear(); } if (item.isKind('cell') && this.isOpen) { if (item.getProperty('linebreak')) { return BaseItem.fail; } // @test Ampersand-error throw new TexError('Misplaced', 'Misplaced %1', item.getName()); } if (item.isClose && this.getErrors(item.kind)) { // @test ExtraOpenMissingClose, ExtraCloseMissingOpen, // MissingLeftExtraRight, MissingBeginExtraEnd const [id, message] = this.getErrors(item.kind); throw new TexError(id, message, item.getName()); } if (!item.isFinal) { return BaseItem.success; } this.Push(item.First); return BaseItem.fail; } /** * Clears the item's environment. */ public clearEnv() { for (const id of Object.keys(this.env)) { delete this.env[id]; } } /** * @override */ public setProperties(def: PropList) { Object.assign(this._properties, def); return this; } /** * @override */ public getName() { return this.getProperty('name') as string; } /** * @override */ public toString() { return this.kind + '[' + this.nodes.join('; ') + ']'; } /** * Get error messages for a particular types of stack items. This reads error * messages from the static errors object, which can be extended in * subclasses. * @param {string} kind The stack item type. * @return {string[]} The list of arguments for the TeXError. */ public getErrors(kind: string): string[] { const CLASS = (this.constructor as typeof BaseItem); return (CLASS.errors || {})[kind] || BaseItem.errors[kind]; } } MathJax-src-3.2.2/ts/input/tex/StackItemFactory.ts000066400000000000000000000032351425015521000220060ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2009-2022 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 A factory for stack items. This allows particular items to be * overwritten later. * * @author v.sorge@mathjax.org (Volker Sorge) */ import {StackItemClass, StackItem, BaseItem} from './StackItem.js'; import ParseOptions from './ParseOptions.js'; import {AbstractFactory} from '../../core/Tree/Factory.js'; class DummyItem extends BaseItem {} /** * The StackItemFactory is initially populated with the default stack item * classes. They can be changed, deleted or added to, if and when necessary. * * @constructor * @extends {AbstractFactory} */ export default class StackItemFactory extends AbstractFactory { /** * @override */ public static DefaultStackItems: {[kind: string]: StackItemClass} = { [DummyItem.prototype.kind]: DummyItem }; /** * @override */ public defaultKind = 'dummy'; /** * The parser configuration. * @type {ParseOptions} */ public configuration: ParseOptions = null; } MathJax-src-3.2.2/ts/input/tex/Symbol.ts000066400000000000000000000036251425015521000200420ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2017-2022 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 Symbol classes. * * @author v.sorge@mathjax.org (Volker Sorge) */ import {Args, Attributes, ParseMethod} from './Types.js'; /** * Symbol class */ export class Symbol { /** * @constructor * @param {string} symbol The symbol parsed. * @param {string} char The corresponding translation. * @param {Attributes} attributes The attributes for the translation. */ constructor(private _symbol: string, private _char: string, private _attributes: Attributes) { } public get symbol(): string { return this._symbol; } public get char(): string { return this._char; } public get attributes(): Attributes { return this._attributes; } } export class Macro { /** * @constructor * @param {string} symbol The symbol parsed * @param {ParseMethod} func The parsing function for that symbol. * @param {Args[]} args Additional arguments for the function. */ constructor(private _symbol: string, private _func: ParseMethod, private _args: Args[] = []) { } public get symbol(): string { return this._symbol; } public get func(): ParseMethod { return this._func; } public get args(): Args[] { return this._args; } } MathJax-src-3.2.2/ts/input/tex/SymbolMap.ts000066400000000000000000000217521425015521000205010ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2017-2022 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 Symbol map classes. * * @author v.sorge@mathjax.org (Volker Sorge) */ import {Attributes, Args, ParseMethod, ParseInput, ParseResult} from './Types.js'; import {Symbol, Macro} from './Symbol.js'; import {MapHandler} from './MapHandler.js'; /** * SymbolMaps are the base components for the input parsers. * * They provide a contains method that checks if a map is applicable (contains) * a particular string. Implementing classes then perform the actual symbol * parsing, from simple regular expression test, straight forward symbol mapping * to transformational functionality on the parsed string. * * @interface */ export interface SymbolMap { /** * @return {string} The name of the map. */ name: string; /** * @return {ParseMethod} The default parsing method. */ parser: ParseMethod; /** * @param {string} symbol A symbol to parse. * @return {boolean} True if the symbol map applies to the symbol. */ contains(symbol: string): boolean; /** * @param {string} symbol A symbol to parse. * @return {ParseMethod} A parse method for the symbol. */ parserFor(symbol: string): ParseMethod; /** * @param {TexParser} env The current parser. * @param {string} symbol A symbol to parse. * @return {ParseResult} The parsed symbol and the rest of the string. */ parse([env, symbol]: ParseInput): ParseResult; } /** * @param {ParseResult} result The result to check * @return {ParseResult} True if result was void, result otherwise */ export function parseResult(result: ParseResult): ParseResult { return result === void 0 ? true : result; } /** * Abstract implementation of symbol maps. * @template T */ export abstract class AbstractSymbolMap implements SymbolMap { /** * @constructor * @implements {SymbolMap} * @param {string} name Name of the mapping. * @param {ParseMethod} parser The parser for the mappiong. */ constructor(private _name: string, private _parser: ParseMethod) { MapHandler.register(this); } /** * @override */ public get name(): string { return this._name; } /** * @override */ public abstract contains(symbol: string): boolean; /** * @override */ public parserFor(symbol: string) { return this.contains(symbol) ? this.parser : null; } /** * @override */ public parse([env, symbol]: ParseInput) { let parser = this.parserFor(symbol); let mapped = this.lookup(symbol); return (parser && mapped) ? parseResult(parser(env, mapped as any)) : null; } public set parser(parser: ParseMethod) { this._parser = parser; } public get parser(): ParseMethod { return this._parser; } /** * @param {string} symbol * @return {T} */ public abstract lookup(symbol: string): T; } /** * Regular expressions used for parsing strings. */ export class RegExpMap extends AbstractSymbolMap { /** * @constructor * @extends {AbstractSymbolMap} * @param {string} name Name of the mapping. * @param {ParseMethod} parser The parser for the mappiong. * @param {RegExp} regexp The regular expression. */ constructor(name: string, parser: ParseMethod, private _regExp: RegExp) { super(name, parser); } /** * @override */ public contains(symbol: string) { return this._regExp.test(symbol); } /** * @override */ public lookup(symbol: string): string { return this.contains(symbol) ? symbol : null; } } /** * Parse maps associate strings with parsing functionality. * @constructor * @extends {AbstractSymbolMap} * @template K */ export abstract class AbstractParseMap extends AbstractSymbolMap { private map: Map = new Map(); /** * @override */ public lookup(symbol: string): K { return this.map.get(symbol); } /** * @override */ public contains(symbol: string) { return this.map.has(symbol); } /** * Sets mapping for a symbol. * @param {string} symbol The symbol to map. * @param {K} object The symbols value in the mapping's codomain. */ public add(symbol: string, object: K) { this.map.set(symbol, object); } /** * Removes a symbol from the map * @param {string} symbol The symbol to remove */ public remove(symbol: string) { this.map.delete(symbol); } } /** * Maps symbols that can all be parsed with the same method. * * @constructor * @extends {AbstractParseMap} */ export class CharacterMap extends AbstractParseMap { /** * @constructor * @param {string} name Name of the mapping. * @param {ParseMethod} parser The parser for the mapping. * @param {JSON} json The JSON representation of the character mapping. */ constructor(name: string, parser: ParseMethod, json: {[index: string]: string | [string, Attributes]}) { super(name, parser); for (const key of Object.keys(json)) { let value = json[key]; let [char, attrs] = (typeof(value) === 'string') ? [value, null] : value; let character = new Symbol(key, char, attrs); this.add(key, character); } } } /** * Maps symbols that are delimiters, that are all parsed with the same method. * * @constructor * @extends {CharacterMap} */ export class DelimiterMap extends CharacterMap { /** * @override */ public parse([env, symbol]: ParseInput) { return super.parse([env, '\\' + symbol]); } } /** * Maps macros that all bring their own parsing method. * * @constructor * @extends {AbstractParseMap} */ export class MacroMap extends AbstractParseMap { /** * @constructor * @param {string} name Name of the mapping. * @param {JSON} json The JSON representation of the macro map. * @param {Record} functionMap Collection of parse * functions for the single macros. */ constructor(name: string, json: {[index: string]: string | Args[]}, functionMap: Record) { super(name, null); for (const key of Object.keys(json)) { let value = json[key]; let [func, ...attrs] = (typeof(value) === 'string') ? [value] : value; let character = new Macro(key, functionMap[func as string], attrs); this.add(key, character); } } /** * @override */ public parserFor(symbol: string) { let macro = this.lookup(symbol); return macro ? macro.func : null; } /** * @override */ public parse([env, symbol]: ParseInput) { let macro = this.lookup(symbol); let parser = this.parserFor(symbol); if (!macro || !parser) { return null; } return parseResult(parser(env, macro.symbol, ...macro.args)); } } /** * Maps macros that all bring their own parsing method. * * @constructor * @extends {MacroMap} */ export class CommandMap extends MacroMap { /** * @override */ public parse([env, symbol]: ParseInput) { let macro = this.lookup(symbol); let parser = this.parserFor(symbol); if (!macro || !parser) { return null; } let saveCommand = env.currentCS; env.currentCS = '\\' + symbol; let result = parser(env, '\\' + macro.symbol, ...macro.args); env.currentCS = saveCommand; return parseResult(result); } } /** * Maps macros for environments. It has a general parsing method for * environments, i.e., one that deals with begin/end, and each environment has * its own parsing method returning the content. * * @constructor * @extends {MacroMap} */ export class EnvironmentMap extends MacroMap { /** * @constructor * @param {string} name Name of the mapping. * @param {ParseMethod} parser The parser for the environments. * @param {JSON} json The JSON representation of the macro map. * @param {Record} functionMap Collection of parse * functions for the single macros. */ constructor(name: string, parser: ParseMethod, json: {[index: string]: string | Args[]}, functionMap: Record) { super(name, json, functionMap); this.parser = parser; } /** * @override */ public parse([env, symbol]: ParseInput) { let macro = this.lookup(symbol); let envParser = this.parserFor(symbol); if (!macro || !envParser) { return null; } return parseResult(this.parser(env, macro.symbol, envParser, macro.args)); } } MathJax-src-3.2.2/ts/input/tex/Tags.ts000066400000000000000000000357551425015521000175040ustar00rootroot00000000000000/************************************************************* * * Copyright (c) 2018-2022 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 Class for generating tags, references, etc. * * @author v.sorge@mathjax.org (Volker Sorge) */ import TexParser from './TexParser.js'; import {MmlNode} from '../../core/MmlTree/MmlNode.js'; import {MathItem} from '../../core/MathItem.js'; import {EnvList} from './StackItem.js'; import ParseOptions from './ParseOptions.js'; import {OptionList} from '../../util/Options.js'; /** * Simple class for label objects. */ export class Label { /** * @constructor * @param {string=} tag The tag that's displayed. * @param {string=} id The id that serves as reference. */ constructor(public tag: string = '???', public id: string = '') {} } /** * A simple class for keeping track of tag information. */ export class TagInfo { /** * @constructor * @param {string} env The environment name (e.g., align). * @param {boolean} taggable Environment supports tags (e.g., align* does, but * split does not.) * @param {boolean} defaultTags Environment is tagged by default (e.g., align * is, but align* is not). * @param {string} tag The tag name (e.g., 1). * @param {string} tagId The unique id for that tag (e.g., mjx-eqn:1). * @param {string} tagFormat The formatted tag (e.g., "(1)"). * @param {boolean} noTag A no tagging command has been set (e.g., \notag, * \nonumber). * @param {string} labelId The label referring to the tag. */ constructor(readonly env: string = '', readonly taggable: boolean = false, readonly defaultTags: boolean = false, public tag: string = null, public tagId: string = '', public tagFormat: string = '', public noTag: boolean = false, public labelId: string = '') {} } export interface Tags { /** * The global configurations in which the parsing takes place. * @type {ParseOptions} */ configuration: ParseOptions; /** * IDs used in this equation. * @type {Object.} */ ids: {[key: string]: boolean}; /** * IDs used in previous equations. * @type {Object.} */ allIds: {[key: string]: boolean}; /** * Labels in the current equation. * @type {Object.