|
49 | 49 | psc: 1, // pseudo class |
50 | 50 | psf: 2, // pseudo class function |
51 | 51 | typ: 3, // type |
52 | | - str: 4 // string |
| 52 | + str: 4, // string |
| 53 | + ide: 5 // identifiers (or "classes", stuff after a dot) |
53 | 54 | }; |
54 | 55 |
|
55 | 56 | // The primary lexing regular expression in jsonselect |
|
67 | 68 | "(:(?:nth-child|nth-last-child|has|expr|val|contains))|" + |
68 | 69 | // (6) bogusly named pseudo something or others |
69 | 70 | "(:\\w+)|" + |
70 | | - // (7) JSON strings |
71 | | - "\\.(\\\"(?:[^\\\\]|\\\\[^\\\"])*\\\")|" + |
| 71 | + // (7 & 8) identifiers and JSON strings |
| 72 | + "(?:(\\.)?(\\\"(?:[^\\\\]|\\\\[^\\\"])*\\\"))|" + |
72 | 73 | // (8) bogus JSON strings missing a trailing quote |
73 | 74 | "(\\\")|" + |
74 | 75 | // (9) identifiers (unquoted) |
75 | | - "\\.((?:[_a-zA-Z]|[^\\0-\\0177]|\\\\[^\\r\\n\\f0-9a-fA-F])(?:[_a-zA-Z0-9\\-]|[^\\u0000-\\u0177]|(?:\\\\[^\\r\\n\\f0-9a-fA-F]))*)" + |
| 76 | + "\\.((?:[_a-zA-Z]|[^\\0-\\0177]|\\\\[^\\r\\n\\f0-9a-fA-F])(?:[_a-zA-Z0-9\\-]|[^\\u0000-\\u0177]|(?:\\\\[^\\r\\n\\f0-9a-fA-F]))*)" + |
76 | 77 | ")" |
77 | 78 | ); |
78 | 79 |
|
|
90 | 91 | else if (m[4]) a = [off, toks.psc, m[0]]; |
91 | 92 | else if (m[5]) a = [off, toks.psf, m[0]]; |
92 | 93 | else if (m[6]) te("upc"); |
93 | | - else if (m[7]) a = [off, toks.str, jsonParse(m[7])]; |
94 | | - else if (m[8]) te("ujs"); |
95 | | - else if (m[9]) a = [off, toks.str, m[9].replace(/\\([^\r\n\f0-9a-fA-F])/g,"$1")]; |
| 94 | + else if (m[8]) a = [off, m[7] ? toks.ide : toks.str, jsonParse(m[8])]; |
| 95 | + else if (m[9]) te("ujs"); |
| 96 | + else if (m[10]) a = [off, toks.ide, m[10].replace(/\\([^\r\n\f0-9a-fA-F])/g,"$1")]; |
96 | 97 | return a; |
97 | 98 | } |
98 | 99 |
|
|
320 | 321 | while (true) { |
321 | 322 | if (l === undefined) { |
322 | 323 | break; |
323 | | - } else if (l[1] === toks.str) { |
| 324 | + } else if (l[1] === toks.ide) { |
324 | 325 | if (s.id) te("nmi"); |
325 | 326 | s.id = l[2]; |
326 | 327 | } else if (l[1] === toks.psc) { |
|
0 commit comments