タグ別アーカイブ: ChangeLog

カテゴリ別記事一覧ページを生成する


chalow で出力したページ用にカテゴリ別記事一覧ページがほしくなったので、
chalow の ChangeLogReader.pm を使い ChangeLog から自動生成するスクリプトを即興で書いてみました。
 
ソース
 
結果サンプル(装飾用 CSS)
 
色々だいぶ適当さがあるのはご愛嬌です。

文法チェック


GNU ChangeLog フォーマットでは TAB + * から始まる行が記事中にあってはいけないのか、chalow で文中で他のトピックとして扱われてしまいます。
 
なので、

cat ChangeLog | perl -ne ‘if(/\t[*]/ && !/\]:/){print “Line ” . $. . “:”;print;}’

として、

<tab>*

からはじまり、なおかつ

<tab>* …. [….]:

という書式を満たさない行を抽出して個別修正しました。

chalow 1.0rc4 から1.0rc6 に


思い立ってバージョンしました。
セキュリティ面で問題があるというわけではなかったのと、自分で好き勝手にカスタマイズしているので、手間を惜しんで更新していなかったのです。
 
こういった作業の時に diff は便利ですね。
 
ところで chalow 1.0 rc6 が出たのが 2005-08-21 ということなので、2年近く前の更新を今更やったわけですが、一番最初のエントリ(当時は非公開)が [2004-08-27] だという事実に驚きです..
 
光陰矢の如し。
これからもマイペースに続けるつもりなので、末永くよろしくお願いします。

Emacs で ChangeLog


Emacs で ChangeLog を編集しようと C-x 4 a としたときに日付が YYYY-MM-DD 形式にならないと、chalow に弾かれてしまう。
そういう方々は ~/.emacs を次の行を追加すると幸せになれます。

(setq add-log-time-format ‘add-log-iso8601-time-string)

ここ1年くらい Emacs (Mule)で ChangeLog を書いてきたが、実はずっとこれに悩んだまま書いていた。
Emacs21 (emcws) に乗り換えたついでに設定して、ようやくかゆいところに手が届いた感じ。
 
ネットで探してみると [[ChangeLog メモに曜日をいれる:http://namazu.org/~satoru/diary/20030115.html]] なんて人も。

chalow の書き方 from the source


ソースを眺めていて気づいた事。chalow って Hiki を踏襲してるのですね。
– = を二つ続けたもので挟むと打ち消し線
ex.
  = =Strike Me!!= = ←= と = の間の空白は除去する
result.
 Strike Me!!
– ‘ を二つ続けたもので挟むと強調(ex. 斜体)
ex.
  ‘ ‘Italic’ ‘ ← 空白は除去する
result.
Italic
– ‘ を三つ続けたもので挟むと太字
ex.
  ‘ ‘ ‘bold’ ‘ ‘ ← 空白は除去する
result.
bold
– – を行頭で四つ続けて書くと横線(horizon)
ex.
 – – – – ←空白は除去する
result.


– [ と ] をそれぞれ二つ続けたもので, リンク説明とURL を | で区切ったものを挟むとリンク.
ex.
  [ [ホーム|http://www.ecoop.net/] ] ←空白は除去する
result.
 ホーム
– || で始まる行で, 要素を || で区切ったものがテーブル構造になる
ex.
 ||Name||Gender||Age
 ||John||Male||30
 ||Jane||Female||18
result.

Name

Gender

Age

John

Male

30

Jane

Female

18

– 行頭から始まる > は引用
ex.
 > I wish I were a bird, I would fly to you.
result.

I wish I were a bird, I would fly to you.

– 行頭から始まる >> から, 行頭から始まる << までは複数行にわたる引用
ex.
 >>
  I wish I were a bird,
  I would fly to you.
 <<
result.

I wish I were a bird,
I would fly to you.

 
– ソースはこうなっている。

 ### 文字修飾と水平線。Hiki の記法を採用。
# コピペ注: 本当は ‘ と ‘, = と = の間は空白を含まない.
# chalow に解釈されるのを避けるため空白を挟んだ。
    s!’ ‘ ‘(.+?)’ ‘ ‘!<strong>$1</strong>!gms;
    s!’ ‘(.+?)’ ‘!<em>$1</em>!gms;
    s!= =(\S.+?)= =!<s>$1</s>!gms;
    s!^\-{4}!<hr>!gms;

    ### URL。Hiki の記法を採用。
    s!\[\[(.+?)\s*\|\s*(.+?)\]\]!get_link_str($1, $2)!gmse;

    ### 表。Hiki の記法を採用。
    s!(^(\|\|[^\n]+\n)+)!'<table><tr>’.
        (join(“<tr>”, (map {join(‘<td>’, split(/\|\|/ ,$_))} split(/\n/, $1))))
            .'</table>’!gsme;

    ### 引用 (quote): “>>” と “<<" で囲む
    s!^>>\n!<blockquote>!gm;
    s!^<<\n!</blockquote>!gm;

    ### 引用 (quote): “| …” か “> …”
    if ($remove_quote_mark == 1) {
        my $a;
        s!((^((\||>)[^\n]*)\n)+)!'<blockquote>’.($a = $1,
            $a =~ s{^(\||>)\s?}{}gm, $a).'</blockquote>’!gme;
    } else {
        s!((^((\||>)[^\n]*)\n)+)!<blockquote>$1</blockquote>!gmx;
    }

長い URL を改行する


やたら長いURL(Microsoft の MSDN とか)を ChangeLog に書くと、chalow で変換したときにページが横長になってしまうので何とかならないかと chalow ソースコードを眺めていたら、バックスラッシュで改行をエスケープしたものが使えるみたい。

http://www.example.org/foo/boo/woo.html

こういうURL を記事に書く時に改行する場合は、

http://www.example.org/foo/\
boo/woo.html

こういう風に行末にバックスラッシュを書くと、改行がエスケープされてリンク先が正しいままで改行表示ができる。
 
※具体的には以下のようなソースコードが生成される。

<a href=”http://www.example.org/foo/boo/woo.html”>http://www.example.org/foo/<br>
boo/woo.html</a>

chalow でくっつきトラックバック &amp; くっつき BBS を使うと File not exist xxxx.js が出まくる対策


– js への参照を CGI でラップしてしまうというのを、どこかで見たけど情報源を忘れたので自分で実装。
tb/tb_data.cgi:

#!/usr/bin/perl -w
 
use strict;
use CGI;
 
my $sDataDir = ‘./tb_data’;
 
my $query = CGI->new;
my $sTarget = $query->param(‘d’);
print $query->header(-type => ‘text/javascript’);
 
if($sTarget eq “” || $sTarget =~ /\//){ print ‘ ‘; exit; }
my $sFile = “${sDataDir}/${sTarget}.js”;
if( -e $sFile){
open(JS, $sFile);
flock(JS, 1);
print while (<JS>);
close(JS);
}

という CGI を作り、 cl.conf での参照を

<script language=”JavaScript” src=”tb/tb_data/<TMPL_VAR name=id>.js”>

から、

<script language=”JavaScript” src=”tb/tb_data.cgi?d=<TMPL_VAR name=id>”>

とすればよい。くっつき BBS の場合も同様にして CGI を用意してラップしてやればよい。

カテゴリ表記スタイルの変更


$ cat ChangeLog | perl -e ‘$b = 0; while(<>){ if($_ =~ /^$/ || $_ =~ /^[0-9]+/){ $b = 1; }elsif($b == 1){ $_ =~ s/\t\* ([^:]+) *: *([^:]+) *: *(.*$)/\t\* $2 [$1]: $3/; $b = 0; } print; }’ > ChangeLog.buf && mv ChangeLog.buf ChangeLog

日付フォーマットが数値から始まるものじゃないと通りませんが、

* category: title:

なエントリを、

* category [category]:

にする、と。perl なのは手抜き。