Mercurial > emacs
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.