| "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; |
| }; |