]> git.imager.perl.org - imager.git/blobdiff - T1/T1.xs
Coverity complained colors could be left uninitialized.
[imager.git] / T1 / T1.xs
index 255eec64b1c87ad225849544643465b1b89faf1e..56348d5c85061a6831081e51ce257574ab1f44dc 100644 (file)
--- a/T1/T1.xs
+++ b/T1/T1.xs
@@ -11,72 +11,77 @@ extern "C" {
 
 DEFINE_IMAGER_CALLBACKS;
 
+typedef i_t1_font_t Imager__Font__T1xs;
+
+#define i_t1_DESTROY(font) i_t1_destroy(font)
+
 MODULE = Imager::Font::T1  PACKAGE = Imager::Font::T1
 
 undef_int
 i_init_t1(t1log)
        int t1log
 
-void
-i_t1_set_aa(st)
-              int     st
+MODULE = Imager::Font::T1  PACKAGE = Imager::Font::T1xs PREFIX = i_t1_
 
-int
-i_t1_new(pfb,afm)
+Imager::Font::T1xs
+i_t1_new(class,pfb,afm)
                      char*    pfb
                      char*    afm
+  C_ARGS:
+    pfb, afm
 
-int
-i_t1_destroy(font_id)
-                      int     font_id
+void
+i_t1_DESTROY(font)
+ Imager::Font::T1xs font       
 
 
 undef_int
-i_t1_cp(im,xb,yb,channel,fontnum,points,str_sv,len_ignored,align,utf8=0,flags="")
+i_t1_cp(font,im,xb,yb,channel,points,str_sv,align,utf8=0,flags="",aa=1)
+ Imager::Font::T1xs     font
     Imager::ImgRaw     im
-              int     xb
-              int     yb
+        i_img_dim     xb
+        i_img_dim     yb
               int     channel
-              int     fontnum
-             float     points
+            double     points
                SV*    str_sv
               int     align
                int     utf8
               char*    flags
+              int     aa
              PREINIT:
                char *str;
                STRLEN len;
              CODE:
+               str = SvPV(str_sv, len);
 #ifdef SvUTF8
                if (SvUTF8(str_sv))
                  utf8 = 1;
 #endif
-               str = SvPV(str_sv, len);
-               RETVAL = i_t1_cp(im, xb,yb,channel,fontnum,points,str,len,align,
-                                  utf8,flags);
+               RETVAL = i_t1_cp(font, im, xb,yb,channel,points,str,len,align,
+                                  utf8,flags,aa);
            OUTPUT:
              RETVAL
 
 
 void
-i_t1_bbox(fontnum,point,str_sv,len_ignored,utf8=0,flags="")
              int     fontnum
-            float     point
+i_t1_bbox(fontnum,point,str_sv,utf8=0,flags="")
Imager::Font::T1xs     fontnum
+           double     point
                SV*    str_sv
                int     utf8
               char*    flags
             PREINIT:
-               char *str;
+               const char *str;
                STRLEN len;
-              int     cords[BOUNDING_BOX_COUNT];
+              i_img_dim     cords[BOUNDING_BOX_COUNT];
                int i;
                int rc;
             PPCODE:
+               str = SvPV(str_sv, len);
 #ifdef SvUTF8
                if (SvUTF8(str_sv))
                  utf8 = 1;
 #endif
-               str = SvPV(str_sv, len);
                rc = i_t1_bbox(fontnum,point,str,len,cords,utf8,flags);
                if (rc > 0) {
                  EXTEND(SP, rc);
@@ -87,34 +92,35 @@ i_t1_bbox(fontnum,point,str_sv,len_ignored,utf8=0,flags="")
 
 
 undef_int
-i_t1_text(im,xb,yb,cl,fontnum,points,str_sv,len_ignored,align,utf8=0,flags="")
+i_t1_text(font,im,xb,yb,cl,points,str_sv,align,utf8=0,flags="",aa=1)
+ Imager::Font::T1xs font
     Imager::ImgRaw     im
-              int     xb
-              int     yb
+        i_img_dim     xb
+        i_img_dim     yb
      Imager::Color    cl
-              int     fontnum
-             float     points
+            double     points
                SV*    str_sv
               int     align
                int     utf8
-              char*    flags
+        const char*    flags
+              int     aa
              PREINIT:
                char *str;
                STRLEN len;
              CODE:
+               str = SvPV(str_sv, len);
 #ifdef SvUTF8
                if (SvUTF8(str_sv))
                  utf8 = 1;
 #endif
-               str = SvPV(str_sv, len);
-               RETVAL = i_t1_text(im, xb,yb,cl,fontnum,points,str,len,align,
-                                  utf8,flags);
+               RETVAL = i_t1_text(font,im, xb,yb,cl,points,str,len,align,
+                                  utf8,flags,aa);
            OUTPUT:
              RETVAL
 
 void
-i_t1_has_chars(handle, text_sv, utf8 = 0)
-        int handle
+i_t1_has_chars(font, text_sv, utf8 = 0)
+ Imager::Font::T1xs font
         SV  *text_sv
         int utf8
       PREINIT:
@@ -124,17 +130,18 @@ i_t1_has_chars(handle, text_sv, utf8 = 0)
         int count;
         int i;
       PPCODE:
+        text = SvPV(text_sv, len);
 #ifdef SvUTF8
         if (SvUTF8(text_sv))
           utf8 = 1;
 #endif
-        text = SvPV(text_sv, len);
         work = mymalloc(len);
-        count = i_t1_has_chars(handle, text, len, utf8, work);
+        count = i_t1_has_chars(font, text, len, utf8, work);
         if (GIMME_V == G_ARRAY) {
           EXTEND(SP, count);
+
           for (i = 0; i < count; ++i) {
-            PUSHs(sv_2mortal(newSViv(work[i])));
+            PUSHs(boolSV(work[i]));
           }
         }
         else {
@@ -144,21 +151,21 @@ i_t1_has_chars(handle, text_sv, utf8 = 0)
         myfree(work);
 
 void
-i_t1_face_name(handle)
-        int handle
+i_t1_face_name(font)
+ Imager::Font::T1xs font
       PREINIT:
         char name[255];
         int len;
       PPCODE:
-        len = i_t1_face_name(handle, name, sizeof(name));
+        len = i_t1_face_name(font, name, sizeof(name));
         if (len) {
           EXTEND(SP, 1);
           PUSHs(sv_2mortal(newSVpv(name, strlen(name))));
         }
 
 void
-i_t1_glyph_name(handle, text_sv, utf8 = 0)
-        int handle
+i_t1_glyph_names(font, text_sv, utf8 = 0)
+ Imager::Font::T1xs font
         SV *text_sv
         int utf8
       PREINIT:
@@ -166,12 +173,14 @@ i_t1_glyph_name(handle, text_sv, utf8 = 0)
         STRLEN work_len;
         size_t len;
         char name[255];
+       SSize_t count = 0;
       PPCODE:
+        text = SvPV(text_sv, work_len);
 #ifdef SvUTF8
         if (SvUTF8(text_sv))
           utf8 = 1;
 #endif
-        text = SvPV(text_sv, work_len);
+       i_clear_error();
         len = work_len;
         while (len) {
           unsigned long ch;
@@ -179,21 +188,32 @@ i_t1_glyph_name(handle, text_sv, utf8 = 0)
             ch = i_utf8_advance(&text, &len);
             if (ch == ~0UL) {
               i_push_error(0, "invalid UTF8 character");
-              break;
+             XSRETURN(0);
             }
           }
           else {
             ch = *text++;
             --len;
           }
-          EXTEND(SP, 1);
-          if (i_t1_glyph_name(handle, ch, name, sizeof(name))) {
-            PUSHs(sv_2mortal(newSVpv(name, 0)));
+          EXTEND(SP, count+1);
+          if (i_t1_glyph_name(font, ch, name, sizeof(name))) {
+            ST(count) = sv_2mortal(newSVpv(name, 0));
           }
           else {
-            PUSHs(&PL_sv_undef);
-          } 
+            ST(count) = &PL_sv_undef;
+          }
+         ++count;
         }
+       XSRETURN(count);
+
+int
+i_t1_CLONE_SKIP(...)
+    CODE:
+       (void)items; /* avoid unused warning */
+       RETVAL = 1;
+    OUTPUT:
+       RETVAL
 
 BOOT:
        PERL_INITIALIZE_IMAGER_CALLBACKS;
+       i_t1_start();
\ No newline at end of file