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: |