nkf
現状では UTF8 の文字列しか読めないので nkf を組み込むことにした。(qkc は unicode 対応が全くないのでアウト)
nkf32.dll は最新バージョンはソースのみの配布で、 dll のビルド手順は Visual C++ のみの対応らしい。Mingw でのやり方を調べたところ、こんな感じで Makefile を組んだら動いてくれた。
LIBRARY_OBJ = nkf32.o utf8tbl.o dll.res.o DLLOPTION = -DWIN32DLL -DTOMIME -DGETKANJICODE -DUNICODESUPPORT # -DFILECONVERT1 -DFILECONVERT2 nkf32.o: nkf.c nkf32dll.c nkf.h gcc $(CFLAGS) $(DLLOPTION) -o $@ -c nkf32.c nkf32.dll: $(LIBRARY_OBJ) gcc -shared -o $@ $(LIBRARY_OBJ) \ -Wl,--output-def,nkf32.def,--out-implib,libnkf.a dll.res.o: dll.rc windres -i $< -o $@
.a を使うか .def を使うかもよく知らんかったが、 .a で動作確認した。
文書を眺めていると目的の文字コードの変換だけでなく整形機能が使えそう。
-f[*m*[-*n*]] 一行 *m* 文字になるように、マージンを *n* として簡単な整形をおこなう。 デフォルトは文字数は 60、マージンは 10 である。
等幅フォントで並べたときに半角を1,全角を2としてカウントする実装が面倒そうで、表示枠を越えた文字列の処理はまどろっこしいことをしてたり、文字を途中で切ったか判断できていない。よってこれを使えば途中で切った判別ができる。
8bit 文字列ではあまり顕著にならなかったんだが、UTF-16 だと面倒だと思う。