123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- "use strict";
- const path = require("path");
- const reSyntaxCSS = /^(?:post)?css$/i;
-
- function cssSyntax () {
- return {
- stringify: require("postcss/lib/stringify"),
- parse: require("postcss/lib/parse"),
- };
- }
-
- function normalize (syntax) {
- if (!syntax.parse) {
- syntax = {
- parse: syntax,
- };
- }
- return syntax;
- }
-
- function requireSyntax (syntax) {
- if (reSyntaxCSS.test(syntax)) {
- return cssSyntax();
- } else if (/^sugarss$/i.test(syntax)) {
- syntax = "sugarss";
- } else if (path.isAbsolute(syntax) || syntax[0] === ".") {
- syntax = path.resolve(syntax);
- } else {
- syntax = syntax.toLowerCase().replace(/^(?:postcss-)?(\w+)/i, "postcss-$1");
- }
- return normalize(require(syntax));
- }
-
- function getSyntax (lang, opts) {
- let syntax;
- lang = lang || "css";
- if (opts.syntax.config[lang]) {
- syntax = opts.syntax.config[lang];
- if (typeof syntax === "string") {
- if (syntax !== lang && opts.syntax.config[syntax]) {
- return getSyntax(syntax, opts);
- }
- syntax = requireSyntax(syntax);
- } else {
- syntax = normalize(syntax);
- }
- } else if (reSyntaxCSS.test(lang)) {
- syntax = cssSyntax();
- } else {
- return requireSyntax(lang);
- }
- if (!syntax.stringify) {
- if (reSyntaxCSS.test(lang)) {
- syntax.stringify = require("postcss/lib/stringify");
- } else {
- syntax.stringify = getSyntax(null, opts).stringify;
- }
- }
- opts.syntax.config[lang] = syntax;
- return syntax;
- }
-
- module.exports = getSyntax;
|