Quellcode durchsuchen

Implement some missing methods, fix parameters from int to bool to make it more natural on coding.

mingodad vor 13 Jahren
Ursprung
Commit
6107d99874
1 geänderte Dateien mit 212 neuen und 66 gelöschten Zeilen
  1. 212 66
      ext/sq_fpdf.cpp

+ 212 - 66
ext/sq_fpdf.cpp

@@ -130,9 +130,9 @@ static SQRESULT sq_glue_Cell(HSQUIRRELVM v){
 	SQ_OPT_STRING(v, 5, border, 0);
 	SQ_OPT_STRING(v, 5, border, 0);
 	SQ_OPT_INTEGER(v, 6, ln, 0);
 	SQ_OPT_INTEGER(v, 6, ln, 0);
 	SQ_OPT_INTEGER(v, 7, align, ' ');
 	SQ_OPT_INTEGER(v, 7, align, ' ');
-	SQ_OPT_INTEGER(v, 8, fill, false);
+	SQ_OPT_BOOL(v, 8, fill, false);
 	SQ_OPT_INTEGER(v, 9, link, 0);
 	SQ_OPT_INTEGER(v, 9, link, 0);
-	self->Cell(w, h, txt, border, ln, align, fill, link);
+	self->Cell(w, h, txt, border, ln, align, fill ? 1 : 0, link);
 	return 0;
 	return 0;
 }
 }
 
 
@@ -146,11 +146,11 @@ static SQRESULT sq_glue_CellFit(HSQUIRRELVM v){
 	SQ_OPT_STRING(v, 5, border, 0);
 	SQ_OPT_STRING(v, 5, border, 0);
 	SQ_OPT_INTEGER(v, 6, ln, 0);
 	SQ_OPT_INTEGER(v, 6, ln, 0);
 	SQ_OPT_INTEGER(v, 7, align, ' ');
 	SQ_OPT_INTEGER(v, 7, align, ' ');
-	SQ_OPT_INTEGER(v, 8, fill, false);
+	SQ_OPT_BOOL(v, 8, fill, false);
 	SQ_OPT_INTEGER(v, 9, link, 0);
 	SQ_OPT_INTEGER(v, 9, link, 0);
 	SQ_OPT_INTEGER(v, 10, scale, false);
 	SQ_OPT_INTEGER(v, 10, scale, false);
 	SQ_OPT_INTEGER(v, 11, force, true);
 	SQ_OPT_INTEGER(v, 11, force, true);
-	self->CellFit(w, h, txt, border, ln, align, fill, link, scale, force);
+	self->CellFit(w, h, txt, border, ln, align, fill ? 1 : 0, link, scale, force);
 	return 0;
 	return 0;
 }
 }
 
 
@@ -164,9 +164,9 @@ static SQRESULT sq_glue_CellFitScale(HSQUIRRELVM v){
 	SQ_OPT_STRING(v, 5, border, 0);
 	SQ_OPT_STRING(v, 5, border, 0);
 	SQ_OPT_INTEGER(v, 6, ln, 0);
 	SQ_OPT_INTEGER(v, 6, ln, 0);
 	SQ_OPT_INTEGER(v, 7, align, ' ');
 	SQ_OPT_INTEGER(v, 7, align, ' ');
-	SQ_OPT_INTEGER(v, 8, fill, false);
+	SQ_OPT_BOOL(v, 8, fill, false);
 	SQ_OPT_INTEGER(v, 9, link, 0);
 	SQ_OPT_INTEGER(v, 9, link, 0);
-	self->CellFitScale(w, h, txt, border, ln, align, fill, link);
+	self->CellFitScale(w, h, txt, border, ln, align, fill ? 1 : 0, link);
 	return 0;
 	return 0;
 }
 }
 
 
@@ -180,9 +180,9 @@ static SQRESULT sq_glue_CellFitScaleForce(HSQUIRRELVM v){
 	SQ_OPT_STRING(v, 5, border, 0);
 	SQ_OPT_STRING(v, 5, border, 0);
 	SQ_OPT_INTEGER(v, 6, ln, 0);
 	SQ_OPT_INTEGER(v, 6, ln, 0);
 	SQ_OPT_INTEGER(v, 7, align, ' ');
 	SQ_OPT_INTEGER(v, 7, align, ' ');
-	SQ_OPT_INTEGER(v, 8, fill, false);
+	SQ_OPT_BOOL(v, 8, fill, false);
 	SQ_OPT_INTEGER(v, 9, link, 0);
 	SQ_OPT_INTEGER(v, 9, link, 0);
-	self->CellFitScaleForce(w, h, txt, border, ln, align, fill, link);
+	self->CellFitScaleForce(w, h, txt, border, ln, align, fill ? 1 : 0, link);
 	return 0;
 	return 0;
 }
 }
 
 
@@ -196,9 +196,9 @@ static SQRESULT sq_glue_CellFitSpace(HSQUIRRELVM v){
 	SQ_OPT_STRING(v, 5, border, 0);
 	SQ_OPT_STRING(v, 5, border, 0);
 	SQ_OPT_INTEGER(v, 6, ln, 0);
 	SQ_OPT_INTEGER(v, 6, ln, 0);
 	SQ_OPT_INTEGER(v, 7, align, ' ');
 	SQ_OPT_INTEGER(v, 7, align, ' ');
-	SQ_OPT_INTEGER(v, 8, fill, false);
+	SQ_OPT_BOOL(v, 8, fill, false);
 	SQ_OPT_INTEGER(v, 9, link, 0);
 	SQ_OPT_INTEGER(v, 9, link, 0);
-	self->CellFitSpace(w, h, txt, border, ln, align, fill, link);
+	self->CellFitSpace(w, h, txt, border, ln, align, fill ? 1 : 0, link);
 	return 0;
 	return 0;
 }
 }
 
 
@@ -212,9 +212,9 @@ static SQRESULT sq_glue_CellFitSpaceForce(HSQUIRRELVM v){
 	SQ_OPT_STRING(v, 5, border, 0);
 	SQ_OPT_STRING(v, 5, border, 0);
 	SQ_OPT_INTEGER(v, 6, ln, 0);
 	SQ_OPT_INTEGER(v, 6, ln, 0);
 	SQ_OPT_INTEGER(v, 7, align, ' ');
 	SQ_OPT_INTEGER(v, 7, align, ' ');
-	SQ_OPT_INTEGER(v, 8, fill, false);
+	SQ_OPT_BOOL(v, 8, fill, false);
 	SQ_OPT_INTEGER(v, 9, link, 0);
 	SQ_OPT_INTEGER(v, 9, link, 0);
-	self->CellFitSpaceForce(w, h, txt, border, ln, align, fill, link);
+	self->CellFitSpaceForce(w, h, txt, border, ln, align, fill ? 1 : 0, link);
 	return 0;
 	return 0;
 }
 }
 
 
@@ -249,9 +249,9 @@ static SQRESULT sq_glue_ClippedCell(HSQUIRRELVM v){
 	SQ_OPT_STRING(v, 5, border, 0);
 	SQ_OPT_STRING(v, 5, border, 0);
 	SQ_OPT_INTEGER(v, 6, ln, 0);
 	SQ_OPT_INTEGER(v, 6, ln, 0);
 	SQ_OPT_INTEGER(v, 7, align, ' ');
 	SQ_OPT_INTEGER(v, 7, align, ' ');
-	SQ_OPT_INTEGER(v, 8, fill, false);
+	SQ_OPT_BOOL(v, 8, fill, false);
 	SQ_OPT_INTEGER(v, 9, link, 0);
 	SQ_OPT_INTEGER(v, 9, link, 0);
-	self->ClippedCell(w, h, txt, border, ln, align, fill, link);
+	self->ClippedCell(w, h, txt, border, ln, align, fill ? 1 : 0, link);
 	return 0;
 	return 0;
 }
 }
 
 
@@ -327,31 +327,73 @@ static SQRESULT sq_glue_GetAliasNbPages(HSQUIRRELVM v){
 	return 1;
 	return 1;
 }
 }
 
 
+static void push_pdf_color(HSQUIRRELVM v, FPDF::pdf_color_t &color){
+	if(sq_gettop(v) >= 2 && sq_gettype(v, 2) == OT_TABLE){
+	    sq_settop(v, 2);
+	}
+	else sq_newtable(v);
+
+	sq_pushliteral(v, _SC("r"));
+	sq_pushinteger(v, color.r);
+	sq_rawset(v, -3);
+
+	sq_pushliteral(v, _SC("g"));
+	sq_pushinteger(v, color.g);
+	sq_rawset(v, -3);
+
+	sq_pushliteral(v, _SC("b"));
+	sq_pushinteger(v, color.b);
+	sq_rawset(v, -3);
+
+	sq_pushliteral(v, _SC("t"));
+	sq_pushinteger(v, color.t);
+	sq_rawset(v, -3);
+}
+
 /* void GetDrawColor( FPDF::pdf_color_t & color ) */
 /* void GetDrawColor( FPDF::pdf_color_t & color ) */
 static SQRESULT sq_glue_GetDrawColor(HSQUIRRELVM v){
 static SQRESULT sq_glue_GetDrawColor(HSQUIRRELVM v){
 	SQ_FUNC_VARS_NO_TOP(v);
 	SQ_FUNC_VARS_NO_TOP(v);
 	GET_SQ_FPDF();
 	GET_SQ_FPDF();
-	SQ_GET_INTEGER(v, 2, color);
-	//self->GetDrawColor(color);
-	return 0;
+	FPDF::pdf_color_t color;
+	self->GetDrawColor(color);
+    push_pdf_color(v, color);
+	return 1;
 }
 }
 
 
 /* void GetFillColor( FPDF::pdf_color_t & color ) */
 /* void GetFillColor( FPDF::pdf_color_t & color ) */
 static SQRESULT sq_glue_GetFillColor(HSQUIRRELVM v){
 static SQRESULT sq_glue_GetFillColor(HSQUIRRELVM v){
 	SQ_FUNC_VARS_NO_TOP(v);
 	SQ_FUNC_VARS_NO_TOP(v);
 	GET_SQ_FPDF();
 	GET_SQ_FPDF();
-	SQ_GET_INTEGER(v, 2, color);
-	//self->GetFillColor(color);
-	return 0;
+	FPDF::pdf_color_t color;
+	self->GetFillColor(color);
+    push_pdf_color(v, color);
+	return 1;
 }
 }
 
 
 /* void GetFontSettings( font_settings_st & fs ) */
 /* void GetFontSettings( font_settings_st & fs ) */
 static SQRESULT sq_glue_GetFontSettings(HSQUIRRELVM v){
 static SQRESULT sq_glue_GetFontSettings(HSQUIRRELVM v){
-	SQ_FUNC_VARS_NO_TOP(v);
+	SQ_FUNC_VARS(v);
 	GET_SQ_FPDF();
 	GET_SQ_FPDF();
-	SQ_GET_INTEGER(v, 2, fs);
-	//self->GetFontSettings(fs);
-	return 0;
+	FPDF::font_settings_st fs;
+	self->GetFontSettings(fs);
+	if(_top_ >= 2 && sq_gettype(v, 2) == OT_TABLE){
+	    sq_settop(v, 2);
+	}
+	else sq_newtable(v);
+
+	sq_pushliteral(v, _SC("family"));
+	sq_pushstring(v, fs.family.c_str(), fs.family.size());
+	sq_rawset(v, -3);
+
+	sq_pushliteral(v, _SC("style"));
+	sq_pushstring(v, fs.style.c_str(), fs.style.size());
+	sq_rawset(v, -3);
+
+	sq_pushliteral(v, _SC("size"));
+	sq_pushfloat(v, fs.size);
+	sq_rawset(v, -3);
+
+	return 1;
 }
 }
 
 
 /* pdf_float_t GetFontSize(  ) */
 /* pdf_float_t GetFontSize(  ) */
@@ -399,9 +441,10 @@ static SQRESULT sq_glue_GetStringWidth(HSQUIRRELVM v){
 static SQRESULT sq_glue_GetTextColor(HSQUIRRELVM v){
 static SQRESULT sq_glue_GetTextColor(HSQUIRRELVM v){
 	SQ_FUNC_VARS_NO_TOP(v);
 	SQ_FUNC_VARS_NO_TOP(v);
 	GET_SQ_FPDF();
 	GET_SQ_FPDF();
-	SQ_GET_INTEGER(v, 2, color);
-	//self->GetTextColor(color);
-	return 0;
+	FPDF::pdf_color_t color;
+	self->GetTextColor(color);
+    push_pdf_color(v, color);
+	return 1;
 }
 }
 
 
 /* pdf_float_t GetW(  ) */
 /* pdf_float_t GetW(  ) */
@@ -503,8 +546,8 @@ static SQRESULT sq_glue_MultiCell(HSQUIRRELVM v){
 	SQ_GET_STRING(v, 4, txt);
 	SQ_GET_STRING(v, 4, txt);
 	SQ_OPT_STRING(v, 5, border, 0);
 	SQ_OPT_STRING(v, 5, border, 0);
 	SQ_OPT_INTEGER(v, 6, align, 'J');
 	SQ_OPT_INTEGER(v, 6, align, 'J');
-	SQ_OPT_INTEGER(v, 7, fill, false);
-	self->MultiCell(w, h, txt, border, align, fill);
+	SQ_OPT_BOOL(v, 7, fill, false);
+	self->MultiCell(w, h, txt, border, align, fill ? 1 : 0);
 	return 0;
 	return 0;
 }
 }
 
 
@@ -518,8 +561,8 @@ static SQRESULT sq_glue_MultiCellBlt(HSQUIRRELVM v){
 	SQ_GET_STRING(v, 5, txt);
 	SQ_GET_STRING(v, 5, txt);
 	SQ_OPT_STRING(v, 6, border, 0);
 	SQ_OPT_STRING(v, 6, border, 0);
 	SQ_OPT_INTEGER(v, 7, align, 'J');
 	SQ_OPT_INTEGER(v, 7, align, 'J');
-	SQ_OPT_INTEGER(v, 8, fill, false);
-	self->MultiCellBlt(w, h, blt, txt, border, align, fill);
+	SQ_OPT_BOOL(v, 8, fill, false);
+	self->MultiCellBlt(w, h, blt, txt, border, align, fill ? 1 : 0);
 	return 0;
 	return 0;
 }
 }
 
 
@@ -677,25 +720,89 @@ static SQRESULT sq_glue_SetDoubleSided(HSQUIRRELVM v){
 	return 0;
 	return 0;
 }
 }
 
 
+static SQRESULT get_pdfcolor_from_table(HSQUIRRELVM v, FPDF::pdf_color_t &color){
+	if(sq_gettop(v) == 2){
+	    if(sq_gettype(v, 2) == OT_TABLE){
+	        SQInteger icolor;
+	        sq_pushliteral(v, _SC("r"));
+	        if(sq_rawget(v, 2) != SQ_OK) return SQ_ERROR;
+            sq_getinteger(v, -1, &icolor);
+            sq_poptop(v);
+            color.r = icolor;
+
+	        sq_pushliteral(v, _SC("g"));
+	        if(sq_rawget(v, 2) != SQ_OK) return SQ_ERROR;
+            sq_getinteger(v, -1, &icolor);
+            sq_poptop(v);
+            color.g = icolor;
+
+	        sq_pushliteral(v, _SC("b"));
+	        if(sq_rawget(v, 2) != SQ_OK) return SQ_ERROR;
+            sq_getinteger(v, -1, &icolor);
+            sq_poptop(v);
+            color.b = icolor;
+
+	        sq_pushliteral(v, _SC("t"));
+	        if(sq_rawget(v, 2) != SQ_OK) return SQ_ERROR;
+            sq_getinteger(v, -1, &icolor);
+            sq_poptop(v);
+            color.t = icolor;
+
+	        return SQ_OK;
+	    }
+	}
+	return SQ_ERROR;
+}
+
 /* void SetDrawColor( unsigned char r , unsigned char g , unsigned char b ) */
 /* void SetDrawColor( unsigned char r , unsigned char g , unsigned char b ) */
 static SQRESULT sq_glue_SetDrawColor(HSQUIRRELVM v){
 static SQRESULT sq_glue_SetDrawColor(HSQUIRRELVM v){
-	SQ_FUNC_VARS_NO_TOP(v);
+	SQ_FUNC_VARS(v);
 	GET_SQ_FPDF();
 	GET_SQ_FPDF();
-	SQ_GET_INTEGER(v, 2, r);
-	SQ_GET_INTEGER(v, 3, g);
-	SQ_GET_INTEGER(v, 4, b);
-	self->SetDrawColor(r, g, b);
+	if(_top_ == 2){
+	    FPDF::pdf_color_t color;
+	    if(get_pdfcolor_from_table(v, color) == SQ_OK){
+	        self->SetDrawColor(color);
+	    }
+	    else if(sq_gettype(v, 2) == OT_INTEGER){
+	        SQInteger icolor;
+	        sq_getinteger(v, 2, &icolor);
+	        self->SetDrawColor(icolor);
+	    }
+	    else return SQ_ERROR;
+	}
+	else
+	{
+        SQ_GET_INTEGER(v, 2, r);
+        SQ_GET_INTEGER(v, 3, g);
+        SQ_GET_INTEGER(v, 4, b);
+        self->SetDrawColor(r, g, b);
+	}
 	return 0;
 	return 0;
 }
 }
 
 
 /* void SetFillColor( unsigned char r , unsigned char g , unsigned char b ) */
 /* void SetFillColor( unsigned char r , unsigned char g , unsigned char b ) */
 static SQRESULT sq_glue_SetFillColor(HSQUIRRELVM v){
 static SQRESULT sq_glue_SetFillColor(HSQUIRRELVM v){
-	SQ_FUNC_VARS_NO_TOP(v);
+	SQ_FUNC_VARS(v);
 	GET_SQ_FPDF();
 	GET_SQ_FPDF();
-	SQ_GET_INTEGER(v, 2, r);
-	SQ_GET_INTEGER(v, 3, g);
-	SQ_GET_INTEGER(v, 4, b);
-	self->SetFillColor(r, g, b);
+	if(_top_ == 2){
+	    FPDF::pdf_color_t color;
+	    if(get_pdfcolor_from_table(v, color) == SQ_OK){
+	        self->SetFillColor(color);
+	    }
+	    else if(sq_gettype(v, 2) == OT_INTEGER){
+	        SQInteger icolor;
+	        sq_getinteger(v, 2, &icolor);
+	        self->SetFillColor(icolor);
+	    }
+	    else return SQ_ERROR;
+	}
+	else
+	{
+        SQ_GET_INTEGER(v, 2, r);
+        SQ_GET_INTEGER(v, 3, g);
+        SQ_GET_INTEGER(v, 4, b);
+        self->SetFillColor(r, g, b);
+	}
 	return 0;
 	return 0;
 }
 }
 
 
@@ -712,11 +819,36 @@ static SQRESULT sq_glue_SetFont(HSQUIRRELVM v){
 
 
 /* void SetFontSettings( font_settings_st & fs ) */
 /* void SetFontSettings( font_settings_st & fs ) */
 static SQRESULT sq_glue_SetFontSettings(HSQUIRRELVM v){
 static SQRESULT sq_glue_SetFontSettings(HSQUIRRELVM v){
-	SQ_FUNC_VARS_NO_TOP(v);
+	SQ_FUNC_VARS(v);
 	GET_SQ_FPDF();
 	GET_SQ_FPDF();
-	SQ_GET_INTEGER(v, 2, fs);
-	//self->SetFontSettings(fs);
-	return 0;
+	if(_top_ == 2){
+	    if(sq_gettype(v, 2) == OT_TABLE){
+	        const SQChar *str;
+	        SQFloat num;
+	        FPDF::font_settings_st fs;
+
+	        sq_pushliteral(v, _SC("family"));
+	        if(sq_rawget(v, 2) != SQ_OK) return SQ_ERROR;
+            sq_getstring(v, -1, &str);
+            sq_poptop(v);
+            fs.family = str;
+
+	        sq_pushliteral(v, _SC("style"));
+	        if(sq_rawget(v, 2) != SQ_OK) return SQ_ERROR;
+            sq_getstring(v, -1, &str);
+            sq_poptop(v);
+            fs.style = str;
+
+	        sq_pushliteral(v, _SC("size"));
+	        if(sq_rawget(v, 2) != SQ_OK) return SQ_ERROR;
+            sq_getfloat(v, -1, &num);
+            sq_poptop(v);
+            fs.size = num;
+            self->SetFontSettings(fs);
+	        return 0;
+	    }
+	}
+	return SQ_ERROR;
 }
 }
 
 
 /* void SetFontSize( pdf_float_t size ) */
 /* void SetFontSize( pdf_float_t size ) */
@@ -797,12 +929,27 @@ static SQRESULT sq_glue_SetSubject(HSQUIRRELVM v){
 
 
 /* void SetTextColor( unsigned char r , unsigned char g , unsigned char b ) */
 /* void SetTextColor( unsigned char r , unsigned char g , unsigned char b ) */
 static SQRESULT sq_glue_SetTextColor(HSQUIRRELVM v){
 static SQRESULT sq_glue_SetTextColor(HSQUIRRELVM v){
-	SQ_FUNC_VARS_NO_TOP(v);
+	SQ_FUNC_VARS(v);
 	GET_SQ_FPDF();
 	GET_SQ_FPDF();
-	SQ_GET_INTEGER(v, 2, r);
-	SQ_GET_INTEGER(v, 3, g);
-	SQ_GET_INTEGER(v, 4, b);
-	self->SetTextColor(r, g, b);
+	if(_top_ == 2){
+	    FPDF::pdf_color_t color;
+	    if(get_pdfcolor_from_table(v, color) == SQ_OK){
+	        self->SetTextColor(color);
+	    }
+	    else if(sq_gettype(v, 2) == OT_INTEGER){
+	        SQInteger icolor;
+	        sq_getinteger(v, 2, &icolor);
+	        self->SetTextColor(icolor);
+	    }
+	    else return SQ_ERROR;
+	}
+	else
+	{
+        SQ_GET_INTEGER(v, 2, r);
+        SQ_GET_INTEGER(v, 3, g);
+        SQ_GET_INTEGER(v, 4, b);
+        self->SetTextColor(r, g, b);
+	}
 	return 0;
 	return 0;
 }
 }
 
 
@@ -932,15 +1079,15 @@ static SQRegFunction sq_glue_my_methods[] =
 	_DECL_FUNC(AddPage,  -1, _SC("xis")),
 	_DECL_FUNC(AddPage,  -1, _SC("xis")),
 	_DECL_FUNC(AliasNbPages,  -1, _SC("xs")),
 	_DECL_FUNC(AliasNbPages,  -1, _SC("xs")),
 	_DECL_FUNC(CalcLines,  3, _SC("xns")),
 	_DECL_FUNC(CalcLines,  3, _SC("xns")),
-	_DECL_FUNC(Cell,  -2, _SC("xnnssiiii")),
-	_DECL_FUNC(CellFit,  -2, _SC("xnnssiiiiii")),
-	_DECL_FUNC(CellFitScale,  -2, _SC("xnnssiiii")),
-	_DECL_FUNC(CellFitScaleForce,  -2, _SC("xnnssiiii")),
-	_DECL_FUNC(CellFitSpace,  -2, _SC("xnnssiiii")),
-	_DECL_FUNC(CellFitSpaceForce,  -2, _SC("xnnssiiii")),
+	_DECL_FUNC(Cell,  -2, _SC("xnnssiibi")),
+	_DECL_FUNC(CellFit,  -2, _SC("xnnssiibiii")),
+	_DECL_FUNC(CellFitScale,  -2, _SC("xnnssiibi")),
+	_DECL_FUNC(CellFitScaleForce,  -2, _SC("xnnssiibi")),
+	_DECL_FUNC(CellFitSpace,  -2, _SC("xnnssiibi")),
+	_DECL_FUNC(CellFitSpaceForce,  -2, _SC("xnnssiibi")),
 	_DECL_FUNC(CheckPageBreak,  2, _SC("xn")),
 	_DECL_FUNC(CheckPageBreak,  2, _SC("xn")),
 	_DECL_FUNC(Circle,  -4, _SC("xnnns")),
 	_DECL_FUNC(Circle,  -4, _SC("xnnns")),
-	_DECL_FUNC(ClippedCell,  -2, _SC("xnnssiiii")),
+	_DECL_FUNC(ClippedCell,  -2, _SC("xnnssiibi")),
 	_DECL_FUNC(ClippingRect,  -5, _SC("xnnnni")),
 	_DECL_FUNC(ClippingRect,  -5, _SC("xnnnni")),
 	_DECL_FUNC(ClippingText,  -4, _SC("xnnsi")),
 	_DECL_FUNC(ClippingText,  -4, _SC("xnnsi")),
 	_DECL_FUNC(Close,  1, _SC("x")),
 	_DECL_FUNC(Close,  1, _SC("x")),
@@ -948,16 +1095,15 @@ static SQRegFunction sq_glue_my_methods[] =
 	_DECL_FUNC(Error,  2, _SC("xs")),
 	_DECL_FUNC(Error,  2, _SC("xs")),
 	_DECL_FUNC(Footer,  1, _SC("x")),
 	_DECL_FUNC(Footer,  1, _SC("x")),
 	_DECL_FUNC(GetAliasNbPages,  1, _SC("x")),
 	_DECL_FUNC(GetAliasNbPages,  1, _SC("x")),
-	_DECL_FUNC(GetDrawColor,  2, _SC("xi")),
-	_DECL_FUNC(GetFillColor,  2, _SC("xi")),
-	_DECL_FUNC(GetFontSettings,  2, _SC("xi")),
+	_DECL_FUNC(GetDrawColor,  -1, _SC("xt")),
+	_DECL_FUNC(GetFillColor,  -1, _SC("xt")),
+	_DECL_FUNC(GetFontSettings,  -1, _SC("xt")),
 	_DECL_FUNC(GetFontSize,  1, _SC("x")),
 	_DECL_FUNC(GetFontSize,  1, _SC("x")),
 	_DECL_FUNC(GetH,  1, _SC("x")),
 	_DECL_FUNC(GetH,  1, _SC("x")),
 	_DECL_FUNC(GetLeftMargin,  1, _SC("x")),
 	_DECL_FUNC(GetLeftMargin,  1, _SC("x")),
 	_DECL_FUNC(GetRightMargin,  1, _SC("x")),
 	_DECL_FUNC(GetRightMargin,  1, _SC("x")),
 	_DECL_FUNC(GetStringWidth,  2, _SC("xs")),
 	_DECL_FUNC(GetStringWidth,  2, _SC("xs")),
-	_DECL_FUNC(GetStringWidth,  2, _SC("xi")),
-	_DECL_FUNC(GetTextColor,  2, _SC("xi")),
+	_DECL_FUNC(GetTextColor,  -1, _SC("xt")),
 	_DECL_FUNC(GetW,  1, _SC("x")),
 	_DECL_FUNC(GetW,  1, _SC("x")),
 	_DECL_FUNC(GetX,  1, _SC("x")),
 	_DECL_FUNC(GetX,  1, _SC("x")),
 	_DECL_FUNC(GetY,  1, _SC("x")),
 	_DECL_FUNC(GetY,  1, _SC("x")),
@@ -967,8 +1113,8 @@ static SQRegFunction sq_glue_my_methods[] =
 	_DECL_FUNC(Line,  5, _SC("xnnnn")),
 	_DECL_FUNC(Line,  5, _SC("xnnnn")),
 	_DECL_FUNC(Link,  6, _SC("xnnnni")),
 	_DECL_FUNC(Link,  6, _SC("xnnnni")),
 	_DECL_FUNC(Ln,  -1, _SC("xn")),
 	_DECL_FUNC(Ln,  -1, _SC("xn")),
-	_DECL_FUNC(MultiCell,  -4, _SC("xnnssii")),
-	_DECL_FUNC(MultiCellBlt,  -5, _SC("xnnsssii")),
+	_DECL_FUNC(MultiCell,  -4, _SC("xnnssib")),
+	_DECL_FUNC(MultiCellBlt,  -5, _SC("xnnsssbi")),
 	_DECL_FUNC(Open,  1, _SC("x")),
 	_DECL_FUNC(Open,  1, _SC("x")),
 	_DECL_FUNC(Output,  -1, _SC("xsi")),
 	_DECL_FUNC(Output,  -1, _SC("xsi")),
 	_DECL_FUNC(PageNo,  1, _SC("x")),
 	_DECL_FUNC(PageNo,  1, _SC("x")),
@@ -985,9 +1131,9 @@ static SQRegFunction sq_glue_my_methods[] =
 	_DECL_FUNC(SetDisplayMode,  -2, _SC("xii")),
 	_DECL_FUNC(SetDisplayMode,  -2, _SC("xii")),
 	_DECL_FUNC(SetDoubleSided,  -1, _SC("xnn")),
 	_DECL_FUNC(SetDoubleSided,  -1, _SC("xnn")),
 	_DECL_FUNC(SetDrawColor,  -2, _SC("xiii")),
 	_DECL_FUNC(SetDrawColor,  -2, _SC("xiii")),
-	_DECL_FUNC(SetFillColor,  -2, _SC("xiii")),
+	_DECL_FUNC(SetFillColor,  -2, _SC("x t|i ii")),
 	_DECL_FUNC(SetFont,  -1, _SC("xssn")),
 	_DECL_FUNC(SetFont,  -1, _SC("xssn")),
-	_DECL_FUNC(SetFontSettings,  2, _SC("xi")),
+	_DECL_FUNC(SetFontSettings,  2, _SC("xt")),
 	_DECL_FUNC(SetFontSize,  2, _SC("xn")),
 	_DECL_FUNC(SetFontSize,  2, _SC("xn")),
 	_DECL_FUNC(SetKeywords,  2, _SC("xs")),
 	_DECL_FUNC(SetKeywords,  2, _SC("xs")),
 	_DECL_FUNC(SetLeftMargin,  2, _SC("xn")),
 	_DECL_FUNC(SetLeftMargin,  2, _SC("xn")),