ENHETLIGT OCH UTBYGGBART SYSTEM FÖR MÅNGSPRÅKIG TEXTBEHANDLING

Kenichi Handa, Mikiko Nishikimi, Satoru Tomura, Naoto Takahashi

Electrotechnical Laboratory
Umezono 1-1-4, Tsukuba, 305 JAPAN

Sammandrag

De viktigaste uppgifterna för mångspråkig textbehandling är (1) ett enhetligt system för många språk och, (2) med reglerings- och utbyggbarhet av systemfaciliteter. Nedan förklaras kort hur Mule (MULtilingual Enhancement to GNU Emacs) löst dessa. Mule är ett bildskärmssystem för textredigering som kan användas med många olika system (UNIX, DOS, Windows och OS/2 på många plattformar). Mule erbjuder en flexibel mångspråkig textbehandlingsmiljö som täcker inte bara enkel textredigering men också läsa/skriva Internet elektronisk post och nyhetsgrupper, bläddra/läsa Web sidor, etc. Allt detta styrs av ett enhetligt system och kan regleras och byggas ut för individuella behov.

1.Inledning

Med datorteknologins enastående framsteg har vi nu tillräcklig dator- kapacitet för hantera inte bara engelska men också många andra språk. Många länder har redan utvecklat egna metoder för hantera nationella språk på datorer. De flesta är baserade på lokala system som inte ger problem så länge som datormiljön är begränsad till landet ifråga. Men nu när Internet knutit hela världen närmare samman har behovet ökat för obehindrad kommunikation mellan olika platser/nationer/språk och vi står inför svårigheten att hantera många språk tillsammans pga att varje lokalt system utvecklats oberoende av alla andra.

För lösa problemet att hantera många språk har vi utvecklat Mule, ett mångspråkigt textredigeringssystem baserat på GNU Emacs. GNU Emacs är ett av de mest välkända och använda redigeringssystemen i UNIX. Emacs mest utmärkande egenskap är Emacs Lisp interpretator, som utför de flesta faciliteterna med Emacs Lisp, som gör det möjligt att bygga ut GNU Emacs genom bara modifiera eller utöka Emacs Lisp program. Emacs kan användas inte bara för textredigering men också för alla slags textbehandling inklusive läsa/skriva Internet elektronisk post och nyhetsgrupper, bläddra/läsa Web sidor, bruksanvisningar, referera till on-line ordböcker, etc. Allt detta görs med Emacs Lisp program som sålunda kan skräddarsys för olika individuella behov.

Mule omfattar alla dessa faciliteter för användning i mångspråkig miljö. Mule användare kan t. ex. skicka/motta post och läsa Web sidor på alla språk som har Mule support.

Vi har utvecklat Mule med följande två huvudpunkter i minnet:

Den svåraste och viktigaste uppgiften i mångspråkig textbehandling är ett enhetligt system som kan hantera många språk utan att förlora bekvämligheten av lokalisering för varje språk. Textbehandling på olika språk skiljer sig i många avseenden: vilken teckenuppsättning som används, hur texten visas på bildskärmen, hur texten matas in från tangentbordet, vilken kodning som används i dokumenten. Mång- språkighet kräver ett enhetligt system som täcker dessa variationer.

Andra viktiga uppgifter är reglerbarhet och utbyggbarhet, dvs. hur man enkelt skräddarsyr eller bygger ut faciliteter. Det är nästan omöjligt att på förhand utforma alla nödvändiga funktioner för alla språk. Antalet språk som har support kan ändras i framtiden. I utvecklings- länder kan även normalstandarden för nationella språk ändras. Varje system utan flexibilitet att modifiera eller bygga ut dess faciliteter blir snart oanvändbart eller alltför krångligt för utöka med nya språk.

Därför, även om vi ser behovet för en ny nödvänding funktion för vissa språk, utökar vi inte omedelbart denna. Vi undersöker först om andra språk också behöver liknande funktion, vilken del av funktionen som bör göras gemensam för alla språk och vilken del av funktionen som bör göras modifierbar. När allt detta klargjorts utformar vi den mest mångsidiga funktionen.

Textbehandling är komplicerat arbete. Det innebär textinmatning, minnesprogramering, återställning och bildskärmsvisning. Mule support för vissa språk innebär följande:

Vi använder här "standard" för både "officiell standard" och "de facto standard". Dessutom måste i textbehandling också tecken, ord och rader strikt följa skrivreglerna för varje språk. Allt dessa faciliteter styrs av ett enhetligt system för hantering av teckenuppsättningar, kodnings- system, inmatningsmetoder och bildskärmsrutiner.

Följande avsnitt är organiserade som följer:

Avsnitt 2
Hur Mule behandlar tecken internt.
Avsnitt 3
Hur Mule växelverkar med omvärlden där många kodningssystem används.
Avsnitt 4
Hur mångspråkig text kan matas in från engelskspråkigt tangentbord.
Avsnitt 5
Hur Mule hanterar skrivregler för olika språk.
Avsnitt 6
Hur Mule visar mångspråkig text på bildskärmen.
Avsnitt 7
Sammanfattning, Mule nu och i framtiden.

2. Intern Representation av Mångspråkig Text

En teckenuppsättning är en teckengrupp som används tillsammans för vissa språktexter (dvs. engelsk text, japansk text). Även om en enda teckenuppsättning är önskedrömmen för alla systemprogramerare existerar denna inte än så länge. ISO 10646 (eller Unicode) är inte användbar i nuläget speciellt för kinesiska tecken pga. dess inkonse-kventa hantering av CJK enhetlighet. Vi beslöt därför hantera många teckenuppsättningar i Mule.

De flesta teckenuppsättningar i Mule motsvarar var för sig teckenupp- sättningar registrerade i ISO (t.ex. ISO 8859-1, JIS X0208). Fastän varje ISO teckenuppsättning identifieras av dess storlek-typ (antalet tecken) och sista tecknet, (en byte kod för särskilja teckenuppsättningar av samma storlek-typ), identifierar Mule varje teckenuppsättning med ett unikt ID-nummer kallat charset-id. För definiera viss teckenupp- sättning i Mule måste ett unikt charset-id tilldelas som motsvarar ISOs teckenuppsättning för informera Mule om flera parametrar för tecken- uppsättningen. Dessa parametrar används för textredigering, visnings- bredd och skrivriktning, etc. Tabell 1 visar exempel på teckenupp- sättningar.

Tabell 1. Exempel på teckenuppsättningar
ISO teckenuppsättning Mule parametrar
namn storlek-typ sista tecken charset-id bytes bredd riktning
ASCII 94 'B' 0 1 1 left-to-right
ISO8859-1 (Latin1) 96 'A' 129 2 1 left-to-right
ISO8859-8 (Hebrew) 96 'H' 136 2 1 right-to-left
TIS620 96 'T' 133 2 1 left-to-right
GB2312 94 X 94 'A' 145 3 1 left-to-right
JISX0208 94 X 94 'B' 146 3 1 left-to-right
CNS11643-1 94 X 94 'G' 149 4 1 left-to-right
CNS11643-3 94 X 94 'I' 246 4 1 left-to-right
I tabellen är byte bytelängd i Mule interna representation, bredd är antalet kolumer på bildskärmen, riktning är skrivriktning: vänster-till-höger eller höger-till-vänster.

Det är också möjligt att definiera en teckenuppsättning som inte är registerad i ISO. I detta fall använder Mule ett sista-tecken reserverat för privat bruk av ISO. Om en teckenuppsättning inte ursprungligen uppfyller de tekniska kraven för ISO 2022, bör denna delas upp i små teckenuppsättningar eller dess teckenkodpunkter ändras för uppfylla de tekniska kraven. Ett typiskt exempel är vietnamesisk teckenuppsättning, som beskrivs mera detaljerat i nästa avsnitt.

Det vanligaste och enklaste sättet att bevara text i datorminnet är att representera varje tecken med ett antal fixerade längdelement (en till fyra byte). För mångspråkig text är emellertid en eller två byte för varje tecken inte tillräckligt för täcka alla tecken i världen. Fyra byte-element är kanske tillräckliga, men slösar minneskapacitet för endast engelsk text. Istället för fixerad längd representation använder vi ett variabelt multi- byte format (kallas multi-byte format härefter) att representera tecken i Mules buffert för effektiv minnesanvändning och utbyggbarhet. (Idén kommer från Stallmans korta anmärkning.)

Med multi-byte format representeras varje tecken av en eller två byte av huvudkoderna för charset-id och följande en eller två byte för tecken- koden. Enda undantaget är ASCII tecken som representeras som dom är och charset-id 0. Tabell 2 visar formell definition av interna teckenrepresentationen i Mule.

Tabell 2. Formell definition av den interna teckenrepresentationen
    CHARACTER := ASCII_CHAR | MULTIBYTE_CHAR
    MULTIBYTE_CHAR := PRIMARY_CHAR_1 | PRIMARY_CHAR_2
                      | SECONDARY_CHAR_1 | SECONDARY_CHAR_2
    PRIMARY_CHAR_1   := LEADING_CODE_PRI C1
    PRIMARY_CHAR_2   := LEADING_CODE_PRI C1 C2
    SECONDARY_CHAR_1 := LEADING_CODE_SEC LEADING_CODE_EXT C1
    SECONDARY_CHAR_2 := LEADING_CODE_SEC LEADING_CODE_EXT C1 C2
    ASCII_CHAR := 0 | 1 | ... | 127
    LEADING_CODE_PRI := 129 | 130 | ... | 153
    LEADING_CODE_SEC := 154 | 155 | 156 | 157
    C1, C2, LEADING_CODE_EXT := 160 | 161 | ... | 255
 

I tabellen skiljer sig PRIMARY_CHAR och SECONDARY_CHAR endast genom minneskrav per tecken. Vid redigering finns ingen skillnad. Charset-id representeras av en enda LEADING_CODE_PRI (i detta fall är charset-id från 129 till 154) eller en sekvens av LEADING_CODE_SEC och LEADING_CODE_EXT (i detta fall är charset-id mer än 160). En byte teckenuppsättning kan innehålla upp till 96 tecken och representeras av en sekvens på två eller tre byte, en dubbel byte teckenuppsättning kan innehålla upp till 9216 (96 x 96) tecken och representeras av en sekvens på tre eller fyra byte. Vi har valt ut oftast använda teckenuppsättningar som definieras PRIMARY. Alla andra teckenuppsättningar som läggs till definieras SECONDARY. Till exempel, i serien kinesiska (taiwanesiska) teckenuppsättningar CNS11643 är de två första PRIMARY medan resten är SECONDARY (Se Tabell 1). Bild 1 visar användning av en byte kodområdet.

Bild 1 Användning av en byte kodområdet
0x00--0x7f character code of ASCII_CHAR
0x80--0x99 LEADING_CODE_PRI
0x9a--0x9f LEADING_CODE_SEC
0xa0--0xff 1st and 2nd charactercodes of MULTIBYTE_CHAR or LEADING_CODE_EXT

3. Kodningssystem

Ett kodningssystem, eller en kodningsmekanism, är ett sätt att koda text. Många olika kodningssystem kan avvändas på datorer. Olika länder använder olika kodningssystem. Mule konverterar därför automatiskt koder från olika representationsformat till dess interna multi-byte format närhelst Mule växelverkar med omvärlden genom läsa/skriva dokument, kommunicera med andra processer eller ta emot/skicka data från/till terminaler.

För göra kodkonvertering reglerbar och utbyggbar har vi undvikit utrusta Mule med en hårdkodad konverteringsrutin. Vi använder istället en generisk kodningssystemmodell med flera parametrer som kan definieras. Turligt nog passar de flesta kodningssystemen som används i världen inom ramen för ISO 2022. Vi kategoriserade därför ett kodningssystem i ISO-2022 typ och icke-ISO-2022 typ. För det förra skapade vi en generisk ISO 2022 interpretator. För det senare skapade vi ett enkelt programmeringsspråk CCL (Code Conversion Language) och CCL interpretatorn.

När användare specificerar ett kodningssystem för vissa processupp-gifter (t ex läsa dokument, skicka post), aktiverar Mule automatiskt ISO 2022 interpretatorn eller den CCL interpretator som specificerats för kodningssystemet.

3.1 ISO-2022 Typ Kodningssystem

Fastän ISO 2022 medger många variationer för koda samma text används faktiskt bara ett fåtal. För specificera kodning är ett litet antal parametrer listade i Tabell 3 tillräckliga. Tll exempel, kinesiska, japanska och koreanska varianter av EUC (Extended UNIX Code) och alla ISO-8859 serier (Avsnittsnummer 1-10) skiljer sig bara genom parametrarnas ursprungliga och reserverade designationer. De andra exemplen är 7-bit ISO-2022 serierna såsom ISO-2022-JP, ISO-2022- JP-2, ISO-2022-KR och ISO-2022-CN, som alla använder 7-bit miljön. Dom skiljer sig bara genom reserverade designationer och låsande skift. De två första använder inte låsande skiftfunktion, medan resten gör det.

Tabell 3 Parametrar i ISO-2022 typ kodningssystem
parameter värde innebörd
ursprungliga designationer charset-id lista Vilken teckenuppsättning som initialt designeras för varje grafiskt register.
reserved designations charset-id lista Vilken teckenuppsättning som designeras för exklusiv kodning för varje grafiskt register.
7-bit miljö rätt / fel Använd endast lägre 7-bit eller full 8-bit kodning.
låsande skift rätt / fel Använd låsande skiftfunktion eller ej.
skift rätt / fel Använd skiftfunktion eller ej.
riktningsangivning rätt / fel använd en ISO-6429 escapesekvens för ange skrivriktning vid kodning

Tabell 4 visar enkelt hur ett typiskt ISO-2022 kodningssystem i Mule definierars. När kodningssystemet definierats kan det specificeras för varje situation där kodkonvertering krävs. Till exempel, efter defini- tionen i tabell 4 kan användare läsa/skriva GB dokument och visa kinesiska tecken på GB terminal, samt skicka/mottaga GB post.

Tabell 4 Definiera kinesiskt EUC (GB) kodningssystem i Mule
    '*euc-china*         ;; Kodningssystemnamn
    2                    ;; Typ, '2' betyder ISO-2022 typ
    ?C                   ;; Mnemotekniskt tecken i kodnings-systemet
    t                    ;; auto-detect end-of-line typ (CR, CRLF, LF)
    (list lc-ascii lc-cn ;; GO är ASCII. GI är kinesisk GB2312 
          nil nil        ;; G2 och G3 används aldrig.
 

3.2 Icke-ISO-2022 Typ Kodningssystem

Typiska exempel av icke-ISO-2022 kodningssystem är ryska KOI-8 och vietnamesiska VISCII. Fastän KOI-8 uppfyller de tekniska kraven för ISO 2022 är teckenkodpunkterna olika ISO 8859-5 (latinska/cyrilliska alfabeten) som är defaultuppsättningen för cyrilliska tecken i Mule.

VISCII använder fulla 8-bit koder för 134 specifika vietnamesiska tecken, som inte uppfyller de tekniska kraven för för ISO 2022. I Mule delas därför den vietmanesiska teckenuppsättningen upp i små och stora bokstäver som var för sig tilldelas en charset-id.

Medan den generiska ISO 2022 interpretatorn inte kan användas för avkoda eller koda dessa teckenuppsättningar har vi försett Mule med CCL konverteringsprogram. CCL är ett enkelt men effektivt pro- grameringsspråk lämpligt för skriva konverteringsalgoritmer, och innebär att Mule teoretiskt kan hantera varje slags kodningssystem med lämpligt CCL program.. Tabell 5 visar CCL programkällan för koda KOI-8.

Tabell 5 CCL program för koda KOI-8 kodningssystemet
(define-ccl-program ccl-write-koi8
 '(1
   ((read r0)
    (loop (if (r0 != 140) (write-read-repeat r0)
            ((read r0) (r0 -= 160)
             (write-read-repeat r0
     [ 32 179  32  32  32  32  32  32  32  32  32  32  32  32  32  32
      225 226 247 231 228 229 246 250 233 234 235 236 237 238 239 240
      242 243 244 245 230 232 227 254 251 253 255 249 248 252 224 241
      193 194 215 199 196 197 214 218 201 202 203 204 205 206 207 208
      210 211 212 213 198 200 195 222 219 221 223 217 216 220 192 209
       32 163  32  32  32  32  32  32  32  32  32  32  32  32  32  32])
             )))))
  "CCL program to write KOI8.")
 

4. Inmatningsmetod

Vi har undersökt existerande inmatningsmetoder för mångspråkiga tecken och delat upp dessa i följande fyra kategorier.

(1) tangentlayout
Den enklaste inmatningmetoden är från tangentbord med normal engelsk layout till andra tecken var för sig. Typiska exempel är grekiska och ryska.
(2) tangentkombination
Inmatningsmetoden skapar sammansatta tecken genom kombinera tangentsekvens. Typiska exempel är européiska språk och vietmanesiska där tecken med ton- och uttalsmärken skapas med alfabetena och vissa symboltangenter. Till exempel, med vietnamesisk inmatningsmetod skapar tangentsekvensen a^' vietnamesiska tecknet {a}. Det finns också många kinesiska inmatningsmetoder av samma typ som kräver mycket övning pga det stora antalet kinesiska tecken.
(3) blandning av (1) och (2)
Inmatningsmetoden utgår från specifika tangentlayouten och skapar sedan sammansatta tecken med tangentkombinering. Typiska exempel är thai och koreanska. Till exempel, med thai inmatningsmetod består tangentlayouten av thaikonsonanter, -vokaler eller -tonmärken. En tangentsekvens med konsonant och följande vokal eller tonmärke skapar ett sammansatt tecken som placerar vokalen och/eller tonmärket över eller under konsonanten.
(4) (3) och externt konverteringsprogram
TMetoden används för mata in kinesiska tecken. Då det finns mer än tiotusen kinesiska tecken är det svårt att komma ihåg alla tangentkombi- nationerna. Mata in fonetiska tecken är dock ganska enkelt. En bekväm metod är att bara mata in fonetiska tecken i (1) och (3) och sedan över-lämna åt datorn uppgiften att skapa kinesiska tecken.

Till exempel, med japansk inmatningsmetod skrivs först en hiragana- sekvens (japanska fonetiska alfabetet), som sedan konverteras av ett konverteringsprogram till lämplig kanji- (kinesiska tecken) och hiragana- sekvens. Det finns flera konverteringsprogram, t ex Wnn, Canna, SJ3 (alla för japanska), och cWnn (för kinesiska), som kan användas i Mule. Dom använder vanligen mycket omfattande ordböcker och grammatik för skapa lämplig teckensekvens.

Mule använder de tre första inmatningsmetoderna med Quail, ett över- sättningsystem med tangentbordinmatning. Quail progamerar över- sättningsregler ("Quail package") var för sig och översätter enligt dessa. Varje översättningsregel består av en tangentsekvens och motsvararande översatt text. Varje regel kan användas för översätta många texter, men bör användas var för sig växelvis.

Quail paket kan lätt skräddarsys för olika ändamål. Nya översättnings- regler kan enkelt skapas eller redan existerande modifieras. Quail paketets modulsystem gör det lätt att lägga till nya regler för ett nytt språk. Det kan enkelt göras genom att skapa och namnge ett nytt paket samt definiera antalet översättningsregler i paketet. Tabell 6 visar hur man skapar ett nytt Quail paket som simulerar "Caps-Lock" (dvs. alla små bokstäver översätts till stora).

Tabell 6 Exempel på hur skapa ett Quail paket "Caps-Lock"
     ;; Definiera först nytt Quail paket.
     (quail-define-package "caps-lock"
                           "Caps-Lock" nil "Simulate Caps-Lock")
     ;; Definiera sedan översättningsreglerna för paketet.
     (quail-defrule "a" "A")
       ...
 

Inmatningsmetoder av senare slaget möjliggörs med Tamagosystemet. Tamago översätter först tangentbordinmatning till fonetiska koder (Hiragana i japanska och PinYin eller ZhuYin i kinesiska) som skickas till externt konverteringsprogram via networks. Quailsystemet kan användas från början. Tamago utvecklades emellertid oberoende av Quail och har i nuläget ett eget system för skapa dess fonetiska koder. Då konverteringar inte kan automatiseras helt bör andra konverteringsmetoder användas var för sig växelvis. Tamago kan i nuläget använda Wnn och cWnn som konverteringsserver.

5. Textbehandling

Textbehandling är mycket mer än teckeninmatning. Mule erbjuder flera verktyg för underlätta textbehandling, t ex teckenkategorier och en effektiv compiler för snabbt söka ofta förekommande ord och uttryck.

Teckengrupper kan lätt programeras för bekväm textredigering med tangentkommandon, t ex för söka visst cyrilliskt tecken men inte specificera alla dessa för kombinera med OR operatörer. För detta ändamål tilldelar GNU Emacs varje tecken en teckensyntaxkod, som dock har vissa begränsningar. Varje tecken kan som mest ha en enda teckensyntax såvida inte en ny definieras.

Mule erbjuder ett ytterligare sätt för kategorisera teckengrupper. Ny teckenkategori kan definieras genom tilldela varje tecken ett valfritt antal teckenkategorier. Tabell 7 visar Mules defaultteckenkategorier. Textredigering innebär ofta ord-för-ord behandling på många språk med olika orddefinitioner. I Mule definieras ord enligt teckenkate-gorier för skräddarsydda redigeringskommandon för speciella ändamål.

Tabell 7 Defaultteckenkategorier
'b' Arabiska tecken
'c' Kinesiska 2-byte tecken
'g' Grekiska tecken
'h' Koreanska 2-byte tecken
'j' Japanska 2-byte tecken
'k' Japanska 1 byte Katakana tecken
'r' Japanska 1 byte Roman tecken
'l' Latinska tecken
'w' Hebreiska tecken
'y' Cyrilliska tecken

6. Skärmsvisning

Mångspråkig textvisning kan göras på två sätt. Med Mule från dator- terminal (eller datorterminal emulator typ `xterm', `kterm', `cxterm', etc.), och köra Mule med ett fönstersystem.

I förra fallet skickar Mule korrekt kodad text till terminalerna som tar över uppgiften att skapa mångspråkig text. Kodkonvertering görs enligt kodningssystem specificerat för terminalutmatning. Till exempel, om `cxterm' används för Mule kan endast engelsk eller kinesisk text visas.

Med windowsystem tar Mule ansvaret för visa mångspråkig text. I Mule tilldelas varje teckenuppsättning en motsvarande font. En samling teckenlayouts från alla teckenuppsättningar och motsvarande fonter kallas fontuppsättning och är basen för visa varje tecken på bildskär-men. Mule använder olika fontuppsättningar för olika sammanhang. Till exempel, för läsa elektronisk post visas ämnesområdet med fet text, och fetfontsuppsättningen används endast för ämnesområdet.

Med X fönster regleras Mules interna teckenkoder vanligtvis med kodningspunkterna i motsvarande font. Till exempel, den japanska teckenuppsättningen JIS X0208 visas korrekt med fonten vars tecken- kodning motsvarar JIS X0208. Men även om viss teckenuppsättning och font inte kan kombineras kan interna kodningspunkter konverteras med CCL för varje font, som förklarades i tidigare avsnitt. Till exempel, Mules cyrilliska teckenuppsättning baserad på ISO 8859-5 med endast K0I-8 fonten tillgänglig. Även i detta fall behöver bara layouten för fontuppsättningen ändras för använda K0I-8 fonten för cyrillisk tecken- uppsättning och tilldela lämpligt CCL program för cyrillisk teckenupp- sättning. (se Tabell 8).

För utöka systemsupport för ett nytt språk är det bara att lägga till en layout mellan den nya teckenuppsättningen för språket och en lämplig font till redan existerande fontuppsättningar.

Tabell 8 Exempel på hur K0I-8 fonten används för cyrilliska tecken
  ;; Ändra fontlayout i fontuppsättningen DEFAULT-FONTSET.
  (set-fontset-font default-fontset lc-crl "HERE_COMES_KOI8_FONT_NAME")
  (define-ccl-program ccl-x-koi8
    '(0
      ((r1 -= 160)
       (r1 = r1
     [ 32 179  32  32  32  32  32  32  32  32  32  32  32  32  32  32
      225 226 247 231 228 229 246 250 233 234 235 236 237 238 239 240
      242 243 244 245 230 232 227 254 251 253 255 249 248 252 224 241
      193 194 215 199 196 197 214 218 201 202 203 204 205 206 207 208
      210 211 212 213 198 200 195 222 219 221 223 217 216 220 192 209
       32 163  32  32  32  32  32  32  32  32  32  32  32  32  32  32])))
    "CCL program to convert chars of lc-crl (ISO8859-5) to KOI8 font.")
  ;; Tilldela CCL programmet cyrilliska teckenuppsättningen LC-CRL.
  (x-set-ccl lc-crl ccl-x-koi8)
  

7. Sammanfattning

Vi har beskrivit Mules mångspråkiga textredigeringssystem med tonvikt på dess reglerbara och utbyggbara egenskaper. För dessa ändamål har Mule utrustats med Emacs Lisp interpretator som gör systemet öppet. Enkla Emacs Lisp program kan skräddarsys för alla individuella behov.

Mule kom ut på marknaden 1993. Sedan dess har folk världen över bidragit många supportfunktioner för de egna språken, och Mule kan nu hantera de flesta européiska språk (inklusive ryska och grekiska) och östasiatiska språk ( kinesiska, japanska, koreanska) samt också thai, vietnamesiska, hebreiska, arabiska, turkiska och andra. Vi arbeter nu intensivt för inkludera alla indiska språk (devanagali skrift).

Utöver supportfunktioner för nya språk finns nu också många Mule applikationer, såsom on-line ordböcker, MIME kodare och avkodare. Alla dessa verktyg bekräftar Mules framtida möjligheter i en mång- språkig arbetsmiljö än mer bara som ett enkelt textredigeringssystem.

Mule integrerars nu i GNU Emacs genom nära samarbete med Free Software Foundation, som distribuerar GNU Emacs. Framtida GNU Emacs på marknaden kommer ha Mules mångspråkiga funktionsfacili- teter.

Appendix: Mule Distribution

Mule distribueras gratis enligt villkoren för GNU GENERAL PUBLIC LICENSE. Mule Version 2.3 kan anskaffas genom anonymous ftp på följande platser och många andra.