Jentera Penyeragaman dan Perluasan bagi Teks Pemprosesan Pelbagai Bahasa.

Kenichi Handa, Mikiko Nishikimi, Satoru Tomura, Naoto Takahashi

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

Ringkasan

Isu yang paling penting bagi sistem pemprosesan teks pelbagai bahasa adalah (1) jentera penyeragaman bagi pelbagai bahasa dan, (2) kebolehan mengubahsuai dan kebolehan meluaskan kemudahan-kemudahan yang disediakan oleh sistem tersebut. Dalam kertas ini, kami menerangkan bagaimana isu ini diselesaikan di dalam sistem yang dipanggil Mule (Peningkatan Pelbagai Bahasa kepada GNU Emacs). Mule ialah teks kosong berorientasi pengedit skrin beroperasi di berbagai sistem (UNIX, DOS, Windows dan OS/2 pada banyak platform). Ianya menyediakan para pengguna satu persekitaran pemprosesan teks pelbagai bahasa yang fleksibel yang mana meliputi tidak hanya penyuntingan teks malah juga membaca/ menulis mel dan berita Internet, menyemak seimbas muka surat Web, dll. Kesemua kemudahan ini dikawal oleh satu jentera penyeragaman dan boleh diubah sepenuhnya serta boleh diperluaskan oleh para pengguna.

1. Pengenalan

Dengan kemajuan yang menarik perhatian di dalam teknologi komputer, kita sekarang mempunyai kuasa komputer yang mencukupi bagi mengendalikan tidak hanya bahasa Inggeris malah juga lain-lain bahasa. Banyak negara telahpun membina cara untuk menggunakan bahasa kebangsaan mereka mengenai komputer. Kebanyakan dari mereka adalah berdasarkan kepada jentera tempatan yang mana tidak menimbulkan masalah selagi persekitaran setiap komputer dihadkan kepada keadaan setempatnya sendiri. Tetapi kerana Internet menghubungi seluruh dunia dengan lebih ketat, keperluan untuk menjadikan komunikasi berjalan lancar di kalangan berbagai locale/ negara/ bahasa menjadi besar, dan kita sekarang menghadapi kesukaran di dalam mengendalikan pelbagai bahasa secara bersama. Ianya adalah kerana setiap sistem locale telah dibina secara bebas, tanpa bimbangkan sistem locale yang lain.

Untuk menyelesaikan masalah yang berkenaan dengan pelbagai bahasa, kami telah membangunkan Mule, sebuah pengedit teks kosong pelbagai bahasa berdasarkan kepada GNU Emacs. GNU Emacs adalah sebuah pengedit yang terkenal dan digunakan dengan meluas di dalam dunia UNIX. Ciri Emacs yang terbesar ialah ia diperlengkapkan dengan penterjemah Emacs Lisp, dan kebanyakan kemudahan adalah dilakukan di dalam Emacs Lisp, yang bererti ianya adalah mungkin untuk meningkatkan GNU Emacs dengan hanya memodifikasi atau menambah program-program Emacs Lisp. Emacs boleh digunakan tidak hanya untuk menyunting satu kerja malah untuk hampir kesemua jenis kerja pemprosesan teks termasuk membaca/ menulis mel dan berita Internet, melihat kamus dalam talian, dll. Kesemua ini adalah disedari oleh program-program Emacs, dan seterusnya, adalah boleh dilanggan sepenuhnya.

Mule mewarisi kesemua kemudahan ini dan boleh menggunakan mereka di dalam persekitaran pelbagai bahasa. Sebagai contoh, pengguna Mule boleh bertukar-tukar mel dan membaca mukasurat Web dalam sebarang bahasa, selagi bahasa tersebut disokong oleh Mule.

Dalam rekabentuk Mule, kami telah menyimpan dua perkara berikut di dalam fikiran:

Isu yang paling sukar tetapi penting bagi pemprosesan teks pelbagai bahasa ialah untuk memberikannya satu jentera penyeragaman bagi mengendalikan banyak bahasa tanpa hilang kemudahan yang disedari melalui penglokalan bagi setiap bahasa. Kerja-kerja pemprosesan teks dalam berbagai bahasa mungkin berbeza dari setiap yang lain di dalam banyak aspek: set huruf yang mana digunakan, bagaimana teks diaturkan pada skrin, bagaimana teks dimasukkan dari papan kekunci, jentera pengkodan apakah digunakan di dalam fail. Sasaran bahasa berganda memerlukan satu jentera penyeragaman yang mana meliputi keragaman ini.

Isu penting yang lain adalah kebolehubahsuaian daan kebolehperluasan, iaitu, bagaimana mudah ianya untuk dilanggan atau untuk membanyakkan kemudahan. Ianya adalah hampir mustahil untuk merekabentuk dan menyediakan kesemua fungsi yang diperlukan bagi semua bahasa yang disokong. Jumlah bahasa sokongan mungkin berubah di masa depan. Di negara-negara membangun, malahan persekitaran piawaian bagi bahasa kebangsaan mungkin bertukar. Sebarang sistem tanpa kefleksibelan memodifikasi atau memperbanyakkan kemudahan-kemudahannya, akan segera menjadi kurang berguna atau begitu sukar untuk menambah bahasa baru.

Selanjutnya, walaupun kita mendapati satu fungsi baru adalah diperlukan bagi sesetengah bahasa, kami tidak menambahnya dengan segera. Pertamanya, kami memeriksa jika terdapat sebarang kemungkinan beberapa bahasa lain juga memerlukan fungsi yang serupa, bahagian manakah fungsi tersebut harus dibuat penyeluruhan bagi semua bahasa dan bahagian manakah fungsi tersebut harus dibiarkan boleh dimodifikasi. Selepas perkara ini diputuskan, kami merekabentuk fungsi yang lebih cekap di berbagai bidang.

Pemprosesan teks adalah satu kerja yang sangat rumit. Sekurang-kurangnya ia mempunyai pemasukkan, penyimpanan, penyimpanan semula dan mempamerkan teks. Bila kita sebut Mule menyokong beberapa bahasa, ia bererti Mule boleh sekurang-kurangnya:

Di sini, kami gunakan perkataan ``piawaian'' bukan sahaja untuk `` piawaian rasmi'' malah juga untuk ``piawaian hakikat''. Seterusnya, sewaktu memproses teks kami harus melayan huruf, perkataan dan baris di dalam menuruti peraturan piawaian penulisan setiap bahasa. Kesemua kemudahan ini dikawal oleh satu jentera penyeragaman bagi mengendali set-set huruf, sistem pengkodan, kaedah input dan mempamerkan rutin.

Seksi berikut adalah dikendalikan sebagai:

Seksyen 2
Bagaimana Mule melayan huruf di dalaman.
Seksyen 3
Bagaimana Mule berinteraksi dengan dunia luaran yang banyak menggunakan jentera pengkodan yang berbeza.
Seksyen 4
Bagaimana seseorang boleh memasukkan input teks pelbagai bahasa dari papan kekunci bahasa Inggeris yang biasa.
Seksyen 5
Bagaimana Mule mengendalikan peraturan menulis bahasa yang berbeza.
Seksyen 6
Bagaimana Mule memaparkan teks pelbagai bahasa pada skrin komputer.
Seksyen 7
Ringkasan, status semasa Mule dan kerja-kerja masa depan.

2. Gambaran Dalaman Teks Pelbagai Bahasa.

Satu set huruf dalam sebuah kumpulan huruf digunakan bersama bagi beberapa kawasan teks ( iaitu, teks Inggeris, Jepun, dll). Walaupun set huruf tunggal bagi semua bahasa adalah suatu mimpi yang indah bagi pembina sebuah sistem, namun tidak terdapat perkara yang sedemikian buat masa ini. ISO 10646 (atau Unikod) adalah tidak berguna buat masa ini terutamanya bagi huruf-huruf Cina kerana pengendalian tidak konsistennya terhadap penyeragaman CJK. Kerana itulah kami memutuskan untuk mengendalikan set-set huruf pelbagai di dalam Mule.

Kebanyakan set huruf Mule mempunyai satu kepada satu persesuaian terhadap set-set huruf yang didaftarkan dalam ISO (iaitu, ISO 8859-1, JIS X0208). Walaupun setiap set huruf ISO adalah dikenalpasti melalui jenis saiznya (mengandungi berapa banyak huruf) dan huruf akhir, (satu kod bait bagi membezakan set-set huruf dari jenis saiz yang sama) Mule mengenalpasti setiap set huruf dengan satu nombor pengenalaan yang unik yang dipanggil charset-id. Seterusnya, untuk mentakrifkan satu set huruf di dalam Mule adalah menyekutukan satu charset-id yang unik kepada persesuaian set huruf ISO dan untuk memaklumkan Mule beberapa parameter set-set huruf tersebut. Parameter ini yang digunakan bagi kerja-kerja menyunting mengandungi keluasan paparan, arah penulisan, dan seterusnya. Jadual 1 menunjukkan contoh set-set huruf.

Jadual 1. Contoh set-set huruf
Set huruf ISO parameter yang digunakan dalam Mule
nama jenis saiz huruf akhir charset-id bait luas arah
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
Dalam jadual, bait adalah kepanjangan bait gambaran dalaman Mule, luas adalah jumlah ruang yang ada pada skrin, arah ialah arahan pemaparan: kiri ke kanan atau kanan ke kiri.

Ianya juga adalah boleh untuk mentakrifkan satu set huruf yang mana tidak didaftarkan dalam ISO. Dalam kes itu, Mule menggunakan satu huruf-akhir yang disimpan bagi kegunaan pribadi oleh ISO. Jika satu set huruf secara asalnya tidak sesuai kepada keperluan teknikal ISO 2022, ia harus disusun semula dengan membahagikan ke dalam set-set huruf yang kecil, atau dengan menukar titik kod huruf dan dibuat untuk memenuhi keperluan teknikal. Contoh yang baik dalam kes ini ialah set huruf Vietnam, butir terperinci mengenainya ada diterangkan di seksyen selanjutnya.

Cara yang paling biasa dan mudah bagi memegang teks di dalam memori komputer ialah untuk menggambarkan setiap huruf dengan satu aturan elemen- elemen berkepanjangan tetap (satu hingga empat bait). Menimbangkan teks pelbagai bahasa, walau bagaimana pun, menggunakan satu atau dua bait bagi setiap huruf kelihatannya adalah tidak mencukupi bagi mencakupi huruf-huruf dari seluruh bahagian dunia. Menggunakan elemen empat bait akan mencukupi tetapi satu pembaziran memori bagi hanya teks bahasa Inggeris. Seterusnya, di sebalik menggunakan gambaran berkepanjangan tetap, kami mengambil susunan berbilang bait yang kepanjangannya boleh diubah-ubah (susunan berbagai bait sebagai kependekannya selepas ini) bagi menggambarkan huruf- huruf di dalam buffer Mule bagi kecekapan penggunaan memori dan untuk perluasannya. (Idea ini ditimbulkan untuk nota ringkasan Stallman).

Dengan susunan berbilang bait, setiap huruf diwakili oleh satu atau dua bait kod-kod pendahulu bagi charset-id dan satu atau dua bait berikutnya untuk kod huruf tersebut. Pengecualian yang ada hanyalah huruf-huruf ASCII, mereka mewakili seperti yang ia ada, dan charset-id adalah 0. Jadual 2 menunjukkan lebih definisi rasmi gambaran huruf dalaman Mule.

Jadual 2. Definisi rasmi gambaran huruf dalaman.
    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
 

Dalam jadual tersebut, PRIMARY_CHAR dan SECONDARY_CHAR berbeza hanya dalam satu memori per huruf yang diperlukan dan di dalam kerja penyuntingan tidak terdapat perbezaan di antara mereka. Charset-id adalah diwakili oleh LEADING_CODE_PRI tunggal (dalam kes ini, charset-id adalah dari 129 hingga 154) atau satu turutan dari LEADING_CODE_SEC dan LEADING_CODE_EXIT (dalam kes ini, charset-id adalah lebih dari 160). Satu set tunggal bait huruf boleh mengandungi paling banyak 96 huruf dan ia diwakili oleh dua atau tiga turutan bait, satu set dua kali ganda bait huruf boleh mengandungi paling banyak 9216 (96 x 96) huruf dan ia diwakili oleh tiga atau empat turutan bait. Kami telah memilih set-set huruf yang kerap digunakan dan mentakrifkannya sebagai PRIMARY. Semua set huruf yang ditambah oleh pengguna adalah ditakrifkan sebagai SECONDARY. Sebagai contoh, dalam siri-siri set huruf Cina (Taiwan) CNS11643, dua yang pertama kosong adalah PRIMARY tetapi kosong yang masih tinggal adalah SECONDARY (Lihat Jadual 1.) Rajah 1 menunjukkan penggunaan kawasan kod satu bait.

Rajah 1 Penggunaan kawasan kod satu bait
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. Sistem Pengkodan

Satu sistem pengkodan, atau satu jentera pengkodan adalah satu cara bagaimana untuk mengkod sebuah teks. Kami menggunakan banyak sistem pengkodan yang berbeza pada komputer. Negara yang berbeza menggunakan sistem pengkodan yang berbeza. Selanjutnya Mule melakukan penukaran kod secara automatik dari gambaran teks yang berbagai-bagai format kepada susunan dalaman berbilang bait, apabila Mule berinteraksi dengan dunia luar melalui membaca/ menulis fail, berkomunikasi dengan lain-lain proses, berkomunikasi melalui rangkaian, menerima data dari sebuah terminal, atau output data kepada sebuah terminal.

Untuk menjadikan sebuah proses penukaran kod boleh diubah dan diluaskan, kami mengelak dari memperlengkapkan Mule dengan satu rutin penukaran berkod keras. Di sebaliknya, kami membuat sebuah model pengkodan sistem umum dengan beberapa parameter untuk dimasukkan di dalamnya. Sesuatu yang menguntungkan, kerana kebanyakan sistem pengkodan yang digunakan di dunia sekarang ini adalah sesuai dengan rangkakerja ISO 2022. Oleh kerana itu, kami membahagikan satu sistem pengkodan ke jenis ISO-2022 dan jenis bukan ISO 2022. Untuk jenis sebelumnya, kami mencipta penterjemah umum ISO 2022. Untuk jenis yang terbaru, kami merekabentuk satu bahasa pengaturcaraan mudah CCL (Code Conversion Language) dan membina penterjemah CCL.

Apabila pengguna menjelaskan beberapa sistem pengkodan bagi beberapa pemprosesan (iaitu, membaca sebuah fail, atau menghantar mel), Mule secara automatik akan memanggil penterjemah ISO 2022 atau penterjemah CCL mengikut kepada sistem pengkodan yang dinyatakan.

3.1 Sistem Pengkodan Jenis ISO-2022

Walaupun ISO 2022 membenarkan banyak variasi bagi mengkod teks yang sama, hanya beberapa darinya yang benar-benar diguna. Seterusnya demi untuk menjelaskan pengkodan tersebut, jumlah kecil parameter yang disenaraikan di Jadual 3 adalah mencukupi. Sebagai contoh, varian EUC (Extended UNIX Code) Cina, Jepun dan Korea dan kesemua siri-siri ISO-8859 (Bahagian nombor 1 hingga 10) berbeza hanya dalam perlantikan permulaan parameter dan perlantikan simpanan. Contoh lain ialah siri-siri ISO-2022 7-bit seperti ISO-2022-JP, ISO-2022-JP-2, ISO-2022-KR dan ISO-2022-CN. Kesemuanya ini menggunakan persekitaran 7 bit. Mereka hanya berbeza dalam perlantikan simpanan dan peralihan penguncian. Dua yang pertama tidak menggunakan fungsi peralihan penguncian sementara yang lain menggunakannya.

Jadual 3 Parameter Sistem Pengkodan Jenis ISO-2022
Parameter nilai maksud
Perlantikan permulaan senarai charset-id Untuk setiap daftar grafik,di mana set huruf adalah dibentuk secara permulaan.
Perlantikan simpanan senarai charset-id Untuk setiap daftar grafik, di mana set huruf adalah dibentuk untuk pengkodan secara khususnya.
Persekitaran 7-bit benar/ palsu Guna hanya 7-bit ke bawah atau guna 8-bit penuh pada pengkodan.
Peralihan penguncian benar/ palsu Guna fungsi peralihan penguncian atau tidak.
Peralihan tunggal benar/ palsu Guna fungsi peralihan tunggal atau tidak.
Penunjuk arah benar/ palsu guna satu turutan lepasan ISO-6429 bagi menyatakan arah penulisan pada pengkodan.

Jadual 4 menunjukkan betapa mudahnya kami boleh mentakrifkan satu sistem pengkodan jenis ISO-2022 dalam Mule. Selepas mentakrifkan satu sistem pengkodan, ianya boleh dijelaskan bagi sebarang keadaan di mana kod penukaran adalah diperlukan. Sebagai contoh, selepas pentakrifan Jadual 4, para pengguna boleh membaca/ menulis fail GB dan memaparkan huruf-huruf Cina pada terminal GB dan bertukar-tukar mel di dalam GB.

Jadual 4 Mentakrifkan sistem pengkodan Cina EUC ( dipanggil GB) di dalam Mule.
    `*euc-china*         ;; Nama sistem pengkodan
    2                    ;; Taip, `2' bererti jenis ISO-2022
    ?C                   ;; Sistem pengkodan huruf Mnemonik 
    t                    ;; jenis pengesan-auto di hujung baris (CR, CRLF, LF)
    (list lc-ascii lc-cn ;; G0 adalah untuk ASCII, G1 adalah untuk bahasa Cina
                         ;; GB2312.
          nil nil        ;; G2 dan G3 tidak pernah digunakan.
 

3.2 Sistem Pengkodan Jenis Bukan ISO-2022

Contoh sistem pengkodan bukan ISO-2022 adalah bahasa Rusia KOI-8 dan bahasa Vietnam VISCII. Walaupun KOI-8 sesuai dengan keperluan ISO 2022, titik-titik kod huruf adalah berbeza dari ISO 8859-5 ( abjad Latin/ Cyrillic) di mana adalah set huruf lalai bagi huruf-huruf Cyrillic di dalam Mule. VISCII menggunakan kod penuh 8-bit bagi 134 huruf-huruf spesifik Vietnam, yang mana tidak bersesuaian kepada keperluan teknikal ISO 2022. Selanjutnya, dalam Mule, set huruf Vietnam di bahagikan kepada dua, huruf-huruf bahagian bawah dan huruf-huruf bahagian atas, dan setiap darinya menugaskan charset-id.

Kerana penterjemah umum ISO 2022 tidak boleh digunakan bagi penyahkodan dan pengkodan set-set huruf ini, kami memperlengkapkan Mule dengan program CCL untuk membuat penukaran. CCL adalah mudah tetapi pengaturcaraan bahasa yang berkuasa bagi kod penulisan penukaran algoritma, yang bermakna secara teorinya Mule boleh mengendalikan sebarang sistem pengkodan dengan satu program CCL yang berpadanan. Jadual 5 menunjukkan sumber program CCL bagi mengkod KOI-8.

Jadual 5 Program CCL bagi mengkod sistem pengkodan KOI-8
(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. Kaedah Input

Kami telah memeriksa kaedah input yang ada bagi huruf-huruf pelbagai bahasa dan mengkategorikan mereka kepada 4 jenis berikut.

(1) Kekunci pemetaan
Kaedah input termudah yang memetakan kekunci biasa papan kekunci bahasa Inggeris kepada beberapa huruf lain satu demi satu. Contoh terbaik ialah bahasa Greek dan Rusia.

(2) Kekunci kombinasi
Kaedah input yang menimbulkan satu huruf komposit dengan mengabungkan turutan kekunci. Contoh terbaik ialah bahasa-bahasa Eropah dan Vietnam di mana satu huruf dengan satu tanda yang digunakan untuk memperbezakan bunyi-bunyi yang berlainan bagi sesuatu huruf dan satu tanda nada adalah ditimbulkan dari sebuah abjad dan beberapa kekunci simbol. Sebagai contoh, dalam kaedah input bahasa Vietnam, satu turutan kekunci a^' menimbulkan huruf Vietnam {a}. Terdapat juga beberapa kaedah input bahasa Cina jenis ini, tetapi ianya memerlukan banyak latihan kerana jumlah huruf bahasa Cina yang banyak.

(3) campuran (1) dan (2)
Satu kaedah input pada kekunci pemetaan pertama yang kemudian menimbulkan huruf komposit dengan mengabungkan kekunci yang dipetakan. Contoh terbaik iaalah bahasa Thai dan Korea. Sebagai contoh, dalam kaedah input Thai, semua kekunci atas dipetaakan untuk konsonan Thai, huruf vokal, atau tanda nada, dan satu turutan kekunci satu huruf konsonan dan huruf vokal berikutnya atau tanda nada yang menimbulkan satu huruf komposit yang meletakkan huruf vokal dan/ atau tanda nada di atas atau di bawah konsonan tersebut.

(4) (3) dan satu program penukaran luaran
Kaedah jenis ini digunakan untuk memasukkan huruf-huruf Cina. Oleh kerana terdapat lebih dari sepuluh ribu huruf Cina, ianya agak sukar untuk mengingati kesemua gabungan kekunci. Walau bagaimanapun, hanya memasukkan huruf-huruf fonetik adalah lebih mudah. Maka, kami boleh mencipta satu kaedah input yang memudahkan dengan membiarkan para pengguna hanya memasukkan huruf-huruf fonetik ke dalam (1) atau (3), dan membiarkan tugas mengujudkan huruf-huruf Cina yang masih tinggal pada komputer.

Sebagai contoh, dalam kaedah input bahasa Jepun, turutan Hiragana (abjad fonetik bahasa Jepun) adalah pada jenis pertama, kemudian turutan tersebut ditukarkan oleh beberapa program penukaran ke dalam satu campuran berpadanan turutan Kanji (huruf Cina) dan Hiragana. Terdapat beberapa program penukaran, seperti Wnn, Canna, SJ3 ( kesemua ini adalah untuk bahasa Jepun) dan cWnn (untuk bahasa Cina) yang mana boleh digunakan dari Mule. Mereka biasanya menggunakan kamus besar dan pengetahuan yang berlainan mengenai nahu setiap bahasa untuk menimbulkan turutan huruf yang berpadanan.

Dalam Mule, kaedah input tiga jenis yang pertama adalah disedari sebagai satu papan kekunci input sistem penterjemahan yang bernama Quail. Quail diberikan satu set peraturan penterjemahan (dipanggil `pakej Quail) pada masa dan input menterjemah pengguna disesuaikan. Setiap peraturan penterjemahan mengandungi satu kekunci turutan dan teks terjemahan yang berpadanan. Satu peraturan boleh mempunyai calon-calon terjemahan teks yang berganda, dalam kes mana, para pengguna disegerakan memilih satu secara saling bertindak.

Ianya adalah agak mudah untuk membiasakan satu pakej Quail. Para pengguna hanya perlu menambah peraturan baru terjemahan atau memodifikasi peraturan terjemahan yang sedia ada. Kerana perubahan pada nada pakej Quail, menambah peraturan baru untuk satu bahasa baru adalah juga mudah. Ianya boleh dilakukan dengan hanya membuat satu pakej baru dengan satu nama yang berpadanan dan mentakrifkan sebarang jumlah peraturan terjemahan di bawah pakej tersebut. Jadual 6 menunjukkan bagaimana untuk membuat satu pakej baru Quail dengan merangsangkan Caps-lock (iaitu, semua huruf-huruf bahagian bawah diterjemahkan kepada huruf-huruf bahagian atas).

Jadual 6 Contoh membuat pakej Quail `` Caps-Lock ''
    ;;  Pertamanya, takrifkan pakej baru Quail.
     (quail-define-package "caps-lock"
                           "Caps-Lock" nil "Simulate Caps-Lock")
    ;;  Kemudian, takrifkan perturan terjemahan pakej tersebut.
     (quail-defrule "a" "A")
       ...
 

Kaedah input jenis terakhir adalah disedari sebagai satu sistem bernama Tamago. Ia pertamanya menterjemah input papan kekunci ke dalam beberapa kod-kod fonetik (Hiragana dalam bahasa Jepun dan PinYin atau ZhuYin dalam bahasa Cina) dan menghantar mereka kepada satu program penukaran dalaman melalui rangkaian. Ianya adalah mungkin untuk menggunakan sistem Quail pada peringkat pertama. Walau bagaimanapun, Tamago dibangunkan secara bebas dari Quail dan mempunyai nama sistemnya sendiri untuk menimbulkan kod-kod fonetik buat masa ini. Kerana penukaran tidak automatik sepenuhnya, pengguna boleh memilih beberapa penukaran lain secara saling bertindak. Buat masa ini, Tamago boleh menggunakan Wnn dan cWnn sebagai server penukaran.

5. Pemprosesan teks.

Pemprosesan teks adalah lebih banyak dari memasukkan huruf. Demi untuk memudahkan pemprosesan teks, Mule menyediakan berbagai-bagai alat. Contohnya ialah kategori huruf dan satu pengkompil gambaran biasa yang berkuasa yang mana berupaya mencari gambaran biasa yang cepat.

Sewaktu menyunting teks, ianya adalah menyenangkan bagi mengumpulkan beberapa huruf dan menggunakan kumpulan itu di dalam menyunting arahan. Sebagai contoh, seorang pengguna mungkin mahu untuk mencari apa saja sebarang huruf Cyrillic, tetapi tidak mahu menyatakan semua huruf Cyrillic dan mengabungkan mereka dengan operator OR. Untuk maksud ini, Emacs GNU asal menugaskan kod sintaks huruf kepada setiap huruf. Walau bagaimanapun, huruf sintaks mempunyai beberapa had. Setiap huruf boleh mempunyai paling banyak satu huruf sintaks dan para pengguna mungkin tidak boleh mentakrifkan sintaks baru.

Mule menawarkan satu cara tambahan untuk mengumpulkan huruf yang dipanggil kategori huruf. Para pengguna boleh mentakrifkan kategori huruf baru dan menugaskan kepada satu huruf sebanyak mana kategori huruf yang mereka kehendaki. Jadual 7 menunjukkan kategori huruf lalai Mule. Kerja penyuntingan selalu melibatkan pemprosesan perkataan demi perkataan, tetapi bahasa yang berbeza mungkin mempunyai definisi perkataan yang berbeza. Dengan Mule, pengguna boleh mentakrifkan satu perkataan berdasarkan kategori huruf ini, yang mana menyedari arahan penyuntingan kelaziman.

Jadual 7 Kategori huruf lalai
'b' Huruf-huruf Arab
'c' Huruf-huruf Cina 2 bait
'g' Huruf-huruf Greek
'h' Huruf-huruf 2 bait Korea
'j' Huruf-huruf 2 bait Jepun
'k' Huruf-huruf 1 bait Katakana Jepun
'r' Huruf-huruf 1 bait Roman Jepun
'l' Huruf-huruf Latin
'w' Huruf-huruf Hebrew
'y' Huruf-huruf Cyrillic
Huruf-huruf Taiwan

6. Pemaparan

Untuk memaparkan teks pelbagai bahasa, kita harus menimbangkan 2 kes: menjalankan Mule dari beberapa terminal ( atau terminal lawan seperti `xterm', `kterm', `cxterm', dll) dan menjalankan Mule di bawah satu sistem tetingkap.

Dalam kes terdahulu, Mule hanya menghantar teks pengkodan yang betul kepada terminal dan membiarkan tugas memaparkan teks pelbagai bahasa kepada mereka. Kod penukaran dilakukan dengan persesuaian kepada satu sistem pengkodan yang jelas untuk output terminal. Sebagai contoh, jika seorang pengguna menjalankan Mule daari `cxterm`, tidak terdapat cara untuk memaparkan sebarang teks lain selain bahasa Inggeris dan Cina.

Bila Mule dilaksanakan di bawah satu sistem tetingkap, Mule memikul tanggungjawab memaparkan teks pelbagai bahasa. Dalam Mule, setiap set huruf menugaskan persesuaian fon. Satu koleksi pemetaan dari kesemua set-set huruf kepada persesuaian fon di namakan set fon dan adalah asas bagi memaparkan setiap huruf. Mule mungkin menggunakan set fon berbeza di dalam konteks yang berbeza. Sebagai contoh, sewaktu membaca satu mel, bidang subjek dipaparkan dalam permukaan tebal, dalam kes di mana, koleksi fon-fon tebal set fon adalah digunakan hanya untuk bidang subjek tersebut.

Pada tetingkap X, kod huruf dalaman Mule biasanya padan dengan titik kod fon yang sepadan. Sebagai contoh, set huruf Jepun JISX0208 boleh dipaparkan secara betul dengan fon di mana titik kod huruf mengikut JISX0208. Tetapi, walaupun persesuaian ini tidak lekat untuk kombinasi tertentu set huruf dan fon, kita boleh menukar titik kod dalaman kepada fon itu dengan program CCL yang diterangkan di dalam seksyen sebelum ini. Sebagai contoh, set huruf Mule untuk huruf Cyrillic adalah berdasarkan kepada ISO 8859-5, sedangkan seorang pengguna mungkin hanya mempunyai satu fon KOI-8. Walaupun dalam kes demikian, apa yang ia harus lakukan ialah untuk menukar satu pemetaan sebuah set fon supaya fon KOI-8 digunakan untuk set huruf Cyrillic, dan menyesuaikan satu program CCL yang berpadanan kepada set huruf Cyrillic (lihat Jadual 8).

Apabila seseorang pengguna menambah sokongan bagi satu bahasa baru, ia boleh menambah dengan sebegitu sahaja satu pemetaan di antara set huruf baru bagi bahasa tersebut dengan satu fon yang berpadanan kepada set fon yang sedia ada.

Jadual 8 Contoh menggunakan fon KOI-8 untuk huruf-huruf Cyrillic.
  ;; Tukar pemetaan fon dalam set fon DEFAULT-FONSET.
  (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.")
  ;; Sesuaikan program CCL kepada set huruf Cyrillic LC-CRL.
  

7. Kesimpulan

Kami telah menerangkan teks penyunting Mule, menekankan kebolehubahsuaian dan kebolehperluasannya. Mule dilengkapi dengan penterjemah Lisp Emacs yang membuatkan sistem tersebut terbuka. Program Lisp Emacs yang mudah boleh membuat semua pembiasaan.

Mule telah dikeluarkan dalam tahun 1993. Sejak itu, orang ramai di dalam dunia telah menyumbangkan banyak sokongan untuk bahasa-bahasa mereka sendiri. Sekarang ia boleh mengendalikan kebanyakan bahasa Eropah (termasuk Rusia dan Greek) dan Asia Timur ( Cina, Jepun, Korea) sebagai tambahan kepada Thailand, Vietnam, Hebrew, Arab, Turki dan lain-lain. Kami sekarang sedang berkerja keras untuk memberi sokongan kepada bahasa India (skrip Devanagali).

Di sebalik sokongan bahasa baru, terdapat juga banyak sumbangan aplikasi- aplikasi yang dijalankan pada Mule, seperti alat melihat kamus dalam talian, pengkodan dan penyahkodan MIME. Kewujudan alat ini membuktikan Mule boleh menjadi satu persekitaran/ lipatan kerja pelbagai bahasa, berbanding semata-mata hanya sebuah penyuntingan.

Sekarang kami menyatukan Mule ke dalam Emacs GNU yang asal dengan kerjasama dari Free Software Foundation, organisasi yang menyumbangkan Emacs GNU. Keluaran masa depan GNU Emacs akan mengandungi kemudahan-kemudahan pelbagai bahasa Mule.

Tambahan: Pengedaran Mule

Mule diedarkan percuma di bawah terma GNU GENERAL PUBLIC LICENCE. Mule versi 2.3 boleh di dapati memalui ftp tanpa nama dari tapak- tapak yang berikutnya dan banyak tapak-tapak pencerminan lain.