add initial marp implementation with sample content and build configuration
This commit is contained in:
+59
@@ -0,0 +1,59 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.sweep = exports.default = void 0;
|
||||
var _plugin = _interopRequireDefault(require("../plugin"));
|
||||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
||||
/** @module */
|
||||
|
||||
/**
|
||||
* Marpit sweep plugin.
|
||||
*
|
||||
* Hide blank paragraphs. For better support of the background image syntax and
|
||||
* directives through HTML comment, Marpit will sweep paragraphs included only
|
||||
* whitespace by setting `hidden: true`.
|
||||
*
|
||||
* It also sweep the inline token marked as hidden forcely. Please notice that
|
||||
* plugins executed after this cannot handle hidden inline tokens.
|
||||
*
|
||||
* @function sweep
|
||||
* @param {MarkdownIt} md markdown-it instance.
|
||||
*/
|
||||
function _sweep(md) {
|
||||
md.core.ruler.after('inline', 'marpit_sweep', state => {
|
||||
if (state.inlineMode) return;
|
||||
for (const token of state.tokens) {
|
||||
if (token.type === 'html_block' && token.content.match(/^\s*$/) || token.type === 'inline' && token.children.filter(t => !(t.hidden || t.type === 'softbreak')).every(t => t.type === 'text' && t.content.match(/^\s*$/))) token.hidden = true;
|
||||
}
|
||||
});
|
||||
md.core.ruler.push('marpit_sweep_paragraph', state => {
|
||||
if (state.inlineMode) return;
|
||||
const current = {
|
||||
open: [],
|
||||
tokens: {}
|
||||
};
|
||||
for (const token of state.tokens) {
|
||||
if (token.type === 'inline' && token.hidden) {
|
||||
// markdown-it's "inline" type is not following a `hidden` flag. Marpit
|
||||
// changes the token type to unique name to hide token forcely.
|
||||
token.type = 'marpit_hidden_inline';
|
||||
} else if (token.type === 'paragraph_open') {
|
||||
current.open.push(token);
|
||||
current.tokens[token] = [];
|
||||
} else if (token.type === 'paragraph_close') {
|
||||
const openToken = current.open.pop();
|
||||
if (current.tokens[openToken].every(t => t.hidden)) {
|
||||
openToken.hidden = true;
|
||||
token.hidden = true;
|
||||
}
|
||||
} else {
|
||||
const len = current.open.length;
|
||||
if (len > 0) current.tokens[current.open[len - 1]].push(token);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
const sweep = exports.sweep = (0, _plugin.default)(_sweep);
|
||||
var _default = exports.default = sweep;
|
||||
Reference in New Issue
Block a user