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.