changeset 17545:c67787f92aea

(sgml-value): Use 'identity as default value. (sgml-mode): Doc fix. (sgml-name-8bit-mode): Tell the user if set or reset. (sgml-tag): Doc fix. (sgml-tag): Protect "&lt;" from skeleton-transformation. (sgml-attributes): Doc fix. (sgml-attributes): Square brackets removed from prompt. (sgml-attributes): Arg ALIST renamed to TAG. (sgml-attributes): Apply skeleton-transformation when necessary. (sgml-value): Doc added. (sgml-value): Square brackets removed from prompt. (html-tag-alist): New variable 1-7, variable `list' changed. (html-tag-alist)<dir>, <menu>: Use new value of `list'. (html-tag-alist)<font>: Fixed (doc of sgml-tag-alist needs fixing). (html-tag-alist)<ol>, <ul>: Fixed. (html-tag-alist)<fn>: Commented out.
author Richard M. Stallman <rms@gnu.org>
date Wed, 23 Apr 1997 18:58:33 +0000
parents 9ba1f7641826
children 0128001981c3
files lisp/textmodes/sgml-mode.el
diffstat 1 files changed, 40 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/textmodes/sgml-mode.el	Wed Apr 23 17:37:06 1997 +0000
+++ b/lisp/textmodes/sgml-mode.el	Wed Apr 23 18:58:33 1997 +0000
@@ -36,7 +36,7 @@
   "SGML editing mode"
   :group 'languages)
 
-(defcustom sgml-transformation nil
+(defcustom sgml-transformation 'identity
   "*Default value for `skeleton-transformation' (which see) in SGML mode."
   :type 'function
   :group 'sgml)
@@ -358,8 +358,8 @@
 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. 
+If you like upcased tags, put (setq sgml-transformation 'upcase) in
+your .emacs file.
 
 Use \\[sgml-validate] to validate your document with an SGML parser.
 
@@ -464,19 +464,26 @@
 (defun sgml-name-8bit-mode ()
   "Toggle insertion of 8 bit characters."
   (interactive)
-  (setq sgml-name-8bit-mode (not sgml-name-8bit-mode)))
+  (setq sgml-name-8bit-mode (not sgml-name-8bit-mode))
+  (message "sgml name 8 bit mode  is now %"
+	   (if sgml-name-8bit-mode "ON" "OFF")))
 
 
+; When an element of a skeleton is a string "str", it is passed
+; through skeleton-transformation and inserted.  If "str" is to be
+; inserted literally, one should obtain it as the return value of a
+; function, e.g. (identity "str").
 
 (define-skeleton sgml-tag
   "Insert a tag you are prompted for, optionally with attributes.
-Completion and configuration is according to `sgml-tag-alist'.
-If you like tags and attributes in uppercase set `skeleton-transformation'
-to `upcase'."
+Completion and configuration is done according to `sgml-tag-alist'.
+If you like tags and attributes in uppercase do \\[set-variable]
+skeleton-transformation RET upcase RET, or put this in your .emacs
+  (setq sgml-transformation 'upcase)."
   (funcall skeleton-transformation
 	   (completing-read "Tag: " sgml-tag-alist))
   ?< (setq v1 (eval str)) |
-  (("") -1 '(undo-boundary) "&lt;") |
+  (("") -1 '(undo-boundary) (identity "&lt;")) |	; see comment above
   (("") '(setq v2 (sgml-attributes v1 t)) ?>
    (if (string= "![" v1)
        (prog1 '(("") " [ " _ " ]]")
@@ -494,14 +501,17 @@
 
 (autoload 'skeleton-read "skeleton")
 
-(defun sgml-attributes (alist &optional quiet)
-  "When at toplevel of a tag, interactively insert attributes."
+(defun sgml-attributes (tag &optional quiet)
+  "When at toplevel of a tag, interactively insert attributes.
+
+Completion and configuration of TAG is done according to `sgml-tag-alist'.
+If QUIET, does not print a message when there are no attributes for TAG."
   (interactive (list (save-excursion (sgml-beginning-of-tag t))))
-  (or (stringp alist) (error "Wrong context for adding attribute"))
-  (if alist
+  (or (stringp tag) (error "Wrong context for adding attribute"))
+  (if tag
       (let ((completion-ignore-case t)
+	    (alist (cdr (assoc (downcase tag) sgml-tag-alist)))
 	    car attribute i)
-	(setq alist (cdr (assoc (downcase alist) sgml-tag-alist)))
 	(if (or (symbolp (car alist))
 		(symbolp (car (car alist))))
 	    (setq car (car alist)
@@ -510,7 +520,8 @@
 	    (message "No attributes configured."))
 	(if (stringp (car alist))
 	    (progn
-	      (insert (if (eq (preceding-char) ? ) "" ? ) (car alist))
+	      (insert (if (eq (preceding-char) ? ) "" ? )
+		      (funcall skeleton-transformation (car alist)))
 	      (sgml-value alist))
 	  (setq i (length alist))
 	  (while (> i 0)
@@ -518,7 +529,7 @@
 	    (insert (funcall skeleton-transformation
 			     (setq attribute
 				   (skeleton-read '(completing-read
-						    "[Attribute]: "
+						    "Attribute: "
 						    alist)))))
 	    (if (string= "" attribute)
 		(setq i 0)
@@ -771,6 +782,8 @@
 	t)))
 
 (defun sgml-value (alist)
+  "Interactively insert value taken from ALIST, which is an
+`attributerule' as described in sgml-tag-alist."
   (setq alist (cdr alist))
   (if (stringp (car alist))
       (insert "=\"" (car alist) ?\")
@@ -779,7 +792,7 @@
 	    (progn
 	      (insert "=\"")
 	      (setq alist (skeleton-read '(completing-read
-					   "[Value]: " (cdr alist))))
+					   "Value: " (cdr alist))))
 	      (if (string< "" alist)
 		  (insert alist ?\")
 		(delete-backward-char 2))))
@@ -895,8 +908,8 @@
 
 ; should code exactly HTML 3 here when that is finished
 (defvar html-tag-alist
-  (let* ((1-9 '(("8") ("9")
-		("1") ("2") ("3") ("4") ("5") ("6") ("7")))
+  (let* ((1-7 '(("1") ("2") ("3") ("4") ("5") ("6") ("7")))
+	 (1-9 '(,@1-7 ("8") ("9")))
 	 (align '(("align" ("left") ("center") ("right"))))
 	 (valign '(("top") ("middle") ("bottom") ("baseline")))
 	 (rel '(("next") ("previous") ("parent") ("subdocument") ("made")))
@@ -908,10 +921,8 @@
 		 ("rel" ,@rel)
 		 ("rev" ,@rel)
 		 ("title")))
-	 (list '((nil \n
-		      ( "List item: "
-			"<li>" str \n))
-		 ("type" ("A") ("a") ("I") ("i") ("1"))))
+	 (list '((nil \n ( "List item: "
+			   "<li>" str \n))))
 	 (cell `(t
 		 ,align
 		 ("valign" ,@valign)
@@ -923,7 +934,7 @@
     `(("a" ,name ,@link)
       ("base" t ,@href)
       ("dir" ,@list)
-      ("font" ("size" ("-1") ("+1") ("-2") ("+2") ,@(cdr (cdr 1-9))))
+      ("font" nil "size" ("-1") ("+1") ("-2") ("+2") ,@1-7)
       ("form" (\n _ \n "<input type=\"submit\" value=\"\">")
        ("action" ,@(cdr href)) ("method" ("get") ("post")))
       ("h1" ,@align)
@@ -942,7 +953,7 @@
        ("value"))
       ("link" t ,@link)
       ("menu" ,@list)
-      ("ol" ,@list)
+      ("ol" ,@list ("type" ("A") ("a") ("I") ("i") ("1")))
       ("p" t ,@align)
       ("select" (nil \n
 		     ("Text: "
@@ -956,7 +967,7 @@
       ("td" ,@cell)
       ("textarea" ,name ("rows" ,@1-9) ("cols" ,@1-9))
       ("th" ,@cell)
-      ("ul" ,@list)
+      ("ul" ,@list ("type" ("disc") ("circle") ("square")))
 
       ,@sgml-tag-alist
 
@@ -987,7 +998,7 @@
 		   "<dt>" str "<dd>" _ \n)))
       ("dt" (t _ "<dd>"))
       ("em")
-      ("fn" "id" "fn")
+      ;("fn" "id" "fn")  ; ???
       ("head" \n)
       ("html" (\n
 	       "<head>\n"
@@ -1057,7 +1068,7 @@
     ("figa" . "Figure anchor")
     ("figd" . "Figure description")
     ("figt" . "Figure text")
-    ("fn" . "?")
+    ;("fn" . "?")  ; ???
     ("font" . "Font size")
     ("form" . "Form with input fields")
     ("group" . "Document grouping")
@@ -1266,7 +1277,7 @@
   '(setq v1 nil
 	 v2 nil)
   ("Value: "
-   "<input type=\"" (identity "checkbox")
+   "<input type=\"" (identity "checkbox") ; see comment above about identity
    "\" name=\"" (or v1 (setq v1 (skeleton-read "Name: ")))
    "\" value=\"" str ?\"
    (if (y-or-n-p "Set \"checked\" attribute? ")
@@ -1283,7 +1294,7 @@
   '(setq v1 nil
 	 v2 (cons nil nil))
   ("Value: "
-   "<input type=\"" (identity "radio")
+   "<input type=\"" (identity "radio") ; see comment above about identity
    "\" name=\"" (or (car v2) (setcar v2 (skeleton-read "Name: ")))
    "\" value=\"" str ?\"
    (if (and (not v1) (setq v1 (y-or-n-p "Set \"checked\" attribute? ")))