ツイートのサイト埋め込み
2012-11-11-1 / カテゴリ: [chalow] / [permlink]


ツイッタードリブン(笑)で情報を得ることが多くなってきた(けどさっぱりまとめてない…)ので。

と思って、ChangeLogへの記述量が少ないショートコード形式
[tweet https://twitter.com/zaki_hmkc/status/267290953054814208 lang='ja']
chalowで変換してやろうと思ったけど、これツイート本文を別途取得する必要があるので面倒で却下。

じゃあHTML形式のコードで(ChangeLogへの記述量多いけど)いいかとプラグインを書き始めたら、これってそのまんまじゃん。

でChangeLogの記述内容をそのまんまhtml出力する方法ってなかったかなとchalowのREADME見たら[esc]ってHTML直書きの書式があった(笑)
というか書き溜めたChangeLog見返しても[esc]って1回も使ってないのな。全然知らなかったわorz

<script>の読み込みが埋め込みのたびに発生してる感じがするけど追々…
Referrer (Inside): [2012-11-10-1]

Highslide JSを入れてみた
2011-07-01-1 / カテゴリ: [chalow] / [permlink]

画像をかっこよくみせるjsライブラリ。
Highslide JS - JavaScript thumbnail viewer

参考にしたのは「小粋空間: Highslide JS でサムネイル画像を拡大表示する」で、使ったのは version 4.1.12

テスト


変更点
--- cl.conf	(revision 1856)
+++ cl.conf	(revision 1857)
@@ -157,12 +157,14 @@
 <script type="text/javascript" src="scripts/shBrushPerl.js"></script>
 <script type="text/javascript" src="scripts/shBrushSql.js"></script>
 <script type="text/javascript" src="scripts/shBrushXml.js"></script>
+<script type="text/javascript" src="highslide/highslide.js"></script>
 <link type="text/css" rel="stylesheet" href="styles/shCore.css"/>
 <link type="text/css" rel="stylesheet" href="styles/shThemeDefault.css"/>
 <script type="text/javascript">
     SyntaxHighlighter.all();
     SyntaxHighlighter.config.tagName = "pre";
     SyntaxHighlighter.defaults['toolbar'] = false;
+    hs.graphicsDir = 'highslide/graphics/';
 </script>
 __HEADER__
 
@@ -641,3 +643,9 @@
     my ($txt, $link) = @_;
     return qq(<a href="$link">$txt</a>);
 }
+
+sub jsimg {
+    my ($img) = @_;
+    (my $thumb = $img)=~ s/(\..+)$/_s$1/;
+    return qq(<a href="$img" class="highslide" onclick="return hs.expand(this)"><img src="$thumb" /></a>);
+}

Changelog内の記述
{{jsimg("img/2011-07-01-1.jpg")}}
指定ファイル名のオリジナルファイルと、拡張し手前に"_s"をつけたサムネ用画像を用意しておく(↑ならimg/2011-07-01-1_s.jpg)

あ、Nexus S(白)が結構安価だったので買っちゃいました!NFC動かしたくて。

てわけで、暇を見つけて写真系はこれ使ってそのうち修正する。

SyntaxHighlighter用の書式で開始行数指定とハイライトを有効にしてみた
2011-06-16-1 / カテゴリ: [chalow] / [permlink]

最近こればっかだな

SyntaxHighlighter 3.0.83自身は、
<pre class="brush: text; first-line: 2; highlighter: [2,3,4]">
...
</pre>
とかで変更できるので、chalow+SyntaxHighlighterにも対応させてみた。

2,4行目をハイライト (h:2,4)
1行目
2行目
3行目
4行目

開始2行目で、2,3行目をハイライト (f:2 h:2,3)
2行目
3行目
4行目
5行目

言語指定で (perl f:3 h:4)
while (<>) {
  print unless /^$/;
}

こんな感じ。ベースは→[2011-01-23-2]
--- chalow	(revision 1845)
+++ chalow	(revision 1846)
@@ -1359,7 +1359,7 @@
 
     ### ソースエスケープ - "&" や "<" などを置換し pre を付ける
     $num_of_escaped_src = 0;
-    $$strp =~ s!\[src(\s\w+)?\](.*?)\[/src\]!
+    $$strp =~ s!\[src(?:\s([\s\w:,]+))?\](.*?)\[/src\]!
$escaped_src{++$num_of_escaped_src} = $2,
$escaped_src_type{$num_of_escaped_src} = $1,
$escaped_src{$num_of_escaped_src} =~ s/&/&amp;/g,
@@ -1381,14 +1381,33 @@
     $$strp =~ s|\x7\x13(\d+)\x3|eval($escaped_plugin{$1})|ge;
     ### ソースアンエスケープ - pre 追加
     # todo(SyntaxHilighter)
-    $$strp =~ s|\x6\x13(\d+)\x3|"<pre class=\"brush:".(length $escaped_src_type{$1}? $escaped_src_type{$1}: "plain").";\">$escaped_src{$1}</pre>"|eg;
+    $$strp =~ s|\x6\x13(\d+)\x3|"<pre class=\"brush: ".get_syntax_opt($escaped_src_type{$1}).";\">$escaped_src{$1}</pre>"|eg;
     # <p>は使ってないので
     #$$strp =~ s|\x6\x13(\d+)\x3|</p><pre>$escaped_src{$1}</pre><p>|g;
     ### HTML アンエスケープ
     $$strp =~ s|\x5\x13(\d+)\x3|$escaped_string{$1}|g;
 }
 
+sub get_syntax_opt {
+  my $lang = "plain";
+  my @opts;
+  for (split /\s+/, shift) {
+    if (/^[^:]+$/) {
+      $lang = $_;
+    }
+    if (/f:(\d+)/) {
+      push @opts, "first-line: $1";
+    }
+    if (/h:([\d,]+)/) {
+      my $t = $1;
+      push @opts, "highlight: [$1]";
+    }
+  }
+  unshift @opts, $lang;
+  return join "; ", @opts;
+}
 
+
 ### inside referrer のリンク作成
 sub get_inside_ref {
     my ($id) = @_;

ついでにツールバーも消した。

日記内のリスト対応(割と適当)してみた
2011-06-13-1 / カテゴリ: [chalow] / [permlink]

リスト表記してみた
- 項目
- 項目
-- 項目2段階目
--- 項目3段階目
---- 項目4段階目
- てへ
こんな感じ
  • 項目
  • 項目
    • 項目2段階目
      • 項目3段階目
        • 項目4段階目
  • てへ


----
なら罫線

ソースの変更点はこんな感じ。
標準だとハイフン4文字のみで罫線になってしまうので、^----$ に制限を追加。あとはちょっと適当です。
--- chalow	(revision 1840)
+++ chalow	(working copy)
@@ -517,7 +518,7 @@
     s!'''(.+?)'''!<strong>$1</strong>!gms;
     s!''(.+?)''!<em>$1</em>!gms;
     s!==(\S.+?)==!<s>$1</s>!gms;
-    s!^\-{4}!<hr />!gms;
+    s!^\-{4}$!<hr />!gms;
 
     ### URL。Hiki の記法を採用。
     s!\[\[(.+?)\s*\|\s*(.+?)\]\]!get_link_str($1, $2)!gmse;
@@ -544,6 +545,10 @@
     ### ヘッダ(Heading): "^= string" <h3>から</h3>
     s!^(=+)\s*(.*)!my $a=2+length $1; $a=($a<7)?$a:7; "<h$a>".$2."</h$a>"!gme;
 
+    ### リスト
+    # ^\t-+\s に反応。
+    $_ = listing($_);
+
     ### 日付で参照リンク
     # date ref : [YYYY-MM-DD]
     $_ = datestr2anchor($_);
@@ -577,11 +582,30 @@
 
     s!</pre><br />!</pre>!g;	# ad hoc
     s!</h(\d)><br />!</h$1>!g;
-
+    s!<ul><br />!<ul>!g;    # ad hoc
+    s!</li><br />!</li>!g;  # ad hoc
+    s!</ul><br />!</ul>!g;  # ad hoc
     return $_;
 }
 
+### リスト変換
+sub listing {
+  my $str = shift;
+  $str =~ s!(?:^(-+\s+.*))!<li>$1</li>!gm;
+  $str =~ s!((?:<li>.*</li>\n)+)!listing_f($1)!egm;
+  return $str;
+}
+sub listing_f {
+  my $str = shift;
 
+  $str =~ s!<li>-!<li>!gm;
+  $str = "<ul>".$str."</ul>";
+  $str =~ s!((<li>-.*\n)+)!listing_f($1)!egm;
+
+  return $str;
+}
+
+
 ### アイテムをHTMLに変換
 sub make_item_html {
     my ($e, $ymd, $i) = @_;

あと、ようやくsvnに突っ込んだ(笑)
Referrer (Inside): [2010-01-05-1]

日記内の見出しに対応してみた
2011-06-12-1 / カテゴリ: [chalow] / [permlink]

日記内に小見出しを定義できるようにして、<h3>〜</h3>とかになるようにしてみた。
--- chalow.20110609	2011-02-06 04:25:50.718241770 +0900
+++ chalow	2011-06-12 20:42:48.266058342 +0900
@@ -539,4 +538,7 @@
     }
 
+    ### ヘッダ(Heading): "^= string" <h3>から</h3>
+    s!^(=+)\s*(.*)!my $a=2+length $1; $a=($a<7)?$a:7; "<h$a>".$2."</h$a>"!gme;
+
     ### 日付で参照リンク
     # date ref : [YYYY-MM-DD]
@@ -571,4 +573,5 @@
 
     s!</pre><br />!</pre>!g;	# ad hoc
+    s!</h(\d)><br />!</h$1>!g;
 
     return $_;

とりあえず * は使えない(itemの区切り)ので、行頭 "=" を見出しにすることにしました。
デフォルト書式の取り消し線と重複してるので、取り消し線の変換処理の後に上の処理を入れればOK。
上のコードだと、開始("="1個)を<h3>にしてるので、その辺は微調整すればよし。(lengthの結果の加算部分)

あとはChangelogで
= タイトル
文章1
== サブタイトル
文章2
とか書けば

タイトル

文章1

サブタイトル

文章2

となる。

前のエントリ/次のエントリにタイトル付加
2011-02-06-3 / カテゴリ: [perl][chalow] / [permlink]

アイテム毎ページの次へ/前へに、そのタイトルをつける。
--- chalow.20110206	2011-01-23 16:42:29.715835927 +0900
+++ chalow	2011-02-06 03:59:16.342571765 +0900
@@ -763,15 +763,21 @@
    my $ymdi_before;
    my $ymdi_after;
+	    my $before_title;
+	    my $after_title;
    if ($i > 1) {
	$ymdi_before = $ymd."-".($i-1);
+		$before_title = $ent->{$i-1}->{ho};
    } elsif ($idx < @day_list - 1) {
	my $day_b = $day_list[$idx + 1];
	$ymdi_before = $day_b."-".$cl->{all}->{$day_b}{curid};
+		$before_title = $cl->{all}->{$day_b}->{$cl->{all}->{$day_b}{curid}}->{ho};
    }
    if ($i != $ent->{curid}) {
	$ymdi_after = $ymd."-".($i+1);
+		$after_title = $ent->{$i+1}->{ho};
    } elsif ($idx > 0) {
	my $day_a = $day_list[$idx - 1];
	$ymdi_after = $day_a."-1";
+		$after_title = $cl->{all}->{$day_a}->{1}->{ho};
    }
 
@@ -794,4 +800,6 @@
    $t->param(back => $ymdi_before);
    $t->param(next => $ymdi_after);
+	    $t->param(back_title => $before_title);
+	    $t->param(next_title => $after_title);
 
    my $ccc = $item->{c}; $ccc =~ s!^<br />!!g;# ad hoc
現在の処理対象アイテムのタイトル取得は
$t->param(header_text => $item->{ho};
にあるので、特定のアイテムのタイトルは
$cl->{all}->{"YYYYmmdd"}->{x}->{ho};
で取れる。

テンプレ例
--- cl.conf.20110206	2011-01-23 16:42:37.523566691 +0900
+++ cl.conf	2011-02-06 03:58:01.367043689 +0900
@@ -362,6 +362,6 @@
 <div id="content">
 <p class="calendar"><a href="<TMPL_VAR name=ym>.html"><TMPL_VAR name=ym></a> / <a href="<TMPL_VAR name=ymd>.html"><TMPL_VAR name=ymd></a></p>
-<TMPL_IF name=back><a href="<TMPL_VAR name=back>.html">前のエントリ</a> / </TMPL_IF>
-<TMPL_IF name=next><a href="<TMPL_VAR name=next>.html">次のエントリ</a></TMPL_IF>
+<TMPL_IF name=back><a href="<TMPL_VAR name=back>.html">前のエントリ(<TMPL_VAR name=back_title>)</a> / </TMPL_IF>
+<TMPL_IF name=next><a href="<TMPL_VAR name=next>.html">次のエントリ(<TMPL_VAR name=next_title>)</a></TMPL_IF>
 <!-- start:<TMPL_VAR name=ymdi> -->
 <div class="day">

itemページのタイトルにカテゴリ表示
2011-01-23-3 / カテゴリ: [perl][chalow] / [permlink]

今まで「エントリ」と書いてたけど、chalow的にはitemだったなう。
itemごとのページ(YYYYmmdd-x.html)のhtmlタイトルに、カテゴリを表示してみた。
--- chalow.20110123	2011-01-22 22:56:41.727087965 +0900
+++ chalow	2011-01-23 16:42:29.715835927 +0900
@@ -749,6 +749,7 @@
 
 	    ### カテゴリ
 	    my $catstr = make_cat_link_html($ent->{$i}{cat});
+	    my $dispcat = "[".join("][", @{$ent->{$i}{cat}})."]";
 
 	    ### 日付リンクによるリファラー
 	    my @inside_refs = get_inside_ref("$ymdi");
@@ -799,6 +800,7 @@
 	    #$t->param(header => $item->{h});
 	    $t->param(header => qq(<a href="@{[datestr2url($ymdi)]}">).$item->{h}."</a>");
 	    $t->param(cat => $catstr);
+	    $t->param(dispcat => $dispcat);
 	    $t->param(author => $item->{a});
 	    $t->param(referrer => join(" ", @inside_refs));
 	    $t->param(id => $item_id); # 200101011
それ用の変数を見つけられなかったのでwrite_item_page()内で、テンプレート用の $dispcat を新しく作成。
あとは、テンプレート側からdispcatを呼び出せばOK
--- cl.conf.20110123	2011-01-23 02:19:18.367193474 +0900
+++ cl.conf	2011-01-23 16:42:37.523566691 +0900
@@ -345,7 +345,7 @@
 $tmpl_starthtml
 <head>
 $tmpl_header
-<title><TMPL_VAR name=header_text> | <TMPL_VAR name=cl_name></title>
+<title><TMPL_VAR name=header_text> / <TMPL_VAR name=dispcat> | <TMPL_VAR name=cl_name></title>
 </head>
 <!-- ================== ITEM_PAGE_TEMPLATE ================= -->
 <body>

そろそろchalowもsvnに突っ込むか…

SyntaxHighlighter用に[src]の言語指定可能改造
2011-01-23-2 / カテゴリ: [perl][chalow] / [permlink]

--- chalow.20110122	2011-01-22 22:41:33.635539221 +0900
+++ chalow	2011-01-22 22:56:41.727087965 +0900
@@ -1296,6 +1296,7 @@
 my %escaped_string;
 my $num_of_escaped_src;
 my %escaped_src;
+my %escaped_src_type;
 my $num_of_escaped_plugin;
 my %escaped_plugin;
 
@@ -1315,8 +1316,9 @@
 
     ### ソースエスケープ - "&" や "<" などを置換し pre を付ける
     $num_of_escaped_src = 0;
-    $$strp =~ s!\[src\](.*?)\[/src\]!
-	$escaped_src{++$num_of_escaped_src} = $1,
+    $$strp =~ s!\[src(\s\w+)?\](.*?)\[/src\]!
+	$escaped_src{++$num_of_escaped_src} = $2,
+	$escaped_src_type{$num_of_escaped_src} = $1,
 	$escaped_src{$num_of_escaped_src} =~ s/&/&amp;/g,
 	$escaped_src{$num_of_escaped_src} =~ s/</&lt;/g,
 	$escaped_src{$num_of_escaped_src} =~ s/>/&gt;/g,
@@ -1336,7 +1338,7 @@
     $$strp =~ s|\x7\x13(\d+)\x3|eval($escaped_plugin{$1})|ge;
     ### ソースアンエスケープ - pre 追加
     # todo(SyntaxHilighter)
-    $$strp =~ s|\x6\x13(\d+)\x3|<pre class="brush:plain;">$escaped_src{$1}</pre>|g;
+    $$strp =~ s|\x6\x13(\d+)\x3|"<pre class=\"brush:".(length $escaped_src_type{$1}? $escaped_src_type{$1}: "plain").";\">$escaped_src{$1}</pre>"|eg;
     # <p>は使ってないので
     #$$strp =~ s|\x6\x13(\d+)\x3|</p><pre>$escaped_src{$1}</pre><p>|g;
     ### HTML アンエスケープ
こんな感じで。

んで、Changelogの方は
(src)
コード
(/src)
となってるのを
(src perl)
コード
(/src)
とか書けばオーケー
※ ()は実際は[]

まぁ簡単にいっちゃえば、/ foo/ があれば brush:foo、無ければ brush:plain に置換するための保持用変数とコードを追加。
というか、既存Changelogへの自動種別追記なんかできないから、全部手作業で追記したぞ(笑)

このエントリまで含めた時点での統計

全ソース指定
% grep "^.\[src" ChangeLog | wc -l
915

手作業で言語指定
% grep "^.\[src " ChangeLog | sed -e "s/[][]//g" | awk '{print $2}' |lv | wc -l
218

言語指定ランキング
% grep "^.\[src " ChangeLog | sed -e "s/[][]//g" | awk '{print $2}' |lv | sort | uniq -c | sort -r
    102 perl
     64 cpp
     19 bash
     13 xml
     12 diff
      5 js
      2 html
      1 java

やっぱperl多いな。cpp(というかC)が意外な多さだ。
というか、コマンド実行とかconfigが大半だったから、全体からすれば少ないけど。

あと、lispスタイルも欲しかったな…

というか、sed/awk/sort/uniq使ったの何年ぶりだろ。
Referrer (Inside): [2011-06-16-1]

1エントリ1ページにしてみたけど誘導用mod_rewrietは不可だった
2011-01-20-1 / カテゴリ: [ubuntu][Apache][chalow] / [permlink]

[2011-01-18-1]chalowを設定変更して、今までは1日複数エントリ日記を書いても1ページに詰め込んでて居たのを、1エントリ1ページにして
古いURLの YYYYmmdd.html#YYYYmmdd-x をmod_rewriteあたりで新URL(YYYYmmdd-x.html)へ誘導
なんて書いてたわけだけど、mod_rewrite だと、うん、それ無理。

続きを読む
Referrer (Inside): [2011-01-22-1]

SyntaxHighlighterでハイライト
2011-01-18-1 / カテゴリ: [JavaScript][chalow] / [permlink]

(ついでにchalowを1.0rc6から1.0へVerUpしてxhtmlできるだけ対応して1エントリ1ページ形式へ変更、とか)

ASCII.jp : 技術系サイトに必需品!ソースコードは鮮やかに
など。
プログラミング系のブログなどでコードがハイライトされてるのをずっとカッコイイなーと思ってて、最近pukiwikiのコードハイライトをちょっとイジったときにほしい物にたどり着いたので組み込んでみた。

続きを読む
Referrer (Inside): [2011-01-20-1]

コメントを日毎からエントリ毎へ変更
2006-09-23-1 / カテゴリ: [chalow] / [permlink]

しました。

コメント自体少ないけど^^;
後はJavaScriptになってるのをSSIあたりに変更しようかな…

というか、やっぱエントリ毎のhtml出力にすればよかったかな…設計(?)ミスだね、こりゃ。

日毎のファイルで「続きを読む」(タイトル修正)
2006-07-31-1 / カテゴリ: [perl][programming][changelog][chalow] / [permlink]

(タイトル間違えた… デフォルトの「アイテム毎で続きを読む」を改造、だ)
できた^^;
というか、かなり無理矢理;
続きを読む

続きを読…めない
2006-07-30-1 / カテゴリ: [chalow] / [permlink]

「続きを読む」機能が使いたくて、chalow をよーやく 1.0rc6 へバージョンアップしたんだけど…、むー、アイテム(エントリ)ごとにファイル出力されないと有効にならない(現在日ごとのファイル出力)
アイテムごとにファイル出力すると相当数のファイルになるんだよなー。今は ChangeLog をさくらにscpして、さくらのサーバ上で chalow 実行してるけど、生成時の負荷も気になる…^^;
(書き込み少ないけど)掲示板(?)への書き込み時のファイル名フォーマットもちとイジんないとダメっぽいし、とりあえずバージョンアップは保留…

でー…、ちょこっとイジってた分で互換性がなくなってた箇所のメモ。
[2005-07-06-1][2005-06-14-1]で追加したカテゴリ名の取得で、%all_entries ハッシュがなくなってる。
代わりに、ChangeLogReader オブジェクトから取得できたのでそっちを使うように修正。
$all_entries{$ymd}{$i}{cat}

$cl->{all}->{$ymd}->{$i}->{cat}
へ変更。
1.0rc4 以下から 1.0rc6(5?) 以降へのバージョンアップは注意

せっかくなので、涼しげな配色に変更(笑)

rdfには最後のカテゴリ名だけ表示
2005-07-06-1 / カテゴリ: [perl][programming][changelog][chalow] / [permlink]

[2005-06-14-2]でカテゴリ名を RSS フィードに表示するようにしたけど、カテゴリの数が多いと(こんな使い方余りいない??)、Firefox のライブブックマークでの非表示部分が多くなってしまう。
ので、記述しているカテゴリ名のうち、最後の1個だけを表示するように修正

前回の状態からは
--- chalow.20050706     2005-06-29 19:40:01.000000000 +0900
+++ chalow      2005-07-06 17:55:49.000000000 +0900
@@ -1102,7 +1102,7 @@

            push @items, {
                permlink => $permlink,
-               itemheader => html2xmlstr("[".join("][", @{$all_entries{$ymd}{$i}{cat}})."]".$all_entries{$ymd}{$i}{h}),
+               itemheader => html2xmlstr("[" . $all_entries{$ymd}{$i}{cat}[$#{$all_entries{$ymd}{$i}{cat}}] . "]" . $all_entries{$ymd}{$i}{h}),
                itemauthor => $all_entries{$ymd}{$i}{a},
                itemcontent => $cont,
                itemcontentencoded => $coen,
てな感じで。

スゲー見にくいけど、要は
$array[$#array]
で、配列最後の要素をとってるだけ。
先頭がよければ、0 で良い(未確認)
Referrer (Inside): [2006-07-30-1]

カテゴリ一覧を大文字小文字無視でソート
2005-06-30-1 / カテゴリ: [perl][programming][changelog][chalow] / [permlink]

ま、これは簡単か
--- chalow.20050030     Fri Jun 24 23:51:11 2005
+++ chalow      Thu Jun 30 00:04:47 2005
@@ -1185,7 +1185,7 @@
     return if ($output_cat_pages == 0 and $cat_page_cgi eq "");

     my @lines = ();
-    foreach my $cat (sort keys %category_count) {
+    foreach my $cat (sort { lc $a cmp lc $b } keys %category_count) {
        my $n = $category_count{$cat};
 #    foreach my $cat (sort keys %category_item) {
 #      my $n = scalar(@{$category_item{$cat}});

rdfファイルにもカテゴリ表示
2005-06-14-1 / カテゴリ: [perl][programming][changelog][chalow] / [permlink]

[2005-06-13-2]の続き。
sub write_rss_file の itemheader にタイトル名を突っ込む箇所に、同じように、カテゴリ名も含ませる
--- chalow.org     2005-06-13 18:00:26.000000000 +0900
+++ chalow      2005-06-14 12:55:53.000000000 +0900
@@ -1102,7 +1102,7 @@

            push @items, {
                permlink => $permlink,
-               itemheader => html2xmlstr($all_entries{$ymd}{$i}{h}),
+               itemheader => html2xmlstr("[".join("][", @{$all_entries{$ymd}{$i}{cat}})."]".$all_entries{$ymd}{$i}{h}),
                itemauthor => $all_entries{$ymd}{$i}{a},
                itemcontent => $cont,
                itemcontentencoded => $coen,

って、まだ www.jp-z.jp のには反映してないんだけど。
Referrer (Inside): [2006-07-30-1]

chalow の「最近の話題」で、タイトルにカテゴリ表示
2005-06-13-2 / カテゴリ: [perl][programming][changelog][chalow] / [permlink]

sub write_latest_item_list_file の部分。
$all_entries{$ymd}{$i}{cat} に、カテゴリ文字列の入った配列のリファレンスがあるんで、これをくっつければいい。
foreach my $i (sort {$b <=> $a} keys %{$all_entries{$ymd}}) {
  next if ($i !~ /^\d/);
    my ($ym) = ($ymd =~ /^(\d{4}-\d\d)-\d\d/);
    my $c = $all_entries{$ymd}{$i}{h};
    $c =~ s/[\t\n]//g;
    $c =~ s/\s\s+/ /g;
    [...]
    $c = $c . "[" . join("][", @{$all_entries{$ymd}{$i}{cat}}) . "]";    # <= ココ
Referrer (Inside): [2005-06-14-1]

chalow ラッパー CGI (ChangeLog to HTML)
2005-06-06-1 / カテゴリ: [perl][programming][changelog][CGI][chalow] / [permlink]

[2005-06-03-1] のやつ。
まず、CGI でファイルアップローダ(chlogup.cgi)をテキトーに作成
#!/usr/bin/perl
use CGI;
my $cgi = new CGI;
my $updata = $cgi->param('file');
my $chfile = "ChangeLog";

print $cgi->header('text/plain');

unless (open F, "> $chfile") {
  print "open error $chfile: $!\n";
  exit 1;
}
while (<$updata>) {
  print F;
}
close F;

print "exec chalow start\n";
print `/foo/bar/exec.sh 2>&1`;
print "exec chalow done\n";

で、ChangeLog をさくらへ up し、chalow を実行するシェルスクリプト(exec.sh)を作成
#!/bin/sh

/bin/cat ChangeLog | /usr/bin/ssh -i sshの鍵 username@sakura 'cat | env PERL5LIB=local/chalow/ local/chalow/chalow -c local/chalow/cl.conf -o www/changelog -'

CGI を呼ぶ HTML もテキトーに。
<html>
<body>
<form action="chlogup.cgi" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit">
</form>
</body>
</html>

さくらのサーバ上の ~/local/chalow 以下に chalow があるのが前提。

あとは、https でアクセスできるサーバにおいて、BASIC認証なりなんなりで制限すればいい(httpsなんでBASIC認証で十分でしょ)

chalow で使う ChangeLog のフォーマットを修正
2005-06-04-1 / カテゴリ: [perl][changelog][chalow] / [permlink]

[2005-04-18-1] から chalow を使い始めたけど、ジツは使っていた ChangeLog のフォーマットとあってなかった。私が書いてたフォーマット
YYYY-mm-dd  name <mailaddr>

	* category1 category2...: title1
	内容...
	
	* category1 ...: title2
	内容...
を html にしたかったけど、設定修正のみだと対応できなかった。

で、ChangeLogReader.pm を修正
--- ChangeLogReader.pm.org	2005-06-04 23:41:10.578203100 +0900
+++ ChangeLogReader.pm	2005-06-04 23:42:36.772143900 +0900
@@ -91,28 +91,24 @@
     # item header - case 2: "* AAA:\n"
     # item header - case 3: "* AAA: BBB\n"
     # item header - case 4: "* AAA\n"
-    my ($rest) = ($ih =~ s/:(\s.*)$/:/s) ? $1 : ""; # for case 1,2,3
-    $rest =~ s/^ +//;
-    my $cont = $rest.join("", @$linesp);
-    if ($ih =~ /^p:/) { # Ignoring private items
-	return;
-    } elsif ($ih =~ /^(message-top|message-bottom):/) {	# pragma items
-	$entp->{$1} = $rest.$cont;
-	return;
-    }
 
-    # item ID : Y in XXXX-XX-XX-Y
-    $entp->{curid}++;
+    my $cont = join "", @$linesp;
 
     # Processing item header
     # # If 1st line doesn't have ": ", it will become item header.
     my @cat;
-#    $ih =~ s/(:|\s+)$//g;
-    $ih =~ s/(:|\s*)$//sg;	# Triming trailing spaces and ":"
-#    print "[[[[$ih]]]\n";
-    if ($ih =~ s/\s*\[(.+)\]$//) { # category
-	@cat = split(/\s*\]\s*\[\s*/, $1);
+
+    if ($ih =~ s/^([^:]+):\s*//) { # category
+      @cat = split(/\s+/, $1);
     }
+    $ih =~ s/\x0D?\x0A?$//;
+
+    if (grep /^(p|work)$/, @cat) {
+      return;
+    }
+
+    # item ID : Y in XXXX-XX-XX-Y
+    $entp->{curid}++;
 
     # Processing item content
     $cont =~ s/^( {8}| {0,7}\t)//gsm; 

ChangeLogReader.pm と同じディレクトリで上のファイルを置いて
% patch < ChangeLogReader.pm.patch

ちなみに、個人的な事情により、p と work の2つのカテゴリを非表示にしてます。p はプライベートなメモ、work は仕事な話をメモってるんで公開できない:p
+    if (grep /^(p|work)$/, @cat) {
+      return;
この部分ね

Webしかアクセスできない環境からの chalow 更新方法の考察
2005-06-03-1 / カテゴリ: [diary][changelog][CGI][chalow] / [permlink]

平たく言うと、会社から update できないかな〜、と。
会社のインターネットへの接続は Web のみで http proxy は 80 と 443 しか空いてなく、さくらのサーバは https は利用不可。Digest 認証も使用できない[2005-05-29-1]ので「Webアップローダから ChangeLog をアップして、CGI 使って chalow 実行」もできない。Basic 認証じゃパスがつつぬけだから、js と CGI でワンタイムパスワード認証するプログラムでも作って…面白そうではあるが、さすがにメンドイぞ。

あ、自宅サーバという手(抜け道)があった。自宅なら https 上がってるから、そっちに Web アップローダ置いて、バックグラウンドで ssh でさくらへ接続・chalow 実行ってやればクリアできそう。

つか、自宅で chalow 実行して、生成 html だけさくらへ転送すれば、ChangeLog を置かなくて良いじゃん…(private や仕事的な内容を外に一瞬でも置かなくて済む)
Referrer (Inside): [2005-06-06-1]
カテゴリ: chalow / 1 2 次ページ

最終更新時間: 2013-05-02 16:12