--- parser3/src/classes/table.C 2016/10/26 15:44:49 1.337 +++ parser3/src/classes/table.C 2017/01/13 13:50:28 1.341 @@ -22,7 +22,7 @@ #define USE_STRINGSTREAM #endif -volatile const char * IDENT_TABLE_C="$Id: table.C,v 1.337 2016/10/26 15:44:49 moko Exp $"; +volatile const char * IDENT_TABLE_C="$Id: table.C,v 1.341 2017/01/13 13:50:28 moko Exp $"; // class @@ -711,13 +711,13 @@ static void _csv_string(Request& r, Meth table_to_csv(ost, table, control_chars, output_column_names); - r.write_no_lang(*new VString(*new String(pa_strdup(ost.str().c_str()), String::L_CLEAN))); + r.write(*new VString(*new String(pa_strdup(ost.str().c_str()), String::L_CLEAN))); #else String sdata; table_to_csv(sdata, table, control_chars, output_column_names); - r.write_no_lang(*new VString(*new String(sdata.cstr(), String::L_CLEAN))); + r.write(*new VString(*new String(sdata.cstr(), String::L_CLEAN))); #endif } @@ -737,12 +737,12 @@ static void _count(Request& r, MethodPar } else result = table.count(); - r.write_no_lang(*new VInt(result)); + r.write(*new VInt(result)); } static void _line(Request& r, MethodParams&) { int result=1+GET_SELF(r, VTable).table().current(); - r.write_no_lang(*new VInt(result)); + r.write(*new VInt(result)); } static void _offset(Request& r, MethodParams& params) { @@ -762,7 +762,7 @@ static void _offset(Request& r, MethodPa int offset=params.as_int(params.count()-1, "offset must be expression", r); table.offset(absolute, offset); } else - r.write_no_lang(*new VInt(table.current())); + r.write(*new VInt(table.current())); } static void _menu(Request& r, MethodParams& params) { @@ -781,19 +781,19 @@ static void _menu(Request& r, MethodPara table.set_current(row); Value& sv_processed=r.process(body_code); - Request::Skip lskip=r.get_skip(); r.set_skip(Request::SKIP_NOTHING); + TempSkip4Delimiter skip(r); const String* s_processed=sv_processed.get_string(); if(s_processed && !s_processed->is_empty()) { // we have body if(need_delim) // need delim & iteration produced string? - r.write_pass_lang(r.process(*delim_maybe_code)); + r.write(r.process(*delim_maybe_code)); else need_delim=true; } - r.write_pass_lang(sv_processed); + r.write(sv_processed); - if(lskip==Request::SKIP_BREAK) + if(skip.check_break()) break; } } else { @@ -801,9 +801,8 @@ static void _menu(Request& r, MethodPara table.set_current(row); r.process_write(body_code); - Request::Skip lskip=r.get_skip(); r.set_skip(Request::SKIP_NOTHING); - if(lskip==Request::SKIP_BREAK) + if(r.check_skip_break()) break; } } @@ -986,8 +985,8 @@ static void _hash(Request& r, MethodPara throw Exception(PARSER_RUNTIME, 0, "value field(s) must be string or table or code"); } - if(value_type==C_STRING && value_fields.count()!=1) - throw Exception(PARSER_RUNTIME, 0, "you can specify only one value field with option $.type[string]"); + if(value_type==C_STRING && value_fields.count()>1) + throw Exception(PARSER_RUNTIME, 0, "you can't specify more then one value field with option $.type[string]"); { Value* key_param=¶ms[0]; @@ -1013,7 +1012,7 @@ static void _hash(Request& r, MethodPara } } } - r.write_no_lang(result); + r.write(result); } #ifndef DOXYGEN @@ -1044,9 +1043,7 @@ static int sort_cmp_double(const void *a static void _sort(Request& r, MethodParams& params) { Value& key_maker=params.as_junction(0, "key-maker must be code"); - bool reverse=params.count()>1/*..[desc|asc|]*/? - reverse=params.as_no_junction(1, "order must not be code").as_string()=="desc": - false; // default=asc + bool reverse=params.count()>1 /*..[desc|asc|]*/ && params.as_no_junction(1, "order must not be code").as_string()=="desc"; // default=asc Table& old_table=GET_SELF(r, VTable).table(); Table& new_table=*new Table(old_table.columns()); @@ -1124,7 +1121,7 @@ static void _locate(Request& r, MethodPa bool result=params[0].get_junction() || (params.count() == 1) ? _locate_expression(table, r, params) : _locate_name_value(table, r, params); - r.write_no_lang(VBool::get(result)); + r.write(VBool::get(result)); } @@ -1142,7 +1139,7 @@ static void _flip(Request& r, MethodPara new_table+=new_row; } - r.write_no_lang(*new VTable(&new_table)); + r.write(*new VTable(&new_table)); } static void _foreach(Request& r, MethodParams& params) { @@ -1174,19 +1171,19 @@ static void _foreach(Request& r, MethodP r.put_element(*var_context, *value_var_name, new VTable(&table)); Value& sv_processed=r.process(body_code); - Request::Skip lskip=r.get_skip(); r.set_skip(Request::SKIP_NOTHING); + TempSkip4Delimiter skip(r); const String* s_processed=sv_processed.get_string(); if(s_processed && !s_processed->is_empty()) { // we have body if(need_delim) // need delim & iteration produced string? - r.write_pass_lang(r.process(*delim_maybe_code)); + r.write(r.process(*delim_maybe_code)); else need_delim=true; } - r.write_pass_lang(sv_processed); + r.write(sv_processed); - if(lskip==Request::SKIP_BREAK) + if(skip.check_break()) break; } } else { @@ -1199,9 +1196,8 @@ static void _foreach(Request& r, MethodP r.put_element(*var_context, *value_var_name, new VTable(&table)); r.process_write(body_code); - Request::Skip lskip=r.get_skip(); r.set_skip(Request::SKIP_NOTHING); - if(lskip==Request::SKIP_BREAK) + if(r.check_skip_break()) break; } } @@ -1448,7 +1444,7 @@ static void _columns(Request& r, MethodP } } - r.write_no_lang(*new VTable(&result_table)); + r.write(*new VTable(&result_table)); } static void _select(Request& r, MethodParams& params) { @@ -1511,7 +1507,7 @@ static void _select(Request& r, MethodPa source_table.set_current(saved_current); } - r.write_no_lang(*new VTable(&result_table)); + r.write(*new VTable(&result_table)); } // constructor