summaryrefslogtreecommitdiffabout
path: root/kabc/vcard/ContentLine.cpp
Unidiff
Diffstat (limited to 'kabc/vcard/ContentLine.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/vcard/ContentLine.cpp103
1 files changed, 64 insertions, 39 deletions
diff --git a/kabc/vcard/ContentLine.cpp b/kabc/vcard/ContentLine.cpp
index 6fa1a8f..0fb5b5d 100644
--- a/kabc/vcard/ContentLine.cpp
+++ b/kabc/vcard/ContentLine.cpp
@@ -2,7 +2,7 @@
2 libvcard - vCard parsing library for vCard version 3.0 2 libvcard - vCard parsing library for vCard version 3.0
3 3
4 Copyright (C) 1999 Rik Hemsley rik@kde.org 4 Copyright (C) 1999 Rik Hemsley rik@kde.org
5 5
6 Permission is hereby granted, free of charge, to any person obtaining a copy 6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to 7 of this software and associated documentation files (the "Software"), to
8 deal in the Software without restriction, including without limitation the 8 deal in the Software without restriction, including without limitation the
@@ -68,29 +68,54 @@ ContentLine::ContentLine()
68 :Entity(), 68 :Entity(),
69 value_(0) 69 value_(0)
70{ 70{
71 paramList_.setAutoDelete( TRUE );
71} 72}
72 73
73ContentLine::ContentLine(const ContentLine & x) 74ContentLine::ContentLine(const ContentLine & x)
74 :Entity(x), 75 :Entity(x),
75 group_ (x.group_), 76 group_ (x.group_),
76 name_ (x.name_), 77 name_ (x.name_),
77 paramList_(x.paramList_), 78 /*US paramList_(x.paramList_),*/
78 value_(x.value_->clone()) 79 value_(x.value_->clone()),
80 paramType_(x.paramType_),
81 valueType_(x.valueType_),
82 entityType_(x.entityType_)
79{ 83{
84 paramList_.setAutoDelete( TRUE );
85
86
87 ParamListIterator it(x.paramList_);
88 for (; it.current(); ++it)
89 {
90 Param *p = new Param;
91 p->setName( it.current()->name() );
92 p->setValue( it.current()->value() );
93 paramList_.append(p);
94 }
95
80} 96}
81 97
82ContentLine::ContentLine(const QCString & s) 98ContentLine::ContentLine(const QCString & s)
83 :Entity(s), 99 :Entity(s),
84 value_(0) 100 value_(0)
85{ 101{
102 paramList_.setAutoDelete( TRUE );
86} 103}
87 104
88 ContentLine & 105 ContentLine &
89ContentLine::operator = (ContentLine & x) 106ContentLine::operator = (ContentLine & x)
90{ 107{
91 if (*this == x) return *this; 108 if (*this == x) return *this;
92 109
93 paramList_ = x.paramList(); 110 ParamListIterator it(x.paramList_);
111 for (; it.current(); ++it)
112 {
113 Param *p = new Param;
114 p->setName( it.current()->name() );
115 p->setValue( it.current()->value() );
116 paramList_.append(p);
117 }
118
94 value_ = x.value_->clone(); 119 value_ = x.value_->clone();
95 120
96 Entity::operator = (x); 121 Entity::operator = (x);
@@ -110,9 +135,9 @@ ContentLine::operator = (const QCString & s)
110ContentLine::operator == (ContentLine & x) 135ContentLine::operator == (ContentLine & x)
111{ 136{
112 x.parse(); 137 x.parse();
113 138
114 QPtrListIterator<Param> it(x.paramList()); 139 QPtrListIterator<Param> it(x.paramList());
115 140
116 if (!paramList_.find(it.current())) 141 if (!paramList_.find(it.current()))
117 return false; 142 return false;
118 143
@@ -129,57 +154,57 @@ ContentLine::~ContentLine()
129ContentLine::_parse() 154ContentLine::_parse()
130{ 155{
131 vDebug("parse"); 156 vDebug("parse");
132 157
133 // Unqote newlines 158 // Unqote newlines
134 strRep_ = strRep_.replace( QRegExp( "\\\\n" ), "\n" ); 159 strRep_ = strRep_.replace( QRegExp( "\\\\n" ), "\n" );
135 160
136 int split = strRep_.find(':'); 161 int split = strRep_.find(':');
137 162
138 if (split == -1) { // invalid content line 163 if (split == -1) { // invalid content line
139 vDebug("No ':'"); 164 vDebug("No ':'");
140 return; 165 return;
141 } 166 }
142 167
143 QCString firstPart(strRep_.left(split)); 168 QCString firstPart(strRep_.left(split));
144 QCString valuePart(strRep_.mid(split + 1)); 169 QCString valuePart(strRep_.mid(split + 1));
145 170
146 split = firstPart.find('.'); 171 split = firstPart.find('.');
147 172
148 if (split != -1) { 173 if (split != -1) {
149 group_ = firstPart.left(split); 174 group_ = firstPart.left(split);
150 firstPart= firstPart.mid(split + 1); 175 firstPart= firstPart.mid(split + 1);
151 } 176 }
152 177
153 vDebug("Group == " + group_); 178 vDebug("Group == " + group_);
154 vDebug("firstPart == " + firstPart); 179 vDebug("firstPart == " + firstPart);
155 vDebug("valuePart == " + valuePart); 180 vDebug("valuePart == " + valuePart);
156 181
157 // Now we have the group, the name and param list together and the value. 182 // Now we have the group, the name and param list together and the value.
158 183
159 QStrList l; 184 QStrList l;
160 185
161 RTokenise(firstPart, ";", l); 186 RTokenise(firstPart, ";", l);
162 187
163 if (l.count() == 0) {// invalid - no name ! 188 if (l.count() == 0) {// invalid - no name !
164 vDebug("No name for this content line !"); 189 vDebug("No name for this content line !");
165 return; 190 return;
166 } 191 }
167 192
168 name_ = l.at(0); 193 name_ = l.at(0);
169 194
170 // Now we have the name, so the rest of 'l' is the params. 195 // Now we have the name, so the rest of 'l' is the params.
171 // Remove the name part. 196 // Remove the name part.
172 l.remove(0u); 197 l.remove(0u);
173 198
174 entityType_= EntityNameToEntityType(name_); 199 entityType_= EntityNameToEntityType(name_);
175 paramType_= EntityTypeToParamType(entityType_); 200 paramType_= EntityTypeToParamType(entityType_);
176 201
177 unsigned int i = 0; 202 unsigned int i = 0;
178 203
179 // For each parameter, create a new parameter of the correct type. 204 // For each parameter, create a new parameter of the correct type.
180 205
181 QStrListIterator it(l); 206 QStrListIterator it(l);
182 207
183 for (; it.current(); ++it, i++) { 208 for (; it.current(); ++it, i++) {
184 209
185 QCString str = *it; 210 QCString str = *it;
@@ -189,21 +214,21 @@ ContentLine::_parse()
189 vDebug("No '=' in paramter."); 214 vDebug("No '=' in paramter.");
190 continue; 215 continue;
191 } 216 }
192 217
193 QCString paraName = str.left(split); 218 QCString paraName = str.left(split);
194 QCString paraValue = str.mid(split + 1); 219 QCString paraValue = str.mid(split + 1);
195 220
196 QStrList paraValues; 221 QStrList paraValues;
197 RTokenise(paraValue, ",", paraValues); 222 RTokenise(paraValue, ",", paraValues);
198 223
199 QStrListIterator it2( paraValues ); 224 QStrListIterator it2( paraValues );
200 225
201 for(; it2.current(); ++it2) { 226 for(; it2.current(); ++it2) {
202 227
203 Param *p = new Param; 228 Param *p = new Param;
204 p->setName( paraName ); 229 p->setName( paraName );
205 p->setValue( *it2 ); 230 p->setValue( *it2 );
206 231
207 paramList_.append(p); 232 paramList_.append(p);
208 } 233 }
209 } 234 }
@@ -211,11 +236,11 @@ ContentLine::_parse()
211 // Create a new value of the correct type. 236 // Create a new value of the correct type.
212 237
213 valueType_ = EntityTypeToValueType(entityType_); 238 valueType_ = EntityTypeToValueType(entityType_);
214 239
215 //kdDebug(5710) << "valueType: " << valueType_ << endl; 240 //kdDebug(5710) << "valueType: " << valueType_ << endl;
216 241
217 switch (valueType_) { 242 switch (valueType_) {
218 243
219 case ValueSound: value_ = new SoundValue;break; 244 case ValueSound: value_ = new SoundValue;break;
220 case ValueAgent: value_ = new AgentValue;break; 245 case ValueAgent: value_ = new AgentValue;break;
221 case ValueAddress: value_ = new AdrValue; break; 246 case ValueAddress: value_ = new AdrValue; break;
@@ -235,7 +260,7 @@ ContentLine::_parse()
235 case ValueUnknown: 260 case ValueUnknown:
236 default: value_ = new TextValue; break; 261 default: value_ = new TextValue; break;
237 } 262 }
238 263
239 *value_ = valuePart; 264 *value_ = valuePart;
240} 265}
241 266
@@ -246,18 +271,18 @@ ContentLine::_assemble()
246 strRep_.truncate(0); 271 strRep_.truncate(0);
247 272
248 QCString line; 273 QCString line;
249 274
250 if (!group_.isEmpty()) 275 if (!group_.isEmpty())
251 line += group_ + '.'; 276 line += group_ + '.';
252 277
253 line += name_; 278 line += name_;
254 279
255 vDebug("Adding parameters"); 280 vDebug("Adding parameters");
256 ParamListIterator it(paramList_); 281 ParamListIterator it(paramList_);
257 282
258 for (; it.current(); ++it) 283 for (; it.current(); ++it)
259 line += ";" + it.current()->asString(); 284 line += ";" + it.current()->asString();
260 285
261 vDebug("Adding value"); 286 vDebug("Adding value");
262 if (value_ != 0) 287 if (value_ != 0)
263 line += ":" + value_->asString(); 288 line += ":" + value_->asString();
@@ -266,7 +291,7 @@ ContentLine::_assemble()
266 291
267 // Quote newlines 292 // Quote newlines
268 line = line.replace( QRegExp( "\n" ), "\\n" ); 293 line = line.replace( QRegExp( "\n" ), "\\n" );
269 294
270 // Fold lines longer than 72 chars 295 // Fold lines longer than 72 chars
271 const int maxLen = 72; 296 const int maxLen = 72;
272 uint cursor = 0; 297 uint cursor = 0;