| "use strict"; |
| |
| const parser = require("./parser"); |
| const processor = require("./processor"); |
| const getLang = require("./get-lang"); |
| const normalOpts = require("./normal-opts"); |
| |
| function getSyntax (opts, source) { |
| const rules = opts.syntax && opts.syntax.config && opts.syntax.config.rules; |
| const file = opts.from || ""; |
| return (rules && rules.find( |
| rule => rule.test.test ? rule.test.test(file) : rule.test(file, source) |
| )) || getLang(file, source) || { |
| lang: "css", |
| }; |
| } |
| |
| function parse (source, opts) { |
| source = source.toString(); |
| opts = normalOpts(opts, this); |
| const syntax = getSyntax(opts, source); |
| const syntaxOpts = Object.assign({}, opts, syntax.opts); |
| let root; |
| if (syntax.extract) { |
| root = processor(source, syntax.extract, syntaxOpts); |
| root.source.lang = syntax.extract; |
| } else { |
| root = parser(source, syntax.lang, syntaxOpts); |
| root.source.lang = syntax.lang; |
| } |
| return root; |
| } |
| |
| module.exports = parse; |