朝顔日記

日記書き用 Lisp

2004-04-26

先日、この日記書きのフォーマットを変えてから、今まで使っていたひとつの記事を括る div 要素周りのあれこれ(何)を自動で書いてくれる xyzzy の lisp が使えなくなっていて、手で書くというやたら面倒なことをしていたら日記が書けなくなっていたので、これではいかんということでなんとかこれまで使っていたものを改造して、今使っているものに合うようにしてみた。

実行すると、以下のような文字列を自動で吐き出してくれます。

    <div class="section" id="diary_040426b">
<h3 class=""></h3>



<p class="topic-info">この記事の永続的URI : <a href="0404.html#diary_040426b">http://diary.noasobi.net/0404.html#diary_040426b</a></p>
    </div><!-- [topic end] -->

Lisp は以下のとおり。


;;; -*- Mode: Lisp; Package: User -*-

(defvar *mydiary-id-format-pattern* "    <div class=\"section\" id=\"diary_%y%m%d\\(.\\)"
  "id のフォーマット")
(defvar *mydiary-change-of-day-hour* 0
  "日付の変わる時間")
(defvar *mydiary-cursor-pattern* "${cursor}"
  "テンプレート挿入後のカーソル位置")
(defvar *mydiary-sequence-pattern* "${seq}"
  "テンプレートで連番に置換される")
(defvar *mydiary-section-start-pattern* "    <div class=\"section\""
  "テンプレートでの section の開始パターン")
(defvar *mydiary-template*
  "    <div class=\"section\" id=\"diary_%y%m%d${seq}\">
<h3 class=\"${cursor}\"></h3>



<p class=\"topic-info\">この記事の永続的URI : <a href=\"%y%m.html#diary_%y%m%d${seq}\">http://diary.noasobi.net/%y%m.html#diary_%y%m%d${seq}</a></p>
    </div><!-- [topic end] -->

")

(defun mydiary-succ (c)
  "mydiary: 連番生成関数(超簡易版)"
  (cond ((characterp c)
         (string (code-char (1+ (char-code c)))))
        ((stringp c)
         (mydiary-succ (char c 0)))
        (t
         "a")))

(defun h3 ()
  "mydiary: 日記テンプレート挿入関数"
  (interactive "*")
  (let* ((now (- (get-universal-time) (* *mydiary-change-of-day-hour* 60 60)))
         (id (format-date-string *mydiary-id-format-pattern* now))
         (opoint (point))
         (seq))
    (save-excursion
      (when (scan-buffer *mydiary-section-start-pattern* :regexp t :reverse t)
        (scan-buffer id :regexp t :limit opoint)
        (setf seq (match-string 1))))
    (save-excursion
      (insert (substitute-string (format-date-string *mydiary-template* now)
                                 *mydiary-sequence-pattern*
                                 (mydiary-succ seq))))
    (replace-buffer *mydiary-cursor-pattern* "" :reverse t)))

オリジナルは、xyzzyでタグ打ってる人の数 →の566さん作です。改めてありがとうございます。>556さん

なんか、適当な xml でもでっち上げて日記を書いて、それを xslt で html に仕立てたほうが、いいかなという気もしましたが、こっちの方が早いし、せっかく xhtml で書いているんだから、それを使わないのももったいない気がしたり。:p)

「日記書き用 Lisp」へコメントをつける

書き込み時の挙動について
URI らしき文字列には自動的にリンクが張られます。また "<" や、">" は実体参照化されます。
スパム対策のため、リファラを切っていると投稿できません。

この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2004/04/diary_040426a.html