emacs-devel
[Top][All Lists]
Advanced

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

Re: regex encoding


From: Chip Coldwell
Subject: Re: regex encoding
Date: Tue, 1 Aug 2006 16:38:57 -0400 (EDT)

On Tue, 1 Aug 2006, Reiner Steib wrote:

| [a-zA-ZÄÖÜäößü]

If you intend to send UTF-8, you MUA should not declare it as
"Content-Type: TEXT/PLAIN; charset=ISO-8859-1".  ;-)

Ooops.  I haven't tamed my MUA yet.  It's only been ten years.

My question is: are emacs regex character classes limited to the
iso-8859-1 character set, or is there some way to represent Unicode
(such as UTF-8) characters in a character class?

AFAIK, you can write the chars in UTF-8 if you specify the encoding of
the lisp file, cf. (info "(emacs)Specify Coding"):

--8<---------------cut here---------------start------------->8---
;; -*- coding: utf-8 -*-
(defun rs-test ()
 (interactive)
 (re-search-forward "[ÄÖÜäößü]"))
--8<---------------cut here---------------end--------------->8---

I don't know if there's a reason why isn't used in `ispell.el'.

The particular issue is that ispell is currently broken if your LANG
environment variable specifies UTF-8 encoding, your buffer is UTF-8
encoded and contains one of these non-ASCII characters, and you
specify the "deutsch8" dictionary.  ispell-word generates the error:

"Ispell and its process have different character maps"

What happens is that emacs transcodes the word to iso-8859-1 before
sending it to the aspell process, which most likely is respecting a
the LANG environment variable.  If you change the value of the
ispell-dictionary-alist for "deutch8" from

   ("deutsch8"
    "[a-zA-Z\304\326\334\344\366\337\374]"
    "[^a-zA-Z\304\326\334\344\366\337\374]"
    "[']" t ("-C" "-d" "deutsch") "~latin1" iso-8859-1)

to

   ("deutsch8"
    "[a-zA-Z\304\326\334\344\366\337\374]"
    "[^a-zA-Z\304\326\334\344\366\337\374]"
    "[']" t ("-C" "-d" "deutsch") "~latin1" utf-8)

the regex doesn't match words in the buffer properly.  Changing it to

   ("deutsch8"
    "[a-zA-Z\304\326\334\344\366\337\374]"
    "[^a-zA-Z\304\326\334\344\366\337\374]"
    "[']" t ("-C" "-d" "deutsch" "--encoding=iso8859-1") "~latin1" iso-8859-1)

does seem to work.

Chip

--
Charles M. "Chip" Coldwell
Senior Software Engineer
Red Hat, Inc
978-392-2426

reply via email to

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