diff options
Diffstat (limited to 'lisp/international/mule-util.el')
-rw-r--r-- | lisp/international/mule-util.el | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/lisp/international/mule-util.el b/lisp/international/mule-util.el index 580bd293e73..38d29cb2385 100644 --- a/lisp/international/mule-util.el +++ b/lisp/international/mule-util.el @@ -278,14 +278,13 @@ Optional 5th argument NIL-FOR-TOO-LONG non-nil means return nil CODING-SYSTEMS is a list of coding systems. See `set-coding-system-priority'. This affects the implicit sorting of lists of coding systems returned by operations such as `find-coding-systems-region'." + (declare (indent 1) (debug t)) (let ((current (make-symbol "current"))) `(let ((,current (coding-system-priority-list))) (apply #'set-coding-system-priority ,coding-systems) (unwind-protect (progn ,@body) (apply #'set-coding-system-priority ,current))))) -;;;###autoload(put 'with-coding-priority 'lisp-indent-function 1) -(put 'with-coding-priority 'edebug-form-spec t) ;;;###autoload (defun detect-coding-with-language-environment (from to lang-env) @@ -334,13 +333,20 @@ QUALITY can be: `approximate', in which case we may cut some corners to avoid excessive work. `exact', in which case we may end up re-(en/de)coding a large - part of the file/buffer, this can be expensive and slow. + part of the file/buffer, this can be expensive and slow. (It + is an error to request the `exact' method when the buffer's + EOL format is not yet decided.) nil, in which case we may return nil rather than an approximation." (unless coding-system (setq coding-system buffer-file-coding-system)) (let ((eol (coding-system-eol-type coding-system)) (type (coding-system-type coding-system)) (base (coding-system-base coding-system)) (pm (save-restriction (widen) (point-min)))) + ;; Handle EOL edge cases. + (unless (numberp eol) + (if (eq quality 'exact) + (error "Unknown EOL format in coding system: %s" coding-system) + (setq eol 0))) (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 :post-read-conversion))) @@ -410,14 +416,24 @@ QUALITY can be: `approximate', in which case we may cut some corners to avoid excessive work. `exact', in which case we may end up re-(en/de)coding a large - part of the file/buffer, this can be expensive and slow. + part of the file/buffer, this can be expensive and slow. (It + is an error to request the `exact' method when the buffer's + EOL format is not yet decided.) nil, in which case we may return nil rather than an approximation." (unless coding-system (setq coding-system buffer-file-coding-system)) (let* ((eol (coding-system-eol-type coding-system)) - (lineno (if (= eol 1) (1- (line-number-at-pos position)) 0)) (type (coding-system-type coding-system)) (base (coding-system-base coding-system)) - (point-min 1)) ;Clarify what the `1' means. + (point-min 1) ;Clarify what the `1' means. + lineno) + ;; Handle EOL edge cases. + (unless (numberp eol) + (if (eq quality 'exact) + (error "Unknown EOL format in coding system: %s" coding-system) + (setq eol 0))) + (setq lineno (if (= eol 1) + (1- (line-number-at-pos position)) + 0)) (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 :post-read-conversion))) |