- Joined
- Nov 7, 2014
- Messages
- 571
c8 - Ascii character classes
These functions come in handy when tokenizing strings. Hopefully these are not slowish.
JASS:
library c8 initializer init /*
*/ uses /*
*/ Typecast /* SH2I */
globals
integer bp // = SH2I("c00")
// WARNING:
// the values of these globals must be the first to be parsed by the jass parser
// if there is a declaration like:
//
// globals
// string space = " "
// endglobals
//
// that precedes these globals then SH2I(" ") - bp != 0x20
private string c00 = "c00"
private string c01 = "c01"
private string c02 = "c02"
private string c03 = "c03"
private string c04 = "c04"
private string c05 = "c05"
private string c06 = "c06"
private string c07 = "c07"
private string c08 = "\b"
private string c09 = "\t"
private string c0A = "\n"
private string c0B = "c0B"
private string c0C = "\f"
private string c0D = "\r"
private string c0E = "c0E"
private string c0F = "c0F"
private string c10 = "c10"
private string c11 = "c11"
private string c12 = "c12"
private string c13 = "c13"
private string c14 = "c14"
private string c15 = "c15"
private string c16 = "c16"
private string c17 = "c17"
private string c18 = "c18"
private string c19 = "c19"
private string c1A = "c1A"
private string c1B = "c1B"
private string c1C = "c1C"
private string c1D = "c1D"
private string c1E = "c1E"
private string c1F = "c1F"
private string c20 = " "
private string c21 = "!"
private string c22 = "\""
private string c23 = "#"
private string c24 = "$"
private string c25 = "%"
private string c26 = "&"
private string c27 = "'"
private string c28 = "("
private string c29 = ")"
private string c2A = "*"
private string c2B = "+"
private string c2C = ","
private string c2D = "-"
private string c2E = "."
private string c2F = "/"
private string c30 = "0"
private string c31 = "1"
private string c32 = "2"
private string c33 = "3"
private string c34 = "4"
private string c35 = "5"
private string c36 = "6"
private string c37 = "7"
private string c38 = "8"
private string c39 = "9"
private string c3A = ":"
private string c3B = ";"
private string c3C = "<"
private string c3D = "="
private string c3E = ">"
private string c3F = "?"
private string c40 = "@"
private string c41 = "A"
private string c42 = "B"
private string c43 = "C"
private string c44 = "D"
private string c45 = "E"
private string c46 = "F"
private string c47 = "G"
private string c48 = "H"
private string c49 = "I"
private string c4A = "J"
private string c4B = "K"
private string c4C = "L"
private string c4D = "M"
private string c4E = "N"
private string c4F = "O"
private string c50 = "P"
private string c51 = "Q"
private string c52 = "R"
private string c53 = "S"
private string c54 = "T"
private string c55 = "U"
private string c56 = "V"
private string c57 = "W"
private string c58 = "X"
private string c59 = "Y"
private string c5A = "Z"
private string c5B = "["
private string c5C = "\\"
private string c5D = "]"
private string c5E = "^"
private string c5F = "_"
private string c60 = "`"
private string c61 = "a"
private string c62 = "b"
private string c63 = "c"
private string c64 = "d"
private string c65 = "e"
private string c66 = "f"
private string c67 = "g"
private string c68 = "h"
private string c69 = "i"
private string c6A = "j"
private string c6B = "k"
private string c6C = "l"
private string c6D = "m"
private string c6E = "n"
private string c6F = "o"
private string c70 = "p"
private string c71 = "q"
private string c72 = "r"
private string c73 = "s"
private string c74 = "t"
private string c75 = "u"
private string c76 = "v"
private string c77 = "w"
private string c78 = "x"
private string c79 = "y"
private string c7A = "z"
private string c7B = "{"
private string c7C = "|"
private string c7D = "}"
private string c7E = "~"
private string array c8s
endglobals
private function c8s_init takes nothing returns nothing
set c8s[127] = "" // set the c8s array capacity to 128
set c8s[0x00] = "c00"
set c8s[0x01] = "c01"
set c8s[0x02] = "c02"
set c8s[0x03] = "c03"
set c8s[0x04] = "c04"
set c8s[0x05] = "c05"
set c8s[0x06] = "c06"
set c8s[0x07] = "c07"
set c8s[0x08] = "\b"
set c8s[0x09] = "\t"
set c8s[0x0A] = "\n"
set c8s[0x0B] = "c0B"
set c8s[0x0C] = "\f"
set c8s[0x0D] = "\r"
set c8s[0x0E] = "c0E"
set c8s[0x0F] = "c0F"
set c8s[0x10] = "c10"
set c8s[0x11] = "c11"
set c8s[0x12] = "c12"
set c8s[0x13] = "c13"
set c8s[0x14] = "c14"
set c8s[0x15] = "c15"
set c8s[0x16] = "c16"
set c8s[0x17] = "c17"
set c8s[0x18] = "c18"
set c8s[0x19] = "c19"
set c8s[0x1A] = "c1A"
set c8s[0x1B] = "c1B"
set c8s[0x1C] = "c1C"
set c8s[0x1D] = "c1D"
set c8s[0x1E] = "c1E"
set c8s[0x1F] = "c1F"
set c8s[0x20] = " "
set c8s[0x21] = "!"
set c8s[0x22] = "\""
set c8s[0x23] = "#"
set c8s[0x24] = "$"
set c8s[0x25] = "%"
set c8s[0x26] = "&"
set c8s[0x27] = "'"
set c8s[0x28] = "("
set c8s[0x29] = ")"
set c8s[0x2A] = "*"
set c8s[0x2B] = "+"
set c8s[0x2C] = ","
set c8s[0x2D] = "-"
set c8s[0x2E] = "."
set c8s[0x2F] = "/"
set c8s[0x30] = "0"
set c8s[0x31] = "1"
set c8s[0x32] = "2"
set c8s[0x33] = "3"
set c8s[0x34] = "4"
set c8s[0x35] = "5"
set c8s[0x36] = "6"
set c8s[0x37] = "7"
set c8s[0x38] = "8"
set c8s[0x39] = "9"
set c8s[0x3A] = ":"
set c8s[0x3B] = ";"
set c8s[0x3C] = "<"
set c8s[0x3D] = "="
set c8s[0x3E] = ">"
set c8s[0x3F] = "?"
set c8s[0x40] = "@"
set c8s[0x41] = "A"
set c8s[0x42] = "B"
set c8s[0x43] = "C"
set c8s[0x44] = "D"
set c8s[0x45] = "E"
set c8s[0x46] = "F"
set c8s[0x47] = "G"
set c8s[0x48] = "H"
set c8s[0x49] = "I"
set c8s[0x4A] = "J"
set c8s[0x4B] = "K"
set c8s[0x4C] = "L"
set c8s[0x4D] = "M"
set c8s[0x4E] = "N"
set c8s[0x4F] = "O"
set c8s[0x50] = "P"
set c8s[0x51] = "Q"
set c8s[0x52] = "R"
set c8s[0x53] = "S"
set c8s[0x54] = "T"
set c8s[0x55] = "U"
set c8s[0x56] = "V"
set c8s[0x57] = "W"
set c8s[0x58] = "X"
set c8s[0x59] = "Y"
set c8s[0x5A] = "Z"
set c8s[0x5B] = "["
set c8s[0x5C] = "\\"
set c8s[0x5D] = "]"
set c8s[0x5E] = "^"
set c8s[0x5F] = "_"
set c8s[0x60] = "`"
set c8s[0x61] = "a"
set c8s[0x62] = "b"
set c8s[0x63] = "c"
set c8s[0x64] = "d"
set c8s[0x65] = "e"
set c8s[0x66] = "f"
set c8s[0x67] = "g"
set c8s[0x68] = "h"
set c8s[0x69] = "i"
set c8s[0x6A] = "j"
set c8s[0x6B] = "k"
set c8s[0x6C] = "l"
set c8s[0x6D] = "m"
set c8s[0x6E] = "n"
set c8s[0x6F] = "o"
set c8s[0x70] = "p"
set c8s[0x71] = "q"
set c8s[0x72] = "r"
set c8s[0x73] = "s"
set c8s[0x74] = "t"
set c8s[0x75] = "u"
set c8s[0x76] = "v"
set c8s[0x77] = "w"
set c8s[0x78] = "x"
set c8s[0x79] = "y"
set c8s[0x7A] = "z"
set c8s[0x7B] = "{"
set c8s[0x7C] = "|"
set c8s[0x7D] = "}"
set c8s[0x7E] = "~"
endfunction
globals
private boolean array isd
private boolean array isxd
private boolean array iss
private boolean array isp
private boolean array isa
private boolean array isan
private boolean array isuc
private boolean array islc
private boolean array isid
endglobals
private function c8_classes_init takes nothing returns nothing
set isd[63] = false
set isd[0x30] = true
set isd[0x31] = true
set isd[0x32] = true
set isd[0x33] = true
set isd[0x34] = true
set isd[0x35] = true
set isd[0x36] = true
set isd[0x37] = true
set isd[0x38] = true
set isd[0x39] = true
set isxd[127] = false
set isxd[0x30] = true
set isxd[0x31] = true
set isxd[0x32] = true
set isxd[0x33] = true
set isxd[0x34] = true
set isxd[0x35] = true
set isxd[0x36] = true
set isxd[0x37] = true
set isxd[0x38] = true
set isxd[0x39] = true
set isxd[0x41] = true
set isxd[0x42] = true
set isxd[0x43] = true
set isxd[0x44] = true
set isxd[0x45] = true
set isxd[0x46] = true
set isxd[0x61] = true
set isxd[0x62] = true
set isxd[0x63] = true
set isxd[0x64] = true
set isxd[0x65] = true
set isxd[0x66] = true
set iss[63] = false
set iss[0x09] = true
set iss[0x0A] = true
set iss[0x0B] = true
set iss[0x0C] = true
set iss[0x0D] = true
set iss[0x20] = true
set isp[127] = false
set isp[0x21] = true
set isp[0x22] = true
set isp[0x23] = true
set isp[0x24] = true
set isp[0x25] = true
set isp[0x26] = true
set isp[0x27] = true
set isp[0x28] = true
set isp[0x29] = true
set isp[0x2A] = true
set isp[0x2B] = true
set isp[0x2C] = true
set isp[0x2D] = true
set isp[0x2E] = true
set isp[0x2F] = true
set isp[0x3A] = true
set isp[0x3B] = true
set isp[0x3C] = true
set isp[0x3D] = true
set isp[0x3E] = true
set isp[0x3F] = true
set isp[0x40] = true
set isp[0x5B] = true
set isp[0x5C] = true
set isp[0x5D] = true
set isp[0x5E] = true
set isp[0x5F] = true
set isp[0x60] = true
set isp[0x7B] = true
set isp[0x7C] = true
set isp[0x7D] = true
set isp[0x7E] = true
set isa[127] = false
set isa[0x41] = true
set isa[0x42] = true
set isa[0x43] = true
set isa[0x44] = true
set isa[0x45] = true
set isa[0x46] = true
set isa[0x47] = true
set isa[0x48] = true
set isa[0x49] = true
set isa[0x4A] = true
set isa[0x4B] = true
set isa[0x4C] = true
set isa[0x4D] = true
set isa[0x4E] = true
set isa[0x4F] = true
set isa[0x50] = true
set isa[0x51] = true
set isa[0x52] = true
set isa[0x53] = true
set isa[0x54] = true
set isa[0x55] = true
set isa[0x56] = true
set isa[0x57] = true
set isa[0x58] = true
set isa[0x59] = true
set isa[0x5A] = true
set isa[0x61] = true
set isa[0x62] = true
set isa[0x63] = true
set isa[0x64] = true
set isa[0x65] = true
set isa[0x66] = true
set isa[0x67] = true
set isa[0x68] = true
set isa[0x69] = true
set isa[0x6A] = true
set isa[0x6B] = true
set isa[0x6C] = true
set isa[0x6D] = true
set isa[0x6E] = true
set isa[0x6F] = true
set isa[0x70] = true
set isa[0x71] = true
set isa[0x72] = true
set isa[0x73] = true
set isa[0x74] = true
set isa[0x75] = true
set isa[0x76] = true
set isa[0x77] = true
set isa[0x78] = true
set isa[0x79] = true
set isa[0x7A] = true
set isan[127] = false
set isan[0x30] = true
set isan[0x31] = true
set isan[0x32] = true
set isan[0x33] = true
set isan[0x34] = true
set isan[0x35] = true
set isan[0x36] = true
set isan[0x37] = true
set isan[0x38] = true
set isan[0x39] = true
set isan[0x41] = true
set isan[0x42] = true
set isan[0x43] = true
set isan[0x44] = true
set isan[0x45] = true
set isan[0x46] = true
set isan[0x47] = true
set isan[0x48] = true
set isan[0x49] = true
set isan[0x4A] = true
set isan[0x4B] = true
set isan[0x4C] = true
set isan[0x4D] = true
set isan[0x4E] = true
set isan[0x4F] = true
set isan[0x50] = true
set isan[0x51] = true
set isan[0x52] = true
set isan[0x53] = true
set isan[0x54] = true
set isan[0x55] = true
set isan[0x56] = true
set isan[0x57] = true
set isan[0x58] = true
set isan[0x59] = true
set isan[0x5A] = true
set isan[0x61] = true
set isan[0x62] = true
set isan[0x63] = true
set isan[0x64] = true
set isan[0x65] = true
set isan[0x66] = true
set isan[0x67] = true
set isan[0x68] = true
set isan[0x69] = true
set isan[0x6A] = true
set isan[0x6B] = true
set isan[0x6C] = true
set isan[0x6D] = true
set isan[0x6E] = true
set isan[0x6F] = true
set isan[0x70] = true
set isan[0x71] = true
set isan[0x72] = true
set isan[0x73] = true
set isan[0x74] = true
set isan[0x75] = true
set isan[0x76] = true
set isan[0x77] = true
set isan[0x78] = true
set isan[0x79] = true
set isan[0x7A] = true
set isuc[127] = false
set isuc[0x41] = true
set isuc[0x42] = true
set isuc[0x43] = true
set isuc[0x44] = true
set isuc[0x45] = true
set isuc[0x46] = true
set isuc[0x47] = true
set isuc[0x48] = true
set isuc[0x49] = true
set isuc[0x4A] = true
set isuc[0x4B] = true
set isuc[0x4C] = true
set isuc[0x4D] = true
set isuc[0x4E] = true
set isuc[0x4F] = true
set isuc[0x50] = true
set isuc[0x51] = true
set isuc[0x52] = true
set isuc[0x53] = true
set isuc[0x54] = true
set isuc[0x55] = true
set isuc[0x56] = true
set isuc[0x57] = true
set isuc[0x58] = true
set isuc[0x59] = true
set isuc[0x5A] = true
set islc[127] = false
set islc[0x61] = true
set islc[0x62] = true
set islc[0x63] = true
set islc[0x64] = true
set islc[0x65] = true
set islc[0x66] = true
set islc[0x67] = true
set islc[0x68] = true
set islc[0x69] = true
set islc[0x6A] = true
set islc[0x6B] = true
set islc[0x6C] = true
set islc[0x6D] = true
set islc[0x6E] = true
set islc[0x6F] = true
set islc[0x70] = true
set islc[0x71] = true
set islc[0x72] = true
set islc[0x73] = true
set islc[0x74] = true
set islc[0x75] = true
set islc[0x76] = true
set islc[0x77] = true
set islc[0x78] = true
set islc[0x79] = true
set islc[0x7A] = true
set isid[127] = false
set isid[0x30] = true
set isid[0x31] = true
set isid[0x32] = true
set isid[0x33] = true
set isid[0x34] = true
set isid[0x35] = true
set isid[0x36] = true
set isid[0x37] = true
set isid[0x38] = true
set isid[0x39] = true
set isid[0x41] = true
set isid[0x42] = true
set isid[0x43] = true
set isid[0x44] = true
set isid[0x45] = true
set isid[0x46] = true
set isid[0x47] = true
set isid[0x48] = true
set isid[0x49] = true
set isid[0x4A] = true
set isid[0x4B] = true
set isid[0x4C] = true
set isid[0x4D] = true
set isid[0x4E] = true
set isid[0x4F] = true
set isid[0x50] = true
set isid[0x51] = true
set isid[0x52] = true
set isid[0x53] = true
set isid[0x54] = true
set isid[0x55] = true
set isid[0x56] = true
set isid[0x57] = true
set isid[0x58] = true
set isid[0x59] = true
set isid[0x5A] = true
set isid[0x5F] = true
set isid[0x61] = true
set isid[0x62] = true
set isid[0x63] = true
set isid[0x64] = true
set isid[0x65] = true
set isid[0x66] = true
set isid[0x67] = true
set isid[0x68] = true
set isid[0x69] = true
set isid[0x6A] = true
set isid[0x6B] = true
set isid[0x6C] = true
set isid[0x6D] = true
set isid[0x6E] = true
set isid[0x6F] = true
set isid[0x70] = true
set isid[0x71] = true
set isid[0x72] = true
set isid[0x73] = true
set isid[0x74] = true
set isid[0x75] = true
set isid[0x76] = true
set isid[0x77] = true
set isid[0x78] = true
set isid[0x79] = true
set isid[0x7A] = true
endfunction
function chr takes integer i returns string
return c8s[i]
endfunction
function ord takes string c returns integer
return SH2I(c) - bp
endfunction
function isdigit takes string c returns boolean
return isd[SH2I(c) - bp]
endfunction
function isxdigit takes string c returns boolean
return isxd[SH2I(c) - bp]
endfunction
function isspace takes string c returns boolean
return iss[SH2I(c) - bp]
endfunction
function isvspace takes string c returns boolean // vertical space
return c == "\n" or c == "\r" // \f?
endfunction
function ishspace takes string c returns boolean // horizontal space
return c == " " or c == "\t"
endfunction
function ispunct takes string c returns boolean
return isp[SH2I(c) - bp]
endfunction
function isalpha takes string c returns boolean
return isa[SH2I(c) - bp]
endfunction
function isalnum takes string c returns boolean
return isan[SH2I(c) - bp]
endfunction
// 'A' .. 'Z', 'a' .. 'z', '0' .. '9' and '_'
function isident takes string c returns boolean
return isid[SH2I(c) - bp]
endfunction
private function init takes nothing returns nothing
set bp = SH2I("c00")
call c8s_init()
call c8_classes_init()
endfunction
endlibrary
These functions come in handy when tokenizing strings. Hopefully these are not slowish.
Last edited: