2023-04-15

GNU BISONのNEWSファイルをTW5に取り込んでみる

BISON(とFLEX)を使いこなすようになるため、情報を収集しています。まだ学び始めたばかりなので、バージョンに拘る必要はないと思いますが、機能追加とかバグ修正の情報は押さえておきたいところです。また以前は利用できた機能が、新しいバージョンでは推奨されなくなることもあるかもしれません。そこでバージョンごとの情報をまとめた「リリースノート」のようなものを読んでみようと考えました。


GNUが提供しているソフトウェアは「NEWS」というファイルにリリースされたバージョンごとの情報が書かれており、BISONにもあります。かなり大きなファイルですので、読むには工夫が必要だと思いました。これまでも情報の整理にはTW5を利用しているので、これで何とかしてみます。

 

方向性としては、NEWSファイルをバージョン毎に分割して、それぞれをTW5のTiddlerに入れようと思います。ただし手作業でやっていたら、間違いも起こしますし、それ以前に、単純ではあるのですが、膨大な作業量を前にして、やる気を失ってしまうでしょう。そこでTW5にインポートできるJSON形式ファイルを生成して、一気に取り込もうと思います。

 

まずNEWSファイルは、次のような形式で書かれています。

 * Noteworthy changes in release 3.8.2 (2021-09-25) [stable]

  Fixed portability issues of bison on Cygwin.

  Improvements in glr2.cc: add support for custom error messages (`%define
  parse.error custom`), allow linking several parsers together.
 

UNIXのコマンド「csplit」を使えば、「Noteworthy changes in release」のような行を目印にファイルを分割できます。次に、分割した個々のファイルをJSON形式にします。TW5にインポート出来るJSON形式ファイルの構成は、何か適当なTiddlerをエクスポートしたファイルを覗いてみれば見当がつきます。少なくとも「title」、「tags」、「text」があれば良さそうです。また「type」は「text/plain」としておきます。

 

分割されたファイルをJSON形式に変換するスクリプトはAWKを使いました。あまり複雑ではありませんが、エスケープ文字の扱いなどに工夫が必要でした。最終的には、以下のようなスクリプトになりました。

#!/usr/bin/awk -f
BEGIN {
    tags = "\"NEWS BISON\"";
    type = "\"text/plain\"";
    text = "\"";
}
{
    gsub("\\\\", "\\\\");
    gsub("\"", "\\\"");
    gsub("\f", "");
    text = text $0 "\\n";
}
NR == 1 {
    sub("^.*Noteworthy changes in *", "");
    sub(" *\\[.*$", "");
    n = split($0, x, "[()]");
    if (n == 1) x[2] = "YYYY-MM-DD";
    title = "\"" x[2] " " x[1] "\"";
}
END {
    text = text "\"";

    printf("{\"title\":%s,", title);
    printf("\"tags\":%s,",   tags);
    printf("\"type\":%s,",   type);
    printf("\"text\":%s},\n", text);
}
#[EOF]

こうして作成したJSON形式ファイルを、ひとつのファイルに結合し、微調整を加えてからTW5にインポートしました。

 

スクリプト作成に若干手間取りましたが、NEWSをTW5に取り込めたので、次は一つずつ読んでいくことになります。これは地道に読んでいくしかないでしょう。

0 件のコメント:

コメントを投稿