diff lisp/mule/chartblxmas.el @ 219:262b8bb4a523 r20-4b8

Import from CVS: tag r20-4b8
author cvs
date Mon, 13 Aug 2007 10:09:35 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/mule/chartblxmas.el	Mon Aug 13 10:09:35 2007 +0200
@@ -0,0 +1,100 @@
+;;; chartblxmas.el --- display table of charset by pop-up menu
+
+;; Copyright (C) 1997 MORIOKA Tomohiko
+
+;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;; Version: $Id: chartblxmas.el,v 1.1 1997/11/29 18:44:03 steve Exp $
+;; Keywords: character, XEmacs/mule
+
+;; This file is part of XEmacs.
+
+;; 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.
+
+;;; Code:
+
+(require 'alist)
+(require 'char-table)
+
+(defun classify-charsets-by-dimension-and-chars (charset-list)
+  (let (dest)
+    (while charset-list
+      (let* ((charset (car charset-list))
+	     (chars (charset-chars charset))
+	     (dim (charset-dimension charset))
+	     (dim-alist (cdr (assq dim dest)))
+	     )
+	(setq dest
+	      (put-alist dim
+			 (put-alist chars
+				    (cons charset
+					  (cdr (assq chars dim-alist)))
+				    dim-alist)
+			 dest))
+	)
+      (setq charset-list (cdr charset-list))
+      )
+    dest))
+
+
+;;;###autoload
+(defun view-charset-by-menu ()
+  "Display character table of CHARSET by pop-up menu."
+  (interactive)
+  (popup-menu
+   (cons
+    "Character set:"
+    (mapcar (function
+	     (lambda (cat)
+	       (cons (car cat)
+		     (sort
+		      (mapcar (function
+			       (lambda (charset)
+				 (vector (charset-doc-string charset)
+					 `(view-charset ',charset)
+					 t)
+				 ))
+			      (cdr cat))
+		      (function
+		       (lambda (a b)
+			 (string< (aref a 0)(aref b 0))
+			 ))))))
+	    (sort
+	     (let ((rest
+		    (classify-charsets-by-dimension-and-chars (charset-list))
+		    ))
+	       (while rest
+		 (let* ((r (car rest))
+			(d (car r)))
+		   (setq r (cdr r))
+		   (while r
+		     (let* ((p (car r))
+			    (n (int-to-string (car p)))
+			    (s n)
+			    (i 1))
+		       (while (< i d)
+			 (setq s (concat s " x " n))
+			 (setq i (1+ i)))
+		       (set-alist 'dest (concat s " character set") (cdr p)))
+		     (setq r (cdr r))
+		     ))
+		 (setq rest (cdr rest)))
+	       dest)
+	     (function (lambda (a b)
+			 (string< (car a)(car b))
+			 )))
+	    ))))
+
+;;; chartblxmas.el ends here