|
123456789101112131415161718192021222324252627282930313233343536373839404142 |
- "use strict";
-
- const remark = require("remark");
- const findAllAfter = require("unist-util-find-all-after");
-
- function mdParser (source, opts, result) {
- const htmlInMd = opts.syntax.config.htmlInMd;
- if (!result && (htmlInMd == null || htmlInMd)) {
- result = require("postcss-html/extract")(source, opts, []);
- }
- const ast = remark().parse(source);
- const blocks = findAllAfter(ast, 0, (node) => (
- node.type === "code"
- )).map((block) => {
- if (result && (!block.lang || !/^(?:[sx]?html?|[sx]ht)$/i.test(block.lang))) {
- result = result.filter(styleHtm => {
- return styleHtm.startIndex >= block.position.end.offset ||
- styleHtm.startIndex + styleHtm.content.length <= block.position.start.offset;
- });
- }
- if (block.lang && /^(?:(?:\w*c)|le|wx|sa?|sugar)ss$/i.test(block.lang)) {
- let startIndex = source.indexOf(block.lang, block.position.start.offset) + block.lang.length;
- if (block.value) {
- startIndex = source.indexOf(block.value, startIndex);
- } else {
- startIndex = source.indexOf("\n", startIndex) + 1;
- }
- return {
- startIndex: startIndex,
- lang: block.lang.toLowerCase(),
- isMarkdown: true,
- content: source.slice(startIndex, block.position.end.offset).replace(/[ \t]*`*$/, ""),
- };
- }
- }).filter(Boolean);
- if (result) {
- return result.concat(blocks);
- } else {
- return blocks;
- }
- };
- module.exports = mdParser;
|