+++ /dev/null
-"use strict";
-
-const Input = require("postcss/lib/input");
-const Root = require("postcss/lib/root");
-const htmlParser = require("./html-parser");
-const mdParser = require("./markdown-parser");
-const BlockFixer = require("./block-fixer");
-
-function parser (source, opts) {
- // Skip known style sheet files.
- if (opts.from && /\.(?:(?:p(?:ost)?)?css|(?:wx|le|sa|sc|s)ss|styl(?:us)?)(?:\?.+)?$/i.test(opts.from)) {
- return;
- }
-
- source = source && source.toString();
- const styleTag = htmlParser(source, opts);
- const stylesMd = mdParser(source, opts);
- if (!styleTag && !stylesMd) {
- return;
- }
- const document = new Root();
- const documentLocalFixer = new BlockFixer(source);
- let index = 0;
- [].concat(styleTag).concat(stylesMd).filter(Boolean).sort(function (a, b) {
- return a.startIndex - b.startIndex;
- }).forEach(style => {
- const localFixer = documentLocalFixer.block(style);
- const root = localFixer.parse(opts);
- root.raws.beforeStart = source.slice(index, style.startIndex);
- index = style.startIndex + style.content.length;
- document.nodes.push(root);
- });
- document.raws.afterEnd = source.slice(index);
- document.source = {
- input: new Input(source, opts),
- start: {
- line: 1,
- column: 1,
- },
- };
-
- document.each = function (callback) {
- let wasBreak, lastResult;
- this.nodes.forEach(node => {
- const result = node.each(callback);
- if (result === false) {
- wasBreak = true;
- } else {
- lastResult = result;
- }
- });
- if (wasBreak) {
- return false;
- } else {
- return lastResult;
- }
- };
-
- document.append = function () {
- this.last.append.apply(
- this.last,
- Array.from(arguments)
- );
- return this;
- };
-
- document.prepend = function () {
- this.first.prepend.apply(
- this.first,
- Array.from(arguments)
- );
- return this;
- };
-
- document.insertBefore = function (exist, add) {
- exist.prepend(add);
- return this;
- };
-
- document.insertAfter = function (exist, add) {
- exist.append(add);
- return this;
- };
-
- return document;
-}
-
-module.exports = parser;