bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: html-mode: C-c 8 doesn't work properly


From: Eli Zaretskii
Subject: Re: html-mode: C-c 8 doesn't work properly
Date: Mon, 11 Feb 2002 21:43:29 +0200

> From: Felix Natter <fnatter@gmx.net>
> Newsgroups: gnu.emacs.bug
> Date: 11 Feb 2002 18:01:18 +0100
> 
> Sorry, the "C-c 8" (sgml-name-8bit-mode) feature which worked fine
> with Emacs 20 does not work with Emacs 21 at all.
> If sgml-name-8bit-mode is on, then you should be able to type i.e. '"o' and
> it will insert "&ouml;".

Does it help to say "C-x RET k latin-1 RET"?

Also, you may wish to try the following changes, which will be in the
next version:

2001-09-15  Eli Zaretskii  <eliz@is.elta.co.il>

        * textmodes/sgml-mode.el (sgml-mode-map): Bind 8-bit codes above
        127 to sgml-maybe-name-self.
        (sgml-name-8bit-mode): Doc fix.
        (sgml-char-names-table): New variable.
        (sgml-name-char): Support non-ASCII and mule-unicode-*
        characters.  Doc fix.
        (sgml-maybe-name-self): Convert unibyte characters to multibyte.

*** lisp/textmodes/sgml-mode.e~0        Fri Jul 20 12:11:26 2001
--- lisp/textmodes/sgml-mode.el Sat Sep 15 17:58:14 2001
***************
*** 107,112 ****
--- 107,116 ----
              (define-key map "'" 'sgml-name-self))))
      (define-key map (vector (make-char 'latin-iso8859-1))
        'sgml-maybe-name-self)
+     (let ((c 127)
+         (map (nth 1 map)))
+       (while (< (setq c (1+ c)) 256)
+       (aset map c 'sgml-maybe-name-self)))
      (define-key map [menu-bar sgml] (cons "SGML" menu-map))
      (define-key menu-map [sgml-validate] '("Validate" . sgml-validate))
      (define-key menu-map [sgml-name-8bit-mode]
***************
*** 143,149 ****
  
  
  (defcustom sgml-name-8bit-mode nil
!   "*When non-nil, insert 8 bit characters with their names."
    :type 'boolean
    :group 'sgml)
  
--- 147,153 ----
  
  
  (defcustom sgml-name-8bit-mode nil
!   "*When non-nil, insert non-ASCII characters as named entities."
    :type 'boolean
    :group 'sgml)
  
***************
*** 182,187 ****
--- 186,205 ----
     "oslash" "ugrave" "uacute" "ucirc" "uuml" "yacute" "thorn" "yuml"]
    "Vector of symbolic character names without `&' and `;'.")
  
+ (put 'sgml-table 'char-table-extra-slots 0)
+ 
+ (defvar sgml-char-names-table
+   (let ((table (make-char-table 'sgml-table))
+       (i 32)
+       elt)
+     (while (< i 256)
+       (setq elt (aref sgml-char-names i))
+       (if elt (aset table (make-char 'latin-iso8859-1 i) elt))
+       (setq i (1+ i)))
+     table)
+   "A table for mapping non-ASCII characters into SGML entity names.
+ Currently, only Latin-1 characters are supported.")
+ 
  
  ;; nsgmls is a free SGML parser in the SP suite available from
  ;; ftp.jclark.com and otherwise packaged for GNU systems.
***************
*** 449,456 ****
  
  (defun sgml-name-char (&optional char)
    "Insert a symbolic character name according to `sgml-char-names'.
! 8 bit chars may be inserted with the meta key as in M-SPC for no break space,
! or M-- for a soft hyphen."
    (interactive "*")
    (insert ?&)
    (or char
--- 467,475 ----
  
  (defun sgml-name-char (&optional char)
    "Insert a symbolic character name according to `sgml-char-names'.
! Non-ASCII chars may be inserted either with the meta key, as in M-SPC for
! no-break space or M-- for a soft hyphen; or via an input method or
! encoded keyboard operation."
    (interactive "*")
    (insert ?&)
    (or char
***************
*** 459,492 ****
    (insert char)
    (undo-boundary)
    (delete-backward-char 1)
!   (insert ?&
!         (or (aref sgml-char-names char)
!             (format "#%d" char))
!         ?\;))
! 
  
  (defun sgml-name-self ()
    "Insert a symbolic character name according to `sgml-char-names'."
    (interactive "*")
    (sgml-name-char last-command-char))
  
- 
  (defun sgml-maybe-name-self ()
    "Insert a symbolic character name according to `sgml-char-names'."
    (interactive "*")
    (if sgml-name-8bit-mode
!       (sgml-name-char
!        (if (eq (char-charset last-command-char) 'latin-iso8859-1)
!          (+ 128 (- last-command-char (make-char 'latin-iso8859-1)))
!        last-command-char))
      (self-insert-command 1)))
  
- 
  (defun sgml-name-8bit-mode ()
!   "Toggle insertion of 8 bit characters."
    (interactive)
    (setq sgml-name-8bit-mode (not sgml-name-8bit-mode))
!   (message "sgml name 8 bit mode  is now %s"
           (if sgml-name-8bit-mode "ON" "OFF")))
  
  
--- 478,519 ----
    (insert char)
    (undo-boundary)
    (delete-backward-char 1)
!   (cond
!    ((< char 256)
!     (insert ?&
!           (or (aref sgml-char-names char)
!               (format "#%d" char))
!           ?\;))
!    ((aref sgml-char-names-table char)
!     (insert ?& (aref sgml-char-names-table char) ?\;))
!    ((memq (char-charset char) '(mule-unicode-0100-24ff
!                               mule-unicode-2500-33ff
!                               mule-unicode-e000-ffff))
!     (insert (format "&#%d;" (encode-char char 'ucs))))
!    (t
!     (insert char))))
  
  (defun sgml-name-self ()
    "Insert a symbolic character name according to `sgml-char-names'."
    (interactive "*")
    (sgml-name-char last-command-char))
  
  (defun sgml-maybe-name-self ()
    "Insert a symbolic character name according to `sgml-char-names'."
    (interactive "*")
    (if sgml-name-8bit-mode
!       (let ((mc last-command-char))
!       (if (< mc 256)
!           (setq mc (unibyte-char-to-multibyte mc)))
!       (or mc (setq mc last-command-char))
!       (sgml-name-char mc))
      (self-insert-command 1)))
  
  (defun sgml-name-8bit-mode ()
!   "Toggle whether to insert named entities instead of non-ASCII characters."
    (interactive)
    (setq sgml-name-8bit-mode (not sgml-name-8bit-mode))
!   (message "sgml name entity mode is now %s"
           (if sgml-name-8bit-mode "ON" "OFF")))
  
  



reply via email to

[Prev in Thread] Current Thread [Next in Thread]