Mercurial > hgrepos > hgweb.cgi > yatex
diff yahtml.el @ 57:18f4939986e6
(j)LaTeX2e supported
yatex19.el fixed a lot
author | yuuji |
---|---|
date | Sat, 02 Dec 1995 18:35:28 +0000 |
parents | 2d45e43fb35f |
children | 3a7c0c2bf16d |
line wrap: on
line diff
--- a/yahtml.el Thu Jun 29 13:46:57 1995 +0000 +++ b/yahtml.el Sat Dec 02 18:35:28 1995 +0000 @@ -1,6 +1,6 @@ ;;; -*- Emacs-Lisp -*- ;;; (c ) 1994 by HIROSE Yuuji [yuuji@ae.keio.ac.jp, pcs39334@ascii-net.or.jp] -;;; Last modified Mon Apr 24 22:52:17 1995 on pajero +;;; Last modified Mon Nov 20 11:26:38 1995 on inspire ;;; This is PURELY tentative. ;;; $Id$ @@ -10,11 +10,16 @@ ;;; completing featureas are available: ([prefix] means `C-c' by default) ;;; ;;; * [prefix] b X Complete environments such as `H1' which -;;; normally requires newline. +;;; normally requires closing tag `</H1> +;;; <a href=foo> ... </a> is also classified into +;;; this group ;;; * [prefix] s Complete declarative notations such as -;;; `<a href="foo.html"> .... </a>' +;;; `<img src="foo.gif">' +;;; `<input name="var" ...>' ;;; * [prefix] l Complete typeface-changing commands such as ;;; `<i> ... </i>' or `<samp> ... </samp>' +;;; * [prefix] m Complete single commands such as +;;; `<br>' or `<hr>' ;;; * menu-bar yahtml Complete all by selecting a menu item (Though I ;;; hate menu, this is most useful) ;;; @@ -23,16 +28,87 @@ (require 'yatex) -(defvar yahtml-prefix-map (copy-keymap YaTeX-prefix-map)) -(defvar yahtml-mode-map nil - "Keymap used in yahtml-mode.") +(defvar yahtml-prefix-map nil) +(defvar yahtml-mode-map nil "Keymap used in yahtml-mode.") + +(defun yahtml-define-begend-key-normal (key env &optional map) + "Define short cut yahtml-insert-begin-end key." + (YaTeX-define-key + key + (list 'lambda '(arg) '(interactive "P") + (list 'yahtml-insert-begin-end env 'arg)) + map)) + +(defun yahtml-define-begend-region-key (key env &optional map) + "Define short cut yahtml-insert-begin-end-region key." + (YaTeX-define-key key (list 'lambda nil '(interactive) + (list 'yahtml-insert-begin-end env t)) map)) + +(defun yahtml-define-begend-key (key env &optional map) + "Define short cut key for begin type completion both for +normal and region mode. To customize yahtml, user should use this function." + (yahtml-define-begend-key-normal key env map) + (if YaTeX-inhibit-prefix-letter nil + (yahtml-define-begend-region-key + (concat (upcase (substring key 0 1)) (substring key 1)) env))) + + (if yahtml-mode-map nil - (setq yahtml-mode-map (make-sparse-keymap)) + (setq yahtml-mode-map (make-sparse-keymap) + yahtml-prefix-map (make-sparse-keymap)) (define-key yahtml-mode-map YaTeX-prefix yahtml-prefix-map) (define-key yahtml-mode-map "\M-\C-@" 'YaTeX-mark-environment) (define-key yahtml-mode-map "\M-\C-a" 'YaTeX-beginning-of-environment) - (define-key yahtml-mode-map "\M-\C-e" 'YaTeX-end-of-environment)) + (define-key yahtml-mode-map "\M-\C-e" 'YaTeX-end-of-environment) + (define-key yahtml-mode-map "\C-i" 'YaTeX-indent-line) + (define-key yahtml-mode-map YaTeX-prefix yahtml-prefix-map) + (let ((map yahtml-prefix-map)) + (YaTeX-define-key "^" 'yahtml-visit-main map) + (YaTeX-define-key "4^" 'yahtml-visit-main-other-window map) + (YaTeX-define-key "4g" 'yahtml-goto-corresponding-*-other-window map) + (YaTeX-define-key "44" 'YaTeX-switch-to-window map) + (and YaTeX-emacs-19 window-system + (progn + (YaTeX-define-key "5^" 'yahtml-visit-main-other-frame map) + (YaTeX-define-key "5g" 'yahtml-goto-corresponding-*-other-frame map) + (YaTeX-define-key "55" 'YaTeX-switch-to-window map))) + (YaTeX-define-key "v" 'YaTeX-version map) + (YaTeX-define-key "}" 'YaTeX-insert-braces-region map) + (YaTeX-define-key "]" 'YaTeX-insert-brackets-region map) + (YaTeX-define-key ")" 'YaTeX-insert-parens-region map) + (YaTeX-define-key "s" 'yahtml-insert-form map) + (YaTeX-define-key "l" 'yahtml-insert-tag map) + (YaTeX-define-key "m" 'yahtml-insert-single map) + (YaTeX-define-key "n" '(lambda () (interactive) (insert "<br>\n")) map) + (if YaTeX-no-begend-shortcut + (progn + (YaTeX-define-key "B" 'yahtml-insert-begend-region map) + (YaTeX-define-key "b" 'yahtml-insert-begend map)) + (yahtml-define-begend-key "bh" "HTML" map) + (yahtml-define-begend-key "bH" "HEAD" map) + (yahtml-define-begend-key "bt" "TITLE" map) + (yahtml-define-begend-key "bb" "BODY" map) + (yahtml-define-begend-key "bd" "DL" map) + (yahtml-define-begend-key "b1" "H1" map) + (yahtml-define-begend-key "b2" "H2" map) + (yahtml-define-begend-key "b3" "H3" map) + (yahtml-define-begend-key "ba" "a" map) + (yahtml-define-begend-key "bf" "form" map) + (yahtml-define-begend-key "bs" "select" map) + (YaTeX-define-key "b " 'yahtml-insert-begend map) + (YaTeX-define-key "B " 'yahtml-insert-begend map) + ) + (YaTeX-define-key "e" 'yahtml-end-environment map) + (YaTeX-define-key ">" 'yahtml-comment-region map) + (YaTeX-define-key "<" 'yahtml-uncomment-region map) + (YaTeX-define-key "g" 'yahtml-goto-corresponding-* map) + ) +) +(defvar yahtml-paragraph-separate + (concat + "^$\\|<br>\\|<p>\\|^[ \t]*</?\\(h[1-6]\\|p\\|dl\\|dd\\|dt\\|li\\|body\\|html\\|head\\|title\\|ul\\|ol\\|dl\\|pre\\)>") + "*Regexp of html paragraph separater") (defvar yahtml-syntax-table nil "*Syntax table for typesetting buffer") @@ -44,24 +120,37 @@ ) (defvar yahtml-command-regexp "[A-Za-z0-9]+" "Regexp of constituent of html commands.") +(defvar yahtml-kanji-code 2 + "Kanji coding system of html file; 1=sjis, 2=jis, 3=euc") ;;; Completion tables for `form' -(defvar yahtml-form-table '(("a") ("form"))) +(defvar yahtml-form-table + '(("img") ("input"))) (defvar yahtml-user-form-table nil) (defvar yahtml-tmp-form-table nil) (defvar yahtml-env-table - '(("html") ("head") ("title") ("body") ("dl") - ("h1") ("h2") ("h3") ("h4") ("h5") ("h6"))) + '(("html") ("head") ("title") ("body") ("dl") ("a") ("form") ("select") + ("h1") ("h2") ("h3") ("h4") ("h5") ("h6") ("ul"))) + +(defvar yahtml-user-env-table nil) +(defvar yahtml-tmp-env-table nil) ;;; Completion tables for typeface designator (defvar yahtml-typeface-table '(("defn") ("em") ("cite") ("code") ("kbd") ("samp") - ("strong") ("var") ("b") ("i") ("tt") ("u")) + ("strong") ("var") ("b") ("i") ("tt") ("u") ("address")) "Default completion table of typeface designator") (defvar yahtml-user-typeface-table nil) (defvar yahtml-tmp-typeface-table nil) +(defvar yahtml-single-cmd-table + '(("hr") ("br") ("option") ("p")) + "Default completion table of HTML single command.") +(defvar yahtml-user-single-cmd-table nil) +(defvar yahtml-tmp-single-cmd-table nil) +(defvar yahtml-last-single-cmd nil) + (defvar yahtml-prefer-upcases nil) (cond (yahtml-prefer-upcases @@ -75,38 +164,42 @@ (mapcar (function (lambda (list) (list (upcase (car list))))) yahtml-typeface-table)))) +(defvar yahtml-struct-name-regexp + "\\<\\(h[1-6]\\|[uod]l\\|body\\|title\\|head\\)") + + (defun yahtml-mode () (interactive) (yatex-mode) + (cond + ((boundp 'MULE) + (set-file-coding-system + (cdr (assq yahtml-kanji-code YaTeX-kanji-code-alist)))) + ((boundp 'NEMACS) + (make-local-variable 'kanji-fileio-code) + (setq kanji-fileio-code yahtml-kanji-code))) (setq major-mode 'yahtml-mode mode-name "yahtml") (make-local-variable 'YaTeX-ec) (setq YaTeX-ec "") - (make-local-variable 'YaTeX-struct-begin) (setq YaTeX-struct-begin "<%1>") + (make-local-variable 'YaTeX-struct-begin) (setq YaTeX-struct-begin "<%1%2>") (make-local-variable 'YaTeX-struct-end) (setq YaTeX-struct-end "</%1>") - (mapcar 'make-local-variable - '(env-table user-env-table tmp-env-table)) - (setq env-table yahtml-env-table) - (mapcar 'make-local-variable - '(singlecmd-table user-singlecmd-table tmp-singlecmd-table)) (make-local-variable 'YaTeX-struct-name-regexp) - (setq YaTeX-struct-name-regexp "[^/]+") + (setq YaTeX-struct-name-regexp yahtml-struct-name-regexp) (make-local-variable 'YaTeX-prefix-map) (make-local-variable 'YaTeX-command-token-regexp) (setq YaTeX-command-token-regexp yahtml-command-regexp) - (setq YaTeX-prefix-map yahtml-prefix-map) + (make-local-variable 'YaTeX-environment-indent) + (setq YaTeX-environment-indent 0) + (make-local-variable 'fill-prefix) + (setq fill-prefix nil) + (make-local-variable 'paragraph-separate) + (setq paragraph-separate yahtml-paragraph-separate + paragraph-start yahtml-paragraph-separate) + (make-local-variable 'comment-start) + (make-local-variable 'comment-end) + (setq comment-start "<!-- " comment-end " -->") (set-syntax-table yahtml-syntax-table) (use-local-map yahtml-mode-map) - (YaTeX-define-key "s" 'yahtml-insert-form) - (YaTeX-define-key "l" 'yahtml-insert-tag) - (if YaTeX-no-begend-shortcut nil - (YaTeX-define-begend-key "bh" "HTML") - (YaTeX-define-begend-key "bH" "HEAD") - (YaTeX-define-begend-key "bt" "TITLE") - (YaTeX-define-begend-key "bb" "BODY") - (YaTeX-define-begend-key "bd" "DL") - (YaTeX-define-begend-key "b1" "H1") - (YaTeX-define-begend-key "b2" "H2") - (YaTeX-define-begend-key "b3" "H3")) (run-hooks 'yahtml-mode-hook)) (defun yahtml-define-menu (keymap bindlist) @@ -186,6 +279,17 @@ (dl "Description" . (lambda () (interactive) (yahtml-insert-begin-end "DL" nil))) ))) + (setq yahtml-menu-map-item (make-sparse-keymap "item")) + (yahtml-define-menu + yahtml-menu-map-item + (nreverse + '((li "Simple item" . + (lambda () (interactive) (yahtml-insert-single "li"))) + (dt "Define term" . + (lambda () (interactive) (yahtml-insert-single "dt"))) + (dd "Description of term" . + (lambda () (interactive) (yahtml-insert-single "dd"))) + ))) (define-key yahtml-mode-map [menu-bar yahtml] (cons "yahtml" yahtml-menu-map)) (yahtml-define-menu @@ -196,6 +300,8 @@ (cons "sectioning" yahtml-menu-map-sectioning)) (cons (list 'list "Listing") (cons "Listing" yahtml-menu-map-listing)) + (cons (list 'item "Item") + (cons "Itemizing" yahtml-menu-map-item));;; (cons (list 'logi "Logical tags") (cons "logical" yahtml-menu-map-logical)) (cons (list 'type "Typeface tags") @@ -221,8 +327,39 @@ yahtml-urls))) (message "Collecting global history...Done"))) +;;; ----------- Completion ---------- +(defvar yahtml-last-begend "html") +(defun yahtml-insert-begend (&optional region) + "Insert <cmd> ... </cmd>." + (interactive "P") + (let ((cmd (YaTeX-cplread-with-learning + (format "Environment(default %s): " yahtml-last-begend) + 'yahtml-env-table 'yahtml-user-env-table 'yahtml-tmp-env-table)) + (bolp (bolp))) + (if (string< "" cmd) (setq yahtml-last-begend cmd)) + (setq cmd yahtml-last-begend) + (if region + (let ((beg (region-beginning)) + (end (region-end)) + (addin (yahtml-addin cmd))) + (goto-char end) + (insert (format "</%s>%s" cmd (if bolp "\n" ""))) + (goto-char beg) + (insert (format "<%s%s>%s" cmd addin (if bolp "\n" "")))) + (insert (format "<%s%s" cmd (yahtml-addin cmd))) + (if bolp (progn (insert (format ">\n</%s>\n" cmd cmd)) + (forward-line -1)) + (insert ">") + (save-excursion (insert (format "</%s>" cmd))))))) + +(defun yahtml-insert-begend-region () + "Call yahtml-insert-begend in the region mode." + (interactive) + (yahtml-insert-begend t)) + + (defun yahtml-insert-form (&optional form) - "Insert <FORM option=\"argument\"> </FORM>." + "Insert <FORM option=\"argument\">." (interactive) (or form (setq form @@ -230,25 +367,71 @@ "Form: " 'yahtml-form-table 'yahtml-user-form-table 'yahtml-tmp-form-table))) - (let ((p (point))) - (insert (format "<%s%s>\n" form (yahtml-addin (downcase form)))) - (indent-relative-maybe) - (save-excursion (insert (format "</%s>" form))) + (let ((p (point)) q) + (insert (format "<%s%s>" form (yahtml-addin (downcase form)))) + ;;(indent-relative-maybe) + (if (cdr (assoc form yahtml-form-table)) + (save-excursion (insert (format "</%s>" form)))) (if (search-backward "\"\"" p t) (forward-char 1)))) (defun yahtml-addin (form) "Check add-in function's existence and call it if exists." - (let ((addin (concat "yahtml::" form))) + (let ((addin (concat "yahtml:" form))) (if (and (intern-soft addin) (fboundp (intern-soft addin))) (concat " " (funcall (intern addin))) ""))) -(defun yahtml::a () +(defun yahtml:a () "Add-in function for <a>" +; (or yahtml-urls (yahtml-collect-url-history)) +; (concat "href=\"" +; (completing-read "href: " yahtml-urls) +; "\"") + (concat "href=\"" (read-file-name "href: " "" nil nil "") "\"") +) + +(defun yahtml:img () + "Add-in function for <img>" (or yahtml-urls (yahtml-collect-url-history)) - (concat "href=\"" - (completing-read "href: " yahtml-urls) - "\"")) + (let ((src (read-file-name "src: " "" nil t "")) + (alg (completing-read "align: " '(("top") ("middle") ("bottom"))))) + (concat "src=\"" src "\"" + (if (string< "" alg) (concat " align=\"" alg "\""))))) + +(defun yahtml:form () + "Add-in function `form' input format" + (concat + " method=" (completing-read "Method: " '(("POST") ("GET")) nil t) + " action=\"" (read-string "Action: ") "\"" + )) + +(defun yahtml:select () + "Add-in function for `select' input format" + (setq yahtml-last-single-cmd "option") + (concat " name=\"" (read-string "name: ") "\"")) + +(defvar yahtml-input-types + '(("text") ("password") ("checkbox") ("radio") ("submit") + ("reset") ("image") ("hidden"))) + +(defun yahtml:input () + "Add-in function for `input' form" + (let (name type value checked (size "") (maxlength "")) + (setq name (read-string "name: ") + type (completing-read "type (default=text): " + yahtml-input-types nil t) + value (read-string "value: ")) + (if (string-match "text\\|password\\|^$" type) + (setq size (read-string "size: ") + maxlength (read-string "maxlength: "))) + (concat + "name=\"" name "\"" + (if (string< "" type) (concat " type=\"" type "\"")) + (if (string< "" value) (concat " value=\"" value "\"")) + (if (string< "" size) (concat " size=\"" size "\"")) + (if (string< "" maxlength) (concat " maxlength=\"" maxlength "\"")) + ))) + (defun yahtml-insert-begin-end (env &optional region-mode) "Insert <ENV> \\n </ENV> by calling YaTeX-insert-begin-end." @@ -256,19 +439,159 @@ (setq env (funcall (if yahtml-prefer-upcases 'upcase 'downcase) env)) (YaTeX-insert-begin-end env region-mode)) -(defun yahtml-insert-tag (&optional tag) +(defun yahtml-insert-tag (tag) "Insert <TAG> </TAG> and put cursor inside of them." - (interactive) - (or tag - (setq tag - (YaTeX-cplread-with-learning - "Tag: " - 'yahtml-typeface-table 'yahtml-user-typeface-table - 'yahtml-tmp-typeface-table))) + (interactive + (list + (YaTeX-cplread-with-learning + "Tag: " + 'yahtml-typeface-table 'yahtml-user-typeface-table + 'yahtml-tmp-typeface-table))) (setq tag (funcall (if yahtml-prefer-upcases 'upcase 'downcase) tag)) (insert (format "<%s> " tag)) (save-excursion (insert (format "</%s>" tag)))) +(defun yahtml-insert-single (cmd) + "Insert <CMD>." + (interactive + (list (YaTeX-cplread-with-learning + (format "Command%s: " + (if yahtml-last-single-cmd + (concat "(default " yahtml-last-single-cmd ")") "")) + 'yahtml-single-cmd-table 'yahtml-user-single-cmd-table + 'yahtml-tmp-single-cmd-table))) + (setq cmd (funcall (if yahtml-prefer-upcases 'upcase 'downcase) cmd)) + (if (string< "" cmd) (setq yahtml-last-single-cmd cmd)) + (insert (format "<%s>" yahtml-last-single-cmd))) + +;;; ---------- Jump ---------- +(defun yahtml-on-href-p () + "Check if point is on href clause." + (let ((p (point)) cmd) + (save-excursion + (or (bobp) (skip-chars-backward "^ \t")) + (and (looking-at "href\\s *=\\s *\"?\\([^\"]+\\)\"?") + (< p (match-end 0)) + (YaTeX-match-string 1))))) + +(defun yahtml-goto-corresponding-href (&optional other) + "Go to corresponding name." + (let ((href (yahtml-on-href-p)) file name) + (if href + (cond + ((string-match "^http:" href) + (message "Sorry, jump across http is not supported.")) + (t (setq file (substring href 0 (string-match "#" href))) + (if (string-match "#" href) + (setq name (substring href (1+ (string-match "#" href))))) + (if (string< "" file) + (progn + (if (string-match "/$" file) + (setq file (concat file "index.html"))) + (if other (YaTeX-switch-to-buffer-other-window file) + (YaTeX-switch-to-buffer file)))) + (if name + (progn (set-mark-command nil) (yahtml-jump-to-name name))) + t))))) + +(defun yahtml-jump-to-name (name) + "Jump to html's named tag." + (setq name (format "name\\s *=\\s *\"?%s\"?" name)) + (or (and (re-search-forward name nil t) (goto-char (match-beginning 0))) + (and (re-search-backward name nil t) (goto-char (match-beginning 0))) + (message "Named tag `%s' not found" (substring href 1)))) + +(defun yahtml-on-begend-p (&optional p) + "Check if point is on begend clause." + (let ((p (point)) cmd) + (save-excursion + (if p (goto-char p)) + (if (= (char-after (point)) ?<) (forward-char 1)) + (if (and (re-search-backward "<" nil t) + (looking-at + (concat "<\\(/?" yahtml-command-regexp "\\)\\b")) + (condition-case nil + (forward-list 1)) + (< p (point))) + (YaTeX-match-string 1))))) + +(defun yahtml-goto-corresponding-begend () + (let ((cmd (yahtml-on-begend-p))) + (if cmd + (progn + (if (= (aref cmd 0) ?/) ;on </cmd> line + (re-search-backward (format "<%s" (substring cmd 1))) + (re-search-forward (format "</%s" cmd))) + (if (match-beginning 0) (goto-char (match-beginning 0))))))) + +(defun yahtml-goto-corresponding-* (&optional other) + "Go to corresponding object." + (interactive) + (cond + ((yahtml-goto-corresponding-href other)) + ((yahtml-goto-corresponding-begend other)) + )) + +(defun yahtml-goto-corresponding-*-other-window () + "Go to corresponding object." + (interactive) + (yahtml-goto-corresponding-* t)) + +;;; ---------- commenting ---------- +(defun yahtml-comment-region (beg end) + (interactive "r") + (comment-region beg end nil)) + +(defun yahtml-uncomment-region (beg end) + (interactive "r") + (comment-region beg end '(4))) + + + +;;; ---------- ---------- +;;; ---------- ---------- +;;; ---------- ---------- + +;;; +;;hilit19 +;;; +(defvar yahtml-default-face-table + '( + (form black/ivory white/hex-442233 italic) + )) +(defvar yahtml-hilit-patterns-alist + '( + ;; comments + ("<!--\\s " "-->" comment) + ;; include&exec + ("<!--#\\(include\\|exec\\)" "-->" include) + ;; string + (hilit-string-find 39 string) + (yahtml-hilit-region-tag "\\(em\\|strong\\)" bold) + ("</?[uod]l>" 0 decl) + ("<\\(di\\|dt\\|li\\|dd\\)>" 0 label) + ("<a\\s +href" "</a>" crossref) + ("</?\\sw+>" 0 decl) + ("<form" "</form" form) + )) + +(defun yahtml-hilit-region-tag (tag) + "Return list of start/end point of <TAG> form." + (if (re-search-forward (concat "<" tag ">") nil t) + (let ((m0 (match-beginning 0))) + (skip-chars-forward " \t\n") + (cons (point) + (progn (re-search-forward (concat "</" tag ">") nil t) + (1- (match-beginning 0))))))) + +;(setq hilit-patterns-alist (delq (assq 'yahtml-mode hilit-patterns-alist) hilit-patterns-alist)) +(cond + ((and (featurep 'hilit19) (featurep 'yatex19)) + (or (assq 'yahtml-mode hilit-patterns-alist) + (setq hilit-patterns-alist + (cons (cons 'yahtml-mode yahtml-hilit-patterns-alist) + hilit-patterns-alist))))) + (provide 'yahtml) ; Local variables: