Leif Andersson Henriksbergsvägen 104 136 67 Vendelsö 2014-11-11 Teckenhantering i LexSupLaz =========================== I UNICODE har varje tecken ett nummer. Man hämtar ett tecken genom att ange dess nummer. Vanliga västerländska texter använder en byte per tecken. Men en byte går från 0 till 255. Den kan alltså inte adressera mer än 256 olika tecken. 1963 kom ASCII-koden. Man lade det engelska alfabetet i teckenbytens andra nibble (andra fjärdedel). Första nibble användes för styrtecken, siffror och symboler. Genom att lägga hela alfabetet inom en nibble fick man möjlighet att även använda tredje och fjärde nibble för att lagra en bokstav. Teckenbyten kunde alltså ta upp till tre bokstäver. Viktigt i en tid när 64 kB var gränsen för vad processorn kunde adressera. När datorernas minneskapacitet ökade minskade behovet av att hushålla med minnesutrymme och man började använda tredje och fjärde nibble för diverse specialtecken som svenskans å, ä och ö. Vi fick ANSI-koden för användning av hela teckenbyten. Svenskan har 2x3 tecken som inte finns i engelska alfabetet. Det kan man lägga som specialtecken i övre delen av teckenbyten. Några andra specialtecken får också plats där men hela alfabet som kyrilliska och grekiska ryms inte samtidigt. Man utökade då teckenuppsättningen till UNICODE där tecken fick nummer som kunde vara högre än 255. Man lade det kyrilliska alfabetet så att om man drog bort 848 från teckennumret hamnade alfabetet i teckenbytens fjärde nibble. Genom att byta ut tecknen i fjärde nibble mot de kyrilliska tecknen fick man då en teckenbyte med både det engelska och det kyrilliska alfabetet men specialtecken som å, ä och ö ersattes med kyrilliska bokstäver. Detta kallas charset 204. Om man drar bort 720 i stället för 848 lägger man in det grekiska alfabetet i teckenbyten. Detta kallas charset 161. För till exempel kinesiska skrivtecken finns ingen möjlighet att adressera dem med en teckenbyte. Man använder då två bytes som kan adressera 65 536 tecken. Men för att kunna använda styrtecken och engelska bokstäver på samma sätt som tidigare undantar man första bytens första och andra nibble. 1993 började man använda UTF8 (och UTF16). Ett UTF8-kodat tecken består av ett antal 8-bitars block, alltså av ett antal bytes. Den första byten är en binär siffra som börjar med 110. Första byten ligger alltså mellan 192 och 208. Efter dessa tre bits följer två bits som anger hur många följande bytes som ingår i tecknet. Återstående tre bits bildar de mest signifikanta bitsen i det tal som anger tecknets UNICODE-nummer. De följande bytes som ingår i tecknet börjar med 10 följt av sex bits som ingår i tecknets UNICODE-nummer. Lexikonen i LexSup är gjorda med charsets. I vissa lexikon finns en fil som heter teck.tab. Denna är gjord för LexSup och till stor del inaktuell för LexSupLaz men rad 12 anger vilket charset lexikonet är gjort för och rad 14 vilket tangentbord som är anpassat för detta charset. För att kunna använda det ryska och det grekiska lexikonet finns i LexSupLaz en omvandling från charset 204 och charset 161 till UTF8. Man kan alltså använda dessa lexikon och få resultatet i UTF8 i Utfilrutan. När det gäller kinesiska går det inte att använda de gamla lexikonen. Här är det lexikon som följer med LexSupLaz omgjort till UTF8. På sikt kommer nog charsets att försvinna för att helt ersättas av UTF8. Jag har därför börjat lägga om det ryska lexikonet till UTF8 och lagt det i mappen RyskUTF. För att skriva tecken använder man tangentbord eller musskrift. Klicka på "Musskrift" på huvudmenyn så visas teckenbytens första och tredje (röd Sh) eller andra och fjärde (blå Sh) nibble. Man växlar genom att föra muspekaren över Sh-rutan. Vilka tecken som skall ingå i teckenbyten kan man välja med hjälp av en fil som heter "mustecken.tab" som man lägger in i lexikonmappen. Där lägger man också filen "teck.tab". När man lägger in ett lexikon som Lexikon1 får man frågan om man vill anpassa LexSupLaz till lexikonet. Svarar man Ja läser LexSupLaz filen "teck.tab". Där står vilket charset och vilken typ av tangentbord lexikonet är gjort för. Så fortsätter LexSupLaz med att läsa in "mustecken.tab". Om det i "teck.tab" står att tangentbordets nummer är större än 99 visas ett tangentbord för specialtecken. Är tangentbordsnummret under 2000 visas ett enbytesbord, annars visas ett tvåbytesbord och programmet sätts i tvåbytesmod. Förutom att man kan ta fram ett tangentbord genom att välja Lexikon1 kan man ta fram ett tangentbord via Tangentbord på huvudmenyn. Klickar man på Enbytesbord hämtas teckenbyten från "musteck1.tab" i mappen Tillb. Klickar man på Tvåbytesbord hämtas teckenbyten från "musteck2.tab" i mappen Tillb. Tangentbordet för specialtecken är knutet till teckenbytens fjärde nibble. Genom att öppna Musskrift kan man se vilka tecken som ligger där och att de motsvarar de tecken som visas i tangenbordets rutor. När man stänger ett tangentbord som öppnats via "Tangentbord" på huvudmenyn återgår LexSupLaz till det tangentbord som anges i Lexikon1. För övriga tangentbord återgår LexSupLaz till normalt tangentbord. Tills vidare kan man bara ha Utfilrutan direkt knuten till svenskt tangentbord. I LexSup finns två möjligheter att koda om det som skrivs på tangentbordet, FrasMod och FrasMod2. I LexSupLaz ersätts FrasMod av möjligheten att i Tillb lägga ett tangentbord för specialtecken. FrasMod2 finns kvar med möjlighet att med Alt-. aktivera en gul ruta som omkodas via "OrdFras2.tab" i mappen Tillb. Om man till exempel vill ha några speciella kinesiska tecken som inte finns med i "mustecken.tab" kan man lägga dem i "OrdFras2.tab". 2014-11-15: Från 2014-11-15 finns det en möjlighet att omkoda direktskrift i utfilrutan. Tanken är att om man har ryska som modersmål och skriver på grekiska vill man ha ett grekiskt tangentbord men om man vill slå upp i ett ryskt-grekiskt lexikon som lexikon 1 vill man ha kyrilliska bokstäver efter dubbelkomma. Man lägger då en fil som heter KodOmv.tab i Tillb. Om det på andra raden i denna står On sätts LexSupLaz i kodomvandlingsmod när det öppnar. Det man skriver i Utfilrutan omkodas då enligt en omvandlingstabell i KodOmv.tab. Denna möjlighet fungerar inte om man har ett Tvåbytestangentbord. 2014-11-22: I LexSup delas lexikon upp i en fil per uppslagsordets begynnelsebokstav. Det finns en del fördelar med det. Bland annat att man får rimligt långa filer att hantera. Men för främmande alfabet som är UTF-kodade är det inte självklart hur man kan dela upp lexikonen. Jag har nu gjort så att om första byte är större än 196 och mindre än 224 används andra byte för att dela upp lexikonet på 32 filer. Dessa 32 filer får filnamn som börjar på 7, a - z, ä, å, ö, 8, 9. Den nya version av RyskUTF som medföljer har rysv uppdelat på detta sätt.