diff lisp/psgml/psgml-other.el @ 2:ac2d302a0011 r19-15b2

Import from CVS: tag r19-15b2
author cvs
date Mon, 13 Aug 2007 08:46:35 +0200
parents 376386a54a3c
children bcdc7deadc19
line wrap: on
line diff
--- a/lisp/psgml/psgml-other.el	Mon Aug 13 08:45:53 2007 +0200
+++ b/lisp/psgml/psgml-other.el	Mon Aug 13 08:46:35 2007 +0200
@@ -1,5 +1,5 @@
 ;;;; psgml-other.el --- Part of SGML-editing mode with parsing support
-;; $Id: psgml-other.el,v 1.1.1.1 1996/12/18 03:35:21 steve Exp $
+;; $Id: psgml-other.el,v 1.1.1.2 1996/12/18 03:47:14 steve Exp $
 
 ;; Copyright (C) 1994 Lennart Staflin
 
@@ -23,9 +23,7 @@
 
 ;;;; Commentary:
 
-;;; Part of psgml.el
-
-;;; Menus for use with FSF Emacs 19
+;;; Part of psgml.el. Code not compatible with XEmacs.
 
 
 ;;;; Code:
@@ -38,115 +36,6 @@
 into several panes.")
 
 
-;;;; Menu bar
-
-(easy-menu-define
- sgml-dtd-menu sgml-mode-map "DTD menu"
- '("DTD"))
-
-(defconst sgml-dtd-root-menu
-  '("DTD"
-    ["Parse DTD"  sgml-parse-prolog t]
-    ("Info"
-     ["General DTD info"	sgml-general-dtd-info           t]
-     ["Describe element type"	sgml-describe-element-type	t]
-     ["Describe entity"		sgml-describe-entity		t]
-     ["List elements" 		sgml-list-elements 		t]
-     ["List attributes" 	sgml-list-attributes 		t]
-     ["List terminals" 		sgml-list-terminals 		t]
-     ["List content elements" 	sgml-list-content-elements 	t]
-     ["List occur in elements" 	sgml-list-occur-in-elements 	t]
-     )
-    "--"
-    ["Load Parsed DTD"  sgml-load-dtd t]
-    ["Save Parsed DTD"  sgml-save-dtd t]
-    ))
-
-(easy-menu-define
- sgml-view-menu sgml-mode-map "View menu"
- '("View"
-   ["Fold Element"	sgml-fold-element	t]
-   ["Fold Subelement"	sgml-fold-subelement	t]
-   ["Unfold Line"	sgml-unfold-line	t]
-   ["Unfold Element"	sgml-unfold-element	t]
-   ["Expand"		sgml-expand-element	t]
-   ["Fold Region"	sgml-fold-region	t]
-   ["Unfold All"	sgml-unfold-all		t]
-   ["Hide Tags"		sgml-hide-tags		t]
-   ["Hide Attributes"	sgml-hide-attributes	t]
-   ["Show All Tags"	sgml-show-tags		t]
-   )
- )
-
-
-(easy-menu-define
- sgml-markup-menu sgml-mode-map "Markup menu"
- '("Markup")
-)
-
-(defconst sgml-markup-root-menu
-  '("Markup"
-    ["Insert Element"	sgml-element-menu	t]
-    ["Insert Start-Tag" sgml-start-tag-menu	t]
-    ["Insert End-Tag"	sgml-end-tag-menu	t]
-    ["Tag Region"	sgml-tag-region-menu	t]
-    ["Insert Attribute" sgml-attrib-menu	t]
-    ["Insert Entity"	sgml-entities-menu	t]
-    ))
-
-(easy-menu-define
- sgml-move-menu sgml-mode-map "Menu of move commands"
- '("Move"
-   ["Next trouble spot" sgml-next-trouble-spot t]
-   ["Next data field"   sgml-next-data-field   t]
-   ["Forward element"	sgml-forward-element t]
-   ["Backward element"  sgml-backward-element t]
-   ["Up element"	sgml-up-element t]
-   ["Down element"	sgml-down-element t]
-   ["Backward up element" sgml-backward-up-element t]
-   ["Beginning of element" sgml-beginning-of-element t]
-   ["End of element"	sgml-end-of-element t]
-   ))
-
-(easy-menu-define
- sgml-modify-menu sgml-mode-map "Menu of modification commands"
- '("Modify"
-   ["Normalize"			sgml-normalize	t]
-   ["Expand All Short References"	sgml-expand-all-shortrefs t]
-   ["Expand Entity Reference"	sgml-expand-entity-reference t]
-   ["Normalize Element"		sgml-normalize-element t]
-   ["Make Character Reference"	sgml-make-character-reference t]
-   ["Unmake Character Reference"	(sgml-make-character-reference t) t]
-   ["Fill Element"		sgml-fill-element t]
-   ["Change Element Name..."	sgml-change-element-name t]
-   ["Edit Attributes..."	sgml-edit-attributes t]
-   ["Kill Markup"		sgml-kill-markup t]
-   ["Kill Element"		sgml-kill-element t]
-   ["Untag Element"		sgml-untag-element t]
-   ["Trim and leave element"	sgml-trim-and-leave-element t]
-   ["Decode Character Entities"  sgml-charent-to-display-char t]
-   ["Encode Characters"		sgml-display-char-to-charent t]
-   )
- )
-
-(easy-menu-define
- sgml-main-menu sgml-mode-map "Main menu"
- '("SGML"
-   ["Reset Buffer"	normal-mode t]
-   ["End Element"	sgml-insert-end-tag t]
-   ["Show Context"	sgml-show-context t]
-   ["What Element"	sgml-what-element t]
-   ["List Valid Tags"	sgml-list-valid-tags t]
-   ["Show/Hide Warning Log"  sgml-show-or-clear-log t]
-   ["Validate"		sgml-validate t]
-   ["File Options >"	sgml-file-options-menu t]
-   ["User Options >"	sgml-user-options-menu t]
-   ["Save File Options"  sgml-save-options t]
-   ["Submit Bug Report"  sgml-submit-bug-report t]
-   )
- )
-
-
 ;;;; Key Commands
 
 ;; Doesn't this work in Lucid? ***
@@ -164,22 +53,21 @@
   (x-popup-menu
    event
    (let ((menus (list (cons title entries))))
-     (cond ((> (length entries)
-	       sgml-max-menu-size)
-	    (setq menus
-		  (loop for i from 1 while entries
-			collect
-			(let ((submenu
-			       (subseq entries 0 (min (length entries)
-						      sgml-max-menu-size))))
-			  (setq entries (nthcdr sgml-max-menu-size
-						entries))
-			  (cons
-			   (format "%s '%s'-'%s'"
-				   title
-				   (sgml-range-indicator (caar submenu))
-				   (sgml-range-indicator (caar (last submenu))))
-			   submenu))))))
+     (cond
+      ((> (length entries) sgml-max-menu-size)
+       (setq menus
+	     (loop for i from 1 while entries
+		   collect
+		   (let ((submenu
+			  (subseq entries 0 (min (length entries)
+						 sgml-max-menu-size))))
+		     (setq entries (nthcdr sgml-max-menu-size entries))
+		     (cons
+		      (format "%s '%s'-'%s'"
+			      title
+			      (sgml-range-indicator (caar submenu))
+			      (sgml-range-indicator (caar (last submenu))))
+		      submenu))))))
      (cons title menus))))
 
 (defun sgml-range-indicator (string)
@@ -197,61 +85,6 @@
 					; on the first level
   (eval (car (x-popup-menu event (cons title menus)))))
 
-
-
-;;;; Build Custom Menus
-
-(defun sgml-build-custom-menus ()
-  ;; Build custom menus
-;;  (sgml-add-custom-entries
-;;   sgml-markup-menu
-;;   (mapcar (function (lambda (e)
-;;		       (sgml-markup (car e) (cadr e))))
-;;	   sgml-custom-markup))
-  (easy-menu-define
-   sgml-markup-menu sgml-mode-map "Markup menu"
-   (append sgml-markup-root-menu
-	   (list "----")
-	   (loop for e in sgml-custom-markup collect
-		 (vector (first e)
-			 (` (sgml-insert-markup  (, (cadr e))))
-			 t))))
-  (easy-menu-define
-   sgml-dtd-menu sgml-mode-map "DTD menu"
-   (append sgml-dtd-root-menu
-	   (list "----")
-	   (loop for e in sgml-custom-dtd collect
-		 (vector (first e)
-			 (` (sgml-doctype-insert (, (cadr e))
-						 '(, (cddr e))))
-			 t)))))
-
-
-;(defun sgml-add-custom-entries (keymap entries)
-;  "Add to KEYMAP the ENTRIES, a list of (name . command) pairs.
-;The entries are added last in keymap and a blank line precede it."
-;  (let ((l keymap)
-;	(last (last keymap)))		; cons with keymap name
-;    ;; Find the cons before 'blank-c' event, or last cons.
-;    (while (and (cdr l)
-;		(consp (cadr l))
-;		(not (eq 'blank-c (caadr l))))
-;      (setq l (cdr l)))
-;    ;; Delete entries after
-;    (setcdr l nil)
-;    (when entries			; now add the entries
-;      (setcdr l
-;	      (cons
-;	       '(blank-c "")		; a blank line before custom entries
-;	       (loop for i from 0 as e in entries
-;		     collect (cons (intern (concat "custom" i)) e)))))
-;    ;; add keymap name to keymap
-;    (setcdr (last keymap) last)))
-
-
-
-
-
 
 ;;;; Insert with properties
 
@@ -271,42 +104,61 @@
 
 ;;;; Set face of markup
 
+(defvar sgml-use-text-properties nil)
+
 (defun sgml-set-face-for (start end type)
-  (let ((current (overlays-at start))
-	(face (cdr (assq type sgml-markup-faces)))
-	(pos start)
-	o)
-    (while current
-      (cond ((and (null o)
-		  (eq type (overlay-get (car current) 'sgml-type)))
-	     (setq o (car current)))
-	    ((overlay-get (car current) 'sgml-type)
-	     (delete-overlay (car current))))
-      (setq current (cdr current)))
-    (while (< (setq pos (next-overlay-change pos))
-	      end)
-      (setq current (overlays-at pos))
-      (while current
-	(when (overlay-get (car current) 'sgml-type)
-	  (delete-overlay (car current)))
-	(setq current (cdr current))))
-    (cond (o
-	   (move-overlay o start end)
-	   (if (null (overlay-get o 'face))
-	       (overlay-put o 'face face)))
-	  (face
-	   (setq o (make-overlay start end))
-	   (overlay-put o 'sgml-type type)
-	   (overlay-put o 'face face)))))
+  (let ((face (cdr (assq type sgml-markup-faces))))
+    (cond
+     (sgml-use-text-properties
+      (let ((inhibit-read-only t)
+	    (after-change-function nil)
+	    (before-change-function nil))
+	(put-text-property start end 'face face)))
+     (t
+      (let ((current (overlays-at start))
+	    (pos start)
+	    old-overlay)
+	(while current
+	  (cond ((and (null old-overlay)
+		      (eq type (overlay-get (car current) 'sgml-type)))
+		 (setq old-overlay (car current)))
+		((overlay-get (car current) 'sgml-type)
+		 (message "delov: %s" (overlay-get (car current) 'sgml-type))
+		 (delete-overlay (car current))))
+	  (setq current (cdr current)))
+	(while (< (setq pos (next-overlay-change pos))
+		  end)
+	  (setq current (overlays-at pos))
+	  (while current
+	    (when (overlay-get (car current) 'sgml-type)
+	      (delete-overlay (car current)))
+	    (setq current (cdr current))))
+	(cond (old-overlay
+	       (move-overlay old-overlay start end)
+	       (if (null (overlay-get old-overlay 'face))
+		   (overlay-put old-overlay 'face face)))
+	      (face
+	       (setq old-overlay (make-overlay start end))
+	       (overlay-put old-overlay 'sgml-type type)
+	       (overlay-put old-overlay 'face face))))))))
 
 (defun sgml-set-face-after-change (start end &optional pre-len)
-  (when sgml-set-face
+  ;; If inserting in front of an markup overlay, move that overlay.
+  ;; this avoids the overlay beeing deleted and recreated by
+  ;; sgml-set-face-for.
+  (when (and sgml-set-face (not sgml-use-text-properties))
     (loop for o in (overlays-at start)
 	  do (cond
 	      ((not (overlay-get o 'sgml-type)))
 	      ((= start (overlay-start o))
 	       (move-overlay o end (overlay-end o)))))))
 
+(defun sgml-fix-overlay-after-change (overlay flag start end &optional size)
+  (message "sfix(%s): %d-%d (%s)" flag start end size)
+  (overlay-put overlay 'front-nonsticky t)
+  (when nil
+    (move-overlay overlay end (overlay-end overlay))))
+
 (defalias 'next-overlay-at 'next-overlay-change) ; fix bug in cl.el
 
 (defun sgml-clear-faces ()
@@ -316,6 +168,12 @@
 	do (delete-overlay o)))
 
 
+;;;; Emacs before 19.29
+
+(unless (fboundp 'buffer-substring-no-properties)
+  (defalias 'buffer-substring-no-properties 'buffer-substring))
+
+
 ;;;; Provide
 
 (provide 'psgml-other)