content: // Copyright (c) 2011, 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.
  
  library characters;
  
  const int $EOF = 0;
  const int $STX = 2;
  const int $BS  = 8;
  const int $TAB = 9;
  const int $LF = 10;
  const int $VTAB = 11;
  const int $FF = 12;
  const int $CR = 13;
  const int $SPACE = 32;
  const int $BANG = 33;
  const int $DQ = 34;
  const int $HASH = 35;
  const int $$ = 36;
  const int $PERCENT = 37;
  const int $AMPERSAND = 38;
  const int $SQ = 39;
  const int $OPEN_PAREN = 40;
  const int $CLOSE_PAREN = 41;
  const int $STAR = 42;
  const int $PLUS = 43;
  const int $COMMA = 44;
  const int $MINUS = 45;
  const int $PERIOD = 46;
  const int $SLASH = 47;
  const int $0 = 48;
  const int $1 = 49;
  const int $2 = 50;
  const int $3 = 51;
  const int $4 = 52;
  const int $5 = 53;
  const int $6 = 54;
  const int $7 = 55;
  const int $8 = 56;
  const int $9 = 57;
  const int $COLON = 58;
  const int $SEMICOLON = 59;
  const int $LT = 60;
  const int $EQ = 61;
  const int $GT = 62;
  const int $QUESTION = 63;
  const int $AT = 64;
  const int $A = 65;
  const int $B = 66;
  const int $C = 67;
  const int $D = 68;
  const int $E = 69;
  const int $F = 70;
  const int $G = 71;
  const int $H = 72;
  const int $I = 73;
  const int $J = 74;
  const int $K = 75;
  const int $L = 76;
  const int $M = 77;
  const int $N = 78;
  const int $O = 79;
  const int $P = 80;
  const int $Q = 81;
  const int $R = 82;
  const int $S = 83;
  const int $T = 84;
  const int $U = 85;
  const int $V = 86;
  const int $W = 87;
  const int $X = 88;
  const int $Y = 89;
  const int $Z = 90;
  const int $OPEN_SQUARE_BRACKET = 91;
  const int $BACKSLASH = 92;
  const int $CLOSE_SQUARE_BRACKET = 93;
  const int $CARET = 94;
  const int $_ = 95;
  const int $BACKPING = 96;
  const int $a = 97;
  const int $b = 98;
  const int $c = 99;
  const int $d = 100;
  const int $e = 101;
  const int $f = 102;
  const int $g = 103;
  const int $h = 104;
  const int $i = 105;
  const int $j = 106;
  const int $k = 107;
  const int $l = 108;
  const int $m = 109;
  const int $n = 110;
  const int $o = 111;
  const int $p = 112;
  const int $q = 113;
  const int $r = 114;
  const int $s = 115;
  const int $t = 116;
  const int $u = 117;
  const int $v = 118;
  const int $w = 119;
  const int $x = 120;
  const int $y = 121;
  const int $z = 122;
  const int $OPEN_CURLY_BRACKET = 123;
  const int $BAR = 124;
  const int $CLOSE_CURLY_BRACKET = 125;
  const int $TILDE = 126;
  const int $DEL = 127;
  const int $NBSP = 160;
  const int $LS = 0x2028;
  const int $PS = 0x2029;
  
  const int $FIRST_SURROGATE = 0xd800;
  const int $LAST_SURROGATE = 0xdfff;
  const int $LAST_CODE_POINT = 0x10ffff;
  
  bool isHexDigit(int characterCode) {
    if (characterCode <= $9) return $0 <= characterCode;
    characterCode |= $a ^ $A;
    return ($a <= characterCode && characterCode <= $f);
  }
  
  int hexDigitValue(int hexDigit) {
    assert(isHexDigit(hexDigit));
    // hexDigit is one of '0'..'9', 'A'..'F' and 'a'..'f'.
    if (hexDigit <= $9) return hexDigit - $0;
    return (hexDigit | ($a ^ $A)) - ($a - 10);
  }
  
  bool isUnicodeScalarValue(int value) {
    return value < $FIRST_SURROGATE ||
        (value > $LAST_SURROGATE && value <= $LAST_CODE_POINT);
  }
  
  bool isUtf16LeadSurrogate(int value) {
    return value >= 0xd800 && value <= 0xdbff;
  }
  
  bool isUtf16TrailSurrogate(int value) {
    return value >= 0xdc00 && value <= 0xdfff;
  }
  