-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathparse.js
34 lines (30 loc) · 940 Bytes
/
parse.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
"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;