>>>>> On Mon, 18 Jul 2005 17:33:02 -0400, Stefan Monnier <[EMAIL PROTECTED]>
>>>>> said:
> Could you explain the need for the change below:
> 2005-07-16 YAMAMOTO Mitsuharu <[EMAIL PROTECTED]>
> * mac.c [TARGET_API_MAC_CARBON] (Fmac_code_convert_string):
> Use Fstring_as_unibyte instead of string_make_unibyte.
It is at the preparation stage of code conversion. So I think the
following comment in decode_coding_string (coding.c) is also
applicable to this case.
if (STRING_MULTIBYTE (str))
{
/* Decoding routines expect the source text to be unibyte. */
str = Fstring_as_unibyte (str);
> My experience is that string-as-unibyte is extremely rarely the
> right answer to solve a problem. If you described your motivation,
> I could add a comment in the code making it clear why this is needed
> here (or else come up with a better solution).
I was trying to make a coding system that almost works as utf-8, but
additionally does "HFS+ composition" (canonical composition with some
exclusions) on decoding.
YAMAMOTO Mitsuharu
[EMAIL PROTECTED]
;; For the Carbon port, Mac OS X 10.2 or later.
(make-coding-system
'mac-hfs+
0
(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 ((str (mac-code-convert-string (buffer-string)
'utf-8 'utf-8 'HFS+C)))
(when str
(erase-buffer)
(insert (if enable-multibyte-characters
(string-as-multibyte str) str)))
(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+)
_______________________________________________
Emacs-devel mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/emacs-devel