* riece-ndcc.el: Don't use calc.
[riece] / lisp / riece-coding.el
index 9d14be1..ac58fd5 100644 (file)
 
 ;; 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., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
 
 ;;; Code:
 
 (require 'riece-globals)
 
 (defgroup riece-coding nil
-  "Coding system"
+  "Coding system."
   :tag "Coding"
   :prefix "riece-"
   :group 'riece)
-  
+
 (defcustom riece-default-coding-system
-  (if (and (or (featurep 'mule)
-              (featurep 'file-coding)))
+  (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)
@@ -56,11 +55,35 @@ specifying the coding systems for decoding and encoding respectively."
 (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
-      (if (consp riece-coding-system)
-         (decode-coding-string string (car riece-coding-system))
-       (decode-coding-string string riece-coding-system))
+      (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