WiLiKi/マクロ/comment

1行コメントマクロの習作

  • なかなか思い通りのものが作れない
  • いちおう動くようになった。
  • wiliki.scm の中が簡単にいじれるといいんだが...

使用方法

1行コメントをつけたいページに下記のように書く。

[[$comment]]

一度書き込むと、下記のように展開される。

- [[$$comment XXXX-XXXXXXXXX]]

コメント

毎日コメントSPAMを書かれてさすがにうざいので、デモ用のコメント欄は消しました。 下記のソースを元に自分で試してみてください。

ソース

;
; WiLiKi comment macro by zu
;

(use  gauche.regexp)
(select-module wiliki.macro)

(define (cmd-comment arg)
        `((form
             (@ (method POST) (action "index.cgi"))
             (br)
             (input (@ (type hidden) (name c) (value comment)))
             (input (@ (type hidden) (name id) (value ,arg)))
             (input (@ (type hidden) (name p) (value ,(ref (wiliki:current-page)
 'key))))
             (input (@ (type hidden) (name l) (value ,(wiliki:lang))))
             (input (@ (type hidden) (name mtime) (value ,(ref (wiliki:current-p
age) 'mtime))))
             (input (@ (type text) (name user)(size 10)))
             (input (@ (type text) (name comment)(size 50)))
             (br)
             (input (@ (type submit) (name submit) (value submit)))
        ))
)

(define (cmd-comment-init)
        `(,(format "- [[$$comment ~s-~d]]" (gensym) (sys-time))) )


(define-reader-macro (comment arg) (cmd-comment arg))
(define-writer-macro (comment) (cmd-comment-init))

(select-module wiliki)

(define-method wiliki-main ((self ))
  (cgi-main
   (lambda (param)
     (let ((pagename (get-page-name self param))
           (command  (cgi-get-parameter "c" param))
           (language (cgi-get-parameter "l" param :convert string->symbol)))
       (parameterize
           ((wiliki self)
            (lang   (or language (language-of self))))
        (cgi-output-character-encoding (output-charset))
        (textdomain (lang))
        (cond
         ;; command may #t if we're looking at the page named "c".
         ((or (not command) (eq? command #t))
          (with-db (cut cmd-view pagename)))
         ((equal? command "lv")
          (with-db (cut cmd-lwp-view pagename)))
         ((equal? command "e")
          (with-db (cut cmd-edit pagename)))
         ((equal? command "a")
          (with-db cmd-all))
         ((equal? command "r")
          (with-db cmd-recent-changes))
         ((equal? command "h")
          (with-db (cut cmd-history pagename)))
         ((equal? command "hd")
          (with-db (cut cmd-diff pagename
                        (cgi-get-parameter "t" param :convert x->integer
                                           :default 0)
                        (cgi-get-parameter "t1" param :convert x->integer
                                           :default 0))))
         ((equal? command "hv")
          (with-db (cut cmd-viewold pagename
                        (cgi-get-parameter "t" param :convert x->integer
                                           :default 0))))
         ((equal? command "s")
          (with-db
           (cut cmd-search (cgi-get-parameter "key" param :convert cv-in))))
         ((equal? command "c")
          (with-db
           (cut
            (if (cgi-get-parameter "commit" param :default #f)
              cmd-commit-edit
              cmd-preview)
            pagename
            (cgi-get-parameter "content" param :convert cv-in)
            (cgi-get-parameter "mtime" param
                               :convert x->integer
                               :default 0)
            (cgi-get-parameter "logmsg" param :convert cv-in)
            (cgi-get-parameter "donttouch" param :default #f))
           :write))
         ((equal? command "comment")
          (if (or (string=? (cgi-get-parameter "id" param :default "") "")
                  (string=? (cgi-get-parameter "comment" param :default "") ""))
             (with-db (cut cmd-view pagename))
             (with-db
               (cut
                 cmd-commit-edit
                 pagename
                 (let* ((page (ref (wiliki-db-get pagename #f) 'content))
                        (user      (cgi-get-parameter "user" param :convert cv-i
n))
                        (comment   (cgi-get-parameter "comment" param :convert c
v-in))
                        (id     (cgi-get-parameter "id" param :convert cv-in))
                        (form (regexp-quote (format "- [[$$comment ~a]]" id))))
                       (regexp-replace (string->regexp form) page (format "- ~a
[~a](./?.md) ~a\r\n\\0" comment user (wiliki:format-time (sys-time)))))
                 (cgi-get-parameter "mtime" param
                               :convert x->integer
                               :default 0)
                 ""
                 #f)
                 :write)))
         ((equal? command "rss")
          (with-db (cut rss-page (db))))
         ))))
   :merge-cookies #t
   :on-error error-page))


[[$$include WiLiKi/マクロ]]