changeset 39616:13a1b8cf5135

added `html-xhtml' for XHTML input
author Sam Steingold <sds@gnu.org>
date Fri, 05 Oct 2001 16:21:14 +0000
parents 4287ce76bf9f
children d39706d66016
files lisp/ChangeLog lisp/textmodes/sgml-mode.el
diffstat 2 files changed, 55 insertions(+), 31 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Fri Oct 05 15:53:02 2001 +0000
+++ b/lisp/ChangeLog	Fri Oct 05 16:21:14 2001 +0000
@@ -1,3 +1,12 @@
+2001-10-05  Sam Steingold  <sds@gnu.org>
+
+	* textmodes/sgml-mode.el (html-xhtml): New user option.
+	(html-tag-alist, html-horizontal-rule, html-image, html-line)
+	(html-ordered-list, html-unordered-list, html-list-item)
+	(html-paragraph, html-checkboxes, html-radio-buttons): Use it.
+	(sgml-skip-close-p): New function.
+	(sgml-value): Use it.
+
 2001-10-05  Sam Steingold  <sds@gnu.org>
 
 	* calendar/diary-lib.el (diary-entry-compare): When times are
--- a/lisp/textmodes/sgml-mode.el	Fri Oct 05 15:53:02 2001 +0000
+++ b/lisp/textmodes/sgml-mode.el	Fri Oct 05 16:21:14 2001 +0000
@@ -95,16 +95,15 @@
     (define-key map "\C-c?" 'sgml-tag-help)
     (define-key map "\C-c8" 'sgml-name-8bit-mode)
     (define-key map "\C-c\C-v" 'sgml-validate)
-    (if sgml-quick-keys
-	(progn
-	  (define-key map "&" 'sgml-name-char)
-	  (define-key map "<" 'sgml-tag)
-	  (define-key map " " 'sgml-auto-attributes)
-	  (define-key map ">" 'sgml-maybe-end-tag)
-	  (if (memq ?\" sgml-specials)
-	      (define-key map "\"" 'sgml-name-self))
-	  (if (memq ?' sgml-specials)
-	      (define-key map "'" 'sgml-name-self))))
+    (when sgml-quick-keys
+      (define-key map "&" 'sgml-name-char)
+      (define-key map "<" 'sgml-tag)
+      (define-key map " " 'sgml-auto-attributes)
+      (define-key map ">" 'sgml-maybe-end-tag)
+      (when (memq ?\" sgml-specials)
+        (define-key map "\"" 'sgml-name-self))
+      (when (memq ?' sgml-specials)
+        (define-key map "'" 'sgml-name-self)))
     (define-key map (vector (make-char 'latin-iso8859-1))
       'sgml-maybe-name-self)
     (define-key map [menu-bar sgml] (cons "SGML" menu-map))
@@ -509,9 +508,8 @@
     (if (string= "![" ,str)
 	(prog1 '(("") " [ " _ " ]]")
 	  (backward-char))
-      (if (or (eq v2 t)
-	      (string-match "^[/!?]" ,str))
-	  ()
+      (unless (or (sgml-skip-close-p v2) ; (eq v2 t)
+                  (string-match "^[/!?]" ,str))
 	(if (symbolp v2)
 	    ;; We go use `identity' to prevent skeleton from passing
 	    ;; `str' through skeleton-transformation a second time.
@@ -807,13 +805,16 @@
 	   (match-end 0))
 	t)))
 
+(defun sgml-skip-close-p (obj)
+  (and (eq obj t) (not html-xhtml)))
+
 (defun sgml-value (alist)
   "Interactively insert value taken from attributerule ALIST.
 See `sgml-tag-alist' for info about attributerules.."
   (setq alist (cdr alist))
   (if (stringp (car alist))
       (insert "=\"" (car alist) ?\")
-    (if (eq (car alist) t)
+    (if (sgml-skip-close-p (car alist)) ; (eq (car alist) t)
 	(if (cdr alist)
 	    (progn
 	      (insert "=\"")
@@ -940,6 +941,13 @@
     (li . "o "))
   "Value of `sgml-display-text' for HTML mode.")
 
+
+(defcustom html-xhtml nil
+  "*When non-nil, tag insertion functions will be XHTML-compliant."
+  :type 'boolean
+  :version "21.2"
+  :group 'sgml)
+
 ;; should code exactly HTML 3 here when that is finished
 (defvar html-tag-alist
   (let* ((1-7 '(("1") ("2") ("3") ("4") ("5") ("6") ("7")))
@@ -955,7 +963,8 @@
 		 ("rel" ,@rel)
 		 ("rev" ,@rel)
 		 ("title")))
-	 (list '((nil \n ("List item: " "<li>" str \n))))
+	 (list '((nil \n ("List item: " "<li>" str
+                          (if html-xhtml "</li>") \n))))
 	 (cell `(t
 		 ,@align
 		 ("valign" ,@valign)
@@ -1029,7 +1038,8 @@
       ("div")
       ("dl" (nil \n
 		 ( "Term: "
-		   "<dt>" str "<dd>" _ \n)))
+		   "<dt>" str (if html-xhtml "</dt>")
+                   "<dd>" _ (if html-xhtml "</dd>") \n)))
       ("dt" (t _ "<dd>"))
       ("em")
       ;("fn" "id" "fn")  ; ???
@@ -1100,7 +1110,7 @@
     ("dir" . "Directory list (obsolete)")
     ("dl" . "Definition list")
     ("dt" . "Term to be definined")
-    ("em" . "Emphasised") 
+    ("em" . "Emphasised")
     ("embed" . "Embedded data in foreign format")
     ("fig" . "Figure")
     ("figa" . "Figure anchor")
@@ -1217,7 +1227,7 @@
   (setq sentence-end
 	(if sentence-end-double-space
 	    "[.?!][]\"')}]*\\(<[^>]*>\\)*\\($\\| $\\|\t\\|  \\)[ \t\n]*"
-	    
+
 	  "[.?!][]\"')}]*\\(<[^>]*>\\)*\\($\\| \\|\t\\)[ \t\n]*"))
   (setq sgml-tag-alist html-tag-alist
 	sgml-face-tag-alist html-face-tag-alist
@@ -1312,43 +1322,44 @@
 (define-skeleton html-horizontal-rule
   "HTML horizontal rule tag."
   nil
-  "<hr>" \n)
+  (if html-xhtml "<hr/>" "<hr>") \n)
 
 (define-skeleton html-image
   "HTML image tag."
   nil
-  "<img src=\"" _ "\">")
+  "<img src=\"" _ "\""
+  (if html-xhtml "/>" ">"))
 
 (define-skeleton html-line
   "HTML line break tag."
   nil
-  "<br>" \n)
+  (if html-xhtml "<br/>" "<br>") \n)
 
 (define-skeleton html-ordered-list
   "HTML ordered list tags."
   nil
   "<ol>" \n
-  "<li>" _ \n
+  "<li>" _ (if html-xhtml "</li>") \n
   "</ol>")
 
 (define-skeleton html-unordered-list
   "HTML unordered list tags."
   nil
   "<ul>" \n
-  "<li>" _ \n
+  "<li>" _ (if html-xhtml "</li>") \n
   "</ul>")
 
 (define-skeleton html-list-item
   "HTML list item tag."
   nil
   (if (bolp) nil '\n)
-  "<li>")
+  "<li>" _ (if html-xhtml "</li>"))
 
 (define-skeleton html-paragraph
   "HTML paragraph tag."
   nil
   (if (bolp) nil ?\n)
-  \n "<p>")
+  \n "<p>" _ (if html-xhtml "</p>"))
 
 (define-skeleton html-checkboxes
   "Group of connected checkbox inputs."
@@ -1359,11 +1370,13 @@
    "<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? ")
-        (funcall skeleton-transformation " checked")) ">"
+   (when (y-or-n-p "Set \"checked\" attribute? ")
+     (funcall skeleton-transformation " checked"))
+   (if html-xhtml "/>" ">")
    (skeleton-read "Text: " (capitalize str))
    (or v2 (setq v2 (if (y-or-n-p "Newline after text? ")
-		       (funcall skeleton-transformation "<br>")
+		       (funcall skeleton-transformation
+                                (if html-xhtml "<br/>" "<br>"))
 		     "")))
    \n))
 
@@ -1376,11 +1389,13 @@
    "<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? ")))
-       (funcall skeleton-transformation " checked") ">")
+   (when (and (not v1) (setq v1 (y-or-n-p "Set \"checked\" attribute? ")))
+     (funcall skeleton-transformation " checked"))
+   (if html-xhtml "/>" ">")
    (skeleton-read "Text: " (capitalize str))
    (or (cdr v2) (setcdr v2 (if (y-or-n-p "Newline after text? ")
-			       (funcall skeleton-transformation "<br>")
+			       (funcall skeleton-transformation
+                                        (if html-xhtml "<br/>" "<br>"))
 			     "")))
    \n))