// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

part of csslib.parser;

// TODO(terry): Need to be consistent with tokens either they're ASCII tokens
//              e.g., ASTERISK or they're CSS e.g., PSEUDO, COMBINATOR_*.
class TokenKind {
  // Common shared tokens used in TokenizerBase.
  static const int UNUSED = 0; // Unused place holder...
  static const int END_OF_FILE = 1; // EOF
  static const int LPAREN = 2; // (
  static const int RPAREN = 3; // )
  static const int LBRACK = 4; // [
  static const int RBRACK = 5; // ]
  static const int LBRACE = 6; // {
  static const int RBRACE = 7; // }
  static const int DOT = 8; // .
  static const int SEMICOLON = 9; // ;

  // Unique tokens for CSS.
  static const int AT = 10; // @
  static const int HASH = 11; // #
  static const int PLUS = 12; // +
  static const int GREATER = 13; // >
  static const int TILDE = 14; // ~
  static const int ASTERISK = 15; // *
  static const int NAMESPACE = 16; // |
  static const int COLON = 17; // :
  static const int PRIVATE_NAME = 18; // _ prefix private class or id
  static const int COMMA = 19; // ,
  static const int SPACE = 20;
  static const int TAB = 21; // /t
  static const int NEWLINE = 22; // /n
  static const int RETURN = 23; // /r
  static const int PERCENT = 24; // %
  static const int SINGLE_QUOTE = 25; // '
  static const int DOUBLE_QUOTE = 26; // "
  static const int SLASH = 27; // /
  static const int EQUALS = 28; // =
  static const int CARET = 30; // ^
  static const int DOLLAR = 31; // $
  static const int LESS = 32; // <
  static const int BANG = 33; // !
  static const int MINUS = 34; // -
  static const int BACKSLASH = 35; // \
  static const int AMPERSAND = 36; // &

  // WARNING: Tokens from this point and above must have the corresponding ASCII
  //          character in the TokenChar list at the bottom of this file.  The
  //          order of the above tokens should be the same order as TokenChar.

  /** [TokenKind] representing integer tokens. */
  static const int INTEGER = 60;

  /** [TokenKind] representing hex integer tokens. */
  static const int HEX_INTEGER = 61;

  /** [TokenKind] representing double tokens. */
  static const int DOUBLE = 62;

  /** [TokenKind] representing whitespace tokens. */
  static const int WHITESPACE = 63;

  /** [TokenKind] representing comment tokens. */
  static const int COMMENT = 64;

  /** [TokenKind] representing error tokens. */
  static const int ERROR = 65;

  /** [TokenKind] representing incomplete string tokens. */
  static const int INCOMPLETE_STRING = 66;

  /** [TokenKind] representing incomplete comment tokens. */
  static const int INCOMPLETE_COMMENT = 67;

  static const int VAR_DEFINITION = 400; // var-NNN-NNN
  static const int VAR_USAGE = 401; // var(NNN-NNN [,default])

  // Synthesized Tokens (no character associated with TOKEN).
  static const int STRING = 500;
  static const int STRING_PART = 501;
  static const int NUMBER = 502;
  static const int HEX_NUMBER = 503;
  static const int HTML_COMMENT = 504; // <!--
  static const int IMPORTANT = 505; // !important
  static const int CDATA_START = 506; // <![CDATA[
  static const int CDATA_END = 507; // ]]>
  // U+uNumber[-U+uNumber]
  // uNumber = 0..10FFFF | ?[?]*
  static const int UNICODE_RANGE = 508;
  static const int HEX_RANGE = 509; // ? in the hex range
  static const int IDENTIFIER = 511;

  // Uniquely synthesized tokens for CSS.
  static const int SELECTOR_EXPRESSION = 512;
  static const int COMBINATOR_NONE = 513;
  static const int COMBINATOR_DESCENDANT = 514; // Space combinator
  static const int COMBINATOR_PLUS = 515; // + combinator
  static const int COMBINATOR_GREATER = 516; // > combinator
  static const int COMBINATOR_TILDE = 517; // ~ combinator

  static const int UNARY_OP_NONE = 518; // No unary operator present.

  // Attribute match types:
  static const int INCLUDES = 530; // '~='
  static const int DASH_MATCH = 531; // '|='
  static const int PREFIX_MATCH = 532; // '^='
  static const int SUFFIX_MATCH = 533; // '$='
  static const int SUBSTRING_MATCH = 534; // '*='
  static const int NO_MATCH = 535; // No operator.

  // Unit types:
  static const int UNIT_EM = 600;
  static const int UNIT_EX = 601;
  static const int UNIT_LENGTH_PX = 602;
  static const int UNIT_LENGTH_CM = 603;
  static const int UNIT_LENGTH_MM = 604;
  static const int UNIT_LENGTH_IN = 605;
  static const int UNIT_LENGTH_PT = 606;
  static const int UNIT_LENGTH_PC = 607;
  static const int UNIT_ANGLE_DEG = 608;
  static const int UNIT_ANGLE_RAD = 609;
  static const int UNIT_ANGLE_GRAD = 610;
  static const int UNIT_ANGLE_TURN = 611;
  static const int UNIT_TIME_MS = 612;
  static const int UNIT_TIME_S = 613;
  static const int UNIT_FREQ_HZ = 614;
  static const int UNIT_FREQ_KHZ = 615;
  static const int UNIT_PERCENT = 616;
  static const int UNIT_FRACTION = 617;
  static const int UNIT_RESOLUTION_DPI = 618;
  static const int UNIT_RESOLUTION_DPCM = 619;
  static const int UNIT_RESOLUTION_DPPX = 620;
  static const int UNIT_CH = 621; // Measure of "0" U+0030 glyph.
  static const int UNIT_REM = 622; // computed value ‘font-size’ on root elem.
  static const int UNIT_VIEWPORT_VW = 623;
  static const int UNIT_VIEWPORT_VH = 624;
  static const int UNIT_VIEWPORT_VMIN = 625;
  static const int UNIT_VIEWPORT_VMAX = 626;

  // Directives (@nnnn)
  static const int DIRECTIVE_NONE = 640;
  static const int DIRECTIVE_IMPORT = 641;
  static const int DIRECTIVE_MEDIA = 642;
  static const int DIRECTIVE_PAGE = 643;
  static const int DIRECTIVE_CHARSET = 644;
  static const int DIRECTIVE_STYLET = 645;
  static const int DIRECTIVE_KEYFRAMES = 646;
  static const int DIRECTIVE_WEB_KIT_KEYFRAMES = 647;
  static const int DIRECTIVE_MOZ_KEYFRAMES = 648;
  static const int DIRECTIVE_MS_KEYFRAMES = 649;
  static const int DIRECTIVE_O_KEYFRAMES = 650;
  static const int DIRECTIVE_FONTFACE = 651;
  static const int DIRECTIVE_NAMESPACE = 652;
  static const int DIRECTIVE_HOST = 653;
  static const int DIRECTIVE_MIXIN = 654;
  static const int DIRECTIVE_INCLUDE = 655;
  static const int DIRECTIVE_CONTENT = 656;
  static const int DIRECTIVE_EXTEND = 657;

  // Media query operators
  static const int MEDIA_OP_ONLY = 665; // Unary.
  static const int MEDIA_OP_NOT = 666; // Unary.
  static const int MEDIA_OP_AND = 667; // Binary.

  // Directives inside of a @page (margin sym).
  static const int MARGIN_DIRECTIVE_TOPLEFTCORNER = 670;
  static const int MARGIN_DIRECTIVE_TOPLEFT = 671;
  static const int MARGIN_DIRECTIVE_TOPCENTER = 672;
  static const int MARGIN_DIRECTIVE_TOPRIGHT = 673;
  static const int MARGIN_DIRECTIVE_TOPRIGHTCORNER = 674;
  static const int MARGIN_DIRECTIVE_BOTTOMLEFTCORNER = 675;
  static const int MARGIN_DIRECTIVE_BOTTOMLEFT = 676;
  static const int MARGIN_DIRECTIVE_BOTTOMCENTER = 677;
  static const int MARGIN_DIRECTIVE_BOTTOMRIGHT = 678;
  static const int MARGIN_DIRECTIVE_BOTTOMRIGHTCORNER = 679;
  static const int MARGIN_DIRECTIVE_LEFTTOP = 680;
  static const int MARGIN_DIRECTIVE_LEFTMIDDLE = 681;
  static const int MARGIN_DIRECTIVE_LEFTBOTTOM = 682;
  static const int MARGIN_DIRECTIVE_RIGHTTOP = 683;
  static const int MARGIN_DIRECTIVE_RIGHTMIDDLE = 684;
  static const int MARGIN_DIRECTIVE_RIGHTBOTTOM = 685;

  // Simple selector type.
  static const int CLASS_NAME = 700; // .class
  static const int ELEMENT_NAME = 701; // tagName
  static const int HASH_NAME = 702; // #elementId
  static const int ATTRIBUTE_NAME = 703; // [attrib]
  static const int PSEUDO_ELEMENT_NAME = 704; // ::pseudoElement
  static const int PSEUDO_CLASS_NAME = 705; // :pseudoClass
  static const int NEGATION = 706; // NOT

  static const List<Map<int, String>> _DIRECTIVES = const [
    const {'type': TokenKind.DIRECTIVE_IMPORT, 'value': 'import'},
    const {'type': TokenKind.DIRECTIVE_MEDIA, 'value': 'media'},
    const {'type': TokenKind.DIRECTIVE_PAGE, 'value': 'page'},
    const {'type': TokenKind.DIRECTIVE_CHARSET, 'value': 'charset'},
    const {'type': TokenKind.DIRECTIVE_STYLET, 'value': 'stylet'},
    const {'type': TokenKind.DIRECTIVE_KEYFRAMES, 'value': 'keyframes'},
    const {
      'type': TokenKind.DIRECTIVE_WEB_KIT_KEYFRAMES,
      'value': '-webkit-keyframes'
    },
    const {
      'type': TokenKind.DIRECTIVE_MOZ_KEYFRAMES,
      'value': '-moz-keyframes'
    },
    const {'type': TokenKind.DIRECTIVE_MS_KEYFRAMES, 'value': '-ms-keyframes'},
    const {'type': TokenKind.DIRECTIVE_O_KEYFRAMES, 'value': '-o-keyframes'},
    const {'type': TokenKind.DIRECTIVE_FONTFACE, 'value': 'font-face'},
    const {'type': TokenKind.DIRECTIVE_NAMESPACE, 'value': 'namespace'},
    const {'type': TokenKind.DIRECTIVE_HOST, 'value': 'host'},
    const {'type': TokenKind.DIRECTIVE_MIXIN, 'value': 'mixin'},
    const {'type': TokenKind.DIRECTIVE_INCLUDE, 'value': 'include'},
    const {'type': TokenKind.DIRECTIVE_CONTENT, 'value': 'content'},
    const {'type': TokenKind.DIRECTIVE_EXTEND, 'value': 'extend'},
  ];

  static const List<Map<int, String>> MEDIA_OPERATORS = const [
    const {'type': TokenKind.MEDIA_OP_ONLY, 'value': 'only'},
    const {'type': TokenKind.MEDIA_OP_NOT, 'value': 'not'},
    const {'type': TokenKind.MEDIA_OP_AND, 'value': 'and'},
  ];

  static const List<Map<int, String>> MARGIN_DIRECTIVES = const [
    const {
      'type': TokenKind.MARGIN_DIRECTIVE_TOPLEFTCORNER,
      'value': 'top-left-corner'
    },
    const {'type': TokenKind.MARGIN_DIRECTIVE_TOPLEFT, 'value': 'top-left'},
    const {'type': TokenKind.MARGIN_DIRECTIVE_TOPCENTER, 'value': 'top-center'},
    const {'type': TokenKind.MARGIN_DIRECTIVE_TOPRIGHT, 'value': 'top-right'},
    const {
      'type': TokenKind.MARGIN_DIRECTIVE_TOPRIGHTCORNER,
      'value': 'top-right-corner'
    },
    const {
      'type': TokenKind.MARGIN_DIRECTIVE_BOTTOMLEFTCORNER,
      'value': 'bottom-left-corner'
    },
    const {
      'type': TokenKind.MARGIN_DIRECTIVE_BOTTOMLEFT,
      'value': 'bottom-left'
    },
    const {
      'type': TokenKind.MARGIN_DIRECTIVE_BOTTOMCENTER,
      'value': 'bottom-center'
    },
    const {
      'type': TokenKind.MARGIN_DIRECTIVE_BOTTOMRIGHT,
      'value': 'bottom-right'
    },
    const {
      'type': TokenKind.MARGIN_DIRECTIVE_BOTTOMRIGHTCORNER,
      'value': 'bottom-right-corner'
    },
    const {'type': TokenKind.MARGIN_DIRECTIVE_LEFTTOP, 'value': 'left-top'},
    const {
      'type': TokenKind.MARGIN_DIRECTIVE_LEFTMIDDLE,
      'value': 'left-middle'
    },
    const {
      'type': TokenKind.MARGIN_DIRECTIVE_LEFTBOTTOM,
      'value': 'right-bottom'
    },
    const {'type': TokenKind.MARGIN_DIRECTIVE_RIGHTTOP, 'value': 'right-top'},
    const {
      'type': TokenKind.MARGIN_DIRECTIVE_RIGHTMIDDLE,
      'value': 'right-middle'
    },
    const {
      'type': TokenKind.MARGIN_DIRECTIVE_RIGHTBOTTOM,
      'value': 'right-bottom'
    },
  ];

  static const List<Map> _UNITS = const [
    const {'unit': TokenKind.UNIT_EM, 'value': 'em'},
    const {'unit': TokenKind.UNIT_EX, 'value': 'ex'},
    const {'unit': TokenKind.UNIT_LENGTH_PX, 'value': 'px'},
    const {'unit': TokenKind.UNIT_LENGTH_CM, 'value': 'cm'},
    const {'unit': TokenKind.UNIT_LENGTH_MM, 'value': 'mm'},
    const {'unit': TokenKind.UNIT_LENGTH_IN, 'value': 'in'},
    const {'unit': TokenKind.UNIT_LENGTH_PT, 'value': 'pt'},
    const {'unit': TokenKind.UNIT_LENGTH_PC, 'value': 'pc'},
    const {'unit': TokenKind.UNIT_ANGLE_DEG, 'value': 'deg'},
    const {'unit': TokenKind.UNIT_ANGLE_RAD, 'value': 'rad'},
    const {'unit': TokenKind.UNIT_ANGLE_GRAD, 'value': 'grad'},
    const {'unit': TokenKind.UNIT_ANGLE_TURN, 'value': 'turn'},
    const {'unit': TokenKind.UNIT_TIME_MS, 'value': 'ms'},
    const {'unit': TokenKind.UNIT_TIME_S, 'value': 's'},
    const {'unit': TokenKind.UNIT_FREQ_HZ, 'value': 'hz'},
    const {'unit': TokenKind.UNIT_FREQ_KHZ, 'value': 'khz'},
    const {'unit': TokenKind.UNIT_FRACTION, 'value': 'fr'},
    const {'unit': TokenKind.UNIT_RESOLUTION_DPI, 'value': 'dpi'},
    const {'unit': TokenKind.UNIT_RESOLUTION_DPCM, 'value': 'dpcm'},
    const {'unit': TokenKind.UNIT_RESOLUTION_DPPX, 'value': 'dppx'},
    const {'unit': TokenKind.UNIT_CH, 'value': 'ch'},
    const {'unit': TokenKind.UNIT_REM, 'value': 'rem'},
    const {'unit': TokenKind.UNIT_VIEWPORT_VW, 'value': 'vw'},
    const {'unit': TokenKind.UNIT_VIEWPORT_VH, 'value': 'vh'},
    const {'unit': TokenKind.UNIT_VIEWPORT_VMIN, 'value': 'vmin'},
    const {'unit': TokenKind.UNIT_VIEWPORT_VMAX, 'value': 'vmax'},
  ];

  // Some more constants:
  static const int ASCII_UPPER_A = 65; // ASCII value for uppercase A
  static const int ASCII_UPPER_Z = 90; // ASCII value for uppercase Z

  // Extended color keywords:
  static const List<Map> _EXTENDED_COLOR_NAMES = const [
    const {'name': 'aliceblue', 'value': 0xF08FF},
    const {'name': 'antiquewhite', 'value': 0xFAEBD7},
    const {'name': 'aqua', 'value': 0x00FFFF},
    const {'name': 'aquamarine', 'value': 0x7FFFD4},
    const {'name': 'azure', 'value': 0xF0FFFF},
    const {'name': 'beige', 'value': 0xF5F5DC},
    const {'name': 'bisque', 'value': 0xFFE4C4},
    const {'name': 'black', 'value': 0x000000},
    const {'name': 'blanchedalmond', 'value': 0xFFEBCD},
    const {'name': 'blue', 'value': 0x0000FF},
    const {'name': 'blueviolet', 'value': 0x8A2BE2},
    const {'name': 'brown', 'value': 0xA52A2A},
    const {'name': 'burlywood', 'value': 0xDEB887},
    const {'name': 'cadetblue', 'value': 0x5F9EA0},
    const {'name': 'chartreuse', 'value': 0x7FFF00},
    const {'name': 'chocolate', 'value': 0xD2691E},
    const {'name': 'coral', 'value': 0xFF7F50},
    const {'name': 'cornflowerblue', 'value': 0x6495ED},
    const {'name': 'cornsilk', 'value': 0xFFF8DC},
    const {'name': 'crimson', 'value': 0xDC143C},
    const {'name': 'cyan', 'value': 0x00FFFF},
    const {'name': 'darkblue', 'value': 0x00008B},
    const {'name': 'darkcyan', 'value': 0x008B8B},
    const {'name': 'darkgoldenrod', 'value': 0xB8860B},
    const {'name': 'darkgray', 'value': 0xA9A9A9},
    const {'name': 'darkgreen', 'value': 0x006400},
    const {'name': 'darkgrey', 'value': 0xA9A9A9},
    const {'name': 'darkkhaki', 'value': 0xBDB76B},
    const {'name': 'darkmagenta', 'value': 0x8B008B},
    const {'name': 'darkolivegreen', 'value': 0x556B2F},
    const {'name': 'darkorange', 'value': 0xFF8C00},
    const {'name': 'darkorchid', 'value': 0x9932CC},
    const {'name': 'darkred', 'value': 0x8B0000},
    const {'name': 'darksalmon', 'value': 0xE9967A},
    const {'name': 'darkseagreen', 'value': 0x8FBC8F},
    const {'name': 'darkslateblue', 'value': 0x483D8B},
    const {'name': 'darkslategray', 'value': 0x2F4F4F},
    const {'name': 'darkslategrey', 'value': 0x2F4F4F},
    const {'name': 'darkturquoise', 'value': 0x00CED1},
    const {'name': 'darkviolet', 'value': 0x9400D3},
    const {'name': 'deeppink', 'value': 0xFF1493},
    const {'name': 'deepskyblue', 'value': 0x00BFFF},
    const {'name': 'dimgray', 'value': 0x696969},
    const {'name': 'dimgrey', 'value': 0x696969},
    const {'name': 'dodgerblue', 'value': 0x1E90FF},
    const {'name': 'firebrick', 'value': 0xB22222},
    const {'name': 'floralwhite', 'value': 0xFFFAF0},
    const {'name': 'forestgreen', 'value': 0x228B22},
    const {'name': 'fuchsia', 'value': 0xFF00FF},
    const {'name': 'gainsboro', 'value': 0xDCDCDC},
    const {'name': 'ghostwhite', 'value': 0xF8F8FF},
    const {'name': 'gold', 'value': 0xFFD700},
    const {'name': 'goldenrod', 'value': 0xDAA520},
    const {'name': 'gray', 'value': 0x808080},
    const {'name': 'green', 'value': 0x008000},
    const {'name': 'greenyellow', 'value': 0xADFF2F},
    const {'name': 'grey', 'value': 0x808080},
    const {'name': 'honeydew', 'value': 0xF0FFF0},
    const {'name': 'hotpink', 'value': 0xFF69B4},
    const {'name': 'indianred', 'value': 0xCD5C5C},
    const {'name': 'indigo', 'value': 0x4B0082},
    const {'name': 'ivory', 'value': 0xFFFFF0},
    const {'name': 'khaki', 'value': 0xF0E68C},
    const {'name': 'lavender', 'value': 0xE6E6FA},
    const {'name': 'lavenderblush', 'value': 0xFFF0F5},
    const {'name': 'lawngreen', 'value': 0x7CFC00},
    const {'name': 'lemonchiffon', 'value': 0xFFFACD},
    const {'name': 'lightblue', 'value': 0xADD8E6},
    const {'name': 'lightcoral', 'value': 0xF08080},
    const {'name': 'lightcyan', 'value': 0xE0FFFF},
    const {'name': 'lightgoldenrodyellow', 'value': 0xFAFAD2},
    const {'name': 'lightgray', 'value': 0xD3D3D3},
    const {'name': 'lightgreen', 'value': 0x90EE90},
    const {'name': 'lightgrey', 'value': 0xD3D3D3},
    const {'name': 'lightpink', 'value': 0xFFB6C1},
    const {'name': 'lightsalmon', 'value': 0xFFA07A},
    const {'name': 'lightseagreen', 'value': 0x20B2AA},
    const {'name': 'lightskyblue', 'value': 0x87CEFA},
    const {'name': 'lightslategray', 'value': 0x778899},
    const {'name': 'lightslategrey', 'value': 0x778899},
    const {'name': 'lightsteelblue', 'value': 0xB0C4DE},
    const {'name': 'lightyellow', 'value': 0xFFFFE0},
    const {'name': 'lime', 'value': 0x00FF00},
    const {'name': 'limegreen', 'value': 0x32CD32},
    const {'name': 'linen', 'value': 0xFAF0E6},
    const {'name': 'magenta', 'value': 0xFF00FF},
    const {'name': 'maroon', 'value': 0x800000},
    const {'name': 'mediumaquamarine', 'value': 0x66CDAA},
    const {'name': 'mediumblue', 'value': 0x0000CD},
    const {'name': 'mediumorchid', 'value': 0xBA55D3},
    const {'name': 'mediumpurple', 'value': 0x9370DB},
    const {'name': 'mediumseagreen', 'value': 0x3CB371},
    const {'name': 'mediumslateblue', 'value': 0x7B68EE},
    const {'name': 'mediumspringgreen', 'value': 0x00FA9A},
    const {'name': 'mediumturquoise', 'value': 0x48D1CC},
    const {'name': 'mediumvioletred', 'value': 0xC71585},
    const {'name': 'midnightblue', 'value': 0x191970},
    const {'name': 'mintcream', 'value': 0xF5FFFA},
    const {'name': 'mistyrose', 'value': 0xFFE4E1},
    const {'name': 'moccasin', 'value': 0xFFE4B5},
    const {'name': 'navajowhite', 'value': 0xFFDEAD},
    const {'name': 'navy', 'value': 0x000080},
    const {'name': 'oldlace', 'value': 0xFDF5E6},
    const {'name': 'olive', 'value': 0x808000},
    const {'name': 'olivedrab', 'value': 0x6B8E23},
    const {'name': 'orange', 'value': 0xFFA500},
    const {'name': 'orangered', 'value': 0xFF4500},
    const {'name': 'orchid', 'value': 0xDA70D6},
    const {'name': 'palegoldenrod', 'value': 0xEEE8AA},
    const {'name': 'palegreen', 'value': 0x98FB98},
    const {'name': 'paleturquoise', 'value': 0xAFEEEE},
    const {'name': 'palevioletred', 'value': 0xDB7093},
    const {'name': 'papayawhip', 'value': 0xFFEFD5},
    const {'name': 'peachpuff', 'value': 0xFFDAB9},
    const {'name': 'peru', 'value': 0xCD853F},
    const {'name': 'pink', 'value': 0xFFC0CB},
    const {'name': 'plum', 'value': 0xDDA0DD},
    const {'name': 'powderblue', 'value': 0xB0E0E6},
    const {'name': 'purple', 'value': 0x800080},
    const {'name': 'red', 'value': 0xFF0000},
    const {'name': 'rosybrown', 'value': 0xBC8F8F},
    const {'name': 'royalblue', 'value': 0x4169E1},
    const {'name': 'saddlebrown', 'value': 0x8B4513},
    const {'name': 'salmon', 'value': 0xFA8072},
    const {'name': 'sandybrown', 'value': 0xF4A460},
    const {'name': 'seagreen', 'value': 0x2E8B57},
    const {'name': 'seashell', 'value': 0xFFF5EE},
    const {'name': 'sienna', 'value': 0xA0522D},
    const {'name': 'silver', 'value': 0xC0C0C0},
    const {'name': 'skyblue', 'value': 0x87CEEB},
    const {'name': 'slateblue', 'value': 0x6A5ACD},
    const {'name': 'slategray', 'value': 0x708090},
    const {'name': 'slategrey', 'value': 0x708090},
    const {'name': 'snow', 'value': 0xFFFAFA},
    const {'name': 'springgreen', 'value': 0x00FF7F},
    const {'name': 'steelblue', 'value': 0x4682B4},
    const {'name': 'tan', 'value': 0xD2B48C},
    const {'name': 'teal', 'value': 0x008080},
    const {'name': 'thistle', 'value': 0xD8BFD8},
    const {'name': 'tomato', 'value': 0xFF6347},
    const {'name': 'turquoise', 'value': 0x40E0D0},
    const {'name': 'violet', 'value': 0xEE82EE},
    const {'name': 'wheat', 'value': 0xF5DEB3},
    const {'name': 'white', 'value': 0xFFFFFF},
    const {'name': 'whitesmoke', 'value': 0xF5F5F5},
    const {'name': 'yellow', 'value': 0xFFFF00},
    const {'name': 'yellowgreen', 'value': 0x9ACD32},
  ];

  // TODO(terry): Should used Dart mirroring for parameter values and types
  //              especially for enumeration (e.g., counter's second parameter
  //              is list-style-type which is an enumerated list for ordering
  //              of a list 'circle', 'decimal', 'lower-roman', 'square', etc.
  //              see http://www.w3schools.com/cssref/pr_list-style-type.asp
  //              for list of possible values.

  // List of valid CSS functions:
  static const List<Map<String, Object>> _FUNCTIONS = const [
    const {'name': 'counter', 'info': const {'params': 2, 'expr': false}},
    const {'name': 'attr', 'info': const {'params': 1, 'expr': false}},
    const {'name': 'calc', 'info': const {'params': 1, 'expr': true}},
    const {'name': 'min', 'info': const {'params': 2, 'expr': true}},
    const {'name': 'max', 'info': const {'params': 2, 'expr': true}},

    // 2D functions:
    const {'name': 'translateX', 'info': const {'params': 1, 'expr': false}},
    const {'name': 'translateY', 'info': const {'params': 1, 'expr': false}},
    const {'name': 'translate', 'info': const {'params': 2, 'expr': false}},
    const {'name': 'rotate', 'info': const {'params': 1, 'expr': false}},
    const {'name': 'scaleX', 'info': const {'params': 1, 'expr': false}},
    const {'name': 'scaleY', 'info': const {'params': 1, 'expr': false}},
    const {'name': 'scale', 'info': const {'params': 2, 'expr': false}},
    const {'name': 'skewX', 'info': const {'params': 1, 'expr': false}},
    const {'name': 'skewY', 'info': const {'params': 1, 'expr': false}},
    const {'name': 'skew', 'info': const {'params': 2, 'expr': false}},
    const {'name': 'matrix', 'info': const {'params': 6, 'expr': false}},

    // 3D functions:
    const {'name': 'matrix3d', 'info': const {'params': 16, 'expr': false}},
    const {'name': 'translate3d', 'info': const {'params': 3, 'expr': false}},
    const {'name': 'translateZ', 'info': const {'params': 1, 'expr': false}},
    const {'name': 'scale3d', 'info': const {'params': 3, 'expr': false}},
    const {'name': 'scaleZ', 'info': const {'params': 1, 'expr': false}},
    const {'name': 'rotate3d', 'info': const {'params': 3, 'expr': false}},
    const {'name': 'rotateX', 'info': const {'params': 1, 'expr': false}},
    const {'name': 'rotateY', 'info': const {'params': 1, 'expr': false}},
    const {'name': 'rotateZ', 'info': const {'params': 1, 'expr': false}},
    const {'name': 'perspective', 'info': const {'params': 1, 'expr': false}},
  ];

  /**
   * Check if name is a pre-defined CSS name.  Used by error handler to report
   * if name is unknown or used improperly.
   */
  static bool isPredefinedName(String name) {
    var nameLen = name.length;
    // TODO(terry): Add more pre-defined names (hidden, bolder, inherit, etc.).
    if (matchUnits(name, 0, nameLen) == -1 ||
        matchDirectives(name, 0, nameLen) == -1 ||
        matchMarginDirectives(name, 0, nameLen) == -1 ||
        matchColorName(name) == null) {
      return false;
    }

    return true;
  }

  /** Return the token that matches the unit ident found. */
  static int matchList(
      var identList, String tokenField, String text, int offset, int length) {
    for (final entry in identList) {
      String ident = entry['value'];

      if (length == ident.length) {
        int idx = offset;
        bool match = true;
        for (int i = 0; i < ident.length; i++) {
          int identChar = ident.codeUnitAt(i);
          int char = text.codeUnitAt(idx++);
          // Compare lowercase to lowercase then check if char is uppercase.
          match = match &&
              (char == identChar ||
                  ((char >= ASCII_UPPER_A && char <= ASCII_UPPER_Z) &&
                      (char + 32) == identChar));
          if (!match) {
            break;
          }
        }

        if (match) {
          // Completely matched; return the token for this unit.
          return entry[tokenField];
        }
      }
    }

    return -1; // Not a unit token.
  }

  /** Return the token that matches the unit ident found. */
  static int matchUnits(String text, int offset, int length) {
    return matchList(_UNITS, 'unit', text, offset, length);
  }

  /** Return the token that matches the directive name found. */
  static int matchDirectives(String text, int offset, int length) {
    return matchList(_DIRECTIVES, 'type', text, offset, length);
  }

  /** Return the token that matches the margin directive name found. */
  static int matchMarginDirectives(String text, int offset, int length) {
    return matchList(MARGIN_DIRECTIVES, 'type', text, offset, length);
  }

  /** Return the token that matches the media operator found. */
  static int matchMediaOperator(String text, int offset, int length) {
    return matchList(MEDIA_OPERATORS, 'type', text, offset, length);
  }

  static String idToValue(var identList, int tokenId) {
    for (var entry in identList) {
      if (tokenId == entry['type']) {
        return entry['value'];
      }
    }

    return null;
  }

  /** Return the unit token as its pretty name. */
  static String unitToString(int unitTokenToFind) {
    if (unitTokenToFind == TokenKind.PERCENT) {
      return '%';
    } else {
      for (final entry in _UNITS) {
        int unit = entry['unit'];
        if (unit == unitTokenToFind) {
          return entry['value'];
        }
      }
    }

    return '<BAD UNIT>'; // Not a unit token.
  }

  /**
   * Match color name, case insensitive match and return the associated color
   * entry from _EXTENDED_COLOR_NAMES list, return [:null:] if not found.
   */
  static Map matchColorName(String text) {
    var name = text.toLowerCase();
    return _EXTENDED_COLOR_NAMES.firstWhere((e) => e['name'] == name,
        orElse: () => null);
  }

  /** Return RGB value as [int] from a color entry in _EXTENDED_COLOR_NAMES. */
  static int colorValue(Map entry) {
    assert(entry != null);
    return entry['value'];
  }

  static String hexToColorName(hexValue) {
    for (final entry in _EXTENDED_COLOR_NAMES) {
      if (entry['value'] == hexValue) {
        return entry['name'];
      }
    }

    return null;
  }

  static String decimalToHex(int number, [int minDigits = 1]) {
    final String _HEX_DIGITS = '0123456789abcdef';

    List<String> result = new List<String>();

    int dividend = number >> 4;
    int remain = number % 16;
    result.add(_HEX_DIGITS[remain]);
    while (dividend != 0) {
      remain = dividend % 16;
      dividend >>= 4;
      result.add(_HEX_DIGITS[remain]);
    }

    StringBuffer invertResult = new StringBuffer();
    int paddings = minDigits - result.length;
    while (paddings-- > 0) {
      invertResult.write('0');
    }
    for (int i = result.length - 1; i >= 0; i--) {
      invertResult.write(result[i]);
    }

    return invertResult.toString();
  }

  static String kindToString(int kind) {
    switch (kind) {
      case TokenKind.UNUSED:
        return "ERROR";
      case TokenKind.END_OF_FILE:
        return "end of file";
      case TokenKind.LPAREN:
        return "(";
      case TokenKind.RPAREN:
        return ")";
      case TokenKind.LBRACK:
        return "[";
      case TokenKind.RBRACK:
        return "]";
      case TokenKind.LBRACE:
        return "{";
      case TokenKind.RBRACE:
        return "}";
      case TokenKind.DOT:
        return ".";
      case TokenKind.SEMICOLON:
        return ";";
      case TokenKind.AT:
        return "@";
      case TokenKind.HASH:
        return "#";
      case TokenKind.PLUS:
        return "+";
      case TokenKind.GREATER:
        return ">";
      case TokenKind.TILDE:
        return "~";
      case TokenKind.ASTERISK:
        return "*";
      case TokenKind.NAMESPACE:
        return "|";
      case TokenKind.COLON:
        return ":";
      case TokenKind.PRIVATE_NAME:
        return "_";
      case TokenKind.COMMA:
        return ",";
      case TokenKind.SPACE:
        return " ";
      case TokenKind.TAB:
        return "\t";
      case TokenKind.NEWLINE:
        return "\n";
      case TokenKind.RETURN:
        return "\r";
      case TokenKind.PERCENT:
        return "%";
      case TokenKind.SINGLE_QUOTE:
        return "'";
      case TokenKind.DOUBLE_QUOTE:
        return "\"";
      case TokenKind.SLASH:
        return "/";
      case TokenKind.EQUALS:
        return '=';
      case TokenKind.CARET:
        return '^';
      case TokenKind.DOLLAR:
        return '\$';
      case TokenKind.LESS:
        return '<';
      case TokenKind.BANG:
        return '!';
      case TokenKind.MINUS:
        return '-';
      case TokenKind.BACKSLASH:
        return '\\';
      default:
        throw "Unknown TOKEN";
    }
  }

  static bool isKindIdentifier(int kind) {
    switch (kind) {
      // Synthesized tokens.
      case TokenKind.DIRECTIVE_IMPORT:
      case TokenKind.DIRECTIVE_MEDIA:
      case TokenKind.DIRECTIVE_PAGE:
      case TokenKind.DIRECTIVE_CHARSET:
      case TokenKind.DIRECTIVE_STYLET:
      case TokenKind.DIRECTIVE_KEYFRAMES:
      case TokenKind.DIRECTIVE_WEB_KIT_KEYFRAMES:
      case TokenKind.DIRECTIVE_MOZ_KEYFRAMES:
      case TokenKind.DIRECTIVE_MS_KEYFRAMES:
      case TokenKind.DIRECTIVE_O_KEYFRAMES:
      case TokenKind.DIRECTIVE_FONTFACE:
      case TokenKind.DIRECTIVE_NAMESPACE:
      case TokenKind.DIRECTIVE_HOST:
      case TokenKind.DIRECTIVE_MIXIN:
      case TokenKind.DIRECTIVE_INCLUDE:
      case TokenKind.DIRECTIVE_CONTENT:
      case TokenKind.UNIT_EM:
      case TokenKind.UNIT_EX:
      case TokenKind.UNIT_LENGTH_PX:
      case TokenKind.UNIT_LENGTH_CM:
      case TokenKind.UNIT_LENGTH_MM:
      case TokenKind.UNIT_LENGTH_IN:
      case TokenKind.UNIT_LENGTH_PT:
      case TokenKind.UNIT_LENGTH_PC:
      case TokenKind.UNIT_ANGLE_DEG:
      case TokenKind.UNIT_ANGLE_RAD:
      case TokenKind.UNIT_ANGLE_GRAD:
      case TokenKind.UNIT_TIME_MS:
      case TokenKind.UNIT_TIME_S:
      case TokenKind.UNIT_FREQ_HZ:
      case TokenKind.UNIT_FREQ_KHZ:
      case TokenKind.UNIT_FRACTION:
        return true;
      default:
        return false;
    }
  }

  static bool isIdentifier(int kind) {
    return kind == IDENTIFIER;
  }
}

// Note: these names should match TokenKind names
class TokenChar {
  static const int UNUSED = -1;
  static const int END_OF_FILE = 0;
  static const int LPAREN = 0x28; // "(".codeUnitAt(0)
  static const int RPAREN = 0x29; // ")".codeUnitAt(0)
  static const int LBRACK = 0x5b; // "[".codeUnitAt(0)
  static const int RBRACK = 0x5d; // "]".codeUnitAt(0)
  static const int LBRACE = 0x7b; // "{".codeUnitAt(0)
  static const int RBRACE = 0x7d; // "}".codeUnitAt(0)
  static const int DOT = 0x2e; // ".".codeUnitAt(0)
  static const int SEMICOLON = 0x3b; // ";".codeUnitAt(0)
  static const int AT = 0x40; // "@".codeUnitAt(0)
  static const int HASH = 0x23; // "#".codeUnitAt(0)
  static const int PLUS = 0x2b; // "+".codeUnitAt(0)
  static const int GREATER = 0x3e; // ">".codeUnitAt(0)
  static const int TILDE = 0x7e; // "~".codeUnitAt(0)
  static const int ASTERISK = 0x2a; // "*".codeUnitAt(0)
  static const int NAMESPACE = 0x7c; // "|".codeUnitAt(0)
  static const int COLON = 0x3a; // ":".codeUnitAt(0)
  static const int PRIVATE_NAME = 0x5f; // "_".codeUnitAt(0)
  static const int COMMA = 0x2c; // ",".codeUnitAt(0)
  static const int SPACE = 0x20; // " ".codeUnitAt(0)
  static const int TAB = 0x9; // "\t".codeUnitAt(0)
  static const int NEWLINE = 0xa; // "\n".codeUnitAt(0)
  static const int RETURN = 0xd; // "\r".codeUnitAt(0)
  static const int BACKSPACE = 0x8; // "/b".codeUnitAt(0)
  static const int FF = 0xc; // "/f".codeUnitAt(0)
  static const int VT = 0xb; // "/v".codeUnitAt(0)
  static const int PERCENT = 0x25; // "%".codeUnitAt(0)
  static const int SINGLE_QUOTE = 0x27; // "'".codeUnitAt(0)
  static const int DOUBLE_QUOTE = 0x22; // '"'.codeUnitAt(0)
  static const int SLASH = 0x2f; // "/".codeUnitAt(0)
  static const int EQUALS = 0x3d; // "=".codeUnitAt(0)
  static const int OR = 0x7c; // "|".codeUnitAt(0)
  static const int CARET = 0x5e; // "^".codeUnitAt(0)
  static const int DOLLAR = 0x24; // "\$".codeUnitAt(0)
  static const int LESS = 0x3c; // "<".codeUnitAt(0)
  static const int BANG = 0x21; // "!".codeUnitAt(0)
  static const int MINUS = 0x2d; // "-".codeUnitAt(0)
  static const int BACKSLASH = 0x5c; // "\".codeUnitAt(0)
  static const int AMPERSAND = 0x26; // "&".codeUnitAt(0)
}
