diff --git a/core/encoding.c b/core/encoding.c new file mode 100644 index 0000000..870784b --- /dev/null +++ b/core/encoding.c @@ -0,0 +1,1193 @@ +#include +#include + +bool b_wchar_is_number(b_wchar c) +{ + return iswnumber((wchar_t)c); +} + +bool b_wchar_is_alpha(b_wchar c) +{ + if (c == 0) { + return false; + } + + if (c >= 0x0041 && c <= 0x005A) { + return true; + } + + if (c >= 0x0061 && c <= 0x007A) { + return true; + } + + if (c >= 0x00C0 && c <= 0x00D6) { + return true; + } + + if (c >= 0x00D8 && c <= 0x00F6) { + return true; + } + + if (c >= 0x00F8 && c <= 0x02C1) { + return true; + } + + if (c >= 0x02C6 && c <= 0x02D1) { + return true; + } + + if (c >= 0x02E0 && c <= 0x02E4) { + return true; + } + + if (c >= 0x0370 && c <= 0x0374) { + return true; + } + + if (c >= 0x037A && c <= 0x037D) { + return true; + } + + if (c >= 0x0388 && c <= 0x038A) { + return true; + } + + if (c >= 0x038E && c <= 0x03A1) { + return true; + } + + if (c >= 0x03A3 && c <= 0x03F5) { + return true; + } + + if (c >= 0x03F7 && c <= 0x0481) { + return true; + } + + if (c >= 0x048A && c <= 0x0527) { + return true; + } + + if (c >= 0x0531 && c <= 0x0556) { + return true; + } + + if (c >= 0x0561 && c <= 0x0587) { + return true; + } + + if (c >= 0x05D0 && c <= 0x05EA) { + return true; + } + + if (c >= 0x05F0 && c <= 0x05F2) { + return true; + } + + if (c >= 0x0620 && c <= 0x064A) { + return true; + } + + if (c >= 0x0671 && c <= 0x06D3) { + return true; + } + + if (c >= 0x06FA && c <= 0x06FC) { + return true; + } + + if (c >= 0x0712 && c <= 0x072F) { + return true; + } + + if (c >= 0x074D && c <= 0x07A5) { + return true; + } + + if (c >= 0x07CA && c <= 0x07EA) { + return true; + } + + if (c >= 0x0800 && c <= 0x0815) { + return true; + } + + if (c >= 0x0840 && c <= 0x0858) { + return true; + } + + if (c >= 0x08A2 && c <= 0x08AC) { + return true; + } + + if (c >= 0x0904 && c <= 0x0939) { + return true; + } + + if (c >= 0x0958 && c <= 0x0961) { + return true; + } + + if (c >= 0x0971 && c <= 0x0977) { + return true; + } + + if (c >= 0x0979 && c <= 0x097F) { + return true; + } + + if (c >= 0x0985 && c <= 0x098C) { + return true; + } + + if (c >= 0x0993 && c <= 0x09A8) { + return true; + } + + if (c >= 0x09AA && c <= 0x09B0) { + return true; + } + + if (c >= 0x09B6 && c <= 0x09B9) { + return true; + } + + if (c >= 0x09DF && c <= 0x09E1) { + return true; + } + + if (c >= 0x0A05 && c <= 0x0A0A) { + return true; + } + + if (c >= 0x0A13 && c <= 0x0A28) { + return true; + } + + if (c >= 0x0A2A && c <= 0x0A30) { + return true; + } + + if (c >= 0x0A59 && c <= 0x0A5C) { + return true; + } + + if (c >= 0x0A72 && c <= 0x0A74) { + return true; + } + + if (c >= 0x0A85 && c <= 0x0A8D) { + return true; + } + + if (c >= 0x0A8F && c <= 0x0A91) { + return true; + } + + if (c >= 0x0A93 && c <= 0x0AA8) { + return true; + } + + if (c >= 0x0AAA && c <= 0x0AB0) { + return true; + } + + if (c >= 0x0AB5 && c <= 0x0AB9) { + return true; + } + + if (c >= 0x0B05 && c <= 0x0B0C) { + return true; + } + + if (c >= 0x0B13 && c <= 0x0B28) { + return true; + } + + if (c >= 0x0B2A && c <= 0x0B30) { + return true; + } + + if (c >= 0x0B35 && c <= 0x0B39) { + return true; + } + + if (c >= 0x0B5F && c <= 0x0B61) { + return true; + } + + if (c >= 0x0B85 && c <= 0x0B8A) { + return true; + } + + if (c >= 0x0B8E && c <= 0x0B90) { + return true; + } + + if (c >= 0x0B92 && c <= 0x0B95) { + return true; + } + + if (c >= 0x0BA8 && c <= 0x0BAA) { + return true; + } + + if (c >= 0x0BAE && c <= 0x0BB9) { + return true; + } + + if (c >= 0x0C05 && c <= 0x0C0C) { + return true; + } + + if (c >= 0x0C0E && c <= 0x0C10) { + return true; + } + + if (c >= 0x0C12 && c <= 0x0C28) { + return true; + } + + if (c >= 0x0C2A && c <= 0x0C33) { + return true; + } + + if (c >= 0x0C35 && c <= 0x0C39) { + return true; + } + + if (c >= 0x0C85 && c <= 0x0C8C) { + return true; + } + + if (c >= 0x0C8E && c <= 0x0C90) { + return true; + } + + if (c >= 0x0C92 && c <= 0x0CA8) { + return true; + } + + if (c >= 0x0CAA && c <= 0x0CB3) { + return true; + } + + if (c >= 0x0CB5 && c <= 0x0CB9) { + return true; + } + + if (c >= 0x0D05 && c <= 0x0D0C) { + return true; + } + + if (c >= 0x0D0E && c <= 0x0D10) { + return true; + } + + if (c >= 0x0D12 && c <= 0x0D3A) { + return true; + } + + if (c >= 0x0D7A && c <= 0x0D7F) { + return true; + } + + if (c >= 0x0D85 && c <= 0x0D96) { + return true; + } + + if (c >= 0x0D9A && c <= 0x0DB1) { + return true; + } + + if (c >= 0x0DB3 && c <= 0x0DBB) { + return true; + } + + if (c >= 0x0DC0 && c <= 0x0DC6) { + return true; + } + + if (c >= 0x0E01 && c <= 0x0E30) { + return true; + } + + if (c >= 0x0E40 && c <= 0x0E46) { + return true; + } + + if (c >= 0x0E94 && c <= 0x0E97) { + return true; + } + + if (c >= 0x0E99 && c <= 0x0E9F) { + return true; + } + + if (c >= 0x0EA1 && c <= 0x0EA3) { + return true; + } + + if (c >= 0x0EAD && c <= 0x0EB0) { + return true; + } + + if (c >= 0x0EC0 && c <= 0x0EC4) { + return true; + } + + if (c >= 0x0EDC && c <= 0x0EDF) { + return true; + } + + if (c >= 0x0F40 && c <= 0x0F47) { + return true; + } + + if (c >= 0x0F49 && c <= 0x0F6C) { + return true; + } + + if (c >= 0x0F88 && c <= 0x0F8C) { + return true; + } + + if (c >= 0x1000 && c <= 0x102A) { + return true; + } + + if (c >= 0x1050 && c <= 0x1055) { + return true; + } + + if (c >= 0x105A && c <= 0x105D) { + return true; + } + + if (c >= 0x106E && c <= 0x1070) { + return true; + } + + if (c >= 0x1075 && c <= 0x1081) { + return true; + } + + if (c >= 0x10A0 && c <= 0x10C5) { + return true; + } + + if (c >= 0x10D0 && c <= 0x10FA) { + return true; + } + + if (c >= 0x10FC && c <= 0x1248) { + return true; + } + + if (c >= 0x124A && c <= 0x124D) { + return true; + } + + if (c >= 0x1250 && c <= 0x1256) { + return true; + } + + if (c >= 0x125A && c <= 0x125D) { + return true; + } + + if (c >= 0x1260 && c <= 0x1288) { + return true; + } + + if (c >= 0x128A && c <= 0x128D) { + return true; + } + + if (c >= 0x1290 && c <= 0x12B0) { + return true; + } + + if (c >= 0x12B2 && c <= 0x12B5) { + return true; + } + + if (c >= 0x12B8 && c <= 0x12BE) { + return true; + } + + if (c >= 0x12C2 && c <= 0x12C5) { + return true; + } + + if (c >= 0x12C8 && c <= 0x12D6) { + return true; + } + + if (c >= 0x12D8 && c <= 0x1310) { + return true; + } + + if (c >= 0x1312 && c <= 0x1315) { + return true; + } + + if (c >= 0x1318 && c <= 0x135A) { + return true; + } + + if (c >= 0x1380 && c <= 0x138F) { + return true; + } + + if (c >= 0x13A0 && c <= 0x13F4) { + return true; + } + + if (c >= 0x1401 && c <= 0x166C) { + return true; + } + + if (c >= 0x166F && c <= 0x167F) { + return true; + } + + if (c >= 0x1681 && c <= 0x169A) { + return true; + } + + if (c >= 0x16A0 && c <= 0x16EA) { + return true; + } + + if (c >= 0x1700 && c <= 0x170C) { + return true; + } + + if (c >= 0x170E && c <= 0x1711) { + return true; + } + + if (c >= 0x1720 && c <= 0x1731) { + return true; + } + + if (c >= 0x1740 && c <= 0x1751) { + return true; + } + + if (c >= 0x1760 && c <= 0x176C) { + return true; + } + + if (c >= 0x176E && c <= 0x1770) { + return true; + } + + if (c >= 0x1780 && c <= 0x17B3) { + return true; + } + + if (c >= 0x1820 && c <= 0x1877) { + return true; + } + + if (c >= 0x1880 && c <= 0x18A8) { + return true; + } + + if (c >= 0x18B0 && c <= 0x18F5) { + return true; + } + + if (c >= 0x1900 && c <= 0x191C) { + return true; + } + + if (c >= 0x1950 && c <= 0x196D) { + return true; + } + + if (c >= 0x1970 && c <= 0x1974) { + return true; + } + + if (c >= 0x1980 && c <= 0x19AB) { + return true; + } + + if (c >= 0x19C1 && c <= 0x19C7) { + return true; + } + + if (c >= 0x1A00 && c <= 0x1A16) { + return true; + } + + if (c >= 0x1A20 && c <= 0x1A54) { + return true; + } + + if (c >= 0x1B05 && c <= 0x1B33) { + return true; + } + + if (c >= 0x1B45 && c <= 0x1B4B) { + return true; + } + + if (c >= 0x1B83 && c <= 0x1BA0) { + return true; + } + + if (c >= 0x1BBA && c <= 0x1BE5) { + return true; + } + + if (c >= 0x1C00 && c <= 0x1C23) { + return true; + } + + if (c >= 0x1C4D && c <= 0x1C4F) { + return true; + } + + if (c >= 0x1C5A && c <= 0x1C7D) { + return true; + } + + if (c >= 0x1CE9 && c <= 0x1CEC) { + return true; + } + + if (c >= 0x1CEE && c <= 0x1CF1) { + return true; + } + + if (c >= 0x1D00 && c <= 0x1DBF) { + return true; + } + + if (c >= 0x1E00 && c <= 0x1F15) { + return true; + } + + if (c >= 0x1F18 && c <= 0x1F1D) { + return true; + } + + if (c >= 0x1F20 && c <= 0x1F45) { + return true; + } + + if (c >= 0x1F48 && c <= 0x1F4D) { + return true; + } + + if (c >= 0x1F50 && c <= 0x1F57) { + return true; + } + + if (c >= 0x1F5F && c <= 0x1F7D) { + return true; + } + + if (c >= 0x1F80 && c <= 0x1FB4) { + return true; + } + + if (c >= 0x1FB6 && c <= 0x1FBC) { + return true; + } + + if (c >= 0x1FC2 && c <= 0x1FC4) { + return true; + } + + if (c >= 0x1FC6 && c <= 0x1FCC) { + return true; + } + + if (c >= 0x1FD0 && c <= 0x1FD3) { + return true; + } + + if (c >= 0x1FD6 && c <= 0x1FDB) { + return true; + } + + if (c >= 0x1FE0 && c <= 0x1FEC) { + return true; + } + + if (c >= 0x1FF2 && c <= 0x1FF4) { + return true; + } + + if (c >= 0x1FF6 && c <= 0x1FFC) { + return true; + } + + if (c >= 0x2090 && c <= 0x209C) { + return true; + } + + if (c >= 0x210A && c <= 0x2113) { + return true; + } + + if (c >= 0x2119 && c <= 0x211D) { + return true; + } + + if (c >= 0x212A && c <= 0x212D) { + return true; + } + + if (c >= 0x212F && c <= 0x2139) { + return true; + } + + if (c >= 0x213C && c <= 0x213F) { + return true; + } + + if (c >= 0x2145 && c <= 0x2149) { + return true; + } + + if (c >= 0x2C00 && c <= 0x2C2E) { + return true; + } + + if (c >= 0x2C30 && c <= 0x2C5E) { + return true; + } + + if (c >= 0x2C60 && c <= 0x2CE4) { + return true; + } + + if (c >= 0x2CEB && c <= 0x2CEE) { + return true; + } + + if (c >= 0x2D00 && c <= 0x2D25) { + return true; + } + + if (c >= 0x2D30 && c <= 0x2D67) { + return true; + } + + if (c >= 0x2D80 && c <= 0x2D96) { + return true; + } + + if (c >= 0x2DA0 && c <= 0x2DA6) { + return true; + } + + if (c >= 0x2DA8 && c <= 0x2DAE) { + return true; + } + + if (c >= 0x2DB0 && c <= 0x2DB6) { + return true; + } + + if (c >= 0x2DB8 && c <= 0x2DBE) { + return true; + } + + if (c >= 0x2DC0 && c <= 0x2DC6) { + return true; + } + + if (c >= 0x2DC8 && c <= 0x2DCE) { + return true; + } + + if (c >= 0x2DD0 && c <= 0x2DD6) { + return true; + } + + if (c >= 0x2DD8 && c <= 0x2DDE) { + return true; + } + + if (c >= 0x3031 && c <= 0x3035) { + return true; + } + + if (c >= 0x3041 && c <= 0x3096) { + return true; + } + + if (c >= 0x309D && c <= 0x309F) { + return true; + } + + if (c >= 0x30A1 && c <= 0x30FA) { + return true; + } + + if (c >= 0x30FC && c <= 0x30FF) { + return true; + } + + if (c >= 0x3105 && c <= 0x312D) { + return true; + } + + if (c >= 0x3131 && c <= 0x318E) { + return true; + } + + if (c >= 0x31A0 && c <= 0x31BA) { + return true; + } + + if (c >= 0x31F0 && c <= 0x31FF) { + return true; + } + + if (c >= 0x3400 && c <= 0x4DB5) { + return true; + } + + if (c >= 0x4E00 && c <= 0x9FCC) { + return true; + } + + if (c >= 0xA000 && c <= 0xA48C) { + return true; + } + + if (c >= 0xA4D0 && c <= 0xA4FD) { + return true; + } + + if (c >= 0xA500 && c <= 0xA60C) { + return true; + } + + if (c >= 0xA610 && c <= 0xA61F) { + return true; + } + + if (c >= 0xA640 && c <= 0xA66E) { + return true; + } + + if (c >= 0xA67F && c <= 0xA697) { + return true; + } + + if (c >= 0xA6A0 && c <= 0xA6E5) { + return true; + } + + if (c >= 0xA717 && c <= 0xA71F) { + return true; + } + + if (c >= 0xA722 && c <= 0xA788) { + return true; + } + + if (c >= 0xA78B && c <= 0xA78E) { + return true; + } + + if (c >= 0xA790 && c <= 0xA793) { + return true; + } + + if (c >= 0xA7A0 && c <= 0xA7AA) { + return true; + } + + if (c >= 0xA7F8 && c <= 0xA801) { + return true; + } + + if (c >= 0xA803 && c <= 0xA805) { + return true; + } + + if (c >= 0xA807 && c <= 0xA80A) { + return true; + } + + if (c >= 0xA80C && c <= 0xA822) { + return true; + } + + if (c >= 0xA840 && c <= 0xA873) { + return true; + } + + if (c >= 0xA882 && c <= 0xA8B3) { + return true; + } + + if (c >= 0xA8F2 && c <= 0xA8F7) { + return true; + } + + if (c >= 0xA90A && c <= 0xA925) { + return true; + } + + if (c >= 0xA930 && c <= 0xA946) { + return true; + } + + if (c >= 0xA960 && c <= 0xA97C) { + return true; + } + + if (c >= 0xA984 && c <= 0xA9B2) { + return true; + } + + if (c >= 0xAA00 && c <= 0xAA28) { + return true; + } + + if (c >= 0xAA40 && c <= 0xAA42) { + return true; + } + + if (c >= 0xAA44 && c <= 0xAA4B) { + return true; + } + + if (c >= 0xAA60 && c <= 0xAA76) { + return true; + } + + if (c >= 0xAA80 && c <= 0xAAAF) { + return true; + } + + if (c >= 0xAAB9 && c <= 0xAABD) { + return true; + } + + if (c >= 0xAADB && c <= 0xAADD) { + return true; + } + + if (c >= 0xAAE0 && c <= 0xAAEA) { + return true; + } + + if (c >= 0xAAF2 && c <= 0xAAF4) { + return true; + } + + if (c >= 0xAB01 && c <= 0xAB06) { + return true; + } + + if (c >= 0xAB09 && c <= 0xAB0E) { + return true; + } + + if (c >= 0xAB11 && c <= 0xAB16) { + return true; + } + + if (c >= 0xAB20 && c <= 0xAB26) { + return true; + } + + if (c >= 0xAB28 && c <= 0xAB2E) { + return true; + } + + if (c >= 0xABC0 && c <= 0xABE2) { + return true; + } + + if (c >= 0xAC00 && c <= 0xD7A3) { + return true; + } + + if (c >= 0xD7B0 && c <= 0xD7C6) { + return true; + } + + if (c >= 0xD7CB && c <= 0xD7FB) { + return true; + } + + if (c >= 0xF900 && c <= 0xFA6D) { + return true; + } + + if (c >= 0xFA70 && c <= 0xFAD9) { + return true; + } + + if (c >= 0xFB00 && c <= 0xFB06) { + return true; + } + + if (c >= 0xFB13 && c <= 0xFB17) { + return true; + } + + if (c >= 0xFB1F && c <= 0xFB28) { + return true; + } + + if (c >= 0xFB2A && c <= 0xFB36) { + return true; + } + + if (c >= 0xFB38 && c <= 0xFB3C) { + return true; + } + + if (c >= 0xFB46 && c <= 0xFBB1) { + return true; + } + + if (c >= 0xFBD3 && c <= 0xFD3D) { + return true; + } + + if (c >= 0xFD50 && c <= 0xFD8F) { + return true; + } + + if (c >= 0xFD92 && c <= 0xFDC7) { + return true; + } + + if (c >= 0xFDF0 && c <= 0xFDFB) { + return true; + } + + if (c >= 0xFE70 && c <= 0xFE74) { + return true; + } + + if (c >= 0xFE76 && c <= 0xFEFC) { + return true; + } + + if (c >= 0xFF21 && c <= 0xFF3A) { + return true; + } + + if (c >= 0xFF41 && c <= 0xFF5A) { + return true; + } + + if (c >= 0xFF66 && c <= 0xFFBE) { + return true; + } + + if (c >= 0xFFC2 && c <= 0xFFC7) { + return true; + } + + if (c >= 0xFFCA && c <= 0xFFCF) { + return true; + } + + if (c >= 0xFFD2 && c <= 0xFFD7) { + return true; + } + + if (c >= 0xFFDA && c <= 0xFFDC) { + return true; + } + + switch (c) { + case 0x00AA: + case 0x00B5: + case 0x00BA: + case 0x02EC: + case 0x02EE: + case 0x0376: + case 0x0377: + case 0x0386: + case 0x038C: + case 0x0559: + case 0x066E: + case 0x066F: + case 0x06D5: + case 0x06E5: + case 0x06E6: + case 0x06EE: + case 0x06EF: + case 0x06FF: + case 0x0710: + case 0x07B1: + case 0x07F4: + case 0x07F5: + case 0x07FA: + case 0x081A: + case 0x0824: + case 0x0828: + case 0x08A0: + case 0x093D: + case 0x0950: + case 0x098F: + case 0x0990: + case 0x09B2: + case 0x09BD: + case 0x09CE: + case 0x09DC: + case 0x09DD: + case 0x09F0: + case 0x09F1: + case 0x0A0F: + case 0x0A10: + case 0x0A32: + case 0x0A33: + case 0x0A35: + case 0x0A36: + case 0x0A38: + case 0x0A39: + case 0x0A5E: + case 0x0AB2: + case 0x0AB3: + case 0x0ABD: + case 0x0AD0: + case 0x0AE0: + case 0x0AE1: + case 0x0B0F: + case 0x0B10: + case 0x0B32: + case 0x0B33: + case 0x0B3D: + case 0x0B5C: + case 0x0B5D: + case 0x0B71: + case 0x0B83: + case 0x0B99: + case 0x0B9A: + case 0x0B9C: + case 0x0B9E: + case 0x0B9F: + case 0x0BA3: + case 0x0BA4: + case 0x0BD0: + case 0x0C3D: + case 0x0C58: + case 0x0C59: + case 0x0C60: + case 0x0C61: + case 0x0CBD: + case 0x0CDE: + case 0x0CE0: + case 0x0CE1: + case 0x0CF1: + case 0x0CF2: + case 0x0D3D: + case 0x0D4E: + case 0x0D60: + case 0x0D61: + case 0x0DBD: + case 0x0E32: + case 0x0E33: + case 0x0E81: + case 0x0E82: + case 0x0E84: + case 0x0E87: + case 0x0E88: + case 0x0E8A: + case 0x0E8D: + case 0x0EA5: + case 0x0EA7: + case 0x0EAA: + case 0x0EAB: + case 0x0EB2: + case 0x0EB3: + case 0x0EBD: + case 0x0EC6: + case 0x0F00: + case 0x103F: + case 0x1061: + case 0x1065: + case 0x1066: + case 0x108E: + case 0x10C7: + case 0x10CD: + case 0x1258: + case 0x12C0: + case 0x17D7: + case 0x17DC: + case 0x18AA: + case 0x1AA7: + case 0x1BAE: + case 0x1BAF: + case 0x1CF5: + case 0x1CF6: + case 0x1F59: + case 0x1F5B: + case 0x1F5D: + case 0x1FBE: + case 0x2071: + case 0x207F: + case 0x2102: + case 0x2107: + case 0x2115: + case 0x2124: + case 0x2126: + case 0x2128: + case 0x214E: + case 0x2183: + case 0x2184: + case 0x2CF2: + case 0x2CF3: + case 0x2D27: + case 0x2D2D: + case 0x2D6F: + case 0x2E2F: + case 0x3005: + case 0x3006: + case 0x303B: + case 0x303C: + case 0xA62A: + case 0xA62B: + case 0xA8FB: + case 0xA9CF: + case 0xAA7A: + case 0xAAB1: + case 0xAAB5: + case 0xAAB6: + case 0xAAC0: + case 0xAAC2: + case 0xFB1D: + case 0xFB3E: + case 0xFB40: + case 0xFB41: + case 0xFB43: + case 0xFB44: + return true; + default: + return false; + } +} + +bool b_wchar_is_hex_digit(b_wchar c) +{ + return isxdigit(c); +} + +bool b_wchar_is_space(b_wchar c) +{ + return iswspace((wchar_t)c); +} + +bool b_wchar_is_punct(b_wchar c) +{ + return iswpunct((wchar_t)c); +} diff --git a/core/include/blue/core/encoding.h b/core/include/blue/core/encoding.h new file mode 100644 index 0000000..97817ae --- /dev/null +++ b/core/include/blue/core/encoding.h @@ -0,0 +1,31 @@ +#ifndef BLUE_CORE_ENCODING_H_ +#define BLUE_CORE_ENCODING_H_ + +#include +#include +#include + +#define B_WCHAR_INVALID ((b_wchar) - 1) + +typedef int32_t b_wchar; + +BLUE_API bool b_wchar_is_alpha(b_wchar c); +BLUE_API bool b_wchar_is_number(b_wchar c); +static inline bool b_wchar_is_bin_digit(b_wchar c) +{ + return c >= '0' && c <= '1'; +} +static inline bool b_wchar_is_oct_digit(b_wchar c) +{ + return c >= '0' && c <= '7'; +} +BLUE_API bool b_wchar_is_hex_digit(b_wchar c); +BLUE_API bool b_wchar_is_space(b_wchar c); +static inline bool b_wchar_is_alnum(b_wchar c) +{ + return b_wchar_is_alpha(c) || b_wchar_is_number(c); +} + +BLUE_API bool b_wchar_is_punct(b_wchar c); + +#endif