;;; unicode.el --- for UNICODE special features
;; Copyright (C) 1997-2001 Miyashita Hisashi
;; Keywords: mule, multilingual,
;; character set, coding-system, ISO10646, Unicode
;; This file is part of Mule-UCS
;; Mule-UCS 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.
;; Mule-UCS 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 this program; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.
;; This module supports unicode translations.
;;; ucs-generic character elisp representation
;; (1) ... a simple number.
;; (2) ... a string that shows a number in c-format.
;; E.g., "0x611A"
;; If any other representations are converted to elisp
;; representation, normalize it to (1) form.
;; Why introduce (2)? Because there is no compatible format
;; on hexadecimal literal between Emacs20 and XEmacs...x_x;
(defun ucs-generic-elisp-representation (x)
(if (numberp x)
(if (stringp x)
(error "Invalid ucs-generic represenation:%S" x))))
;;; UCS generic type definition.
;;; translation generator
;;; (work in progress...)
;;; en/decode-char backends.
(defun ucs-representation-encoding-backend (char representation restriction)
(logior (lsh (charset-id (char-charset char)) 16)
(defun ucs-representation-decoding-backend (representation object restriction)
(if (numberp object)
(list 'numberp object))))
;;; Unicode or its transformation format support function.
;;; (obsoleted by encode-char/decode-char)
(defun ucs-to-char (codepoint)
"Convert Unicode codepoint to an XEmacs character.
CODE should be a non-negative integer.
If `codepoint' cannot be represented as an XEmacs character--that is,
Mule-UCS doesn't know about any registered translation from it to some
character in the multiple-character-set non-Unified Mule model, return nil.
Beware that *many* Unicode codepoints have no representation in the Mule
model, and since the Mule-UCS coding systems have the same backend as does
this function, they will tend to trash data. "
(ucs-representation-decoding-backend 'ucs codepoint nil))
(defun char-to-ucs (char)
"Convert character to Unicode codepoint. "
(ucs-representation-encoding-backend char 'ucs nil))
;;; Commands for editing.
(defun insert-ucs-character (codepoint)
"Insert character which is converted from give UCS codepoint."
(interactive "nUCS codepoint:")
(insert (or (ucs-representation-decoding-backend 'ucs codepoint nil)
(error "Invalid or cannot translate:U+%X"
;;; unicode.el ends here.