Skip to content

Commit 8591bf5

Browse files
author
James Donaghue
committed
support for edge cases
1 parent 7a2ea52 commit 8591bf5

File tree

1 file changed

+80
-19
lines changed

1 file changed

+80
-19
lines changed

LLparser.content.js

Lines changed: 80 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -46,24 +46,30 @@
4646
for (var i = start; i < selector.length; i++) {
4747
var c = selector[i];
4848

49-
if (c == '\'' || c == '"') {
50-
insideQuotes = !insideQuotes;
51-
}
52-
5349
if (!insideQuotes && c == ']') {
5450
return i;
5551
}
5652

57-
if (obj.op.indexOf('=') == -1) {
58-
if (c in {'+':0, '~': 1, '=': 2, '$': 3, '|': 4, '^': 5, '*': 6}) {
59-
obj.op += c;
53+
if (c == '\'' || c == '"') {
54+
55+
insideQuotes = !insideQuotes;
56+
}
57+
else {
58+
59+
if (insideQuotes) {
60+
obj.right += c;
6061
}
61-
else if (c != ' ' && c!= '\n' && c != '\r' && c != '\t' && c != '\\') {
62-
obj.left += c;
62+
else if (obj.op.indexOf('=') == -1) {
63+
if (c in {'+':0, '~': 1, '=': 2, '$': 3, '|': 4, '^': 5, '*': 6}) {
64+
obj.op += c;
65+
}
66+
else if (c != ' ' && c!= '\n' && c != '\r' && c != '\t' && c != '\\') {
67+
obj.left += c;
68+
}
69+
}
70+
else if (c != ' ' && c!= '\n' && c != '\r' && c != '\t' && c != '\'' && c != '"') {
71+
obj.right += c;
6372
}
64-
}
65-
else if (c != ' ' && c!= '\n' && c != '\r' && c != '\t' && c != '\'' && c != '"') {
66-
obj.right += c;
6773
}
6874
}
6975
error('invalid attribute', start);
@@ -208,19 +214,74 @@
208214
value: '',
209215
op: 'HAS'
210216
}
211-
i = parseRecursivePseudo(i+10, selector, character);
217+
i = parseRecursivePseudo(i+5, selector, character);
212218
character = character.value;
213219
type = _LL.HAS;
214220
}
221+
else if (selector.substr(i + 1, 4) == 'lang') {
222+
character = {
223+
value: '',
224+
op: 'LANG'
225+
}
226+
i = parseRecursivePseudo(i+6, selector, character, true);
227+
character = {
228+
value: ':lang',
229+
content: character.value.replace(/['"]/g, '')
230+
}
231+
type = _LL.PSCLS;
232+
}
215233
else if (selector.substr(i +1, 3) == 'nth') {
216-
character= {
234+
var nth = selector.substr(i, selector.substr(i).indexOf('('));
235+
character = {
217236
value: '',
218237
op: 'NTH'
219-
}
220-
i = parseNth(i+11, selector, character);
221-
character = character.value;
238+
};
239+
i = parseNth(i + nth.length + 1, selector, character);
240+
character = {
241+
value: nth,
242+
content: character.value
243+
};
222244
type = _LL.NTH;
223245
}
246+
else if (selector.substr(i +1, 2) == 'eq') {
247+
var eq = selector.substr(i, selector.substr(i).indexOf('('));
248+
character = {
249+
value: '',
250+
op: 'EQ'
251+
};
252+
i = parseNth(i + eq.length + 1, selector, character);
253+
character = {
254+
value: eq,
255+
content: character.value
256+
};
257+
type = _LL.PSCLS;
258+
}
259+
else if (selector.substr(i +1, 2) == 'lt') {
260+
var lt = selector.substr(i, selector.substr(i).indexOf('('));
261+
character = {
262+
value: '',
263+
op: 'LT'
264+
};
265+
i = parseNth(i + lt.length + 1, selector, character);
266+
character = {
267+
value: lt,
268+
content: (character.value || 0) * 1 - 1
269+
};
270+
type = _LL.PSCLS;
271+
}
272+
else if (selector.substr(i +1, 2) == 'gt') {
273+
var gt = selector.substr(i, selector.substr(i).indexOf('('));
274+
character = {
275+
value: '',
276+
op: 'GT'
277+
};
278+
i = parseNth(i + gt.length + 1, selector, character);
279+
character = {
280+
value: gt,
281+
content: (character.value || 0) * 1 + 1
282+
};
283+
type = _LL.PSCLS;
284+
}
224285
else {
225286
type = _LL.PSCLS;
226287
}
@@ -247,10 +308,10 @@
247308
break;
248309
}
249310
}
250-
if (character.content) {
311+
if (character.content != undefined) {
251312
selectorStack.push({
252313
type: type,
253-
value: character.value || character,
314+
value: character.value != undefined ? character.value : character,
254315
content: character.content
255316
});
256317
}

0 commit comments

Comments
 (0)