トップ «前の日記(2020-11-02) 最新 次の日記(2020-11-21)» 編集

日々の破片

著作一覧

2020-11-20

_ Prawnで禁則処理

Prawnを使ってPDFの作成を試しているのだが、どうも不自然で不思議に思ったら、行頭に「。」がある。つまり禁則処理が全然ないことに気付いた。そりゃそうか。

で、マニュアルを読むと、text/line_wrapping.rb の項で中国語の文章を単語で泣き別れしないようにZWSP(幅無し空白)を単語の区切りに挿入して与える例が出ている。
ということはこれを真似すれば良いのだろう。

禁則文字というか要は約物が直前の文字とくっついていれば良いわけで、それ以外は全部どこでちょん切っても良いのだから、約物一覧をまず探すと、確かOfficeの設定にあったはずだと思い出す。

で、Wordのオプションで文字体裁を見ると!%),.:;?]}¢°’”‰′″℃、。々〉》」』】〕゛゜ゝゞ・ヽヾ!%),.:;?]}。」、・゙゚¢が行頭禁則文字となっている。行末禁則文字もあって、「などを行末に置くことを禁止しているが、そんなルールは小学校では習わなかったので無視でいいや。

というわけで、あまり考えなくても、各文字の間にZWSPを挿入してから行頭禁則文字の直前のZWSPを削除すれば良さそうだから、次のようにテキストを変換してからPrawnへ与えれば良いのだなとやってみた。

text = text.gsub('',  Prawn::Text::ZWSP).gsub(/#{Prawn::Text::ZWSP}([!%\),.:;?\]}¢°’”‰′″℃、。々〉》」』】〕゛゜ゝゞ・ヽヾ!%=),.:;?]}。」、・゙゚¢])/, '\\1')

大体良いようだが、数字の連続の泣き別れ(1,000円が、1,と000円に行で分かれる)とかはどうなのかちょっと微妙な感じがする。とはいえその場合は、gsub(/[0-9]#{Prawn::Text::ZWSP}/, '\\1')すれば大体良いだろう(数字の直後の1文字まで含めて移動することになるが、単に数値だけが表示ということは無いはずだから問題なさそうだ。「,」と「.」の直前のZWSPは削除済みだからこれで良いはず。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|

ジェズイットを見習え