2013年11月18日

第3水準と第4水準漢字をInDesignタグに置き換える

 青空文庫はJIS 0208の漢字に対応している。JISでは0213で第3水準と第4水準に漢字が追加されたが、JIS 0208の漢字(JIS 83やJIS 90)のみに対応した古いアプリケーションとフォントに対応するために、JIS 0208で使われていない文字はそのまま使わずに、注意書きとして外字を説明している。ここでは第3水準と第4水準の漢字の青空文庫の注意書きからInDesignタグの漢字に変換する方法を取り上げる。

 たとえば夏目漱石の「夢十夜」にはいくつかの第3水準の漢字が指定されている。

※[#「目+爭」、第3水準1-88-85]
※[#「楫のつくり+戈」、第3水準1-84-66]


である。これらはそのまま取り込んでInDesign上で漢字を入力することも可能だが、注意書き部分をInDesignの文字コードタグに変換すれば、InDesignタグとして読み込んだとき、指定された第3水準と第4水準の漢字に変換してレイアウトできる。

  InDesignタグ上では、文字コードはユニコードで指定される。これは実際にInDesignから第3水準と第4水準漢字を指定してInDesignタグとして書き出すとわかる。青空文庫では「第3水準1-88-85」という具合に第3水準と第4水準漢字はX0213面区点番号で指定されている。「第3水準1-88-85」はユニコードでは<775C>と記述される。したがって、青空文庫の注意書きから不要な文字列を削除してユニコード番号をタグでくくった文字列に変換すれば良い。

131118-001.gif
*面区点「1-88-85」の文字。ユニコードは「775C」であることがわかる。

 第3水準と第4水準漢字は正規表現で次のように検索して置換する。

※[#(.+?)、第(.)水準(.)-(.+?)-(.+?)]  <\3-\4-\5>

これでタグ内にX0213面区点番号<1-88-85>が記述される。あとは<1-88-85>をユニコードの<775C>に変換すればよい。変換についてはX0213面区点からユニコード番号に変換するテーブルを別に用意して、Jeditで[複数一括置換]すればよい。ただし、この方法ではX0213面区点からユニコード番号に変換するテーブルが必要となる。都合のいい変換テーブルは探してもなかったので自作した。

女は黒い眼を眠そうに※[#「目+爭」、第3水準1-88-85]《みはっ》たまま、
  ↓
女は黒い眼を眠そうに<1-88-85>《みはっ》たまま、
  ↓
女は黒い眼を眠そうに<775C>《みはっ》たまま、


に変換すればいい。しかしルビの変換タグは

|?([一-龠々]+)《(.+?)》  <cr:1><crstr:\2>\1<cr:><crstr:>

としていて、このままでは外字タグを含んだ文字列を選択できない。ユニコード番号のタグで囲んだ部分はルビタグにはならない。ルビで囲みたい部分の先頭が漢字にならないからである。

 そこで外字タグのまえに漢字を設置して開示部分を変換する。第3水準と第4水準漢字の変換時にタグの前に漢字を挿入する。たとえば「亅(ケツ部)」のような滅多に使わない漢字で、いわゆるシフトJISに含まれている漢字である。

※[#(.+?)、第(.)水準(.)-(.+?)-(.+?)]  亅<\3-\4-\5>

という正規表現で検索置換を行う。そうすると、

女は黒い眼を眠そうに※[#「目+爭」、第3水準1-88-85]《みはっ》たまま、
  ↓
女は黒い眼を眠そうに亅<1-88-85>《みはっ》たまま、


というようになり、外字タグの前にシフトJIS漢字が追加される。文字の最初が漢字になるので、ルビタグの変換テキストの冒頭はそのまま「|」もしくは漢字となる。ただし漢字のあとにタグが続くことになるので

|?([一-龠々]+)<([$-9]+)>《(.+?)》  <cr:1><crstr:\3>\1<\2><cr:><crstr:>

131118-003.gif
*Jeditでの検索ウィンドウ。正規表現で置換する。

というように書き換える。最初は面区点のままでタグで囲んでいるので、「<([$-9]+)>」という文字列で外字タグを選択する。半角のタグで囲まれて数字とハイフンが含まれる文字列を選択している。わかりやすいように最初に「$」を選んでいるだけで、ハイフン(U+002D)の前の文字であればどの文字でもかまわない。

131118-002.gif
*ユニコードで「$」から「9」までの文字列。面区点を先にユニコードに変換してもする場合は「0-F」となる。


女は黒い眼を眠そうに亅<1-88-85>《みはっ》たまま、
  ↓
女は黒い眼を眠そうに<cr:1><crstr:みはっ>亅<1-88-85><cr:><crstr:>たまま、


と変換される。あとは普通に検索置換して「亅」を削除し、<1-88-85>内の文字をユニコードに変換すればよい。

 注意点はルビ文字の冒頭を漢字にすることは出来ても、実際の置換では複数の組み合わせが考えられる。

漢字 ルビタグ
漢字 ルビタグ 漢字
漢字 ルビタグ 漢字 ルビタグ


というように熟語内の外字の組み合わせて正規表現で選択する文字列を作成して一括して変換する。これでほとんどの第3水準と第4水準漢字をユニコードタグに置き換えて、ルビタグも追加したまま青空テキストを変換可能だ。InDesignで配置すると、ユニコードで指定した文字がInDesignで表示される。

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

メールアドレス:

ホームページアドレス:

コメント:

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


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

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

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