#include #include #include #include "tstring.h" // #define DEFAULT_STRING_SIZE 32 // typedef struct __string { // char* Characters; // int Length; // int ByteCount; // int Capacity; // } TString; // int GetGlyphByteWidth(const char* glyph); // void AppendGlyph(const char* glyph, TString* string); // void GetCharByIndex(int index, char characters[8], const TString* string); // TString* CreateString(void); // const unsigned char First = 0x70; // const unsigned char Teo = 0xE0; // const unsigned char Three = 0xF0; // const unsigned char Four = 0xF7; int main(int argc, char** argv) { char glyph[10] = { 0 }; char characters[8] = { 0 }; int index = 2; TString* string = TStringCreate(); //0xF0 0xA0 0xBA 0x8C char* test = u8"\xE5\x87\x84"; char* test2 = u8"\xE3\x81\x84"; char* test4 = u8"\xF0\xA0\xBA\x8C"; char* test5 = "B"; char* test3 = " Just some\0 extra text"; TStringAppendText(test, string); TStringAppendText(test2, string); TStringAppendText(test4, string); TStringAppendText(test5, string); //GetCharByIndex(index, characters, string); //GetCharByIndex(3, glyph, string); // printf("From string index %d: '%s' (string length is %d)\n", index, characters, string->Length); // printf("And one English character: '%s'\n", glyph); printf("Full string: '%s'\n", TStringGetString(string)); //fgets(glyph, 10, stdin); //glyph[strlen(glyph) - 1] = 0; //printf("Width %d byte(s).\n", GetGlyphByteWidth(glyph)); } // TString* CreateString(void) { // TString* string = malloc(sizeof(TString)); // string->Characters = calloc(DEFAULT_STRING_SIZE, sizeof(char)); // string->Capacity = DEFAULT_STRING_SIZE; // string->ByteCount = 0; // string->Length = 0; // return string; // } // void AppendGlyph(const char* glyph, TString* string) { // int length = strlen(glyph); // memcpy(&string->Characters[string->ByteCount], glyph, length); // string->ByteCount += length; // string->Length++; // } // void GetCharByIndex(int index, char characters[8], const TString* string) { // int glyphCount = 0; // for(int i = 0; i < string->ByteCount;) { // if (glyphCount == index) { // memcpy(characters, &string->Characters[i], GetGlyphByteWidth(&string->Characters[i])); // return; // } // glyphCount++; // i += GetGlyphByteWidth(&string->Characters[i]); // } // } // int GetGlyphByteWidth(const char* glyph) { // printf("Bytes for '%s': ", glyph); // for(size_t i = 0; i < strlen(glyph); i++) { // printf("%02X ", 0xFF & glyph[i]); // } // printf("\n"); // unsigned char result = *glyph & 0xFF; // if ((*glyph & 0x80) == 0) { // return 1; // } // else if ((*glyph & 0xE0) == 0xC0) { // return 2; // } // else if ((*glyph & 0xF0) == 0xE0) { // return 3; // } // else if ((*glyph & 0xF8) == 0xF0) { // return 4; // } // fprintf(stderr, "Failed to get glyph %02X\n", 0xFF & *glyph); // exit(-1); // }