diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index 040bc1b6e..03af37067 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -29,9 +29,9 @@ jobs:
name: Generate Code Docs
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v5
- - uses: pnpm/action-setup@v4
+ - uses: pnpm/action-setup@v5
name: Install pnpm
with:
version: 10
@@ -44,11 +44,11 @@ jobs:
run: pnpm typedoc
- name: Upload artifact
- uses: actions/upload-pages-artifact@v3
+ uses: actions/upload-pages-artifact@v5
with:
# Upload docs folder
path: './docs'
- name: Deploy to GitHub Pages
id: deployment
- uses: actions/deploy-pages@v4
+ uses: actions/deploy-pages@v5
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 8c8d6a72e..bd4092528 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -14,16 +14,16 @@ jobs:
name: Compile and test MathJax
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v5
- - uses: pnpm/action-setup@v4
+ - uses: pnpm/action-setup@v5
name: Install pnpm
with:
version: 10
run_install: false
- name: Install Node.js
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v5
with:
node-version: 24
cache: 'pnpm'
@@ -49,7 +49,7 @@ jobs:
run: pnpm -s test:gh
- name: Upload coverage reports to Codecov
- uses: codecov/codecov-action@v5
+ uses: codecov/codecov-action@v6
with:
token: ${{ secrets.CODECOV_TOKEN }}
slug: mathjax/MathJax-src
diff --git a/package.json b/package.json
index 1c39dd754..bf29dbdfc 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@mathjax/src",
- "version": "4.1.2",
+ "version": "4.1.3",
"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.",
"keywords": [
"MathJax",
@@ -168,9 +168,9 @@
]
},
"dependencies": {
- "@mathjax/mathjax-newcm-font": "4.1.2",
+ "@mathjax/mathjax-newcm-font": "4.1.3",
"mhchemparser": "^4.2.1",
"mj-context-menu": "^1.0.0",
- "speech-rule-engine": "5.0.0-rc.1"
+ "speech-rule-engine": "5.0.0-rc.4"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 99de33ac7..029dda439 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -9,8 +9,8 @@ importers:
.:
dependencies:
'@mathjax/mathjax-newcm-font':
- specifier: 4.1.2
- version: 4.1.2
+ specifier: 4.1.3
+ version: 4.1.3
mhchemparser:
specifier: ^4.2.1
version: 4.2.1
@@ -18,8 +18,8 @@ importers:
specifier: ^1.0.0
version: 1.0.0
speech-rule-engine:
- specifier: 5.0.0-rc.1
- version: 5.0.0-rc.1
+ specifier: 5.0.0-rc.4
+ version: 5.0.0-rc.4
devDependencies:
'@eslint/js':
specifier: ^9.39.2
@@ -91,8 +91,8 @@ importers:
specifier: ^29.7.0
version: 29.7.0
'@mathjax/mathjax-bbm-font-extension':
- specifier: ^4.1.2
- version: 4.1.2
+ specifier: ^4.1.3
+ version: 4.1.3
'@types/jest':
specifier: ^29.5.14
version: 29.5.14
@@ -462,11 +462,11 @@ packages:
'@jridgewell/trace-mapping@0.3.9':
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
- '@mathjax/mathjax-bbm-font-extension@4.1.2':
- resolution: {integrity: sha512-UJdm+Cueut0+FjYZYoBmjZp/Rci17OMyUGsaHoSpZ//1NJ7n4LsJm9/jqAM38UGIuZEcQYbksqIfSJLFu10ncw==}
+ '@mathjax/mathjax-bbm-font-extension@4.1.3':
+ resolution: {integrity: sha512-dhL8qBIA7COFAeB+ypxbmNtb85+E8Xgis1TaUP5SKpYMMhU0wLcbDwgpriZcpca4Jneo7r6Ty4qEN+0yu6FQyw==}
- '@mathjax/mathjax-newcm-font@4.1.2':
- resolution: {integrity: sha512-lZHMjNP2XbABHA3kVn40rbse5ERUeMEmrGH03qLkCwxq4/5Z/eNLr0akw1MmQcqTwCbvkx1BFcmJ7RCfbRlw3Q==}
+ '@mathjax/mathjax-newcm-font@4.1.3':
+ resolution: {integrity: sha512-gzAB3dFHilHX1l5x2xUqRL+1jDQt3Fyza1DkEMVXWC4E8SvsGdlgEza47HYi2WhVcgfkvf4zgUGzuhbq3Pjlew==}
'@pkgr/core@0.2.9':
resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==}
@@ -633,6 +633,7 @@ packages:
'@ungap/structured-clone@1.3.0':
resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
+ deprecated: Potential CWE-502 - Update to 1.3.1 or higher
'@webassemblyjs/ast@1.14.1':
resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==}
@@ -2154,8 +2155,8 @@ packages:
spdx-license-ids@3.0.22:
resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==}
- speech-rule-engine@5.0.0-rc.1:
- resolution: {integrity: sha512-WgxL1K0MXNXW7+4fn11B6rtJ+jZTnCQMkJ44yV3XmFDcpGBqFJrDEHouGuFryqB5hoG1ksE2zlss/m6KOWnbPA==}
+ speech-rule-engine@5.0.0-rc.4:
+ resolution: {integrity: sha512-3dFcH2QtQNhtvUUc09TxoaEK4WG03B9Z57krFG9jocrKykKGu35BhIkWr0vgEAxZZomEWkeluff69y/EbYzP4Q==}
hasBin: true
sprintf-js@1.0.3:
@@ -3040,9 +3041,9 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.5
- '@mathjax/mathjax-bbm-font-extension@4.1.2': {}
+ '@mathjax/mathjax-bbm-font-extension@4.1.3': {}
- '@mathjax/mathjax-newcm-font@4.1.2': {}
+ '@mathjax/mathjax-newcm-font@4.1.3': {}
'@pkgr/core@0.2.9': {}
@@ -4952,7 +4953,7 @@ snapshots:
spdx-license-ids@3.0.22: {}
- speech-rule-engine@5.0.0-rc.1:
+ speech-rule-engine@5.0.0-rc.4:
dependencies:
'@xmldom/xmldom': 0.9.10
commander: 14.0.3
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 3f7e54bfd..b35810fab 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -1,2 +1,4 @@
packages:
- 'testsuite'
+minimumReleaseAgeExclude:
+ - speech-rule-engine@5.0.0-rc.3
diff --git a/testsuite/package.json b/testsuite/package.json
index 99c79921f..9c0d3269a 100644
--- a/testsuite/package.json
+++ b/testsuite/package.json
@@ -18,7 +18,7 @@
},
"dependencies": {
"@jest/globals": "^29.7.0",
- "@mathjax/mathjax-bbm-font-extension": "^4.1.2",
+ "@mathjax/mathjax-bbm-font-extension": "^4.1.3",
"@types/jest": "^29.5.14",
"jest": "^29.7.0",
"ts-jest": "^29.4.6",
diff --git a/testsuite/tests/input/tex/Base.test.ts b/testsuite/tests/input/tex/Base.test.ts
index 6e06df5d7..f31feae31 100644
--- a/testsuite/tests/input/tex/Base.test.ts
+++ b/testsuite/tests/input/tex/Base.test.ts
@@ -4002,6 +4002,36 @@ describe('Complete Array', () => {
expect(tex2mml('\\begin{array}{> {x} c} X \\end{array}')).toMatchSnapshot();
});
+ it('column {cc}', () => {
+ expect(tex2mml('\\begin{array}{{cc}} X Y \\end{array}')).toMatchSnapshot();
+ });
+
+ it('column {c}', () => {
+ expect(tex2mml('\\begin{array}{c{c}} X Y \\end{array}')).toMatchSnapshot();
+ });
+
+ it('column {{c}}', () => {
+ expect(tex2mml('\\begin{array}{{{c}}} X \\end{array}')).toMatchSnapshot();
+ });
+
+ it('column {r}c{l}', () => {
+ expect(tex2mml('\\begin{array}{{r}c{l}} X & Y & Z \\end{array}')).toMatchSnapshot();
+ });
+
+ it('column newline', () => {
+ expect(tex2mml('\\begin{array}{c\nc} X & Y\\end{array}')).toMatchSnapshot();
+ });
+
+ it('column > > c < <', () => {
+ expect(tex2mml('\\begin{array}{>{a}>{b}c<{x}<{y}} X \\end{array}')).toMatchSnapshot();
+ });
+
+ it('column brace errors', () => {
+ expectTexError(tex2mml('\\begin{array}{c{xx}} X Y \\end{array}')).toBe('Illegal pream-token (xx)');
+ expectTexError(tex2mml('\\begin{array}{c{{c}}} X Y \\end{array}')).toBe('Illegal pream-token ({c})');
+ expectTexError(tex2mml('\\begin{array}{c{c{c}}} X Y \\end{array}')).toBe('Illegal pream-token (c{c})');
+ });
+
it('BadPreamToken', () => {
expectTexError('\\begin{array}a').toBe('Illegal pream-token (a)');
});
diff --git a/testsuite/tests/input/tex/__snapshots__/Base.test.ts.snap b/testsuite/tests/input/tex/__snapshots__/Base.test.ts.snap
index bc59e9aa3..23cf581c2 100644
--- a/testsuite/tests/input/tex/__snapshots__/Base.test.ts.snap
+++ b/testsuite/tests/input/tex/__snapshots__/Base.test.ts.snap
@@ -1820,6 +1820,22 @@ exports[`Complete Array column ! | @ 1`] = `
"
`;
+exports[`Complete Array column > > c < < 1`] = `
+""
+`;
+
exports[`Complete Array column > space 1`] = `
""
`;
+exports[`Complete Array column {{c}} 1`] = `
+""
+`;
+
+exports[`Complete Array column {c} 1`] = `
+""
+`;
+
+exports[`Complete Array column {cc} 1`] = `
+""
+`;
+
+exports[`Complete Array column {r}c{l} 1`] = `
+""
+`;
+
exports[`Complete Array column b 1`] = `
""
`;
+exports[`Complete Array column newline 1`] = `
+""
+`;
+
exports[`Complete Array column p 1`] = `
"