yatex

annotate yahtml.el @ 54:2d45e43fb35f

Full support of English documents
author yuuji
date Mon, 24 Apr 1995 14:42:53 +0000
parents cb9afa9c1213
children 18f4939986e6
rev   line source
yuuji@13 1 ;;; -*- Emacs-Lisp -*-
yuuji@16 2 ;;; (c ) 1994 by HIROSE Yuuji [yuuji@ae.keio.ac.jp, pcs39334@ascii-net.or.jp]
yuuji@54 3 ;;; Last modified Mon Apr 24 22:52:17 1995 on pajero
yuuji@54 4 ;;; This is PURELY tentative.
yuuji@54 5 ;;; $Id$
yuuji@54 6
yuuji@54 7 ;;;[Commentary]
yuuji@13 8 ;;;
yuuji@54 9 ;;; It is assumed you are already familiar with YaTeX. The following
yuuji@54 10 ;;; completing featureas are available: ([prefix] means `C-c' by default)
yuuji@54 11 ;;;
yuuji@54 12 ;;; * [prefix] b X Complete environments such as `H1' which
yuuji@54 13 ;;; normally requires newline.
yuuji@54 14 ;;; * [prefix] s Complete declarative notations such as
yuuji@54 15 ;;; `<a href="foo.html"> .... </a>'
yuuji@54 16 ;;; * [prefix] l Complete typeface-changing commands such as
yuuji@54 17 ;;; `<i> ... </i>' or `<samp> ... </samp>'
yuuji@54 18 ;;; * menu-bar yahtml Complete all by selecting a menu item (Though I
yuuji@54 19 ;;; hate menu, this is most useful)
yuuji@54 20 ;;;
yuuji@54 21 ;;; NOTE! This program is truly tentative. If you find some bright
yuuji@54 22 ;;; future with this, please send me a mail to drive me to maintain this :)
yuuji@54 23
yuuji@13 24
yuuji@13 25 (require 'yatex)
yuuji@13 26 (defvar yahtml-prefix-map (copy-keymap YaTeX-prefix-map))
yuuji@13 27 (defvar yahtml-mode-map nil
yuuji@13 28 "Keymap used in yahtml-mode.")
yuuji@13 29 (if yahtml-mode-map nil
yuuji@13 30 (setq yahtml-mode-map (make-sparse-keymap))
yuuji@54 31 (define-key yahtml-mode-map YaTeX-prefix yahtml-prefix-map)
yuuji@54 32 (define-key yahtml-mode-map "\M-\C-@" 'YaTeX-mark-environment)
yuuji@54 33 (define-key yahtml-mode-map "\M-\C-a" 'YaTeX-beginning-of-environment)
yuuji@54 34 (define-key yahtml-mode-map "\M-\C-e" 'YaTeX-end-of-environment))
yuuji@54 35
yuuji@54 36 (defvar yahtml-syntax-table nil
yuuji@54 37 "*Syntax table for typesetting buffer")
yuuji@54 38
yuuji@54 39 (if yahtml-syntax-table nil
yuuji@54 40 (setq yahtml-syntax-table
yuuji@54 41 (make-syntax-table (standard-syntax-table)))
yuuji@54 42 (modify-syntax-entry ?\< "(" yahtml-syntax-table)
yuuji@54 43 (modify-syntax-entry ?\> ")" yahtml-syntax-table)
yuuji@54 44 )
yuuji@54 45 (defvar yahtml-command-regexp "[A-Za-z0-9]+"
yuuji@54 46 "Regexp of constituent of html commands.")
yuuji@54 47
yuuji@54 48 ;;; Completion tables for `form'
yuuji@54 49 (defvar yahtml-form-table '(("a") ("form")))
yuuji@54 50 (defvar yahtml-user-form-table nil)
yuuji@54 51 (defvar yahtml-tmp-form-table nil)
yuuji@54 52
yuuji@54 53 (defvar yahtml-env-table
yuuji@54 54 '(("html") ("head") ("title") ("body") ("dl")
yuuji@54 55 ("h1") ("h2") ("h3") ("h4") ("h5") ("h6")))
yuuji@54 56
yuuji@54 57 ;;; Completion tables for typeface designator
yuuji@54 58 (defvar yahtml-typeface-table
yuuji@54 59 '(("defn") ("em") ("cite") ("code") ("kbd") ("samp")
yuuji@54 60 ("strong") ("var") ("b") ("i") ("tt") ("u"))
yuuji@54 61 "Default completion table of typeface designator")
yuuji@54 62 (defvar yahtml-user-typeface-table nil)
yuuji@54 63 (defvar yahtml-tmp-typeface-table nil)
yuuji@54 64
yuuji@54 65 (defvar yahtml-prefer-upcases nil)
yuuji@54 66 (cond
yuuji@54 67 (yahtml-prefer-upcases
yuuji@54 68 (setq yahtml-form-table
yuuji@54 69 (mapcar (function (lambda (list) (list (upcase (car list)))))
yuuji@54 70 yahtml-form-table))
yuuji@54 71 (setq yahtml-env-table
yuuji@54 72 (mapcar (function (lambda (list) (list (upcase (car list)))))
yuuji@54 73 yahtml-env-table))
yuuji@54 74 (setq yahtml-typeface-table
yuuji@54 75 (mapcar (function (lambda (list) (list (upcase (car list)))))
yuuji@54 76 yahtml-typeface-table))))
yuuji@13 77
yuuji@13 78 (defun yahtml-mode ()
yuuji@13 79 (interactive)
yuuji@13 80 (yatex-mode)
yuuji@13 81 (setq major-mode 'yahtml-mode
yuuji@13 82 mode-name "yahtml")
yuuji@54 83 (make-local-variable 'YaTeX-ec) (setq YaTeX-ec "")
yuuji@54 84 (make-local-variable 'YaTeX-struct-begin) (setq YaTeX-struct-begin "<%1>")
yuuji@54 85 (make-local-variable 'YaTeX-struct-end) (setq YaTeX-struct-end "</%1>")
yuuji@54 86 (mapcar 'make-local-variable
yuuji@54 87 '(env-table user-env-table tmp-env-table))
yuuji@54 88 (setq env-table yahtml-env-table)
yuuji@54 89 (mapcar 'make-local-variable
yuuji@54 90 '(singlecmd-table user-singlecmd-table tmp-singlecmd-table))
yuuji@54 91 (make-local-variable 'YaTeX-struct-name-regexp)
yuuji@54 92 (setq YaTeX-struct-name-regexp "[^/]+")
yuuji@13 93 (make-local-variable 'YaTeX-prefix-map)
yuuji@54 94 (make-local-variable 'YaTeX-command-token-regexp)
yuuji@54 95 (setq YaTeX-command-token-regexp yahtml-command-regexp)
yuuji@13 96 (setq YaTeX-prefix-map yahtml-prefix-map)
yuuji@54 97 (set-syntax-table yahtml-syntax-table)
yuuji@13 98 (use-local-map yahtml-mode-map)
yuuji@54 99 (YaTeX-define-key "s" 'yahtml-insert-form)
yuuji@54 100 (YaTeX-define-key "l" 'yahtml-insert-tag)
yuuji@54 101 (if YaTeX-no-begend-shortcut nil
yuuji@54 102 (YaTeX-define-begend-key "bh" "HTML")
yuuji@54 103 (YaTeX-define-begend-key "bH" "HEAD")
yuuji@54 104 (YaTeX-define-begend-key "bt" "TITLE")
yuuji@54 105 (YaTeX-define-begend-key "bb" "BODY")
yuuji@54 106 (YaTeX-define-begend-key "bd" "DL")
yuuji@54 107 (YaTeX-define-begend-key "b1" "H1")
yuuji@54 108 (YaTeX-define-begend-key "b2" "H2")
yuuji@54 109 (YaTeX-define-begend-key "b3" "H3"))
yuuji@54 110 (run-hooks 'yahtml-mode-hook))
yuuji@54 111
yuuji@54 112 (defun yahtml-define-menu (keymap bindlist)
yuuji@54 113 (mapcar
yuuji@54 114 (function
yuuji@54 115 (lambda (bind)
yuuji@54 116 (define-key keymap (vector (car bind)) (cdr bind))))
yuuji@54 117 bindlist))
yuuji@54 118
yuuji@54 119 (defvar yahtml-menu-map nil "Menu map of yahtml")
yuuji@54 120 (defvar yahtml-menu-map-sectioning nil "Menu map of yahtml(sectioning)")
yuuji@54 121 (defvar yahtml-menu-map-listing nil "Menu map of yahtml(listing)")
yuuji@54 122 (defvar yahtml-menu-map-logical nil "Menu map of yahtml(logical tags)")
yuuji@54 123 (defvar yahtml-menu-map-typeface nil "Menu map of yahtml(typeface tags)")
yuuji@54 124
yuuji@54 125 ;;; Variables for mosaic url history
yuuji@54 126 (defvar yahtml-urls nil "Alist of global history")
yuuji@54 127 (defvar yahtml-url-history-file "~/.mosaic-global-history"
yuuji@54 128 "File name of url history")
yuuji@54 129
yuuji@54 130 (cond
yuuji@54 131 ((and YaTeX-emacs-19 (null yahtml-menu-map))
yuuji@54 132 (setq yahtml-menu-map (make-sparse-keymap "yahtml menu"))
yuuji@54 133 (setq yahtml-menu-map-sectioning (make-sparse-keymap "sectioning menu"))
yuuji@54 134 (yahtml-define-menu
yuuji@54 135 yahtml-menu-map-sectioning
yuuji@54 136 (nreverse
yuuji@54 137 '((1 "H1" . (lambda () (interactive) (yahtml-insert-begin-end "H1" nil)))
yuuji@54 138 (2 "H2" . (lambda () (interactive) (yahtml-insert-begin-end "H2" nil)))
yuuji@54 139 (3 "H3" . (lambda () (interactive) (yahtml-insert-begin-end "H3" nil)))
yuuji@54 140 (4 "H4" . (lambda () (interactive) (yahtml-insert-begin-end "H4" nil)))
yuuji@54 141 (5 "H5" . (lambda () (interactive) (yahtml-insert-begin-end "H5" nil)))
yuuji@54 142 (6 "H6" . (lambda () (interactive) (yahtml-insert-begin-end "H6" nil)))
yuuji@54 143 )))
yuuji@54 144 (setq yahtml-menu-map-logical (make-sparse-keymap "logical tags"))
yuuji@54 145 (yahtml-define-menu
yuuji@54 146 yahtml-menu-map-logical
yuuji@54 147 (nreverse
yuuji@54 148 '((em "Embolden" .
yuuji@54 149 (lambda () (interactive) (yahtml-insert-tag "EM")))
yuuji@54 150 (defn "Define a word" .
yuuji@54 151 (lambda () (interactive) (yahtml-insert-tag "DEFN")))
yuuji@54 152 (cite "Citation" .
yuuji@54 153 (lambda () (interactive) (yahtml-insert-tag "CITE")))
yuuji@54 154 (code "Code" .
yuuji@54 155 (lambda () (interactive) (yahtml-insert-tag "CODE")))
yuuji@54 156 (kbd "Keyboard" .
yuuji@54 157 (lambda () (interactive) (yahtml-insert-tag "KBD")))
yuuji@54 158 (samp "Sample display" .
yuuji@54 159 (lambda () (interactive) (yahtml-insert-tag "SAMP")))
yuuji@54 160 (strong "Strong" .
yuuji@54 161 (lambda () (interactive) (yahtml-insert-tag "STRONG")))
yuuji@54 162 (VAR "Variable notation" .
yuuji@54 163 (lambda () (interactive) (yahtml-insert-tag "VAR")))
yuuji@54 164 )))
yuuji@54 165 (setq yahtml-menu-map-typeface (make-sparse-keymap "typeface tags"))
yuuji@54 166 (yahtml-define-menu
yuuji@54 167 yahtml-menu-map-typeface
yuuji@54 168 (nreverse
yuuji@54 169 '((b "Bold" .
yuuji@54 170 (lambda () (interactive) (yahtml-insert-tag "B")))
yuuji@54 171 (i "Italic" .
yuuji@54 172 (lambda () (interactive) (yahtml-insert-tag "I")))
yuuji@54 173 (tt "Typewriter" .
yuuji@54 174 (lambda () (interactive) (yahtml-insert-tag "TT")))
yuuji@54 175 (u "Underlined" .
yuuji@54 176 (lambda () (interactive) (yahtml-insert-tag "U")))
yuuji@54 177 )))
yuuji@54 178 (setq yahtml-menu-map-listing (make-sparse-keymap "listing"))
yuuji@54 179 (yahtml-define-menu
yuuji@54 180 yahtml-menu-map-listing
yuuji@54 181 (nreverse
yuuji@54 182 '((ul "Unnumbered" .
yuuji@54 183 (lambda () (interactive) (yahtml-insert-begin-end "UL" nil)))
yuuji@54 184 (ol "Numbered" .
yuuji@54 185 (lambda () (interactive) (yahtml-insert-begin-end "OL" nil)))
yuuji@54 186 (dl "Description" .
yuuji@54 187 (lambda () (interactive) (yahtml-insert-begin-end "DL" nil)))
yuuji@54 188 )))
yuuji@54 189 (define-key yahtml-mode-map [menu-bar yahtml]
yuuji@54 190 (cons "yahtml" yahtml-menu-map))
yuuji@54 191 (yahtml-define-menu
yuuji@54 192 yahtml-menu-map
yuuji@54 193 (nreverse
yuuji@54 194 (list
yuuji@54 195 (cons (list 'sect "Sectioning")
yuuji@54 196 (cons "sectioning" yahtml-menu-map-sectioning))
yuuji@54 197 (cons (list 'list "Listing")
yuuji@54 198 (cons "Listing" yahtml-menu-map-listing))
yuuji@54 199 (cons (list 'logi "Logical tags")
yuuji@54 200 (cons "logical" yahtml-menu-map-logical))
yuuji@54 201 (cons (list 'type "Typeface tags")
yuuji@54 202 (cons "typeface" yahtml-menu-map-typeface))
yuuji@54 203 )))
yuuji@54 204 ))
yuuji@54 205
yuuji@54 206 (defun yahtml-collect-url-history ()
yuuji@54 207 "Collect urls from global history file."
yuuji@54 208 (interactive)
yuuji@54 209 (save-excursion
yuuji@54 210 (set-buffer
yuuji@54 211 (find-file-noselect (expand-file-name yahtml-url-history-file)))
yuuji@54 212 (goto-char (point-min))
yuuji@54 213 (setq yahtml-urls)
yuuji@54 214 (message "Collecting global history...")
yuuji@54 215 (while (re-search-forward "^[A-Za-z]+:" nil t)
yuuji@54 216 (setq yahtml-urls
yuuji@54 217 (cons (list
yuuji@54 218 (buffer-substring
yuuji@54 219 (progn (beginning-of-line) (point))
yuuji@54 220 (progn (skip-chars-forward "^ ") (point))))
yuuji@54 221 yahtml-urls)))
yuuji@54 222 (message "Collecting global history...Done")))
yuuji@54 223
yuuji@54 224 (defun yahtml-insert-form (&optional form)
yuuji@54 225 "Insert <FORM option=\"argument\"> </FORM>."
yuuji@54 226 (interactive)
yuuji@54 227 (or form
yuuji@54 228 (setq form
yuuji@54 229 (YaTeX-cplread-with-learning
yuuji@54 230 "Form: "
yuuji@54 231 'yahtml-form-table 'yahtml-user-form-table
yuuji@54 232 'yahtml-tmp-form-table)))
yuuji@54 233 (let ((p (point)))
yuuji@54 234 (insert (format "<%s%s>\n" form (yahtml-addin (downcase form))))
yuuji@54 235 (indent-relative-maybe)
yuuji@54 236 (save-excursion (insert (format "</%s>" form)))
yuuji@54 237 (if (search-backward "\"\"" p t) (forward-char 1))))
yuuji@54 238
yuuji@54 239 (defun yahtml-addin (form)
yuuji@54 240 "Check add-in function's existence and call it if exists."
yuuji@54 241 (let ((addin (concat "yahtml::" form)))
yuuji@54 242 (if (and (intern-soft addin) (fboundp (intern-soft addin)))
yuuji@54 243 (concat " " (funcall (intern addin)))
yuuji@54 244 "")))
yuuji@54 245
yuuji@54 246 (defun yahtml::a ()
yuuji@54 247 "Add-in function for <a>"
yuuji@54 248 (or yahtml-urls (yahtml-collect-url-history))
yuuji@54 249 (concat "href=\""
yuuji@54 250 (completing-read "href: " yahtml-urls)
yuuji@54 251 "\""))
yuuji@54 252
yuuji@54 253 (defun yahtml-insert-begin-end (env &optional region-mode)
yuuji@54 254 "Insert <ENV> \\n </ENV> by calling YaTeX-insert-begin-end."
yuuji@54 255 (interactive "sEnv: ")
yuuji@54 256 (setq env (funcall (if yahtml-prefer-upcases 'upcase 'downcase) env))
yuuji@54 257 (YaTeX-insert-begin-end env region-mode))
yuuji@54 258
yuuji@54 259 (defun yahtml-insert-tag (&optional tag)
yuuji@54 260 "Insert <TAG> </TAG> and put cursor inside of them."
yuuji@54 261 (interactive)
yuuji@54 262 (or tag
yuuji@54 263 (setq tag
yuuji@54 264 (YaTeX-cplread-with-learning
yuuji@54 265 "Tag: "
yuuji@54 266 'yahtml-typeface-table 'yahtml-user-typeface-table
yuuji@54 267 'yahtml-tmp-typeface-table)))
yuuji@54 268 (setq tag (funcall (if yahtml-prefer-upcases 'upcase 'downcase) tag))
yuuji@54 269 (insert (format "<%s> " tag))
yuuji@54 270 (save-excursion (insert (format "</%s>" tag))))
yuuji@54 271
yuuji@54 272 (provide 'yahtml)
yuuji@54 273
yuuji@54 274 ; Local variables:
yuuji@54 275 ; fill-prefix: ";;; "
yuuji@54 276 ; paragraph-start: "^$\\| \\|;;;$"
yuuji@54 277 ; paragraph-separate: "^$\\| \\|;;;$"
yuuji@54 278 ; End: