aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorStefan Monnier2008-02-06 03:14:46 +0000
committerStefan Monnier2008-02-06 03:14:46 +0000
commitf9ffa1eabb499f073b72015041ac2ed1d10f34e7 (patch)
treeb4ff2a07acfa90ebe15edcb9f68e1eb80dd740a3 /src
parent76860cbbf52f2ffb7c4a970fd3c27e341a9efd4f (diff)
downloademacs-f9ffa1eabb499f073b72015041ac2ed1d10f34e7.tar.gz
emacs-f9ffa1eabb499f073b72015041ac2ed1d10f34e7.zip
(check_gstring): Use them and AREF to access the vector before
we know it's really a gstring. (Ffont_shape_text): Fix typo. (Ffont_shape_text, Ffont_otf_alternates): Fix up int/Lisp_Oject mixups.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog4
-rw-r--r--src/font.c54
2 files changed, 31 insertions, 27 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 8fa3ee97b78..88ed0a7f4c9 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -2,6 +2,10 @@
2 2
3 * font.h (enum lgstring_indices, enum lglyph_indices): New enums. 3 * font.h (enum lgstring_indices, enum lglyph_indices): New enums.
4 (LGSTRING_SLOT, LGSTRING_SET_SLOT): New macros. 4 (LGSTRING_SLOT, LGSTRING_SET_SLOT): New macros.
5 * font.c (check_gstring): Use them and AREF to access the vector before
6 we know it's really a gstring.
7 (Ffont_shape_text): Fix typo.
8 (Ffont_shape_text, Ffont_otf_alternates): Fix up int/Lisp_Oject mixups.
5 9
6 * composite.h (Fcompose_region_internal, Fcompose_string_internal): 10 * composite.h (Fcompose_region_internal, Fcompose_string_internal):
7 Declare. 11 Declare.
diff --git a/src/font.c b/src/font.c
index 691f8bc1282..a2ce0c6dbaf 100644
--- a/src/font.c
+++ b/src/font.c
@@ -1,5 +1,5 @@
1/* font.c -- "Font" primitives. 1/* font.c -- "Font" primitives.
2 Copyright (C) 2006 Free Software Foundation, Inc. 2 Copyright (C) 2006, 2008 Free Software Foundation, Inc.
3 Copyright (C) 2006 3 Copyright (C) 2006
4 National Institute of Advanced Industrial Science and Technology (AIST) 4 National Institute of Advanced Industrial Science and Technology (AIST)
5 Registration Number H13PRO009 5 Registration Number H13PRO009
@@ -8,7 +8,7 @@ This file is part of GNU Emacs.
8 8
9GNU Emacs is free software; you can redistribute it and/or modify 9GNU Emacs is free software; you can redistribute it and/or modify
10it under the terms of the GNU General Public License as published by 10it under the terms of the GNU General Public License as published by
11the Free Software Foundation; either version 2, or (at your option) 11the Free Software Foundation; either version 3, or (at your option)
12any later version. 12any later version.
13 13
14GNU Emacs is distributed in the hope that it will be useful, 14GNU Emacs is distributed in the hope that it will be useful,
@@ -1576,16 +1576,16 @@ check_gstring (gstring)
1576 if (ASIZE (val) < LGSTRING_HEADER_SIZE) 1576 if (ASIZE (val) < LGSTRING_HEADER_SIZE)
1577 goto err; 1577 goto err;
1578 CHECK_FONT_OBJECT (LGSTRING_FONT (gstring)); 1578 CHECK_FONT_OBJECT (LGSTRING_FONT (gstring));
1579 if (! NILP (LGSTRING_LBEARING (gstring))) 1579 if (!NILP (LGSTRING_SLOT (gstring, LGSTRING_IX_LBEARING)))
1580 CHECK_NUMBER (LGSTRING_LBEARING (gstring)); 1580 CHECK_NUMBER (LGSTRING_SLOT (gstring, LGSTRING_IX_LBEARING));
1581 if (! NILP (LGSTRING_RBEARING (gstring))) 1581 if (!NILP (LGSTRING_SLOT (gstring, LGSTRING_IX_RBEARING)))
1582 CHECK_NUMBER (LGSTRING_RBEARING (gstring)); 1582 CHECK_NUMBER (LGSTRING_SLOT (gstring, LGSTRING_IX_RBEARING));
1583 if (! NILP (LGSTRING_WIDTH (gstring))) 1583 if (!NILP (LGSTRING_SLOT (gstring, LGSTRING_IX_WIDTH)))
1584 CHECK_NATNUM (LGSTRING_WIDTH (gstring)); 1584 CHECK_NATNUM (LGSTRING_SLOT (gstring, LGSTRING_IX_WIDTH));
1585 if (! NILP (LGSTRING_ASCENT (gstring))) 1585 if (!NILP (LGSTRING_SLOT (gstring, LGSTRING_IX_ASCENT)))
1586 CHECK_NUMBER (LGSTRING_ASCENT (gstring)); 1586 CHECK_NUMBER (LGSTRING_SLOT (gstring, LGSTRING_IX_ASCENT));
1587 if (! NILP (LGSTRING_DESCENT (gstring))) 1587 if (!NILP (LGSTRING_SLOT (gstring, LGSTRING_IX_ASCENT)))
1588 CHECK_NUMBER (LGSTRING_DESCENT(gstring)); 1588 CHECK_NUMBER (LGSTRING_SLOT (gstring, LGSTRING_IX_ASCENT));
1589 1589
1590 for (i = 0; i < LGSTRING_LENGTH (gstring); i++) 1590 for (i = 0; i < LGSTRING_LENGTH (gstring); i++)
1591 { 1591 {
@@ -1593,18 +1593,18 @@ check_gstring (gstring)
1593 CHECK_VECTOR (val); 1593 CHECK_VECTOR (val);
1594 if (ASIZE (val) < LGSTRING_GLYPH_SIZE) 1594 if (ASIZE (val) < LGSTRING_GLYPH_SIZE)
1595 goto err; 1595 goto err;
1596 if (NILP (LGLYPH_CHAR (val))) 1596 if (NILP (AREF (val, LGLYPH_IX_CHAR)))
1597 break; 1597 break;
1598 CHECK_NATNUM (LGLYPH_FROM (val)); 1598 CHECK_NATNUM (AREF (val, LGLYPH_IX_FROM));
1599 CHECK_NATNUM (LGLYPH_TO (val)); 1599 CHECK_NATNUM (AREF (val, LGLYPH_IX_TO));
1600 CHECK_CHARACTER (LGLYPH_CHAR (val)); 1600 CHECK_CHARACTER (AREF (val, LGLYPH_IX_CHAR));
1601 if (! NILP (LGLYPH_CODE (val))) 1601 if (!NILP (AREF (val, LGLYPH_IX_CODE)))
1602 CHECK_NATNUM (LGLYPH_CODE (val)); 1602 CHECK_NATNUM (AREF (val, LGLYPH_IX_CODE));
1603 if (! NILP (LGLYPH_WIDTH (val))) 1603 if (!NILP (AREF (val, LGLYPH_IX_WIDTH)))
1604 CHECK_NATNUM (LGLYPH_WIDTH (val)); 1604 CHECK_NATNUM (AREF (val, LGLYPH_IX_WIDTH));
1605 if (! NILP (LGLYPH_ADJUSTMENT (val))) 1605 if (!NILP (AREF (val, LGLYPH_IX_ADJUSTMENT)))
1606 { 1606 {
1607 val = LGLYPH_ADJUSTMENT (val); 1607 val = AREF (val, LGLYPH_IX_ADJUSTMENT);
1608 CHECK_VECTOR (val); 1608 CHECK_VECTOR (val);
1609 if (ASIZE (val) < 3) 1609 if (ASIZE (val) < 3)
1610 goto err; 1610 goto err;
@@ -3604,7 +3604,7 @@ FONT-OBJECT. */)
3604 if (NILP (string)) 3604 if (NILP (string))
3605 Fcompose_region_internal (from, to, gstr, Qnil); 3605 Fcompose_region_internal (from, to, gstr, Qnil);
3606 else 3606 else
3607 Fcompose_region_internal (string, from, to, gstr, Qnil); 3607 Fcompose_string_internal (string, from, to, gstr, Qnil);
3608 } 3608 }
3609 } 3609 }
3610 return make_number (end); 3610 return make_number (end);
@@ -3643,7 +3643,7 @@ FONT-OBJECT. */)
3643 if (NILP (LGLYPH_ADJUSTMENT (g))) 3643 if (NILP (LGLYPH_ADJUSTMENT (g)))
3644 { 3644 {
3645 metrics.width = LGLYPH_WIDTH (g); 3645 metrics.width = LGLYPH_WIDTH (g);
3646 if (XINT (LGLYPH_CHAR (g)) == 0 || metrics.width == 0) 3646 if (LGLYPH_CHAR (g) == 0 || metrics.width == 0)
3647 need_composition = 1; 3647 need_composition = 1;
3648 } 3648 }
3649 else 3649 else
@@ -3810,7 +3810,7 @@ corresponding character. */)
3810 3810
3811 gstring_in = Ffont_make_gstring (font_object, make_number (1)); 3811 gstring_in = Ffont_make_gstring (font_object, make_number (1));
3812 g = LGSTRING_GLYPH (gstring_in, 0); 3812 g = LGSTRING_GLYPH (gstring_in, 0);
3813 LGLYPH_SET_CHAR (g, character); 3813 LGLYPH_SET_CHAR (g, XINT (character));
3814 gstring_out = Ffont_make_gstring (font_object, make_number (10)); 3814 gstring_out = Ffont_make_gstring (font_object, make_number (10));
3815 while ((num = font->driver->otf_drive (font, otf_features, gstring_in, 0, 1, 3815 while ((num = font->driver->otf_drive (font, otf_features, gstring_in, 0, 1,
3816 gstring_out, 0, 1)) < 0) 3816 gstring_out, 0, 1)) < 0)
@@ -3820,8 +3820,8 @@ corresponding character. */)
3820 for (i = 0; i < num; i++) 3820 for (i = 0; i < num; i++)
3821 { 3821 {
3822 Lisp_Object g = LGSTRING_GLYPH (gstring_out, i); 3822 Lisp_Object g = LGSTRING_GLYPH (gstring_out, i);
3823 int c = XINT (LGLYPH_CHAR (g)); 3823 int c = LGLYPH_CHAR (g);
3824 unsigned code = XUINT (LGLYPH_CODE (g)); 3824 unsigned code = LGLYPH_CODE (g);
3825 3825
3826 alternates = Fcons (Fcons (make_number (code), 3826 alternates = Fcons (Fcons (make_number (code),
3827 c > 0 ? make_number (c) : Qnil), 3827 c > 0 ? make_number (c) : Qnil),