| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 // TODO(terry): Need to be consistent with tokens either they're ASCII tokens | 5 // TODO(terry): Need to be consistent with tokens either they're ASCII tokens |
| 6 // e.g., ASTERISK or they're CSS e.g., PSEUDO, COMBINATOR_*. | 6 // e.g., ASTERISK or they're CSS e.g., PSEUDO, COMBINATOR_*. |
| 7 class TokenKind { | 7 class TokenKind { |
| 8 // Common shared tokens used in TokenizerBase. | 8 // Common shared tokens used in TokenizerBase. |
| 9 static final int UNUSED = 0; // Unused place holder... | 9 static const int UNUSED = 0; // Unused place holder... |
| 10 static final int END_OF_FILE = 1; // TODO(terry): Must match base | 10 static const int END_OF_FILE = 1; // TODO(terry): Must match base |
| 11 static final int LPAREN = 2; // ( | 11 static const int LPAREN = 2; // ( |
| 12 static final int RPAREN = 3; // ) | 12 static const int RPAREN = 3; // ) |
| 13 static final int LBRACK = 4; // [ | 13 static const int LBRACK = 4; // [ |
| 14 static final int RBRACK = 5; // ] | 14 static const int RBRACK = 5; // ] |
| 15 static final int LBRACE = 6; // { | 15 static const int LBRACE = 6; // { |
| 16 static final int RBRACE = 7; // } | 16 static const int RBRACE = 7; // } |
| 17 static final int DOT = 8; // . | 17 static const int DOT = 8; // . |
| 18 static final int SEMICOLON = 9; // ; | 18 static const int SEMICOLON = 9; // ; |
| 19 | 19 |
| 20 // Unique tokens for CSS. | 20 // Unique tokens for CSS. |
| 21 static final int AT = 10; // @ | 21 static const int AT = 10; // @ |
| 22 static final int HASH = 11; // # | 22 static const int HASH = 11; // # |
| 23 static final int PLUS = 12; // + | 23 static const int PLUS = 12; // + |
| 24 static final int GREATER = 13; // > | 24 static const int GREATER = 13; // > |
| 25 static final int TILDE = 14; // ~ | 25 static const int TILDE = 14; // ~ |
| 26 static final int ASTERISK = 15; // * | 26 static const int ASTERISK = 15; // * |
| 27 static final int NAMESPACE = 16; // | | 27 static const int NAMESPACE = 16; // | |
| 28 static final int COLON = 17; // : | 28 static const int COLON = 17; // : |
| 29 static final int PRIVATE_NAME = 18; // _ prefix private class or id | 29 static const int PRIVATE_NAME = 18; // _ prefix private class or id |
| 30 static final int COMMA = 19; // , | 30 static const int COMMA = 19; // , |
| 31 static final int SPACE = 20; | 31 static const int SPACE = 20; |
| 32 static final int TAB = 21; // /t | 32 static const int TAB = 21; // /t |
| 33 static final int NEWLINE = 22; // /n | 33 static const int NEWLINE = 22; // /n |
| 34 static final int RETURN = 23; // /r | 34 static const int RETURN = 23; // /r |
| 35 static final int PERCENT = 24; // % | 35 static const int PERCENT = 24; // % |
| 36 static final int SINGLE_QUOTE = 25; // ' | 36 static const int SINGLE_QUOTE = 25; // ' |
| 37 static final int DOUBLE_QUOTE = 26; // " | 37 static const int DOUBLE_QUOTE = 26; // " |
| 38 static final int SLASH = 27; // / | 38 static const int SLASH = 27; // / |
| 39 static final int EQUALS = 28; // = | 39 static const int EQUALS = 28; // = |
| 40 static final int OR = 29; // | | 40 static const int OR = 29; // | |
| 41 static final int CARET = 30; // ^ | 41 static const int CARET = 30; // ^ |
| 42 static final int DOLLAR = 31; // $ | 42 static const int DOLLAR = 31; // $ |
| 43 static final int LESS = 32; // < | 43 static const int LESS = 32; // < |
| 44 static final int BANG = 33; // ! | 44 static const int BANG = 33; // ! |
| 45 static final int MINUS = 34; // - | 45 static const int MINUS = 34; // - |
| 46 | 46 |
| 47 // WARNING: END_TOKENS must be 1 greater than the last token above (last | 47 // WARNING: END_TOKENS must be 1 greater than the last token above (last |
| 48 // character in our list). Also add to kindToString function and the | 48 // character in our list). Also add to kindToString function and the |
| 49 // constructor for TokenKind. | 49 // constructor for TokenKind. |
| 50 | 50 |
| 51 static final int END_TOKENS = 35; // Marker for last token in list | 51 static const int END_TOKENS = 35; // Marker for last token in list |
| 52 | 52 |
| 53 /** [TokenKind] representing integer tokens. */ | 53 /** [TokenKind] representing integer tokens. */ |
| 54 static final int INTEGER = 60; // TODO(terry): must match base | 54 static const int INTEGER = 60; // TODO(terry): must match base |
| 55 | 55 |
| 56 /** [TokenKind] representing hex integer tokens. */ | 56 /** [TokenKind] representing hex integer tokens. */ |
| 57 // static final int HEX_INTEGER = 61; // TODO(terry): must match bas
e | 57 // static const int HEX_INTEGER = 61; // TODO(terry): must match bas
e |
| 58 | 58 |
| 59 /** [TokenKind] representing double tokens. */ | 59 /** [TokenKind] representing double tokens. */ |
| 60 static final int DOUBLE = 62; // TODO(terry): must match base | 60 static const int DOUBLE = 62; // TODO(terry): must match base |
| 61 | 61 |
| 62 /** [TokenKind] representing whitespace tokens. */ | 62 /** [TokenKind] representing whitespace tokens. */ |
| 63 static final int WHITESPACE = 63; // TODO(terry): must match base | 63 static const int WHITESPACE = 63; // TODO(terry): must match base |
| 64 | 64 |
| 65 /** [TokenKind] representing comment tokens. */ | 65 /** [TokenKind] representing comment tokens. */ |
| 66 static final int COMMENT = 64; // TODO(terry): must match base | 66 static const int COMMENT = 64; // TODO(terry): must match base |
| 67 | 67 |
| 68 /** [TokenKind] representing error tokens. */ | 68 /** [TokenKind] representing error tokens. */ |
| 69 static final int ERROR = 65; // TODO(terry): must match base | 69 static const int ERROR = 65; // TODO(terry): must match base |
| 70 | 70 |
| 71 /** [TokenKind] representing incomplete string tokens. */ | 71 /** [TokenKind] representing incomplete string tokens. */ |
| 72 static final int INCOMPLETE_STRING = 66; // TODO(terry): must match base | 72 static const int INCOMPLETE_STRING = 66; // TODO(terry): must match base |
| 73 | 73 |
| 74 /** [TokenKind] representing incomplete comment tokens. */ | 74 /** [TokenKind] representing incomplete comment tokens. */ |
| 75 static final int INCOMPLETE_COMMENT = 67; // TODO(terry): must match base | 75 static const int INCOMPLETE_COMMENT = 67; // TODO(terry): must match base |
| 76 | 76 |
| 77 // Synthesized Tokens (no character associated with TOKEN). | 77 // Synthesized Tokens (no character associated with TOKEN). |
| 78 // TODO(terry): Possible common names used by both Dart and CSS tokenizers. | 78 // TODO(terry): Possible common names used by both Dart and CSS tokenizers. |
| 79 static final int STRING = 500; | 79 static const int STRING = 500; |
| 80 static final int STRING_PART = 501; | 80 static const int STRING_PART = 501; |
| 81 static final int NUMBER = 502; | 81 static const int NUMBER = 502; |
| 82 static final int HEX_NUMBER = 503; | 82 static const int HEX_NUMBER = 503; |
| 83 static final int HTML_COMMENT = 504; // <!-- | 83 static const int HTML_COMMENT = 504; // <!-- |
| 84 static final int IMPORTANT = 505; // !important | 84 static const int IMPORTANT = 505; // !important |
| 85 static final int IDENTIFIER = 511; | 85 static const int IDENTIFIER = 511; |
| 86 | 86 |
| 87 // Uniquely synthesized tokens for CSS. | 87 // Uniquely synthesized tokens for CSS. |
| 88 static final int SELECTOR_EXPRESSION = 512; | 88 static const int SELECTOR_EXPRESSION = 512; |
| 89 static final int COMBINATOR_NONE = 513; | 89 static const int COMBINATOR_NONE = 513; |
| 90 static final int COMBINATOR_DESCENDANT = 514; // Space combinator | 90 static const int COMBINATOR_DESCENDANT = 514; // Space combinator |
| 91 static final int COMBINATOR_PLUS = 515; // + combinator | 91 static const int COMBINATOR_PLUS = 515; // + combinator |
| 92 static final int COMBINATOR_GREATER = 516; // > combinator | 92 static const int COMBINATOR_GREATER = 516; // > combinator |
| 93 static final int COMBINATOR_TILDE = 517; // ~ combinator | 93 static const int COMBINATOR_TILDE = 517; // ~ combinator |
| 94 | 94 |
| 95 static final int UNARY_OP_NONE = 518; // No unary operator present. | 95 static const int UNARY_OP_NONE = 518; // No unary operator present. |
| 96 | 96 |
| 97 // Attribute match types: | 97 // Attribute match types: |
| 98 static final int INCLUDES = 530; // '~=' | 98 static const int INCLUDES = 530; // '~=' |
| 99 static final int DASH_MATCH = 531; // '|=' | 99 static const int DASH_MATCH = 531; // '|=' |
| 100 static final int PREFIX_MATCH = 532; // '^=' | 100 static const int PREFIX_MATCH = 532; // '^=' |
| 101 static final int SUFFIX_MATCH = 533; // '$=' | 101 static const int SUFFIX_MATCH = 533; // '$=' |
| 102 static final int SUBSTRING_MATCH = 534; // '*=' | 102 static const int SUBSTRING_MATCH = 534; // '*=' |
| 103 static final int NO_MATCH = 535; // No operator. | 103 static const int NO_MATCH = 535; // No operator. |
| 104 | 104 |
| 105 // Unit types: | 105 // Unit types: |
| 106 static final int UNIT_EM = 600; | 106 static const int UNIT_EM = 600; |
| 107 static final int UNIT_EX = 601; | 107 static const int UNIT_EX = 601; |
| 108 static final int UNIT_LENGTH_PX = 602; | 108 static const int UNIT_LENGTH_PX = 602; |
| 109 static final int UNIT_LENGTH_CM = 603; | 109 static const int UNIT_LENGTH_CM = 603; |
| 110 static final int UNIT_LENGTH_MM = 604; | 110 static const int UNIT_LENGTH_MM = 604; |
| 111 static final int UNIT_LENGTH_IN = 605; | 111 static const int UNIT_LENGTH_IN = 605; |
| 112 static final int UNIT_LENGTH_PT = 606; | 112 static const int UNIT_LENGTH_PT = 606; |
| 113 static final int UNIT_LENGTH_PC = 607; | 113 static const int UNIT_LENGTH_PC = 607; |
| 114 static final int UNIT_ANGLE_DEG = 608; | 114 static const int UNIT_ANGLE_DEG = 608; |
| 115 static final int UNIT_ANGLE_RAD = 609; | 115 static const int UNIT_ANGLE_RAD = 609; |
| 116 static final int UNIT_ANGLE_GRAD = 610; | 116 static const int UNIT_ANGLE_GRAD = 610; |
| 117 static final int UNIT_TIME_MS = 611; | 117 static const int UNIT_TIME_MS = 611; |
| 118 static final int UNIT_TIME_S = 612; | 118 static const int UNIT_TIME_S = 612; |
| 119 static final int UNIT_FREQ_HZ = 613; | 119 static const int UNIT_FREQ_HZ = 613; |
| 120 static final int UNIT_FREQ_KHZ = 614; | 120 static const int UNIT_FREQ_KHZ = 614; |
| 121 static final int UNIT_PERCENT = 615; | 121 static const int UNIT_PERCENT = 615; |
| 122 static final int UNIT_FRACTION = 616; | 122 static const int UNIT_FRACTION = 616; |
| 123 | 123 |
| 124 // Directives (@nnnn) | 124 // Directives (@nnnn) |
| 125 static final int DIRECTIVE_NONE = 650; | 125 static const int DIRECTIVE_NONE = 650; |
| 126 static final int DIRECTIVE_IMPORT = 651; | 126 static const int DIRECTIVE_IMPORT = 651; |
| 127 static final int DIRECTIVE_MEDIA = 652; | 127 static const int DIRECTIVE_MEDIA = 652; |
| 128 static final int DIRECTIVE_PAGE = 653; | 128 static const int DIRECTIVE_PAGE = 653; |
| 129 static final int DIRECTIVE_INCLUDE = 654; | 129 static const int DIRECTIVE_INCLUDE = 654; |
| 130 static final int DIRECTIVE_STYLET = 655; | 130 static const int DIRECTIVE_STYLET = 655; |
| 131 static final int DIRECTIVE_KEYFRAMES = 656; | 131 static const int DIRECTIVE_KEYFRAMES = 656; |
| 132 static final int DIRECTIVE_FONTFACE = 657; | 132 static const int DIRECTIVE_FONTFACE = 657; |
| 133 | 133 |
| 134 // Simple selector type. | 134 // Simple selector type. |
| 135 static final int CLASS_NAME = 700; // .class | 135 static const int CLASS_NAME = 700; // .class |
| 136 static final int ELEMENT_NAME = 701; // tagName | 136 static const int ELEMENT_NAME = 701; // tagName |
| 137 static final int HASH_NAME = 702; // #elementId | 137 static const int HASH_NAME = 702; // #elementId |
| 138 static final int ATTRIBUTE_NAME = 703; // [attrib] | 138 static const int ATTRIBUTE_NAME = 703; // [attrib] |
| 139 static final int PSEUDO_ELEMENT_NAME = 704; // ::pseudoElement | 139 static const int PSEUDO_ELEMENT_NAME = 704; // ::pseudoElement |
| 140 static final int PSEUDO_CLASS_NAME = 705; // :pseudoClass | 140 static const int PSEUDO_CLASS_NAME = 705; // :pseudoClass |
| 141 static final int NEGATION = 706; // NOT | 141 static const int NEGATION = 706; // NOT |
| 142 | 142 |
| 143 static final List<Map<int, String>> _DIRECTIVES = const [ | 143 static const List<Map<int, String>> _DIRECTIVES = const [ |
| 144 const {'type': TokenKind.DIRECTIVE_IMPORT, 'value' : 'import'}, | 144 const {'type': TokenKind.DIRECTIVE_IMPORT, 'value' : 'import'}, |
| 145 const {'type': TokenKind.DIRECTIVE_MEDIA, 'value' : 'media'}, | 145 const {'type': TokenKind.DIRECTIVE_MEDIA, 'value' : 'media'}, |
| 146 const {'type': TokenKind.DIRECTIVE_PAGE, 'value' : 'page'}, | 146 const {'type': TokenKind.DIRECTIVE_PAGE, 'value' : 'page'}, |
| 147 const {'type': TokenKind.DIRECTIVE_INCLUDE, 'value' : 'include'}, | 147 const {'type': TokenKind.DIRECTIVE_INCLUDE, 'value' : 'include'}, |
| 148 const {'type': TokenKind.DIRECTIVE_STYLET, 'value' : 'stylet'}, | 148 const {'type': TokenKind.DIRECTIVE_STYLET, 'value' : 'stylet'}, |
| 149 const {'type': TokenKind.DIRECTIVE_KEYFRAMES, 'value' : '-webkit-keyframes'}
, | 149 const {'type': TokenKind.DIRECTIVE_KEYFRAMES, 'value' : '-webkit-keyframes'}
, |
| 150 const {'type': TokenKind.DIRECTIVE_FONTFACE, 'value' : 'font-face'}, | 150 const {'type': TokenKind.DIRECTIVE_FONTFACE, 'value' : 'font-face'}, |
| 151 ]; | 151 ]; |
| 152 | 152 |
| 153 static final List<Map<int, String>> _UNITS = const [ | 153 static const List<Map<int, String>> _UNITS = const [ |
| 154 const {'unit': TokenKind.UNIT_EM, 'value' : 'em'}, | 154 const {'unit': TokenKind.UNIT_EM, 'value' : 'em'}, |
| 155 const {'unit': TokenKind.UNIT_EX, 'value' : 'ex'}, | 155 const {'unit': TokenKind.UNIT_EX, 'value' : 'ex'}, |
| 156 const {'unit': TokenKind.UNIT_LENGTH_PX, 'value' : 'px'}, | 156 const {'unit': TokenKind.UNIT_LENGTH_PX, 'value' : 'px'}, |
| 157 const {'unit': TokenKind.UNIT_LENGTH_CM, 'value' : 'cm'}, | 157 const {'unit': TokenKind.UNIT_LENGTH_CM, 'value' : 'cm'}, |
| 158 const {'unit': TokenKind.UNIT_LENGTH_MM, 'value' : 'mm'}, | 158 const {'unit': TokenKind.UNIT_LENGTH_MM, 'value' : 'mm'}, |
| 159 const {'unit': TokenKind.UNIT_LENGTH_IN, 'value' : 'in'}, | 159 const {'unit': TokenKind.UNIT_LENGTH_IN, 'value' : 'in'}, |
| 160 const {'unit': TokenKind.UNIT_LENGTH_PT, 'value' : 'pt'}, | 160 const {'unit': TokenKind.UNIT_LENGTH_PT, 'value' : 'pt'}, |
| 161 const {'unit': TokenKind.UNIT_LENGTH_PC, 'value' : 'pc'}, | 161 const {'unit': TokenKind.UNIT_LENGTH_PC, 'value' : 'pc'}, |
| 162 const {'unit': TokenKind.UNIT_ANGLE_DEG, 'value' : 'deg'}, | 162 const {'unit': TokenKind.UNIT_ANGLE_DEG, 'value' : 'deg'}, |
| 163 const {'unit': TokenKind.UNIT_ANGLE_RAD, 'value' : 'rad'}, | 163 const {'unit': TokenKind.UNIT_ANGLE_RAD, 'value' : 'rad'}, |
| 164 const {'unit': TokenKind.UNIT_ANGLE_GRAD, 'value' : 'grad'}, | 164 const {'unit': TokenKind.UNIT_ANGLE_GRAD, 'value' : 'grad'}, |
| 165 const {'unit': TokenKind.UNIT_TIME_MS, 'value' : 'ms'}, | 165 const {'unit': TokenKind.UNIT_TIME_MS, 'value' : 'ms'}, |
| 166 const {'unit': TokenKind.UNIT_TIME_S, 'value' : 's'}, | 166 const {'unit': TokenKind.UNIT_TIME_S, 'value' : 's'}, |
| 167 const {'unit': TokenKind.UNIT_FREQ_HZ, 'value' : 'hz'}, | 167 const {'unit': TokenKind.UNIT_FREQ_HZ, 'value' : 'hz'}, |
| 168 const {'unit': TokenKind.UNIT_FREQ_KHZ, 'value' : 'khz'}, | 168 const {'unit': TokenKind.UNIT_FREQ_KHZ, 'value' : 'khz'}, |
| 169 const {'unit': TokenKind.UNIT_FRACTION, 'value' : 'fr'}, | 169 const {'unit': TokenKind.UNIT_FRACTION, 'value' : 'fr'}, |
| 170 ]; | 170 ]; |
| 171 | 171 |
| 172 // Some more constants: | 172 // Some more constants: |
| 173 static final int ASCII_UPPER_A = 65; // ASCII value for uppercase A | 173 static const int ASCII_UPPER_A = 65; // ASCII value for uppercase A |
| 174 static final int ASCII_UPPER_Z = 90; // ASCII value for uppercase Z | 174 static const int ASCII_UPPER_Z = 90; // ASCII value for uppercase Z |
| 175 | 175 |
| 176 // Extended color keywords: | 176 // Extended color keywords: |
| 177 static final List<Map<String, int>> _EXTENDED_COLOR_NAMES = const [ | 177 static const List<Map<String, int>> _EXTENDED_COLOR_NAMES = const [ |
| 178 const {'name' : 'aliceblue', 'value' : 0xF08FF}, | 178 const {'name' : 'aliceblue', 'value' : 0xF08FF}, |
| 179 const {'name' : 'antiquewhite', 'value' : 0xFAEBD7}, | 179 const {'name' : 'antiquewhite', 'value' : 0xFAEBD7}, |
| 180 const {'name' : 'aqua', 'value' : 0x00FFFF}, | 180 const {'name' : 'aqua', 'value' : 0x00FFFF}, |
| 181 const {'name' : 'aquamarine', 'value' : 0x7FFFD4}, | 181 const {'name' : 'aquamarine', 'value' : 0x7FFFD4}, |
| 182 const {'name' : 'azure', 'value' : 0xF0FFFF}, | 182 const {'name' : 'azure', 'value' : 0xF0FFFF}, |
| 183 const {'name' : 'beige', 'value' : 0xF5F5DC}, | 183 const {'name' : 'beige', 'value' : 0xF5F5DC}, |
| 184 const {'name' : 'bisque', 'value' : 0xFFE4C4}, | 184 const {'name' : 'bisque', 'value' : 0xFFE4C4}, |
| 185 const {'name' : 'black', 'value' : 0x000000}, | 185 const {'name' : 'black', 'value' : 0x000000}, |
| 186 const {'name' : 'blanchedalmond', 'value' : 0xFFEBCD}, | 186 const {'name' : 'blanchedalmond', 'value' : 0xFFEBCD}, |
| 187 const {'name' : 'blue', 'value' : 0x0000FF}, | 187 const {'name' : 'blue', 'value' : 0x0000FF}, |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 325 ]; | 325 ]; |
| 326 | 326 |
| 327 // TODO(terry): Should used Dart mirroring for parameter values and types | 327 // TODO(terry): Should used Dart mirroring for parameter values and types |
| 328 // especially for enumeration (e.g., counter's second parameter | 328 // especially for enumeration (e.g., counter's second parameter |
| 329 // is list-style-type which is an enumerated list for ordering | 329 // is list-style-type which is an enumerated list for ordering |
| 330 // of a list 'circle', 'decimal', 'lower-roman', 'square', etc. | 330 // of a list 'circle', 'decimal', 'lower-roman', 'square', etc. |
| 331 // see http://www.w3schools.com/cssref/pr_list-style-type.asp | 331 // see http://www.w3schools.com/cssref/pr_list-style-type.asp |
| 332 // for list of possible values. | 332 // for list of possible values. |
| 333 | 333 |
| 334 // List of valid CSS functions: | 334 // List of valid CSS functions: |
| 335 static final List<Map<String, Object>> _FUNCTIONS = const [ | 335 static const List<Map<String, Object>> _FUNCTIONS = const [ |
| 336 const {'name' : 'counter', 'info' : const {'params' : 2, 'expr' : false}}, | 336 const {'name' : 'counter', 'info' : const {'params' : 2, 'expr' : false}}, |
| 337 const {'name' : 'attr', 'info' : const {'params' : 1, 'expr' : false}}, | 337 const {'name' : 'attr', 'info' : const {'params' : 1, 'expr' : false}}, |
| 338 const {'name' : 'calc', 'info' : const {'params' : 1, 'expr' : true}}, | 338 const {'name' : 'calc', 'info' : const {'params' : 1, 'expr' : true}}, |
| 339 const {'name' : 'min', 'info' : const {'params' : 2, 'expr' : true}}, | 339 const {'name' : 'min', 'info' : const {'params' : 2, 'expr' : true}}, |
| 340 const {'name' : 'max', 'info' : const {'params' : 2, 'expr' : true}}, | 340 const {'name' : 'max', 'info' : const {'params' : 2, 'expr' : true}}, |
| 341 | 341 |
| 342 // 2D functions: | 342 // 2D functions: |
| 343 const {'name' : 'translateX', | 343 const {'name' : 'translateX', |
| 344 'info' : const {'params' : 1, 'expr' : false}}, | 344 'info' : const {'params' : 1, 'expr' : false}}, |
| 345 const {'name' : 'translateY', | 345 const {'name' : 'translateY', |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 587 } | 587 } |
| 588 | 588 |
| 589 } | 589 } |
| 590 | 590 |
| 591 class NoColorMatchException implements Exception { | 591 class NoColorMatchException implements Exception { |
| 592 String _colorName; | 592 String _colorName; |
| 593 NoColorMatchException(this._colorName); | 593 NoColorMatchException(this._colorName); |
| 594 | 594 |
| 595 String get name() => _colorName; | 595 String get name() => _colorName; |
| 596 } | 596 } |
| OLD | NEW |