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
|
;;; riece-coding.el --- converting string with coding system
;; Copyright (C) 1998-2003 Daiki Ueno
;; Author: Daiki Ueno <ueno@unixuser.org>
;; Created: 1998-09-28
;; Keywords: IRC, riece, coding-system, MULE
;; This file is part of Riece.
;; This program 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.
;; This program 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 GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
;;; Code:
(require 'riece-globals)
(defgroup riece-coding nil
"Coding system."
:tag "Coding"
:prefix "riece-"
:group 'riece)
(defcustom riece-default-coding-system
(if (featurep 'mule)
(cons 'ctext 'iso-2022-jp-2))
"Coding system for process I/O.
The value is a coding system, or a cons cell (DECODING . ENCODING)
specifying the coding systems for decoding and encoding respectively."
:type '(choice (symbol :tag "Coding system")
(cons (symbol :tag "Input coding system")
(symbol :tag "Output coding system"))
(const nil :tag "No conversion"))
:group 'riece-coding)
(defun riece-encode-coding-string (string)
(if (and (local-variable-p 'riece-coding-system (current-buffer))
riece-coding-system) ;should be nil on non-Mule environment
(encode-coding-string string (if (consp riece-coding-system)
(cdr riece-coding-system)
riece-coding-system))
string))
(defun riece-decode-coding-string (string)
(if (and (local-variable-p 'riece-coding-system (current-buffer))
riece-coding-system) ;should be nil on non-Mule environment
(riece-decode-coding-string-1 string
(if (consp riece-coding-system)
(car riece-coding-system)
riece-coding-system))
string))
(defun riece-decode-coding-string-1 (string coding-system)
(let* ((decoded (decode-coding-string string coding-system))
(length (length decoded)))
(put-text-property 0 length 'riece-decoded-encoded-string
string decoded)
(put-text-property 0 length 'riece-decoded-coding-system
coding-system decoded)
decoded))
;; The following functions are API used by handler functions. For the
;; meantime DECODED is actually a string (with some text properties).
;; In the future, however, the implementation _should_ be changed so
;; that decoding phase is delayed until the body of handler functions.
(defun riece-decoded-coding-system (decoded)
"Return the coding-system used for decoding DECODED."
(get-text-property 0 'riece-decoded-coding-system decoded))
(defun riece-decoded-encoded-string (decoded)
"Return the string before decoding."
(get-text-property 0 'riece-decoded-encoded-string decoded))
(defalias 'riece-decoded-string 'identity)
(provide 'riece-coding)
;;; riece-coding.el ends here
|