dokkie
Version:
Create good looking documentation from your Readme
83 lines • 3.7 kB
JavaScript
;
// Markdown
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getTitleFromMD = exports.mdToHtml = void 0;
const markdown_it_prism_1 = __importDefault(require("markdown-it-prism"));
const markdown_it_anchor_1 = __importDefault(require("markdown-it-anchor"));
const markdown_it_html5_media_1 = require("markdown-it-html5-media");
const markdown_it_emoji_1 = __importDefault(require("markdown-it-emoji"));
const markdown_it_1 = __importDefault(require("markdown-it"));
const markdown_it_task_lists_1 = __importDefault(require("markdown-it-task-lists"));
const markdown_it_deflist_1 = __importDefault(require("markdown-it-deflist"));
const markdown_it_alert_1 = __importDefault(require("markdown-it-alert"));
const markdown_it_abbr_1 = __importDefault(require("markdown-it-abbr"));
const markdown_it_footnote_1 = __importDefault(require("markdown-it-footnote"));
const markdown_it_multimd_table_1 = __importDefault(require("markdown-it-multimd-table"));
const markdown_meta_1 = require("./markdown-meta");
const md = new markdown_it_1.default({
html: true,
linkify: true,
breaks: true,
typographer: true,
});
md.use(markdown_it_prism_1.default);
md.use(markdown_it_anchor_1.default);
md.use(markdown_it_html5_media_1.html5Media);
md.use(markdown_it_emoji_1.default);
md.use(markdown_it_alert_1.default, { bem: true });
md.use(markdown_it_deflist_1.default);
md.use(markdown_it_footnote_1.default);
md.use(markdown_it_multimd_table_1.default);
md.use(markdown_it_abbr_1.default);
md.use(markdown_it_task_lists_1.default, { enabled: true, label: true, labelAfter: true });
/*
Convert Markdown Data to html and filter meta.
*/
exports.mdToHtml = (file) => __awaiter(void 0, void 0, void 0, function* () {
const strippedData = yield markdown_meta_1.removeMeta(file.data);
const renderedDocument = md.render(strippedData);
const metaData = yield markdown_meta_1.extractMeta(file.data);
return {
document: renderedDocument,
meta: metaData,
};
});
/*
Find the first occurence of a string after a certain index.
*/
const findAfter = (str, needle, afterIndex) => {
for (let i = 0; i < str.length; i++)
if (str[i] === needle && i > afterIndex)
return i;
return 0;
};
/*
Get the title from a Markdown String
*/
exports.getTitleFromMD = (str, clean = true) => {
let startTitle = str.indexOf("# ");
while (str.charAt(startTitle - 1) === "#") {
startTitle = findAfter(str, "# ", startTitle);
}
let endTitle = findAfter(str, "\n", startTitle);
if (startTitle < 0)
return null;
if (startTitle > -1 && endTitle === 0)
endTitle = str.length;
if (clean)
return str.substr(startTitle + 2, endTitle).split("\n")[0];
return str.substr(startTitle, endTitle).split("\n")[0];
};
//# sourceMappingURL=markdown.js.map