-
Notifications
You must be signed in to change notification settings - Fork 0
/
style.js
64 lines (59 loc) · 1.26 KB
/
style.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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
var reg = function (name, string, flags) {
if (!string) {
return reg[name]
}
string = string.source || string
for (var k in reg) {
if (!reg.hasOwnProperty(k)) continue
var n = RegExp('{' + k.replace(/[.(){}[\]]/g, '\\$&') + '}', 'g')
var s = reg[k].source
var v = s.match(/\|/) ? '(?:' + s + ')' : s
string = string.replace(n, v)
}
var r = RegExp(string, flags)
if (name !== null) {
reg[name] = r
}
return r
}
// css
reg('space', /\s+/)
reg('comment', /\/\/.*|\/\*[\s\S]*?\*\//)
reg('string', /"(?:\\.|.)*?"|'(?:\\.|.)*?'|`(?:\\.|.)*?`/)
reg('bound', /[\{\}]/)
reg('chars', /[^\s{},]+/)
reg('text', '(?:{string}|{chars})+')
reg('text', '{text}(?: +{text})*')
reg('tokens', '{comment}|{selector}|{text}|{bound}', 'g')
// reg('tokens', '{space}|{tokens}', 'g')
var code = `
div,
input{
color "#0af{"
width 1px
bw: 1px 2px 3px
bs: 1px 2px 3px , 4px 5px 6px;
> ul{
+ li{
w 1
background: alwejflawjef(
alweijflawef,
awefijawoef,
awef
)
}
}
}
`
var tokensReg = reg('tokens')
var tokens = code.match(tokensReg)
console.log(tokensReg)
console.log(tokens)
var ast = {
text: '',
children: []
}
for (let i = 0; i < tokens.length; i++) {
var token = tokens[i]
// console.log(token)
}