Mercurial > emacs
changeset 43558:5ee62a93032e
(ctext-pre-write-conversion): Handle the
case when FROM is a string, and when we are called from
build_annotations_2.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Tue, 26 Feb 2002 16:27:47 +0000 |
parents | a12065572c32 |
children | 244e1fe7e57f |
files | lisp/international/mule.el |
diffstat | 1 files changed, 21 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/international/mule.el Tue Feb 26 16:09:19 2002 +0000 +++ b/lisp/international/mule.el Tue Feb 26 16:27:47 2002 +0000 @@ -1392,9 +1392,23 @@ of octets per character is variable), 1, 2, 3, or 4.") (defun ctext-pre-write-conversion (from to) - "Encode characters between FROM and TO as Compound Text w/Extended Segments." - (buffer-disable-undo) ; minimize consing due to insertions and deletions - (narrow-to-region from to) + "Encode characters between FROM and TO as Compound Text w/Extended Segments. + +If FROM is a string, or if the current buffer is not the one set up for us +by run_pre_post_conversion_on_str, generate a new temp buffer, insert the +text, and convert it in the temporary buffer. Otherwise, convert in-place." + (cond ((and (string= (buffer-name) " *code-converting-work*") + (not (stringp from))) + ; Minimize consing due to subsequent insertions and deletions. + (buffer-disable-undo) + (narrow-to-region from to)) + (t + (let ((buf (current-buffer))) + (set-buffer (generate-new-buffer " *temp")) + (buffer-disable-undo) + (if (stringp from) + (insert from) + (insert-buffer-substring buf from to))))) (encode-coding-region from to 'ctext-no-compositions) ;; Replace ISO-2022 charset designations with extended segments, for ;; those charsets that are not part of the official X registry. @@ -1404,6 +1418,8 @@ (case-fold-search nil) pt desig encode-info encoding chset noctets textlen) (set-buffer-multibyte nil) + ;; The regexp below finds the leading sequences for big5 and + ;; iso8859-1[03-6] charsets. (while (re-search-forward "\e\\(\$([01]\\|-[VY_bf]\\)" nil 'move) (setq desig (match-string 1) pt (point-marker) @@ -1416,6 +1432,7 @@ (cond ((eq encoding t) ; only the leading sequence needs to be changed (setq textlen (+ (- newpt pt) (length chset) 1)) + ;; Generate the ICCCM control sequence for an extended segment. (replace-match (format "\e%%/%d%c%c%s" noctets (+ (/ textlen 128) 128) @@ -1437,6 +1454,7 @@ chset)))) (goto-char newpt)))) (set-buffer-multibyte t) + ;; Must return nil, as build_annotations_2 expects that. nil) ;;; FILE I/O