kiyokaのブログアーカイブ

Archive of old blog posts

Gaucheのtext.html-liteをポーティングできた

私がRubyで書いているLisp方言、 [Nendo]について。

Gaucheから持ってきた text.html-lite が動いた。感動! (Gaucheのリファレンスマニュアル: Gauche ユーザリファレンス: 11.36 text.html-lite - シンプルなHTMLドキュメントの構築) いざポーティングしようとすると、[Nendo]にnullリスト関連のバグがたくさん見つかったが。 ついでに text.tree も必要だったのでポーティングした。

しかし、まだ[Nendo]からRubyのHashにアクセスできないので、まだちゃんとしたCGIスクリプトが書けない… 現状でできる範囲のサンプルはこんな感じ。

#!/bin/sh
:; #-*- mode: nendo; syntax: scheme -*-;;
:; exec /usr/local/bin/nendo $0 $*

(load-library "text/html-lite")
(load-library "text/tree")
(require "cgi")

(define (params-list-page cgi)
  `(
    ,(html-doctype)
    ,(html:head
      (html:title "CGI parameter list"))
    ,(html:body
      (html:h1 "CGI parameter list")
      (html:table :border 1
                  (for-each
                   (lambda (x)
                     (html:tr
                      (html:td x)))
                   (to-list (cgi.params.keys)))))))

(let1 cgi (CGI.new)
  (cgi.print
   (cgi.header))
  (cgi.print
   (tree->string
    (params-list-page cgi))))

Rubyの大量のライブラリ(gem)が使えるとなったら、いろいろ試したいことがある。 例えば、Excelファイルをアップロード/ダウンロードするとか、ImageMagickで画像を生成して返すとか。 やっと、S式でRubyプログラミングの雰囲気が出てきたぞ。