diff options
author | Florian Dold <florian.dold@gmail.com> | 2018-09-20 02:56:13 +0200 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2018-09-20 02:56:13 +0200 |
commit | bbff7403fbf46f9ad92240ac213df8d30ef31b64 (patch) | |
tree | c58400ec5124da1c7d56b01aea83309f80a56c3b /node_modules/clean-css/lib/tokenizer | |
parent | 003fb34971cf63466184351b4db5f7c67df4f444 (diff) |
update packages
Diffstat (limited to 'node_modules/clean-css/lib/tokenizer')
-rw-r--r-- | node_modules/clean-css/lib/tokenizer/marker.js | 2 | ||||
-rw-r--r-- | node_modules/clean-css/lib/tokenizer/token.js | 1 | ||||
-rw-r--r-- | node_modules/clean-css/lib/tokenizer/tokenize.js | 63 |
3 files changed, 59 insertions, 7 deletions
diff --git a/node_modules/clean-css/lib/tokenizer/marker.js b/node_modules/clean-css/lib/tokenizer/marker.js index 767a5f0e8..270fdbc3b 100644 --- a/node_modules/clean-css/lib/tokenizer/marker.js +++ b/node_modules/clean-css/lib/tokenizer/marker.js @@ -2,6 +2,7 @@ var Marker = { ASTERISK: '*', AT: '@', BACK_SLASH: '\\', + CARRIAGE_RETURN: '\r', CLOSE_CURLY_BRACKET: '}', CLOSE_ROUND_BRACKET: ')', CLOSE_SQUARE_BRACKET: ']', @@ -12,7 +13,6 @@ var Marker = { FORWARD_SLASH: '/', INTERNAL: '-clean-css-', NEW_LINE_NIX: '\n', - NEW_LINE_WIN: '\r', OPEN_CURLY_BRACKET: '{', OPEN_ROUND_BRACKET: '(', OPEN_SQUARE_BRACKET: '[', diff --git a/node_modules/clean-css/lib/tokenizer/token.js b/node_modules/clean-css/lib/tokenizer/token.js index acd0154ee..a1d726f0e 100644 --- a/node_modules/clean-css/lib/tokenizer/token.js +++ b/node_modules/clean-css/lib/tokenizer/token.js @@ -9,6 +9,7 @@ var Token = { PROPERTY_BLOCK: 'property-block', // e.g. `--var:{color:red}` PROPERTY_NAME: 'property-name', // e.g. `color` PROPERTY_VALUE: 'property-value', // e.g. `red` + RAW: 'raw', // e.g. anything between /* clean-css ignore:start */ and /* clean-css ignore:end */ comments RULE: 'rule', // e.g `div > a{...}` RULE_SCOPE: 'rule-scope' // e.g `div > a` }; diff --git a/node_modules/clean-css/lib/tokenizer/tokenize.js b/node_modules/clean-css/lib/tokenizer/tokenize.js index 018b89de8..39c9e67bc 100644 --- a/node_modules/clean-css/lib/tokenizer/tokenize.js +++ b/node_modules/clean-css/lib/tokenizer/tokenize.js @@ -28,6 +28,9 @@ var BLOCK_RULES = [ '@supports' ]; +var IGNORE_END_COMMENT_PATTERN = /\/\* clean\-css ignore:end \*\/$/; +var IGNORE_START_COMMENT_PATTERN = /^\/\* clean\-css ignore:start \*\//; + var PAGE_MARGIN_BOXES = [ '@bottom-center', '@bottom-left', @@ -56,7 +59,7 @@ var EXTRA_PAGE_BOXES = [ '@right' ]; -var REPEAT_PATTERN = /^\[\s*\d+\s*\]$/; +var REPEAT_PATTERN = /^\[\s{0,31}\d+\s{0,31}\]$/; var RULE_WORD_SEPARATOR_PATTERN = /[\s\(]/; var TAIL_BROKEN_VALUE_PATTERN = /[\s|\}]*$/; @@ -88,20 +91,25 @@ function intoTokens(source, externalContext, internalContext, isNested) { var buffer = []; var buffers = []; var serializedBuffer; + var serializedBufferPart; var roundBracketLevel = 0; var isQuoted; var isSpace; var isNewLineNix; var isNewLineWin; + var isCarriageReturn; var isCommentStart; var wasCommentStart = false; var isCommentEnd; var wasCommentEnd = false; + var isCommentEndMarker; var isEscaped; var wasEscaped = false; + var isRaw = false; var seekingValue = false; var seekingPropertyBlockClosing = false; var position = internalContext.position; + var lastCommentStartAt; for (; position.index < source.length; position.index++) { var character = source[position.index]; @@ -109,9 +117,12 @@ function intoTokens(source, externalContext, internalContext, isNested) { isQuoted = level == Level.SINGLE_QUOTE || level == Level.DOUBLE_QUOTE; isSpace = character == Marker.SPACE || character == Marker.TAB; isNewLineNix = character == Marker.NEW_LINE_NIX; - isNewLineWin = character == Marker.NEW_LINE_NIX && source[position.index - 1] == Marker.NEW_LINE_WIN; + isNewLineWin = character == Marker.NEW_LINE_NIX && source[position.index - 1] == Marker.CARRIAGE_RETURN; + isCarriageReturn = character == Marker.CARRIAGE_RETURN && source[position.index + 1] && source[position.index + 1] != Marker.NEW_LINE_NIX; isCommentStart = !wasCommentEnd && level != Level.COMMENT && !isQuoted && character == Marker.ASTERISK && source[position.index - 1] == Marker.FORWARD_SLASH; - isCommentEnd = !wasCommentStart && level == Level.COMMENT && character == Marker.FORWARD_SLASH && source[position.index - 1] == Marker.ASTERISK; + isCommentEndMarker = !wasCommentStart && !isQuoted && character == Marker.FORWARD_SLASH && source[position.index - 1] == Marker.ASTERISK; + isCommentEnd = level == Level.COMMENT && isCommentEndMarker; + roundBracketLevel = Math.max(roundBracketLevel, 0); metadata = buffer.length === 0 ? [position.line, position.column, position.source] : @@ -122,6 +133,8 @@ function intoTokens(source, externalContext, internalContext, isNested) { buffer.push(character); } else if (!isCommentEnd && level == Level.COMMENT) { buffer.push(character); + } else if (!isCommentStart && !isCommentEnd && isRaw) { + buffer.push(character); } else if (isCommentStart && (level == Level.BLOCK || level == Level.RULE) && buffer.length > 1) { // comment start within block preceded by some content, e.g. div/*<-- metadatas.push(metadata); @@ -138,6 +151,33 @@ function intoTokens(source, externalContext, internalContext, isNested) { levels.push(level); level = Level.COMMENT; buffer.push(character); + } else if (isCommentEnd && isIgnoreStartComment(buffer)) { + // ignore:start comment end, e.g. /* clean-css ignore:start */<-- + serializedBuffer = buffer.join('').trim() + character; + lastToken = [Token.COMMENT, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]; + newTokens.push(lastToken); + + isRaw = true; + metadata = metadatas.pop() || null; + buffer = buffers.pop() || []; + } else if (isCommentEnd && isIgnoreEndComment(buffer)) { + // ignore:start comment end, e.g. /* clean-css ignore:end */<-- + serializedBuffer = buffer.join('') + character; + lastCommentStartAt = serializedBuffer.lastIndexOf(Marker.FORWARD_SLASH + Marker.ASTERISK); + + serializedBufferPart = serializedBuffer.substring(0, lastCommentStartAt); + lastToken = [Token.RAW, serializedBufferPart, [originalMetadata(metadata, serializedBufferPart, externalContext)]]; + newTokens.push(lastToken); + + serializedBufferPart = serializedBuffer.substring(lastCommentStartAt); + metadata = [position.line, position.column - serializedBufferPart.length + 1, position.source]; + lastToken = [Token.COMMENT, serializedBufferPart, [originalMetadata(metadata, serializedBufferPart, externalContext)]]; + newTokens.push(lastToken); + + isRaw = false; + level = levels.pop(); + metadata = metadatas.pop() || null; + buffer = buffers.pop() || []; } else if (isCommentEnd) { // comment end, e.g. /* comment */<-- serializedBuffer = buffer.join('').trim() + character; @@ -147,6 +187,9 @@ function intoTokens(source, externalContext, internalContext, isNested) { level = levels.pop(); metadata = metadatas.pop() || null; buffer = buffers.pop() || []; + } else if (isCommentEndMarker && source[position.index + 1] != Marker.ASTERISK) { + externalContext.warnings.push('Unexpected \'*/\' at ' + formatPosition([position.line, position.column, position.source]) + '.'); + buffer = []; } else if (character == Marker.SINGLE_QUOTE && !isQuoted) { // single quotation start, e.g. a[href^='https<-- levels.push(level); @@ -442,7 +485,7 @@ function intoTokens(source, externalContext, internalContext, isNested) { } else if (buffer.length == 1 && isNewLineWin) { // ignore windows newline which is composed of two characters buffer.pop(); - } else if (buffer.length > 0 || !isSpace && !isNewLineNix && !isNewLineWin) { + } else if (buffer.length > 0 || !isSpace && !isNewLineNix && !isNewLineWin && !isCarriageReturn) { // any character buffer.push(character); } @@ -452,8 +495,8 @@ function intoTokens(source, externalContext, internalContext, isNested) { wasCommentStart = isCommentStart; wasCommentEnd = isCommentEnd; - position.line = (isNewLineWin || isNewLineNix) ? position.line + 1 : position.line; - position.column = (isNewLineWin || isNewLineNix) ? 0 : position.column + 1; + position.line = (isNewLineWin || isNewLineNix || isCarriageReturn) ? position.line + 1 : position.line; + position.column = (isNewLineWin || isNewLineNix || isCarriageReturn) ? 0 : position.column + 1; } if (seekingValue) { @@ -474,6 +517,14 @@ function intoTokens(source, externalContext, internalContext, isNested) { return allTokens; } +function isIgnoreStartComment(buffer) { + return IGNORE_START_COMMENT_PATTERN.test(buffer.join('') + Marker.FORWARD_SLASH); +} + +function isIgnoreEndComment(buffer) { + return IGNORE_END_COMMENT_PATTERN.test(buffer.join('') + Marker.FORWARD_SLASH); +} + function originalMetadata(metadata, value, externalContext, selectorFallbacks) { var source = metadata[2]; |