Procedura włączania własnego mapowania:
1. Ściągam i rozpakowuję wersję oryginalną:
$ wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
$ tar zxf libiconv-1.14.tar.gz
$ cd libiconv-1.14
$ export ICV=$(pwd)
2. W $ICV/tests/ opracowuję sobie pliki z mapowaniem np. ATARI8-GRAPH.TXT.
3. Kompiluję sobie narzędzie do przetwarzania mapowań:
$ cd $ICV/tools
$ make 8bit_tab_to_h
4. Mapowanie przetwarzam za pomocą
$ cd $ICV/lib
$ $ICV/tools/8bit_tab_to_h "Atari 8-bit Semi-graphic ATASCII" atari8_graph <$ICV/tests/ATARI8-GRAPH.TXT
Jeśli trzeba wprowadzić jakieś poprawki do wygenerowanego pliku, to należy to zrobić dopiero teraz. Można oczywiście (i gorąco to polecam) też modyfikować $ICV/tools/8bit_tab_to_h.c żeby uniknąć modyfikowania generowanego kodu.
5. Uzupełniam pliki:
- $ICV/lib/aliases_extra.h
S(extra_12, "ATARI8", ei_atari8_graph )
S(extra_13, "ATARI8-GRAPH", ei_atari8_graph )
S(extra_14, "ATARI8-ATASCII", ei_atari8_graph )
S(extra_15, "ATASCII", ei_atari8_graph )
- $ICV/lib/converters.h
#include "atari8_graph.h"
- $ICV/lib/encodings_extra.def
DEFENCODING(( "ATARI8",
"ATARI8-GRAPH", "ATARI8-ATASCII", "ATASCII",
),
atari8_graph,
{ atari8_graph_mbtowc, NULL }, { atari8_graph_wctomb, NULL })
- $ICV/lib/flags.h
#define ei_atari8_graph_oflags (HAVE_ACCENTS)
Tu wydaje mi się wystarczy 0 - HAVE_ACCENTS prawdopodobnie stosuje się dla kodowań ze znakami diakrytycznymi (nie wnikałem w kod - trzeba by się w to zagłębić).
5. Kompiluję całość:
$ cd $ICV
$ ./configure --enable-extra-encodings
$ make
6. Instaluję:
$ sudo make install
$ sudo ldconfig
Edit: Nie wiem zupełnie czy i jak definiować mapowania wielobajtowe. Pewnie się da, bo wystarczy spojrzeć na kodowanie arabskie gdzie znaki pisze się od prawej do lewej.
Edit 2: Załączam jeszcze moją wersję narzędzia 8bit_tab_to_h.c bo oryginalna się nie kompiluje (poprawiłem to ze 3 lata temu i nie pamiętam ocb).