WORDをテキスト保存した時のルビの捕捉

2023/5/31 [16:23:28] (水) 天気

いや、あいかわらず雑なネタ。


.docx、ワードファイルではなくて、ワード文書を書式なしテキストで保存したテキストデータがたまにやってくる。基本的にシンプルなものが多くて流れ作業で済む。


…なんだけど、ルビのついたものがたまにあるのでその対応のメモ。

ワードの文書を書式なしtxtで書き出すとルビは


「これは漢字(かんじ)にルビがつく」


などと、ワード文書ではルビのところが、漢字と半角カッコでくくられたルビにわけられて保存されることになる。


そういや、以前もこんなことあったなあと思い出して、この雑記帖を検索したら出てきたのが

青空文庫のルビや傍点をHTMLタグに変換

https://t2aki.doncha.net/?id=1443167217

↑このエントリ。

青空文庫で使われている、青空記法は多くのひとに使われるように、よく練られているなあ、と感心した記事で、やっぱりさきほども改めて感心。


てことで、その時の記事からほぼ流用したのが以下のスクリプト。


ワードからテキスト保存のグループルビ用
my $_monoruby = sub{
    my $str = shift;
    my $err;
    if( $str =~ m!([\p{InCJKUnifiedIdeographs}]+)\(([\p{InHiragana}\p{InKatakana} ]+)\)!){
       my $k = $1; my $r = $2;
       my @k1 = split(//, $k);
       my @r1 = split(/ /, $r);
       $err = ’!!!RUBY ERROR!!!’ if( scalar(@k1) != scalar(@r1) );
       my @ruby;
       while( my $kanji = shift(@k1) ){
           my $yomi = shift(@r1);
           push(@ruby, sprintf qq{%s<rt>%s</rt>}, $kanji, $yomi);
       }
       return $err . ’<ruby>’ . join(’’, @ruby) . ’</ruby>’;
   }
   else{                                                                                                                                
       return $str;
   }
};


perlで、Unicodeブロックを使った正規表現で漢字やかなを拾えるんで大助かり。


ただ、こいつはビミョーで、漢字に続いて半角カッコがあるのは、ワードが吐き出したルビだけとは限らないし、ルビの対象となる漢字の範囲がこれだけだと特定できない。


青空記法では問題にならないんだけど、ワードの吐き出しに多くは求められない。

なので、あくまでも初校作成時の手助け程度、かな。



にしても。

まだ5インチと3.5インチのフロッピーディスクが現役で、MSDOSは3.0が出た頃、NECの98シリーズが人気だった頃だからもう40年近く前の昭和の頃。日本ダービーでシンボリルドルフが皇帝になった頃。

Wizardryというゲームがやりたくてパソコンを買って、その後競馬データをこねくり回すために使いだしたawkやperl、unix環境。言ってしまえば、遊びでやってた当時の余録で、還暦すぎても小遣い稼ぎができるんだから、なにが役に立つのか立たないのかなんて、その時にはわからないもんだわな。


仙人の弟子の雑巾がけ庭掃除のネタは深いものがあるなあ(しみじみ)

image
<<2026/1>>
    123
45678910
11121314151617
18192021222324
25262728293031
検索:

【最近の20件】