@vivliostyle/vfm
Version:
Custom Markdown syntax specialized in book authoring.
65 lines (64 loc) • 2.99 kB
JavaScript
;
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;