mirror of https://github.com/Requarks/wiki.git
NGPixel
4 years ago
8 changed files with 33 additions and 120 deletions
Split View
Diff Options
-
30client/components/admin/admin-rendering.vue
-
4server/graph/resolvers/rendering.js
-
1server/graph/schemas/rendering.graphql
-
8server/models/renderers.js
-
9server/modules/rendering/html-mathjax/definition.yml
-
82server/modules/rendering/html-mathjax/mathjax.js
-
8server/modules/rendering/markdown-mathjax/definition.yml
-
11server/modules/rendering/markdown-mathjax/renderer.js
@ -1,9 +0,0 @@ |
|||
key: htmlMathjax |
|||
title: Mathjax Processor |
|||
description: TeX/MathML Math Equations Parser |
|||
author: requarks.io |
|||
icon: mdi-function-variant |
|||
enabledDefault: false |
|||
dependsOn: htmlCore |
|||
step: pre |
|||
props: {} |
@ -1,82 +0,0 @@ |
|||
const mathjax = require('mathjax-node') |
|||
const _ = require('lodash') |
|||
|
|||
// ------------------------------------
|
|||
// Mathjax
|
|||
// ------------------------------------
|
|||
|
|||
/* global WIKI */ |
|||
|
|||
const mathRegex = [ |
|||
{ |
|||
format: 'TeX', |
|||
regex: /\\\[([\s\S]*?)\\\]/g |
|||
}, |
|||
{ |
|||
format: 'inline-TeX', |
|||
regex: /\\\((.*?)\\\)/g |
|||
}, |
|||
{ |
|||
format: 'MathML', |
|||
regex: /<math([\s\S]*?)<\/math>/g |
|||
} |
|||
] |
|||
|
|||
module.exports = { |
|||
init ($, config) { |
|||
mathjax.config({ |
|||
MathJax: { |
|||
jax: ['input/TeX', 'input/MathML', 'output/SVG'], |
|||
extensions: ['tex2jax.js', 'mml2jax.js'], |
|||
TeX: { |
|||
extensions: ['AMSmath.js', 'AMSsymbols.js', 'noErrors.js', 'noUndefined.js'] |
|||
}, |
|||
SVG: { |
|||
scale: 120, |
|||
font: 'STIX-Web' |
|||
} |
|||
} |
|||
}) |
|||
}, |
|||
async render (content) { |
|||
let matchStack = [] |
|||
let replaceStack = [] |
|||
let currentMatch |
|||
let mathjaxState = {} |
|||
|
|||
_.forEach(mathRegex, mode => { |
|||
do { |
|||
currentMatch = mode.regex.exec(content) |
|||
if (currentMatch) { |
|||
matchStack.push(currentMatch[0]) |
|||
replaceStack.push( |
|||
new Promise((resolve, reject) => { |
|||
mathjax.typeset({ |
|||
math: (mode.format === 'MathML') ? currentMatch[0] : currentMatch[1], |
|||
format: mode.format, |
|||
speakText: false, |
|||
svg: true, |
|||
state: mathjaxState, |
|||
timeout: 30 * 1000 |
|||
}, result => { |
|||
if (!result.errors) { |
|||
resolve(result.svg) |
|||
} else { |
|||
resolve(currentMatch[0]) |
|||
WIKI.logger.warn(result.errors.join(', ')) |
|||
} |
|||
}) |
|||
}) |
|||
) |
|||
} |
|||
} while (currentMatch) |
|||
}) |
|||
|
|||
return (matchStack.length > 0) ? Promise.all(replaceStack).then(results => { |
|||
_.forEach(matchStack, (repMatch, idx) => { |
|||
content = content.replace(repMatch, results[idx]) |
|||
}) |
|||
return content |
|||
}) : Promise.resolve(content) |
|||
} |
|||
} |
@ -1,8 +0,0 @@ |
|||
key: markdownMathjax |
|||
title: Mathjax Preprocessor |
|||
description: Prepare TeX blocks for Mathjax |
|||
author: requarks.io |
|||
icon: mdi-function-variant |
|||
enabledDefault: false |
|||
dependsOn: markdownCore |
|||
props: {} |
@ -1,11 +0,0 @@ |
|||
const mdMathjax = require('markdown-it-mathjax')() |
|||
|
|||
// ------------------------------------
|
|||
// Markdown - Mathjax Preprocessor
|
|||
// ------------------------------------
|
|||
|
|||
module.exports = { |
|||
init (md, conf) { |
|||
md.use(mdMathjax) |
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save