blob: c8bb82a6388b2324e82cd7da2827829465bc0d13 [file] [log] [blame]
"use strict";
const stringify = require("./stringify");
const parseStyle = require("./parse-style");
const normalOpts = require("./normal-opts");
module.exports = (extract, lang) => {
const defaultConfig = {
postcss: "css",
stylus: "css",
babel: "jsx",
xml: "html",
};
function parse (source, opts) {
source = source.toString();
opts = normalOpts(opts, this);
const document = parseStyle(source, opts, extract(source, opts));
document.source.lang = lang;
return document;
}
function initSyntax (syntax) {
syntax.stringify = stringify.bind(syntax);
syntax.parse = parse.bind(syntax);
syntax.extract = extract.bind(syntax);
return syntax;
}
function syntax (config) {
return initSyntax({
config: Object.assign({}, defaultConfig, config),
});
}
initSyntax(syntax);
syntax.config = defaultConfig;
return syntax;
};