changeset 89940:713a4f4140ca

(Fset_fontset_font): Docstring fixed. (Ffontset_info): Make it backward compatible. New arg ALL.
author Kenichi Handa <handa@m17n.org>
date Sat, 29 May 2004 01:02:16 +0000
parents d16398ce9a6f
children 0fb6df41f5a1
files src/fontset.c
diffstat 1 files changed, 55 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/src/fontset.c	Thu May 13 12:52:44 2004 +0000
+++ b/src/fontset.c	Sat May 29 01:02:16 2004 +0000
@@ -435,7 +435,7 @@
 reorder_font_vector (fontset_element)
      Lisp_Object fontset_element;
 {
-  Lisp_Object vec, list, *new_vec;
+  Lisp_Object list, *new_vec;
   Lisp_Object font_def;
   int size;
   int *charset_id_table;
@@ -1366,12 +1366,10 @@
 TARGET may be nil.  In that case, use FONT-SPEC for any characters for
 that no FONT-SPEC is specified.
 
-FONT-SPEC may be:
- * A vector [ FAMILY WEIGHT SLANT WIDTH ADSTYLE REGISTRY ].
-   See the documentation of `set-face-attribute' for the detail of
-   these vector elements;
+FONT-SPEC may one of these:
  * A cons (FAMILY . REGISTRY), where FAMILY is a font family name and
-   REGISTRY is a font registry name;
+   REGISTRY is a font registry name.  FAMILY may contains foundry
+   name, and REGISTRY may contains encoding name.
  * A font name string.
 
 Optional 4th argument FRAME, if non-nil, is a frame.  This argument is
@@ -1399,6 +1397,10 @@
 
   if (VECTORP (font_spec))
     {
+      /* FONT_SPEC should have this form:
+		[ FAMILY WEIGHT SLANT WIDTH ADSTYLE REGISTRY ]
+	 This is a feature not yet documented because WEIGHT thru
+	 ADSTYLE are ignored for the moment.  */
       int j;
 
       if (ASIZE (font_spec) != FONT_SPEC_MAX_INDEX)
@@ -1933,21 +1935,61 @@
 }
 
 
-DEFUN ("fontset-font", Ffontset_font, Sfontset_font, 2, 2, 0,
+DEFUN ("fontset-font", Ffontset_font, Sfontset_font, 2, 3, 0,
        doc: /* Return a font name pattern for character CH in fontset NAME.
-If NAME is t, find a font name pattern in the default fontset.  */)
-     (name, ch)
-     Lisp_Object name, ch;
+If NAME is t, find a pattern in the default fontset.
+
+The value has the form (FAMILY . REGISTRY), where FAMILY is a font
+family name and REGISTRY is a font registry name.  This is actually
+the first font name pattern for CH in the fontset or in the default
+fontset.
+
+If the 2nd optional arg ALL is non-nil, return a list of all font name
+patterns.  */)
+  (name, ch, all)
+     Lisp_Object name, ch, all;
 {
   int c;
-  Lisp_Object fontset, elt;
+  Lisp_Object fontset, elt, list, repertory, val;
+  int i, j;
 
   fontset = check_fontset_name (name);
 
   CHECK_CHARACTER (ch);
   c = XINT (ch);
-  elt = FONTSET_REF (fontset, c);
-  return Fcopy_sequence (elt);
+  list = Qnil;
+  while (1)
+    {
+      for (i = 0, elt = FONTSET_REF (fontset, c); i < 2;
+	   i++, elt = FONTSET_FALLBACK (fontset))
+	if (VECTORP (elt))
+	  for (j = 0; j < ASIZE (elt); j++)
+	    {
+	      val = AREF (elt, j);
+	      repertory = AREF (val, 1);
+	      if (INTEGERP (repertory))
+		{
+		  struct charset *charset = CHARSET_FROM_ID (XINT (repertory));
+
+		  if (! CHAR_CHARSET_P (c, charset))
+		    continue;
+		}
+	      else if (CHAR_TABLE_P (repertory))
+		{
+		  if (NILP (CHAR_TABLE_REF (repertory, c)))
+		    continue;
+		}
+	      val = AREF (val, 0);
+	      val = Fcons (AREF (val, 0), AREF (val, 5));
+	      if (NILP (all))
+		return val;
+	      list = Fcons (val, list);
+	    }
+      if (EQ (fontset, Vdefault_fontset))
+	break;
+      fontset = Vdefault_fontset;
+    }
+  return (Fnreverse (list));
 }
 
 DEFUN ("fontset-list", Ffontset_list, Sfontset_list, 0, 0, 0,