スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ICU4Luaを使ってみる

ICUのバインディングを探したらあった。
ICU4Lua

早速落としてみる。ICUはMacPortsで入れたものを使う。 作者がVC++/Windowsな人のようで、VC++のプロジェクトファイルはあるのだがMakefileがない。適当に書いた。

で、ビルドするとmalloc.hが無い、というエラーが出た。malloc/freeを使うにはmalloc.hではなくstdlib.hを#includeするのが正しいらしい。そこで#include <malloc.h>をすべて#include <stdlib.h>に置き換えた。

icu.utf8にstring.*と似た関数がある。パターンマッチもUnicode文字をマッチさせることができる。ただし%aなどはASCII限定で、Unicode文字をマッチさせるには%!aというふうに!を挟むこと。

> =icu.utf8.len("あいうえお")
5
> =icu.utf8.match("あいうえお","(%!a)()",2)
い	7

文字数とか文字の位置はバイト数ではなく、UTF-8の文字数を使うようだ。しかし、位置のキャプチャだけバイト数を返す。バグか。

書いたMakefile:

LUA= /usr/local
LUAINC= $(LUA)/include
LUALIB= $(LUA)/lib
LUABIN= $(LUA)/bin
INSTALL_LMOD= $(LUA)/share/lua/5.1
INSTALL_CMOD= $(LUA)/lib/lua/5.1

CC= gcc
CFLAGS= $(INCS) $(WARN) -O2 $(shell icu-config --cflags) -std=c99
WARN= -pedantic -Wall
INCS= -I$(LUAINC) $(shell icu-config --cppflags)
LIBS= $(shell icu-config --ldflags --ldflags-icuio)

T= icu.so
OBJS= \
 icu.o \
 icu.collator.o \
 icu.idna.o \
 icu.normalizer.o \
 icu.regex.o \
 icu.stringprep.o \
 icu.ufile.o \
 icu.ustring.o \
 icu.utf8.o \
 matchengine.o

all: $T

$T: $(OBJS)
	$(CC) -o $@ -bundle -undefined dynamic_lookup $(OBJS) $(LIBS)

clean:
	rm -f $(OBJS) $T

install: $T
	install -p -m 0755 $T $(INSTALL_CMOD)

.PHONY: all clean install
スポンサーサイト

テーマ : プログラミング | ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

minoki

Author:minoki
好きなプログラミング言語:
Haskell,Lua
GitHubアカウント
Twitter

最新記事
月別アーカイブ
カテゴリ
検索フォーム
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。