[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

9.5.1 概略

http://www.foobar.net のコンテンツを閲覧する新た な `shimbun' モジュール `foobar' を作成するとして、まず最初に 貴方がしなればならないことは、`sb-foobar.el' の冒頭に

 
(require 'shimbun)
(luna-define-class shimbun-foobar (shimbun) ())

のような宣言を入れておくことです。徐々に分かると思いますので、今はおまじ ないと思っておいて下さい。注意すべきことは、`shimbun' モジュールを 入れるファイル名の `sb-foobar.el' の `foobar' の名前と、 luna-define-class の第一引数 の shimbun-foobar の `foobar' の名前は合わせておく必要がある ことです。

`Shimbun' モジュール `shimbun-foobar' がこなすべき仕事は大き く四つあります (あなたが Gnus のユーザならば、「フォルダ」を「グループ」 に読み換えて下さい):

  1. MUA が `foobar' フォルダを開いたら、記事の標題などをリストアップす るために http://www.foobar.net からウェブページのソースを取得する こと。

  2. 取得したウェブページのソースに対し、記事の見出しに必要ないくつかの情報と ともに取得して、headers というリストに代入して返すこと。

  3. MUA が `foobar' フォルダの記事の閲覧を要求したら、実際の記事内容を 記載したウェブページのソースを (例え ば http://www.foobar.net/030530.html から) 取得すること。

  4. http://www.foobar.net/030530.html から取得したウェブページのソー スを、必要に応じ閲覧しやすいように整形すること。

最初の作業は `shimbun.el' の shimbun-headers が、二番目の作 業は shimbun-get-headers が担当します。そして三番目の作業 は shimbun-article が、最後の作業 は shimbun-make-contents が担当します。

`shimbun.el' の中をご覧下さい。defun による関数定義の他に、 見慣れない luna-define-generic, luna-define-method などの 宣言がありますよね。どうも使用方法は defun のそれと似ているようで す。そして、前者は何だか doc-string だけを書いてあるようで、同名のシンボ ルについて後者によって再度宣言しているように見えます。更に、あるシンボル について、luna-define-generic の宣言だけがあって、 luna-define-method の宣言がないものもあります。

実は、`shimbun.el' 及び各 `shimbun' モジュールは、 Emacs Lisp にてオブジェクト指向プログラミングを可能とする `luna.el' (14) を利用して書かれています。

`shimbun.el' の中では、shimbun-headers があ る URL のウェブページのソースを取得し、shimbun-get-headers がその ウェブページのソースから標題などを抜き出し... という前述の手順がハー ドコーディングされています。しかし、決め打ちするだけでは、千差万別のウェ ブページのソースを、その構造に合わせて変化させることができません。

そこで luna により、メソッドがコールされる手順だけ決めておいて、 `shimbun' により変化させるべきメソッドの実体定義を 各 `shimbun' モジュールに任せているのです。各 `shimbun' モジュー ルで共通で使えそうなメソッドは `shimbun.el' の中にメソッドの実体も 定義してありますが、それすら各 `shimbun' モジュールにおいて再定義を することが可能です。

もうお分かりのように、luna-define-generic は、言わば殼だけの宣言、 luna-define-method は `shimbun' モジュール毎に作成できる実体 の宣言。そして `sb-foobar.el' の冒頭に入れ た luna-define-class での宣言は、luna 上での新たなクラスの 宣言だったわけです。



This document was generated by TSUCHIYA Masatoshi on November, 3 2005 using texi2html