00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
#include <qcstring.h>
00025
#include <qstrlist.h>
00026
#include <qregexp.h>
00027
00028
#include <kdebug.h>
00029
00030
#include <VCardAdrParam.h>
00031
#include <VCardAgentParam.h>
00032
#include <VCardDateParam.h>
00033
#include <VCardEmailParam.h>
00034
#include <VCardImageParam.h>
00035
#include <VCardSourceParam.h>
00036
#include <VCardTelParam.h>
00037
#include <VCardTextBinParam.h>
00038
#include <VCardTextParam.h>
00039
00040
#include <VCardAdrValue.h>
00041
#include <VCardAgentValue.h>
00042
#include <VCardDateValue.h>
00043
#include <VCardImageValue.h>
00044
#include <VCardTextValue.h>
00045
#include <VCardTextBinValue.h>
00046
#include <VCardLangValue.h>
00047
#include <VCardNValue.h>
00048
#include <VCardURIValue.h>
00049
#include <VCardSoundValue.h>
00050
#include <VCardClassValue.h>
00051
#include <VCardFloatValue.h>
00052
#include <VCardOrgValue.h>
00053
#include <VCardTelValue.h>
00054
#include <VCardTextListValue.h>
00055
#include <VCardUTCValue.h>
00056
#include <VCardGeoValue.h>
00057
00058
#include <VCardRToken.h>
00059
#include <VCardContentLine.h>
00060
00061
#include <VCardEntity.h>
00062
#include <VCardEnum.h>
00063
#include <VCardDefines.h>
00064
00065
using namespace VCARD;
00066
00067 ContentLine::ContentLine()
00068 : Entity(),
00069 value_(0),
00070 paramType_( ParamUnknown ),
00071 valueType_( ValueUnknown ),
00072 entityType_( EntityUnknown )
00073 {
00074 }
00075
00076 ContentLine::ContentLine(
const ContentLine & x)
00077 : Entity(x),
00078 group_ (x.group_),
00079 name_ (x.name_),
00080 paramList_(x.paramList_),
00081 value_(x.value_->clone()),
00082 paramType_( x.paramType_ ),
00083 valueType_( x.valueType_ ),
00084 entityType_( x.entityType_ )
00085 {
00086 }
00087
00088 ContentLine::ContentLine(
const QCString & s)
00089 : Entity(s),
00090 value_(0),
00091 paramType_( ParamUnknown ),
00092 valueType_( ValueUnknown ),
00093 entityType_( EntityUnknown )
00094 {
00095 }
00096
00097 ContentLine &
00098 ContentLine::operator = (ContentLine & x)
00099 {
00100
if (*
this == x)
return *
this;
00101
00102 paramList_ = x.paramList();
00103 value_ = x.value_->clone();
00104
00105 Entity::operator = (x);
00106
return *
this;
00107 }
00108
00109 ContentLine &
00110 ContentLine::operator = (
const QCString & s)
00111 {
00112 Entity::operator = (s);
00113
delete value_;
00114 value_ = 0;
00115
return *
this;
00116 }
00117
00118
bool
00119 ContentLine::operator == (ContentLine & x)
00120 {
00121 x.parse();
00122
00123
QPtrListIterator<Param> it(x.paramList());
00124
00125
if (!paramList_.find(it.current()))
00126
return false;
00127
00128
return true;
00129 }
00130
00131 ContentLine::~ContentLine()
00132 {
00133
delete value_;
00134 value_ = 0;
00135 }
00136
00137
void
00138 ContentLine::_parse()
00139 {
00140 vDebug(
"parse");
00141
00142
00143 strRep_ = strRep_.replace(
QRegExp(
"\\\\n" ),
"\n" );
00144
00145
int split = strRep_.find(
':');
00146
00147
if (split == -1) {
00148 vDebug(
"No ':'");
00149
return;
00150 }
00151
00152
QCString firstPart(strRep_.left(split));
00153
QCString valuePart(strRep_.mid(split + 1));
00154
00155 split = firstPart.find(
'.');
00156
00157
if (split != -1) {
00158 group_ = firstPart.left(split);
00159 firstPart = firstPart.mid(split + 1);
00160 }
00161
00162 vDebug(
"Group == " + group_);
00163 vDebug(
"firstPart == " + firstPart);
00164 vDebug(
"valuePart == " + valuePart);
00165
00166
00167
00168
QStrList l;
00169
00170 RTokenise(firstPart,
";", l);
00171
00172
if (l.count() == 0) {
00173 vDebug(
"No name for this content line !");
00174
return;
00175 }
00176
00177 name_ = l.at(0);
00178
00179
00180
00181 l.remove(0u);
00182
00183 entityType_ = EntityNameToEntityType(name_);
00184 paramType_ = EntityTypeToParamType(entityType_);
00185
00186
unsigned int i = 0;
00187
00188
00189
00190
QStrListIterator it(l);
00191
00192
for (; it.current(); ++it, i++) {
00193
00194
QCString str = *it;
00195
00196 split = str.
find(
"=");
00197
if (split < 0 ) {
00198 vDebug(
"No '=' in parameter.");
00199
continue;
00200 }
00201
00202
QCString paraName = str.
left(split);
00203
QCString paraValue = str.
mid(split + 1);
00204
00205
QStrList paraValues;
00206 RTokenise(paraValue,
",", paraValues);
00207
00208
QStrListIterator it2( paraValues );
00209
00210
for(; it2.current(); ++it2) {
00211
00212 Param *p =
new Param;
00213 p->setName( paraName );
00214 p->setValue( *it2 );
00215
00216 paramList_.append(p);
00217 }
00218 }
00219
00220
00221
00222 valueType_ = EntityTypeToValueType(entityType_);
00223
00224
00225
00226
switch (valueType_) {
00227
00228
case ValueSound: value_ =
new SoundValue;
break;
00229
case ValueAgent: value_ =
new AgentValue;
break;
00230
case ValueAddress: value_ =
new AdrValue;
break;
00231
case ValueTel: value_ =
new TelValue;
break;
00232
case ValueTextBin: value_ =
new TextBinValue;
break;
00233
case ValueOrg: value_ =
new OrgValue;
break;
00234
case ValueN: value_ =
new NValue;
break;
00235
case ValueUTC: value_ =
new UTCValue;
break;
00236
case ValueURI: value_ =
new URIValue;
break;
00237
case ValueClass: value_ =
new ClassValue;
break;
00238
case ValueFloat: value_ =
new FloatValue;
break;
00239
case ValueImage: value_ =
new ImageValue;
break;
00240
case ValueDate: value_ =
new DateValue;
break;
00241
case ValueTextList: value_ =
new TextListValue;
break;
00242
case ValueGeo: value_ =
new GeoValue;
break;
00243
case ValueText:
00244
case ValueUnknown:
00245
default: value_ =
new TextValue;
break;
00246 }
00247
00248 *value_ = valuePart;
00249 }
00250
00251
void
00252 ContentLine::_assemble()
00253 {
00254 vDebug(
"Assemble (argl) - my name is \"" + name_ +
"\"");
00255 strRep_.truncate(0);
00256
00257
QCString line;
00258
00259
if (!group_.isEmpty())
00260 line += group_ +
'.';
00261
00262 line += name_;
00263
00264 vDebug(
"Adding parameters");
00265
ParamListIterator it(paramList_);
00266
00267
for (; it.current(); ++it)
00268 line +=
";" + it.current()->asString();
00269
00270 vDebug(
"Adding value");
00271
if (value_ != 0)
00272 line +=
":" + value_->asString();
00273
else
00274 vDebug(
"No value");
00275
00276
00277 line = line.
replace(
QRegExp(
"\n" ),
"\\n" );
00278
00279
00280
const int maxLen = 72;
00281 uint cursor = 0;
00282
while( line.
length() > ( cursor + 1 ) * maxLen ) {
00283 strRep_ += line.
mid( cursor * maxLen, maxLen );
00284 strRep_ +=
"\r\n ";
00285 ++cursor;
00286 }
00287 strRep_ += line.
mid( cursor * maxLen );
00288 }
00289
00290
void
00291 ContentLine::clear()
00292 {
00293 group_.truncate(0);
00294 name_.truncate(0);
00295 paramList_.clear();
00296
delete value_;
00297 value_ = 0;
00298 paramType_ = ParamUnknown;
00299 valueType_ = ValueUnknown;
00300 entityType_ = EntityUnknown;
00301 }