;;; sb-fml.el --- shimbun backend class for fml archiver. ;; Copyright (C) 2001, 2002, 2003, 2004, 2009, 2010 ;; Akihiro Arisawa ;; Copyright (C) 2001, 2002, 2003, 2004, 2009, 2010 ;; Yuuichi Teranishi ;; Author: TSUCHIYA Masatoshi , ;; Akihiro Arisawa , ;; Yuuichi Teranishi ;; Keywords: news ;; This file is a part of shimbun. ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. ;;; Commentary: ;; Original code was nnshimbun.el written by ;; TSUCHIYA Masatoshi . ;;; Code: (eval-when-compile (require 'cl)) (require 'shimbun) (luna-define-class shimbun-fml (shimbun) ()) (defun shimbun-fml-parse-time (str) (save-match-data (if (string-match "\\([0-9]+\\)/\\([0-9]+\\)/\\([0-9]+\\) \\([0-9]+:[0-9]+:[0-9]+\\)" str) (shimbun-make-date-string (string-to-number (match-string 1 str)) (string-to-number (match-string 2 str)) (string-to-number (match-string 3 str)) (match-string 4 str)) str))) (luna-define-method shimbun-get-headers ((shimbun shimbun-fml) &optional range) (let ((case-fold-search t) (pages (shimbun-header-index-pages range)) (count 0) headers auxs aux) (goto-char (point-min)) (while (and (if pages (<= (incf count) pages) t) (re-search-forward "" nil t)) (setq auxs (append auxs (list (match-string 1))))) (catch 'stop (while auxs (with-temp-buffer (shimbun-retrieve-url (concat (shimbun-index-url shimbun) (setq aux (car auxs)) "/") 'reload) (let ((case-fold-search t) id url date subject from) (goto-char (point-min)) (while (re-search-forward "
  • Article .*
    Article \\([0-9]+\\) at \\([^<]*\\) Subject: \\([^<]*\\)
    From: \\([^<]*\\)
    " nil t) (setq url (concat (shimbun-index-url shimbun) aux "/" (match-string 1)) id (format "<%s%05d%%%s>" aux (string-to-number (match-string 2)) (shimbun-current-group-internal shimbun)) date (shimbun-fml-parse-time (match-string 3)) subject (match-string 4) from (match-string 5)) (if (shimbun-search-id shimbun id) (throw 'stop nil)) (forward-line 1) (push (shimbun-create-header 0 subject from date id "" 0 0 url) headers))) (setq auxs (cdr auxs))))) headers)) (luna-define-method shimbun-make-contents ((shimbun shimbun-fml) header) (catch 'stop (if (search-forward "" nil t) (delete-region (point-min) (point)) (throw 'stop nil)) (if (search-forward "" nil t) (delete-region (point-at-bol) (point-max)) (throw 'stop nil)) (if (search-backward "" nil t) (delete-region (point-at-bol) (point-at-eol)) (throw 'stop nil)) (save-restriction (narrow-to-region (point-min) (point)) (goto-char (point-min)) (let (field value start value-beg end) (while (and (setq start (point)) (re-search-forward "\\(.*\\):" nil t) (setq field (match-string 2)) (re-search-forward (concat "") nil t) (setq value-beg (point)) (search-forward "" nil t) (setq end (point))) (setq value (buffer-substring value-beg (progn (search-backward "") (point)))) (delete-region start end) (cond ((string= field "Date") (shimbun-header-set-date header value)) ((string= field "From") (shimbun-header-set-from header value)) ((string= field "Subject") (shimbun-header-set-subject header value)) ((string= field "Message-Id") (shimbun-header-set-id header value)) ((string= field "References") (shimbun-header-set-references header value)) (t (insert (concat field ": " (shimbun-header-normalize value t) "\n"))))) (goto-char (point-min)) (shimbun-header-insert shimbun header) (insert "Content-Type: text/html; charset=ISO-2022-JP\nMIME-Version: 1.0\n")) (goto-char (point-max)))) (insert "
    ")
      (goto-char (point-max))
      (insert "
    \n") (encode-coding-string (buffer-string) (mime-charset-to-coding-system "ISO-2022-JP"))) (provide 'sb-fml) ;;; sb-fml.el ends here