diff --git a/__tests__/__snapshots__/interpolant.js.snap b/__tests__/__snapshots__/interpolant.js.snap index 71165e6..0284890 100644 --- a/__tests__/__snapshots__/interpolant.js.snap +++ b/__tests__/__snapshots__/interpolant.js.snap @@ -39,15 +39,15 @@ Array [ "number", "10.00", 2, - 10, + 3, 2, - 14, + 7, ], Array [ "endInterpolant", "}", 2, - 15, + 8, ], Array [ "newline", @@ -66,15 +66,15 @@ Array [ "number", ".100", 3, - 19, 3, - 22, + 3, + 6, ], Array [ "endInterpolant", "}", 3, - 23, + 7, ], Array [ "newline", @@ -125,15 +125,15 @@ Array [ "number", "123", 2, - 8, + 3, 2, - 10, + 5, ], Array [ "endInterpolant", "}", 2, - 11, + 6, ], Array [ "newline", diff --git a/src/tokenize-comment.js b/src/tokenize-comment.js index dc8c6b2..ed2c679 100644 --- a/src/tokenize-comment.js +++ b/src/tokenize-comment.js @@ -15,7 +15,7 @@ let newline = '\n'.charCodeAt(0), asterisk = '*'.charCodeAt(0), wordEnd = /[ \n\t\r\(\)\{\},:;@!'"\\]|\*(?=\/)|#(?={)/g; -export default function tokenize(input, l, p) { +export default function tokenize(input, l, p, o) { let tokens = []; let css = input.css.valueOf(); @@ -24,7 +24,7 @@ export default function tokenize(input, l, p) { inInterpolant, inComment, inString; let length = css.length; - let offset = -1; + let offset = o || -1; let line = l || 1; let pos = p || 0; @@ -102,9 +102,11 @@ export default function tokenize(input, l, p) { tokens.push(['startInterpolant', '#{', line, pos + 1 - offset]); next = pos + 1; - let { tokens: t, pos: p } = tokenizeInterpolant(input, line, next + 1); + let { tokens: t, line: l, pos: p, offset: o } = tokenizeInterpolant(input, line, next + 1, offset); tokens = tokens.concat(t); next = p; + line = l; + offset = o; pos = next; break; diff --git a/src/tokenize-interpolant.js b/src/tokenize-interpolant.js index be9ba95..edec0bd 100644 --- a/src/tokenize-interpolant.js +++ b/src/tokenize-interpolant.js @@ -33,7 +33,7 @@ let singleQuote = "'".charCodeAt(0), wordEnd = /[ \n\t\r\(\)\{\},:;@!'"\\]|\/(?=\*)|#(?={)/g, ident = /-?([a-z_]|\\[^\\])([a-z-_0-9]|\\[^\\])*/gi; -export default function tokenize(input, l, p) { +export default function tokenize(input, l, p, o) { let tokens = []; let css = input.css.valueOf(); @@ -42,7 +42,7 @@ export default function tokenize(input, l, p) { inInterpolant, inComment, inString; let length = css.length; - let offset = -1; + let offset = o || -1; let line = l || 1; let pos = p || 0; @@ -135,9 +135,11 @@ export default function tokenize(input, l, p) { tokens.push([quote, quote, line, pos - offset]); next = pos + 1; - let { tokens: t, pos: p } = tokenizeString(input, line, next, quote); + let { tokens: t, line: l, pos: p, offset: o } = tokenizeString(input, line, next, offset, quote); tokens = tokens.concat(t); next = p; + line = l; + offset = o; pos = next; break; @@ -178,7 +180,7 @@ export default function tokenize(input, l, p) { tokens.push(['startComment', '/*', line, pos + 1 - offset]); next = pos + 1; - let { tokens: t, line: l, pos: p, offset: o } = tokenizeComment(input, line, next + 1); + let { tokens: t, line: l, pos: p, offset: o } = tokenizeComment(input, line, next + 1, offset); tokens = tokens.concat(t); next = p; line = l; @@ -277,5 +279,5 @@ export default function tokenize(input, l, p) { pos++; } - return { tokens, pos }; + return { tokens, line, pos, offset }; } diff --git a/src/tokenize-string.js b/src/tokenize-string.js index b1a73d3..3568f5b 100644 --- a/src/tokenize-string.js +++ b/src/tokenize-string.js @@ -18,7 +18,7 @@ let singleQuote = "'".charCodeAt(0), sQuoteEnd = /([.\s]*?)[^\\](?=((#{)|'))/gm, dQuoteEnd = /([.\s]*?)[^\\](?=((#{)|"))/gm; -export default function tokenize(input, l, p, quote) { +export default function tokenize(input, l, p, o, quote) { let tokens = []; let css = input.css.valueOf(); @@ -27,7 +27,7 @@ export default function tokenize(input, l, p, quote) { inInterpolant, inComment, inString; let length = css.length; - let offset = -1; + let offset = o || -1; let line = l || 1; let pos = p || 0; @@ -81,12 +81,13 @@ export default function tokenize(input, l, p, quote) { tokens.push(['startInterpolant', '#{', line, pos + 1 - offset]); next = pos + 1; - let { tokens: t, pos: p } = tokenizeInterpolant(input, line, next + 1); + let { tokens: t, line: l, pos: p, offset: o } = tokenizeInterpolant(input, line, next + 1, offset); tokens = tokens.concat(t); next = p; + line = l; + offset = o; pos = next; - } else { quoteEnd.lastIndex = pos; quoteEnd.test(css); @@ -111,5 +112,5 @@ export default function tokenize(input, l, p, quote) { pos++; } - return { tokens, pos }; + return { tokens, line, pos, offset }; } diff --git a/src/tokenize.js b/src/tokenize.js index 56feb2a..b5b8287 100644 --- a/src/tokenize.js +++ b/src/tokenize.js @@ -139,9 +139,11 @@ export default function tokenize(input, l, p) { tokens.push([quote, quote, line, pos - offset]); next = pos + 1; - let { tokens: t, pos: p } = tokenizeString(input, line, next, quote); + let { tokens: t, line: l, pos: p, offset: o } = tokenizeString(input, line, next, offset, quote); tokens = tokens.concat(t); next = p; + line = l; + offset = o; pos = next; break; @@ -182,7 +184,7 @@ export default function tokenize(input, l, p) { tokens.push(['startComment', '/*', line, pos + 1 - offset]); next = pos + 1; - let { tokens: t, line: l, pos: p, offset: o } = tokenizeComment(input, line, next + 1); + let { tokens: t, line: l, pos: p, offset: o } = tokenizeComment(input, line, next + 1, offset); tokens = tokens.concat(t); next = p; line = l; @@ -214,9 +216,11 @@ export default function tokenize(input, l, p) { tokens.push(['startInterpolant', '#{', line, pos + 1 - offset]); next = pos + 1; - let { tokens: t, pos: p } = tokenizeInterpolant(input, line, next + 1); + let { tokens: t, line: l, pos: p, offset: o } = tokenizeInterpolant(input, line, next + 1, offset); tokens = tokens.concat(t); next = p; + line = l; + offset = o; pos = next; break;