# HG changeset patch # User Richard M. Stallman # Date 861226981 0 # Node ID 4c6505ca34a7508e323137355e3a202418222fd7 # Parent f0fc645756a3626b522ab3881eb5c08d0a1f1e4c (sgml-value): Don't perform the skeleton-transformation on the value. (sgml-transformation): New variable. (sgml-mode-common): Use it. (html-href-anchor): Ask for address, wrap around text. (html-name-anchor): Same as above, without initial input. (html-image): No initial input for address. (html-ordered-list): Incorporate char into string. (html-unordered-list): Same as above. (html-checkboxes, html-radio-buttons): Rewritten. (sgml-char-names): Change ensp to nbsp. (sgml-tag): Use intangible here. (sgml-tags-invisible): Don't add intangible property separately here. Just the category property is enough. Eliminate local variable `point'. Bind inhibit-point-motion-hooks. diff -r f0fc645756a3 -r 4c6505ca34a7 lisp/textmodes/sgml-mode.el --- a/lisp/textmodes/sgml-mode.el Wed Apr 16 19:41:21 1997 +0000 +++ b/lisp/textmodes/sgml-mode.el Wed Apr 16 21:43:01 1997 +0000 @@ -4,6 +4,7 @@ ;; Author: James Clark ;; Adapted-By: ESR; Daniel.Pfeiffer@Informatik.START.dbp.de +;; F.Potorti@cnuce.cnr.it ;; Keywords: wp, hypermedia, comm, languages ;; This file is part of GNU Emacs. @@ -35,6 +36,14 @@ "SGML editing mode" :group 'languages) +(defcustom sgml-transformation nil + "*Default value for `skeleton-transformation' (which see) in SGML mode." + :type 'function + :group sgml) + +(put 'sgml-transformation 'variable-interactive + "aTransformation function: ") + ;; As long as Emacs' syntax can't be complemented with predicates to context ;; sensitively confirm the syntax of characters, we have to live with this ;; kludgy kind of tradeoff. @@ -136,7 +145,7 @@ nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil - "ensp" "excl" "quot" "num" "dollar" "percnt" "amp" "apos" + "nbsp" "excl" "quot" "num" "dollar" "percnt" "amp" "apos" "lpar" "rpar" "ast" "plus" "comma" "hyphen" "period" "sol" nil nil nil nil nil nil nil nil nil nil "colon" "semi" "lt" "eq" "gt" "quest" @@ -262,18 +271,6 @@ (string :tag "Description"))) :group 'sgml) - -;; put read-only last to enable setting this even when read-only enabled -(or (get 'sgml-tag 'invisible) - (setplist 'sgml-tag - (append '(invisible t - rear-nonsticky t - point-entered sgml-point-entered - read-only t) - (symbol-plist 'sgml-tag)))) - - - (defun sgml-mode-common (sgml-tag-face-alist sgml-display-text) "Common code for setting up `sgml-mode' and derived modes. SGML-TAG-FACE-ALIST is used for calculating `sgml-font-lock-keywords-1'. @@ -321,7 +318,7 @@ ;; This will allow existing comments within declarations to be ;; recognized. comment-start-skip "--[ \t]*" - skeleton-transformation 'identity + skeleton-transformation sgml-transformation skeleton-further-elements '((completion-ignore-case t)) skeleton-end-hook (lambda () (or (eolp) @@ -357,9 +354,17 @@ Keys <, &, SPC within <>, \" and ' can be electric depending on `sgml-quick-keys'. -Do \\[describe-variable] sgml- SPC to see available variables. +An argument of N to a tag-inserting command means that the next N +words should be wrapped. When the region is highlighted, N defaults +to -1, which means the current region. + +If you like upcased tags, put (setq skeleton-transformation 'upcase) in +sgml-mode-hook. Use \\[sgml-validate] to validate your document with an SGML parser. + +Do \\[describe-variable] sgml- SPC to see available variables. +Do \\[describe-key] on the following bindings to discover what they do. \\{sgml-mode-map}" (interactive) (sgml-mode-common sgml-tag-face-alist sgml-display-text) @@ -662,18 +667,28 @@ (goto-char open) (kill-sexp 1))) (setq arg (1- arg)))) - - + +;; Put read-only last to enable setting this even when read-only enabled. +(or (get 'sgml-tag 'invisible) + (setplist 'sgml-tag + (append '(invisible t + intangible t + point-entered sgml-point-entered + rear-nonsticky t + read-only t) + (symbol-plist 'sgml-tag)))) (defun sgml-tags-invisible (arg) "Toggle visibility of existing tags." (interactive "P") (let ((modified (buffer-modified-p)) (inhibit-read-only t) - (point (point-min)) + ;; This is needed in case font lock gets called, + ;; since it moves point and might call sgml-point-entered. + (inhibit-point-motion-hooks t) symbol) (save-excursion - (goto-char point) + (goto-char (point-min)) (if (setq sgml-tags-invisible (if arg (>= (prefix-numeric-value arg) 0) @@ -687,12 +702,12 @@ (overlay-put (make-overlay (point) (match-beginning 1)) 'category symbol)) - (put-text-property (setq point (point)) (forward-list) - 'intangible (point)) - (put-text-property point (point) + (put-text-property (point) + (progn (forward-list) (point)) 'category 'sgml-tag)) - (while (< (setq point (next-overlay-change point)) (point-max)) - (delete-overlay (car (overlays-at point)))) + (let ((pos (point))) + (while (< (setq pos (next-overlay-change pos)) (point-max)) + (delete-overlay (car (overlays-at pos))))) (remove-text-properties (point-min) (point-max) '(category sgml-tag intangible t)))) (set-buffer-modified-p modified) @@ -712,8 +727,7 @@ (eq (preceding-char) ?>))) (backward-list) (forward-list))))))) - - + (autoload 'compile-internal "compile") (defun sgml-validate (command) @@ -767,12 +781,11 @@ (setq alist (skeleton-read '(completing-read "[Value]: " (cdr alist)))) (if (string< "" alist) - (insert (funcall skeleton-transformation alist) ?\") + (insert alist ?\") (delete-backward-char 2)))) (insert "=\"") (if alist - (insert (funcall skeleton-transformation - (skeleton-read '(completing-read "Value: " alist))))) + (insert (skeleton-read '(completing-read "Value: " alist)))) (insert ?\")))) (provide 'sgml-mode) @@ -1167,13 +1180,14 @@ (define-skeleton html-href-anchor "HTML anchor tag with href attribute." - nil - "") + "URL: " + '(setq input "http:") + "" _ "") (define-skeleton html-name-anchor "HTML anchor tag with name attribute." - nil - "") + "Name: " + "" _ "") (define-skeleton html-headline-1 "HTML level 1 headline tags." @@ -1213,7 +1227,7 @@ (define-skeleton html-image "HTML image tag." nil - "") + "") (define-skeleton html-line "HTML line break tag." @@ -1223,14 +1237,14 @@ (define-skeleton html-ordered-list "HTML ordered list tags." nil - ?< "ol>" \n + "
    " \n "
  1. " _ \n "
") (define-skeleton html-unordered-list "HTML unordered list tags." nil - ?< "ul>" \n + "") @@ -1249,24 +1263,36 @@ (define-skeleton html-checkboxes "Group of connected checkbox inputs." nil - '(setq v1 (eval str)) ; allow passing name as argument - ("Value & Text: " - " str - (or v2 (setq v2 (if (y-or-n-p "Newline? ") "
" ""))) \n)) + (if (y-or-n-p "Set \"checked\" attribute? ") + (funcall skeleton-transformation " checked")) ">" + (skeleton-read "Text: " (capitalize str)) + (or v2 (setq v2 (if (y-or-n-p "Newline after text? ") + (funcall skeleton-transformation "
") + ""))) + \n)) (define-skeleton html-radio-buttons "Group of connected radio button inputs." nil - '(setq v1 (eval str)) ; allow passing name as argument - ("Value & Text: " - " str - (or v2 (setq v2 (if (y-or-n-p "Newline? ") "
" ""))) \n)) + (if (and (not v1) (setq v1 (y-or-n-p "Set \"checked\" attribute? "))) + (funcall skeleton-transformation " checked") ">") + (skeleton-read "Text: " (capitalize str)) + (or (cdr v2) (setcdr v2 (if (y-or-n-p "Newline after text? ") + (funcall skeleton-transformation "
") + ""))) + \n)) (defun html-autoview-mode (&optional arg)