#include <tools.h>
#include <charsettools.h>
#include <stringtools.h>
#include <mimedecode.h>
#include <rfc822.h>
#include <rfc1522.h>
#include <htmltools.h>
#include <parsefrom.h>
using namespace std;
void parse_route_address(const vector<rfc822symbolt> &symbols,
string &email, string &name)
{
bool phrase=TRUE;
for(unsigned i=0; i<symbols.size(); i++)
{
string text;
if(symbols[i].type==rfc822symbolt::SPECIAL)
{
if(symbols[i].text==",") // list
break;
else if(symbols[i].text=="<")
phrase=FALSE;
else if(symbols[i].text==">")
break;
else
text=symbols[i].text;
}
else if(symbols[i].type==rfc822symbolt::COMMENT)
text='('+symbols[i].text+')';
else if(symbols[i].type==rfc822symbolt::DOMAIN)
text='['+symbols[i].text+']';
else if(symbols[i].type==rfc822symbolt::END_OF_LIST)
break;
else
text=symbols[i].text;
if(phrase)
{
if(name!="") name+=' ';
name+=text;
}
else
email+=text;
}
}
void parse_addr_spec(const vector<rfc822symbolt> &symbols,
string &email, string &name)
{
for(unsigned i=0; i<symbols.size(); i++)
if(symbols[i].type==rfc822symbolt::SPECIAL)
{
if(symbols[i].text==",") // list
break;
email+=symbols[i].text;
}
else if(symbols[i].type==rfc822symbolt::COMMENT)
name+=symbols[i].text;
else if(symbols[i].type==rfc822symbolt::END_OF_LIST)
break;
else if(symbols[i].type==rfc822symbolt::DOMAIN)
email+='['+symbols[i].text+']';
else
email+=symbols[i].text;
}
void parse_from(const string from, string &email, string &name)
{
vector<rfc822symbolt> symbols;
email=name="";
parserfc822symbols(from, symbols);
for(unsigned i=0; i<symbols.size(); i++)
if(symbols[i].type==rfc822symbolt::SPECIAL)
{
if(symbols[i].text==",") // list
break;
if(symbols[i].text=="<") // it is a route address
{
parse_route_address(symbols, email, name);
return;
}
}
parse_addr_spec(symbols, email, name);
}
syntax highlighted by Code2HTML, v. 0.9.1