--- parser3/src/classes/string.C 2001/10/08 16:42:06 1.77 +++ parser3/src/classes/string.C 2001/10/09 13:23:25 1.79 @@ -4,7 +4,7 @@ Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com) Author: Alexander Petrosyan (http://design.ru/paf) - $Id: string.C,v 1.77 2001/10/08 16:42:06 parser Exp $ + $Id: string.C,v 1.79 2001/10/09 13:23:25 parser Exp $ */ #include "classes.h" @@ -107,7 +107,7 @@ static void _double(Request& r, const St static void _left(Request& r, const String&, MethodParams *params) { Pool& pool=r.pool(); - size_t n=(size_t)r.process(params->get(0)).as_double(); + size_t n=(size_t)params->as_int(0, "n must be int", r); const String& string=*static_cast(r.self)->get_string(); r.write_assign_lang(*new(pool) VString(string.mid(0, n))); @@ -116,7 +116,7 @@ static void _left(Request& r, const Stri static void _right(Request& r, const String&, MethodParams *params) { Pool& pool=r.pool(); - size_t n=(size_t)r.process(params->get(0)).as_double(); + size_t n=(size_t)params->as_int(0, "n must be int", r); const String& string=*static_cast(r.self)->get_string(); r.write_assign_lang(*new(pool) VString(string.mid(string.size()-n, string.size()))); @@ -125,8 +125,8 @@ static void _right(Request& r, const Str static void _mid(Request& r, const String&, MethodParams *params) { Pool& pool=r.pool(); - size_t p=(size_t)r.process(params->get(0)).as_double(); - size_t n=(size_t)r.process(params->get(1)).as_double(); + size_t p=(size_t)params->as_int(0, "p must be int", r); + size_t n=(size_t)params->as_int(1, "n must be int", r); const String& string=*static_cast(r.self)->get_string(); r.write_assign_lang(*new(pool) VString(string.mid(p, p+n))); @@ -438,6 +438,19 @@ static void _replace(Request& r, const S Dictionary dict(*table); r.write_assign_lang(*new(pool) VString(src.replace(pool, dict))); } + +static void _save(Request& r, const String& method_name, MethodParams *params) { + Pool& pool=r.pool(); + Value& vfile_name=params->as_no_junction(0, + "file name must not be code"); + + const String& src=*static_cast(r.self)->get_string(); + + // write + file_write(pool, r.absolute(vfile_name.as_string()), + src.cstr(String::UL_AS_IS), src.size(), true); +} + // constructor MString::MString(Pool& apool) : Methoded(apool) { @@ -487,6 +500,9 @@ MString::MString(Pool& apool) : Methoded // ^string.replace[table] add_native_method("replace", Method::CT_DYNAMIC, _replace, 1, 1); + + // ^string.save[file] + add_native_method("save", Method::CT_DYNAMIC, _save, 1, 1); } // global variable