.[ ČeskéHry.cz ].
Čestina v c++/Allegro

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
aliasals



Založen: 20. 05. 2011
Příspěvky: 10
Bydliště: Ostrava

PříspěvekZaslal: 12. květen 2018, 11:12:43    Předmět: Čestina v c++/Allegro Odpovědět s citátem

Neřešil náhodou z vás někdo, jak zobrazit české znaky v C++/Allegru? Nejlépe celý řetězec ze souboru

Zatím jsem přišel zobrazení znaku přes Unicode čislo :

int textt = 0x0160; // 'š'
uint16_t const *text = &textt;

ALLEGRO_USTR * ustr = al_ustr_new_from_utf16(text);

al_draw_ustr(font, color, x, y, flags, ustr);

al_ustr_free(ustr);

Ale tohle "řešení" se mi zdá dost neštastné. Rád bych se vyhnul i situaci, kdy bych pro každy Znak zjišťoval Unicode čislo přes fci MultiByteToWideChar()

díky
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
OndraSej



Založen: 28. 07. 2007
Příspěvky: 759
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 12. květen 2018, 12:08:54    Předmět: Odpovědět s citátem

Podle dokumentace al_draw_ustr čeká řetězec v utf-8. Tak stačí, pokud v tom souboru (a ve zdrojácích) budeš mít všechny texty v tomhle kódování - a to už pak je jen otázka nastavení textového editoru...
_________________
http://trionteam.net
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
aliasals



Založen: 20. 05. 2011
Příspěvky: 10
Bydliště: Ostrava

PříspěvekZaslal: 12. květen 2018, 14:14:05    Předmět: Odpovědět s citátem

No priznam se, ze se mi to zrovna nepovedlo.
Nejdal kam jsem se dostal bylo :

const char *utf8 = u8"text\u0160"; //"textš"
ALLEGRO_USTR * ustr = al_ustr_new(utf8);
al_draw_ustr(font, color, x, y, flags, ustr);
al_ustr_free(ustr);

jak muzu ulozit znaky ze souboru do char s kodovanim utf-8?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 870

PříspěvekZaslal: 12. květen 2018, 19:32:19    Předmět: Odpovědět s citátem

char pole jako takové nic o UTF-8 neví. Je to prostě jen pole 8-bitových čísel. Pokud máš UTF-8, tak jeden znak je tvořen až 32bity. Tzn. třeba vezmeš 4 chary a máš jeden UTF8 znak.

V char poli můžeš mít uložený UTF-8 řetězec, ale nejsi schopný s ním pracovat jako s řetězcem přímo. Tzn. nelze zjistit jeho délku, udělat snadno substring apod. Ale to pro tvé potřeby není podstatné, ty to jen pošleš dál do Allegra a tam se to s tím nějak popere.

Když načteš soubor z disku, který je v UTF-8 tak se ti načte do char pole, ale počet prvků pole se nemusí rovnat počtu znaků, které čekáš. Jedině UTF-8 a ASCII znaky jsou stejné (tzn. 0-9, A-Z, a-z, nějaké čárky, znaménka) -> zabírají v UTF-8 i ASCII 1 byte. Diakritika a jiné znakové sady už ne.
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1488
Bydliště: Telč

PříspěvekZaslal: 14. květen 2018, 07:55:30    Předmět: Odpovědět s citátem

Jak píšou ostatní, v textovým editoru a ve zdrojácích použít UTF-8 (někde musíš nastavit). A pak doporučuju stáhnout tady https://www.cprogramming.com/tutorial/unicode.html utf8.h a utf8.c. Jsou tam nějaký funkce na konverzi, zjištění délky stringu v utf8 a tak podobně (po lehkých úpravách jsem použil i ve vlastních projektech).
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 870

PříspěvekZaslal: 14. květen 2018, 09:46:06    Předmět: Odpovědět s citátem

Ještě pokud chceš něco, co má podobný "interface" jako std::string, tak je tu https://sourceforge.net/projects/tiny-utf8/. Nicméně co jsem jí používal, tak občas tam je bug Smile. Resp. to bylo v minulé verzi, teď ta poslední nevím jak na tom je.

Hard-core možnost je pak ICU knihovna.
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
aliasals



Založen: 20. 05. 2011
Příspěvky: 10
Bydliště: Ostrava

PříspěvekZaslal: 22. leden 2021, 19:33:30    Předmět: Řešení po 3 letech Odpovědět s citátem

Dekuji za pomoc, konecne jsem na to prisel. (Po 3 letech Very Happy )

Napisu tu reseni, tak snad to nekomu pomuze...

1) Musi se pouzivat spravny unicode font :
-Nektere fonty jsou na urcity jazyk a nektere maji celej set unicode znaku...

2) Allegro pouziva spesl retezec ALLEGRO_USTR *ustrText;
-Kdyz se pouziva normalni string nebo char *retezec;, tak se pocita s tim, ze kazdy char v poli je jeden znak...,
-ale ALLEGRO_USTR pocita s tim, ze 4 char znaky (4x BYTE) za sebou jsou dohromady jeden znak (neboli to je uint16_t);

3)psat unicode-text do zdrojoveho souboru je mozne, ale musi se nastavit format souboru a neni to moc "elegantni reseni"
-lepsi je nacist unicode text primo z *.txt...

Nejakej ten prakticky kod :
ALLEGRO_FILE *aFile = al_fopen("assets/font/unicodeTest.txt", "r");

ALLEGRO_USTR *ustrText = new ALLEGRO_USTR;

ustrText = al_fget_ustr(aFile); //cte po radcich

al_draw_ustr(font, color, x, y, 0, ustrText);



Dekuji za pomoc lidi


PS : Ve fontech a v textech se uplne moc nevyznam (z technickeho hlediska), tak kdybych napsal nejakou blbost, tak prosim o opravu...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna