• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

c8 - Ascii character classes

Status
Not open for further replies.
Level 13
Joined
Nov 7, 2014
Messages
571
c8 - Ascii character classes

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:
Level 6
Joined
Jul 30, 2013
Messages
282
so.. this is neat but.

its for ascii only right..?
getting most of these right for ascii aint that much of a pain tho.. because thats only 128 values.. (NULL byte too..)

what rly is a pain is doing all of that for arbitrary utf8 sequences.. which your lib doesn't really (seem to..) help with.
also a whole bunch of arrays when like 2 if'statements would suffice in many cases.
 
Status
Not open for further replies.
Top