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 だと面倒だと思う。