2013年11月12日

青空文庫ルビを正規表現でInDesignルビに変換する

 レイアウトはInDesign側で行うので、InDesignタグで青空文庫の記号で注意書きしてある部分をエディタで変換する。変換は正規表現を使う。というか、正規表現を使わないと変換は出来ない。

 正規表現という呼び名は途轍もなく威丈高に感じて敬遠してしまう。多分「正」という文字が距離感を生み出しているのだろう。もともと「regular expression」といい、その訳語として「正規表現」という言葉が使われている。的を得た訳語とはいいがたい。「regular expression」は平たく訳すと「定期的な表現」という意味なので、その方が実際の使い方に即している。ただ「定期表現」とすると、在り来たりの言葉になり有り難みは著しく薄れてしまう。

  正規表現とは何かというと

パターンでの検索と置換

と言ってしまう方がわかりやすい。文字列を一定のパターンとして選択し、それを別のパターンに置き換えるのである。どのようにしてパターンを作成するのかということがわかれば、それほど難しくはない。少なくとも青空文庫テキストをInDesignタグに変換するぐらいであればである。

 青空文庫のルビをInDesignタグに変換する方法は、ネットで調べると

|?([一-龠]+)《(.+?)》

と書かれていることが多い。これは検索時のパターンである。まずルビを入力する漢字を特定する。それが「|?([一-龠]+)」で、その後に続くルビ文字を《(.+?)》で特定する。最初の「|」は|で始まる文字。青空文庫で漢字が続き途中からルビを打つ場合は

中途|半端《はんぱ》

というように指定する。「?」は前後の指定のいずれかを選択するもの。([一-龠]+)は複数の漢字文字列のグループを指定している。(…)は置換するとき使用する文字列で表わす。[…]は文字集合を指定してして、ここではユニコードのCJK統合漢字の最初と最後の方の文字で半角ハイフンで指定している。「+」はCJK統合漢字が複数でもオーケーという意味である。

 《(.+?)》ではルビ文字が「《》」内にあるので、その文字集合を拾う。「.」は任意の1文字を指定し、「+」で複数の文字を許容する。そのままでは同じ行にある別の《》まで認識するので「?」でパターンを1回以内に限定している。これで青空文庫形式のルビ記述を選択できる。

 これをInDesignタグに変換する。InDesignタグは冗書きと略書きの二種類がある。冗書きにすると詳しい指定が可能だが、テキストの属性をInDesignで指定するのであれば、略書きで十分である。ルビの仕様はInDesignの段落スタイルで行えば良い。略書きのルビタグは

<cr:1><crstr:ルビ文字>親文字<cr:><crstr:>

という文字列に変換することになる。最初にルビ文字が置かれるので、通常の変換では不可能である。正規表現では文字集合(…)を置換する文字列に任意に割り当てることができる。なおかつ文字集合(…)に文字列に追加することができるので、ルビ文字を親文字の前に表示することが可能になる。Jeditでの置換文字は次のようになる。

<cr:1><crstr:\2>\1<cr:><crstr:>
          ↓
中途<cr:1><crstr:はんぱ>半端<cr:><crstr:>

 Jeditで検索テキスト内の文字集合(…)を置換文字列に反映するには、退避修飾(エスケープ)の「\」に数字を追加して指定する。数字は検索したときの文字集合(…)の番号になる。つまりルビ文字の文字集合(…)は2つめの文字集合になっているので、それをルビタグ内に指定する。親文字はタグ内に記述する。

 ルビの正規表現で「|?([一-龠]+)《(.+?)》」を使えば事足りるかというと、必ずしもそうではない。たとえば

益々《ますます》

というルビ指定があった場合は、「|?([一-龠]+)《(.+?)》」ではヒットしない。というのは「々」は漢字では記号扱いなので、[一-龠]内には含まれていないのである。またユニコードのCJK統合漢字は「一」から始まるが、最後の文字は9FCCの文字。「龠」は9FA0なので9FA1以降の文字は対象外になる。もちろんこの辺りの文字はまず使うことがないので、「龠」で締めくくってもまず問題はない。

131102-02.gif

   ↓

131102-03.gif
*最後の文字がなぜ「龠」なのかはわからない。「鿆」でも特に問題なく使えそうである。

131102-01.gif
*「々」のユニコードは3005で「一」は4E00なので[一-龠]には含まれない。含まれていない記号をルビに追加する場合は検索文字集合にそれらの文字を追加する。


 なお、[一-龠]ユニコードの外にある「々」の文字を検索文字に追加する場合は

|?([一-龠々]+)《(.+?)》
|?([々?一-龠]+)《(.+?)》


とする。これであわせて選択可能になる。次はInDesignでのルビの設定について取り上げる。

 


posted by jink0222 at 21:31 | Comment(0) | TrackBack(0) | InDesignタグで青空文庫 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。