Your Logo
Documentation made easier

POD2::JA::Unicode::LineBreak

NAME
SYNOPSIS
DESCRIPTION
PUBLIC INTERFACE
CUSTOMIZATION
BUGS
VERSION
IMPLEMENTATION NOTES
REFERENCES
SEE ALSO
AUTHOR

NAME

Unicode::LineBreak~[ja] − UAX #14 Unicode 行 分 割 ア ル ゴ リ ズ ム

SYNOPSIS

use Unicode::LineBreak;
$lb = Unicode::LineBreak−>new();
$broken = $lb−>break($string);

DESCRIPTION

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 桁 を 占 め る 。 若 干 の 文 字 は 、 使 わ れ る 文 脈 に よ っ て 広 く も 狭 く も な り 得 る 。 カ ス タ マ イ ズ に よ っ て 、 文 字 は よ り 多 様 な 幅 を 持 ち う る 。

PUBLIC INTERFACE

行 の 分 割

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 ) イ ン ス タ ン ス メ ソ ッ ド 。 文 字 列 BEFORESTRAFTERSTR の 間 で の 行 分 割 動 作 を 得 る 。 返 値 に つ い て は "定 数 " を 参 照 。 : こ の メ ソ ッ ド は 、 行 分 割 の お お ま か な 動 作 を 表 す 値 を 返 す に す ぎ な い 。 実 際 の テ キ ス ト を 行 折 り す る に は 、 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版 で 導 入 さ れ た 。 特 性 値 HLCJ は Unicode 6.1.0版 で 導 入 さ れ た 。 特 性 値 RI は Unicode 6.2.0版 で 導 入 さ れ た 。

"MANDATORY", "DIRECT", "INDIRECT", "PROHIBITED" 行 分 割 動 作 を 表 す 4 つ の 値 。 強 制 分 割 。 直 接 分 割 も 間 接 分 割 も 認 め る 。 間 接 分 割 を 認 め る が 直 接 分 割 は 禁 ず る 。 分 割 を 禁 ず る 。
"Unicode::LineBreak::SouthEastAsian::supported" 東 南 ア ジ ア の 表 記 体 系 の た め の 単 語 分 節 機 能 が 有 効 か ど う か を 示 す フ ラ グ 。 こ の 機 能 が 有 効 に な っ て い れ ば 、 空 で な い 文 字 列 。 そ う で な け れ ば "undef"。 : 現 リ リ ー ス で は 現 代 タ イ 語 の タ イ 文 字 に の み 対 応 し て い る 。
"UNICODE_VERSION" こ の モ ジ ュ ー ル が 参 照 す る Unicode 標 準 の 版 を 示 す 文 字 列 。

CUSTOMIZATION

行 の 整 形

"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 => \&paraformat);
$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 を 読 ん で ほ し い 。

BUGS

バ グ や バ グ の よ う な 動 作 は 、 開 発 者 に 教 え て く だ さ い 。

CPAN Request Tracker: <http://rt.cpan.org/Public/Dist/Display.html?Name=Unicode−LineBreak>.

VERSION

$VERSION 変 数 を 参 照 し て ほ し い 。 非 互 換 な 変 更
2012.06

eawidth() メ ソ ッ ド を 廃 止 し た 。 代 わ り に "columns" in Unicode::GCString が 使 え る か も し れ な い 。

lbclass() メ ソ ッ ド を 廃 止 し た 。 "lbc" in Unicode::GCString や "lbcext" in Unicode::GCString を 使 っ て ほ し い 。

標 準 へ の 適 合 性 こ の モ ジ ュ ー ル で 用 い て い る 文 字 の 特 性 値 は 、 Unicode 標 準 8.0.0版 に よ る 。 こ の モ ジ ュ ー ル で は 、 実 装 水 準 UAX14−C2 を 実 装 し て い る つ も り 。

IMPLEMENTATION NOTES

• 一 部 の 表 語 文 字 的 な 文 字 を

NS と し て 扱 う か ID と し て 扱 う か を 選 べ る 。

• ハ ン グ ル 音 節 お よ び ハ ン グ ル

連 結 チ ャ モ を ID と し て 扱 う か AL と し て 扱 う か を 選 べ る 。

AI に 分 類 さ れ る 文 字 を ALID の ど ち ら に 解 決 す る か を 選 べ る 。

CB に 分 類 さ れ る 文 字 は 解 決 し な い 。

CJ に 分 類 さ れ る 文 字 は 常 に NS に 解 決 す る 。 よ り 柔 軟 な 手 直 し の 機 構 が 提 供 さ れ る 。

東 南 ア ジ ア の 表 記 体 系 の 単 語 分 節 に 対 応 し な い 場 合 は 、 SA に 分 類 さ れ る 文 字 は AL に 解 決 す る 。 た だ し 、 Grapheme_Cluster_Break 特 性 の 値 が Extend か SpacingMark で あ る 文 字 は CM に 解 決 す る 。

SGXX に 分 類 さ れ る 文 字 は AL に 解 決 す る 。

以 下 の UCS の 範 囲 に あ る コ ー ド ポ イ ン ト は 、 文 字 が 割 り 当 て ら れ て い な く て も 決 ま っ た 特 性 値 を 持 つ 。 範 囲 | UAX #14 | UAX #11 | 説 明

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
U+20A0..U+20CF | PR [*1] | N [*2] | 通 貨 記 号
U+3400..U+4DBF | ID | W | CJK漢 字
U+4E00..U+9FFF | ID | W | CJK漢 字
U+D800..U+DFFF | AL (SG) | N | サ ロ ゲ ー ト
U+E000..U+F8FF | AL (XX) | F か N (A) | 私 用 領 域
U+F900..U+FAFF | ID | W | CJK漢 字
U+20000..U+2FFFD | ID | W | CJK漢 字
U+30000..U+3FFFD | ID | W | 古 漢 字
U+F0000..U+FFFFD | AL (XX) | F か N (A) | 私 用 領 域
U+100000..U+10FFFD | AL (XX) | F か N (A) | 私 用 領 域 そ の 他 未 割 り 当 て
| AL (XX) | N | 未 割 り 当 て 、
| | | 予 約 、 非 文 字
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
[*1] U+20A7 ペ セ タ 記 号 (PO)、 U+20B6 ト ゥ ー ル ・ リ ー ヴ ル 記 号
(PO)、 U+20BB ス カ ン デ ィ ナ ヴ ィ ア ・ マ ル ク 記 号 (PO)、 U+20BE ラ リ 記 号
(PO) を 除 く 。
[*2] U+20A9 ウ ォ ン 記 号 (H)、 U+20AC ユ ー ロ 記 号 (F か N (A)) を 除 く 。

• 一 般 カ テ ゴ リ 特 性 が

Mn、 Me、 Cc、 Cf、 Zl、 Zp の い ず れ か で あ る 文 字

は 、 前 進 を 伴 わ な い 文 字 と み な す 。

REFERENCES

[ CMOS ]

The Chicago Manual of Style, 15th edition. University of Chicago Press, 2003.

[ JIS X 4051 ]

JIS X 4051:2004 日 本 語 文 書 の 組 版 方 法 . 日 本 規 格 協 会 , 2004.

[ JLREQ ] 阿 南 康 宏 他 . 日 本 語 組 版 処 理 の 要 件 , W3C 技 術 ノ ー ト 2012年 4月 3日 . <http://www.w3.org/TR/2012/NOTE−jlreq−20120403/ja/>.
[ UAX #11]

A. Freytag (ed.) (2008−2009). Unicode Standard Annex #11: East Asian Width, Revisions 17−19. <http://unicode.org/reports/tr11/>.

[ UAX #14]

A. Freytag and A. Heninger (eds.) (2008−2015). Unicode Standard Annex #14: Unicode Line Breaking Algorithm, Revisions 22−35. <http://unicode.org/reports/tr14/>.

[ UAX #29]

Mark Davis (ed.) (2009−2013). Unicode Standard Annex #29: Unicode Text Segmentation, Revisions 15−23. <http://www.unicode.org/reports/tr29/>.

SEE ALSO

Text::LineFold~[ja], Text::Wrap, Unicode::GCString~[ja].

AUTHOR

Copyright (C) 2009−2018 Hatuka*nezumi − IKEDA Soji <hatuka(at)nezumi.nu>.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.