--- /dev/null
+"use strict";
+
+const remark = require("remark");
+const findAllAfter = require("unist-util-find-all-after");
+
+module.exports = function (source, opts) {
+ // Skip known non-markdown files.
+ if (opts.from && !/\.(?:md|markdown)(?:\?.+)?$/i.test(opts.from)) {
+ return;
+ }
+ let isStructureMD = false;
+ const ast = remark().parse(source);
+ const blocks = findAllAfter(ast, 0, (node) => {
+ if (node.type === "code" && node.lang) {
+ isStructureMD = true;
+ return /^(?:(?:[ps]?c)|le|wx|sa?|sugar)ss$/i.test(node.lang);
+ }
+ });
+
+ if (!isStructureMD) {
+ return;
+ }
+
+ return blocks.map((block) => {
+ const startIndex = source.indexOf(block.value, block.position.start.offset);
+ const content = source.slice(startIndex, block.position.end.offset).replace(/[ \t]*`*$/, "");
+ return {
+ startIndex: startIndex,
+ lang: block.lang.toLowerCase(),
+ isMarkdown: true,
+ content: content,
+ };
+ });
+};