--- es-wiki.el.~1.7.~ 2001-07-18 09:51:12.000000000 +0900 +++ es-wiki.el 2002-10-25 21:28:46.000000000 +0900 @@ -27,6 +27,7 @@ ;;; Code: (require 'emacs-wiki) (require 'elserv) +(require 'mcs-20) ;; Set action as relative path! (defvar elserv-wiki-http-edit-form @@ -121,21 +122,32 @@ "]]\n") "No WikiNames")) +(defun elserv-wiki-read-charset-from-html () + "Read the html header information and return the charset information" + (let* (charset) + (goto-line 1) + (re-search-forward "content=\"text.html; charset=\\([^\"]+\\)") + (setq charset (intern (match-string 1))) + charset)) + (defun elserv-wiki-render-page (result name) + (let* (charset) (cond ((string= name emacs-wiki-index-page) (with-current-buffer (emacs-wiki-generate-index t t) (emacs-wiki-replace-markup "Wiki Index") + (setq charset (elserv-wiki-read-charset-from-html)) (elserv-set-result-header result - (list 'content-type "text/html; charset=iso-2022-jp")) + (list 'content-type (concat "text/html; charset=" (symbol-name charset)))) (elserv-set-result-body result (encode-coding-string (buffer-string) - 'iso-2022-jp)) + charset)) (kill-buffer (current-buffer)))) ((string= name "WikiNames") (with-temp-buffer (insert (elserv-wiki-interwiki-page)) (emacs-wiki-replace-markup "WikiNames") + (setq charset (elserv-wiki-read-charset-from-html)) (elserv-set-result-header result (list 'content-type "text/html")) (elserv-set-result-body result (buffer-string)))) @@ -150,20 +162,20 @@ (format "Wiki page %s not found" name))) (with-temp-buffer (let ((modified-time (nth 5 (file-attributes file)))) - (insert-file-contents-as-binary file) - (decode-coding-region (point-min) (point-max) 'iso-2022-jp) + (insert-file-contents file) (setq buffer-file-name name) (emacs-wiki-replace-markup name) + (setq charset (elserv-wiki-read-charset-from-html)) (set-buffer-modified-p nil) (elserv-set-result-header result - (list 'content-type "text/html; charset=iso-2022-jp" + (list 'content-type (concat "text/html; charset=" (symbol-name charset)) 'last-modified (format-time-string "%a, %e %b %Y %T %Z" modified-time))) (elserv-set-result-body result (encode-coding-string (buffer-string) - 'iso-2022-jp))))))))) + charset)))))))))) (defun elserv-wiki-edit-page (result page-name) (let ((emacs-wiki-http-edit-form elserv-wiki-http-edit-form)) @@ -172,13 +184,14 @@ (with-temp-buffer (emacs-wiki-setup-edit-page page-name) ;; this is required because of the : in the name + (let* ((charset (detect-mime-charset-region (point-min) (point-max)))) (elserv-set-result-header result - (list 'content-type "text/html; charset=iso-2022-jp")) + (list 'content-type (concat "text/html; charset=" (symbol-name charset)))) (elserv-set-result-body result (encode-coding-string (buffer-string) - 'iso-2022-jp)))))) + 'iso-2022-jp))))))) (defun elserv-wiki-change-page (result request) (let* ((res (elserv-url-decode (plist-get request 'body))) @@ -246,13 +259,14 @@ (with-current-buffer (emacs-wiki-grep term) (emacs-wiki-wikify-search-results term) (emacs-wiki-replace-markup "Search Results") + (let* ((charset (elserv-wiki-read-charset-from-html))) (elserv-set-result-header result - (list 'content-type "text/html;charset=iso-2022-jp")) + (list 'content-type (concat "text/html;charset=" (symbol-name charset)))) (elserv-set-result-body result (encode-coding-string - (buffer-string) 'iso-2022-jp)) - (kill-buffer (current-buffer))))) + (buffer-string) charset)) + (kill-buffer (current-buffer)))))) (defun elserv-wiki-function (result path ppath request) (if (string= path "")