; Delmonta's HTML Helper Mode ; (c) IIJIMA 'Delmonta' Hiromitsu ;------------------------------------------------------------------------------ ;$Id: ds-html.el,v 1.3 2005/07/22 05:59:38 delmonta Exp $ ;------------------------------------------------------------------------------ ; ;****************************************************************************** ; 初期化部 ;****************************************************************************** (if (not (assq 'delmonta-html-mode minor-mode-alist)) (setq minor-mode-alist (cons '(delmonta-html-mode " DS-HTML") minor-mode-alist) ) ) (defvar delmonta-html-mode nil) ;****************************************************************************** ; キーマップの定義 ;****************************************************************************** (defvar delmonta-html-mode-map (make-sparse-keymap)) (define-key delmonta-html-mode-map "1" '(lambda () (interactive) (delmonta-html-insert-tag "h1"))) (define-key delmonta-html-mode-map "2" '(lambda () (interactive) (delmonta-html-insert-tag "h2"))) (define-key delmonta-html-mode-map "3" '(lambda () (interactive) (delmonta-html-insert-tag "h3"))) (define-key delmonta-html-mode-map "4" '(lambda () (interactive) (delmonta-html-insert-tag "h4"))) (define-key delmonta-html-mode-map "5" '(lambda () (interactive) (delmonta-html-insert-tag "h5"))) (define-key delmonta-html-mode-map "6" '(lambda () (interactive) (delmonta-html-insert-tag "h6"))) (define-key delmonta-html-mode-map "a" '(lambda () (interactive) (delmonta-html-insert-tag "a" "href=\"\" name=\"\""))) (define-key delmonta-html-mode-map "A" 'delmonta-html-selection-to-anchor) (define-key delmonta-html-mode-map "b" '(lambda () (interactive) (delmonta-html-insert-tag "b"))) (define-key delmonta-html-mode-map "B" '(lambda () (interactive) (delmonta-html-insert-tag "blockquote" "class="))) (define-key delmonta-html-mode-map "c" '(lambda () (interactive) (delmonta-html-insert-tag "code"))) (define-key delmonta-html-mode-map "d" '(lambda () (interactive) (delmonta-html-insert-tag "div" "align="))) (define-key delmonta-html-mode-map "e" '(lambda () (interactive) (delmonta-html-insert-tag "em"))) (define-key delmonta-html-mode-map "C" '(lambda () (interactive) (delmonta-html-insert-tag "center"))) (define-key delmonta-html-mode-map "e" '(lambda () (interactive) (delmonta-html-insert-tag "em"))) (define-key delmonta-html-mode-map "f" '(lambda () (interactive) (delmonta-html-insert-tag "font" "color=\"\""))) (define-key delmonta-html-mode-map "i" '(lambda () (interactive) (delmonta-html-insert-tag "i"))) (define-key delmonta-html-mode-map "k" '(lambda () (interactive) (delmonta-html-insert-tag "kbd"))) (define-key delmonta-html-mode-map "n" '(lambda () (interactive) (delmonta-html-insert-tag "nobr"))) (define-key delmonta-html-mode-map "p" '(lambda () (interactive) (delmonta-html-insert-tag "pre"))) (define-key delmonta-html-mode-map "P" '(lambda () (interactive) (delmonta-html-insert-tag "p"))) (define-key delmonta-html-mode-map "R" '(lambda () (interactive) (delmonta-html-insert-tag "ruby"))) (define-key delmonta-html-mode-map "s" '(lambda () (interactive) (delmonta-html-insert-tag "strong"))) (define-key delmonta-html-mode-map "t" '(lambda () (interactive) (delmonta-html-insert-tag "tt"))) (define-key delmonta-html-mode-map "T" '(lambda () (interactive) (delmonta-html-insert-tag "table" "border=1 cellspacing=0 cellpadding=3"))) (define-key delmonta-html-mode-map "u" '(lambda () (interactive) (delmonta-html-insert-tag "u"))) (define-key delmonta-html-mode-map "x" '(lambda () (interactive) (delmonta-html-insert-tag "s"))) (define-key delmonta-html-mode-map "^" '(lambda () (interactive) (delmonta-html-insert-tag "sup"))) (define-key delmonta-html-mode-map "_" '(lambda () (interactive) (delmonta-html-insert-tag "sub"))) (define-key delmonta-html-mode-map "+" '(lambda () (interactive) (delmonta-html-insert-tag "big"))) (define-key delmonta-html-mode-map "-" '(lambda () (interactive) (delmonta-html-insert-tag "small"))) (define-key delmonta-html-mode-map "<" '(lambda () (interactive) (insert ""))) (define-key delmonta-html-mode-map "/" '(lambda () (interactive) (insert "
"))) (define-key delmonta-html-mode-map "w" '(lambda () (interactive) (insert ""))) (define-key delmonta-html-mode-map "M" 'delmonta-html-insert-matrix) (define-key delmonta-html-mode-map "q" '(lambda () (interactive) (delmonta-html-insert-tag nil))) (define-key delmonta-html-mode-map "&" 'delmonta-html-quote-metacharacter) (if (not (assq 'delmonta-html-mode minor-mode-map-alist)) (setq minor-mode-map-alist (cons (cons 'delmonta-html-mode delmonta-html-mode-map) minor-mode-map-alist ) ) ) ;****************************************************************************** ; 起動・終了関数群 ;****************************************************************************** (defun delmonta-html-mode (&optional arg) "でるもんたの HTML 補助モード。\nキーを押すとそれに対応するタグ(または、閉じタグ)が挿入されます。" (interactive "P") (if (null arg) (if delmonta-html-mode (exit-delmonta-html-mode) (enter-delmonta-html-mode) ) ; else (if (> (prefix-numeric-value arg) 0) (exit-delmonta-html-mode) (enter-delmonta-html-mode) ) ) ) (defun enter-delmonta-html-mode () (interactive) (if (not delmonta-html-mode) (progn (setq delmonta-html-mode t) (if (fboundp 'update-mode-lines) (update-mode-lines)) (setq delmonta-html-tag-stack nil) )) ) (defun exit-delmonta-html-mode () (interactive) (if delmonta-html-mode (progn (setq delmonta-html-mode nil) (if (fboundp 'update-mode-lines) (update-mode-lines)) (setq delmonta-html-tag-stack nil) )) ) ;****************************************************************************** ; 実体関数 ;****************************************************************************** (defvar delmonta-html-tag-stack nil) (defun delmonta-html-insert-tag (sTag &optional sArg) (interactive "sTag to insert:") (if (null sTag) (progn (setq delmonta-html-tag-stack nil) (message "Tag Stack を空にしました") ) ;THEN ends here ; begins ELSE (let (sLastTag) (setq sLastTag (car delmonta-html-tag-stack)) (if (string-equal sLastTag sTag) (progn (insert "") (setq delmonta-html-tag-stack (cdr delmonta-html-tag-stack) ) ) ; THEN ends here ; begins ELSE (insert "<" sTag) (if sArg (insert " " sArg)) (insert ">") (setq delmonta-html-tag-stack (cons sTag delmonta-html-tag-stack) ) ) ) ) ) (defun delmonta-html-insert-matrix (nSize) (interactive "n行列の行数は:") (insert "\t\n" "\t\n" "\t\t* =\n" "\t\t(\n" "\t\t\t\n" "\t\t\t\n" "\t\t)\n" "\t\t + \n" "\t\n" "\t\t\n" "\t\t\n" ) ) (defun delmonta-html-quote-metacharacter (&optional c) (interactive) (if (not c) (setq c (following-char)) ) (cond ((= c ?&) (delete-char 1) (insert "&")) ((= c ?<) (delete-char 1) (insert "<")) ((= c ?>) (delete-char 1) (insert ">")) (t (message "%c need not be quoted." c) (forward-char)) ) ) (defun delmonta-html-selection-to-anchor () (interactive) (let (s) (setq s (buffer-substring (point) (mark))) (delete-region (point) (mark)) (insert "" s "") ) )