@vivliostyle/vfm
Version:
Custom Markdown syntax specialized in book authoring.
65 lines (64 loc) • 2.4 kB
JavaScript
;
/**
* derived from `remark-slug`.
* original: Copyright (c) 2015 Titus Wormer <tituswormer@gmail.com>
* modified: 2021 and later is Akabeko
* @license MIT
* @see https://github.com/remarkjs/remark-slug
*/
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.mdast = void 0;
var github_slugger_1 = __importDefault(require("github-slugger"));
var mdast_util_to_string_1 = __importDefault(require("mdast-util-to-string"));
var unist_util_select_1 = require("unist-util-select");
/**
* Create slug from `id` or heading children.
* @param heading Heading.
* @param slugs Slugger.
* @returns
*/
var createSlug = function (heading, slugger) {
if (heading.data && heading.data.hProperties && heading.data.hProperties.id) {
return slugger.slug(heading.data.hProperties.id, true);
}
// Create slug string with footnotes removed
var children = __spreadArray([], heading.children, true);
heading.children = heading.children.filter(function (child) { return child.type !== 'footnote'; });
var text = slugger.slug((0, mdast_util_to_string_1.default)(heading).replace(/<[^<>]*>/g, ''));
heading.children = children;
return text;
};
/**
* Process Markdown AST.
* @returns Transformer.
*/
var mdast = function () { return function (tree) {
var slugger = new github_slugger_1.default();
slugger.reset();
var headings = (0, unist_util_select_1.selectAll)('heading', tree);
for (var _i = 0, headings_1 = headings; _i < headings_1.length; _i++) {
var heading = headings_1[_i];
var id = createSlug(heading, slugger);
if (!heading.data) {
heading.data = {};
}
if (!heading.data.hProperties) {
heading.data.hProperties = {};
}
heading.data.id = id;
heading.data.hProperties.id = id;
}
}; };
exports.mdast = mdast;