Göra en Text editor för Linux. [var: GCC och Unicode]

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6878
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Göra en Text editor för Linux. [var: GCC och Unicode]

Inlägg av Marta »

Vad finns det för stöd i GCC för att hantera Unicode? I den dokumentation jag har finns ingenting.

Strängar där 1 tecken äe 1 byte funkar ju fint, men när 1 tecken är 4 byte så blir det genast något helt annat... uint kan ju användas, men där är mycket som försvinner. Bl.a. stängkonstanter på ett enkelt sätt.
Senast redigerad av Marta 18 januari 2022, 07:01:23, redigerad totalt 1 gång.
davidi
Inlägg: 571
Blev medlem: 13 oktober 2011, 16:45:38
Ort: Ekerö

Re: GCC och Unicode... ?

Inlägg av davidi »

"Unicode" säger ingenting om hur ett tecken representeras, utan det du antagligen är intresserad av är UTF-16 LE/BE alternativt UTF-8. Det är inte en så stor fråga för kompilatorn, utan istället funktionerna i de bibliotek du använder som tar emot strängargument. UTF-16 kan generellt bli ett stort problem eftersom varannat tecken normalt blir null. UTF-8 har större chans att komma igenom, och ska man bara skriva ut strängarna bör det fungera under förutsättning att miljön som programmet exekveras i kan hantera det rätt.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6878
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: GCC och Unicode... ?

Inlägg av Marta »

Det är ett program som hanterar textsträngar, så måste vara fixlängd. Därför är det 32-bit unsigned integer när tecknen hanteras. Använder även UTF-8 så en del av lösningen blir att använda det formatet för konstanter. Använder xlib direkt utan någon extra megaklump emellan, så det finns ingenting färdigt.
agehall
Inlägg: 414
Blev medlem: 12 augusti 2020, 19:27:54

Re: GCC och Unicode... ?

Inlägg av agehall »

Att använda 32-bitar för att representera alla tecken låter ganska overkill, iallafall generellt sett.

Vad är det du vill att programmet ska göra? I de flesta fall vill du jobba med strängar som är UTF-8-kodade eftersom de alltsom oftast då blir 1 byte per tecken men ändå kan representera vilka tecken som helst i hela UNICODE. Det är inte helt ovanligt att de bibliotek man jobbar med förväntar sig UTF-8, så det är vad jag skulle ha satsat på.

Men i princip så är det ju upp till dig hur du kodar dina strängar. Vill du koda dem som 64-bitars signed integers så går det bra, men du är fortfarande ansvarig för att koda om dem till vad respektive bibliotek förväntar sig.

Det som dock alltid är viktigt att komma ihåg, är att UNICODE är en teckenuppsättning, inte en kodning. Kodningen är oftast UTF-8, men många andra kodningar förekommer av olika anledningar.
MiaM
Inlägg: 9888
Blev medlem: 6 maj 2009, 22:19:19

Re: GCC och Unicode... ?

Inlägg av MiaM »

Inte ett svar för 32-bitarstecken, men relaterat:

Windows NT & co kör(de) med "WCHAR", 16-bitarstecken, och det är väl sannolikt att libbarna som hänger med GCC har stöd för denna datatyp eftersom den blev mycket vanlig i WIN32-API:et.

Ifall det finns nåt stöd för fixed-width 32-bitars teckenkodning så borde väl det nämnas som "see also" i eventuell dokumentation kring WCHAR.
agehall
Inlägg: 414
Blev medlem: 12 augusti 2020, 19:27:54

Re: GCC och Unicode... ?

Inlägg av agehall »

WCHAR är datatypen som används i Windows-miljöer, men kodningen är UTF-16. Inget konstigt med det och man kan egentligen lika gärna köra med uint16_t om man vill.
Findecanor
Inlägg: 980
Blev medlem: 2 juli 2010, 23:04:07

Re: GCC och Unicode... ?

Inlägg av Findecanor »

C och C++ har sedan länge haft typen "wchar_t", men den kan vara antingen 16 eller 32 bittar beroende på plattform. Jag tror den är 16 bittar i MS-Windows och i avr-gcc, men 32 bittar under Linux.
Strängliteraler skrivs som L"sträng" och det finns en del funktioner, wcslen() wcsncpy(), wprintf() etc. För enstaka tecken rekommenderas dock typen "wint_t" för att man ska ha bättre koll på när integer-promotion görs.
Headerfilerna för C är stddef.h, wctype.h och wchar.h, men jag har inte full koll på vad som ligger var...

Sedan C11 och C++11 finns typerna "char16_t" och "char32_t" som är UTF-16 (multi-ord) resp. UTF-32 (faktiskt inte multi-ord). Strängliteraler skrivs som u"Sträng i UTF-16"" resp. U"Sträng i UTF-32".
Sen finns prefixet u8 för UTF-8, för de fall där källkoden inte redan är i det.
C-headern med dem är uchar.h", men jag har faktiskt inte hittat några speciella funktioner för att hantera char16_t och char32_t förutom att konvertera till/från "multibyte", som inte nödvändigtvis behöver vara UTF-8 om man inte sätter aktuell Locale till det först.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6878
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: GCC och Unicode... ?

Inlägg av Marta »

Tack för svar. Oj, vilken röra.
Det blev uint för att hantera tecknen internt i programmet när de bearbetas och UTF-8 i övrigt. Fungerar alldeles utmärkt.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6878
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: GCC och Unicode... ?

Inlägg av Marta »

Programmet det gäller är en text editor, i första hand för att editera källkod, men vill inte vara sämre än mousepad, joe och vad det nu finns, där stöd för Unicode ju ingår.

Några kvarstående problem, vad är tecken som ingår i ord och vad är skiljetecken? Om vi bortser från CJK, är det bara de kända krumelurerna i U+0000?? som är skiljetecken värda att ta hänsyn till?

Finns det tabeller för lower-/UPPER-case och case fold som inte besväras av (c) eller GPL? Det enda jag hittat är nog (c) Big Blue. De tabellerna är inte hellre reciproka. Väldigt rörigt.

Det där är hur som helst besvärligt. Om tabellen går upp till 0x2000 så täcker det in alfabetsdelen av BMP med rimlig storlek relativt dagens datorer, hieroglyferna får vara.
Findecanor
Inlägg: 980
Blev medlem: 2 juli 2010, 23:04:07

Re: GCC och Unicode... ?

Inlägg av Findecanor »

Allt som inte är glyfer bör väl rimligtvis räknas som skiljetecken tycker jag. Det finns mängder av matematiska och logiska tecken på flera ställen i Unicode.

Underscore _ bör man nog räkna som bokstav också, beroende på vilket språk som är aktuellt.
T.ex. om det är Markdown vill man kanske tolka annorlunda mot hur man tolkar C.

Unicode har officiella tabeller som jag tycker man borde kunna extrahera data ifrån utan vidare.
https://www.unicode.org/Public/UCD/late ... olding.txt
Du ska ju inte åter-publicera eller ändra i filen: du ska extrahera data från den. Det förindrar väl inte copyright.

Sen vill du kanske tänka på hur du ska göra normalisering. Det finns t.ex. två sätt att skriva "Ä" på: antingen som ett tecken, eller med A följt av en kod för prickarna. Det sistnämnda sättet är vanligt i text från Mac men inte normen i Unix/Linux eller Windows.
Det finns visserligen några språk som används som behöver diakretiska koder i vilket fall som helst.

Jag tycker att rätt sätt att gå vore att välja en policy för hur man hanterar tecken, berätta den för användaren i dokumentationen och sen skriva programmet så att den håller sig till den.
Jag började skriva på en texteditor för ett par år sedan. Jag hade valt att programmet skulle vara "binärsäkert" och därför aldrig omvandla koderna i textfilen och att användas under Linux. Därför fastställdes en kod = ett tecken, och om en kod inte är synlig som sig själv så skulle den visas som ?. När man placerade markören på tecknet så skulle koden visas numeriskt i statusraden (men jag kom inte så långt).
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6878
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: GCC och Unicode... ?

Inlägg av Marta »

Tack för länken, där finns en hel del som är fritt att använda. Den tabellen är större än de jag hittade innan. Storleken måste hållas nere. Även om det kan lagras effektivt så blir det 1/2 MB med 4-bytes tecken. Indexering och att klippa toppen med en & är nog det enda enkla sättet att få till snabb sökning. Vill inte ha några stökiga strukturer. Binärsökning i 1/2MB kan bli uppemot 30 rundor. Det är en stadig bromskloss.

Rimligtvis skall där väl finnas wordset-tabell att hitta på unicode siten.

Det här är ett program som existerar och vuxit till sig under ett bra tag. Det var hyfsat lätt att växla från ISO-8859 till UTF-8 och 32-bit för visning och editering. Har blivit nästan 50 filer *.c på tillsammans drygt 450k. Kompilerat blir det mellan 130 och 210k beroende på valda optimeringar. Använder ingen färdig megaklump.

Texten ligger i UTF-8 som en dubbellänkad lista rad för rad allokerad i enheter som varierar inom 16 bytes. Faller raden utanför byts enheten ut. Gamla Qedit gör samma, men 8 bytes och 1byte/1tkn genomgående. 16 bytes kommer från att i början var det i assembler for DOS och använde segmenten i 8086 som enhet.

Tecken som använder flera positioner är en styggelse. Om "tillbehöret" läggs först och aktuell font har advance=0 på det ser det rätt ut, men radlängden kommer i otakt. Antingen sticker markören iväg, eller så krävs dubbelsteg förbi och radpositionen blir även då fel. Jag håller fast vid 1 32-bit tkn=1 steg. Så blir det också ofrånkomligt när en font tvingas till fast teckenbredd. Blir osnyggt ibland, men så kan allt användas som monospace.

Tycker där är mycket i Unicode som är dåligt genomtänkt. UPPER/lower borde legat på ett bestämt avstånd överallt. Blocktecknen för linjegrafik kunde fått vara hela uppsättningen, 256 tecken för tre linjetyper, så hade allt täckts in. När de har med sådant som emji, varför har de då inte komplett alfabete med vända tecken? Lite rolighetr kunde de kostat på sig. Sedan att gamla ruttna UTF-16 får klippa teckenmängden är egendomligt, men Microsoft är mäktiga...

JPEG blir lite luddigt, fontrenderingen är mycket bättre än bilden visar.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
guckrum
Inlägg: 1665
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: GCC och Unicode... ?

Inlägg av guckrum »

Så grymt coolt! Skall du släppa den fritt? (Själv är man kvar som _användare_ av vi och gnu emacs, och detta bara i teminalmod. Ingen såndär modern pixelgrafik här inte.)
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6878
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: GCC och Unicode... ?

Inlägg av Marta »

Ja, det är tänkt att släppa iväg den när manualen blivit någotsånär acceptabel. Är även lite detaljer i programmet som måste snyggas till. Första versionen blir med fixerad bredd på tecknen, sedan får jag se hur det blir. Variabel font ställer till väldigt mycket röra och är väl mest till oreda när det gäller källkod.
Källkoden stannar här så länge jag håller på med den själv. Vill inte ha någon fork och tävling, en gammal invalid som jag vill ha lugn.
Användarvisningsbild
bit96
Inlägg: 2490
Blev medlem: 3 september 2007, 10:04:29
Ort: Säffle

Re: GCC och Unicode... ?

Inlägg av bit96 »

Vad trevligt.
Qedit var ju editor nr 1 på den tiden och åtskilliga rader kod har man skrivit m.h.a. den.
Samt naturligtvis för redigering av olika text-filer i olika sammanhang.

Just block-copy-funktionen med tre varianter var mycket användbar: tecken, rader, kolumner.

Samt copy av ovanstående textrad med ett enda knapptryck, utan att behöva markera något.
Mycket användbar då det inte är ovanligt att man upprepar nästan samma kod/text på någon eller några rader.

Samt att växla mellan två filer, att kunna gå ut i dos-läge, att ... :)
Jaja, jag tar till Notepad++ ibland, den visar i alla fall vilken rad och kolumn man befinner sig på.

Qedit hade en svaghet dock, den hanterade inte stora textfiler, alltså över flera hundra kByte, vilket var mycket på den tiden.
Fast det gjorde ju ingen annan editor heller, utom en, som jag glömt namnet på.
Och "bortglömt namn" fick man ta till vid enstaka tillfällen när man ville ändra några tecken i jättefilen, i övrigt var den inte så bra.

Jag ser fram emot att kanske få använda din editor någon dag. :tumupp:
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6878
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: GCC och Unicode... ?

Inlägg av Marta »

Var det kanske WordStar Du tänkte på? Den hanterade stora filer på disk.

Mitt lilla program ladder hela filen i minnet, precis som Qedit, men med gigabytes i RAM lär det ändå räcka hyfsat långt... Hantering på disk är jättestäkigt och helt enormt olämpligt för länkade listor.

Här finns det mesta av vad Qedit har, samt en del annat. Skall bli intressant att höra vad omdömet blir.

Är väl tyvärr svårt att försöka få med den i någon distribution av Linux som freeware utan källkod. Debian lär vara tvärstopp, men hur är det med Ubuntu eller Mint?
Skriv svar