emacs-devel
[Top][All Lists]
Advanced

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

Re: string-as-unibyte


From: YAMAMOTO Mitsuharu
Subject: Re: string-as-unibyte
Date: Tue, 19 Jul 2005 12:49:36 +0900 (JST)

>>>>> On Tue, 19 Jul 2005 11:56:37 +0900, Kenichi Handa <address@hidden> said:

> If a multibyte string is given to mac-code-convert-string, and the
> string is made mutlibyte by string-to-multibyte from the raw-byte
> sequence (ex. inserting a file by raw-text in a mutlibyte buffer and
> extracting a string by buffer-substring), using Fstring_as_unibyte
> is correct.

That's the case for mac-code-convert-string.  Thanks for clarifying.

As for the `mac-hfs+' coding system shown in my previous mail, its
coding-system-type should have been 5 (raw-text), rather than 0
(emacs-mule) so that the leading bytes for eight-bit-control and
eight-bit-graphic may not be eaten.  And I had to do
(set-buffer-multibyte t) explicitly for the case of
decode-coding-string.  Maybe " *code-converting-work*" in
ctext-post-read-conversion should be " *code-conversion-work*" ?

                                     YAMAMOTO Mitsuharu
                                address@hidden

(make-coding-system
 'mac-hfs+
 5
 (coding-system-mnemonic 'utf-8)
 "Like utf-8, but additionally does Mac HFS+ composition on decoding."
 (coding-system-flags 'utf-8)
 (list (cons 'safe-charsets (coding-system-get 'utf-8 'safe-charsets))
       '(post-read-conversion . mac-hfs+-post-read-conversion)
       '(pre-write-conversion . mac-hfs+-pre-write-conversion)))

(defun mac-hfs+-post-read-conversion (length)
  (save-excursion
    (save-restriction
      (narrow-to-region (point) (+ (point) length))
      (let ((in-workbuf (string= (buffer-name) " *code-conversion-work*"))
            (str (mac-code-convert-string (buffer-string)
                                          'utf-8 'utf-8 'HFS+C)))
        (when str
          (erase-buffer)
          (insert (if enable-multibyte-characters
                      (string-to-multibyte str) str)))
        (if in-workbuf
            (set-buffer-multibyte t))
        (setq length (decode-coding-region (point-min) (point-max) 'utf-8))
        ;; We are inside a post-read-conversion function, so the
        ;; original post-read-conversion for utf-8 is not
        ;; automatically called.
        (goto-char (point-min))
        (funcall (or (coding-system-get 'utf-8 'post-read-conversion)
                     'identity)
                 length)))))

(defun mac-hfs+-pre-write-conversion (beg end)
  (funcall (or (coding-system-get 'utf-8 'pre-write-conversion) 'ignore)
           beg (+ beg (encode-coding-region beg end 'utf-8))))

(setq default-file-name-coding-system 'mac-hfs+)




reply via email to

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