sq_fpdf.cpp 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194
  1. #include "squirrel.h"
  2. #include "sqstdblobimpl.h"
  3. #include "fpdf.h"
  4. #include <string.h>
  5. #include <stdio.h>
  6. class Sq_Fpdf : public FPDF {
  7. protected:
  8. HSQUIRRELVM sqvm;
  9. HSQOBJECT self_weakref;
  10. public:
  11. Sq_Fpdf(HSQUIRRELVM v, HSQOBJECT &self):FPDF(){
  12. sqvm = v;
  13. self_weakref = self;
  14. }
  15. void callVirtual(const SQChar *func_name){
  16. //sq_reservestack(sqvm, 20);
  17. SQInteger top = sq_gettop(sqvm);
  18. sq_pushobject(sqvm, self_weakref);
  19. sq_pushstring(sqvm, func_name, -1);
  20. sq_get(sqvm, -2);
  21. if(sq_gettype(sqvm, -1) == OT_CLOSURE){
  22. sq_push(sqvm, -2); //this
  23. sq_call(sqvm, 1, SQFalse, SQTrue);
  24. }
  25. sq_settop(sqvm, top);
  26. }
  27. void Header (){
  28. callVirtual(_SC("Header"));
  29. };
  30. void Footer () {
  31. callVirtual(_SC("Footer"));
  32. };
  33. bool AcceptPageBreak (){
  34. callVirtual(_SC("AcceptPageBreak"));
  35. return FPDF::AcceptPageBreak();
  36. };
  37. };
  38. static SQRESULT sq_glue_releasehook(SQUserPointer p, SQInteger size, HSQUIRRELVM v)
  39. {
  40. Sq_Fpdf *self = ((Sq_Fpdf *)p);
  41. delete self;
  42. return 1;
  43. }
  44. static SQRESULT sq_glue_constructor(HSQUIRRELVM v)
  45. {
  46. //SQ_FUNC_VARS_NO_TOP(v);
  47. HSQOBJECT self;
  48. sq_resetobject(&self);
  49. sq_getstackobj(v, 1, &self);
  50. Sq_Fpdf *cptr = new Sq_Fpdf(v, self);
  51. sq_setinstanceup(v, 1, cptr);
  52. sq_setreleasehook(v,1, sq_glue_releasehook);
  53. return 1;
  54. }
  55. SQ_OPT_STRING_STRLEN();
  56. static const SQChar *SQ_FPDF_TAG = "Sq_Fpdf";
  57. #define GET_SQ_FPDF() SQ_GET_INSTANCE(v, 1, Sq_Fpdf, SQ_FPDF_TAG)
  58. /* bool AcceptPageBreak( ) */
  59. static SQRESULT sq_glue_AcceptPageBreak(HSQUIRRELVM v){
  60. SQ_FUNC_VARS_NO_TOP(v);
  61. GET_SQ_FPDF();
  62. sq_pushbool(v, self->FPDF::AcceptPageBreak());
  63. return 1;
  64. }
  65. /* void AddFont( char const * afamily , char const * astyle = 0 , char const * afile = 0 ) */
  66. static SQRESULT sq_glue_AddFont(HSQUIRRELVM v){
  67. SQ_FUNC_VARS(v);
  68. GET_SQ_FPDF();
  69. SQ_GET_STRING(v, 2, afamily);
  70. SQ_OPT_STRING(v, 3, astyle, 0);
  71. SQ_OPT_STRING(v, 4, afile, 0);
  72. self->AddFont(afamily, astyle, afile);
  73. return 0;
  74. }
  75. /* int AddLink( ) */
  76. static SQRESULT sq_glue_AddLink(HSQUIRRELVM v){
  77. SQ_FUNC_VARS_NO_TOP(v);
  78. GET_SQ_FPDF();
  79. sq_pushinteger(v, self->AddLink());
  80. return 1;
  81. }
  82. /* void AddPage( FPDF::e_orientation orientation = FPDF::e_orientation_none , FPDF::st_pagesize * psize = 0 ) */
  83. static SQRESULT sq_glue_AddPage(HSQUIRRELVM v){
  84. SQ_FUNC_VARS(v);
  85. GET_SQ_FPDF();
  86. SQ_OPT_INTEGER(v, 2, orientation, FPDF::e_orientation_none);
  87. SQ_OPT_STRING(v, 3, psize, 0);
  88. self->AddPage((FPDF::e_orientation)orientation, 0);
  89. return 0;
  90. }
  91. /* void AliasNbPages( char const * alias = "{nb}" ) */
  92. static SQRESULT sq_glue_AliasNbPages(HSQUIRRELVM v){
  93. SQ_FUNC_VARS(v);
  94. GET_SQ_FPDF();
  95. SQ_OPT_STRING(v, 2, alias, "{nb}");
  96. self->AliasNbPages(alias);
  97. return 0;
  98. }
  99. /* int CalcLines( pdf_float_t w , char const * txt ) */
  100. static SQRESULT sq_glue_CalcLines(HSQUIRRELVM v){
  101. SQ_FUNC_VARS_NO_TOP(v);
  102. GET_SQ_FPDF();
  103. SQ_GET_FLOAT(v, 2, w);
  104. SQ_GET_STRING(v, 3, txt);
  105. sq_pushinteger(v, self->CalcLines(w, txt));
  106. return 1;
  107. }
  108. /* void Cell( pdf_float_t w , pdf_float_t h = 0.0f , char const * txt = 0 , char const * border = 0 , int ln = 0 , char align = ' ' , bool fill = false , int link = 0 ) */
  109. static SQRESULT sq_glue_Cell(HSQUIRRELVM v){
  110. SQ_FUNC_VARS(v);
  111. GET_SQ_FPDF();
  112. SQ_GET_FLOAT(v, 2, w);
  113. SQ_OPT_FLOAT(v, 3, h, 0.0f);
  114. SQ_OPT_STRING(v, 4, txt, 0);
  115. SQ_OPT_STRING(v, 5, border, 0);
  116. SQ_OPT_INTEGER(v, 6, ln, 0);
  117. SQ_OPT_INTEGER(v, 7, align, ' ');
  118. SQ_OPT_BOOL(v, 8, fill, false);
  119. SQ_OPT_INTEGER(v, 9, link, 0);
  120. self->Cell(w, h, txt, border, ln, align, fill ? 1 : 0, link);
  121. return 0;
  122. }
  123. /* void CellFit( pdf_float_t w , pdf_float_t h = 0 , char const * txt = 0 , char const * border = 0 , int ln = 0 , char align = ' ' , bool fill = false , int link = 0 , bool scale = false , bool force = true ) */
  124. static SQRESULT sq_glue_CellFit(HSQUIRRELVM v){
  125. SQ_FUNC_VARS(v);
  126. GET_SQ_FPDF();
  127. SQ_GET_FLOAT(v, 2, w);
  128. SQ_OPT_FLOAT(v, 3, h, 0);
  129. SQ_OPT_STRING(v, 4, txt, 0);
  130. SQ_OPT_STRING(v, 5, border, 0);
  131. SQ_OPT_INTEGER(v, 6, ln, 0);
  132. SQ_OPT_INTEGER(v, 7, align, ' ');
  133. SQ_OPT_BOOL(v, 8, fill, false);
  134. SQ_OPT_INTEGER(v, 9, link, 0);
  135. SQ_OPT_INTEGER(v, 10, scale, false);
  136. SQ_OPT_INTEGER(v, 11, force, true);
  137. self->CellFit(w, h, txt, border, ln, align, fill ? 1 : 0, link, scale, force);
  138. return 0;
  139. }
  140. /* void CellFitScale( pdf_float_t w , pdf_float_t h = 0 , char const * txt = 0 , char const * border = 0 , int ln = 0 , char align = ' ' , bool fill = false , int link = 0 ) */
  141. static SQRESULT sq_glue_CellFitScale(HSQUIRRELVM v){
  142. SQ_FUNC_VARS(v);
  143. GET_SQ_FPDF();
  144. SQ_GET_FLOAT(v, 2, w);
  145. SQ_OPT_FLOAT(v, 3, h, 0);
  146. SQ_OPT_STRING(v, 4, txt, 0);
  147. SQ_OPT_STRING(v, 5, border, 0);
  148. SQ_OPT_INTEGER(v, 6, ln, 0);
  149. SQ_OPT_INTEGER(v, 7, align, ' ');
  150. SQ_OPT_BOOL(v, 8, fill, false);
  151. SQ_OPT_INTEGER(v, 9, link, 0);
  152. self->CellFitScale(w, h, txt, border, ln, align, fill ? 1 : 0, link);
  153. return 0;
  154. }
  155. /* void CellFitScaleForce( pdf_float_t w , pdf_float_t h = 0 , char const * txt = 0 , char const * border = 0 , int ln = 0 , char align = ' ' , bool fill = false , int link = 0 ) */
  156. static SQRESULT sq_glue_CellFitScaleForce(HSQUIRRELVM v){
  157. SQ_FUNC_VARS(v);
  158. GET_SQ_FPDF();
  159. SQ_GET_FLOAT(v, 2, w);
  160. SQ_OPT_FLOAT(v, 3, h, 0);
  161. SQ_OPT_STRING(v, 4, txt, 0);
  162. SQ_OPT_STRING(v, 5, border, 0);
  163. SQ_OPT_INTEGER(v, 6, ln, 0);
  164. SQ_OPT_INTEGER(v, 7, align, ' ');
  165. SQ_OPT_BOOL(v, 8, fill, false);
  166. SQ_OPT_INTEGER(v, 9, link, 0);
  167. self->CellFitScaleForce(w, h, txt, border, ln, align, fill ? 1 : 0, link);
  168. return 0;
  169. }
  170. /* void CellFitSpace( pdf_float_t w , pdf_float_t h = 0 , char const * txt = 0 , char const * border = 0 , int ln = 0 , char align = ' ' , bool fill = false , int link = 0 ) */
  171. static SQRESULT sq_glue_CellFitSpace(HSQUIRRELVM v){
  172. SQ_FUNC_VARS(v);
  173. GET_SQ_FPDF();
  174. SQ_GET_FLOAT(v, 2, w);
  175. SQ_OPT_FLOAT(v, 3, h, 0);
  176. SQ_OPT_STRING(v, 4, txt, 0);
  177. SQ_OPT_STRING(v, 5, border, 0);
  178. SQ_OPT_INTEGER(v, 6, ln, 0);
  179. SQ_OPT_INTEGER(v, 7, align, ' ');
  180. SQ_OPT_BOOL(v, 8, fill, false);
  181. SQ_OPT_INTEGER(v, 9, link, 0);
  182. self->CellFitSpace(w, h, txt, border, ln, align, fill ? 1 : 0, link);
  183. return 0;
  184. }
  185. /* void CellFitSpaceForce( pdf_float_t w , pdf_float_t h = 0 , char const * txt = 0 , char const * border = 0 , int ln = 0 , char align = ' ' , bool fill = false , int link = 0 ) */
  186. static SQRESULT sq_glue_CellFitSpaceForce(HSQUIRRELVM v){
  187. SQ_FUNC_VARS(v);
  188. GET_SQ_FPDF();
  189. SQ_GET_FLOAT(v, 2, w);
  190. SQ_OPT_FLOAT(v, 3, h, 0);
  191. SQ_OPT_STRING(v, 4, txt, 0);
  192. SQ_OPT_STRING(v, 5, border, 0);
  193. SQ_OPT_INTEGER(v, 6, ln, 0);
  194. SQ_OPT_INTEGER(v, 7, align, ' ');
  195. SQ_OPT_BOOL(v, 8, fill, false);
  196. SQ_OPT_INTEGER(v, 9, link, 0);
  197. self->CellFitSpaceForce(w, h, txt, border, ln, align, fill ? 1 : 0, link);
  198. return 0;
  199. }
  200. /* void CheckPageBreak( pdf_float_t height ) */
  201. static SQRESULT sq_glue_CheckPageBreak(HSQUIRRELVM v){
  202. SQ_FUNC_VARS_NO_TOP(v);
  203. GET_SQ_FPDF();
  204. SQ_GET_FLOAT(v, 2, height);
  205. self->CheckPageBreak(height);
  206. return 0;
  207. }
  208. /* void Circle( pdf_float_t x , pdf_float_t y , pdf_float_t r , char const * style = "D" ) */
  209. static SQRESULT sq_glue_Circle(HSQUIRRELVM v){
  210. SQ_FUNC_VARS(v);
  211. GET_SQ_FPDF();
  212. SQ_GET_FLOAT(v, 2, x);
  213. SQ_GET_FLOAT(v, 3, y);
  214. SQ_GET_FLOAT(v, 4, r);
  215. SQ_OPT_STRING(v, 5, style, "D");
  216. self->Circle(x, y, r, style);
  217. return 0;
  218. }
  219. /* void ClippedCell( pdf_float_t w , pdf_float_t h = 0 , char const * txt = 0 , char const * border = 0 , int ln = 0 , char align = ' ' , bool fill = false , int link = 0 ) */
  220. static SQRESULT sq_glue_ClippedCell(HSQUIRRELVM v){
  221. SQ_FUNC_VARS(v);
  222. GET_SQ_FPDF();
  223. SQ_GET_FLOAT(v, 2, w);
  224. SQ_OPT_FLOAT(v, 3, h, 0);
  225. SQ_OPT_STRING(v, 4, txt, 0);
  226. SQ_OPT_STRING(v, 5, border, 0);
  227. SQ_OPT_INTEGER(v, 6, ln, 0);
  228. SQ_OPT_INTEGER(v, 7, align, ' ');
  229. SQ_OPT_BOOL(v, 8, fill, false);
  230. SQ_OPT_INTEGER(v, 9, link, 0);
  231. self->ClippedCell(w, h, txt, border, ln, align, fill ? 1 : 0, link);
  232. return 0;
  233. }
  234. /* void ClippingRect( pdf_float_t x , pdf_float_t y , pdf_float_t w , pdf_float_t h , bool outline = false ) */
  235. static SQRESULT sq_glue_ClippingRect(HSQUIRRELVM v){
  236. SQ_FUNC_VARS(v);
  237. GET_SQ_FPDF();
  238. SQ_GET_FLOAT(v, 2, x);
  239. SQ_GET_FLOAT(v, 3, y);
  240. SQ_GET_FLOAT(v, 4, w);
  241. SQ_GET_FLOAT(v, 5, h);
  242. SQ_OPT_INTEGER(v, 6, outline, false);
  243. self->ClippingRect(x, y, w, h, outline);
  244. return 0;
  245. }
  246. /* void ClippingText( pdf_float_t x , pdf_float_t y , char const * txt , bool outline = false ) */
  247. static SQRESULT sq_glue_ClippingText(HSQUIRRELVM v){
  248. SQ_FUNC_VARS(v);
  249. GET_SQ_FPDF();
  250. SQ_GET_FLOAT(v, 2, x);
  251. SQ_GET_FLOAT(v, 3, y);
  252. SQ_GET_STRING(v, 4, txt);
  253. SQ_OPT_INTEGER(v, 5, outline, false);
  254. self->ClippingText(x, y, txt, outline);
  255. return 0;
  256. }
  257. /* void Close( ) */
  258. static SQRESULT sq_glue_Close(HSQUIRRELVM v){
  259. SQ_FUNC_VARS_NO_TOP(v);
  260. GET_SQ_FPDF();
  261. self->Close();
  262. return 0;
  263. }
  264. /* void Ellipse( pdf_float_t x , pdf_float_t y , pdf_float_t rx , pdf_float_t ry , char const * style = "D" ) */
  265. static SQRESULT sq_glue_Ellipse(HSQUIRRELVM v){
  266. SQ_FUNC_VARS(v);
  267. GET_SQ_FPDF();
  268. SQ_GET_FLOAT(v, 2, x);
  269. SQ_GET_FLOAT(v, 3, y);
  270. SQ_GET_FLOAT(v, 4, rx);
  271. SQ_GET_FLOAT(v, 5, ry);
  272. SQ_OPT_STRING(v, 6, style, "D");
  273. self->Ellipse(x, y, rx, ry, style);
  274. return 0;
  275. }
  276. /* void Error( char const * msg ) */
  277. static SQRESULT sq_glue_Error(HSQUIRRELVM v){
  278. SQ_FUNC_VARS_NO_TOP(v);
  279. GET_SQ_FPDF();
  280. SQ_GET_STRING(v, 2, msg);
  281. self->Error(msg);
  282. return 0;
  283. }
  284. /* void Footer( ) */
  285. static SQRESULT sq_glue_Footer(HSQUIRRELVM v){
  286. SQ_FUNC_VARS_NO_TOP(v);
  287. GET_SQ_FPDF();
  288. self->FPDF::Footer();
  289. return 0;
  290. }
  291. /* const & GetAliasNbPages( ) */
  292. static SQRESULT sq_glue_GetAliasNbPages(HSQUIRRELVM v){
  293. SQ_FUNC_VARS_NO_TOP(v);
  294. GET_SQ_FPDF();
  295. std::string str = self->GetAliasNbPages();
  296. sq_pushstring(v, str.c_str(), str.size());
  297. return 1;
  298. }
  299. static void push_pdf_color(HSQUIRRELVM v, FPDF::pdf_color_t &color){
  300. if(sq_gettop(v) >= 2 && sq_gettype(v, 2) == OT_TABLE){
  301. sq_settop(v, 2);
  302. }
  303. else sq_newtable(v);
  304. sq_pushliteral(v, _SC("r"));
  305. sq_pushinteger(v, color.r);
  306. sq_rawset(v, -3);
  307. sq_pushliteral(v, _SC("g"));
  308. sq_pushinteger(v, color.g);
  309. sq_rawset(v, -3);
  310. sq_pushliteral(v, _SC("b"));
  311. sq_pushinteger(v, color.b);
  312. sq_rawset(v, -3);
  313. sq_pushliteral(v, _SC("t"));
  314. sq_pushinteger(v, color.t);
  315. sq_rawset(v, -3);
  316. }
  317. /* void GetDrawColor( FPDF::pdf_color_t & color ) */
  318. static SQRESULT sq_glue_GetDrawColor(HSQUIRRELVM v){
  319. SQ_FUNC_VARS_NO_TOP(v);
  320. GET_SQ_FPDF();
  321. FPDF::pdf_color_t color;
  322. self->GetDrawColor(color);
  323. push_pdf_color(v, color);
  324. return 1;
  325. }
  326. /* void GetFillColor( FPDF::pdf_color_t & color ) */
  327. static SQRESULT sq_glue_GetFillColor(HSQUIRRELVM v){
  328. SQ_FUNC_VARS_NO_TOP(v);
  329. GET_SQ_FPDF();
  330. FPDF::pdf_color_t color;
  331. self->GetFillColor(color);
  332. push_pdf_color(v, color);
  333. return 1;
  334. }
  335. /* void GetFontSettings( font_settings_st & fs ) */
  336. static SQRESULT sq_glue_GetFontSettings(HSQUIRRELVM v){
  337. SQ_FUNC_VARS(v);
  338. GET_SQ_FPDF();
  339. FPDF::font_settings_st fs;
  340. self->GetFontSettings(fs);
  341. if(_top_ >= 2 && sq_gettype(v, 2) == OT_TABLE){
  342. sq_settop(v, 2);
  343. }
  344. else sq_newtable(v);
  345. sq_pushliteral(v, _SC("family"));
  346. sq_pushstring(v, fs.family.c_str(), fs.family.size());
  347. sq_rawset(v, -3);
  348. sq_pushliteral(v, _SC("style"));
  349. sq_pushstring(v, fs.style.c_str(), fs.style.size());
  350. sq_rawset(v, -3);
  351. sq_pushliteral(v, _SC("size"));
  352. sq_pushfloat(v, fs.size);
  353. sq_rawset(v, -3);
  354. return 1;
  355. }
  356. /* pdf_float_t GetFontSize( ) */
  357. static SQRESULT sq_glue_GetFontSize(HSQUIRRELVM v){
  358. SQ_FUNC_VARS_NO_TOP(v);
  359. GET_SQ_FPDF();
  360. sq_pushfloat(v, self->GetFontSize());
  361. return 1;
  362. }
  363. /* pdf_float_t GetH( ) */
  364. static SQRESULT sq_glue_GetH(HSQUIRRELVM v){
  365. SQ_FUNC_VARS_NO_TOP(v);
  366. GET_SQ_FPDF();
  367. sq_pushfloat(v, self->GetH());
  368. return 1;
  369. }
  370. /* pdf_float_t GetLeftMargin( ) */
  371. static SQRESULT sq_glue_GetLeftMargin(HSQUIRRELVM v){
  372. SQ_FUNC_VARS_NO_TOP(v);
  373. GET_SQ_FPDF();
  374. sq_pushfloat(v, self->GetLeftMargin());
  375. return 1;
  376. }
  377. /* pdf_float_t GetRightMargin( ) */
  378. static SQRESULT sq_glue_GetRightMargin(HSQUIRRELVM v){
  379. SQ_FUNC_VARS_NO_TOP(v);
  380. GET_SQ_FPDF();
  381. sq_pushfloat(v, self->GetRightMargin());
  382. return 1;
  383. }
  384. /* pdf_float_t GetStringWidth( char const * s ) */
  385. static SQRESULT sq_glue_GetStringWidth(HSQUIRRELVM v){
  386. SQ_FUNC_VARS_NO_TOP(v);
  387. GET_SQ_FPDF();
  388. SQ_GET_STRING(v, 2, s);
  389. sq_pushfloat(v, self->GetStringWidth(s));
  390. return 1;
  391. }
  392. /* void GetTextColor( FPDF::pdf_color_t & color ) */
  393. static SQRESULT sq_glue_GetTextColor(HSQUIRRELVM v){
  394. SQ_FUNC_VARS_NO_TOP(v);
  395. GET_SQ_FPDF();
  396. FPDF::pdf_color_t color;
  397. self->GetTextColor(color);
  398. push_pdf_color(v, color);
  399. return 1;
  400. }
  401. /* pdf_float_t GetW( ) */
  402. static SQRESULT sq_glue_GetW(HSQUIRRELVM v){
  403. SQ_FUNC_VARS_NO_TOP(v);
  404. GET_SQ_FPDF();
  405. sq_pushfloat(v, self->GetW());
  406. return 1;
  407. }
  408. /* pdf_float_t GetX( ) */
  409. static SQRESULT sq_glue_GetX(HSQUIRRELVM v){
  410. SQ_FUNC_VARS_NO_TOP(v);
  411. GET_SQ_FPDF();
  412. sq_pushfloat(v, self->GetX());
  413. return 1;
  414. }
  415. /* pdf_float_t GetY( ) */
  416. static SQRESULT sq_glue_GetY(HSQUIRRELVM v){
  417. SQ_FUNC_VARS_NO_TOP(v);
  418. GET_SQ_FPDF();
  419. sq_pushfloat(v, self->GetY());
  420. return 1;
  421. }
  422. /* void Header( ) */
  423. static SQRESULT sq_glue_Header(HSQUIRRELVM v){
  424. SQ_FUNC_VARS_NO_TOP(v);
  425. GET_SQ_FPDF();
  426. self->FPDF::Header();
  427. return 0;
  428. }
  429. /* void Image( char const * file , pdf_float_t x = -1 , pdf_float_t y = -1 , pdf_float_t w = 0.0 , pdf_float_t h = 0.0 , char const * atype = 0 , int link = 0 ) */
  430. static SQRESULT sq_glue_Image(HSQUIRRELVM v){
  431. SQ_FUNC_VARS(v);
  432. GET_SQ_FPDF();
  433. SQ_GET_STRING(v, 2, file);
  434. SQ_OPT_FLOAT(v, 3, x, -1);
  435. SQ_OPT_FLOAT(v, 4, y, -1);
  436. SQ_OPT_FLOAT(v, 5, w, 0.0);
  437. SQ_OPT_FLOAT(v, 6, h, 0.0);
  438. SQ_OPT_STRING(v, 7, atype, 0);
  439. SQ_OPT_INTEGER(v, 8, link, 0);
  440. self->Image(file, x, y, w, h, atype, link);
  441. return 0;
  442. }
  443. /* void IncludeJS( char const * script ) */
  444. static SQRESULT sq_glue_IncludeJS(HSQUIRRELVM v){
  445. SQ_FUNC_VARS_NO_TOP(v);
  446. GET_SQ_FPDF();
  447. SQ_GET_STRING(v, 2, script);
  448. self->IncludeJS(script);
  449. return 0;
  450. }
  451. /* void Line( pdf_float_t x1 , pdf_float_t y1 , pdf_float_t x2 , pdf_float_t y2 ) */
  452. static SQRESULT sq_glue_Line(HSQUIRRELVM v){
  453. SQ_FUNC_VARS_NO_TOP(v);
  454. GET_SQ_FPDF();
  455. SQ_GET_FLOAT(v, 2, x1);
  456. SQ_GET_FLOAT(v, 3, y1);
  457. SQ_GET_FLOAT(v, 4, x2);
  458. SQ_GET_FLOAT(v, 5, y2);
  459. self->Line(x1, y1, x2, y2);
  460. return 0;
  461. }
  462. /* void Link( pdf_float_t x , pdf_float_t y , pdf_float_t w , pdf_float_t h , int link ) */
  463. static SQRESULT sq_glue_Link(HSQUIRRELVM v){
  464. SQ_FUNC_VARS_NO_TOP(v);
  465. GET_SQ_FPDF();
  466. SQ_GET_FLOAT(v, 2, x);
  467. SQ_GET_FLOAT(v, 3, y);
  468. SQ_GET_FLOAT(v, 4, w);
  469. SQ_GET_FLOAT(v, 5, h);
  470. SQ_GET_INTEGER(v, 6, link);
  471. self->Link(x, y, w, h, link);
  472. return 0;
  473. }
  474. /* void Ln( pdf_float_t h = 0.0 ) */
  475. static SQRESULT sq_glue_Ln(HSQUIRRELVM v){
  476. SQ_FUNC_VARS(v);
  477. GET_SQ_FPDF();
  478. SQ_OPT_FLOAT(v, 2, h, 0.0);
  479. self->Ln(h);
  480. return 0;
  481. }
  482. /* void MultiCell( pdf_float_t w , pdf_float_t h , char const * txt , char const * border = 0 , char align = 'J' , bool fill = false ) */
  483. static SQRESULT sq_glue_MultiCell(HSQUIRRELVM v){
  484. SQ_FUNC_VARS(v);
  485. GET_SQ_FPDF();
  486. SQ_GET_FLOAT(v, 2, w);
  487. SQ_GET_FLOAT(v, 3, h);
  488. SQ_GET_STRING(v, 4, txt);
  489. SQ_OPT_STRING(v, 5, border, 0);
  490. SQ_OPT_INTEGER(v, 6, align, 'J');
  491. SQ_OPT_BOOL(v, 7, fill, false);
  492. self->MultiCell(w, h, txt, border, align, fill ? 1 : 0);
  493. return 0;
  494. }
  495. /* void MultiCellBlt( pdf_float_t w , pdf_float_t h , char const * blt , char const * txt , char const * border = 0 , char align = 'J' , bool fill = false ) */
  496. static SQRESULT sq_glue_MultiCellBlt(HSQUIRRELVM v){
  497. SQ_FUNC_VARS(v);
  498. GET_SQ_FPDF();
  499. SQ_GET_FLOAT(v, 2, w);
  500. SQ_GET_FLOAT(v, 3, h);
  501. SQ_GET_STRING(v, 4, blt);
  502. SQ_GET_STRING(v, 5, txt);
  503. SQ_OPT_STRING(v, 6, border, 0);
  504. SQ_OPT_INTEGER(v, 7, align, 'J');
  505. SQ_OPT_BOOL(v, 8, fill, false);
  506. self->MultiCellBlt(w, h, blt, txt, border, align, fill ? 1 : 0);
  507. return 0;
  508. }
  509. /* void Open( ) */
  510. static SQRESULT sq_glue_Open(HSQUIRRELVM v){
  511. SQ_FUNC_VARS_NO_TOP(v);
  512. GET_SQ_FPDF();
  513. self->Open();
  514. return 0;
  515. }
  516. /* string Output( char const * name = 0 , char dest = ' ' ) */
  517. static SQRESULT sq_glue_Output(HSQUIRRELVM v){
  518. SQ_FUNC_VARS(v);
  519. GET_SQ_FPDF();
  520. SQBlob *blob = NULL;
  521. if(_top_ > 1) {
  522. SQObjectType ptype = sq_gettype(v, 2);
  523. if(ptype == OT_INSTANCE){
  524. if(SQ_FAILED(sq_getinstanceup(v,2,(SQUserPointer*)&blob,(SQUserPointer)SQBlob::SQBlob_TAG)))
  525. return sq_throwerror(v,_SC("invalid type tag"));
  526. if(!blob || !blob->IsValid())
  527. return sq_throwerror(v,_SC("the blob is invalid"));
  528. std::string str = self->Output(0, 'S');
  529. blob->Resize(str.size());
  530. memcpy(blob->GetBuf(), str.c_str(), str.size());
  531. return 0;
  532. }
  533. }
  534. SQ_OPT_STRING(v, 2, name, 0);
  535. SQ_OPT_INTEGER(v, 3, dest, ' ');
  536. std::string str = self->Output(name, dest);
  537. sq_pushstring(v, str.c_str(), str.size());
  538. return 1;
  539. }
  540. /* int PageNo( ) */
  541. static SQRESULT sq_glue_PageNo(HSQUIRRELVM v){
  542. SQ_FUNC_VARS_NO_TOP(v);
  543. GET_SQ_FPDF();
  544. sq_pushinteger(v, self->PageNo());
  545. return 1;
  546. }
  547. /* void Rect( pdf_float_t x , pdf_float_t y , pdf_float_t w , pdf_float_t h , char const * style = 0 ) */
  548. static SQRESULT sq_glue_Rect(HSQUIRRELVM v){
  549. SQ_FUNC_VARS(v);
  550. GET_SQ_FPDF();
  551. SQ_GET_FLOAT(v, 2, x);
  552. SQ_GET_FLOAT(v, 3, y);
  553. SQ_GET_FLOAT(v, 4, w);
  554. SQ_GET_FLOAT(v, 5, h);
  555. SQ_OPT_STRING(v, 6, style, 0);
  556. self->Rect(x, y, w, h, style);
  557. return 0;
  558. }
  559. /* void Rotate( pdf_float_t angle , pdf_float_t x = -1 , pdf_float_t y = -1 ) */
  560. static SQRESULT sq_glue_Rotate(HSQUIRRELVM v){
  561. SQ_FUNC_VARS(v);
  562. GET_SQ_FPDF();
  563. SQ_GET_FLOAT(v, 2, angle);
  564. SQ_OPT_FLOAT(v, 3, x, -1);
  565. SQ_OPT_FLOAT(v, 4, y, -1);
  566. self->Rotate(angle, x, y);
  567. return 0;
  568. }
  569. /* void RotatedText( pdf_float_t x , pdf_float_t y , char const * txt , pdf_float_t angle ) */
  570. static SQRESULT sq_glue_RotatedText(HSQUIRRELVM v){
  571. SQ_FUNC_VARS_NO_TOP(v);
  572. GET_SQ_FPDF();
  573. SQ_GET_FLOAT(v, 2, x);
  574. SQ_GET_FLOAT(v, 3, y);
  575. SQ_GET_STRING(v, 4, txt);
  576. SQ_GET_FLOAT(v, 5, angle);
  577. self->RotatedText(x, y, txt, angle);
  578. return 0;
  579. }
  580. /* void RoundedRect( pdf_float_t x , pdf_float_t y , pdf_float_t w , pdf_float_t h , pdf_float_t r , char const * style = "" ) */
  581. static SQRESULT sq_glue_RoundedRect(HSQUIRRELVM v){
  582. SQ_FUNC_VARS(v);
  583. GET_SQ_FPDF();
  584. SQ_GET_FLOAT(v, 2, x);
  585. SQ_GET_FLOAT(v, 3, y);
  586. SQ_GET_FLOAT(v, 4, w);
  587. SQ_GET_FLOAT(v, 5, h);
  588. SQ_GET_FLOAT(v, 6, r);
  589. SQ_OPT_STRING(v, 7, style, "");
  590. self->RoundedRect(x, y, w, h, r, style);
  591. return 0;
  592. }
  593. /* void SetAlpha( pdf_float_t alpha , char const * bm = 0 ) */
  594. static SQRESULT sq_glue_SetAlpha(HSQUIRRELVM v){
  595. SQ_FUNC_VARS(v);
  596. GET_SQ_FPDF();
  597. SQ_GET_FLOAT(v, 2, alpha);
  598. SQ_OPT_STRING(v, 3, bm, 0);
  599. self->SetAlpha(alpha, bm);
  600. return 0;
  601. }
  602. /* void SetAuthor( char const * author ) */
  603. static SQRESULT sq_glue_SetAuthor(HSQUIRRELVM v){
  604. SQ_FUNC_VARS_NO_TOP(v);
  605. GET_SQ_FPDF();
  606. SQ_GET_STRING(v, 2, author);
  607. self->SetAuthor(author);
  608. return 0;
  609. }
  610. /* void SetAutoPageBreak( bool b , pdf_float_t margin = 0.0f ) */
  611. static SQRESULT sq_glue_SetAutoPageBreak(HSQUIRRELVM v){
  612. SQ_FUNC_VARS(v);
  613. GET_SQ_FPDF();
  614. SQ_GET_INTEGER(v, 2, b);
  615. SQ_OPT_FLOAT(v, 3, margin, 0.0f);
  616. self->SetAutoPageBreak(b, margin);
  617. return 0;
  618. }
  619. /* void SetCompression( bool compress ) */
  620. static SQRESULT sq_glue_SetCompression(HSQUIRRELVM v){
  621. SQ_FUNC_VARS_NO_TOP(v);
  622. GET_SQ_FPDF();
  623. SQ_GET_BOOL(v, 2, compress);
  624. self->SetCompression(compress);
  625. return 0;
  626. }
  627. /* void SetCreator( char const * creator ) */
  628. static SQRESULT sq_glue_SetCreator(HSQUIRRELVM v){
  629. SQ_FUNC_VARS_NO_TOP(v);
  630. GET_SQ_FPDF();
  631. SQ_GET_STRING(v, 2, creator);
  632. self->SetCreator(creator);
  633. return 0;
  634. }
  635. /* void SetDash( pdf_float_t black = -1 , pdf_float_t white = -1 ) */
  636. static SQRESULT sq_glue_SetDash(HSQUIRRELVM v){
  637. SQ_FUNC_VARS(v);
  638. GET_SQ_FPDF();
  639. SQ_OPT_FLOAT(v, 2, black, -1);
  640. SQ_OPT_FLOAT(v, 3, white, -1);
  641. self->SetDash(black, white);
  642. return 0;
  643. }
  644. /* void SetDisplayMode( FPDF::e_zoom_mode zoom , FPDF::e_layout_mode layout = FPDF::e_layout_default ) */
  645. static SQRESULT sq_glue_SetDisplayMode(HSQUIRRELVM v){
  646. SQ_FUNC_VARS(v);
  647. GET_SQ_FPDF();
  648. SQ_GET_INTEGER(v, 2, zoom);
  649. SQ_OPT_INTEGER(v, 3, layout, FPDF::e_layout_default);
  650. //self->SetDisplayMode(zoom, layout);
  651. return 0;
  652. }
  653. /* void SetDoubleSided( pdf_float_t inner = 7 , pdf_float_t outer = 13 ) */
  654. static SQRESULT sq_glue_SetDoubleSided(HSQUIRRELVM v){
  655. SQ_FUNC_VARS(v);
  656. GET_SQ_FPDF();
  657. SQ_OPT_FLOAT(v, 2, inner, 7);
  658. SQ_OPT_FLOAT(v, 3, outer, 13);
  659. self->SetDoubleSided(inner, outer);
  660. return 0;
  661. }
  662. static SQRESULT get_pdfcolor_from_table(HSQUIRRELVM v, FPDF::pdf_color_t &color){
  663. if(sq_gettop(v) == 2){
  664. if(sq_gettype(v, 2) == OT_TABLE){
  665. SQInteger icolor;
  666. sq_pushliteral(v, _SC("r"));
  667. if(sq_rawget(v, 2) != SQ_OK) return SQ_ERROR;
  668. sq_getinteger(v, -1, &icolor);
  669. sq_poptop(v);
  670. color.r = icolor;
  671. sq_pushliteral(v, _SC("g"));
  672. if(sq_rawget(v, 2) != SQ_OK) return SQ_ERROR;
  673. sq_getinteger(v, -1, &icolor);
  674. sq_poptop(v);
  675. color.g = icolor;
  676. sq_pushliteral(v, _SC("b"));
  677. if(sq_rawget(v, 2) != SQ_OK) return SQ_ERROR;
  678. sq_getinteger(v, -1, &icolor);
  679. sq_poptop(v);
  680. color.b = icolor;
  681. sq_pushliteral(v, _SC("t"));
  682. if(sq_rawget(v, 2) != SQ_OK) return SQ_ERROR;
  683. sq_getinteger(v, -1, &icolor);
  684. sq_poptop(v);
  685. color.t = icolor;
  686. return SQ_OK;
  687. }
  688. }
  689. return SQ_ERROR;
  690. }
  691. /* void SetDrawColor( unsigned char r , unsigned char g , unsigned char b ) */
  692. static SQRESULT sq_glue_SetDrawColor(HSQUIRRELVM v){
  693. SQ_FUNC_VARS(v);
  694. GET_SQ_FPDF();
  695. if(_top_ == 2){
  696. FPDF::pdf_color_t color;
  697. if(get_pdfcolor_from_table(v, color) == SQ_OK){
  698. self->SetDrawColor(color);
  699. }
  700. else if(sq_gettype(v, 2) == OT_INTEGER){
  701. SQInteger icolor;
  702. sq_getinteger(v, 2, &icolor);
  703. self->SetDrawColor(icolor);
  704. }
  705. else return SQ_ERROR;
  706. }
  707. else
  708. {
  709. SQ_GET_INTEGER(v, 2, r);
  710. SQ_GET_INTEGER(v, 3, g);
  711. SQ_GET_INTEGER(v, 4, b);
  712. self->SetDrawColor(r, g, b);
  713. }
  714. return 0;
  715. }
  716. /* void SetFillColor( unsigned char r , unsigned char g , unsigned char b ) */
  717. static SQRESULT sq_glue_SetFillColor(HSQUIRRELVM v){
  718. SQ_FUNC_VARS(v);
  719. GET_SQ_FPDF();
  720. if(_top_ == 2){
  721. FPDF::pdf_color_t color;
  722. if(get_pdfcolor_from_table(v, color) == SQ_OK){
  723. self->SetFillColor(color);
  724. }
  725. else if(sq_gettype(v, 2) == OT_INTEGER){
  726. SQInteger icolor;
  727. sq_getinteger(v, 2, &icolor);
  728. self->SetFillColor(icolor);
  729. }
  730. else return SQ_ERROR;
  731. }
  732. else
  733. {
  734. SQ_GET_INTEGER(v, 2, r);
  735. SQ_GET_INTEGER(v, 3, g);
  736. SQ_GET_INTEGER(v, 4, b);
  737. self->SetFillColor(r, g, b);
  738. }
  739. return 0;
  740. }
  741. /* void SetFont( char const * afamily = 0 , char const * astyle = 0 , pdf_float_t size = 0 ) */
  742. static SQRESULT sq_glue_SetFont(HSQUIRRELVM v){
  743. SQ_FUNC_VARS(v);
  744. GET_SQ_FPDF();
  745. SQ_OPT_STRING(v, 2, afamily, 0);
  746. SQ_OPT_STRING(v, 3, astyle, 0);
  747. SQ_OPT_FLOAT(v, 4, size, 0);
  748. self->SetFont(afamily, astyle, size);
  749. return 0;
  750. }
  751. /* void SetFontSettings( font_settings_st & fs ) */
  752. static SQRESULT sq_glue_SetFontSettings(HSQUIRRELVM v){
  753. SQ_FUNC_VARS(v);
  754. GET_SQ_FPDF();
  755. if(_top_ == 2){
  756. if(sq_gettype(v, 2) == OT_TABLE){
  757. const SQChar *str;
  758. SQFloat num;
  759. FPDF::font_settings_st fs;
  760. sq_pushliteral(v, _SC("family"));
  761. if(sq_rawget(v, 2) != SQ_OK) return SQ_ERROR;
  762. sq_getstring(v, -1, &str);
  763. sq_poptop(v);
  764. fs.family = str;
  765. sq_pushliteral(v, _SC("style"));
  766. if(sq_rawget(v, 2) != SQ_OK) return SQ_ERROR;
  767. sq_getstring(v, -1, &str);
  768. sq_poptop(v);
  769. fs.style = str;
  770. sq_pushliteral(v, _SC("size"));
  771. if(sq_rawget(v, 2) != SQ_OK) return SQ_ERROR;
  772. sq_getfloat(v, -1, &num);
  773. sq_poptop(v);
  774. fs.size = num;
  775. self->SetFontSettings(fs);
  776. return 0;
  777. }
  778. }
  779. return SQ_ERROR;
  780. }
  781. /* void SetFontSize( pdf_float_t size ) */
  782. static SQRESULT sq_glue_SetFontSize(HSQUIRRELVM v){
  783. SQ_FUNC_VARS_NO_TOP(v);
  784. GET_SQ_FPDF();
  785. SQ_GET_FLOAT(v, 2, size);
  786. self->SetFontSize(size);
  787. return 0;
  788. }
  789. /* void SetKeywords( char const * keywords ) */
  790. static SQRESULT sq_glue_SetKeywords(HSQUIRRELVM v){
  791. SQ_FUNC_VARS_NO_TOP(v);
  792. GET_SQ_FPDF();
  793. SQ_GET_STRING(v, 2, keywords);
  794. self->SetKeywords(keywords);
  795. return 0;
  796. }
  797. /* void SetLeftMargin( pdf_float_t margin ) */
  798. static SQRESULT sq_glue_SetLeftMargin(HSQUIRRELVM v){
  799. SQ_FUNC_VARS_NO_TOP(v);
  800. GET_SQ_FPDF();
  801. SQ_GET_FLOAT(v, 2, margin);
  802. self->SetLeftMargin(margin);
  803. return 0;
  804. }
  805. /* void SetLineWidth( pdf_float_t width ) */
  806. static SQRESULT sq_glue_SetLineWidth(HSQUIRRELVM v){
  807. SQ_FUNC_VARS_NO_TOP(v);
  808. GET_SQ_FPDF();
  809. SQ_GET_FLOAT(v, 2, width);
  810. self->SetLineWidth(width);
  811. return 0;
  812. }
  813. /* void SetLink( int link , pdf_float_t y = 0 , int page = -1 ) */
  814. static SQRESULT sq_glue_SetLink(HSQUIRRELVM v){
  815. SQ_FUNC_VARS(v);
  816. GET_SQ_FPDF();
  817. SQ_GET_INTEGER(v, 2, link);
  818. SQ_OPT_FLOAT(v, 3, y, 0);
  819. SQ_OPT_INTEGER(v, 4, page, -1);
  820. self->SetLink(link, y, page);
  821. return 0;
  822. }
  823. /* void SetMargins( pdf_float_t left , pdf_float_t top , pdf_float_t right = 0.0f ) */
  824. static SQRESULT sq_glue_SetMargins(HSQUIRRELVM v){
  825. SQ_FUNC_VARS(v);
  826. GET_SQ_FPDF();
  827. SQ_GET_FLOAT(v, 2, left);
  828. SQ_GET_FLOAT(v, 3, top);
  829. SQ_OPT_FLOAT(v, 4, right, 0.0f);
  830. self->SetMargins(left, top, right);
  831. return 0;
  832. }
  833. /* void SetRightMargin( pdf_float_t margin ) */
  834. static SQRESULT sq_glue_SetRightMargin(HSQUIRRELVM v){
  835. SQ_FUNC_VARS_NO_TOP(v);
  836. GET_SQ_FPDF();
  837. SQ_GET_FLOAT(v, 2, margin);
  838. self->SetRightMargin(margin);
  839. return 0;
  840. }
  841. /* void SetSubject( char const * subject ) */
  842. static SQRESULT sq_glue_SetSubject(HSQUIRRELVM v){
  843. SQ_FUNC_VARS_NO_TOP(v);
  844. GET_SQ_FPDF();
  845. SQ_GET_STRING(v, 2, subject);
  846. self->SetSubject(subject);
  847. return 0;
  848. }
  849. /* void SetTextColor( unsigned char r , unsigned char g , unsigned char b ) */
  850. static SQRESULT sq_glue_SetTextColor(HSQUIRRELVM v){
  851. SQ_FUNC_VARS(v);
  852. GET_SQ_FPDF();
  853. if(_top_ == 2){
  854. FPDF::pdf_color_t color;
  855. if(get_pdfcolor_from_table(v, color) == SQ_OK){
  856. self->SetTextColor(color);
  857. }
  858. else if(sq_gettype(v, 2) == OT_INTEGER){
  859. SQInteger icolor;
  860. sq_getinteger(v, 2, &icolor);
  861. self->SetTextColor(icolor);
  862. }
  863. else return SQ_ERROR;
  864. }
  865. else
  866. {
  867. SQ_GET_INTEGER(v, 2, r);
  868. SQ_GET_INTEGER(v, 3, g);
  869. SQ_GET_INTEGER(v, 4, b);
  870. self->SetTextColor(r, g, b);
  871. }
  872. return 0;
  873. }
  874. /* void SetTitle( char const * title ) */
  875. static SQRESULT sq_glue_SetTitle(HSQUIRRELVM v){
  876. SQ_FUNC_VARS_NO_TOP(v);
  877. GET_SQ_FPDF();
  878. SQ_GET_STRING(v, 2, title);
  879. self->SetTitle(title);
  880. return 0;
  881. }
  882. /* void SetTopMargin( pdf_float_t margin ) */
  883. static SQRESULT sq_glue_SetTopMargin(HSQUIRRELVM v){
  884. SQ_FUNC_VARS_NO_TOP(v);
  885. GET_SQ_FPDF();
  886. SQ_GET_FLOAT(v, 2, margin);
  887. self->SetTopMargin(margin);
  888. return 0;
  889. }
  890. /* void SetX( pdf_float_t x ) */
  891. static SQRESULT sq_glue_SetX(HSQUIRRELVM v){
  892. SQ_FUNC_VARS_NO_TOP(v);
  893. GET_SQ_FPDF();
  894. SQ_GET_FLOAT(v, 2, x);
  895. self->SetX(x);
  896. return 0;
  897. }
  898. /* void SetXY( pdf_float_t x , pdf_float_t y ) */
  899. static SQRESULT sq_glue_SetXY(HSQUIRRELVM v){
  900. SQ_FUNC_VARS_NO_TOP(v);
  901. GET_SQ_FPDF();
  902. SQ_GET_FLOAT(v, 2, x);
  903. SQ_GET_FLOAT(v, 3, y);
  904. self->SetXY(x, y);
  905. return 0;
  906. }
  907. /* void SetY( pdf_float_t y ) */
  908. static SQRESULT sq_glue_SetY(HSQUIRRELVM v){
  909. SQ_FUNC_VARS_NO_TOP(v);
  910. GET_SQ_FPDF();
  911. SQ_GET_FLOAT(v, 2, y);
  912. self->SetY(y);
  913. return 0;
  914. }
  915. /* void Text( pdf_float_t x , pdf_float_t y , char const * txt ) */
  916. static SQRESULT sq_glue_Text(HSQUIRRELVM v){
  917. SQ_FUNC_VARS_NO_TOP(v);
  918. GET_SQ_FPDF();
  919. SQ_GET_FLOAT(v, 2, x);
  920. SQ_GET_FLOAT(v, 3, y);
  921. SQ_GET_STRING(v, 4, txt);
  922. self->Text(x, y, txt);
  923. return 0;
  924. }
  925. /* void TextShadow( pdf_float_t x , pdf_float_t y , char const * txt , pdf_float_t displacement = .3 ) */
  926. static SQRESULT sq_glue_TextShadow(HSQUIRRELVM v){
  927. SQ_FUNC_VARS(v);
  928. GET_SQ_FPDF();
  929. SQ_GET_FLOAT(v, 2, x);
  930. SQ_GET_FLOAT(v, 3, y);
  931. SQ_GET_STRING(v, 4, txt);
  932. SQ_OPT_FLOAT(v, 5, displacement, .3);
  933. self->TextShadow(x, y, txt, displacement);
  934. return 0;
  935. }
  936. /* void UnsetClipping( ) */
  937. static SQRESULT sq_glue_UnsetClipping(HSQUIRRELVM v){
  938. SQ_FUNC_VARS_NO_TOP(v);
  939. GET_SQ_FPDF();
  940. self->UnsetClipping();
  941. return 0;
  942. }
  943. /* void Write( pdf_float_t h , char const * txt , int link = 0 ) */
  944. static SQRESULT sq_glue_Write(HSQUIRRELVM v){
  945. SQ_FUNC_VARS(v);
  946. GET_SQ_FPDF();
  947. SQ_GET_FLOAT(v, 2, h);
  948. SQ_GET_STRING(v, 3, txt);
  949. SQ_OPT_INTEGER(v, 4, link, 0);
  950. self->Write(h, txt, link);
  951. return 0;
  952. }
  953. /* int getCustomZoom( ) */
  954. static SQRESULT sq_glue_getCustomZoom(HSQUIRRELVM v){
  955. SQ_FUNC_VARS_NO_TOP(v);
  956. GET_SQ_FPDF();
  957. sq_pushinteger(v, self->getCustomZoom());
  958. return 1;
  959. }
  960. /* void reset( FPDF::e_orientation orientation = FPDF::e_orientation_portrait , FPDF::e_units unit = FPDF::e_mm , FPDF::e_page_sizes psize = FPDF::e_A4 ) */
  961. static SQRESULT sq_glue_reset(HSQUIRRELVM v){
  962. SQ_FUNC_VARS(v);
  963. GET_SQ_FPDF();
  964. SQ_OPT_INTEGER(v, 2, orientation, FPDF::e_orientation_portrait);
  965. SQ_OPT_INTEGER(v, 3, unit, FPDF::e_mm);
  966. SQ_OPT_INTEGER(v, 4, psize, FPDF::e_A4);
  967. //self->reset(orientation, unit, psize);
  968. return 0;
  969. }
  970. /* void setCustomZoom( int zoom ) */
  971. static SQRESULT sq_glue_setCustomZoom(HSQUIRRELVM v){
  972. SQ_FUNC_VARS_NO_TOP(v);
  973. GET_SQ_FPDF();
  974. SQ_GET_INTEGER(v, 2, zoom);
  975. self->setCustomZoom(zoom);
  976. return 0;
  977. }
  978. #define _DECL_FUNC(name,nparams,tycheck) {_SC(#name), sq_glue_##name,nparams,tycheck}
  979. static SQRegFunction sq_glue_my_methods[] =
  980. {
  981. _DECL_FUNC(constructor, 1, _SC("x")),
  982. _DECL_FUNC(AcceptPageBreak, 1, _SC("x")),
  983. _DECL_FUNC(AddFont, -2, _SC("xsss")),
  984. _DECL_FUNC(AddLink, 1, _SC("x")),
  985. _DECL_FUNC(AddPage, -1, _SC("xis")),
  986. _DECL_FUNC(AliasNbPages, -1, _SC("xs")),
  987. _DECL_FUNC(CalcLines, 3, _SC("xns")),
  988. _DECL_FUNC(Cell, -2, _SC("xnnssiibi")),
  989. _DECL_FUNC(CellFit, -2, _SC("xnnssiibiii")),
  990. _DECL_FUNC(CellFitScale, -2, _SC("xnnssiibi")),
  991. _DECL_FUNC(CellFitScaleForce, -2, _SC("xnnssiibi")),
  992. _DECL_FUNC(CellFitSpace, -2, _SC("xnnssiibi")),
  993. _DECL_FUNC(CellFitSpaceForce, -2, _SC("xnnssiibi")),
  994. _DECL_FUNC(CheckPageBreak, 2, _SC("xn")),
  995. _DECL_FUNC(Circle, -4, _SC("xnnns")),
  996. _DECL_FUNC(ClippedCell, -2, _SC("xnnssiibi")),
  997. _DECL_FUNC(ClippingRect, -5, _SC("xnnnni")),
  998. _DECL_FUNC(ClippingText, -4, _SC("xnnsi")),
  999. _DECL_FUNC(Close, 1, _SC("x")),
  1000. _DECL_FUNC(Ellipse, -5, _SC("xnnnns")),
  1001. _DECL_FUNC(Error, 2, _SC("xs")),
  1002. _DECL_FUNC(Footer, 1, _SC("x")),
  1003. _DECL_FUNC(GetAliasNbPages, 1, _SC("x")),
  1004. _DECL_FUNC(GetDrawColor, -1, _SC("xt")),
  1005. _DECL_FUNC(GetFillColor, -1, _SC("xt")),
  1006. _DECL_FUNC(GetFontSettings, -1, _SC("xt")),
  1007. _DECL_FUNC(GetFontSize, 1, _SC("x")),
  1008. _DECL_FUNC(GetH, 1, _SC("x")),
  1009. _DECL_FUNC(GetLeftMargin, 1, _SC("x")),
  1010. _DECL_FUNC(GetRightMargin, 1, _SC("x")),
  1011. _DECL_FUNC(GetStringWidth, 2, _SC("xs")),
  1012. _DECL_FUNC(GetTextColor, -1, _SC("xt")),
  1013. _DECL_FUNC(GetW, 1, _SC("x")),
  1014. _DECL_FUNC(GetX, 1, _SC("x")),
  1015. _DECL_FUNC(GetY, 1, _SC("x")),
  1016. _DECL_FUNC(Header, 1, _SC("x")),
  1017. _DECL_FUNC(Image, -2, _SC("xsnnnnsi")),
  1018. _DECL_FUNC(IncludeJS, 2, _SC("xs")),
  1019. _DECL_FUNC(Line, 5, _SC("xnnnn")),
  1020. _DECL_FUNC(Link, 6, _SC("xnnnni")),
  1021. _DECL_FUNC(Ln, -1, _SC("xn")),
  1022. _DECL_FUNC(MultiCell, -4, _SC("xnnssib")),
  1023. _DECL_FUNC(MultiCellBlt, -5, _SC("xnnsssbi")),
  1024. _DECL_FUNC(Open, 1, _SC("x")),
  1025. _DECL_FUNC(Output, -1, _SC("x s|x i")),
  1026. _DECL_FUNC(PageNo, 1, _SC("x")),
  1027. _DECL_FUNC(Rect, -5, _SC("xnnnns")),
  1028. _DECL_FUNC(Rotate, -2, _SC("xnnn")),
  1029. _DECL_FUNC(RotatedText, 5, _SC("xnnsn")),
  1030. _DECL_FUNC(RoundedRect, -6, _SC("xnnnnns")),
  1031. _DECL_FUNC(SetAlpha, -2, _SC("xns")),
  1032. _DECL_FUNC(SetAuthor, 2, _SC("xs")),
  1033. _DECL_FUNC(SetAutoPageBreak, -2, _SC("xin")),
  1034. _DECL_FUNC(SetCompression, 2, _SC("xb")),
  1035. _DECL_FUNC(SetCreator, 2, _SC("xs")),
  1036. _DECL_FUNC(SetDash, -1, _SC("xnn")),
  1037. _DECL_FUNC(SetDisplayMode, -2, _SC("xii")),
  1038. _DECL_FUNC(SetDoubleSided, -1, _SC("xnn")),
  1039. _DECL_FUNC(SetDrawColor, -2, _SC("xiii")),
  1040. _DECL_FUNC(SetFillColor, -2, _SC("x t|i ii")),
  1041. _DECL_FUNC(SetFont, -1, _SC("xssn")),
  1042. _DECL_FUNC(SetFontSettings, 2, _SC("xt")),
  1043. _DECL_FUNC(SetFontSize, 2, _SC("xn")),
  1044. _DECL_FUNC(SetKeywords, 2, _SC("xs")),
  1045. _DECL_FUNC(SetLeftMargin, 2, _SC("xn")),
  1046. _DECL_FUNC(SetLineWidth, 2, _SC("xn")),
  1047. _DECL_FUNC(SetLink, -2, _SC("xini")),
  1048. _DECL_FUNC(SetMargins, -3, _SC("xnnn")),
  1049. _DECL_FUNC(SetRightMargin, 2, _SC("xn")),
  1050. _DECL_FUNC(SetSubject, 2, _SC("xs")),
  1051. _DECL_FUNC(SetTextColor, -2, _SC("xiii")),
  1052. _DECL_FUNC(SetTitle, 2, _SC("xs")),
  1053. _DECL_FUNC(SetTopMargin, 2, _SC("xn")),
  1054. _DECL_FUNC(SetX, 2, _SC("xn")),
  1055. _DECL_FUNC(SetXY, 3, _SC("xnn")),
  1056. _DECL_FUNC(SetY, 2, _SC("xn")),
  1057. _DECL_FUNC(Text, 4, _SC("xnns")),
  1058. _DECL_FUNC(TextShadow, -4, _SC("xnnsn")),
  1059. _DECL_FUNC(UnsetClipping, 1, _SC("x")),
  1060. _DECL_FUNC(Write, -3, _SC("xnsi")),
  1061. _DECL_FUNC(getCustomZoom, 1, _SC("x")),
  1062. _DECL_FUNC(reset, -1, _SC("xiii")),
  1063. _DECL_FUNC(setCustomZoom, 2, _SC("xi")),
  1064. {0,0}
  1065. };
  1066. #ifdef __cplusplus
  1067. extern "C" {
  1068. #endif
  1069. SQRESULT sqext_register_Sq_Fpdf(HSQUIRRELVM v)
  1070. {
  1071. sq_pushstring(v,SQ_FPDF_TAG,-1);
  1072. sq_newclass(v,SQFalse);
  1073. sq_settypetag(v,-1,(void*)SQ_FPDF_TAG);
  1074. sq_insert_reg_funcs(v, sq_glue_my_methods);
  1075. sq_newslot(v,-3,SQTrue);
  1076. return 1;
  1077. }
  1078. #ifdef __cplusplus
  1079. }
  1080. #endif