github.com/qiniu/x@v1.11.9/ctype/ctype.go (about)

     1  package ctype
     2  
     3  const (
     4  	UPPER     = 0x01       /* upper case letter[A-Z] */
     5  	LOWER     = 0x02       /* lower case letter[a-z] */
     6  	DIGIT     = 0x04       /* digit[0-9] */
     7  	UNDERLINE = 0x08       /* underline[_] */
     8  	XDIGIT    = 0x10       /* xdigit[0-9a-fA-F] */
     9  	EOL       = 0x20       /* [\r\n] */
    10  	ADD       = 0x40       /* [+] */
    11  	SUB       = 0x80       /* [-] */
    12  	MUL       = 0x100      /* [*] */
    13  	DIV       = 0x200      /* [/] */
    14  	LT        = 0x400      /* [<] */
    15  	GT        = 0x800      /* [>] */
    16  	EQ        = 0x1000     /* [=] */
    17  	RDIV      = 0x2000     /* [\\], right-division, anti-slash */
    18  	DOT       = 0x4000     /* [.] */
    19  	COLON     = 0x8000     /* [:], colon */
    20  	PERCENT   = 0x10000    /* [%] */
    21  	AND       = 0x20000    /* [&] */
    22  	OR        = 0x40000    /* [|] */
    23  	SPACE_BAR = 0x80000    /* [ ] */
    24  	LCAP_R    = 0x100000   /* [r] */
    25  	LCAP_T    = 0x200000   /* [t] */
    26  	LCAP_N    = 0x400000   /* [n] */
    27  	LCAP_W    = 0x800000   /* [w] */
    28  	COMMA     = 0x1000000  /* [,] */
    29  	SEMICOLON = 0x2000000  /* [;] */
    30  	TAB       = 0x4000000  /* [\t] */
    31  	QUOT      = 0x8000000  /* ["] */
    32  	BACKTICK  = 0x10000000 /* [`] */
    33  )
    34  
    35  const (
    36  	BLANK                = SPACE_BAR
    37  	TSPACE               = TAB | EOL
    38  	SPACE                = SPACE_BAR | TSPACE
    39  	PATH_SEP             = DIV | RDIV
    40  	ALPHA                = UPPER | LOWER
    41  	SYMBOL_FIRST_CHAR    = ALPHA
    42  	SYMBOL_NEXT_CHAR     = SYMBOL_FIRST_CHAR | DIGIT
    43  	CSYMBOL_FIRST_CHAR   = ALPHA | UNDERLINE
    44  	CSYMBOL_NEXT_CHAR    = CSYMBOL_FIRST_CHAR | DIGIT
    45  	XMLSYMBOL_FIRST_CHAR = CSYMBOL_FIRST_CHAR
    46  	XMLSYMBOL_NEXT_CHAR  = CSYMBOL_NEXT_CHAR | SUB
    47  	DOMAIN_CHAR          = ALPHA | DIGIT | SUB | ADD | DOT
    48  	BASE64               = ALPHA | DIGIT | ADD | DIV       // [a-zA-Z0-9+/]
    49  	URLSAFE_BASE64       = ALPHA | DIGIT | SUB | UNDERLINE // [a-zA-Z0-9\-_]
    50  )
    51  
    52  // -----------------------------------------------------------
    53  
    54  var table = []uint32{
    55  	0,              //   [0]
    56  	0,              //   [1]
    57  	0,              //   [2]
    58  	0,              //   [3]
    59  	0,              //   [4]
    60  	0,              //   [5]
    61  	0,              //   [6]
    62  	0,              //   [7]
    63  	0,              //   [8]
    64  	TAB,            //   [9]
    65  	EOL,            //   [10]
    66  	0,              //   [11]
    67  	0,              //   [12]
    68  	EOL,            //   [13]
    69  	0,              //   [14]
    70  	0,              //   [15]
    71  	0,              //   [16]
    72  	0,              //   [17]
    73  	0,              //   [18]
    74  	0,              //   [19]
    75  	0,              //   [20]
    76  	0,              //   [21]
    77  	0,              //   [22]
    78  	0,              //   [23]
    79  	0,              //   [24]
    80  	0,              //   [25]
    81  	0,              //   [26]
    82  	0,              //   [27]
    83  	0,              //   [28]
    84  	0,              //   [29]
    85  	0,              //   [30]
    86  	0,              //   [31]
    87  	SPACE_BAR,      //   [32]
    88  	0,              // ! [33]
    89  	QUOT,           // " [34]
    90  	0,              // # [35]
    91  	0,              // $ [36]
    92  	PERCENT,        // % [37]
    93  	AND,            // & [38]
    94  	0,              // ' [39]
    95  	0,              // ( [40]
    96  	0,              // ) [41]
    97  	MUL,            // * [42]
    98  	ADD,            // + [43]
    99  	COMMA,          // , [44]
   100  	SUB,            // - [45]
   101  	DOT,            // . [46]
   102  	DIV,            // / [47]
   103  	DIGIT | XDIGIT, // 0 [48]
   104  	DIGIT | XDIGIT, // 1 [49]
   105  	DIGIT | XDIGIT, // 2 [50]
   106  	DIGIT | XDIGIT, // 3 [51]
   107  	DIGIT | XDIGIT, // 4 [52]
   108  	DIGIT | XDIGIT, // 5 [53]
   109  	DIGIT | XDIGIT, // 6 [54]
   110  	DIGIT | XDIGIT, // 7 [55]
   111  	DIGIT | XDIGIT, // 8 [56]
   112  	DIGIT | XDIGIT, // 9 [57]
   113  	COLON,          // : [58]
   114  	SEMICOLON,      // ; [59]
   115  	LT,             // < [60]
   116  	EQ,             // = [61]
   117  	GT,             // > [62]
   118  	0,              // ? [63]
   119  	0,              // @ [64]
   120  	UPPER | XDIGIT, // A [65]
   121  	UPPER | XDIGIT, // B [66]
   122  	UPPER | XDIGIT, // C [67]
   123  	UPPER | XDIGIT, // D [68]
   124  	UPPER | XDIGIT, // E [69]
   125  	UPPER | XDIGIT, // F [70]
   126  	UPPER,          // G [71]
   127  	UPPER,          // H [72]
   128  	UPPER,          // I [73]
   129  	UPPER,          // J [74]
   130  	UPPER,          // K [75]
   131  	UPPER,          // L [76]
   132  	UPPER,          // M [77]
   133  	UPPER,          // N [78]
   134  	UPPER,          // O [79]
   135  	UPPER,          // P [80]
   136  	UPPER,          // Q [81]
   137  	UPPER,          // R [82]
   138  	UPPER,          // S [83]
   139  	UPPER,          // T [84]
   140  	UPPER,          // U [85]
   141  	UPPER,          // V [86]
   142  	UPPER,          // W [87]
   143  	UPPER,          // X [88]
   144  	UPPER,          // Y [89]
   145  	UPPER,          // Z [90]
   146  	0,              // [ [91]
   147  	RDIV,           // \ [92]
   148  	0,              // ] [93]
   149  	0,              // ^ [94]
   150  	UNDERLINE,      // _ [95]
   151  	BACKTICK,       // ` [96]
   152  	LOWER | XDIGIT, // a [97]
   153  	LOWER | XDIGIT, // b [98]
   154  	LOWER | XDIGIT, // c [99]
   155  	LOWER | XDIGIT, // d [100]
   156  	LOWER | XDIGIT, // e [101]
   157  	LOWER | XDIGIT, // f [102]
   158  	LOWER,          // g [103]
   159  	LOWER,          // h [104]
   160  	LOWER,          // i [105]
   161  	LOWER,          // j [106]
   162  	LOWER,          // k [107]
   163  	LOWER,          // l [108]
   164  	LOWER,          // m [109]
   165  	LCAP_N | LOWER, // n [110]
   166  	LOWER,          // o [111]
   167  	LOWER,          // p [112]
   168  	LOWER,          // q [113]
   169  	LCAP_R | LOWER, // r [114]
   170  	LOWER,          // s [115]
   171  	LCAP_T | LOWER, // t [116]
   172  	LOWER,          // u [117]
   173  	LOWER,          // v [118]
   174  	LCAP_W | LOWER, // w [119]
   175  	LOWER,          // x [120]
   176  	LOWER,          // y [121]
   177  	LOWER,          // z [122]
   178  	0,              // { [123]
   179  	OR,             // | [124]
   180  	0,              // } [125]
   181  	0,              // ~ [126]
   182  	0,              // del [127]
   183  }
   184  
   185  // -----------------------------------------------------------
   186  
   187  func Is(typeMask uint32, c rune) bool {
   188  
   189  	if uint(c) < uint(len(table)) {
   190  		return (typeMask & table[c]) != 0
   191  	}
   192  	return false
   193  }
   194  
   195  func IsType(typeMask uint32, str string) bool {
   196  
   197  	if str == "" {
   198  		return false
   199  	}
   200  	for _, c := range str {
   201  		if !Is(typeMask, c) {
   202  			return false
   203  		}
   204  	}
   205  	return true
   206  }
   207  
   208  func IsTypeEx(typeFirst, typeNext uint32, str string) bool {
   209  
   210  	if str == "" {
   211  		return false
   212  	}
   213  	for i, c := range str {
   214  		if i > 0 {
   215  			if !Is(typeNext, c) {
   216  				return false
   217  			}
   218  		} else {
   219  			if !Is(typeFirst, c) {
   220  				return false
   221  			}
   222  		}
   223  	}
   224  	return true
   225  }
   226  
   227  func IsCSymbol(str string) bool {
   228  
   229  	return IsTypeEx(CSYMBOL_FIRST_CHAR, CSYMBOL_NEXT_CHAR, str)
   230  }
   231  
   232  func IsXmlSymbol(str string) bool {
   233  
   234  	return IsTypeEx(XMLSYMBOL_FIRST_CHAR, XMLSYMBOL_NEXT_CHAR, str)
   235  }
   236  
   237  // -----------------------------------------------------------