38 lines
859 B
JavaScript
38 lines
859 B
JavaScript
|
"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;
|
||
|
};
|