text-justify
をもう少しきれいにGeckoののtext-justify
は日本語対応が今ひとつなのでDOMを使って何とかしてみる。
日本語だときれいに両端が揃わないのは空白を取るための半角スペースが少ない為だ。そこで改善策として「日本語 English 日本語」のように英単語と日本語の間に半角スペースを足す。これならばテキストとしてもおかしくない。また句読点の後に改行を入れればそこでも空白を取ることが出来る。テキスト入力時に行っても良いのだが出来るだけプレーンなテキストを書きたいのでDOMを使って自動的に処理してしまえばよい。
function insert_space($node)
{
$children = $node->child_nodes();
foreach ($children as $p) {
if ($p->content) {
$p_contents = $p->content;
$p_contents = preg_replace("!([\!\x22-\x7e]+)!",
" $1 ", $p_contents);
$p_contents = str_replace("。", "。\n", $p_contents);
$p_contents = str_replace("、", "、\n", $p_contents);
$p->set_content($p_contents);
} else {
insert_space($p);
}
}
}
([\!\x22-\x7e]+)
部分がちょうど半角文字を表している。詳しくはUnicode表を見てもらいたい。デリミタがあるので「!」だけエスケープしてある。
これだけだとかぎ括弧の前後にも半角スペースが含まれてしまい少し間が抜けてしまうのでもう少し改良が必要かもしれない。
呼び出す際はDOMを使って任意のノードを選択し関数を呼び出せばよい。たとえばp
要素全てに関数を実行するなら
$ps = $xpath->xpath_eval("//xhtml:p");
foreach ($ps->nodeset as $p) {
insert_space($p);
}
といった感じだ。
連絡先、リンク、転載や複製などについては「サイト案内」をご覧ください。