camomile - ocaml用unicodeライブラリ

19
Camomile OCamlUnicodeライブラリ 山形賴之 2011年12月29日 京大

Upload: yamagata-yoriyuki

Post on 03-Jul-2015

1.068 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Camomile - OCaml用Unicodeライブラリ

Camomile

OCaml用Unicodeライブラリ 山形賴之

2011年12月29日 京大

Page 2: Camomile - OCaml用Unicodeライブラリ

Agenda

Unicodeとは?

OCamlとは?

Camomile

Page 3: Camomile - OCaml用Unicodeライブラリ

Agenda

Unicodeとは?

OCamlとは?

Camomile

Page 4: Camomile - OCaml用Unicodeライブラリ

A

U+16A0

U+3042

U+0041 Ậ U+1EAC = U+0041 + U+0302 + U+0323

既 U+65E2

旣 U+65E3

Page 5: Camomile - OCaml用Unicodeライブラリ

文字集合は民族の財産だ!

勝手に統合するな!

Code Set Independeceにこだわる

Page 6: Camomile - OCaml用Unicodeライブラリ

Character, not glyph

AAAAA ←すべて同じ文字

原則:文字という論理的な対象をコード

論理的とは?

≒意味

でも、既≠旣とかわかりにくい

Page 7: Camomile - OCaml用Unicodeライブラリ

具体的な形

意味

抽象的な構造

士≠土

既≠旣 とめ、はね、など

Page 8: Camomile - OCaml用Unicodeライブラリ

0 20000

拡張漢字

30000

Private Zone

F0000 10FFFF E0000

タグ

10000

BMP:よく使われる文字

Plane 1: 特殊記号、歴史的な文字

Page 9: Camomile - OCaml用Unicodeライブラリ

A 41

Ω CE A9

語 E8 AA 9E

𠀔 F0 A0 80 94

A 0041

Ω 03A9

語 8A9E

𠀔 D840 DC14

A 00000041

Ω 000003A9

語 0000819E

𠀔 00020014

Page 10: Camomile - OCaml用Unicodeライブラリ

Ậ = Ậ

1EAC

= A + ̂+ ̣ 0041 0302 0323

= A + ̣+ ̂ 0041 0323 0302

Page 11: Camomile - OCaml用Unicodeライブラリ

NFD:できるだけ分解 NFD(Â+ ̣)=A + ̣+ ̂

NFC:できるだけ合成 NFC(A + ̂+ ̣)= Ậ

NFKD,NFKC: NFKD(カ)= カ NFKD(Dž)= D + z + ̆

Page 12: Camomile - OCaml用Unicodeライブラリ

Unicode Algorithm

• Unicode collation algorithm (UCA)

• Case mapping algorithm

• Bidirectional algorithm (BIDI)

Page 13: Camomile - OCaml用Unicodeライブラリ

Agenda

Unicodeとは?

OCamlとは?

Camomile

Page 14: Camomile - OCaml用Unicodeライブラリ

Haskell ML系言語

OCaml F#

Lisp,Scheme,Erlang

Scala

Page 15: Camomile - OCaml用Unicodeライブラリ

OCaml vs Haskell

• 関数型言語

–副作用のないプログラミングスタイルを奨励

• Hindley-Milner type systemがベース

–強い静的型付け

–型推論

–多相型

Page 16: Camomile - OCaml用Unicodeライブラリ

OCaml vs Haskell(続き)

OCaml

Eager

副作用あり

begin … end etc.

独自機能

モジュール

オブジェクト指向

Haskell

Lazy

モナド

オフサイドルール

独自機能

タイプクラス

Page 17: Camomile - OCaml用Unicodeライブラリ

Agenda

Unicodeとは?

OCamlとは?

Camomile

Page 18: Camomile - OCaml用Unicodeライブラリ

Camomile

• 基本データ型

• 文字コード変換

• 正規化

• Unicode Algorithms

– UCA (文字列照合)

– Case mappings

• 正規表現

Page 19: Camomile - OCaml用Unicodeライブラリ

サイト

• Github / yoriyuki / Camomile

• 課題

– ulib

– Unicode 6.X対応

–まともな正規表現エンジン

–バグ、バグ、バグ…