]> code.delx.au - gnu-emacs/blobdiff - src/composite.c
Merge from emacs-24; up to 2012-05-02T11:38:01Z!lekktu@gmail.com
[gnu-emacs] / src / composite.c
index 0d1ab2663090154578ad3ed523a179ca9e27ac33..4e90e9bb91497d6875e6d6c1a9cb80e2d9ef6eda 100644 (file)
@@ -23,10 +23,13 @@ You should have received a copy of the GNU General Public License
 along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
+
+#define COMPOSITE_INLINE EXTERN_INLINE
+
 #include <setjmp.h>
 #include "lisp.h"
-#include "buffer.h"
 #include "character.h"
+#include "buffer.h"
 #include "coding.h"
 #include "intervals.h"
 #include "window.h"
@@ -158,9 +161,6 @@ static Lisp_Object Qauto_composition_function;
    auto-compositions.  */
 #define MAX_AUTO_COMPOSITION_LOOKBACK 3
 
-static Lisp_Object Fcomposition_get_gstring (Lisp_Object, Lisp_Object,
-                                            Lisp_Object, Lisp_Object);
-
 /* Temporary variable used in macros COMPOSITION_XXX.  */
 Lisp_Object composition_temp;
 
@@ -240,13 +240,13 @@ get_composition_id (ptrdiff_t charpos, ptrdiff_t bytepos, ptrdiff_t nchars,
        for (i = 0; i < nchars; i++)
          {
            FETCH_STRING_CHAR_ADVANCE (ch, string, charpos, bytepos);
-           XVECTOR (key)->contents[i] = make_number (ch);
+           ASET (key, i, make_number (ch));
          }
       else
        for (i = 0; i < nchars; i++)
          {
            FETCH_CHAR_ADVANCE (ch, charpos, bytepos);
-           XVECTOR (key)->contents[i] = make_number (ch);
+           ASET (key, i, make_number (ch));
          }
     }
   else
@@ -329,7 +329,7 @@ get_composition_id (ptrdiff_t charpos, ptrdiff_t bytepos, ptrdiff_t nchars,
     memory_full (SIZE_MAX);
 
   /* Register the composition in composition_table.  */
-  cmp = (struct composition *) xmalloc (sizeof (struct composition));
+  cmp = xmalloc (sizeof *cmp);
 
   cmp->method = method;
   cmp->hash_index = hash_index;
@@ -355,7 +355,7 @@ get_composition_id (ptrdiff_t charpos, ptrdiff_t bytepos, ptrdiff_t nchars,
   else
     {
       /* Rule-base composition.  */
-      float leftmost = 0.0, rightmost;
+      double leftmost = 0.0, rightmost;
 
       ch = XINT (key_contents[0]);
       rightmost = ch != '\t' ? CHAR_WIDTH (ch) : 1;
@@ -364,7 +364,7 @@ get_composition_id (ptrdiff_t charpos, ptrdiff_t bytepos, ptrdiff_t nchars,
        {
          int rule, gref, nref;
          int this_width;
-         float this_left;
+         double this_left;
 
          rule = XINT (key_contents[i]);
          ch = XINT (key_contents[i + 1]);
@@ -765,7 +765,7 @@ composition_gstring_width (Lisp_Object gstring, ptrdiff_t from, ptrdiff_t to,
        }
       metrics->width = metrics->lbearing = metrics->rbearing = 0;
     }
-  for (glyph = &LGSTRING_GLYPH (gstring, from); from < to; from++, glyph++)
+  for (glyph = lgstring_glyph_addr (gstring, from); from < to; from++, glyph++)
     {
       int x;
 
@@ -950,23 +950,12 @@ autocmp_chars (Lisp_Object rule, ptrdiff_t charpos, ptrdiff_t bytepos, ptrdiff_t
                                       string);
   if (NILP (LGSTRING_ID (lgstring)))
     {
-      Lisp_Object args[6];
-
       /* Save point as marker before calling out to lisp.  */
       if (NILP (string))
-       {
-         Lisp_Object m = Fmake_marker ();
-         set_marker_both (m, Qnil, pt, pt_byte);
-         record_unwind_protect (restore_point_unwind, m);
-       }
-
-      args[0] = Vauto_composition_function;
-      args[1] = AREF (rule, 2);
-      args[2] = pos;
-      args[3] = make_number (to);
-      args[4] = font_object;
-      args[5] = string;
-      lgstring = safe_call (6, args);
+       record_unwind_protect (restore_point_unwind,
+                              build_marker (current_buffer, pt, pt_byte));
+      lgstring = safe_call (6, Vauto_composition_function, AREF (rule, 2),
+                           pos, make_number (to), font_object, string);
     }
   return unbind_to (count, lgstring);
 }