You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
940 B
34 lines
940 B
"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;
|
|
|