Unicode::LineBreak~[ja] − UAX #14 Unicode 行 分 割 ア ル ゴ リ ズ ム
use
Unicode::LineBreak;
$lb = Unicode::LineBreak−>new();
$broken = $lb−>break($string);
Unicode::LineBreak は 、 Unicode 標 準 の 附 属 書 14 [ UAX #14] で 述 べ る Unicode 行 分 割 ア ル ゴ リ ズ ム を 実 行 す る 。 分 割 位 置 を 決 定 す る 際 に 、 附 属 書 11 [ UAX #11] で 定 義 さ れ る East_Asian_Width 参 考 特 性 も 考 慮 す る 。 用 語 便 宜 的 に 以 下 の 用 語 を 使 う 。 強 制 分 割 〔 mandatory break〕 は 、 基 本 規 則 で 定 め ら れ て お り 、 周 囲 の 文 字 に 関 係 な く 義 務 的 に 実 行 さ れ る 行 分 割 動 作 。 任 意 分 割 は 、 基 本 規 則 で 認 め ら れ て お り 、 ユ ー ザ が 実 行 す る と 決 め た 場 合 に 行 わ れ る 行 分 割 動 作 。 [ UAX #14] で 定 義 さ れ る 任 意 分 割 に は 直 接 分 割 〔 direct break〕 と 間 接 分 割 〔 indirect break〕 と が あ る 。 音 素 文 字 的 な 文 字 〔 alphabetic characters〕 は 、 通 常 、 他 の 文 字 が 分 割 の 機 会 を 与 え な い か ぎ り 、 文 字 同 士 の 間 で 行 分 割 で き な い 文 字 。 表 語 文 字 的 な 文 字 〔 ideographic characters〕 は 、 通 常 、 そ の 前 後 で 行 分 割 で き る 文 字 。 [ UAX #14] で は 音 素 文 字 的 な 文 字 の ほ と ん ど を AL に 、 表 語 文 字 的 な 文 字 の ほ と ん ど を ID に 分 類 し て い る (こ れ ら の 用 語 は 文 字 学 の 観 点 か ら す れ ば 不 正 確 で あ る )。 若 干 の 用 字 系 で は 、 個 々 の 文 字 か ら は 分 割 位 置 が 明 確 に な ら な い た め 、 辞 書 に よ る 発 見 的 方 法 を 用 い る 。 文 字 列 の 桁 数 は 、 文 字 列 に 含 ま れ る 文 字 の 数 と 等 し い と は か ぎ ら な い 。 個 々 の 文 字 は 広 い 〔 wide〕 か 、 狭 い 〔 narrow〕 か 、 前 進 を 伴 わ な い 〔 nonspacing〕 か の い ず れ か で あ り 、 各 々 2 桁 、 1 桁 、 0 桁 を 占 め る 。 若 干 の 文 字 は 、 使 わ れ る 文 脈 に よ っ て 広 く も 狭 く も な り 得 る 。 カ ス タ マ イ ズ に よ っ て 、 文 字 は よ り 多 様 な 幅 を 持 ち う る 。
行 の 分 割
new ([ KEY =>
VALUE, ... ]) コ ン ス
ト ラ ク タ 。
KEY => VALUE の
対 に つ い て は
"オ プ シ ョ ン "
を 参 照 。
break ( STRING ) イ ン
ス タ ン ス メ ソ
ッ ド 。 Unicode 文 字
列 STRING を 分 割
し 、 そ れ を 返
す 。 配 列 コ ン
テ ク ス ト で は
、 結 果 の 各 行
の 配 列 を 返 す
。
break_partial ( STRING ) イ ン
ス タ ン ス メ ソ
ッ ド 。 break() と
同 じ だ が 、 文
字 列 を 少 し ず
つ 追 加 し て 入
力 す る 場 合 。
入 力 が 完 了 し
た こ と を 示 す
に は 、 STRING 引 数 に
"undef" を 与 え る
。
config ( KEY )
config ( KEY => VALUE, ...
) イ ン ス タ ン ス
メ ソ ッ ド 。 設
定 を 取 得 ま た
は 変 更 す る 。
KEY => VALUE の
対 に つ い て は
"オ プ シ ョ ン "
を 参 照 。
copy コ ピ ー コ ン
ス ト ラ ク タ 。
オ ブ ジ ェ ク ト
イ ン ス タ ン ス
の 複 製 を つ く
る 。 情 報 の 取
得
breakingRule ( BEFORESTR, AFTERSTR )
イ ン ス タ ン ス
メ ソ ッ ド 。 文
字 列 BEFORESTR と
AFTERSTR の 間 で の
行 分 割 動 作 を
得 る 。 返 値 に
つ い て は "定 数
" を 参 照 。 注 :
こ の メ ソ ッ ド
は 、 行 分 割 の
お お ま か な 動
作 を 表 す 値 を
返 す に す ぎ な
い 。 実 際 の テ
キ ス ト を 行 折
り す る に は 、
break() 等 の メ ソ ッ
ド を 使 っ て ほ
し い 。
context ([Charset => CHARSET ], [Language
=> LANGUAGE ]) 関 数
。 キ ャ ラ ク タ
セ ッ ト CHARSET お
よ び 言 語 コ ー
ド LANGUAGE か ら 、
そ れ を 使 う 言
語 /地 域 の 文 脈
を 得 る 。 オ プ
シ ョ ン
"new"、 "config" の 両
メ ソ ッ ド に は
以 下 の 対 を 指
定 で き る 。 桁
数 の 算 出 ([E])、
書 記 素 ク ラ ス
タ 分 節 ([G])
(Unicode::GCString~[ja] も 参 照 )、
行 分 割 動 作 ([L])
に 影 響 す る も
の が あ る 。
BreakIndent => "YES" | "NO"
[L] 行 頭 の SPACE の 並 び (イ ン デ ン ト ) の 後 で は 常 に 分 割 を 許 す 。 [ UAX #14] は SPACE の こ の よ う な 用 法 を 考 慮 し て い な い 。 初 期 値 は "YES"。 注 : こ の オ プ シ ョ ン は リ リ ー ス 1.011 で 導 入 さ れ た 。
CharMax => NUMBER
[L] 行 に 含 み う る 最 大 の 文 字 数 。 行 末 の 空 白 文 字 と 改 行 の 文 字 列 を 除 く 。 文 字 数 は 一 般 に 行 の 長 さ を 表 さ な い こ と に 注 意 。 初 期 値 は 998。 0 に は で き な い 。
ColMin => NUMBER
[L] 任 意 分 割 さ れ た 行 の 、 改 行 の 文 字 列 と 行 末 の 空 白 文 字 を 含 め な い 最 小 桁 数 。 初 期 値 は 0。
ColMax => NUMBER
[L] 行 の 、 改 行 の 文 字 列 と 行 末 の 空 白 文 字 を 含 め な い 最 大 桁 数 。 つ ま り 、 行 の 最 大 長 。 初 期 値 は 76。
"Urgent"
オ プ シ ョ ン お
よ び "ユ ー ザ 定
義 の 行 分 割 動
作 " も 参 照 。
ComplexBreaking => "YES" | "NO"
[L] 東 南 ア ジ ア の 複 雑 な 文 脈 で 、 発 見 的 な 行 折 り を 行 う 。 初 期 値 は 、 東 南 ア ジ ア の 表 記 体 系 で の 単 語 分 節 が 有 効 な ら "YES"。
Context => CONTEXT
[E][L] 言 語 /地 域 の 文 脈 を 指 定 す る 。 現 在 使 え る 文 脈 は "EASTASIAN" か "NONEASTASIAN"。 初 期 の 文 脈 は "NONEASTASIAN"。
"EASTASIAN" 文 脈 で は 、 East_Asian_Width 特 性 が 曖 昧 (A) で あ れ ば 「 広 い 」 文 字 と み な し 、 行 分 割 特 性 が AI で あ れ ば 表 語 文 字 的 ( ID ) と み な す 。
"NONEASTASIAN" 文 脈 で は 、 East_Asian_Width 特 性 が 曖 昧 (A) で あ れ ば 「 狭 い 」 文 字 と み な し 、 行 分 割 特 性 が AI で あ れ ば 音 素 文 字 的 ( AL ) と み な す 。
EAWidth => "["
ORD "=>" PROPERTY
"]"
EAWidth => "undef"
[E] 個 々 の 文 字 の East_Asian_Width 特 性 を 手 直 し す る 。 ORD は 文 字 の UCS イ ン デ ク ス 値 か 、 そ れ ら の 配 列 へ の 参 照 。 PROPERTY は East_Asian_Width 特 性 値 か 拡 張 値 の い ず れ か ("定 数 " を 参 照 )。 こ の オ プ シ ョ ン は 複 数 回 指 定 で き る 。 "undef" を 指 定 す る と 、 そ れ ま で の 手 直 し を す べ て 取 り 消 す 。 初 期 値 で は 、 East_Asian_width 特 性 の 手 直 し は し な い 。 "文 字 の 特 性 の 手 直 し " も 参 照 。
Format => METHOD
[L] 分 割
し た 行 を 整 形
す る 方 法 を 指
定 す る 。
"SIMPLE" 初 期 の 方
法 。 任 意 分 割
の 位 置 に 改 行
を 挿 入 す る だ
け 。
"NEWLINE"
"Newline" オ プ シ ョ ン で 指 定 し た も の で 改 行 を 置 き 換 え る 。 改 行 の 前 と テ キ ス ト 終 端 の 空 白 文 字 を 除 去 す る 。 テ キ ス ト 終 端 に 改 行 が な け れ ば 追 加 す る 。
"TRIM" 任
意 分 割 の 位 置
に 改 行 を 挿 入
す る 。 改 行 の
前 の 空 白 文 字
を 除 去 す る 。
"undef" な に も し
な い (改 行 の 挿
入 も )。 サ ブ ル
ー チ ン へ の 参
照
"行 の 整 形 " を 参 照 。
HangulAsAL => "YES" | "NO"
[L] ハ ン グ ル 音 節 と ハ ン グ ル 連 結 チ ャ モ 〔 conjoining jamo〕 を 音 素 文 字 的 な 文 字 ( AL ) と 扱 う 。 初 期 値 は "NO"。
LBClass => "["
ORD "=>" CLASS
"]"
LBClass => "undef"
[G][L] 個 々 の 文 字 の 行 分 割 特 性 (分 類 ) を 手 直 し す る 。 ORD は 文 字 の UCS イ ン デ ク ス 値 か 、 そ れ ら の 配 列 へ の 参 照 。 CLASS は 行 分 割 特 性 値 の い ず れ か ("定 数 " を 参 照 )。 こ の オ プ シ ョ ン は 複 数 回 指 定 で き る 。 "undef" を 指 定 す る と 、 そ れ ま で の 手 直 し を す べ て 取 り 消 す 。 初 期 値 で は 、 行 分 割 特 性 の 手 直 し は し な い 。 "文 字 の 特 性 の 手 直 し " も 参 照 。
LegacyCM => "YES" | "NO"
[G][L] 前 に 空 白 文 字 が つ い た 結 合 文 字 を 単 独 の 結 合 文 字 ( ID ) と 扱 う 。 Unicode 5.0 版 か ら は 、 空 白 文 字 の こ の よ う な 使 い か た は 推 奨 さ れ な い 。 初 期 値 は "YES"。
Newline => STRING
[L] 改 行 の 文 字 列 と す る Unicode 文 字 列 。 初 期 値 は "\n"。
Prep => METHOD
[L] ユ ー
ザ 定 義 の 行 分
割 動 作 を 追 加
す る 。 こ の オ
プ シ ョ ン は 複
数 回 指 定 で き
る 。 METHOD に は
以 下 の も の を
指 定 で き る 。
"NONBREAKURI"
URI を 分 割 し な い 。
"BREAKURI"
URI を 、 印 刷 物 に 適 し た 規 則 で 分 割 す る 。 詳 し く は [ CMOS ] の 6.17 節 と 17.11 節 を 参 照 。
"[" REGEX,
SUBREF "]" 正 規 表
現 REGEX に マ ッ
チ す る 文 字 列
を 、 SUBREF で 参 照 さ
れ る サ ブ ル ー
チ ン で 分 割 す
る 。 詳 細 は "ユ
ー ザ 定 義 の 行
分 割 動 作 " を 参
照 。
"undef" そ れ ま で
に 追 加 し た 動
作 を す べ て 取
り 消 す 。
Sizing => METHOD
[L] 文 字
列 の 長 さ を 算
出 す る 方 法 を
指 定 す る 。 以
下 の オ プ シ ョ
ン が 使 え る 。
"UAX11" 初 期 の 方
法 。 組 み 込 み
の 文 字 デ ー タ
ベ ー ス に よ っ
て 文 字 の 桁 数
を 算 出 す る 。
"undef" 文 字 列 に
含 ま れ る 書 記
素 ク ラ ス タ
(Unicode::GCString 参 照 ) の 数
を 返 す 。 サ ブ
ル ー チ ン へ の
参 照
"文 字 列 長 の 算 出 " を 参 照 。
"ColMax"、 "ColMin"、 "EAWidth" オ プ シ ョ ン も 参 照 。
Urgent => METHOD
[L] 長 す
ぎ る 行 の 扱 い
か た を 指 定 す
る 。 以 下 の オ
プ シ ョ ン が 使
え る 。
"CROAK" エ ラ ー メ
ッ セ ー ジ を 出
力 し て 死 ぬ 。
"FORCE" 長 す ぎ る
文 字 列 を 無 理
や り 分 割 す る
。
"undef" 初 期 の 方
法 。 長 す ぎ る
文 字 列 も 分 割
し な い 。 サ ブ
ル ー チ ン へ の
参 照
"ユ ー ザ 定 義 の 行 分 割 動 作 " を 参 照 。
ViramaAsJoiner => "YES" | "NO"
[G] ヴ ィ ラ ー マ 記 号 (ヒ ン デ ィ 語 で は 「 ハ ラ ン ト 」 、 ク メ ー ル 文 字 で の 「 脚 」 ) と そ れ に 続 く 字 と を 分 離 し な い 。 初 期 値 は "YES"。 注 : こ の オ プ シ ョ ン は リ リ ー ス 2011.001_29 で 導 入 さ れ た 。 以 前 の リ リ ー ス で は "NO" に 固 定 で あ っ た 。 こ れ は 、 [ UAX #29] で 定 義 す る 「 初 期 の 」 書 記 素 ク ラ ス タ に は 含 ま れ な い 仕 様 で あ る 。 定 数
"EA_Na", "EA_N", "EA_A", "EA_W", "EA_H", "EA_F"
[ UAX #11] で 定 義 さ れ る 6 つ の East_Asian_Width 特 性 値 。 狭 (Na)、 中 立 (N)、 曖 昧 (A)、 広 (W)、 半 角 (H)、 全 角 (F)。
"EA_Z" 前
進 を 伴 わ な い
文 字 の East_Asian_Width 特
性 の 値 。 注 :
こ の 「 前 進 を
伴 わ な い 」 値
は 当 モ ジ ュ ー
ル に よ る 拡 張
で あ り 、 [ UAX
#11] の 一 部 で は な
い 。
"LB_BK", "LB_CR", "LB_LF",
"LB_NL", "LB_SP", "LB_OP",
"LB_CL", "LB_CP",
"LB_QU", "LB_GL", "LB_NS",
"LB_EX", "LB_SY", "LB_IS",
"LB_PR", "LB_PO",
"LB_NU", "LB_AL", "LB_HL",
"LB_ID", "LB_IN", "LB_HY",
"LB_BA", "LB_BB",
"LB_B2", "LB_CB", "LB_ZW",
"LB_CM", "LB_WJ", "LB_H2",
"LB_H3", "LB_JL",
"LB_JV", "LB_JT", "LB_SG",
"LB_AI", "LB_CJ", "LB_SA",
"LB_XX", "LB_RI"
[ UAX #14] で 定 義 さ れ る 40 の 行 分 割 特 性 値 (分 類 )。 注 : 特 性 値 CP は Unicode 5.2.0版 で 導 入 さ れ た 。 特 性 値 HL と CJ は Unicode 6.1.0版 で 導 入 さ れ た 。 特 性 値 RI は Unicode 6.2.0版 で 導 入 さ れ た 。
"MANDATORY",
"DIRECT", "INDIRECT",
"PROHIBITED" 行 分 割 動
作 を 表 す 4 つ の
値 。 強 制 分 割
。 直 接 分 割 も
間 接 分 割 も 認
め る 。 間 接 分
割 を 認 め る が
直 接 分 割 は 禁
ず る 。 分 割 を
禁 ず る 。
"Unicode::LineBreak::SouthEastAsian::supported"
東 南 ア ジ ア の
表 記 体 系 の た
め の 単 語 分 節
機 能 が 有 効 か
ど う か を 示 す
フ ラ グ 。 こ の
機 能 が 有 効 に
な っ て い れ ば
、 空 で な い 文
字 列 。 そ う で
な け れ ば
"undef"。 注 : 現
リ リ ー ス で は
現 代 タ イ 語 の
タ イ 文 字 に の
み 対 応 し て い
る 。
"UNICODE_VERSION" こ の モ
ジ ュ ー ル が 参
照 す る Unicode 標 準
の 版 を 示 す 文
字 列 。
行 の 整 形
"Format" オ プ シ ョ ン に サ ブ ル ー チ ン へ の 参 照 を 指 定 す る 場 合 、 そ の サ ブ ル ー チ ン は 3 つ の 引 数 を 取 ら な け れ ば な ら な い 。
$修 正 後 = &サ ブ ル ー チ ン (SELF, EVENT, STR);
SELF は Unicode::LineBreak オ ブ ジ ェ ク ト 、 EVENT は サ ブ ル ー チ ン が 呼 ば れ た 文 脈 を 表 す 文 字 列 、 STR は 分 割 位 置 の 前 ま た は 後 の Unicode 文 字 列 の 断 片 。
EVENT |駆
動 の 契 機 |STR
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
"sot" |テ キ ス ト
先 頭 |最 初 の 行
の 断 片
"sop" |強 制 分 割
の 後 |次 の 行 の
断 片
"sol" |任 意 分 割
の 後 |続 き の 行
の 断 片
"" |分 割 の 直 前
|行 全 体 (終 端 の
空 白 文 字 を 除
く )
"eol" |任 意 分 割
|分 割 位 置 の 前
の 空 白 文 字
"eop" |強 制 分 割
|改 行 と そ の 前
の 空 白 文 字
"eot" |テ キ ス ト
終 端 |テ キ ス ト
終 端 の 空 白 文
字 (と 改 行 )
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
サ ブ ル ー チ ン
は 、 テ キ ス ト
の 断 片 を 修 正
し て 返 さ な け
れ ば な ら な い
。 な に も 修 正
し な か っ た こ
と を 示 す に は
、 "undef" を 返 せ
ば よ い 。 な お
、 "sot"、 "sop"、
"sol" の 文 脈 で の
修 正 は そ の 後
の 分 割 位 置 の
決 定 に 影 響 す
る が 、 ほ か の
文 脈 で の 修 正
は 影 響 し な い
。 注 意 : 文 字
列 の 引 数 は 実
際 に は 書 記 素
ク ラ ス タ 列 で
あ る 。 Unicode::GCString~[ja] 参
照 。 た と え ば
次 の コ ー ド は
、 行 末 の 空 白
を 取 り 除 い て
行 折 り を す る
。
sub fmt {
if ($_[1] =~ /^eo/) {
return "\n"; }
return undef; }
my $lb = Unicode::LineBreak−>new(Format =>
\&fmt);
$output = $lb−>break($text); ユ ー
ザ 定 義 の 行 分
割 動 作 任 意 分
割 に よ っ て 生
じ る 行 が CharMax、
ColMax、 ColMin の い ず れ
か の 制 限 を 超
え る と 見 込 ま
れ る と き は 、
引 き 続 く 文 字
列 に 対 し て 緊
急 分 割 を 実 行
で き る 。 "Urgent"
オ プ シ ョ ン に
サ ブ ル ー チ ン
へ の 参 照 を 指
定 す る 場 合 、
そ の サ ブ ル ー
チ ン は 2 つ の 引
数 を 取 ら な け
れ ば な ら な い
。
@分 割 後 = &サ ブ ル ー チ ン (SELF, STR);
SELF は Unicode::LineBreak オ ブ ジ ェ ク ト 、 STR は 分 割 す べ き Unicode 文 字 列 。 サ ブ ル ー チ ン は 、 文 字 列 STR を 分 割 し た 結 果 の 配 列 を 返 さ な け れ ば な ら な い 。 注 意 : 文 字 列 の 引 数 は 実 際 に は 書 記 素 ク ラ ス タ 列 で あ る 。 Unicode::GCString~[ja] 参 照 。 た と え ば 次 の コ ー ド は 、 若 干 の 化 学 物 質 (チ チ ン の よ う な ) の 名 称 に ハ イ フ ン を 挿 入 し 、 行 折 り で き る よ う に す る 。
sub hyphenize {
return map {$_ =~ s/yl$/yl−/; $_} split
/(\w+?yl(?=\w))/, $_[1]; }
my $lb = Unicode::LineBreak−>new(Urgent =>
\&hyphenize);
$output =
$lb−>break("Methionylthreonylthreonylglutaminylarginyl...");
"Prep" オ プ シ ョ ン に [ REGEX, SUBREF ] の 配 列 参 照 を 指 定 す る 場 合 、 サ ブ ル ー チ ン は 2 つ の 引 数 を 取 ら な け れ ば な ら な い 。
@分 割 後 = &サ ブ ル ー チ ン (SELF, STR);
SELF は Unicode::LineBreak オ ブ ジ ェ ク ト 、 STR は REGEX に マ ッ チ す る 分 割 す べ き Unicode 文 字 列 。 サ ブ ル ー チ ン は 、 文 字 列 STR を 分 割 し た 結 果 の 配 列 を 返 さ な け れ ば な ら な い 。 た と え ば 次 の コ ー ド は 、 HTTP URL を [ CMOS ] の 規 則 を 用 い て 分 割 す る 。
my $url =
qr{http://[\x21−\x7E]+}i;
sub breakurl {
my $self = shift;
my $str = shift;
return split m{(?<=[/]) (?=[^/]) |
(?<=[^−.]) (?=[−~.,_?\#%=&]) |
(?<=[=&]) (?=.)}x, $str; }
my $lb = Unicode::LineBreak−>new(Prep => [$url,
\&breakurl]);
$output = $lb−>break($string); 状 態
の 保 存
Unicode::LineBreak オ ブ ジ ェ ク ト は ハ ッ シ ュ 参 照 と し て ふ る ま う 。 任 意 の 要 素 を 、 オ ブ ジ ェ ク ト の 存 在 期 間 中 保 存 で き る 。 た と え ば 次 の コ ー ド は 、 段 落 を 空 行 で 分 け る 。
sub paraformat
{
my $self = shift;
my $action = shift;
my $str = shift;
if ($action eq 'sot' or $action eq 'sop') {
$self−>{'line'} = ''; }
elsif ($action eq '') {
$self−>{'line'} = $str; }
elsif ($action eq 'eol') {
return "\n"; }
elsif ($action eq 'eop') {
if (length $self−>{'line'}) {
return "\n\n"; }
else {
return "\n"; } }
elsif ($action eq 'eot') {
return "\n"; }
return undef; }
my $lb = Unicode::LineBreak−>new(Format =>
\¶format);
$output = $lb−>break($string); 文 字
列 長 の 算 出
"Sizing" オ プ シ ョ
ン に サ ブ ル ー
チ ン へ の 参 照
を 指 定 す る 場
合 、 そ の サ ブ
ル ー チ ン は 5 つ
の 引 数 を 取 ら
な け れ ば な ら
な い 。
$桁 数 = &サ ブ ル ー チ ン (SELF, LEN, PRE, SPC, STR);
SELF は Unicode::LineBreak オ ブ ジ ェ ク ト 、 LEN は 先 行 す る 文 字 列 の 長 さ 、 PRE は 先 行 す る Unicode 文 字 列 、 SPC は 追 加 さ れ る 空 白 文 字 、 STR は 処 理 す る Unicode 文 字 列 。 サ ブ ル ー チ ン は "PRE.SPC.STR" の 桁 数 を 算 出 し て 返 さ な け れ ば な ら な い 。 桁 数 は 整 数 で な く て も よ い 。 桁 数 の 単 位 は 随 意 に 選 べ る が 、 "ColMin" オ プ シ ョ ン お よ び "ColMax" オ プ シ ョ ン の そ れ と 一 致 さ せ な け れ ば な ら な い 。 注 意 : 文 字 列 の 引 数 は 実 際 に は 書 記 素 ク ラ ス タ 列 で あ る 。 Unicode::GCString~[ja] 参 照 。 た と え ば 次 の コ ー ド は 、 行 に 8 桁 ご と の タ ブ ス ト ッ プ が あ る も の と し て 処 理 す る 。
sub
tabbedsizing {
my ($self, $cols, $pre, $spc, $str) = @_;
my $spcstr = $spc.$str;
while ($spcstr−>lbc == LB_SP) {
my $c = $spcstr−>item(0);
if ($c eq "\t") {
$cols += 8 − $cols % 8; }
else {
$cols += $c−>columns; }
$spcstr = $spcstr−>substr(1); }
$cols += $spcstr−>columns;
return $cols; };
my $lb = Unicode::LineBreak−>new(LBClass =>
[ord("\t") => LB_SP],
Sizing => \&tabbedsizing);
$output = $lb−>break($string); 文 字
の 特 性 の 手 直
し
"LBClass" オ プ シ ョ
ン お よ び "EAWidth"
オ プ シ ョ ン で
個 々 の 文 字 の
行 分 割 特 性 (分
類 ) や East_Asian_Width 特 性
を 手 直 し で き
る 。 そ の 際 に
便 利 な 定 数 を
い く つ か 定 義
し て あ る 。 行
分 割 特 性 仮 名
な ど の 行 頭 禁
則 文 字 初 期 値
で は 、 若 干 の
仮 名 や 仮 名 に
準 ず る も の を
行 頭 禁 則 文 字 (
NS ま た は
CJ ) と 扱 う 。
以 下 の 対 を LBClass
オ プ シ ョ ン に
指 定 す れ ば 、
こ れ ら の 文 字
を 通 常 の 表 語
文 字 的 な 文 字 (
ID ) と 扱 え る
。
"KANA_NONSTARTERS() => LB_ID" 下 記
の 文 字 す べ て
。
"IDEOGRAPHIC_ITERATION_MARKS() => LB_ID"
表 語 文 字 的 な
繰 り 返 し 記 号
。 U+3005 繰 返 し 記 号
、 U+303B ゆ す り 点 、
U+309D 平 仮 名 繰 返 し
記 号 、 U+309E 平 仮 名
繰 返 し 記 号 (濁
点 )、 U+30FD 片 仮 名
繰 返 し 記 号 、 U+30FE
片 仮 名 繰 返 し
記 号 (濁 点 )。 注
。 仮 名 で は な
い も の も あ る
。
"KANA_SMALL_LETTERS() => LB_ID"
"KANA_PROLONGED_SOUND_MARKS() => LB_ID"
小 書 き 仮 名 。
小 書 き 平 仮 名 U+3041
ぁ , U+3043 ぃ , U+3045 ぅ , U+3047
ぇ , U+3049 ぉ , U+3063 っ , U+3083
ゃ , U+3085 ゅ , U+3087 ょ , U+308E
ゎ , U+3095 ゕ , U+3096 ゖ 。
小 書 き 片 仮 名 U+30A1
ァ , U+30A3 ィ , U+30A5 ゥ , U+30A7
ェ , U+30A9 ォ , U+30C3 ッ , U+30E3
ャ , U+30E5 ュ , U+30E7 ョ , U+30EE
ヮ , U+30F5 ヵ , U+30F6 ヶ 。
片 仮 名 表 音 拡
張 U+31F0 ㇰ − U+31FF ㇿ 。
小 書 き 片 仮 名
(代 替 名 称 ) U+FF67 ァ
− U+FF6F ッ。 長 音 記
号 。 U+30FC 長 音 記 号
、 U+FF70 長 音 記 号
(代 替 名 称 )。 注
。 こ れ ら の 文
字 は 行 頭 禁 則
文 字 と 扱 わ れ
る こ と も 、 通
常 の 表 語 文 字
的 な 文 字 と 扱
わ れ る こ と も
あ る 。 [ JIS X 4051 ]
6.1.1、 [ JLREQ ] 3.1.7 や [
UAX14 ] を 参 照 。
注 。 U+3095 ゕ , U+3096 ゖ , U+30F5
ヵ , U+30F6 ヶ は 仮 名
で は な い と さ
れ る 。
"MASU_MARK() => LB_ID"
U+303C ま す 記 号 。 注 。 こ の 文 字 は 仮 名 で は な い が 、 通 常 "ま す " や "マ ス " の 略 記 と し て 用 い ら れ る 。 注 。 こ の 文 字 は [ UAX #14] で は 行 頭 禁 則 文 字 ( NS ) に 分 類 さ れ る が 、 [ JIS X 4051 ] や [ JLREQ ] で は 文 字 ク ラ ス (13) や cl−19 ( ID に 相 当 ) に 分 類 さ れ る 。 曖 昧 な 引 用 符 初 期 値 で は 、 若 干 の 記 号 を 曖 昧 な 引 用 符 ( QU ) と 扱 う 。
"BACKWARD_QUOTES() =>
LB_OP, FORWARD_QUOTES() => LB_CL" あ る
言 語 (オ ラ ン ダ
語 、 英 語 、 イ
タ リ ア 語 、 ポ
ル ト ガ ル 語 、
ス ペ イ ン 語 、
ト ル コ 語 、 お
よ び 東 ア ジ ア
の 多 く の 言 語 )
で は 、 開 き 記
号 に 9 が 回 転 し
た 形 状 の 引 用
符 (‘ “) を 、 閉
じ 記 号 に 9 の 形
状 の 引 用 符 (’
”) を 用 い る 。
"FORWARD_QUOTES() => LB_OP, BACKWARD_QUOTES() =>
LB_CL" ほ か の 言 語
(チ ェ コ 語 、 ド
イ ツ 語 、 ス ロ
ヴ ァ ク 語 ) で は
、 9 の 形 状 の 引
用 符 (’ ”) を 開
き 記 号 に 、 9 が
回 転 し た 形 状
の 引 用 符 (‘ “)
を 閉 じ 記 号 に
用 い る 。
"BACKWARD_GUILLEMETS() => LB_OP,
FORWARD_GUILLEMETS() => LB_CL" フ ラ
ン ス 語 、 ギ リ
シ ャ 語 、 ロ シ
ア 語 な ど で は
、 左 向 き の ギ
ュ メ (« ‹) を 開
き 記 号 に 、 右
向 き の ギ ュ メ
(» ›) を 閉 じ 記
号 に 用 い る 。
"FORWARD_GUILLEMETS() => LB_OP,
BACKWARD_GUILLEMETS() => LB_CL" ド イ
ツ 語 や ス ロ ヴ
ァ ク 語 で は 、
右 向 き の ギ ュ
メ (» ›) を 開 き
記 号 に 、 左 向
き の ギ ュ メ («
‹) を 閉 じ 記 号
に 用 い る 。 デ
ー ン 語 、 フ ィ
ン 語 、 ノ ル ウ
ェ ー 語 、 ス ウ
ェ ー デ ン 語 で
は 、 9 の 形 状 の
引 用 符 や 右 向
き の ギ ュ メ (’
” » ›) を 開 き
記 号 に も 閉 じ
記 号 に も 用 い
る 。 和 字 間 隔
"IDEOGRAPHIC_SPACE() => LB_BA"
U+3000 和 字 間 隔 が 行 頭 に 来 な い よ う に す る 。 こ れ が 初 期 の 挙 動 で あ る 。
"IDEOGRAPHIC_SPACE() =>
LB_ID" 和 字 間 隔 が
行 頭 に 来 る こ
と が あ る 。 Unicode
6.2以 前 は こ れ が
初 期 の 挙 動 で
あ っ た 。
"IDEOGRAPHIC_SPACE() => LB_SP" 和
字 間 隔 が 行 頭
に 来 ず 、 行 末
で は は み 出 す
よ う に す る 。
East_Asian_Width
特 性 ラ テ ン 、
ギ リ シ ア 、 キ
リ ル の 各 用 字
系 で は 、 特 定
の 文 字 が 曖 昧 (A)
の East_Asian_Width 特 性 を
持 っ て い る 。
こ の た め 、 こ
う い っ た 文 字
は "EASTASIAN" 文 脈 で
広 い 文 字 と 扱
わ れ る 。 "EAWidth => [
AMBIGUOUS_"*"() => EA_N ]" と
指 定 す る こ と
で 、 そ の よ う
な 文 字 を 常 に
狭 い 文 字 と 扱
う 。
"AMBIGUOUS_ALPHABETICS() => EA_N" 下
記 の 文 字 す べ
て を East_Asian_Width 特 性 N
(中 立 ) の 文 字 と
扱 う 。
"AMBIGUOUS_CYRILLIC() => EA_N"
"AMBIGUOUS_GREEK() => EA_N"
"AMBIGUOUS_LATIN() => EA_N" 曖 昧
(A) の 幅 を 持 つ キ
リ ル 、 ギ リ シ
ア 、 ラ テ ン 用
字 系 の 文 字 を
中 立 (N) の 文 字 と
扱 う 。 い っ ぽ
う 、 東 ア ジ ア
の 符 号 化 文 字
集 合 に 対 す る
多 く の 実 装 で
た び た び 広 い
文 字 に 描 画 さ
れ て き た に も
か か わ ら ず 、
Unicode 標 準 で は 全
角 (F) の 互 換 文 字
を 持 つ が ゆ え
に 狭 い (Na) 文 字 と
さ れ て い る 文
字 が 若 干 あ る
。 EAWidth オ プ シ ョ
ン に 以 下 の よ
う に 指 定 す る
こ と で 、 こ れ
ら の 文 字 を
"EASTASIAN" 文 脈 で 広
い 文 字 と 扱 え
る 。
"QUESTIONABLE_NARROW_SIGNS() => EA_A"
U+00A2 セ ン ト 記 号 、 U+00A3 ポ ン ド 記 号 、 U+00A5 円 記 号 (ま た は 元 記 号 )、 U+00A6 破 断 線 、 U+00AC 否 定 、 U+00AF マ ク ロ ン 。 設 定 フ ァ イ ル
"new" メ ソ ッ ド お よ び "config" メ ソ ッ ド の オ プ シ ョ ン 引 数 の 組 み 込 み 初 期 値 は 、 設 定 フ ァ イ ル で 上 書 き で き る 。 Unicode/LineBreak/Defaults.pm。 詳 細 は Unicode/LineBreak/Defaults.pm.sample を 読 ん で ほ し い 。
バ グ や バ グ の よ う な 動 作 は 、 開 発 者 に 教 え て く だ さ い 。
CPAN Request Tracker: <http://rt.cpan.org/Public/Dist/Display.html?Name=Unicode−LineBreak>.
$VERSION
変 数 を 参 照 し
て ほ し い 。 非
互 換 な 変 更
2012.06
• |
eawidth() メ ソ ッ ド を 廃 止 し た 。 代 わ り に "columns" in Unicode::GCString が 使 え る か も し れ な い 。 | ||
• |
lbclass() メ ソ ッ ド を 廃 止 し た 。 "lbc" in Unicode::GCString や "lbcext" in Unicode::GCString を 使 っ て ほ し い 。 |
標 準 へ の 適 合 性 こ の モ ジ ュ ー ル で 用 い て い る 文 字 の 特 性 値 は 、 Unicode 標 準 8.0.0版 に よ る 。 こ の モ ジ ュ ー ル で は 、 実 装 水 準 UAX14−C2 を 実 装 し て い る つ も り 。