--- parser3/src/classes/image.C 2001/09/24 14:34:25 1.45 +++ parser3/src/classes/image.C 2001/10/04 14:56:29 1.47 @@ -2,10 +2,10 @@ Parser: @b image parser class. Copyright(c) 2001 ArtLebedev Group(http://www.artlebedev.com) - Author: Alexander Petrosyan (http://design.ru/paf) + + $Id: image.C,v 1.47 2001/10/04 14:56:29 parser Exp $ */ -static const char *RCSId="$Id: image.C,v 1.45 2001/09/24 14:34:25 parser Exp $"; /* jpegsize: gets the width and height (in pixels) of a jpeg file @@ -612,14 +612,14 @@ public: } /* ******************************** string ********************************** */ - /* - int string_width(const char *cstr){ + + int string_width(const String& s){ + const char *cstr=s.cstr(String::UL_AS_IS); int result=0; for(; *cstr; cstr++) result+=index_width(index_of(*cstr)); return result; } - */ void string_display(gdImage& image, int x, int y, const String& s){ const char *cstr=s.cstr(String::UL_AS_IS); @@ -679,6 +679,27 @@ static void _text(Request& r, const Stri "does not contain an image"); } +static void _length(Request& r, const String& method_name, MethodParams *params) { + Pool& pool=r.pool(); + + const String& s=params->as_string(0, "text must not be code"); + + VImage& vimage=*static_cast(r.self); + if(vimage.image) + if(vimage.font) { + VInt& result=*new(pool) VInt(pool, vimage.font->string_width(s)); + result.set_name(method_name); + r.write_assign_lang(result); + } else + PTHROW(0, 0, + &method_name, + "set the font first"); + else + PTHROW(0, 0, + &method_name, + "does not contain an image"); +} + // constructor MImage::MImage(Pool& apool) : Methoded(apool) { @@ -733,6 +754,9 @@ MImage::MImage(Pool& apool) : Methoded(a // ^image.text(x;y)[text] add_native_method("text", Method::CT_DYNAMIC, _text, 3, 3); + // ^image.ngth[text] + add_native_method("length", Method::CT_DYNAMIC, _length, 1, 1); + } // global variable