Diff for /parser3/src/classes/string.C between versions 1.73 and 1.80

version 1.73, 2001/09/05 15:05:27 version 1.80, 2001/10/11 10:21:44
Line 2 Line 2
         Parser: @b string parser class.          Parser: @b string parser class.
   
         Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com)          Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com)
   
         Author: Alexander Petrosyan <paf@design.ru> (http://design.ru/paf)          Author: Alexander Petrosyan <paf@design.ru> (http://design.ru/paf)
   
           $Id$
 */  */
 static const char *RCSId="$Id$";   
   
 #include "classes.h"  #include "classes.h"
 #include "pa_request.h"  #include "pa_request.h"
Line 51  static void _int(Request& r, const Strin Line 51  static void _int(Request& r, const Strin
                         rethrow_me=e;                            rethrow_me=e;  
                         converted=0;                          converted=0;
                 } else                  } else
                         converted=params->as_int(0, r); // (default)                          converted=params->as_int(0, "default must be int", r); // (default)
         }          }
         PEND_CATCH          PEND_CATCH
         if(convert_problem)          if(convert_problem)
Line 76  static void _double(Request& r, const St Line 76  static void _double(Request& r, const St
                         rethrow_me=e;                            rethrow_me=e;  
                         converted=0;                          converted=0;
                 } else                  } else
                         converted=params->as_double(0, r); // (default)                          converted=params->as_double(0, "default must be double", r); // (default)
         }          }
         PEND_CATCH          PEND_CATCH
         if(convert_problem)          if(convert_problem)
Line 107  static void _double(Request& r, const St Line 107  static void _double(Request& r, const St
 static void _left(Request& r, const String&, MethodParams *params) {  static void _left(Request& r, const String&, MethodParams *params) {
         Pool& pool=r.pool();          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<VString *>(r.self)->get_string();          const String& string=*static_cast<VString *>(r.self)->get_string();
         r.write_assign_lang(*new(pool) VString(string.mid(0, n)));          r.write_assign_lang(*new(pool) VString(string.mid(0, n)));
Line 116  static void _left(Request& r, const Stri Line 116  static void _left(Request& r, const Stri
 static void _right(Request& r, const String&, MethodParams *params) {  static void _right(Request& r, const String&, MethodParams *params) {
         Pool& pool=r.pool();          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<VString *>(r.self)->get_string();          const String& string=*static_cast<VString *>(r.self)->get_string();
         r.write_assign_lang(*new(pool) VString(string.mid(string.size()-n, string.size())));          r.write_assign_lang(*new(pool) VString(string.mid(string.size()-n, string.size())));
Line 125  static void _right(Request& r, const Str Line 125  static void _right(Request& r, const Str
 static void _mid(Request& r, const String&, MethodParams *params) {  static void _mid(Request& r, const String&, MethodParams *params) {
         Pool& pool=r.pool();          Pool& pool=r.pool();
   
         size_t p=(size_t)r.process(params->get(0)).as_double();          size_t p=(size_t)params->as_int(0, "p must be int", r);
         size_t n=(size_t)r.process(params->get(1)).as_double();          size_t n=(size_t)params->as_int(1, "n must be int", r);
                   
         const String& string=*static_cast<VString *>(r.self)->get_string();          const String& string=*static_cast<VString *>(r.self)->get_string();
         r.write_assign_lang(*new(pool) VString(string.mid(p, p+n)));          r.write_assign_lang(*new(pool) VString(string.mid(p, p+n)));
Line 196  static void search_action(Table& table, Line 196  static void search_action(Table& table,
                 table+=row;                  table+=row;
 }  }
   
 /// used by string: _match / replace_action  #ifndef DOXYGEN
 struct Replace_action_info {  struct Replace_action_info {
         Request *request;  const String *origin;          Request *request;  const String *origin;
         const String *src;  String *dest;          const String *src;  String *dest;
         Value *replacement_code;          Value *replacement_code;
         const String *post_match;          const String *post_match;
 };  };
   #endif
 static void replace_action(Table& table, Array *row, int start, int finish,   static void replace_action(Table& table, Array *row, int start, int finish, 
                                                            void *info) {                                                             void *info) {
         Replace_action_info& ai=*static_cast<Replace_action_info *>(info);          Replace_action_info& ai=*static_cast<Replace_action_info *>(info);
Line 253  static void _match(Request& r, const Str Line 254  static void _match(Request& r, const Str
         Table *table;          Table *table;
         if(params->size()<3) { // search          if(params->size()<3) { // search
                 bool was_global;                  bool was_global;
                 bool matched=src.match(r.pcre_tables,                  bool matched=src.match(r.pcre_tables(),
                         &method_name,                           &method_name, 
                         regexp.as_string(), options,                          regexp.as_string(), options,
                         &table,                          &table,
Line 275  static void _match(Request& r, const Str Line 276  static void _match(Request& r, const Str
                         &replacement_code,                          &replacement_code,
                         &src                          &src
                 };                  };
                 src.match(r.pcre_tables,                  src.match(r.pcre_tables(),
                         &method_name,                           &method_name, 
                         r.process(regexp).as_string(), options,                          r.process(regexp).as_string(), options,
                         &table,                          &table,
Line 291  static void change_case(Request& r, cons Line 292  static void change_case(Request& r, cons
         Pool& pool=r.pool();          Pool& pool=r.pool();
         const String& src=*static_cast<VString *>(r.self)->get_string();          const String& src=*static_cast<VString *>(r.self)->get_string();
   
         r.write_assign_lang(*new(pool) VString(src.change_case(pool, r.pcre_tables,          r.write_assign_lang(*new(pool) VString(src.change_case(pool, r.pcre_tables(),
                 kind)));                  kind)));
 }  }
 static void _upper(Request& r, const String& method_name, MethodParams *params) {  static void _upper(Request& r, const String& method_name, MethodParams *params) {
Line 409  static void _sql(Request& r, const Strin Line 410  static void _sql(Request& r, const Strin
                                                 "default option must be code");                                                  "default option must be code");
                                 string=r.process(*vdefault).get_string();                                  string=r.process(*vdefault).get_string();
                                 if(!string)                                  if(!string)
                                         string=empty_string;                                          string=new(pool) String(pool);
                         } else                          } else
                                 PTHROW(0, 0,                                  PTHROW(0, 0,
                                         &method_name,                                          &method_name,
Line 437  static void _replace(Request& r, const S Line 438  static void _replace(Request& r, const S
         Dictionary dict(*table);          Dictionary dict(*table);
         r.write_assign_lang(*new(pool) VString(src.replace(pool, dict)));          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<VString *>(r.self)->get_string();
   
           // write
           file_write(pool, r.absolute(vfile_name.as_string()), 
                   src.cstr(String::UL_AS_IS), src.size(), true);
   }
   
 // constructor  // constructor
   
 MString::MString(Pool& apool) : Methoded(apool) {  MString::MString(Pool& apool) : Methoded(apool) {
Line 486  MString::MString(Pool& apool) : Methoded Line 500  MString::MString(Pool& apool) : Methoded
   
         // ^string.replace[table]          // ^string.replace[table]
         add_native_method("replace", Method::CT_DYNAMIC, _replace, 1, 1);          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  // global variable

Removed from v.1.73  
changed lines
  Added in v.1.80


E-mail: