HTML::Spacing::JA - arrange spacing in ja text
use HTML::Spacing::JA;
$ja = HTML::Spacing::JA->new();
$output = $ja->parse($input);
HTMLのテキスト(preやcodeを除く)のスペースを補正します。日本語文章 中、英単語の両端にスペースをつける人 のような補正で す。括弧と句読点に含まれるスペースも補正します。font-feature-settings を使うので、cssにotfを指定する必要があります。
body {
font-family: "Noto Sans CJK JP", sans-serif;
}
括弧と句読点の配置は、日本語組版処理の要件 の 3.1.2 句読点や括弧類などの基本的な 配置方法、3.1.4 始め括弧類〜が連続する場合の配置方法に合わせました。例 として同文書の図69を示します。
- …である。」この… 句読点の後ろに終わり括弧類が連続
- …である)。この… 終わり括弧類の後ろに句読点が連続
- …である、「この… 読点類の後ろに始め括弧類が連続
- …である」「この… 終わり括弧類の後ろに始め括弧類が連続
- …である「『この… 始め括弧類の後ろに始め括弧類が連続
- …である)」この… 終わり括弧類の後ろに終わり括弧類が連続
- …「編集」・「校正」… 括弧類と中点類が連続
-
parse($html)
入力_$html_のスペースを補正して出力します。
-
output_tag($tag)
出力を_$tag_で囲みます。デフォルトは "p" です。 style のような属性を加えるにはリファレンスを使います。
$ja->output_tag([ "p", style => "text-align: justify" ]);
-
lang_spacing($yesno)
欧文の語と和文がスペースで区切られていないとき、 区切りに"wordspace"を置きます。 デフォルトは1です。
-
number_spacing($yesno)
数と和文がスペースで区切られていないとき、 区切りに"thinspace"を置きます。 デフォルトは1です。
-
punct_spacing($yesno)
日本語の句読点や括弧等の字体のアキ ("palt1"で詰められる) を "enspace"で補います。デフォルトは1です。
-
uri_ascii($yesno)
URIに使える文字をASCIIに制限します。デフォルトは1です。
-
re_token($hash)
語とそのクラスを定義します。 クラスには W (欧文)、N (数)、J (日本語) の3つがあります。 次の例は欧文を含む複雑な語を日本語のトークンにします。
$ja->re_token({ J => qr/ Official髭男dism /x });
-
re_pre($regex)
デフォルトは
qr/^pre$/
です。 -
re_code($regex)
デフォルトは
qr/^code$/
です。 -
enspace($html)
二分アキです。デフォルトは20H (空白)とletter-spacingで作ります。
-
wordspace($html)
四分アキです。デフォルトは20Hです。
-
thinspace($html)
小さなスペースです。デフォルトは '' (空の文字列)です。
-
palt0($html)
デフォルトは
{ style => { 'font-feature-settings' => '"palt" 0' } }
です。 -
palt1($html)
デフォルトは
{ style => { 'font-feature-settings' => '"palt" 1' } }
です。 -
keep_global($yesno)
_$yesno_を非0にすると、グローバル変数を開放しません。語とトークンの対 応を固定します。デフォルトは0です。(デバグ用です。)
-
verbose($level)
ヒントを出力します。デフォルトは0です。(デバグ用です。)
以下は、日本語組版処理の要件の文字クラス一覧 をPerlのユーザ定 義文字特性の形で定義 したものです。縦書を扱わないので、いくつか直しました。
-
InClosingBrackets
cl-02です。 使いません。代りに
\p{Pe}
と\p{Pf}
を使います。 -
InColon
"InMiddleDots" (cl-05)を分けました。
-
InCommas
cl-07です。
-
InDividingPunctuationMarks
cl-04です。
-
InEnding
おわりの記号類です。
\p{Pe}
,\p{Pf}
, "InColon", "InFullStops", "InCommas"、および"InDividingPunctuationMarks"で す。 -
InEndingJ
InEndingのうち日本語のフォントに含まれるもの。
-
InEndingW
InEndingのうち欧文のフォントに含まれるもの。
-
InFullStops
cl-06です。
-
InGroupedNumerals
cl-24です。
-
InHyphens
cl-03です。
-
InInseparableCharacters
cl-08です。
-
InIterationMarks
cl-09です。 使いません。
-
InJapanese
日本語の文字"InJapaneseCharacters"から記号類"InPunctuations"を除い たものです。
-
InJapaneseCharacters
すべての日本語の文字です。異字体のセレクタも含みます。
-
InMiddleDots
cl-05の一部、横書きの中点類のみ です。
-
InMiddleDotsJ
"InMiddleDots"のうち日本語のフォントに含まれるもの。
-
InMiddleDotsW
"InMiddleDots"のうち欧文のフォントに含まれるもの。
-
InNeutral
欧文の文字で日本語との境界にスペースを追加しないもの。 (入力されたスペースは除きます。)
-
InNumbers
数の類です。"InGroupedNumerals"からスペースを除きました。
-
InOpeningBrackets
cl-01です。 使いません。代わりに
\p{Ps}
と\p{Pi}
を使います。 -
InPUA
PUA (私用面)です。
-
InPostfixedAbbreviations
cl-13です。
-
InPrefixedAbbreviations
cl-12です。
-
InPunctuations
すべての記号類です。
-
InSpaces
スペース類です。
\s
(utf8::IsSpace) と "InSpace2" です。 -
InSpace2
内部スペース類です。
-
InStarting
始まりの記号類です。
\p{Ps}
と\p{Pi}
です。 -
InStartingJ
"InStarting"のうち日本語のフォントに含まれるもの。
-
InStartingW
"InStarting"のうち欧文のフォントに含まれるもの。
-
InWestern
欧文の語を構成する文字です。"InJapaneseCharacters"と重複せず、 "InNumbers"を含みます。
-
InWesternCharacters
cl-27です。たとえば、ここに
AC00\tD7AF
(Hangul Syllables) を追加し、和文の中に안녕하세요と書くと 前後にスペースが付きます。 -
IsEmSpace
-
IsEnSpace
-
IsThinSpace
-
IsWordSpace
内部スペースの各文字に一致します。
-
$PUA_free
このモジュールで使用するPUA領域の始まりのアドレスです。 デフォルトは1000000です。
-
%PUA
語 (HTMLコード) のハッシュです。キーは語のトークンです。
-
%TOKEN
トークン (PUA から割り当てた文字コード) のハッシュです。キーは語です。
-
%CLASS
'W' (語) や 'N' (数) で分類したトークンのハッシュです。キーは分類です。
Copyright (C) KUBO, Koichi.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
KUBO, Koichi k@obuk.org