aboutsummaryrefslogtreecommitdiffstats
path: root/src/font.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/font.c')
-rw-r--r--src/font.c265
1 files changed, 123 insertions, 142 deletions
diff --git a/src/font.c b/src/font.c
index 5aff20b1346..43b74b5b6f8 100644
--- a/src/font.c
+++ b/src/font.c
@@ -1,6 +1,6 @@
1/* font.c -- "Font" primitives. 1/* font.c -- "Font" primitives.
2 2
3Copyright (C) 2006-2011 Free Software Foundation, Inc. 3Copyright (C) 2006-2012 Free Software Foundation, Inc.
4Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 4Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
5 National Institute of Advanced Industrial Science and Technology (AIST) 5 National Institute of Advanced Industrial Science and Technology (AIST)
6 Registration Number H13PRO009 6 Registration Number H13PRO009
@@ -21,6 +21,7 @@ You should have received a copy of the GNU General Public License
21along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ 21along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
22 22
23#include <config.h> 23#include <config.h>
24#include <float.h>
24#include <stdio.h> 25#include <stdio.h>
25#include <ctype.h> 26#include <ctype.h>
26#include <setjmp.h> 27#include <setjmp.h>
@@ -161,7 +162,7 @@ static struct font_driver_list *font_driver_list;
161 162
162 163
163 164
164/* Creaters of font-related Lisp object. */ 165/* Creators of font-related Lisp object. */
165 166
166static Lisp_Object 167static Lisp_Object
167font_make_spec (void) 168font_make_spec (void)
@@ -613,7 +614,7 @@ static const struct
613 /* Function to validate PROP's value VAL, or NULL if any value is 614 /* Function to validate PROP's value VAL, or NULL if any value is
614 ok. The value is VAL or its regularized value if VAL is valid, 615 ok. The value is VAL or its regularized value if VAL is valid,
615 and Qerror if not. */ 616 and Qerror if not. */
616 Lisp_Object (*validater) (Lisp_Object prop, Lisp_Object val); 617 Lisp_Object (*validator) (Lisp_Object prop, Lisp_Object val);
617} font_property_table[] = 618} font_property_table[] =
618 { { &QCtype, font_prop_validate_symbol }, 619 { { &QCtype, font_prop_validate_symbol },
619 { &QCfoundry, font_prop_validate_symbol }, 620 { &QCfoundry, font_prop_validate_symbol },
@@ -671,7 +672,7 @@ font_prop_validate (int idx, Lisp_Object prop, Lisp_Object val)
671 if (idx < 0) 672 if (idx < 0)
672 return val; 673 return val;
673 } 674 }
674 validated = (font_property_table[idx].validater) (prop, val); 675 validated = (font_property_table[idx].validator) (prop, val);
675 if (EQ (validated, Qerror)) 676 if (EQ (validated, Qerror))
676 signal_error ("invalid font property", Fcons (prop, val)); 677 signal_error ("invalid font property", Fcons (prop, val));
677 return validated; 678 return validated;
@@ -801,7 +802,7 @@ font_expand_wildcards (Lisp_Object *field, int n)
801 struct { 802 struct {
802 /* Minimum possible field. */ 803 /* Minimum possible field. */
803 int from; 804 int from;
804 /* Maxinum possible field. */ 805 /* Maximum possible field. */
805 int to; 806 int to;
806 /* Bit mask of possible field. Nth bit corresponds to Nth field. */ 807 /* Bit mask of possible field. Nth bit corresponds to Nth field. */
807 int mask; 808 int mask;
@@ -824,7 +825,7 @@ font_expand_wildcards (Lisp_Object *field, int n)
824 range_mask = (range_mask << 1) | 1; 825 range_mask = (range_mask << 1) | 1;
825 826
826 /* The triplet RANGE_FROM, RANGE_TO, and RANGE_MASK is a 827 /* The triplet RANGE_FROM, RANGE_TO, and RANGE_MASK is a
827 position-based retriction for FIELD[I]. */ 828 position-based restriction for FIELD[I]. */
828 for (i = 0, range_from = 0, range_to = 14 - n; i < n; 829 for (i = 0, range_from = 0, range_to = 14 - n; i < n;
829 i++, range_from++, range_to++, range_mask <<= 1) 830 i++, range_from++, range_to++, range_mask <<= 1)
830 { 831 {
@@ -841,7 +842,7 @@ font_expand_wildcards (Lisp_Object *field, int n)
841 else 842 else
842 { 843 {
843 /* The triplet FROM, TO, and MASK is a value-based 844 /* The triplet FROM, TO, and MASK is a value-based
844 retriction for FIELD[I]. */ 845 restriction for FIELD[I]. */
845 int from, to; 846 int from, to;
846 unsigned mask; 847 unsigned mask;
847 848
@@ -953,7 +954,7 @@ font_expand_wildcards (Lisp_Object *field, int n)
953 } 954 }
954 } 955 }
955 956
956 /* Decide all fileds from restrictions in RANGE. */ 957 /* Decide all fields from restrictions in RANGE. */
957 for (i = j = 0; i < n ; i++) 958 for (i = j = 0; i < n ; i++)
958 { 959 {
959 if (j < range[i].from) 960 if (j < range[i].from)
@@ -1180,7 +1181,7 @@ font_unparse_xlfd (Lisp_Object font, int pixel_size, char *name, int nbytes)
1180 char *p; 1181 char *p;
1181 const char *f[XLFD_REGISTRY_INDEX + 1]; 1182 const char *f[XLFD_REGISTRY_INDEX + 1];
1182 Lisp_Object val; 1183 Lisp_Object val;
1183 int i, j, len = 0; 1184 int i, j, len;
1184 1185
1185 font_assert (FONTP (font)); 1186 font_assert (FONTP (font));
1186 1187
@@ -1195,9 +1196,9 @@ font_unparse_xlfd (Lisp_Object font, int pixel_size, char *name, int nbytes)
1195 if (NILP (val)) 1196 if (NILP (val))
1196 { 1197 {
1197 if (j == XLFD_REGISTRY_INDEX) 1198 if (j == XLFD_REGISTRY_INDEX)
1198 f[j] = "*-*", len += 4; 1199 f[j] = "*-*";
1199 else 1200 else
1200 f[j] = "*", len += 2; 1201 f[j] = "*";
1201 } 1202 }
1202 else 1203 else
1203 { 1204 {
@@ -1207,21 +1208,15 @@ font_unparse_xlfd (Lisp_Object font, int pixel_size, char *name, int nbytes)
1207 && ! strchr (SSDATA (val), '-')) 1208 && ! strchr (SSDATA (val), '-'))
1208 { 1209 {
1209 /* Change "jisx0208*" and "jisx0208" to "jisx0208*-*". */ 1210 /* Change "jisx0208*" and "jisx0208" to "jisx0208*-*". */
1210 if (SDATA (val)[SBYTES (val) - 1] == '*') 1211 ptrdiff_t alloc = SBYTES (val) + 4;
1211 { 1212 if (nbytes <= alloc)
1212 f[j] = p = alloca (SBYTES (val) + 3); 1213 return -1;
1213 sprintf (p, "%s-*", SDATA (val)); 1214 f[j] = p = alloca (alloc);
1214 len += SBYTES (val) + 3; 1215 sprintf (p, "%s%s-*", SDATA (val),
1215 } 1216 "*" + (SDATA (val)[SBYTES (val) - 1] == '*'));
1216 else
1217 {
1218 f[j] = p = alloca (SBYTES (val) + 4);
1219 sprintf (p, "%s*-*", SDATA (val));
1220 len += SBYTES (val) + 4;
1221 }
1222 } 1217 }
1223 else 1218 else
1224 f[j] = SSDATA (val), len += SBYTES (val) + 1; 1219 f[j] = SSDATA (val);
1225 } 1220 }
1226 } 1221 }
1227 1222
@@ -1230,11 +1225,11 @@ font_unparse_xlfd (Lisp_Object font, int pixel_size, char *name, int nbytes)
1230 { 1225 {
1231 val = font_style_symbolic (font, i, 0); 1226 val = font_style_symbolic (font, i, 0);
1232 if (NILP (val)) 1227 if (NILP (val))
1233 f[j] = "*", len += 2; 1228 f[j] = "*";
1234 else 1229 else
1235 { 1230 {
1236 val = SYMBOL_NAME (val); 1231 val = SYMBOL_NAME (val);
1237 f[j] = SSDATA (val), len += SBYTES (val) + 1; 1232 f[j] = SSDATA (val);
1238 } 1233 }
1239 } 1234 }
1240 1235
@@ -1242,64 +1237,62 @@ font_unparse_xlfd (Lisp_Object font, int pixel_size, char *name, int nbytes)
1242 font_assert (NUMBERP (val) || NILP (val)); 1237 font_assert (NUMBERP (val) || NILP (val));
1243 if (INTEGERP (val)) 1238 if (INTEGERP (val))
1244 { 1239 {
1245 i = XINT (val); 1240 EMACS_INT v = XINT (val);
1246 if (i <= 0) 1241 if (v <= 0)
1247 i = pixel_size; 1242 v = pixel_size;
1248 if (i > 0) 1243 if (v > 0)
1249 { 1244 {
1250 f[XLFD_PIXEL_INDEX] = p = alloca (22); 1245 f[XLFD_PIXEL_INDEX] = p =
1251 len += sprintf (p, "%d-*", i) + 1; 1246 alloca (sizeof "-*" + INT_STRLEN_BOUND (EMACS_INT));
1247 sprintf (p, "%"pI"d-*", v);
1252 } 1248 }
1253 else 1249 else
1254 f[XLFD_PIXEL_INDEX] = "*-*", len += 4; 1250 f[XLFD_PIXEL_INDEX] = "*-*";
1255 } 1251 }
1256 else if (FLOATP (val)) 1252 else if (FLOATP (val))
1257 { 1253 {
1258 i = XFLOAT_DATA (val) * 10; 1254 double v = XFLOAT_DATA (val) * 10;
1259 f[XLFD_PIXEL_INDEX] = p = alloca (12); 1255 f[XLFD_PIXEL_INDEX] = p = alloca (sizeof "*-" + 1 + DBL_MAX_10_EXP + 1);
1260 len += sprintf (p, "*-%d", i) + 1; 1256 sprintf (p, "*-%.0f", v);
1261 } 1257 }
1262 else 1258 else
1263 f[XLFD_PIXEL_INDEX] = "*-*", len += 4; 1259 f[XLFD_PIXEL_INDEX] = "*-*";
1264 1260
1265 if (INTEGERP (AREF (font, FONT_DPI_INDEX))) 1261 if (INTEGERP (AREF (font, FONT_DPI_INDEX)))
1266 { 1262 {
1267 i = XINT (AREF (font, FONT_DPI_INDEX)); 1263 EMACS_INT v = XINT (AREF (font, FONT_DPI_INDEX));
1268 f[XLFD_RESX_INDEX] = p = alloca (22); 1264 f[XLFD_RESX_INDEX] = p =
1269 len += sprintf (p, "%d-%d", i, i) + 1; 1265 alloca (sizeof "-" + 2 * INT_STRLEN_BOUND (EMACS_INT));
1266 sprintf (p, "%"pI"d-%"pI"d", v, v);
1270 } 1267 }
1271 else 1268 else
1272 f[XLFD_RESX_INDEX] = "*-*", len += 4; 1269 f[XLFD_RESX_INDEX] = "*-*";
1273 if (INTEGERP (AREF (font, FONT_SPACING_INDEX))) 1270 if (INTEGERP (AREF (font, FONT_SPACING_INDEX)))
1274 { 1271 {
1275 int spacing = XINT (AREF (font, FONT_SPACING_INDEX)); 1272 EMACS_INT spacing = XINT (AREF (font, FONT_SPACING_INDEX));
1276 1273
1277 f[XLFD_SPACING_INDEX] = (spacing <= FONT_SPACING_PROPORTIONAL ? "p" 1274 f[XLFD_SPACING_INDEX] = (spacing <= FONT_SPACING_PROPORTIONAL ? "p"
1278 : spacing <= FONT_SPACING_DUAL ? "d" 1275 : spacing <= FONT_SPACING_DUAL ? "d"
1279 : spacing <= FONT_SPACING_MONO ? "m" 1276 : spacing <= FONT_SPACING_MONO ? "m"
1280 : "c"); 1277 : "c");
1281 len += 2;
1282 } 1278 }
1283 else 1279 else
1284 f[XLFD_SPACING_INDEX] = "*", len += 2; 1280 f[XLFD_SPACING_INDEX] = "*";
1285 if (INTEGERP (AREF (font, FONT_AVGWIDTH_INDEX))) 1281 if (INTEGERP (AREF (font, FONT_AVGWIDTH_INDEX)))
1286 { 1282 {
1287 f[XLFD_AVGWIDTH_INDEX] = p = alloca (22); 1283 f[XLFD_AVGWIDTH_INDEX] = p = alloca (INT_BUFSIZE_BOUND (EMACS_INT));
1288 len += sprintf (p, "%"pI"d", 1284 sprintf (p, "%"pI"d", XINT (AREF (font, FONT_AVGWIDTH_INDEX)));
1289 XINT (AREF (font, FONT_AVGWIDTH_INDEX))) + 1;
1290 } 1285 }
1291 else 1286 else
1292 f[XLFD_AVGWIDTH_INDEX] = "*", len += 2; 1287 f[XLFD_AVGWIDTH_INDEX] = "*";
1293 len++; /* for terminating '\0'. */ 1288 len = snprintf (name, nbytes, "-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s",
1294 if (len >= nbytes)
1295 return -1;
1296 return sprintf (name, "-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s-%s",
1297 f[XLFD_FOUNDRY_INDEX], f[XLFD_FAMILY_INDEX], 1289 f[XLFD_FOUNDRY_INDEX], f[XLFD_FAMILY_INDEX],
1298 f[XLFD_WEIGHT_INDEX], f[XLFD_SLANT_INDEX], 1290 f[XLFD_WEIGHT_INDEX], f[XLFD_SLANT_INDEX],
1299 f[XLFD_SWIDTH_INDEX], f[XLFD_ADSTYLE_INDEX], 1291 f[XLFD_SWIDTH_INDEX], f[XLFD_ADSTYLE_INDEX],
1300 f[XLFD_PIXEL_INDEX], f[XLFD_RESX_INDEX], 1292 f[XLFD_PIXEL_INDEX], f[XLFD_RESX_INDEX],
1301 f[XLFD_SPACING_INDEX], f[XLFD_AVGWIDTH_INDEX], 1293 f[XLFD_SPACING_INDEX], f[XLFD_AVGWIDTH_INDEX],
1302 f[XLFD_REGISTRY_INDEX]); 1294 f[XLFD_REGISTRY_INDEX]);
1295 return len < nbytes ? len : -1;
1303} 1296}
1304 1297
1305/* Parse NAME (null terminated) and store information in FONT 1298/* Parse NAME (null terminated) and store information in FONT
@@ -1341,7 +1334,7 @@ font_parse_fcname (char *name, Lisp_Object font)
1341 { 1334 {
1342 int decimal = 0, size_found = 1; 1335 int decimal = 0, size_found = 1;
1343 for (q = p + 1; *q && *q != ':'; q++) 1336 for (q = p + 1; *q && *q != ':'; q++)
1344 if (! isdigit(*q)) 1337 if (! isdigit (*q))
1345 { 1338 {
1346 if (*q != '.' || decimal) 1339 if (*q != '.' || decimal)
1347 { 1340 {
@@ -1553,23 +1546,19 @@ int
1553font_unparse_fcname (Lisp_Object font, int pixel_size, char *name, int nbytes) 1546font_unparse_fcname (Lisp_Object font, int pixel_size, char *name, int nbytes)
1554{ 1547{
1555 Lisp_Object family, foundry; 1548 Lisp_Object family, foundry;
1556 Lisp_Object tail, val; 1549 Lisp_Object val;
1557 int point_size; 1550 int point_size;
1558 int i; 1551 int i;
1559 ptrdiff_t len = 1;
1560 char *p; 1552 char *p;
1553 char *lim;
1561 Lisp_Object styles[3]; 1554 Lisp_Object styles[3];
1562 const char *style_names[3] = { "weight", "slant", "width" }; 1555 const char *style_names[3] = { "weight", "slant", "width" };
1563 char work[256];
1564 1556
1565 family = AREF (font, FONT_FAMILY_INDEX); 1557 family = AREF (font, FONT_FAMILY_INDEX);
1566 if (! NILP (family)) 1558 if (! NILP (family))
1567 { 1559 {
1568 if (SYMBOLP (family)) 1560 if (SYMBOLP (family))
1569 { 1561 family = SYMBOL_NAME (family);
1570 family = SYMBOL_NAME (family);
1571 len += SBYTES (family);
1572 }
1573 else 1562 else
1574 family = Qnil; 1563 family = Qnil;
1575 } 1564 }
@@ -1580,7 +1569,6 @@ font_unparse_fcname (Lisp_Object font, int pixel_size, char *name, int nbytes)
1580 if (XINT (val) != 0) 1569 if (XINT (val) != 0)
1581 pixel_size = XINT (val); 1570 pixel_size = XINT (val);
1582 point_size = -1; 1571 point_size = -1;
1583 len += 21; /* for ":pixelsize=NUM" */
1584 } 1572 }
1585 else 1573 else
1586 { 1574 {
@@ -1588,80 +1576,91 @@ font_unparse_fcname (Lisp_Object font, int pixel_size, char *name, int nbytes)
1588 abort (); 1576 abort ();
1589 pixel_size = -1; 1577 pixel_size = -1;
1590 point_size = (int) XFLOAT_DATA (val); 1578 point_size = (int) XFLOAT_DATA (val);
1591 len += 11; /* for "-NUM" */
1592 } 1579 }
1593 1580
1594 foundry = AREF (font, FONT_FOUNDRY_INDEX); 1581 foundry = AREF (font, FONT_FOUNDRY_INDEX);
1595 if (! NILP (foundry)) 1582 if (! NILP (foundry))
1596 { 1583 {
1597 if (SYMBOLP (foundry)) 1584 if (SYMBOLP (foundry))
1598 { 1585 foundry = SYMBOL_NAME (foundry);
1599 foundry = SYMBOL_NAME (foundry);
1600 len += 9 + SBYTES (foundry); /* ":foundry=NAME" */
1601 }
1602 else 1586 else
1603 foundry = Qnil; 1587 foundry = Qnil;
1604 } 1588 }
1605 1589
1606 for (i = 0; i < 3; i++) 1590 for (i = 0; i < 3; i++)
1607 { 1591 styles[i] = font_style_symbolic (font, FONT_WEIGHT_INDEX + i, 0);
1608 styles[i] = font_style_symbolic (font, FONT_WEIGHT_INDEX + i, 0);
1609 if (! NILP (styles[i]))
1610 len += sprintf (work, ":%s=%s", style_names[i],
1611 SDATA (SYMBOL_NAME (styles[i])));
1612 }
1613
1614 if (INTEGERP (AREF (font, FONT_DPI_INDEX)))
1615 len += sprintf (work, ":dpi=%"pI"d", XINT (AREF (font, FONT_DPI_INDEX)));
1616 if (INTEGERP (AREF (font, FONT_SPACING_INDEX)))
1617 len += strlen (":spacing=100");
1618 if (INTEGERP (AREF (font, FONT_AVGWIDTH_INDEX)))
1619 len += strlen (":scalable=false"); /* or ":scalable=true" */
1620 for (tail = AREF (font, FONT_EXTRA_INDEX); CONSP (tail); tail = XCDR (tail))
1621 {
1622 Lisp_Object key = XCAR (XCAR (tail)), value = XCDR (XCAR (tail));
1623 1592
1624 len += SBYTES (SYMBOL_NAME (key)) + 1; /* for :KEY= */
1625 if (STRINGP (value))
1626 len += SBYTES (value);
1627 else if (INTEGERP (value))
1628 len += sprintf (work, "%"pI"d", XINT (value));
1629 else if (SYMBOLP (value))
1630 len += (NILP (value) ? 5 : 4); /* for "false" or "true" */
1631 }
1632
1633 if (len > nbytes)
1634 return -1;
1635 p = name; 1593 p = name;
1594 lim = name + nbytes;
1636 if (! NILP (family)) 1595 if (! NILP (family))
1637 p += sprintf (p, "%s", SDATA (family)); 1596 {
1597 int len = snprintf (p, lim - p, "%s", SSDATA (family));
1598 if (! (0 <= len && len < lim - p))
1599 return -1;
1600 p += len;
1601 }
1638 if (point_size > 0) 1602 if (point_size > 0)
1639 { 1603 {
1640 if (p == name) 1604 int len = snprintf (p, lim - p, "-%d" + (p == name), point_size);
1641 p += sprintf (p, "%d", point_size); 1605 if (! (0 <= len && len < lim - p))
1642 else 1606 return -1;
1643 p += sprintf (p, "-%d", point_size); 1607 p += len;
1644 } 1608 }
1645 else if (pixel_size > 0) 1609 else if (pixel_size > 0)
1646 p += sprintf (p, ":pixelsize=%d", pixel_size); 1610 {
1611 int len = snprintf (p, lim - p, ":pixelsize=%d", pixel_size);
1612 if (! (0 <= len && len < lim - p))
1613 return -1;
1614 p += len;
1615 }
1647 if (! NILP (AREF (font, FONT_FOUNDRY_INDEX))) 1616 if (! NILP (AREF (font, FONT_FOUNDRY_INDEX)))
1648 p += sprintf (p, ":foundry=%s", 1617 {
1649 SDATA (SYMBOL_NAME (AREF (font, FONT_FOUNDRY_INDEX)))); 1618 int len = snprintf (p, lim - p, ":foundry=%s",
1619 SSDATA (SYMBOL_NAME (AREF (font,
1620 FONT_FOUNDRY_INDEX))));
1621 if (! (0 <= len && len < lim - p))
1622 return -1;
1623 p += len;
1624 }
1650 for (i = 0; i < 3; i++) 1625 for (i = 0; i < 3; i++)
1651 if (! NILP (styles[i])) 1626 if (! NILP (styles[i]))
1652 p += sprintf (p, ":%s=%s", style_names[i], 1627 {
1653 SDATA (SYMBOL_NAME (styles[i]))); 1628 int len = snprintf (p, lim - p, ":%s=%s", style_names[i],
1629 SSDATA (SYMBOL_NAME (styles[i])));
1630 if (! (0 <= len && len < lim - p))
1631 return -1;
1632 p += len;
1633 }
1634
1654 if (INTEGERP (AREF (font, FONT_DPI_INDEX))) 1635 if (INTEGERP (AREF (font, FONT_DPI_INDEX)))
1655 p += sprintf (p, ":dpi=%"pI"d", XINT (AREF (font, FONT_DPI_INDEX))); 1636 {
1637 int len = snprintf (p, lim - p, ":dpi=%"pI"d",
1638 XINT (AREF (font, FONT_DPI_INDEX)));
1639 if (! (0 <= len && len < lim - p))
1640 return -1;
1641 p += len;
1642 }
1643
1656 if (INTEGERP (AREF (font, FONT_SPACING_INDEX))) 1644 if (INTEGERP (AREF (font, FONT_SPACING_INDEX)))
1657 p += sprintf (p, ":spacing=%"pI"d", XINT (AREF (font, FONT_SPACING_INDEX))); 1645 {
1646 int len = snprintf (p, lim - p, ":spacing=%"pI"d",
1647 XINT (AREF (font, FONT_SPACING_INDEX)));
1648 if (! (0 <= len && len < lim - p))
1649 return -1;
1650 p += len;
1651 }
1652
1658 if (INTEGERP (AREF (font, FONT_AVGWIDTH_INDEX))) 1653 if (INTEGERP (AREF (font, FONT_AVGWIDTH_INDEX)))
1659 { 1654 {
1660 if (XINT (AREF (font, FONT_AVGWIDTH_INDEX)) == 0) 1655 int len = snprintf (p, lim - p,
1661 p += sprintf (p, ":scalable=true"); 1656 (XINT (AREF (font, FONT_AVGWIDTH_INDEX)) == 0
1662 else 1657 ? ":scalable=true"
1663 p += sprintf (p, ":scalable=false"); 1658 : ":scalable=false"));
1659 if (! (0 <= len && len < lim - p))
1660 return -1;
1661 p += len;
1664 } 1662 }
1663
1665 return (p - name); 1664 return (p - name);
1666} 1665}
1667 1666
@@ -1738,8 +1737,7 @@ font_parse_family_registry (Lisp_Object family, Lisp_Object registry, Lisp_Objec
1738#define LGSTRING_GLYPH_SIZE 8 1737#define LGSTRING_GLYPH_SIZE 8
1739 1738
1740static int 1739static int
1741check_gstring (gstring) 1740check_gstring (Lisp_Object gstring)
1742 Lisp_Object gstring;
1743{ 1741{
1744 Lisp_Object val; 1742 Lisp_Object val;
1745 int i, j; 1743 int i, j;
@@ -1793,8 +1791,7 @@ check_gstring (gstring)
1793} 1791}
1794 1792
1795static void 1793static void
1796check_otf_features (otf_features) 1794check_otf_features (Lisp_Object otf_features)
1797 Lisp_Object otf_features;
1798{ 1795{
1799 Lisp_Object val; 1796 Lisp_Object val;
1800 1797
@@ -1827,8 +1824,7 @@ check_otf_features (otf_features)
1827Lisp_Object otf_list; 1824Lisp_Object otf_list;
1828 1825
1829static Lisp_Object 1826static Lisp_Object
1830otf_tag_symbol (tag) 1827otf_tag_symbol (OTF_Tag tag)
1831 OTF_Tag tag;
1832{ 1828{
1833 char name[5]; 1829 char name[5];
1834 1830
@@ -1837,8 +1833,7 @@ otf_tag_symbol (tag)
1837} 1833}
1838 1834
1839static OTF * 1835static OTF *
1840otf_open (file) 1836otf_open (Lisp_Object file)
1841 Lisp_Object file;
1842{ 1837{
1843 Lisp_Object val = Fassoc (file, otf_list); 1838 Lisp_Object val = Fassoc (file, otf_list);
1844 OTF *otf; 1839 OTF *otf;
@@ -1860,8 +1855,7 @@ otf_open (file)
1860 (struct font_driver).otf_capability. */ 1855 (struct font_driver).otf_capability. */
1861 1856
1862Lisp_Object 1857Lisp_Object
1863font_otf_capability (font) 1858font_otf_capability (struct font *font)
1864 struct font *font;
1865{ 1859{
1866 OTF *otf; 1860 OTF *otf;
1867 Lisp_Object capability = Fcons (Qnil, Qnil); 1861 Lisp_Object capability = Fcons (Qnil, Qnil);
@@ -1935,9 +1929,7 @@ font_otf_capability (font)
1935 FEATURES. */ 1929 FEATURES. */
1936 1930
1937static void 1931static void
1938generate_otf_features (spec, features) 1932generate_otf_features (Lisp_Object spec, char *features)
1939 Lisp_Object spec;
1940 char *features;
1941{ 1933{
1942 Lisp_Object val; 1934 Lisp_Object val;
1943 char *p; 1935 char *p;
@@ -1959,12 +1951,12 @@ generate_otf_features (spec, features)
1959 else if (! asterisk) 1951 else if (! asterisk)
1960 { 1952 {
1961 val = SYMBOL_NAME (val); 1953 val = SYMBOL_NAME (val);
1962 p += sprintf (p, "%s", SDATA (val)); 1954 p += esprintf (p, "%s", SDATA (val));
1963 } 1955 }
1964 else 1956 else
1965 { 1957 {
1966 val = SYMBOL_NAME (val); 1958 val = SYMBOL_NAME (val);
1967 p += sprintf (p, "~%s", SDATA (val)); 1959 p += esprintf (p, "~%s", SDATA (val));
1968 } 1960 }
1969 } 1961 }
1970 if (CONSP (spec)) 1962 if (CONSP (spec))
@@ -1972,8 +1964,7 @@ generate_otf_features (spec, features)
1972} 1964}
1973 1965
1974Lisp_Object 1966Lisp_Object
1975font_otf_DeviceTable (device_table) 1967font_otf_DeviceTable (OTF_DeviceTable *device_table)
1976 OTF_DeviceTable *device_table;
1977{ 1968{
1978 int len = device_table->StartSize - device_table->EndSize + 1; 1969 int len = device_table->StartSize - device_table->EndSize + 1;
1979 1970
@@ -1982,9 +1973,7 @@ font_otf_DeviceTable (device_table)
1982} 1973}
1983 1974
1984Lisp_Object 1975Lisp_Object
1985font_otf_ValueRecord (value_format, value_record) 1976font_otf_ValueRecord (int value_format, OTF_ValueRecord *value_record)
1986 int value_format;
1987 OTF_ValueRecord *value_record;
1988{ 1977{
1989 Lisp_Object val = Fmake_vector (make_number (8), Qnil); 1978 Lisp_Object val = Fmake_vector (make_number (8), Qnil);
1990 1979
@@ -2008,8 +1997,7 @@ font_otf_ValueRecord (value_format, value_record)
2008} 1997}
2009 1998
2010Lisp_Object 1999Lisp_Object
2011font_otf_Anchor (anchor) 2000font_otf_Anchor (OTF_Anchor *anchor)
2012 OTF_Anchor *anchor;
2013{ 2001{
2014 Lisp_Object val; 2002 Lisp_Object val;
2015 2003
@@ -3172,14 +3160,7 @@ font_find_for_lface (FRAME_PTR f, Lisp_Object *attrs, Lisp_Object spec, int c)
3172 else 3160 else
3173 { 3161 {
3174 Lisp_Object alters 3162 Lisp_Object alters
3175 = Fassoc_string (val, Vface_alternative_font_family_alist, 3163 = Fassoc_string (val, Vface_alternative_font_family_alist, Qt);
3176 /* Font family names are case-sensitive under NS. */
3177#ifndef HAVE_NS
3178 Qt
3179#else
3180 Qnil
3181#endif
3182 );
3183 3164
3184 if (! NILP (alters)) 3165 if (! NILP (alters))
3185 { 3166 {
@@ -3251,7 +3232,7 @@ font_open_for_lface (FRAME_PTR f, Lisp_Object entity, Lisp_Object *attrs, Lisp_O
3251 if (INTEGERP (height)) 3232 if (INTEGERP (height))
3252 pt = XINT (height); 3233 pt = XINT (height);
3253 else 3234 else
3254 abort(); /* We should never end up here. */ 3235 abort (); /* We should never end up here. */
3255 } 3236 }
3256 3237
3257 pt /= 10; 3238 pt /= 10;
@@ -3259,7 +3240,7 @@ font_open_for_lface (FRAME_PTR f, Lisp_Object entity, Lisp_Object *attrs, Lisp_O
3259#ifdef HAVE_NS 3240#ifdef HAVE_NS
3260 if (size == 0) 3241 if (size == 0)
3261 { 3242 {
3262 Lisp_Object ffsize = get_frame_param(f, Qfontsize); 3243 Lisp_Object ffsize = get_frame_param (f, Qfontsize);
3263 size = NUMBERP (ffsize) ? POINT_TO_PIXEL (XINT (ffsize), f->resy) : 0; 3244 size = NUMBERP (ffsize) ? POINT_TO_PIXEL (XINT (ffsize), f->resy) : 0;
3264 } 3245 }
3265#endif 3246#endif
@@ -5156,7 +5137,7 @@ the corresponding glyph code. If ENCODING is a char-table, looking up
5156the table by a character gives the corresponding glyph code. 5137the table by a character gives the corresponding glyph code.
5157 5138
5158REPERTORY specifies a repertory of characters supported by the font. 5139REPERTORY specifies a repertory of characters supported by the font.
5159If REPERTORY is a charset, all characters beloging to the charset are 5140If REPERTORY is a charset, all characters belonging to the charset are
5160supported. If REPERTORY is a char-table, all characters who have a 5141supported. If REPERTORY is a char-table, all characters who have a
5161non-nil value in the table are supported. If REPERTORY is nil, Emacs 5142non-nil value in the table are supported. If REPERTORY is nil, Emacs
5162gets the repertory information by an opened font and ENCODING. */); 5143gets the repertory information by an opened font and ENCODING. */);