; ; CPSR Compiler ; (defun nndoc-cpsr-compiler-type-p nil "Decide whether an article is a CPSR Compiler digest" (let ((case-fold-search nil)) (not (not (and (re-search-forward "^From: .*@cpsr.org" nil t) (goto-char (point-min)) (re-search-forward "^Subject: The CPSR Compiler - " nil t) (re-search-forward "^The CPSR Compiler " nil t) ))) )) (defun nndoc-cpsr-compiler-article-begin nil "Find the beginning of a CPSR Compiler article" (let ((case-fold-search nil)) (if first (and (re-search-forward "^\\(\\* ?\\)\\{4,\\}\n" nil t) (re-search-forward "^\\(\\& ?\\)\\{4,\\}\n+" nil t) (progn (beginning-of-line) t)) (if (re-search-forward "^\\(\\* ?\\)\\{4,\\}\n+\\|^\\(& ?\\)+\n+" nil t) (progn (beginning-of-line) t)) ))) (defun nndoc-generate-cpsr-compiler-head (article) "Generate headers for a CPSR Compiler article" (let ((entry (cdr (assq article nndoc-dissection-alist))) (subject "Couldn't find subject")) (save-excursion (set-buffer nndoc-current-buffer) (save-restriction (narrow-to-region (car entry) (nth 3 entry)) (goto-char (point-min)) (end-of-line) (setq subject (buffer-substring (point-min) (point))) )) (insert "Subject: " subject "\n") )) (defun nndoc-transform-cpsr-compiler-article (article) "Transform a CPSR Compiler article so that it matches nndoc expectations." (goto-char (point-min)) (while (eq (following-char) ?\n) (delete-char 1)) (end-of-line) (if (looking-at "\n\n") (progn (beginning-of-line) (insert "Subject: ")) (beginning-of-line) (insert "Subject: (none)\n\n")) ) (nndoc-add-type '(cpsr-compiler (article-begin-function . nndoc-cpsr-compiler-article-begin) (body-end . "^\\*\\{6\\}$\\|^\\(& ?\\)+$") (generate-head-function . nndoc-generate-cpsr-compiler-head) (article-transform-function . nndoc-transform-cpsr-compiler-article) (file-end . "^-\\{15,\\}$") ) )