--- /dev/null
+"use strict";
+
+const cssSyntax = require("./css-syntax");
+const extname = {
+ styl: "stylus",
+ sss: "sugarss",
+};
+
+function defaultConfig (opts, lang) {
+ let syntax;
+ if (lang === "scss" || lang === "sass" || lang === "less") {
+ syntax = require("postcss-" + lang);
+ } else if (lang === "sugarss") {
+ syntax = require("sugarss");
+ } else {
+ syntax = cssSyntax(opts);
+ }
+ return syntax;
+}
+
+function getSyntax (opts, lang) {
+ if (!lang) {
+ lang = opts.from && /\.(\w+)(?:\?.+)?$/.exec(opts.from);
+ if (lang) {
+ lang = lang[1].toLowerCase();
+ lang = extname[lang] || lang;
+ } else {
+ lang = "css";
+ }
+ }
+
+ let config = opts.syntax.config;
+
+ if (!config) {
+ return defaultConfig(opts, lang);
+ }
+
+ if (typeof config === "function") {
+ config = config(opts, lang);
+ }
+
+ if (config) {
+ config = config[lang] || config.css || config;
+ if (typeof config === "string") {
+ config = require(config);
+ }
+ } else {
+ return defaultConfig(opts, lang);
+ }
+
+ return Object.assign(cssSyntax(opts), config);
+}
+
+module.exports = getSyntax;