-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcss.ometajs
70 lines (52 loc) · 2.2 KB
/
css.ometajs
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
65
66
67
68
69
70
var cssptt = require('cssp/src/cssptt'),
CSSParser = cssptt.CSSParser,
CSSTransformer = cssptt.CSSTransformer,
CSSTranslator = cssptt.CSSTranslator;
ometa BorschikCSSParser <: CSSParser {
}
BorschikCSSParser.parse = function(content) {
return this.matchAll(String(content), 'stylesheet');
}
ometa BorschikCSSChildren <: CSSTransformer {
atrules = [#atrules
[#atkeyword [#ident #import]]
any
[#uri [(#string | #raw) :uri]]
] -> [#borschik,
this._file.child(
'include',
uri.replace(/["']/g, ''))]
| ^atrules,
uri = [#uri [(#string | #raw) :uri ?(!uri.replace(/["']/g, '').match(/^((\w+:)?\/\/|data\:|\/|#|\?)/))]] -> [#uri, [#borschik,
this._file.child(
'link',
uri.replace(/["']/g, ''))]]
| ^uri,
raw = [#raw [
``progid:DXImageTransform.Microsoft.AlphaImageLoader''
'('
<(~')' char)+>:c_
AlphaImageLoaderAttrs(c_):c
')'
]] -> [#AlphaImageLoader, c] | ^raw,
AlphaImageLoaderAttrs = [listOf(#AlphaImageLoaderAttr, ','):c] -> [#AlphaImageLoaderAttrs, c],
AlphaImageLoaderAttr = ``src'':n '=' <(~',' char)+>:v ?(!v.replace(/["']/g, '').match(/^((\w+:)?\/\/|data\:|\/|#|\?)/)) -> [#AlphaImageLoaderAttr, n,
[#borschik,
this._file.child(
'link',
v.replace(/["']/g, ''))]]
| <letter+>:n '=' <(~',' char)+>:v -> [#AlphaImageLoaderAttr, n, [#raw, v]]
}
BorschikCSSChildren.children = function children(file, content) {
return this.match(content, 'stylesheet');
}
ometa BorschikCSSTranslator <: CSSTranslator {
any = borschik | AlphaImageLoader | ^any,
borschik = [#borschik :f] -> f.process(this._path),
AlphaImageLoader = [#AlphaImageLoader AlphaImageLoaderAttrs:c] -> ('progid:DXImageTransform.Microsoft.AlphaImageLoader(' + c + ')'),
AlphaImageLoaderAttrs = [#AlphaImageLoaderAttrs [AlphaImageLoaderAttr+:as]] -> as.join(','),
AlphaImageLoaderAttr = [#AlphaImageLoaderAttr :n any:v] -> (n + '=' + v)
}
BorschikCSSTranslator.translate = function(path, content) {
return this.match(content, 'stylesheet');
}