UNPKG

@vivliostyle/vfm

Version:

Custom Markdown syntax specialized in book authoring.

65 lines (64 loc) 2.99 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.handler = exports.mdast = void 0; var refractor_1 = __importDefault(require("refractor")); var unist_builder_1 = __importDefault(require("unist-builder")); var unist_util_visit_1 = __importDefault(require("unist-util-visit")); function mdast() { return function (tree) { (0, unist_util_visit_1.default)(tree, 'code', function (node) { var _a, _b, _c, _d, _e, _f; var match = /^(.+?):(.+)$/.exec((_a = node.lang) !== null && _a !== void 0 ? _a : ''); // parse lang:title syntax if (match) { var lang = match[1], title = match[2]; node.data = __assign(__assign({}, ((_b = node.data) !== null && _b !== void 0 ? _b : {})), { hProperties: { title: title } }); node.lang = lang; if ((_c = node.position) === null || _c === void 0 ? void 0 : _c.end.offset) { node.position.end.offset -= title.length + 1; } } if (node.meta) { var metadata = Object.fromEntries((_e = (_d = node.meta .match(/(?:([^"\s]+?)=([^"\s]+)|([^"\s]+)="([^"]*?)")/g)) === null || _d === void 0 ? void 0 : _d.map(function (str) { var _a = str.split('='), k = _a[0], v = _a[1]; return [k, v.replace(/(^"|"$)/g, '')]; })) !== null && _e !== void 0 ? _e : []); // copy title metadata for figure handler injecting figcaption if (metadata.title) { node.data = __assign(__assign({}, ((_f = node.data) !== null && _f !== void 0 ? _f : {})), { hProperties: { title: metadata.title } }); } } // syntax highlight if (node.lang && refractor_1.default.registered(node.lang)) { if (!node.data) node.data = {}; node.data.hChildren = refractor_1.default.highlight(node.value, node.lang); } }); }; } exports.mdast = mdast; function handler(h, node) { var value = node.value || ''; var lang = node.lang ? node.lang.match(/^[^ \t]+(?=[ \t]|$)/) : 'text'; var props = { className: ['language-' + lang] }; return h(node.position, 'pre', props, [ h(node, 'code', props, [(0, unist_builder_1.default)('text', value)]), ]); } exports.handler = handler;