Skip to content

Commit a550e44

Browse files
committed
add @document parsing. Closes #29
1 parent ebf20f2 commit a550e44

File tree

4 files changed

+62
-9
lines changed

4 files changed

+62
-9
lines changed

index.js

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ module.exports = function(css){
146146
* Parse keyframes.
147147
*/
148148

149-
function keyframes() {
149+
function atkeyframes() {
150150
var m = match(/^@([-\w]+)?keyframes */);
151151
if (!m) return;
152152
var vendor = m[1];
@@ -179,7 +179,7 @@ module.exports = function(css){
179179
* Parse supports.
180180
*/
181181

182-
function supports() {
182+
function atsupports() {
183183
var m = match(/^@supports *([^{]+)/);
184184
if (!m) return;
185185
var supports = m[1].trim();
@@ -198,7 +198,7 @@ module.exports = function(css){
198198
* Parse media.
199199
*/
200200

201-
function media() {
201+
function atmedia() {
202202
var m = match(/^@media *([^{]+)/);
203203
if (!m) return;
204204
var media = m[1].trim();
@@ -243,6 +243,30 @@ module.exports = function(css){
243243
};
244244
}
245245

246+
/**
247+
* Parse document.
248+
*/
249+
250+
function atdocument() {
251+
var m = match(/^@([-\w]+)?document *([^{]+)/);
252+
if (!m) return;
253+
var vendor = m[1].trim();
254+
var doc = m[2].trim();
255+
256+
if (!open()) return;
257+
comments();
258+
259+
var style = rules();
260+
261+
if (!close()) return;
262+
263+
return {
264+
document: doc,
265+
vendor: vendor,
266+
rules: style
267+
};
268+
}
269+
246270
/**
247271
* Parse margin at-rules
248272
*/
@@ -320,12 +344,13 @@ module.exports = function(css){
320344
*/
321345

322346
function atrule() {
323-
return keyframes()
324-
|| media()
325-
|| supports()
347+
return atkeyframes()
348+
|| atmedia()
349+
|| atsupports()
326350
|| atimport()
327351
|| atcharset()
328352
|| atnamespace()
353+
|| atdocument()
329354
|| atpage();
330355
}
331356

test/cases/document.css

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
@-moz-document url-prefix() {
2+
.ui-select .ui-btn select {
3+
opacity:.0001
4+
}
5+
}

test/cases/document.json

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"stylesheet": {
3+
"rules": [
4+
{
5+
"document": "url-prefix()",
6+
"vendor": "-moz-",
7+
"rules": [
8+
{
9+
"selectors": [
10+
".ui-select .ui-btn select"
11+
],
12+
"declarations": [
13+
{
14+
"property": "opacity",
15+
"value": ".0001"
16+
}
17+
]
18+
}
19+
]
20+
}
21+
]
22+
}
23+
}

test/css-parse.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ describe('parse(str)', function(){
1414
if (~file.indexOf('json')) return;
1515
file = path.basename(file, '.css');
1616
it('should parse ' + file, function(){
17-
var css = read(path.join('test', 'cases', file + '.css'), 'utf8');
18-
var json = read(path.join('test', 'cases', file + '.json'), 'utf8');
17+
var css = read(path.join('test', 'cases', file + '.css'), 'utf8').trim();
18+
var json = read(path.join('test', 'cases', file + '.json'), 'utf8').trim();
1919
var ret = parse(css);
2020
ret = JSON.stringify(ret, null, 2);
2121
ret.should.equal(json);
2222
})
2323
});
24-
})
24+
})

0 commit comments

Comments
 (0)