--- parser3/src/classes/table.C 2016/09/08 16:31:35 1.322 +++ parser3/src/classes/table.C 2016/09/21 00:04:05 1.327 @@ -22,7 +22,7 @@ #define USE_STRINGSTREAM #endif -volatile const char * IDENT_TABLE_C="$Id: table.C,v 1.322 2016/09/08 16:31:35 moko Exp $"; +volatile const char * IDENT_TABLE_C="$Id: table.C,v 1.327 2016/09/21 00:04:05 moko Exp $"; // class @@ -111,7 +111,7 @@ struct TableControlChars { if(Value* vseparator=options.get(PA_COLUMN_SEPARATOR_NAME)) { sseparator=&vseparator->as_string(); if(sseparator->length()!=1) - throw Exception(PARSER_RUNTIME, sseparator, "separator must be one character long"); + throw Exception(PARSER_RUNTIME, sseparator, "separator must be one byte character"); separator=sseparator->first_char(); separators[0]=separator; result++; @@ -121,9 +121,9 @@ struct TableControlChars { if(sencloser->is_empty()){ encloser=0; } else { - if(sencloser->length()!=1) - throw Exception(PARSER_RUNTIME, sencloser, "encloser must be one character long"); - encloser=sencloser->first_char(); + if(sencloser->length()!=1) + throw Exception(PARSER_RUNTIME, sencloser, "encloser must be empty or one byte character"); + encloser=sencloser->first_char(); } result++; } @@ -171,15 +171,15 @@ public: inline lsplit_sresult lsplit(char* *string_ref, const char* delims, StringSplitHelper& helper) { lsplit_sresult result; if(char *pos=*string_ref) { - while(char* v=strpbrk(pos, delims)) { - if(helper.check_lang(v)){ - result.delim=*v; - *v=0; + while(pos=strpbrk(pos, delims)) { + if(helper.check_lang(pos)){ + result.delim=*pos; + *pos=0; result.piece=helper.extract(*string_ref); - *string_ref=v+1; + *string_ref=pos+1; return result; } - pos=v+1; + pos++; } result.piece=helper.extract(*string_ref); *string_ref=0; @@ -208,7 +208,7 @@ static lsplit_sresult lsplit(char** stri } } pos=v+1; - }{ + } else { result.append(helper.extract(*string_ref)); *string_ref=0; return result; @@ -271,9 +271,8 @@ static void _create(Request& r, MethodPa size_t options_param_index=data_param_index+1; if( options_param_indexcount()) + throw Exception(PARSER_RUNTIME, 0, CALLED_WITH_INVALID_OPTION); } // data @@ -1221,8 +1220,7 @@ inline Table::element_type row_from_stri // parse cells Table::element_type row=new ArrayString; - size_t pos_after=0; - string.split(*row, pos_after, "\t", String::L_AS_IS); + string.split(*row, 0, "\t", String::L_AS_IS); return row; }