changeset 17755:4c82e87c7d7c

(x-decompose-font-name): While seting each field of XLFD, set "*" instead of nil to a field which is omitted in the original font name. (generate-fontset-menu): Delete code for handling alias (or nickname). It is now handled in fontset-plain-name. (fontset-plain-name): Handle alias of fontset name, show more user-friendy names. (create-fontset-from-fontset-spec): Add an optional arg STYLE to create bold, italic, and bold-italic variants of a fonset.
author Kenichi Handa <handa@m17n.org>
date Mon, 12 May 1997 06:56:20 +0000
parents 8be34c35fa73
children 0000a992fd24
files lisp/international/fontset.el
diffstat 1 files changed, 72 insertions(+), 40 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/international/fontset.el	Mon May 12 06:56:19 1997 +0000
+++ b/lisp/international/fontset.el	Mon May 12 06:56:20 1997 +0000
@@ -195,7 +195,7 @@
 		    (setq i (1+ i)))
 		(if (< (car (aref xlfd-fields i)) (car (cdr l)))
 		    (progn
-		      (aset xlfd-fields i nil)
+		      (aset xlfd-fields i "*")
 		      (setq i (1+ i)))
 		  (setq l (cdr (cdr l))))))
 	    xlfd-fields)))))
@@ -272,63 +272,95 @@
 	l)
     (while fontsets
       (setq fontset-name (car (car fontsets)) fontsets (cdr fontsets))
-      (if (string-match "fontset-\\([^-]+\\)" fontset-name)
-	  ;; This fontset has a nickname.  Just show it.
-	  (let ((nickname (match-string 1 fontset-name)))
-	    (setq l (cons (list (concat ".." nickname) fontset-name) l)))
-	(setq l (cons (list fontset-name fontset-name) l))))
+      (setq l (cons (list (fontset-plain-name fontset-name) fontset-name) l)))
     (cons "Fontset" l)))
 
 (defun fontset-plain-name (fontset)
   "Return a plain and descriptive name of FONTSET."
+  (if (not (setq fontset (query-fontset fontset)))
+      (error "Invalid fontset: %s" fontset))
   (let ((xlfd-fields (x-decompose-font-name fontset)))
     (if xlfd-fields
 	(let ((weight (aref xlfd-fields xlfd-regexp-weight-subnum))
 	      (slant  (aref xlfd-fields xlfd-regexp-slant-subnum))
 	      (swidth (aref xlfd-fields xlfd-regexp-swidth-subnum))
 	      (size   (aref xlfd-fields xlfd-regexp-pixelsize-subnum))
+	      (charset (aref xlfd-fields xlfd-regexp-registry-subnum))
+	      (nickname (aref xlfd-fields xlfd-regexp-encoding-subnum))
 	      name)
-	  (if (> (string-to-int size) 0)
-	      (setq name (format "%s " size))
-	    (setq name ""))
-	  (if (string-match "bold\\|demibold" weight)
-	      (setq name (concat name weight " ")))
-	  (cond ((string= slant "i")
-		 (setq name (concat name "italic ")))
-		((string= slant "o")
-		 (setq name (concat name "slant ")))
-		((string= slant "ri")
-		 (setq name (concat name "reverse italic ")))
-		((string= slant "ro")
-		 (setq name (concat name "reverse slant "))))
-	  (if (= (length name) 0)
-	      ;; No descriptive fields found.
+	  (if (not (string= "fontset" charset))
 	      fontset
+	    (if (> (string-to-int size) 0)
+		(setq name (format "%s: %s-dot" nickname size))
+	      (setq name nickname))
+	    (cond ((string-match "^medium$" weight)
+		   (setq name (concat name " " "medium")))
+		  ((string-match "^bold$\\|^demibold$" weight)
+		   (setq name (concat name " " weight))))
+	    (cond ((string-match "^i$" slant)
+		   (setq name (concat name " " "italic")))
+		  ((string-match "^o$" slant)
+		   (setq name (concat name " " "slant")))
+		  ((string-match "^ri$" slant)
+		   (setq name (concat name " " "reverse italic")))
+		  ((string-match "^ro$" slant)
+		   (setq name (concat name " " "reverse slant"))))
 	    name))
       fontset)))
 
-(defun create-fontset-from-fontset-spec (fontset-spec)
+(defun create-fontset-from-fontset-spec (fontset-spec &optional style)
   "Create a fontset from fontset specification string FONTSET-SPEC.
 FONTSET-SPEC is a string of the format:
 	FONTSET-NAME,CHARSET-NAME0:FONT-NAME0,CHARSET-NAME1:FONT-NAME1, ...
-Any number of SPACE, TAB, and NEWLINE can be put before and after commas."
-  (if (string-match "[^,]+" fontset-spec)
-      (let* ((idx2 (match-end 0))
-	     (name (match-string 0 fontset-spec))
-	     fontlist charset xlfd-fields)
-	(while (string-match "[, \t\n]*\\([^:]+\\):\\([^,]+\\)"
-			     fontset-spec idx2)
-	  (setq idx2 (match-end 0))
-	  (setq charset	(intern (match-string 1 fontset-spec)))
-	  (if (charsetp charset)
-	      (setq fontlist (cons (cons charset (match-string 2 fontset-spec))
-				   fontlist))))
-	(if (setq xlfd-fields (x-decompose-font-name name))
-	    ;; If NAME conforms to XLFD, complement FONTLIST for
-	    ;; charsets not specified in FONTSET-SPEC.
-	    (setq fontlist
-		  (x-complement-fontset-spec xlfd-fields fontlist)))
-	(new-fontset name fontlist))))
+Any number of SPACE, TAB, and NEWLINE can be put before and after commas.
+If optional argument STYLE is specified, create a fontset of STYLE
+by modifying FONTSET-SPEC appropriately.  STYLE can be one of `bold',
+`italic', and `bold-italic'."
+  (if (not (string-match "^[^,]+" fontset-spec))
+      (error "Invalid fontset spec: %s" fontset-spec))
+  (let ((idx (match-end 0))
+	(name (match-string 0 fontset-spec))
+	fontlist charset)
+    ;; At first, extract pairs of charset and fontname from FONTSET-SPEC.
+    (while (string-match "[, \t\n]*\\([^:]+\\):\\([^,]+\\)" fontset-spec idx)
+      (setq idx (match-end 0))
+      (setq charset (intern (match-string 1 fontset-spec)))
+      (if (charsetp charset)
+	  (setq fontlist (cons (cons charset (match-string 2 fontset-spec))
+			       fontlist))))
+
+    ;; If STYLE is specified, modify fontset name (NAME) and FONTLIST.
+    (let ((func (cdr (assq style '((bold . x-make-font-bold)
+				   (italic . x-make-font-italic)
+				   (bold-italic . x-make-font-bold-italic)))))
+	  (l fontlist)
+	  new-name)
+      (if (and func
+	       (setq new-name (funcall func name)))
+	  (progn
+	    (setq name new-name)
+	    (while l
+	      (if (setq new-name (funcall func (cdr (car l))))
+		  (setcdr (car l) new-name))
+	      (setq l (cdr l))))))
+
+    ;; If NAME conforms to XLFD, complement FONTLIST for charsets not
+    ;; specified in FONTSET-SPEC.
+    (let ((xlfd-fields (x-decompose-font-name name)))
+      (if xlfd-fields
+	  (setq fontlist
+		(x-complement-fontset-spec xlfd-fields fontlist))))
+
+    ;; Create the fontset, and define the alias if appropriate.
+    (new-fontset name fontlist)
+    (if (and (not style)
+	     (not (assoc name fontset-alias-alist))
+	     (string-match "fontset-.*$" name))
+	(let ((alias (match-string 0 name)))
+	  (or (rassoc alias fontset-alias-alist)
+	      (setq fontset-alias-alist
+		    (cons (cons name alias) fontset-alias-alist)))))
+    ))
 
 
 ;; Create default fontset from 16 dots fonts which are the most widely