UNPKG

@vivliostyle/vfm

Version:

Custom Markdown syntax specialized in book authoring.

129 lines (128 loc) 5.34 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.stringify = exports.VFM = void 0; var rehype_format_1 = __importDefault(require("rehype-format")); var rehype_stringify_1 = __importDefault(require("rehype-stringify")); var unified_1 = __importDefault(require("unified")); var document_1 = require("./plugins/document"); var math_1 = require("./plugins/math"); var metadata_1 = require("./plugins/metadata"); var replace_1 = require("./plugins/replace"); var revive_parse_1 = require("./revive-parse"); var revive_rehype_1 = require("./revive-rehype"); var utils_1 = require("./utils"); // Expose metadata reading by VFM __exportStar(require("./plugins/metadata"), exports); /** * Check and update metadata with options. * @param metadata Metadata. * @param options Options. */ var checkMetadata = function (metadata, options) { if (metadata.title === undefined && options.title !== undefined) { metadata.title = options.title; } if (metadata.lang === undefined && options.language !== undefined) { metadata.lang = options.language; } if (options.style) { if (metadata.link === undefined) { metadata.link = []; } if (typeof options.style === 'string') { metadata.link.push([ { name: 'rel', value: 'stylesheet' }, { name: 'type', value: 'text/css' }, { name: 'href', value: options.style }, ]); } else if (Array.isArray(options.style)) { for (var _i = 0, _a = options.style; _i < _a.length; _i++) { var style = _a[_i]; metadata.link.push([ { name: 'rel', value: 'stylesheet' }, { name: 'type', value: 'text/css' }, { name: 'href', value: style }, ]); } } } }; /** * Create Unified processor for Markdown AST and Hypertext AST. * @param options Options. * @returns Unified processor. */ function VFM(_a, metadata) { var _b = _a === void 0 ? {} : _a, _c = _b.style, style = _c === void 0 ? undefined : _c, _d = _b.partial, partial = _d === void 0 ? false : _d, _e = _b.title, title = _e === void 0 ? undefined : _e, _f = _b.language, language = _f === void 0 ? undefined : _f, _g = _b.replace, replace = _g === void 0 ? undefined : _g, _h = _b.hardLineBreaks, hardLineBreaks = _h === void 0 ? false : _h, _j = _b.disableFormatHtml, disableFormatHtml = _j === void 0 ? false : _j, _k = _b.math, math = _k === void 0 ? true : _k; if (metadata === void 0) { metadata = {}; } checkMetadata(metadata, { style: style, title: title, language: language }); // Prioritize metadata `vfm` settings over options if (metadata.vfm) { if (metadata.vfm.math !== undefined) { math = metadata.vfm.math; } if (metadata.vfm.partial !== undefined) { partial = metadata.vfm.partial; } if (metadata.vfm.hardLineBreaks !== undefined) { hardLineBreaks = metadata.vfm.hardLineBreaks; } if (metadata.vfm.disableFormatHtml !== undefined) { disableFormatHtml = metadata.vfm.disableFormatHtml; } } var processor = (0, unified_1.default)() .use((0, revive_parse_1.reviveParse)(hardLineBreaks, math)) .data('settings', { position: true }) .use(revive_rehype_1.reviveRehype); if (replace) { processor.use(replace_1.replace, { rules: replace }); } if (!partial) { processor.use(document_1.mdast, metadata); } processor.use(rehype_stringify_1.default); // Must be run after `rehype-document` to write to `<head>` if (math) { processor.use(math_1.hast); } // Explicitly specify true if want unformatted HTML during development or debug if (!disableFormatHtml) { processor.use(rehype_format_1.default); } return processor; } exports.VFM = VFM; /** * Convert markdown to a stringify (HTML). * @param markdownString Markdown string. * @param options Options. * @returns HTML string. */ function stringify(markdownString, options, metadata) { if (options === void 0) { options = {}; } if (metadata === void 0) { metadata = (0, metadata_1.readMetadata)(markdownString); } var processor = VFM(options, metadata); var vfile = processor.processSync(markdownString); (0, utils_1.debug)(vfile.data); return String(vfile); } exports.stringify = stringify;