diff options
Diffstat (limited to 'Swiften/Parser/PayloadParsers/VCardParser.cpp')
-rw-r--r-- | Swiften/Parser/PayloadParsers/VCardParser.cpp | 510 |
1 files changed, 255 insertions, 255 deletions
diff --git a/Swiften/Parser/PayloadParsers/VCardParser.cpp b/Swiften/Parser/PayloadParsers/VCardParser.cpp index faf29d2..9f22c23 100644 --- a/Swiften/Parser/PayloadParsers/VCardParser.cpp +++ b/Swiften/Parser/PayloadParsers/VCardParser.cpp @@ -17,273 +17,273 @@ VCardParser::VCardParser() : unknownContentParser_(NULL) { } void VCardParser::handleStartElement(const std::string& element, const std::string& ns, const AttributeMap& attributes) { - elementStack_.push_back(element); - std::string elementHierarchy = getElementHierarchy(); - if (elementHierarchy == "/vCard/EMAIL") { - currentEMailAddress_ = VCard::EMailAddress(); - } - if (elementHierarchy == "/vCard/TEL") { - currentTelephone_ = VCard::Telephone(); - } - if (elementHierarchy == "/vCard/ADR") { - currentAddress_ = VCard::Address(); - } - if (elementHierarchy == "/vCard/LABEL") { - currentAddressLabel_ = VCard::AddressLabel(); - } - if (elementHierarchy == "/vCard/ORG") { - currentOrganization_ = VCard::Organization(); - } - if (elementStack_.size() == 2) { - assert(!unknownContentParser_); - unknownContentParser_ = new SerializingParser(); - unknownContentParser_->handleStartElement(element, ns, attributes); - } - else if (unknownContentParser_) { - unknownContentParser_->handleStartElement(element, ns, attributes); - } + elementStack_.push_back(element); + std::string elementHierarchy = getElementHierarchy(); + if (elementHierarchy == "/vCard/EMAIL") { + currentEMailAddress_ = VCard::EMailAddress(); + } + if (elementHierarchy == "/vCard/TEL") { + currentTelephone_ = VCard::Telephone(); + } + if (elementHierarchy == "/vCard/ADR") { + currentAddress_ = VCard::Address(); + } + if (elementHierarchy == "/vCard/LABEL") { + currentAddressLabel_ = VCard::AddressLabel(); + } + if (elementHierarchy == "/vCard/ORG") { + currentOrganization_ = VCard::Organization(); + } + if (elementStack_.size() == 2) { + assert(!unknownContentParser_); + unknownContentParser_ = new SerializingParser(); + unknownContentParser_->handleStartElement(element, ns, attributes); + } + else if (unknownContentParser_) { + unknownContentParser_->handleStartElement(element, ns, attributes); + } - currentText_ = ""; + currentText_ = ""; } void VCardParser::handleEndElement(const std::string& element, const std::string& ns) { - if (unknownContentParser_) { - unknownContentParser_->handleEndElement(element, ns); - } + if (unknownContentParser_) { + unknownContentParser_->handleEndElement(element, ns); + } - std::string elementHierarchy = getElementHierarchy(); - if (elementHierarchy == "/vCard/VERSION") { - getPayloadInternal()->setVersion(currentText_); - } - else if (elementHierarchy == "/vCard/FN") { - getPayloadInternal()->setFullName(currentText_); - } - else if (elementHierarchy == "/vCard/N/FAMILY") { - getPayloadInternal()->setFamilyName(currentText_); - } - else if (elementHierarchy == "/vCard/N/GIVEN") { - getPayloadInternal()->setGivenName(currentText_); - } - else if (elementHierarchy == "/vCard/N/MIDDLE") { - getPayloadInternal()->setMiddleName(currentText_); - } - else if (elementHierarchy == "/vCard/N/PREFIX") { - getPayloadInternal()->setPrefix(currentText_); - } - else if (elementHierarchy == "/vCard/N/SUFFIX") { - getPayloadInternal()->setSuffix(currentText_); - } - else if (elementHierarchy == "/vCard/N") { - } - else if (elementHierarchy == "/vCard/NICKNAME") { - getPayloadInternal()->setNickname(currentText_); - } - else if (elementHierarchy == "/vCard/PHOTO/TYPE") { - getPayloadInternal()->setPhotoType(currentText_); - } - else if (elementHierarchy == "/vCard/PHOTO/BINVAL") { - currentText_.erase(std::remove(currentText_.begin(), currentText_.end(), '\n'), currentText_.end()); - currentText_.erase(std::remove(currentText_.begin(), currentText_.end(), '\r'), currentText_.end()); - getPayloadInternal()->setPhoto(Base64::decode(currentText_)); - } - else if (elementHierarchy == "/vCard/PHOTO") { - } - else if (elementHierarchy == "/vCard/EMAIL/USERID") { - currentEMailAddress_.address = currentText_; - } - else if (elementHierarchy == "/vCard/EMAIL/HOME") { - currentEMailAddress_.isHome = true; - } - else if (elementHierarchy == "/vCard/EMAIL/WORK") { - currentEMailAddress_.isWork = true; - } - else if (elementHierarchy == "/vCard/EMAIL/INTERNET") { - currentEMailAddress_.isInternet = true; - } - else if (elementHierarchy == "/vCard/EMAIL/X400") { - currentEMailAddress_.isX400 = true; - } - else if (elementHierarchy == "/vCard/EMAIL/PREF") { - currentEMailAddress_.isPreferred = true; - } - else if (elementHierarchy == "/vCard/EMAIL" && !currentEMailAddress_.address.empty()) { - getPayloadInternal()->addEMailAddress(currentEMailAddress_); - } - else if (elementHierarchy == "/vCard/BDAY" && !currentText_.empty()) { - getPayloadInternal()->setBirthday(stringToDateTime(currentText_)); - } - else if (elementHierarchy == "/vCard/TEL/NUMBER") { - currentTelephone_.number = currentText_; - } - else if (elementHierarchy == "/vCard/TEL/HOME") { - currentTelephone_.isHome = true; - } - else if (elementHierarchy == "/vCard/TEL/WORK") { - currentTelephone_.isWork = true; - } - else if (elementHierarchy == "/vCard/TEL/VOICE") { - currentTelephone_.isVoice = true; - } - else if (elementHierarchy == "/vCard/TEL/FAX") { - currentTelephone_.isFax = true; - } - else if (elementHierarchy == "/vCard/TEL/PAGER") { - currentTelephone_.isPager = true; - } - else if (elementHierarchy == "/vCard/TEL/MSG") { - currentTelephone_.isMSG = true; - } - else if (elementHierarchy == "/vCard/TEL/CELL") { - currentTelephone_.isCell = true; - } - else if (elementHierarchy == "/vCard/TEL/VIDEO") { - currentTelephone_.isVideo = true; - } - else if (elementHierarchy == "/vCard/TEL/BBS") { - currentTelephone_.isBBS = true; - } - else if (elementHierarchy == "/vCard/TEL/MODEM") { - currentTelephone_.isModem = true; - } - else if (elementHierarchy == "/vCard/TEL/ISDN") { - currentTelephone_.isISDN = true; - } - else if (elementHierarchy == "/vCard/TEL/PCS") { - currentTelephone_.isPCS = true; - } - else if (elementHierarchy == "/vCard/TEL/PREF") { - currentTelephone_.isPreferred = true; - } - else if (elementHierarchy == "/vCard/TEL" && !currentTelephone_.number.empty()) { - getPayloadInternal()->addTelephone(currentTelephone_); - } - else if (elementHierarchy == "/vCard/ADR/HOME") { - currentAddress_.isHome = true; - } - else if (elementHierarchy == "/vCard/ADR/WORK") { - currentAddress_.isWork = true; - } - else if (elementHierarchy == "/vCard/ADR/POSTAL") { - currentAddress_.isPostal = true; - } - else if (elementHierarchy == "/vCard/ADR/PARCEL") { - currentAddress_.isParcel = true; - } - else if (elementHierarchy == "/vCard/ADR/DOM") { - currentAddress_.deliveryType = VCard::DomesticDelivery; - } - else if (elementHierarchy == "/vCard/ADR/INTL") { - currentAddress_.deliveryType = VCard::InternationalDelivery; - } - else if (elementHierarchy == "/vCard/ADR/PREF") { - currentAddress_.isPreferred = true; - } - else if (elementHierarchy == "/vCard/ADR/POBOX") { - currentAddress_.poBox = currentText_; - } - else if (elementHierarchy == "/vCard/ADR/EXTADD") { - currentAddress_.addressExtension = currentText_; - } - else if (elementHierarchy == "/vCard/ADR/STREET") { - currentAddress_.street = currentText_; - } - else if (elementHierarchy == "/vCard/ADR/LOCALITY") { - currentAddress_.locality = currentText_; - } - else if (elementHierarchy == "/vCard/ADR/REGION") { - currentAddress_.region = currentText_; - } - else if (elementHierarchy == "/vCard/ADR/PCODE") { - currentAddress_.postalCode = currentText_; - } - else if (elementHierarchy == "/vCard/ADR/CTRY") { - currentAddress_.country = currentText_; - } - else if (elementHierarchy == "/vCard/ADR") { - if (!currentAddress_.poBox.empty() || !currentAddress_.addressExtension.empty() || - !currentAddress_.street.empty() || !currentAddress_.locality.empty() || - !currentAddress_.region.empty() || !currentAddress_.region.empty() || - !currentAddress_.postalCode.empty() || !currentAddress_.country.empty()) { - getPayloadInternal()->addAddress(currentAddress_); - } - } - else if (elementHierarchy == "/vCard/LABEL/HOME") { - currentAddressLabel_.isHome = true; - } - else if (elementHierarchy == "/vCard/LABEL/WORK") { - currentAddressLabel_.isWork = true; - } - else if (elementHierarchy == "/vCard/LABEL/POSTAL") { - currentAddressLabel_.isPostal = true; - } - else if (elementHierarchy == "/vCard/LABEL/PARCEL") { - currentAddressLabel_.isParcel = true; - } - else if (elementHierarchy == "/vCard/LABEL/DOM") { - currentAddressLabel_.deliveryType = VCard::DomesticDelivery; - } - else if (elementHierarchy == "/vCard/LABEL/INTL") { - currentAddressLabel_.deliveryType = VCard::InternationalDelivery; - } - else if (elementHierarchy == "/vCard/LABEL/PREF") { - currentAddressLabel_.isPreferred = true; - } - else if (elementHierarchy == "/vCard/LABEL/LINE") { - currentAddressLabel_.lines.push_back(currentText_); - } - else if (elementHierarchy == "/vCard/LABEL") { - getPayloadInternal()->addAddressLabel(currentAddressLabel_); - } - else if (elementHierarchy == "/vCard/JID" && !currentText_.empty()) { - getPayloadInternal()->addJID(JID(currentText_)); - } - else if (elementHierarchy == "/vCard/DESC") { - getPayloadInternal()->setDescription(currentText_); - } - else if (elementHierarchy == "/vCard/ORG/ORGNAME") { - currentOrganization_.name = currentText_; - } - else if (elementHierarchy == "/vCard/ORG/ORGUNIT" && !currentText_.empty()) { - currentOrganization_.units.push_back(currentText_); - } - else if (elementHierarchy == "/vCard/ORG") { - if (!currentOrganization_.name.empty() || !currentOrganization_.units.empty()) { - getPayloadInternal()->addOrganization(currentOrganization_); - } - } - else if (elementHierarchy == "/vCard/TITLE" && !currentText_.empty()) { - getPayloadInternal()->addTitle(currentText_); - } - else if (elementHierarchy == "/vCard/ROLE" && !currentText_.empty()) { - getPayloadInternal()->addRole(currentText_); - } - else if (elementHierarchy == "/vCard/URL" && !currentText_.empty()) { - getPayloadInternal()->addURL(currentText_); - } - else if (elementStack_.size() == 2 && unknownContentParser_) { - getPayloadInternal()->addUnknownContent(unknownContentParser_->getResult()); - } + std::string elementHierarchy = getElementHierarchy(); + if (elementHierarchy == "/vCard/VERSION") { + getPayloadInternal()->setVersion(currentText_); + } + else if (elementHierarchy == "/vCard/FN") { + getPayloadInternal()->setFullName(currentText_); + } + else if (elementHierarchy == "/vCard/N/FAMILY") { + getPayloadInternal()->setFamilyName(currentText_); + } + else if (elementHierarchy == "/vCard/N/GIVEN") { + getPayloadInternal()->setGivenName(currentText_); + } + else if (elementHierarchy == "/vCard/N/MIDDLE") { + getPayloadInternal()->setMiddleName(currentText_); + } + else if (elementHierarchy == "/vCard/N/PREFIX") { + getPayloadInternal()->setPrefix(currentText_); + } + else if (elementHierarchy == "/vCard/N/SUFFIX") { + getPayloadInternal()->setSuffix(currentText_); + } + else if (elementHierarchy == "/vCard/N") { + } + else if (elementHierarchy == "/vCard/NICKNAME") { + getPayloadInternal()->setNickname(currentText_); + } + else if (elementHierarchy == "/vCard/PHOTO/TYPE") { + getPayloadInternal()->setPhotoType(currentText_); + } + else if (elementHierarchy == "/vCard/PHOTO/BINVAL") { + currentText_.erase(std::remove(currentText_.begin(), currentText_.end(), '\n'), currentText_.end()); + currentText_.erase(std::remove(currentText_.begin(), currentText_.end(), '\r'), currentText_.end()); + getPayloadInternal()->setPhoto(Base64::decode(currentText_)); + } + else if (elementHierarchy == "/vCard/PHOTO") { + } + else if (elementHierarchy == "/vCard/EMAIL/USERID") { + currentEMailAddress_.address = currentText_; + } + else if (elementHierarchy == "/vCard/EMAIL/HOME") { + currentEMailAddress_.isHome = true; + } + else if (elementHierarchy == "/vCard/EMAIL/WORK") { + currentEMailAddress_.isWork = true; + } + else if (elementHierarchy == "/vCard/EMAIL/INTERNET") { + currentEMailAddress_.isInternet = true; + } + else if (elementHierarchy == "/vCard/EMAIL/X400") { + currentEMailAddress_.isX400 = true; + } + else if (elementHierarchy == "/vCard/EMAIL/PREF") { + currentEMailAddress_.isPreferred = true; + } + else if (elementHierarchy == "/vCard/EMAIL" && !currentEMailAddress_.address.empty()) { + getPayloadInternal()->addEMailAddress(currentEMailAddress_); + } + else if (elementHierarchy == "/vCard/BDAY" && !currentText_.empty()) { + getPayloadInternal()->setBirthday(stringToDateTime(currentText_)); + } + else if (elementHierarchy == "/vCard/TEL/NUMBER") { + currentTelephone_.number = currentText_; + } + else if (elementHierarchy == "/vCard/TEL/HOME") { + currentTelephone_.isHome = true; + } + else if (elementHierarchy == "/vCard/TEL/WORK") { + currentTelephone_.isWork = true; + } + else if (elementHierarchy == "/vCard/TEL/VOICE") { + currentTelephone_.isVoice = true; + } + else if (elementHierarchy == "/vCard/TEL/FAX") { + currentTelephone_.isFax = true; + } + else if (elementHierarchy == "/vCard/TEL/PAGER") { + currentTelephone_.isPager = true; + } + else if (elementHierarchy == "/vCard/TEL/MSG") { + currentTelephone_.isMSG = true; + } + else if (elementHierarchy == "/vCard/TEL/CELL") { + currentTelephone_.isCell = true; + } + else if (elementHierarchy == "/vCard/TEL/VIDEO") { + currentTelephone_.isVideo = true; + } + else if (elementHierarchy == "/vCard/TEL/BBS") { + currentTelephone_.isBBS = true; + } + else if (elementHierarchy == "/vCard/TEL/MODEM") { + currentTelephone_.isModem = true; + } + else if (elementHierarchy == "/vCard/TEL/ISDN") { + currentTelephone_.isISDN = true; + } + else if (elementHierarchy == "/vCard/TEL/PCS") { + currentTelephone_.isPCS = true; + } + else if (elementHierarchy == "/vCard/TEL/PREF") { + currentTelephone_.isPreferred = true; + } + else if (elementHierarchy == "/vCard/TEL" && !currentTelephone_.number.empty()) { + getPayloadInternal()->addTelephone(currentTelephone_); + } + else if (elementHierarchy == "/vCard/ADR/HOME") { + currentAddress_.isHome = true; + } + else if (elementHierarchy == "/vCard/ADR/WORK") { + currentAddress_.isWork = true; + } + else if (elementHierarchy == "/vCard/ADR/POSTAL") { + currentAddress_.isPostal = true; + } + else if (elementHierarchy == "/vCard/ADR/PARCEL") { + currentAddress_.isParcel = true; + } + else if (elementHierarchy == "/vCard/ADR/DOM") { + currentAddress_.deliveryType = VCard::DomesticDelivery; + } + else if (elementHierarchy == "/vCard/ADR/INTL") { + currentAddress_.deliveryType = VCard::InternationalDelivery; + } + else if (elementHierarchy == "/vCard/ADR/PREF") { + currentAddress_.isPreferred = true; + } + else if (elementHierarchy == "/vCard/ADR/POBOX") { + currentAddress_.poBox = currentText_; + } + else if (elementHierarchy == "/vCard/ADR/EXTADD") { + currentAddress_.addressExtension = currentText_; + } + else if (elementHierarchy == "/vCard/ADR/STREET") { + currentAddress_.street = currentText_; + } + else if (elementHierarchy == "/vCard/ADR/LOCALITY") { + currentAddress_.locality = currentText_; + } + else if (elementHierarchy == "/vCard/ADR/REGION") { + currentAddress_.region = currentText_; + } + else if (elementHierarchy == "/vCard/ADR/PCODE") { + currentAddress_.postalCode = currentText_; + } + else if (elementHierarchy == "/vCard/ADR/CTRY") { + currentAddress_.country = currentText_; + } + else if (elementHierarchy == "/vCard/ADR") { + if (!currentAddress_.poBox.empty() || !currentAddress_.addressExtension.empty() || + !currentAddress_.street.empty() || !currentAddress_.locality.empty() || + !currentAddress_.region.empty() || !currentAddress_.region.empty() || + !currentAddress_.postalCode.empty() || !currentAddress_.country.empty()) { + getPayloadInternal()->addAddress(currentAddress_); + } + } + else if (elementHierarchy == "/vCard/LABEL/HOME") { + currentAddressLabel_.isHome = true; + } + else if (elementHierarchy == "/vCard/LABEL/WORK") { + currentAddressLabel_.isWork = true; + } + else if (elementHierarchy == "/vCard/LABEL/POSTAL") { + currentAddressLabel_.isPostal = true; + } + else if (elementHierarchy == "/vCard/LABEL/PARCEL") { + currentAddressLabel_.isParcel = true; + } + else if (elementHierarchy == "/vCard/LABEL/DOM") { + currentAddressLabel_.deliveryType = VCard::DomesticDelivery; + } + else if (elementHierarchy == "/vCard/LABEL/INTL") { + currentAddressLabel_.deliveryType = VCard::InternationalDelivery; + } + else if (elementHierarchy == "/vCard/LABEL/PREF") { + currentAddressLabel_.isPreferred = true; + } + else if (elementHierarchy == "/vCard/LABEL/LINE") { + currentAddressLabel_.lines.push_back(currentText_); + } + else if (elementHierarchy == "/vCard/LABEL") { + getPayloadInternal()->addAddressLabel(currentAddressLabel_); + } + else if (elementHierarchy == "/vCard/JID" && !currentText_.empty()) { + getPayloadInternal()->addJID(JID(currentText_)); + } + else if (elementHierarchy == "/vCard/DESC") { + getPayloadInternal()->setDescription(currentText_); + } + else if (elementHierarchy == "/vCard/ORG/ORGNAME") { + currentOrganization_.name = currentText_; + } + else if (elementHierarchy == "/vCard/ORG/ORGUNIT" && !currentText_.empty()) { + currentOrganization_.units.push_back(currentText_); + } + else if (elementHierarchy == "/vCard/ORG") { + if (!currentOrganization_.name.empty() || !currentOrganization_.units.empty()) { + getPayloadInternal()->addOrganization(currentOrganization_); + } + } + else if (elementHierarchy == "/vCard/TITLE" && !currentText_.empty()) { + getPayloadInternal()->addTitle(currentText_); + } + else if (elementHierarchy == "/vCard/ROLE" && !currentText_.empty()) { + getPayloadInternal()->addRole(currentText_); + } + else if (elementHierarchy == "/vCard/URL" && !currentText_.empty()) { + getPayloadInternal()->addURL(currentText_); + } + else if (elementStack_.size() == 2 && unknownContentParser_) { + getPayloadInternal()->addUnknownContent(unknownContentParser_->getResult()); + } - if (elementStack_.size() == 2 && unknownContentParser_) { - delete unknownContentParser_; - unknownContentParser_ = NULL; - } - elementStack_.pop_back(); + if (elementStack_.size() == 2 && unknownContentParser_) { + delete unknownContentParser_; + unknownContentParser_ = NULL; + } + elementStack_.pop_back(); } void VCardParser::handleCharacterData(const std::string& text) { - if (unknownContentParser_) { - unknownContentParser_->handleCharacterData(text); - } - currentText_ += text; + if (unknownContentParser_) { + unknownContentParser_->handleCharacterData(text); + } + currentText_ += text; } std::string VCardParser::getElementHierarchy() const { - std::string result; - foreach(const std::string& element, elementStack_) { - result += "/" + element; - } - return result; + std::string result; + foreach(const std::string& element, elementStack_) { + result += "/" + element; + } + return result; } } |