changeset 23890:fa4839661777

(x-decompose-font-name): If PATTERN doesn't have any wild cards, return a vector made from a name that is found by x-resolve-font-name found. Comments added.
author Kenichi Handa <handa@m17n.org>
date Tue, 15 Dec 1998 04:35:38 +0000
parents 3b5045c64434
children db21a8833d0f
files lisp/international/fontset.el
diffstat 1 files changed, 30 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/international/fontset.el	Tue Dec 15 04:35:38 1998 +0000
+++ b/lisp/international/fontset.el	Tue Dec 15 04:35:38 1998 +0000
@@ -181,15 +181,20 @@
 		       (error)))
       (if (and fontname
 	       (string-match xlfd-tight-regexp fontname))
+	  ;; We get a full XLFD name.
 	  (let ((len (length pattern))
 		(i 0)
 		l)
+	    ;; Setup xlfd-fields by the full XLFD name.  Each element
+	    ;; should be a cons of matched index and matched string.
 	    (setq xlfd-fields (make-vector 14 nil))
 	    (while (< i 14)
 	      (aset xlfd-fields i
 		    (cons (match-beginning (1+ i))
 			  (match-string (1+ i) fontname)))
 	      (setq i (1+ i)))
+
+	    ;; Replace wild cards in PATTERN by regexp codes.
 	    (setq i 0)
 	    (while (< i len)
 	      (let ((ch (aref pattern i)))
@@ -206,19 +211,31 @@
 			    len (+ len 5)
 			    i (+ i 5))
 		    (setq i (1+ i))))))
-	    (string-match pattern fontname)
-	    (setq l (cdr (cdr (match-data))))
-	    (setq i 0)
-	    (while (< i 14)
-	      (if (or (null l) (< (car (aref xlfd-fields i)) (car l)))
-		  (progn
-		    (aset xlfd-fields i (cdr (aref xlfd-fields i)))
-		    (setq i (1+ i)))
-		(if (< (car (aref xlfd-fields i)) (car (cdr l)))
-		    (progn
-		      (aset xlfd-fields i "*")
-		      (setq i (1+ i)))
-		  (setq l (cdr (cdr l))))))
+
+	    ;; Set each element of xlfd-fields to proper strings.
+	    (if (string-match pattern fontname)
+		;; The regular expression PATTERN matchs the full XLFD
+		;; name.  Set elements that correspond to a wild card
+		;; in PATTERN to "*", set the other elements to the
+		;; exact strings in PATTERN.
+		(let ((l (cdr (cdr (match-data)))))
+		  (setq i 0)
+		  (while (< i 14)
+		    (if (or (null l) (< (car (aref xlfd-fields i)) (car l)))
+			(progn
+			  (aset xlfd-fields i (cdr (aref xlfd-fields i)))
+			  (setq i (1+ i)))
+		      (if (< (car (aref xlfd-fields i)) (car (cdr l)))
+			  (progn
+			    (aset xlfd-fields i "*")
+			    (setq i (1+ i)))
+			(setq l (cdr (cdr l)))))))
+	      ;; Set each element of xlfd-fields to the exact string
+	      ;; in the corresonding fields in full XLFD name.
+	      (setq i 0)
+	      (while (< i 14)
+		(aset xlfd-fields i (cdr (aref xlfd-fields i)))
+		(setq i (1+ i))))
 	    xlfd-fields)))))
 
 ;; Replace consecutive wild-cards (`*') in NAME to one.