emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master a2bb6c7: Minor fixes in filepos-to-bufferpos


From: Eli Zaretskii
Subject: [Emacs-diffs] master a2bb6c7: Minor fixes in filepos-to-bufferpos
Date: Fri, 19 Jun 2015 08:19:44 +0000

branch: master
commit a2bb6c7bc19719eea3a84e3374f4da6781bc4bf0
Author: Eli Zaretskii <address@hidden>
Commit: Eli Zaretskii <address@hidden>

    Minor fixes in filepos-to-bufferpos
    
    * lisp/international/mule-util.el (filepos-to-bufferpos): Remove
    test for utf-8-emacs.  Exempt single-byte encodings from the
    'use-exact' path when QUALITY is 'exact'.  Test UTF-16 encodings
    for BOM before subtracting 2 bytes.  Use 'identity' when adjusting
    UTF-16 encoded files for CR-LF EOLs.
---
 lisp/international/mule-util.el |   16 +++++++++-------
 1 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/lisp/international/mule-util.el b/lisp/international/mule-util.el
index bbefdaa7..9aa64dc 100644
--- a/lisp/international/mule-util.el
+++ b/lisp/international/mule-util.el
@@ -353,15 +353,10 @@ QUALITY can be:
         (type (coding-system-type coding-system))
         (base (coding-system-base coding-system))
         (pm (save-restriction (widen) (point-min))))
-    (and (eq type 'utf-8-emacs)
-         (setq type 'utf-8))
     (and (eq type 'utf-8)
          ;; Any post-read/pre-write conversions mean it's not really UTF-8.
          (not (null (coding-system-get coding-system :pos-read-conversion)))
          (setq type 'not-utf-8))
-    (and (not (eq type 'utf-8))
-         (eq quality 'exact)
-         (setq type 'use-exact))
     (and (memq type '(charset raw-text undecided))
          ;; The following are all of type 'charset', but they are
          ;; actually variable-width encodings.
@@ -370,6 +365,12 @@ QUALITY can be:
                                        japanese-iso-8bit chinese-big5-hkscs
                                        japanese-cp932 korean-cp949)))
          (setq type 'single-byte))
+    ;; Any encoding that's not single-byte and not UTF-8 must use the
+    ;; 'exact' path if QUALITY is 'exact', because we have no simple
+    ;; mappings for those cases.
+    (and (not (memq type '(utf-8 single-byte)))
+         (eq quality 'exact)
+         (setq type 'use-exact))
     (pcase type
       (`utf-8
        (when (coding-system-get coding-system :bom)
@@ -379,12 +380,13 @@ QUALITY can be:
          (byte-to-position (+ pm byte))))
       (`utf-16
        ;; Account for BOM, which is always 2 bytes in UTF-16.
-       (setq byte (- byte 2))
+       (when (coding-system-get coding-system :bom)
+         (setq byte (- byte 2)))
        ;; In approximate mode, assume all characters are within the
        ;; BMP, i.e. take up 2 bytes.
        (setq byte (/ byte 2))
        (if (= eol 1)
-           (filepos-to-bufferpos--dos (+ pm byte) #'byte-to-position)
+           (filepos-to-bufferpos--dos (+ pm byte) #'identity)
          (byte-to-position (+ pm byte))))
       (`single-byte
        (if (= eol 1)



reply via email to

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