[Akiary/Weblog Like Style With Akiary]
Akiary本体の改造§v.0.61向けの軽い改造

isnot.jp/wiki [Permalink] [編集] [差分]

最終更新:2005-05-15 08:51:36

最近登場した新バージョン、0.61の改造をしたのでそのあたりを軽く解説します。

修正の概要

設定のデフォルト

設定ファイル(akiary.cfg)に新しい設定項目を増やしました。

newline
標準は「<br>」で、改行をbrに変換したうえで本文を一行につなげます。「\n」とすると、何も変換をしません。「<br>\n」なら、br変換は有効で、改行もそのまま生かします。日記を書くときに直接htmlのブロック要素を書きたいときは、「\n」にしておくことにより、不正なbrを抑制します。
charset
エンコーディング(文字コード)を指定します。標準は、「Shift_JIS」。

改行の処理

「改行⇒br変換機能」の改造。設定項目「newline」を変えることによって、変換機能を無効にすることができます。

正規表現の最適化

一部の正規表現を最適化しました。具体的には不要なeオプションを削除しました。多少のパフォーマンスアップが見込めます。

HTTPレスポンスヘッダ

HTTPレスポンスヘッダーにcharsetを付加します。設定ファイルで切替えます。

didアンカー

didアンカーを実現します。PermalinkやRSS出力に必須の改造です。

Akiaryタグの追加

新しいAkiaryタグを追加

<!--akiary_did-->
didそのものの文字列
<!--akiary_link-->
Permalink用のURL文字列。使い方:<a href="<!--akiary_link-->"><!--akiary_title--></a>
<!--akiary_title_2-->
<!--akiary_title-->と同じ文字列に変換されます。ただし、こちらは複数回使えます。
<!--akiary_w3cdtf-->
YYYY-MM-DD形式の日付(実験的)

元位置対象行数修正後対象行数内容
186188設定のデフォルト(akiary.cfg)
259926112改行の処理
291929612改行の処理
45974677正規表現の最適化
640864810改行の処理
77977897正規表現の最適化
85098607HTTPレスポンスヘッダ
96279707date2sdate()にno_tagオプションを追加
99728100529正規表現の最適化、no_tagオプションの動作
140216141128didアンカー、Akiaryタグの追加
1595816168正規表現の最適化
168515170627didアンカー Akiaryタグの追加
1775318089diary_dir_uri()の追加

パッチ

ダウンロード(Shift_JIS)

--- akiary061.cgi	2005-04-28 18:11:11.450040000 +0900
+++ akiary.cgi	2005-05-15 08:02:01.786945600 +0900
@@ -18,6 +18,8 @@
   {
    user_cfg_file=>{''=>'cfg/user.cfg'},
    time_zone=>'+0900',
+   newline => '<br>',
+   charset => 'SHIFT_JIS',
   };
 &parse_cfg_file($akiary_cfg_file,$acfg);
 
@@ -259,9 +261,12 @@
     $DATE{$dids[0]}=$date;
     $TITLE{$dids[0]}=$FORM{'title'};
     $BODY{$dids[0]}=$FORM{'body'};
-    $BODY{$dids[0]}=~s/\x0D\x0A/<br>/g; # 改行コード変換(Win)
-    $BODY{$dids[0]}=~s/\x0D/<br>/g;     # 改行コード変換(Mac)
-    $BODY{$dids[0]}=~s/\x0A/<br>/g;     # 改行コード変換(UNIX)
+    $BODY{$dids[0]}=~s/\x0D\x0A/\n/g; # 改行コード変換(Win)
+    $BODY{$dids[0]}=~s/\x0D/\n/g;     # 改行コード変換(Mac)
+    $BODY{$dids[0]}=~s/\x0A/\n/g;     # 改行コード変換(UNIX)
+    $newline = $acfg->{newline};
+    $newline =~ s/\\n/\n/g;
+    $BODY{$dids[0]} =~ s/\n/$newline/g;
 
     $file=&date2dfn($date);
 
@@ -291,9 +296,12 @@
     $DATE{$dids[0]}=$date;
     $TITLE{$dids[0]}=$FORM{'title'};
     $BODY{$dids[0]}=$FORM{'body'};
-    $BODY{$dids[0]}=~s/\x0D\x0A/<br>/g; # 改行コード変換(Win)
-    $BODY{$dids[0]}=~s/\x0D/<br>/g;     # 改行コード変換(Mac)
-    $BODY{$dids[0]}=~s/\x0A/<br>/g;     # 改行コード変換(UNIX)
+    $BODY{$dids[0]}=~s/\x0D\x0A/\n/g; # 改行コード変換(Win)
+    $BODY{$dids[0]}=~s/\x0D/\n/g;     # 改行コード変換(Mac)
+    $BODY{$dids[0]}=~s/\x0A/\n/g;     # 改行コード変換(UNIX)
+    $newline = $acfg->{newline};
+    $newline =~ s/\\n/\n/g;
+    $BODY{$dids[0]} =~ s/\n/$newline/g;
 
     $file=&date2dfn($date);
 
@@ -459,7 +467,7 @@
     $t=~s/<TMPL_IF NAME="(\w+)">(.*?)<\/TMPL_IF>/($p->{$1})?$2:''/egs;
 
     # <TMPL_VAR NAME="name">
-    $t=~s/<TMPL_VAR NAME="(\w+)">/$p->{$1}/eg;
+    $t=~s/<TMPL_VAR NAME="(\w+)">/$p->{$1}/g;
     return($t);
 }
 
@@ -640,8 +648,10 @@
     ($date,$title,$body)
 	=($date{$FORM{'did'}},$title{$FORM{'did'}},$body{$FORM{'did'}});
     ($syear,$smon,$smday)=($date=~/^(\d{4})(\d{2})(\d{2})/);
-    $body=~tr/\x0D\x0A//d; # 改行コード削除
-    $body=~s/<br>/\n/ig;
+	if ($acfg->{newline} eq '<br>') {
+	    $body=~tr/\x0D\x0A//d; # 改行コード削除
+	    $body=~s/<br>/\n/ig;
+	}
 
     # ページ表示
     $html=&HtmlHeader("修正");
@@ -779,7 +789,7 @@
 		   'akiary.cgiでデフォルト値を設定して下さい。');
 	}
 	$v =~ s/"//g;
-	$v =~ s/\$ENV\{'(\w+)'\}/$ENV{$1}/eg;
+	$v =~ s/\$ENV\{'(\w+)'\}/$ENV{$1}/g;
 
 	if ($ke =~ /\{"(\w*)"\}\{"(\w*)"\}/) {
 	    ${ $cfg->{$k} }{$1}{$2}=$v;
@@ -850,9 +860,7 @@
 # Print HTTP
 #
 sub PrintHTTP{
-    print "Content-Type: text/html\n";
-    print "\n";
-    print $_[0];
+    print "Content-Type:text/html;charset=", $acfg->{charset}, "\n\n", $_[0];
 }
 
 #
@@ -962,7 +970,7 @@
 #    デフォルトは"%Y0年%M0月%D0日(%W0)"
 #
 sub date2sdate{
-    local($date,$format)=@_;
+    local($date,$format,$no_tag)=@_;
     local($y0,$m0,$d0,$w);
     local(@m2,@m3,@w0,@w1,@w2);
     local($color,$class,$sdate);
@@ -997,28 +1005,29 @@
     $sdate=~s/%Y2/$y0-1988/eg;                # 平成元号
     $sdate=~s/%M0/sprintf("%d",$m0)/eg;   # 月
     $sdate=~s/%M1/sprintf("%02d",$m0)/eg; # 月(0付き)
-    $sdate=~s/%M2/$m2[$m0-1]/eg;          # 月(英語短縮)
-    $sdate=~s/%M3/$m3[$m0-1]/eg;          # 月(英語)
+    $sdate=~s/%M2/$m2[$m0-1]/g;          # 月(英語短縮)
+    $sdate=~s/%M3/$m3[$m0-1]/g;          # 月(英語)
     $sdate=~s/%D0/sprintf("%d",$d0)/eg;   # 日
     $sdate=~s/%D1/sprintf("%02d",$d0)/eg; # 日(0付き)
-    $sdate=~s/%W0/$w0[$w]/eg; # 曜日
-    $sdate=~s/%W1/$w1[$w]/eg; # 曜日(英語短縮)
-    $sdate=~s/%W2/$w2[$w]/eg; # 曜日(英語)
+    $sdate=~s/%W0/$w0[$w]/g; # 曜日
+    $sdate=~s/%W1/$w1[$w]/g; # 曜日(英語短縮)
+    $sdate=~s/%W2/$w2[$w]/g; # 曜日(英語)
+
+    if ($no_tag) {
 
-    if ($CFG{'date_color_tag'} eq 'font'){
+    } elsif ($CFG{'date_color_tag'} eq 'font') {
 	$color="#000000";              # 平日の色
 	$color="#DD0000" if ($w == 0); # 日曜日の色
 	$color="#3333FF" if ($w == 6); # 土曜日の色
 	$sdate="<font color=\"$color\">$sdate</font>";
-    } else {
+    } elsif ($CFG{'date_color_tag'} eq 'span') {
 	$class="weekday";               # 平日の色
 	$class="sunday"   if ($w == 0); # 日曜日の色
 	$class="saturday" if ($w == 6); # 土曜日の色
 	$sdate="<span class=\"$class\">$sdate</span>";
     }
-
     # リターン
-    return("$sdate");
+    return $sdate;
 }
 
 #
@@ -1402,16 +1411,28 @@
 
 	# body部作成
 	foreach(@k){
-	    print FH "<a name=\"$bndate{$_}\"></a>\n";
+	    print FH qq(<a name="$bndate{$_}"></a><a name="$_"></a>);
 	    print FH "<!--akiary_diary did=$_ date=$bndate{$_}-->";
 	    $tmp=$tmpbnbody;
 	    # 日付
 	    $dates=&date2sdate($bndate{$_});
-	    $tmp=~s/<!--\s*akiary_date\s*-->/$dates/;
+	    $w3cdtf=&date2sdate($bndate{$_}, '%Y0-%M1-%D1', 1);
+	    $tmp=~s/<!--\s*akiary_date\s*-->/$dates/g;
+	    $tmp=~s/<!--\s*akiary_w3cdtf\s*-->/$w3cdtf/g;
 	    # タイトル
 	    $tmp=~s/<!--\s*akiary_title\s*-->/<!--akiary_title-->$bntitle{$_}<!--\/akiary_title-->/;
+	    $tmp=~s/<!--\s*akiary_title_2\s*-->/$bntitle{$_}/g;
 	    # 日記本文
 	    $tmp=~s/<!--\s*akiary_body\s*-->/<!--akiary_body-->$bnbody{$_}<!--\/akiary_body-->/;
+	    # 生did
+	    $tmp =~ s/<!--\s*akiary_did\s*-->/$_/g;
+	    # Permalink
+		$bn_file = $bndate{$_};
+		$bn_file =~ s/^(\d{6}).*/$1.html/;
+		$base_uri = diary_dir_uri();
+		$permalink = $base_uri . $bn_file . '#' . $_;
+	    $tmp =~ s/<!--\s*akiary_link\s*-->/$permalink/g;
+
 	    print FH "$tmp";
 	    print FH "<!--/akiary_diary-->\n";
 	}
@@ -1595,8 +1616,8 @@
 	    $tmp =~ s/%Y2/$y-1988/eg;                # 元号
 	    $tmp =~ s/%M0/sprintf("%d",$m)/eg;   # 月
 	    $tmp =~ s/%M1/sprintf("%02d",$m)/eg; # 月(0付き)
-	    $tmp =~ s/%M2/$m2[$m-1]/eg;          # 月(英語短縮)
-	    $tmp =~ s/%M3/$m3[$m-1]/eg;          # 月(英語)
+	    $tmp =~ s/%M2/$m2[$m-1]/g;          # 月(英語短縮)
+	    $tmp =~ s/%M3/$m3[$m-1]/g;          # 月(英語)
 	    if (defined($index{$y})){
 		$index{$y} .= $CFG{'index_format_between_months'};
 	    }
@@ -1685,15 +1706,27 @@
     @k=splice(@k,-$latest_times,$latest_times);
     @k=reverse(@k) if ($reverse==1);
     foreach(@k){
-	$ret.="<a name=\"$date{$_}\"></a>\n";
+	$ret .= qq(<a name="$date{$_}"></a><a name="$_"></a>);
 	$tmp=$match;
 	# 日付
 	$dates=&date2sdate($date{$_});
+	$w3cdtf=&date2sdate($date{$_}, '%Y0-%M1-%D1', 1);
 	$tmp=~s/<!--\s*akiary_date\s*-->/$dates/g;
+	$tmp=~s/<!--\s*akiary_w3cdtf\s*-->/$w3cdtf/g;
 	# タイトル
-	$tmp=~s/<!--\s*akiary_title\s*-->/$title{$_}/g;
+	$tmp=~s/<!--\s*akiary_title\s*-->/$title{$_}/;
+	$tmp=~s/<!--\s*akiary_title_2\s*-->/$title{$_}/g;
 	# 日記本文
-	$tmp=~s/<!--\s*akiary_body\s*-->/$body{$_}/g;
+	$tmp=~s/<!--\s*akiary_body\s*-->/$body{$_}/;
+	# 生did
+	$tmp =~ s/<!--\s*akiary_did\s*-->/$_/g;
+	# Permalink
+	$bn_file = $date{$_};
+	$bn_file =~ s/^(\d{6}).*/$1.html/;
+	$base_uri = diary_dir_uri();
+	$permalink = $base_uri . $bn_file . '#' . $_;
+	$tmp =~ s/<!--\s*akiary_link\s*-->/$permalink/g;
+
 	$ret.=$tmp;
     }
 
@@ -1775,3 +1808,9 @@
     }
     return("$y${m}01.html");
 }
+
+sub diary_dir_uri {
+	my $uri = $ENV{'SCRIPT_NAME'};
+	$uri =~ s!^(.*?)(?:[\./]+?)(?:\w+\.cgi|/)$!$1!;
+	return 'http://' . $ENV{'HTTP_HOST'} . $uri . '/' . (($dcfg->{'diary_dir'} eq './') ? '' : $dcfg->{'diary_dir'});
+}

[FrontPage]

いしだなおと it@isnot.jp