← man/dev_and_programming
enc2xs — man enc2xs — 80×24
ugur@toprak:~/man/dev_and_programming$man enc2xs
Bölüm 1 Geliştirme & Programlama

enc2xs

enc2xs -- Perl Encode Modülü Oluşturucu

Sözdizimi

 	 enc2xs -[options]
 	 enc2xs -M ModName mapfiles...
 	 enc2xs -C

Açıklama

enc2xs, Unicode Karakter Eşleme dosyalarından (.ucm) veya Tcl Kodlama Dosyalarından (.enc) Encode modülü tarafından kullanılmak üzere bir Perl eklentisi (extension) derler. Encode modülünün derleme işlemi sırasında dahili olarak kullanılmasının yanı sıra, perl'e kendi kodlamanızı eklemek için de enc2xs kullanabilirsiniz. XS hakkında bilgi sahibi olmanız gerekmez.

Hızlı Kılavuz

Perl hakkında olabildiğince az şey bilmek istiyorsanız ancak yeni bir kodlama eklemeniz gerekiyorsa, sadece bu bölümü okuyun ve gerisini unutun.

  1. Bir .ucm dosyası hazırlayın. Bunu bir yerlerden edinebilir, sıfırdan kendiniz yazabilir veya Encode dağıtımından bir tane alıp kendinize göre özelleştirebilirsiniz. UCM biçimi için bir sonraki bölüme bakın. Aşağıdaki örnekte, my.ucm dosyasında tanımlanan teorik kodlamamı myascii olarak adlandıracağım. "$" karakteri kabuk istemidir.
$ ls -F
my.ucm
  1. Aşağıdaki gibi bir komut çalıştırın:
$ enc2xs -M My my.ucm
generating Makefile.PL
generating My.pm
generating README
generating Changes

Şimdi geçerli dizininize bir göz atın. Şu şekilde görünmelidir:

$ ls -F
Makefile.PL   My.pm	 my.ucm        t/

Aşağıdaki dosyalar oluşturulmuştur:

  • Makefile.PL - MakeMaker betiği
  • My.pm - Encode alt modülü
  • t/My.t - test dosyası

1.1. Eğer *.ucm dosyalarının modüllerle birlikte kurulmasını istiyorsanız, aşağıdaki adımları uygulayın:

$ mkdir Encode
$ mv *.ucm Encode
$ enc2xs -M My Encode/*ucm
  1. Oluşturulan dosyaları düzenleyin. Zamanınız VE bunu başkasına verme niyetiniz yoksa düzenlemek zorunda değilsiniz. Ancak pod'u düzenlemek ve daha fazla test eklemek iyi bir fikirdir.

  2. Şimdi tüm Perl severlerin bayıldığı o komutu çalıştırın:

$ perl Makefile.PL
Writing Makefile for Encode::My
  1. Şimdi tek yapmanız gereken make komutunu çalıştırmaktır.
$ make
cp My.pm blib/lib/Encode/My.pm
/usr/local/bin/perl /usr/local/bin/enc2xs -Q -O \
-o encode_t.c -f encode_t.fnm
Reading myascii (myascii)
Writing compiled form
128 bytes in string tables
384 bytes (75%) saved spotting duplicates
1 bytes (0.775%) saved using substrings
....
chmod 644 blib/arch/auto/Encode/My/My.bs
$

Bu işlemin süresi makinenizin hızına ve kodlamanızın ne kadar büyük olduğuna bağlı olarak değişir. euc-tw gibi büyük bir şey üzerinde çalışmıyorsanız çok uzun sürmeyecektir.

  1. Zaten "make install" yapabilirsiniz ancak önce test etmelisiniz.
$ make test
PERL_DL_NONLAZY=1 /usr/local/bin/perl -Iblib/arch -Iblib/lib \
-e 'use Test::Harness; qw(&runtests $verbose); \
$verbose=0; runtests @ARGV;' t/*.t
t/My....ok
All tests successful.
Files=1, Tests=2,	0 wallclock secs
( 0.09 cusr + 0.01 csys = 0.09 CPU)
  1. Test sonucundan memnunsanız, sadece "make install" komutunu çalıştırın.

  2. Kodlamanızı Encode'un talep üzerine yükleme listesine eklemek istiyorsanız (böylece "use Encode::YourEncoding" yazmak zorunda kalmazsınız), yerel ayarları kontrol eden bir modül olan Encode::ConfigLocal modülünü güncellemek için şu komutu çalıştırın:

enc2xs -C

Bundan sonra, kodlamalarınızı talep üzerine yüklemek için "use Encode;" yazmanız yeterli olacaktır.

Unicode Karakter Haritası

Encode, kaynak karakter eşlemeleri için Unicode Karakter Haritası (UCM) biçimini kullanır. Bu biçim IBM'in ICU paketi tarafından kullanılır ve Nick Ing-Simmons tarafından Encode modülü ile kullanılmak üzere uyarlanmıştır. UCM, Tcl'in Kodlama Haritası'ndan (Encoding Map) daha esnek ve çok daha kullanıcı dostu olduğundan, artık Encode için önerilen biçim budur.

Bir UCM dosyası şu şekilde görünür:

#
# Comments
#
<code_set_name> "US-ascii" # Gerekli
<code_set_alias> "ascii"   # İsteğe bağlı
<mb_cur_min> 1 	    # Gerekli; genellikle 1
<mb_cur_max> 1 	    # Maks. karakter başına bayt sayısı
<subchar> \x3F 	    # Yedek karakter (Substitution char)
#
CHARMAP
<U0000> \x00 |0 # <control>
<U0001> \x01 |0 # <control>
<U0002> \x02 |0 # <control>
....
<U007C> \x7C |0 # VERTICAL LINE
<U007D> \x7D |0 # RIGHT CURLY BRACKET
<U007E> \x7E |0 # TILDE
<U007F> \x7F |0 # <control>
END CHARMAP

• "#" işaretini takip eden her şey yorum satırı olarak kabul edilir.

• Üst bilgi (header) bölümü, CHARMAP kelimesini içeren satıra kadar devam eder. Bu bölüm <keyword> value biçimindedir, satır başına bir çift düşer. Değer olarak kullanılan karakter dizileri tırnak içine alınmalıdır. Yalın kelimeler (barewords) sayı olarak işlenir. \xXX bir baytı temsil eder.

Keywords (anahtar kelimeler) çoğunlukla kendi kendini açıklar niteliktedir. subchar, alt karakter (subcharacter) değil, yedek karakter (substitution character) anlamına gelir. Bir Unicode dizisini bu kodlamaya çözerken (decode) eşleşen bir karakter bulunamadığında, burada tanımlanan bayt dizisi kullanılacaktır. Çoğu durumda buradaki değer \x3F'dir; bu ASCII'de bir soru işaretidir.

• CHARMAP, karakter haritası bölümünü başlatır. Her satır aşağıdaki biçimdedir:

<UXXXX> \xXX.. |0 # comment
^     ^	    ^
|     |	    +- Geri dönüş (Fallback) bayrağı
|     +-------- Kodlanmış bayt dizisi
+-------------- Onaltılık (hex) tabanda Unicode Karakter Kimliği

Biçim, geri dönüş bayrağı hariç, kabaca üst bilgi bölümü ile aynıdır: | işaretini takip eden 0..3 değerleri kullanılır. Olası değerlerin anlamları şu şekildedir:

|0 Çift yönlü (Round trip) güvenli. Unicode'a çözülen (decode) bir karakter, aynı bayt dizisine geri kodlanır (encode). Çoğu karakter bu bayrağa sahiptir.

|1 Unicode -> kodlama yönünde geri dönüş (fallback). Bu bayrak görüldüğünde enc2xs, bu karakteri yalnızca kodlama haritasına (encode map) ekler.

|2 Kod noktası olmaması durumunda sub-char (yedek karakter) eşlemeyi atlar.

|3 Kodlama -> unicode yönünde geri dönüş (fallback). Bu bayrak görüldüğünde enc2xs, bu karakteri yalnızca kod çözme haritasına (decode map) ekler.

• Ve son olarak, END CHARMAP bölümü sonlandırır.

Manuel olarak bir UCM dosyası oluştururken, sıfırdan kendi dosyanızı yazmak yerine ascii.ucm dosyasını veya kendi kodlamanıza yakın mevcut bir kodlama dosyasını kopyalamanız önerilir.

Bunu yaparken, ortamınız EBCDIC olmadığı sürece en azından U0000 ila U0020 arasını olduğu gibi bıraktığınızdan emin olun.

UYARI: UCM'deki tüm özellikler uygulanmamıştır. Örneğin, icu:state kullanılmaz. Bu nedenle, algoritmik kodlamaları (özellikle ISO-2022 serisi) desteklemek istiyorsanız bir perl modülü yazmanız gerekir. Bu tür modüller arasında Encode::JP::2022_JP, Encode::KR::2022_KR ve Encode::TW::HZ yer alır.

Yinelenen eşlemelerle başa çıkma

Bir harita oluşturduğunuzda, eşlemelerinizin çift yönlü (round-trip) güvenli olmasını sağlamalısınız. Yani, "|0" olarak işaretlenen tüm karakterler için "encode('your-encoding', decode('your-encoding', $data)) eq $data" ifadesi geçerli olmalıdır. Bunu sağlamanın yolu şudur:

• Haritanızı Unicode sırasına göre sıralayın.

• Yinelenen bir girdiniz olduğunda, bunlardan birini '|1' veya '|3' olarak işaretleyin.

• Ve '|1' veya '|3' girdisinin '|0' girdisinden SONRA geldiğinden emin olun.

İşte big5-eten kodlamasından bir örnek:

<U2550> \xF9\xF9 |0
<U2550> \xA2\xA4 |3

Dahili olarak Kodlama -> Unicode ve Unicode -> Kodlama Haritası şu şekilde görünür:

E - U Yönü            U - E Yönü
--------------------------------------
\xF9\xF9 => U2550    U2550 => \xF9\xF9
\xA2\xA4 => U2550

Böylece \xF9\xF9 için çift yönlü güvenlidir. Ancak yukarıdaki satırlar ters sırada olsaydı şu durum ortaya çıkardı:

E - U Yönü            U - E Yönü
--------------------------------------
\xA2\xA4 => U2550    U2550 => \xF9\xF9
(\xF9\xF9 => U2550 eşlemesinin üzerine yazılmış olurdu!)

Encode paketi, bir UCM dosyasının bütünlüğünü kontrol etmek için basit ama yeterli bir yardımcı program olan ucmlint ile birlikte gelir. Bunun için Encode/bin dizininin altına bakın.

Şüpheye düştüğünüzde, yine Encode/bin dizini altındaki bir başka yardımcı program olan ucmsort'u kullanabilirsiniz.

Yer İmleri

• ICU Ana Sayfası http://www.icu-project.org/

• ICU Karakter Eşleme Tabloları http://site.icu-project.org/charts/charset

• ICU: Dönüşüm Verileri http://www.icu-project.org/userguide/conversion-data.html

Ayrıca Bakınız

Encode, perlmod, perlpod

perl v5.34.1 2026-02-21 ENC2XS(1)