--- parser3/src/classes/table.C 2001/09/18 16:05:42 1.112 +++ parser3/src/classes/table.C 2001/10/09 08:13:04 1.121 @@ -2,10 +2,10 @@ Parser: @b table parser class. Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com) - Author: Alexander Petrosyan (http://design.ru/paf) + + $Id: table.C,v 1.121 2001/10/09 08:13:04 parser Exp $ */ -static const char *RCSId="$Id: table.C,v 1.112 2001/09/18 16:05:42 parser Exp $"; #include "classes.h" #include "pa_config_includes.h" @@ -65,7 +65,7 @@ static void _set(Request& r, const Strin while(i.has_next()) { Array& row=*new(pool) Array(pool); const String& string=*i.next_string(); - // remove empty lines + // remove comment lines if(!string.size()) continue; @@ -80,11 +80,11 @@ static void _set(Request& r, const Strin static void _load(Request& r, const String& method_name, MethodParams *params) { Pool& pool=r.pool(); // filename is last parameter - const String& filename=params->as_string(params->size()-1, + Value& vfilename=params->as_no_junction(params->size()-1, "file name must not be code"); // loading text - char *data=file_read_text(pool, r.absolute(filename)); + char *data=file_read_text(pool, r.absolute(vfilename.as_string())); // parse columns Array *columns; @@ -110,7 +110,8 @@ static void _load(Request& r, const Stri Table& table=*new(pool) Table(pool, &method_name, columns); char *row_chars; while(row_chars=getrow(&data)) { - if(!*row_chars) // remove empty lines + // remove empty&comment lines + if(!*row_chars || *row_chars == '#') continue; Array *row=new(pool) Array(pool); while(char *cell_chars=lsplit(&row_chars, '\t')) { @@ -133,8 +134,8 @@ static Table *fill_month_days(Request& r Pool& pool=r.pool(); Table *result=new(pool) Table(pool, &method_name, 0/*&columns*/); - int year=params->as_int(1, r); - int month=max(1, min(params->as_int(2, r), 12)) -1; + int year=params->as_int(1, "year must be int", r); + int month=max(1, min(params->as_int(2, "month must be int", r), 12)) -1; tm tmIn={0, 0, 0, 1, month, year-1900}; time_t t=mktime(&tmIn); @@ -176,9 +177,9 @@ static Table *fill_week_days(Request& r, columns+=new(pool) String(pool, "weekday"); Table *result=new(pool) Table(pool, &method_name, &columns); - int year=params->as_int(1, r); - int month=max(1, min(params->as_int(2, r), 12)) -1; - int day=params->as_int(3, r); + int year=params->as_int(1, "year must be int", r); + int month=max(1, min(params->as_int(2, "month must be int", r), 12)) -1; + int day=params->as_int(3, "day must be int", r); tm tmIn={0, 0, 18, day, month, year-1900}; time_t t=mktime(&tmIn); @@ -320,7 +321,7 @@ static void _offset(Request& r, const St static void _menu(Request& r, const String& method_name, MethodParams *params) { Value& body_code=params->as_junction(0, "body must be code"); - Value *delim_code=params->size()==2?¶ms->get(1):0; + Value *delim_maybe_code=params->size()==2?¶ms->get(1):0; VTable& vtable=*static_cast(r.self); Table& table=vtable.table(); @@ -331,10 +332,10 @@ static void _menu(Request& r, const Stri table.set_current(row); Value& processed_body=r.process(body_code); - if(delim_code) { // delimiter set? + if(delim_maybe_code) { // delimiter set? const String *string=processed_body.get_string(); if(need_delim && string && string->size()) // need delim & iteration produced string? - r.write_pass_lang(r.process(*delim_code)); + r.write_pass_lang(r.process(*delim_maybe_code)); need_delim=true; } r.write_pass_lang(processed_body); @@ -470,7 +471,8 @@ static void _sort(Request& r, const Stri for(i=0; i(r.self)->set_table(new_table); } static void _locate(Request& r, const String& method_name, MethodParams *params) { @@ -479,8 +481,9 @@ static void _locate(Request& r, const St VTable& vtable=*static_cast(r.self); Table& table=vtable.table(); Value& result=*new(pool) VBool(pool, table.locate( - params->get(0).as_string(), - params->get(1).as_string())); + params->as_string(0, "column name must be string"), + params->as_string(1, "value must be string") + )); result.set_name(method_name); r.write_no_lang(result); }