mdviewer.js 1.61 KB
"use strict";
const fs = require('fs');

/**
 * 渲染md文件,输出html
 * @param opts 选项
 * @return {MarkdownIt}
 * @constructor
 *
 * opts:
 * toc: true/false 是否显示[TOC]
 * parseTokens: true/false 是否同时解析md输出结果tokens
 */
function MarkdownIt (opts) {
    if (!(this instanceof MarkdownIt)) {
        return new MarkdownIt(opts);
    }

    opts = opts || {};

    const md = require('markdown-it')(opts.options);
    if (opts.toc) {
        md.use(require('markdown-it-github-toc').default, {
            anchorLinkSymbol: ''
        })
    }
    this.renderFile = function (filename) {
        if (!filename) {
            throw new Error('filename can not be null!')
        }

        let result = {}, content;
        try {
            content = fs.readFileSync(filename).toString();
            result.html = md.render(content);
            result.status = 200;
        } catch (e) {
            // console.error('convert md to html error', e);
            result.status = 404;
        }

        try {
            if (opts.parseTokens) {
                result.tokens = md.parse(content, {});
            }
        } catch (e) {
            // console.warn('parse md error', e)
        }

        return result;
    };

    /**
     * 返回渲染文本
     * @param src
     * @param env
     * @return {*}
     */
    this.render = function (src, env) {
        return md.render(src, env)
    };

    /**
     * 返回解析文本
     * @param src
     * @param env
     * @return {*}
     */
    this.parse = function (src, env) {
        return md.parse(src, env)
    }
}

module.exports = MarkdownIt;