// 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