Skip to content

Commit b3310ed

Browse files
committed
Add template literal tag
1 parent c79a430 commit b3310ed

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

dev/lib/index.js

+34
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,12 @@
8080
*/
8181

8282
import assert from 'assert'
83+
import {directiveFromMarkdown} from 'mdast-util-directive'
8384
import {toString} from 'mdast-util-to-string'
8485
import {parse} from 'micromark/lib/parse.js'
8586
import {preprocess} from 'micromark/lib/preprocess.js'
8687
import {postprocess} from 'micromark/lib/postprocess.js'
88+
import {directive} from 'micromark-extension-directive'
8789
import {decodeNumericCharacterReference} from 'micromark-util-decode-numeric-character-reference'
8890
import {decodeString} from 'micromark-util-decode-string'
8991
import {normalizeIdentifier} from 'micromark-util-normalize-identifier'
@@ -1142,3 +1144,35 @@ function extension(combined, extension) {
11421144
}
11431145
}
11441146
}
1147+
1148+
/**
1149+
* @param {TemplateStringsArray} strings
1150+
* @param {...Node} values
1151+
* @returns {Root}
1152+
*/
1153+
export function md(strings, ...values) {
1154+
// Interleve `:expression` between strings.
1155+
const tree = fromMarkdown(strings.join(':expression'), {
1156+
extensions: [directive()],
1157+
mdastExtensions: [directiveFromMarkdown]
1158+
})
1159+
// Swap `:expression` nodes for values.
1160+
visit(tree)
1161+
return tree
1162+
1163+
/**
1164+
* @param {Node} node
1165+
* @returns {void}
1166+
*/
1167+
function visit(node) {
1168+
if ('children' in node) {
1169+
for (const [i, child] of node.children.entries()) {
1170+
if (child.type === 'textDirective' && child.name === 'expression') {
1171+
node.children[i] = /** @type {Content} */ (values.shift())
1172+
} else {
1173+
visit(child)
1174+
}
1175+
}
1176+
}
1177+
}
1178+
}

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
"dependencies": {
4444
"@types/mdast": "^3.0.0",
4545
"@types/unist": "^2.0.0",
46+
"mdast-util-directive": "^2.1.1",
4647
"mdast-util-to-string": "^3.1.0",
4748
"micromark": "^3.0.0",
4849
"micromark-util-decode-numeric-character-reference": "^1.0.0",

0 commit comments

Comments
 (0)