add initial marp implementation with sample content and build configuration
This commit is contained in:
+51
@@ -0,0 +1,51 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.importHoisting = exports.default = void 0;
|
||||
var _postcss_plugin = _interopRequireDefault(require("../../helpers/postcss_plugin"));
|
||||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
||||
/** @module */
|
||||
|
||||
/**
|
||||
* Marpit PostCSS import hoisting plugin.
|
||||
*
|
||||
* Hoist `@charset` and `@import` at-rule to the beginning of CSS. Marpit is
|
||||
* manipulating CSS with many PostCSS plugins, so sometimes a few at-rules
|
||||
* cannot keep specification.
|
||||
*
|
||||
* This plugin takes care of hoisting for invalid at-rules.
|
||||
*
|
||||
* @function importHoisting
|
||||
*/
|
||||
const importHoisting = exports.importHoisting = (0, _postcss_plugin.default)('marpit-postcss-import-hoisting', () => css => {
|
||||
const hoisted = {
|
||||
charset: undefined,
|
||||
imports: []
|
||||
};
|
||||
css.walkAtRules(rule => {
|
||||
if (rule.name === 'charset') {
|
||||
rule.remove();
|
||||
if (!hoisted.charset) hoisted.charset = rule;
|
||||
} else if (rule.name === 'import') {
|
||||
hoisted.imports.push(rule.remove());
|
||||
}
|
||||
});
|
||||
const {
|
||||
first
|
||||
} = css
|
||||
|
||||
// Hoist at-rules
|
||||
;
|
||||
[hoisted.charset, ...hoisted.imports].filter(r => r).forEach((rule, idx) => {
|
||||
// Strip whitespace from the beginning of first at-rule
|
||||
const prependRule = idx === 0 ? rule.clone({
|
||||
raws: {
|
||||
before: undefined
|
||||
}
|
||||
}) : rule;
|
||||
first.before(prependRule);
|
||||
});
|
||||
});
|
||||
var _default = exports.default = importHoisting;
|
||||
Reference in New Issue
Block a user