// Common, group Parsing
// Copyright Alexander Liss
#ifndef __STRTOKENS_H__
#define __STRTOKENS_H__
#include "strbuf.h"
// CLASSES
// allocates space for data
// replaces delimiters with zero
// if there are two delimiters together - interprets it as a token:
// empty string
class StrTokens
{
StrTokens(const StrTokens&); // cannot use
StrTokens& operator=(const StrTokens&); // cannot use
public:
StrTokens(const char * Delimiters=",\n"):
token_number(0),delimiters(Delimiters){}
~StrTokens(){}
int number(){return token_number;}
int parse(const char * string);
int parse(const char * data,int size);
int parse(const StrBuffer& s){return parse(s.data,s.data_size);}
int translate_parse(const char * string,const char *from,char to=',');
int translate_parse(const StrBuffer& s,const char *from,char to=',')
{return translate_parse(s.data,from,to);}
int shrink_parse(const char * Str,const char *from,char to=' ',bool drop_ends=true);
int shrink_parse(const StrBuffer& s,const char *from,char to=' ',bool drop_ends=true)
{return shrink_parse(s.data,from,to,drop_ends);}
int get_next(StrBuffer& dest);
int start(){current=start_pointer;return 0;}
int move_next();
private:
StrBuffer data,delimiters;
int token_number;
char *current, *start_pointer;
int parse();
};
// FUNCTIONS
int translate_char(char * data_string,char from,char to=' ');
// any character from from to to
int translate_char(char * data_string,const char *from,char to=' ');
//reduces combinations of characters from from to one caracter to
int shrink_char(char * data_string,const char *from,char to=' ',bool drop_ends=true);
int drop_char(char * data_string,const char *drop_list);
int translate_char(StrBuffer& data_string,char from,char to=' ');
int translate_char(StrBuffer& data_string,const char *from,char to=' ');
int shrink_char(StrBuffer& data_string,const char *from,char to=' ',bool drop_ends=true);
int drop_char(StrBuffer& data_string,const char *drop_list);
#endif