1 new commit in XEmacs:
https://bitbucket.org/xemacs/xemacs/changeset/dae33b5feffe/
changeset: dae33b5feffe
user: kehoea
date: 2012-09-07 23:06:01
summary: Unify #'find-coding-system-magic-cookie-in-file,
look_for_coding_system_magic_cookie()
src/ChangeLog addition:
2012-09-07 Aidan Kehoe <kehoea(a)parhasard.net>
* file-coding.c:
* file-coding.c (snarf_coding_system):
Take a new parameter, FIND_CODING_SYSTEM_P, which indicates that
find_coding_system() should be called.
* file-coding.c (look_for_coding_system_magic_cookie):
* file-coding.c (determine_real_coding_system):
* file-coding.c (undecided_convert):
Use this parameter.
* file-coding.c (Ffind_coding_system_magic_cookie_in_file):
New, moved from files.el, so we can use
look_for_coding_system_magic_cookie's implementation.
* file-coding.c (syms_of_file_coding):
Make Ffind_coding_system_magic_cookie_in_file available.
lisp/ChangeLog addition:
2012-09-07 Aidan Kehoe <kehoea(a)parhasard.net>
* files.el:
* files.el (find-coding-system-magic-cookie-in-file):
Removed. Move this to C, so we can use
look_for_coding_system_magic_cookie().
affected #: 4 files
diff -r 4af5a3435c94358798bcd2e56c51eaebbc5f36d2 -r
dae33b5feffeee270840946d709b40dfae7e4689 lisp/ChangeLog
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,10 @@
+2012-09-07 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * files.el:
+ * files.el (find-coding-system-magic-cookie-in-file):
+ Removed. Move this to C, so we can use
+ look_for_coding_system_magic_cookie().
+
2012-08-02 Stephen J. Turnbull <stephen(a)xemacs.org>
* XEmacs 21.5.32 "habanero" is released.
diff -r 4af5a3435c94358798bcd2e56c51eaebbc5f36d2 -r
dae33b5feffeee270840946d709b40dfae7e4689 lisp/files.el
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -2126,52 +2126,6 @@
;; Ordinary variable, really set it.
(t (make-local-variable var)
(set var val))))
-
-(defun find-coding-system-magic-cookie-in-file (file)
- "Look for the coding-system magic cookie in FILE.
-The coding-system magic cookie is either the local variable specification
--*- ... coding: ... -*- on the first line, or the exact string
-\";;;###coding system: \" somewhere within the first 3000 characters
-of the file. If found, the coding system name (as a string) is returned;
-otherwise nil is returned. Note that it is extremely unlikely that
-either such string would occur coincidentally as the result of encoding
-some characters in a non-ASCII charset, and that the spaces make it
-even less likely since the space character is not a valid octet in any
-ISO 2022 encoding of most non-ASCII charsets."
- (save-excursion
- (with-temp-buffer
- (let ((coding-system-for-read 'raw-text))
- (insert-file-contents file nil 0 3000))
- (goto-char (point-min))
- (or (and (looking-at
- "^[^\n]*-\\*-[^\n]*coding: \\([^ \t\n;]+\\)[^\n]*-\\*-")
- (buffer-substring (match-beginning 1) (match-end 1)))
- ;; (save-excursion
- ;; (let (start end)
- ;; (and (re-search-forward "^;+[ \t]*Local Variables:" nil t)
- ;; (setq start (match-end 0))
- ;; (re-search-forward "\n;+[ \t]*End:")
- ;; (setq end (match-beginning 0))
- ;; (save-restriction
- ;; (narrow-to-region start end)
- ;; (goto-char start)
- ;; (re-search-forward "^;;; coding: \\([^\n]+\\)$" nil t)
- ;; )
- ;; (let ((codesys
- ;; (intern (buffer-substring
- ;; (match-beginning 1)(match-end 1)))))
- ;; (if (find-coding-system codesys) codesys))
- ;; )))
- (let ((case-fold-search nil))
- (if (search-forward
- ";;;###coding system: " (+ (point-min) 3000) t)
- (let ((start (point))
- (end (progn
- (skip-chars-forward "^ \t\n\r")
- (point))))
- (if (> end start) (buffer-substring start end))
- )))
- ))))
(defcustom change-major-mode-with-file-name t
diff -r 4af5a3435c94358798bcd2e56c51eaebbc5f36d2 -r
dae33b5feffeee270840946d709b40dfae7e4689 src/ChangeLog
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,19 @@
+2012-09-07 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * file-coding.c:
+ * file-coding.c (snarf_coding_system):
+ Take a new parameter, FIND_CODING_SYSTEM_P, which indicates that
+ find_coding_system() should be called.
+ * file-coding.c (look_for_coding_system_magic_cookie):
+ * file-coding.c (determine_real_coding_system):
+ * file-coding.c (undecided_convert):
+ Use this parameter.
+ * file-coding.c (Ffind_coding_system_magic_cookie_in_file):
+ New, moved from files.el, so we can use
+ look_for_coding_system_magic_cookie's implementation.
+ * file-coding.c (syms_of_file_coding):
+ Make Ffind_coding_system_magic_cookie_in_file available.
+
2012-09-05 Aidan Kehoe <kehoea(a)parhasard.net>
* keymap.c:
diff -r 4af5a3435c94358798bcd2e56c51eaebbc5f36d2 -r
dae33b5feffeee270840946d709b40dfae7e4689 src/file-coding.c
--- a/src/file-coding.c
+++ b/src/file-coding.c
@@ -79,6 +79,7 @@
#include "extents.h"
#include "rangetab.h"
#include "chartab.h"
+#include "sysfile.h"
#ifdef HAVE_ZLIB
#include "zlib.h"
@@ -3674,7 +3675,8 @@
blanks). If found, return it, otherwise nil. */
static Lisp_Object
-snarf_coding_system (const UExtbyte *p, Bytecount len)
+snarf_coding_system (const UExtbyte *p, Bytecount len,
+ Boolint find_coding_system_p)
{
Bytecount n;
UExtbyte *name;
@@ -3698,7 +3700,16 @@
name[n] = '\0';
/* This call to intern_istring() is OK because we already verified that
there are only ASCII characters in the string */
- return find_coding_system_for_text_file (intern_istring ((Ibyte *) name), 0);
+ if (find_coding_system_p)
+ {
+ return
+ find_coding_system_for_text_file (intern_istring ((Ibyte *) name),
+ 0);
+ }
+ else
+ {
+ return build_ascstring ((const Ascbyte *) name);
+ }
}
return Qnil;
@@ -3725,11 +3736,9 @@
return Qnil;
}
-/* #### This duplicates code in `find-coding-system-magic-cookie-in-file'
- in files.el. Look into combining them. */
-
static Lisp_Object
-look_for_coding_system_magic_cookie (const UExtbyte *data, Bytecount len)
+look_for_coding_system_magic_cookie (const UExtbyte *data, Bytecount len,
+ Boolint find_coding_system_p)
{
const UExtbyte *p;
const UExtbyte *scan_end;
@@ -3767,7 +3776,8 @@
*(p-1) == ';')))
{
p += LENGTH ("coding:");
- return snarf_coding_system (p, suffix - p);
+ return snarf_coding_system (p, suffix - p,
+ find_coding_system_p);
break;
}
break;
@@ -3792,7 +3802,7 @@
suffix = p;
while (suffix < scan_end && !isspace (*suffix))
suffix++;
- return snarf_coding_system (p, suffix - p);
+ return snarf_coding_system (p, suffix - p, find_coding_system_p);
}
}
@@ -3807,7 +3817,8 @@
make_opaque_ptr (st));
UExtbyte buf[4096];
Bytecount nread = Lstream_read (stream, buf, sizeof (buf));
- Lisp_Object coding_system = look_for_coding_system_magic_cookie (buf, nread);
+ Lisp_Object coding_system
+ = look_for_coding_system_magic_cookie (buf, nread, 1);
if (NILP (coding_system))
{
@@ -3971,7 +3982,7 @@
/* #### This is cheesy. What we really ought to do is buffer
up a certain minimum amount of data to get a better result.
*/
- data->actual = look_for_coding_system_magic_cookie (src, n);
+ data->actual = look_for_coding_system_magic_cookie (src, n, 1);
if (NILP (data->actual))
{
/* #### This is cheesy. What we really ought to do is buffer
@@ -4216,6 +4227,50 @@
return val;
}
+DEFUN ("find-coding-system-magic-cookie-in-file",
+ Ffind_coding_system_magic_cookie_in_file, 1, 1, 0, /*
+Look for the coding-system magic cookie in FILENAME.
+The coding-system magic cookie is either the local variable specification
+-*- ... coding: ... -*- on the first line, or the exact string
+\";;;###coding system: \" somewhere within the first 3000 characters
+of the file. If found, the coding system name (as a string) is returned;
+otherwise nil is returned. Note that it is extremely unlikely that
+either such string would occur coincidentally as the result of encoding
+some characters in a non-ASCII charset, and that the spaces make it
+even less likely since the space character is not a valid octet in any
+ISO 2022 encoding of most non-ASCII charsets.
+*/
+ (filename))
+{
+ Lisp_Object lstream;
+ UExtbyte buf[4096];
+ Bytecount nread;
+ int fd = -1;
+ struct stat st;
+
+ filename = Fexpand_file_name (filename, Qnil);
+
+ if (qxe_stat (XSTRING_DATA (filename), &st) < 0)
+ {
+ badopen:
+ report_file_error ("Opening input file", filename);
+ }
+
+ if (fd < 0)
+ {
+ if ((fd = qxe_interruptible_open (XSTRING_DATA (filename),
+ O_RDONLY | OPEN_BINARY, 0)) < 0)
+ goto badopen;
+ }
+
+ lstream = make_filedesc_input_stream (fd, 0, -1, 0);
+ Lstream_set_buffering (XLSTREAM (lstream), LSTREAM_UNBUFFERED, 0);
+ nread = Lstream_read (XLSTREAM (lstream), buf, sizeof (buf));
+ Lstream_delete (XLSTREAM (lstream));
+ retry_close (fd);
+
+ return look_for_coding_system_magic_cookie (buf, nread, 0);
+}
#ifdef DEBUG_XEMACS
@@ -4524,6 +4579,7 @@
DEFSUBR (Fdecode_coding_region);
DEFSUBR (Fencode_coding_region);
DEFSUBR (Fquery_coding_region);
+ DEFSUBR (Ffind_coding_system_magic_cookie_in_file);
DEFSYMBOL_MULTIWORD_PREDICATE (Qcoding_systemp);
DEFSYMBOL (Qno_conversion);
DEFSYMBOL (Qconvert_eol);
Repository URL:
https://bitbucket.org/xemacs/xemacs/
--
This is a commit notification from
bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://lists.xemacs.org/mailman/listinfo/xemacs-patches