unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Kenichi Handa <handa@m17n.org>
Cc: user42@zip.com.au, monnier@iro.umontreal.ca, emacs-devel@gnu.org
Subject: Re: po file charset via auto-coding-functions
Date: Thu, 29 Dec 2005 20:47:38 +0900	[thread overview]
Message-ID: <E1ErwFu-00042M-00@etlken> (raw)
In-Reply-To: <E1Ereg8-0000Fq-AH@fencepost.gnu.org> (rms@gnu.org)

In article <E1Ereg8-0000Fq-AH@fencepost.gnu.org>, "Richard M. Stallman" <rms@gnu.org> writes:

> Please forgive the delay in my response.
>>  Binding buffer-file-name is rather unclean.
>>  And I don't see a reason to do it.

>>      so that find-operation-coding-system (called in
>>      decode-coding-inserted-region) can surely find
>>      po-find-file-coding-system to be called, and it can surely
>>      find the current buffer by get-file-buffer.

>>  decode-coding-inserted-region passes its FILENAME arg to
>>  find-operation-coding-system.  So all you need to do is to pass
>>  this funny file name to decode-coding-inserted-region.
>>  There is no need to bind buffer-file-name.

>>  Why are you concerned about whether get-file-buffer can be used with
>>  this funny file name?

>     A function registered in find-operation-coding-system have
>     to find which buffer is pretending to visit FILENAME if
>     FILENAME doesn't exist.  And, get-file-buffer is the only
>     (or at least the very natural) way for that.

> Could you give me an example or two?
> Which filename handler function does this?
> Looking at an example, I can understand the issue.

The attached in the patch for po.el I posted.   This change
utilizes get-file-buffer to check if there is a buffer
visiting (or pretending to visit) FILENAME.

---
Kenichi Handa
handa@m17n.org

*** po.el	08 Aug 2005 10:13:42 +0900	1.12
--- po.el	18 Nov 2005 21:08:50 +0900	
***************
*** 44,55 ****
    "Return PO charset value for FILENAME."
    (let ((charset-regexp
  	 "^\"Content-Type:[ \t]*text/plain;[ \t]*charset=\\(.*\\)\\\\n\"")
  	(short-read nil))
      ;; Try the first 4096 bytes.  In case we cannot find the charset value
      ;; within the first 4096 bytes (the PO file might start with a long
      ;; comment) try the next 4096 bytes repeatedly until we'll know for sure
      ;; we've checked the empty header entry entirely.
!     (while (not (or short-read (re-search-forward "^msgid" nil t)))
        (save-excursion
          (goto-char (point-max))
  	(let ((pair (insert-file-contents-literally filename nil
--- 44,59 ----
    "Return PO charset value for FILENAME."
    (let ((charset-regexp
  	 "^\"Content-Type:[ \t]*text/plain;[ \t]*charset=\\(.*\\)\\\\n\"")
+ 	(buf (get-file-buffer filename))
  	(short-read nil))
+     (when buf
+       (set-buffer buf)
+       (goto-char (point-min)))
      ;; Try the first 4096 bytes.  In case we cannot find the charset value
      ;; within the first 4096 bytes (the PO file might start with a long
      ;; comment) try the next 4096 bytes repeatedly until we'll know for sure
      ;; we've checked the empty header entry entirely.
!     (while (not (or short-read (re-search-forward "^msgid" nil t) buf))
        (save-excursion
          (goto-char (point-max))
  	(let ((pair (insert-file-contents-literally filename nil
***************
*** 57,63 ****
  						    (1- (+ (point) 4096)))))
  	  (setq short-read (< (nth 1 pair) 4096)))))
      (cond ((re-search-forward charset-regexp nil t) (match-string 1))
! 	  (short-read nil)
  	  ;; We've found the first msgid; maybe, only a part of the msgstr
  	  ;; value was loaded.  Load the next 1024 bytes; if charset still
  	  ;; isn't available, give up.
--- 61,67 ----
  						    (1- (+ (point) 4096)))))
  	  (setq short-read (< (nth 1 pair) 4096)))))
      (cond ((re-search-forward charset-regexp nil t) (match-string 1))
! 	  ((or short-read buf) nil)
  	  ;; We've found the first msgid; maybe, only a part of the msgstr
  	  ;; value was loaded.  Load the next 1024 bytes; if charset still
  	  ;; isn't available, give up.
***************
*** 74,80 ****
  Do so according to FILENAME's declared charset."
    (and
     (eq operation 'insert-file-contents)
!    (file-exists-p filename)
     (with-temp-buffer
       (let* ((coding-system-for-read 'no-conversion)
  	    (charset (or (po-find-charset filename) "ascii"))
--- 78,84 ----
  Do so according to FILENAME's declared charset."
    (and
     (eq operation 'insert-file-contents)
!    (or (get-file-buffer filename) (file-exists-p filename))
     (with-temp-buffer
       (let* ((coding-system-for-read 'no-conversion)
  	    (charset (or (po-find-charset filename) "ascii"))

  reply	other threads:[~2005-12-29 11:47 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-10-20 21:06 po file charset via auto-coding-functions Kevin Ryde
2005-10-21  2:18 ` Kenichi Handa
2005-10-21 22:46   ` Kevin Ryde
2005-10-22  1:43     ` Kenichi Handa
2005-10-22  2:01       ` Kevin Ryde
2005-10-22  2:39         ` Kenichi Handa
2005-10-22  2:50           ` Stefan Monnier
2005-10-22 22:44             ` Kevin Ryde
2005-10-24  1:39             ` Kenichi Handa
2005-10-22 15:51           ` Richard M. Stallman
2005-10-24  2:05             ` Kenichi Handa
2005-10-25 15:59               ` Richard M. Stallman
2005-11-02 10:27               ` Richard Stallman
2005-11-10  2:09               ` Richard Stallman
2005-11-10  3:49                 ` Stefan Monnier
2005-11-10 17:49                   ` Richard M. Stallman
2005-11-10 18:33                     ` Stefan Monnier
2005-11-11  7:42                       ` Richard M. Stallman
2005-11-18 13:08                         ` Kenichi Handa
2005-11-18 17:21                           ` Stefan Monnier
2005-11-19  0:30                             ` Kenichi Handa
2005-11-20  1:16                             ` Juri Linkov
2005-11-29 19:13                               ` Kevin Rodgers
2005-11-30  2:45                                 ` Juri Linkov
2005-11-30 19:01                                 ` Richard M. Stallman
2005-11-19 23:27                           ` Richard M. Stallman
2005-11-20 12:05                             ` Kenichi Handa
2005-12-28 17:01                               ` Richard M. Stallman
2005-12-29 11:47                                 ` Kenichi Handa [this message]
2005-12-30  2:18                                   ` Richard M. Stallman
2006-01-04  4:37                                     ` Kenichi Handa
2005-10-22 22:51       ` Kevin Ryde
2005-10-24  1:53         ` Kenichi Handa
2005-10-24  2:04           ` Kevin Ryde
2005-10-24  5:19             ` Kenichi Handa
2005-10-24 14:11               ` Stefan Monnier
2005-10-25  1:03                 ` Kenichi Handa
2005-10-24 23:35               ` Juri Linkov
2005-10-25  6:42                 ` Kenichi Handa
2005-10-25 20:27                 ` Richard M. Stallman
2005-10-21  4:49 ` Richard M. Stallman
2005-10-21 21:07   ` Kevin Ryde

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=E1ErwFu-00042M-00@etlken \
    --to=handa@m17n.org \
    --cc=emacs-devel@gnu.org \
    --cc=monnier@iro.umontreal.ca \
    --cc=user42@zip.com.au \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).