@emmetio/css-abbreviation
Advanced tools
@@ -205,22 +205,48 @@ 'use strict'; | ||
| if (scanner.eat(35 /* Hash */)) { | ||
| scanner.start = scanner.pos; | ||
| scanner.eat(116 /* Transparent */) || scanner.eatWhile(isHex); | ||
| const color = scanner.current(); | ||
| let alpha; | ||
| // a hex color can be followed by `.num` alpha value | ||
| scanner.start = scanner.pos; | ||
| if (scanner.eat(46 /* Dot */) && scanner.eatWhile(Scanner.isNumber)) { | ||
| alpha = scanner.current(); | ||
| const valueStart = scanner.pos; | ||
| let color = ''; | ||
| let alpha = ''; | ||
| if (scanner.eatWhile(isHex)) { | ||
| color = scanner.substring(valueStart, scanner.pos); | ||
| alpha = colorAlpha(scanner); | ||
| } | ||
| const { r, g, b, a } = parseColor(color, alpha); | ||
| return { | ||
| type: 'ColorValue', | ||
| r, g, b, a, | ||
| raw: scanner.substring(start + 1, scanner.pos), | ||
| start, | ||
| end: scanner.pos | ||
| }; | ||
| else if (scanner.eat(116 /* Transparent */)) { | ||
| color = '0'; | ||
| alpha = colorAlpha(scanner) || '0'; | ||
| } | ||
| else { | ||
| alpha = colorAlpha(scanner); | ||
| } | ||
| if (color || alpha || scanner.eof()) { | ||
| const { r, g, b, a } = parseColor(color, alpha); | ||
| return { | ||
| type: 'ColorValue', | ||
| r, g, b, a, | ||
| raw: scanner.substring(start + 1, scanner.pos), | ||
| start, | ||
| end: scanner.pos | ||
| }; | ||
| } | ||
| else { | ||
| // Consumed # but no actual value: invalid color value, treat it as literal | ||
| return createLiteral(scanner, start); | ||
| } | ||
| } | ||
| scanner.pos = start; | ||
| } | ||
| /** | ||
| * Consumes alpha value of color: `.1` | ||
| */ | ||
| function colorAlpha(scanner) { | ||
| const start = scanner.pos; | ||
| if (scanner.eat(46 /* Dot */)) { | ||
| scanner.start = start; | ||
| if (scanner.eatWhile(Scanner.isNumber)) { | ||
| return scanner.current(); | ||
| } | ||
| return '1'; | ||
| } | ||
| return ''; | ||
| } | ||
| /** | ||
| * Consumes white space characters as string literal from given scanner | ||
@@ -227,0 +253,0 @@ */ |
@@ -198,22 +198,48 @@ import Scanner, { isNumber, isAlpha, isAlphaWord, isQuote, isSpace, isAlphaNumericWord, ScannerError } from '@emmetio/scanner'; | ||
| if (scanner.eat(35 /* Hash */)) { | ||
| scanner.start = scanner.pos; | ||
| scanner.eat(116 /* Transparent */) || scanner.eatWhile(isHex); | ||
| const color = scanner.current(); | ||
| let alpha; | ||
| // a hex color can be followed by `.num` alpha value | ||
| scanner.start = scanner.pos; | ||
| if (scanner.eat(46 /* Dot */) && scanner.eatWhile(isNumber)) { | ||
| alpha = scanner.current(); | ||
| const valueStart = scanner.pos; | ||
| let color = ''; | ||
| let alpha = ''; | ||
| if (scanner.eatWhile(isHex)) { | ||
| color = scanner.substring(valueStart, scanner.pos); | ||
| alpha = colorAlpha(scanner); | ||
| } | ||
| const { r, g, b, a } = parseColor(color, alpha); | ||
| return { | ||
| type: 'ColorValue', | ||
| r, g, b, a, | ||
| raw: scanner.substring(start + 1, scanner.pos), | ||
| start, | ||
| end: scanner.pos | ||
| }; | ||
| else if (scanner.eat(116 /* Transparent */)) { | ||
| color = '0'; | ||
| alpha = colorAlpha(scanner) || '0'; | ||
| } | ||
| else { | ||
| alpha = colorAlpha(scanner); | ||
| } | ||
| if (color || alpha || scanner.eof()) { | ||
| const { r, g, b, a } = parseColor(color, alpha); | ||
| return { | ||
| type: 'ColorValue', | ||
| r, g, b, a, | ||
| raw: scanner.substring(start + 1, scanner.pos), | ||
| start, | ||
| end: scanner.pos | ||
| }; | ||
| } | ||
| else { | ||
| // Consumed # but no actual value: invalid color value, treat it as literal | ||
| return createLiteral(scanner, start); | ||
| } | ||
| } | ||
| scanner.pos = start; | ||
| } | ||
| /** | ||
| * Consumes alpha value of color: `.1` | ||
| */ | ||
| function colorAlpha(scanner) { | ||
| const start = scanner.pos; | ||
| if (scanner.eat(46 /* Dot */)) { | ||
| scanner.start = start; | ||
| if (scanner.eatWhile(isNumber)) { | ||
| return scanner.current(); | ||
| } | ||
| return '1'; | ||
| } | ||
| return ''; | ||
| } | ||
| /** | ||
| * Consumes white space characters as string literal from given scanner | ||
@@ -220,0 +246,0 @@ */ |
+2
-2
| { | ||
| "name": "@emmetio/css-abbreviation", | ||
| "version": "2.1.0", | ||
| "version": "2.1.1", | ||
| "description": "Parses Emmet CSS abbreviation into AST tree", | ||
@@ -46,3 +46,3 @@ "main": "./dist/css-abbreviation.cjs.js", | ||
| }, | ||
| "gitHead": "baacc1e0ec3a5b3bc4a329ddae48e1f4245dd45f" | ||
| "gitHead": "82b153e96484d3b840143d3bac2e382453e3c3f7" | ||
| } |
44768
2.98%1365
3.96%