1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248
|
;;; coding.el --- Coding-system functions for XEmacs.
;; Copyright (C) 1995 Electrotechnical Laboratory, JAPAN.
;; Licensed to the Free Software Foundation.
;; Copyright (C) 1995 Amdahl Corporation.
;; Copyright (C) 1995 Sun Microsystems.
;; Copyright (C) 1997 MORIOKA Tomohiko
;; This file is part of XEmacs.
;; This file is very similar to mule-coding.el
;; XEmacs is free software; you can redistribute it and/or modify it
;; under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.
;; XEmacs is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with XEmacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.
;;; Commentary:
;;; split off of mule.el.
;;; Code:
(defalias 'check-coding-system 'get-coding-system)
(defconst modeline-multibyte-status '("%C")
"Modeline control for showing multibyte extension status.")
;; override the default value defined in loaddefs.el.
(setq-default modeline-format
(cons ""
(cons 'modeline-multibyte-status
(cdr modeline-format))))
(defun modify-coding-system-alist (target-type regexp coding-system)
"Modify one of look up tables for finding a coding system on I/O operation.
There are three of such tables, `file-coding-system-alist',
`process-coding-system-alist', and `network-coding-system-alist'.
TARGET-TYPE specifies which of them to modify.
If it is `file', it affects `file-coding-system-alist' (which see).
If it is `process', it affects `process-coding-system-alist' (which see).
If it is `network', it affects `network-coding-system-alist' (which see).
REGEXP is a regular expression matching a target of I/O operation.
The target is a file name if TARGET-TYPE is `file', a program name if
TARGET-TYPE is `process', or a network service name or a port number
to connect to if TARGET-TYPE is `network'.
CODING-SYSTEM is a coding system to perform code conversion on the I/O
operation, or a cons cell (DECODING . ENCODING) specifying the coding systems
for decoding and encoding respectively,
or a function symbol which, when called, returns such a cons cell."
(or (memq target-type '(file process network))
(error "Invalid target type: %s" target-type))
(or (stringp regexp)
(and (eq target-type 'network) (integerp regexp))
(error "Invalid regular expression: %s" regexp))
(if (symbolp coding-system)
(if (not (fboundp coding-system))
(progn
(check-coding-system coding-system)
(setq coding-system (cons coding-system coding-system))))
(check-coding-system (car coding-system))
(check-coding-system (cdr coding-system)))
(cond ((eq target-type 'file)
(let ((slot (assoc regexp file-coding-system-alist)))
(if slot
(setcdr slot coding-system)
(setq file-coding-system-alist
(cons (cons regexp coding-system)
file-coding-system-alist)))))
((eq target-type 'process)
(let ((slot (assoc regexp process-coding-system-alist)))
(if slot
(setcdr slot coding-system)
(setq process-coding-system-alist
(cons (cons regexp coding-system)
process-coding-system-alist)))))
(t
(let ((slot (assoc regexp network-coding-system-alist)))
(if slot
(setcdr slot coding-system)
(setq network-coding-system-alist
(cons (cons regexp coding-system)
network-coding-system-alist)))))))
(defsubst keyboard-coding-system ()
"Return coding-system of what is sent from terminal keyboard."
keyboard-coding-system)
(defun set-keyboard-coding-system (coding-system)
"Set the coding system used for TTY keyboard input. Currently broken."
(interactive "zkeyboard-coding-system: ")
(get-coding-system coding-system) ; correctness check
(setq keyboard-coding-system coding-system)
(if (eq (device-type) 'tty)
(set-console-tty-input-coding-system
(device-console) keyboard-coding-system))
(redraw-modeline t))
(defsubst terminal-coding-system ()
"Return coding-system of your terminal."
terminal-coding-system)
(defun set-terminal-coding-system (coding-system)
"Set the coding system used for TTY display output. Currently broken."
(interactive "zterminal-coding-system: ")
(get-coding-system coding-system) ; correctness check
(setq terminal-coding-system coding-system)
; #### should this affect all current tty consoles ?
(if (eq (device-type) 'tty)
(set-console-tty-output-coding-system
(device-console) terminal-coding-system))
(redraw-modeline t))
(defun set-pathname-coding-system (coding-system)
"Set the coding system used for file system path names."
(interactive "zPathname-coding-system: ")
(get-coding-system coding-system) ; correctness check
(setq file-name-coding-system coding-system))
(defun what-coding-system (start end &optional arg)
"Show the encoding of text in the region.
This function is meant to be called interactively;
from a Lisp program, use `detect-coding-region' instead."
(interactive "r\nP")
(princ (detect-coding-region start end)))
(defun decode-coding-string (str coding-system)
"Decode the string STR which is encoded in CODING-SYSTEM.
Does not modify STR. Returns the decoded string on successful conversion."
(with-string-as-buffer-contents
str (decode-coding-region (point-min) (point-max) coding-system)))
(defun encode-coding-string (str coding-system)
"Encode the string STR using CODING-SYSTEM.
Does not modify STR. Returns the encoded string on successful conversion."
(with-string-as-buffer-contents
str (encode-coding-region (point-min) (point-max) coding-system)))
;;;; Coding system accessors
(defun coding-system-mnemonic (coding-system)
"Return the 'mnemonic property of CODING-SYSTEM."
(coding-system-property coding-system 'mnemonic))
(defalias 'coding-system-docstring 'coding-system-doc-string)
(defun coding-system-eol-type (coding-system)
"Return the 'eol-type property of CODING-SYSTEM."
(coding-system-property coding-system 'eol-type))
(defun coding-system-eol-lf (coding-system)
"Return the 'eol-lf property of CODING-SYSTEM."
(coding-system-property coding-system 'eol-lf))
(defun coding-system-eol-crlf (coding-system)
"Return the 'eol-crlf property of CODING-SYSTEM."
(coding-system-property coding-system 'eol-crlf))
(defun coding-system-eol-cr (coding-system)
"Return the 'eol-cr property of CODING-SYSTEM."
(coding-system-property coding-system 'eol-cr))
(defun coding-system-post-read-conversion (coding-system)
"Return the 'post-read-conversion property of CODING-SYSTEM."
(coding-system-property coding-system 'post-read-conversion))
(defun coding-system-pre-write-conversion (coding-system)
"Return the 'pre-write-conversion property of CODING-SYSTEM."
(coding-system-property coding-system 'pre-write-conversion))
(defun coding-system-base (coding-system)
"Return the base coding system of CODING-SYSTEM."
(if (not (coding-system-eol-type coding-system))
coding-system
(find-coding-system
(intern
(substring
(symbol-name (coding-system-name coding-system))
0
(string-match "-unix$\\|-dos$\\|-mac$"
(symbol-name (coding-system-name coding-system))))))))
;;;; Definitions of predefined coding systems
(make-coding-system
'undecided 'undecided
"Automatic conversion."
'(mnemonic "Auto"))
;;; Make certain variables equivalent to coding-system aliases
(defun dontusethis-set-value-file-name-coding-system-handler (sym args fun harg handlers)
(define-coding-system-alias 'file-name (or (car args) 'binary)))
(dontusethis-set-symbol-value-handler
'file-name-coding-system
'set-value
'dontusethis-set-value-file-name-coding-system-handler)
(defun dontusethis-set-value-terminal-coding-system-handler (sym args fun harg handlers)
(define-coding-system-alias 'terminal (or (car args) 'binary)))
(dontusethis-set-symbol-value-handler
'terminal-coding-system
'set-value
'dontusethis-set-value-terminal-coding-system-handler)
(defun dontusethis-set-value-keyboard-coding-system-handler (sym args fun harg handlers)
(define-coding-system-alias 'keyboard (or (car args) 'binary)))
(dontusethis-set-symbol-value-handler
'keyboard-coding-system
'set-value
'dontusethis-set-value-keyboard-coding-system-handler)
(unless (boundp 'file-name-coding-system)
(setq file-name-coding-system nil))
(when (not (featurep 'mule))
;; these are so that gnus and friends work when not mule
(copy-coding-system 'undecided 'iso-8859-1)
(copy-coding-system 'undecided 'iso-8859-2)
(define-coding-system-alias 'ctext 'binary))
;; compatibility for old XEmacsen (don't use it)
(copy-coding-system 'undecided 'automatic-conversion)
(make-compatible-variable 'enable-multibyte-characters "Unimplemented")
(define-obsolete-variable-alias
'pathname-coding-system 'file-name-coding-system)
;;; mule-coding.el ends here
|