From 5ae74c8f59a5e4259386bcba6c45acc1571471cd Mon Sep 17 00:00:00 2001 From: tomo Date: Sat, 15 Dec 2001 09:03:59 +0000 Subject: [PATCH] New file. --- iddef.el | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 iddef.el diff --git a/iddef.el b/iddef.el new file mode 100644 index 0000000..5638209 --- /dev/null +++ b/iddef.el @@ -0,0 +1,100 @@ +;;; iddef.el --- Parser and utility for IDDef format files. + +;; Copyright (C) 2001 MORIOKA Tomohiko + +;; Author: MORIOKA Tomohiko +;; Keywords: IDDef, IDS, IDC, Ideographs, UCS, Unicode + +;; This file is a part of Tomoyo-Tools. + +;; 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 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. + +;;; Commentary: + +;; IDDef is a tab-separated format to describe some +;; character-attributes of each Ideographs mainly for Ideographic +;; structure. + +;;; Code: + +(require 'ids) +(require 'ids-util) + +;;;###autoload +(defun iddef-read-buffer (buffer) + (with-current-buffer buffer + (goto-char (point-min)) + (let (ucs + radical seq ret + char struct + morohashi m-chr) + (while (re-search-forward + "^U\\+\\([0-9A-F]+\\)\t\\([0-9]+\\)\t[^\t]+\t\\([^\t\n]+\\)" + nil t) + (setq ucs (string-to-int (match-string 1) 16) + radical (string-to-int (match-string 2)) + seq (match-string 3)) + (setq ret (ids-parse-string seq)) + (when (and (consp ret) + (consp + (setq struct (cdr (assq 'ideographic-structure ret))))) + (setq char (decode-char 'ucs ucs)) + (unless (get-char-attribute char 'ideograph-daikanwa) + (when (and (setq morohashi + (get-char-attribute char 'morohashi-daikanwa)) + (>= (length morohashi) 3)) + (setq m-chr + (if (= (nth 1 morohashi) 0) + (decode-char 'ideograph-daikanwa + (setq morohashi (car morohashi))) + (setq morohashi (list (car morohashi) + (nth 1 morohashi))) + (map-char-attribute (lambda (char val) + (if (equal morohashi val) + char)) + 'morohashi-daikanwa))) + (put-char-attribute + m-chr + 'ideographic-structure + (ideographic-structure-convert-to-daikanwa struct)))) + (put-char-attribute char 'ideographic-structure struct) + (dolist (ref (union + (get-char-attribute char '->same-ideograph) + (get-char-attribute char '->identical))) + (if (setq ret + (cond ((characterp ref) ref) + ((char-ref-p ref) + (find-char (plist-get ref :char))) + (t + (find-char ref)))) + (put-char-attribute ret 'ideographic-structure struct))) + ))))) + +;;;###autoload +(defun iddef-read-file (file) + (interactive "fIDDef file : ") + (with-temp-buffer + (let ((coding-system-for-read 'utf-8)) + (insert-file-contents file)) + (iddef-read-buffer (current-buffer)))) + + +;;; @ End. +;;; + +(provide 'iddef) + +;;; iddef.el ends here -- 1.7.10.4