HTML中のフォームの自動処理


html中のフォームの自動処理を行う。

Gauche用なので、他の処理系では動きません。

html-form-fill.scm

第1引数がHTMLを文字列で渡す、第2引数がフォームのパラメータ。 パラメータはハッシュテーブルで渡す。 ハッシュテーブルのkeyとvalueは、共に文字列。 ただしcheckboxの場合は、valueが複数の文字列を持つリストでも良い。

 #!/usr/bin/gosh
 
 (add-load-path ".")
 (use html-form-fill)
 
 (define form-param (make-hash-table 'string=?))
 (hash-table-put! form-param "btn" "3")
 (hash-table-put! form-param "chk" (list "1" "4" "5"))
 (hash-table-put! form-param "select" "5")
 (hash-table-put! form-param "string" "test form")
 (hash-table-put! form-param "lines" "test\n\ntest")
 
 
 (display "Content-Type: text/html; charset=euc-jp\n\n")
 (display 
   (html-form-fill-by-hash-table
     (call-with-input-file "tmpl.html" port->string)
     form-param))
 

上記の例は、PerlのHTML::FillInFormに倣ってハッシュテーブルでフォームのパラメータを渡している。 同じことを以下のようにSchemeのlet式に似た形式で書くこともできます。

 #!/usr/bin/gosh
 
 (add-load-path ".")
 (use html-form-fill)
 
 (display "Content-Type: text/html; charset=euc-jp\n\n")
 (display 
   (html-form-fill
     (call-with-input-file "tmpl.html" port->string)
     (
       ("btn" "3")
       ("chk" (list "1" "4" "5"))
       ("select" "5")
       ("string" "test form")
       ("lines" "test\n\ntest"))))
 

html-form-fillはdefine-syntaxで定義されたマクロで、通常の関数とは異なる。 let式に似た形式で受けとったパラメータから、ハッシュテーブルを生成するよう展開され、生成したハッシュテーブルをhtml-form-fill-by-hash-table関数に渡している。

TODO


Last modified : 2008/12/30 14:34:44 JST