mirror of
https://github.com/explosion/spaCy.git
synced 2024-11-14 13:47:13 +03:00
43 lines
1.3 KiB
JavaScript
43 lines
1.3 KiB
JavaScript
|
import { visit } from 'unist-util-visit'
|
||
|
import { replacements } from '../meta/dynamicMeta.mjs'
|
||
|
|
||
|
const prefix = '%%'
|
||
|
|
||
|
// Attaches prefix to the start of the string.
|
||
|
const attachPrefix = (str) => (prefix || '') + str
|
||
|
|
||
|
// RegExp to find any replacement keys.
|
||
|
const regexp = RegExp(
|
||
|
'(' +
|
||
|
Object.keys(replacements)
|
||
|
.map((key) => attachPrefix(key))
|
||
|
.join('|') +
|
||
|
')',
|
||
|
'g'
|
||
|
)
|
||
|
|
||
|
// Removes prefix from the start of the string.
|
||
|
const stripPrefix = (str) => (prefix ? str.replace(RegExp(`^${prefix}`), '') : str)
|
||
|
|
||
|
const replacer = (_match, name) => replacements[stripPrefix(name)]
|
||
|
|
||
|
const remarkFindAndReplace = () => (markdownAST) => {
|
||
|
// Go through all text, html, code, inline code, and links.
|
||
|
visit(markdownAST, ['text', 'html', 'code', 'link'], (node) => {
|
||
|
if (node.type === 'link') {
|
||
|
// For links, the text value is replaced by text node, so we change the
|
||
|
// URL value.
|
||
|
const processedText = node.url.replace(regexp, replacer)
|
||
|
node.url = processedText
|
||
|
} else {
|
||
|
// For all other nodes, replace the node value.
|
||
|
const processedText = node.value.replace(regexp, replacer)
|
||
|
node.value = processedText
|
||
|
}
|
||
|
})
|
||
|
|
||
|
return markdownAST
|
||
|
}
|
||
|
|
||
|
export default remarkFindAndReplace
|