1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219
|
#define PERL_NO_GET_CONTEXT
#ifdef __cplusplus
extern "C" {
#endif
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "imext.h"
#include "imperl.h"
#include "imt1.h"
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
MODULE = Imager::Font::T1 PACKAGE = Imager::Font::T1xs PREFIX = i_t1_
Imager::Font::T1xs
i_t1_new(class,pfb,afm)
char* pfb
char* afm
C_ARGS:
pfb, afm
void
i_t1_DESTROY(font)
Imager::Font::T1xs font
undef_int
i_t1_cp(font,im,xb,yb,channel,points,str_sv,align,utf8=0,flags="",aa=1)
Imager::Font::T1xs font
Imager::ImgRaw im
i_img_dim xb
i_img_dim yb
int channel
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
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,utf8=0,flags="")
Imager::Font::T1xs fontnum
double point
SV* str_sv
int utf8
char* flags
PREINIT:
const char *str;
STRLEN len;
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
rc = i_t1_bbox(fontnum,point,str,len,cords,utf8,flags);
if (rc > 0) {
EXTEND(SP, rc);
for (i = 0; i < rc; ++i)
PUSHs(sv_2mortal(newSViv(cords[i])));
}
undef_int
i_t1_text(font,im,xb,yb,cl,points,str_sv,align,utf8=0,flags="",aa=1)
Imager::Font::T1xs font
Imager::ImgRaw im
i_img_dim xb
i_img_dim yb
Imager::Color cl
double points
SV* str_sv
int align
int utf8
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
RETVAL = i_t1_text(font,im, xb,yb,cl,points,str,len,align,
utf8,flags,aa);
OUTPUT:
RETVAL
void
i_t1_has_chars(font, text_sv, utf8 = 0)
Imager::Font::T1xs font
SV *text_sv
int utf8
PREINIT:
char const *text;
STRLEN len;
char *work;
int count;
int i;
PPCODE:
text = SvPV(text_sv, len);
#ifdef SvUTF8
if (SvUTF8(text_sv))
utf8 = 1;
#endif
work = mymalloc(len);
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(boolSV(work[i]));
}
}
else {
EXTEND(SP, 1);
PUSHs(sv_2mortal(newSVpv(work, count)));
}
myfree(work);
void
i_t1_face_name(font)
Imager::Font::T1xs font
PREINIT:
char name[255];
int len;
PPCODE:
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_names(font, text_sv, utf8 = 0)
Imager::Font::T1xs font
SV *text_sv
int utf8
PREINIT:
char const *text;
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
i_clear_error();
len = work_len;
while (len) {
unsigned long ch;
if (utf8) {
ch = i_utf8_advance(&text, &len);
if (ch == ~0UL) {
i_push_error(0, "invalid UTF8 character");
XSRETURN(0);
}
}
else {
ch = *text++;
--len;
}
EXTEND(SP, count+1);
if (i_t1_glyph_name(font, ch, name, sizeof(name))) {
ST(count) = sv_2mortal(newSVpv(name, 0));
}
else {
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();
|