diff --git a/VisualCard.Tests/ContactData.cs b/VisualCard.Tests/ContactData.cs index 65fa1ad..30a4743 100644 --- a/VisualCard.Tests/ContactData.cs +++ b/VisualCard.Tests/ContactData.cs @@ -356,11 +356,11 @@ public static class ContactData "John Sanders", new TelephoneInfo[] { - new TelephoneInfo(0, new string[] { "TYPE=cell" }, new string[] { "cell" }, "495-522-3560") + new TelephoneInfo(0, Array.Empty(), new string[] { "cell" }, "495-522-3560") }, new AddressInfo[] { - new AddressInfo(0, new string[] { "TYPE=home" }, new string[] { "home" }, "", "", "Los Angeles, USA", "", "", "", "") + new AddressInfo(0, Array.Empty(), new string[] { "home" }, "", "", "Los Angeles, USA", "", "", "", "") }, new OrganizationInfo[] { @@ -374,7 +374,7 @@ public static class ContactData "Note test for VisualCard", new EmailInfo[] { - new EmailInfo(0, new string[] { "TYPE=HOME" }, new string[] { "HOME" }, "john.s@acme.co") + new EmailInfo(0, Array.Empty(), new string[] { "HOME" }, "john.s@acme.co") }, new XNameInfo[] { @@ -835,15 +835,15 @@ public static class ContactData "Neville Navasquillo", new TelephoneInfo[] { - new TelephoneInfo(0, new string[] { "TYPE=work" }, new string[] { "work" }, "098-765-4321"), - new TelephoneInfo(0, new string[] { "TYPE=cell" }, new string[] { "cell" }, "1-234-567-890"), - new TelephoneInfo(0, new string[] { "TYPE=voice" }, new string[] { "voice" }, "078-494-6434"), - new TelephoneInfo(0, new string[] { "TYPE=home" }, new string[] { "home" }, "348-404-8404"), + new TelephoneInfo(0, Array.Empty(), new string[] { "work" }, "098-765-4321"), + new TelephoneInfo(0, Array.Empty(), new string[] { "cell" }, "1-234-567-890"), + new TelephoneInfo(0, Array.Empty(), new string[] { "voice" }, "078-494-6434"), + new TelephoneInfo(0, Array.Empty(), new string[] { "home" }, "348-404-8404"), }, new AddressInfo[] { - new AddressInfo(0, new string[] { "TYPE=work" }, new string[] { "work" }, "POBOX", "", "Street Address ExtAddress", "Reg", "Loc", "Postal", "Country"), - new AddressInfo(0, new string[] { "TYPE=home" }, new string[] { "home" }, "", "", "Street Address", "", "", "", ""), + new AddressInfo(0, Array.Empty(), new string[] { "work" }, "POBOX", "", "Street Address ExtAddress", "Reg", "Loc", "Postal", "Country"), + new AddressInfo(0, Array.Empty(), new string[] { "home" }, "", "", "Street Address", "", "", "", ""), }, new OrganizationInfo[] { @@ -857,8 +857,8 @@ public static class ContactData "Notes", new EmailInfo[] { - new EmailInfo(0, new string[] { "TYPE=HOME" }, new string[] { "HOME" }, "neville.nvs@gmail.com"), - new EmailInfo(0, new string[] { "TYPE=WORK" }, new string[] { "WORK" }, "neville.nvs@nvsc.com"), + new EmailInfo(0, Array.Empty(), new string[] { "HOME" }, "neville.nvs@gmail.com"), + new EmailInfo(0, Array.Empty(), new string[] { "WORK" }, "neville.nvs@nvsc.com"), }, new XNameInfo[] { @@ -880,9 +880,9 @@ public static class ContactData Array.Empty(), new ImppInfo[] { - new ImppInfo(0, new string[] { "TYPE=HOME" }, "aim:IM", new string[] { "HOME" }), - new ImppInfo(0, new string[] { "TYPE=HOME" }, "msn:Windows LIVE", new string[] { "HOME" }), - new ImppInfo(0, new string[] { "TYPE=HOME" }, "ymsgr:Yahoo", new string[] { "HOME" }) + new ImppInfo(0, Array.Empty(), "aim:IM", new string[] { "HOME" }), + new ImppInfo(0, Array.Empty(), "msn:Windows LIVE", new string[] { "HOME" }), + new ImppInfo(0, Array.Empty(), "ymsgr:Yahoo", new string[] { "HOME" }) } ); private static readonly Card multipleVcardFourContactsInstanceThree = new @@ -896,11 +896,11 @@ public static class ContactData "Sarah Santos", new TelephoneInfo[] { - new TelephoneInfo(0, new string[] { "TYPE=cell" }, new string[] { "cell" }, "589-210-1059") + new TelephoneInfo(0, Array.Empty(), new string[] { "cell" }, "589-210-1059") }, new AddressInfo[] { - new AddressInfo(0, new string[] { "TYPE=home" }, new string[] { "home" }, "", "", "New York, USA", "", "", "", "") + new AddressInfo(0, Array.Empty(), new string[] { "home" }, "", "", "New York, USA", "", "", "", "") }, new OrganizationInfo[] { @@ -914,8 +914,8 @@ public static class ContactData "", new EmailInfo[] { - new EmailInfo(0, new string[] { "TYPE=HOME" }, new string[] { "HOME" }, "sarah.s@gmail.com"), - new EmailInfo(0, new string[] { "TYPE=WORK" }, new string[] { "WORK" }, "sarah.s@sso.org"), + new EmailInfo(0, Array.Empty(), new string[] { "HOME" }, "sarah.s@gmail.com"), + new EmailInfo(0, Array.Empty(), new string[] { "WORK" }, "sarah.s@sso.org"), }, new XNameInfo[] { diff --git a/VisualCard/Parsers/Four/VcardFour.cs b/VisualCard/Parsers/Four/VcardFour.cs index 6a3bce4..91515ed 100644 --- a/VisualCard/Parsers/Four/VcardFour.cs +++ b/VisualCard/Parsers/Four/VcardFour.cs @@ -124,10 +124,13 @@ public override Card Parse() } // Finalize the arguments - if (splitArgs[0].StartsWith(VcardConstants._altIdArgumentSpecifier)) - finalArgs.AddRange(splitArgs.Except(new string[] { splitArgs[0] })); - else - finalArgs.AddRange(splitArgs); + finalArgs.AddRange(splitArgs.Except( + splitArgs.Where((arg) => + arg.StartsWith(VcardConstants._altIdArgumentSpecifier) || + arg.StartsWith(VcardConstants._valueArgumentSpecifier) || + arg.StartsWith(VcardConstants._typeArgumentSpecifier) + ) + )); } // Card type (KIND:individual, KIND:group, KIND:org, KIND:location, ...) diff --git a/VisualCard/Parts/AddressInfo.cs b/VisualCard/Parts/AddressInfo.cs index 3be9592..eb29890 100644 --- a/VisualCard/Parts/AddressInfo.cs +++ b/VisualCard/Parts/AddressInfo.cs @@ -159,7 +159,7 @@ internal string ToStringVcardThree() internal string ToStringVcardFour() { - bool installAltId = AltId > 0 && AltArguments.Length > 0; + bool installAltId = AltId >= 0 && AltArguments.Length > 0; return $"{VcardConstants._addressSpecifierWithType}" + $"{(installAltId ? "ALTID=" + AltId + VcardConstants._fieldDelimiter : "")}" + diff --git a/VisualCard/Parts/EmailInfo.cs b/VisualCard/Parts/EmailInfo.cs index ad4b5ee..7f54e4c 100644 --- a/VisualCard/Parts/EmailInfo.cs +++ b/VisualCard/Parts/EmailInfo.cs @@ -109,7 +109,7 @@ internal string ToStringVcardThree() internal string ToStringVcardFour() { - bool installAltId = AltId > 0 && AltArguments.Length > 0; + bool installAltId = AltId >= 0 && AltArguments.Length > 0; return $"{VcardConstants._emailSpecifier}" + $"{(installAltId ? "ALTID=" + AltId + VcardConstants._fieldDelimiter : "")}" + diff --git a/VisualCard/Parts/GeoInfo.cs b/VisualCard/Parts/GeoInfo.cs index 833ab3b..f59b0d1 100644 --- a/VisualCard/Parts/GeoInfo.cs +++ b/VisualCard/Parts/GeoInfo.cs @@ -107,7 +107,7 @@ internal string ToStringVcardThree() internal string ToStringVcardFour() { - bool installAltId = AltId > 0 && AltArguments.Length > 0; + bool installAltId = AltId >= 0 && AltArguments.Length > 0; return $"{(installAltId ? VcardConstants._geoSpecifierWithType : VcardConstants._geoSpecifier)}" + $"{(installAltId ? "ALTID=" + AltId + VcardConstants._fieldDelimiter : "")}" + diff --git a/VisualCard/Parts/ImppInfo.cs b/VisualCard/Parts/ImppInfo.cs index fc9c081..bdf399b 100644 --- a/VisualCard/Parts/ImppInfo.cs +++ b/VisualCard/Parts/ImppInfo.cs @@ -109,7 +109,7 @@ internal string ToStringVcardThree() internal string ToStringVcardFour() { - bool installAltId = AltId > 0 && AltArguments.Length > 0; + bool installAltId = AltId >= 0 && AltArguments.Length > 0; return $"{(installAltId ? VcardConstants._imppSpecifierWithType : VcardConstants._imppSpecifier)}" + $"{(installAltId ? "ALTID=" + AltId + VcardConstants._fieldDelimiter : "")}" + diff --git a/VisualCard/Parts/LogoInfo.cs b/VisualCard/Parts/LogoInfo.cs index 7532389..5984ad3 100644 --- a/VisualCard/Parts/LogoInfo.cs +++ b/VisualCard/Parts/LogoInfo.cs @@ -148,7 +148,7 @@ internal string ToStringVcardThree() internal string ToStringVcardFour() { - bool installAltId = AltId > 0 && AltArguments.Length > 0; + bool installAltId = AltId >= 0 && AltArguments.Length > 0; if (ValueType == "uri" || ValueType == "url") { return diff --git a/VisualCard/Parts/NameInfo.cs b/VisualCard/Parts/NameInfo.cs index 295b097..52aca11 100644 --- a/VisualCard/Parts/NameInfo.cs +++ b/VisualCard/Parts/NameInfo.cs @@ -140,7 +140,7 @@ internal string ToStringVcardThree() internal string ToStringVcardFour() { - bool installAltId = AltId > 0 && AltArguments.Length > 0; + bool installAltId = AltId >= 0 && AltArguments.Length > 0; string altNamesStr = string.Join(VcardConstants._valueDelimiter.ToString(), AltNames); string prefixesStr = string.Join(VcardConstants._valueDelimiter.ToString(), Prefixes); string suffixesStr = string.Join(VcardConstants._valueDelimiter.ToString(), Suffixes); diff --git a/VisualCard/Parts/NicknameInfo.cs b/VisualCard/Parts/NicknameInfo.cs index 4b22597..42f9417 100644 --- a/VisualCard/Parts/NicknameInfo.cs +++ b/VisualCard/Parts/NicknameInfo.cs @@ -106,7 +106,7 @@ internal string ToStringVcardThree() internal string ToStringVcardFour() { - bool installAltId = AltId > 0 && AltArguments.Length > 0; + bool installAltId = AltId >= 0 && AltArguments.Length > 0; return $"{(installAltId ? VcardConstants._nicknameSpecifierWithType : VcardConstants._nicknameSpecifier)}" + $"{(installAltId ? "ALTID=" + AltId + VcardConstants._fieldDelimiter : "")}" + diff --git a/VisualCard/Parts/OrganizationInfo.cs b/VisualCard/Parts/OrganizationInfo.cs index 34af4d0..97e6023 100644 --- a/VisualCard/Parts/OrganizationInfo.cs +++ b/VisualCard/Parts/OrganizationInfo.cs @@ -127,7 +127,7 @@ internal string ToStringVcardThree() internal string ToStringVcardFour() { - bool installAltId = AltId > 0 && AltArguments.Length > 0; + bool installAltId = AltId >= 0 && AltArguments.Length > 0; bool installType = (installAltId || OrgTypes.Length > 0) && OrgTypes[0].ToUpper() != "WORK"; return $"{(installType ? VcardConstants._orgSpecifierWithType : VcardConstants._orgSpecifier)}" + diff --git a/VisualCard/Parts/PhotoInfo.cs b/VisualCard/Parts/PhotoInfo.cs index 523ed35..df50c8c 100644 --- a/VisualCard/Parts/PhotoInfo.cs +++ b/VisualCard/Parts/PhotoInfo.cs @@ -148,7 +148,7 @@ internal string ToStringVcardThree() internal string ToStringVcardFour() { - bool installAltId = AltId > 0 && AltArguments.Length > 0; + bool installAltId = AltId >= 0 && AltArguments.Length > 0; if (ValueType == "uri" || ValueType == "url") { return diff --git a/VisualCard/Parts/RoleInfo.cs b/VisualCard/Parts/RoleInfo.cs index c7fa8dd..3f34f62 100644 --- a/VisualCard/Parts/RoleInfo.cs +++ b/VisualCard/Parts/RoleInfo.cs @@ -102,7 +102,7 @@ internal string ToStringVcardThree() internal string ToStringVcardFour() { - bool installAltId = AltId > 0 && AltArguments.Length > 0; + bool installAltId = AltId >= 0 && AltArguments.Length > 0; return $"{(installAltId ? VcardConstants._roleSpecifierWithType : VcardConstants._roleSpecifier)}" + $"{(installAltId ? "ALTID=" + AltId + VcardConstants._fieldDelimiter : "")}" + diff --git a/VisualCard/Parts/SoundInfo.cs b/VisualCard/Parts/SoundInfo.cs index 0133607..09a8b41 100644 --- a/VisualCard/Parts/SoundInfo.cs +++ b/VisualCard/Parts/SoundInfo.cs @@ -148,7 +148,7 @@ internal string ToStringVcardThree() internal string ToStringVcardFour() { - bool installAltId = AltId > 0 && AltArguments.Length > 0; + bool installAltId = AltId >= 0 && AltArguments.Length > 0; if (ValueType == "uri" || ValueType == "url") { return diff --git a/VisualCard/Parts/TelephoneInfo.cs b/VisualCard/Parts/TelephoneInfo.cs index 6076bcc..797cb1f 100644 --- a/VisualCard/Parts/TelephoneInfo.cs +++ b/VisualCard/Parts/TelephoneInfo.cs @@ -109,7 +109,7 @@ internal string ToStringVcardThree() internal string ToStringVcardFour() { - bool installAltId = AltId > 0 && AltArguments.Length > 0; + bool installAltId = AltId >= 0 && AltArguments.Length > 0; return $"{VcardConstants._telephoneSpecifierWithType}" + $"{(installAltId ? "ALTID=" + AltId + VcardConstants._fieldDelimiter : "")}" + diff --git a/VisualCard/Parts/TimeZoneInfo.cs b/VisualCard/Parts/TimeZoneInfo.cs index 00dc6b9..7512e0a 100644 --- a/VisualCard/Parts/TimeZoneInfo.cs +++ b/VisualCard/Parts/TimeZoneInfo.cs @@ -107,7 +107,7 @@ internal string ToStringVcardThree() internal string ToStringVcardFour() { - bool installAltId = AltId > 0 && AltArguments.Length > 0; + bool installAltId = AltId >= 0 && AltArguments.Length > 0; return $"{(installAltId ? VcardConstants._timeZoneSpecifierWithType : VcardConstants._timeZoneSpecifier)}" + $"{(installAltId ? "ALTID=" + AltId + VcardConstants._fieldDelimiter : "")}" + diff --git a/VisualCard/Parts/TitleInfo.cs b/VisualCard/Parts/TitleInfo.cs index d1f5b1b..ad457f1 100644 --- a/VisualCard/Parts/TitleInfo.cs +++ b/VisualCard/Parts/TitleInfo.cs @@ -101,7 +101,7 @@ internal string ToStringVcardThree() internal string ToStringVcardFour() { - bool installAltId = AltId > 0 && AltArguments.Length > 0; + bool installAltId = AltId >= 0 && AltArguments.Length > 0; return $"{(installAltId ? VcardConstants._titleSpecifierWithArguments : VcardConstants._titleSpecifier)}" + $"{(installAltId ? "ALTID=" + AltId + VcardConstants._fieldDelimiter : "")}" + diff --git a/VisualCard/Parts/XNameInfo.cs b/VisualCard/Parts/XNameInfo.cs index dea8a21..44704fe 100644 --- a/VisualCard/Parts/XNameInfo.cs +++ b/VisualCard/Parts/XNameInfo.cs @@ -118,8 +118,8 @@ internal string ToStringVcardThree() internal string ToStringVcardFour() { - bool installAltId = AltId > 0; - bool installType = installAltId || XKeyTypes.Length > 0; + bool installAltId = AltId >= 0 && AltArguments.Length > 0; + bool installType = installAltId && XKeyTypes.Length > 0; return $"{VcardConstants._xSpecifier}" + $"{XKeyName}{(installType ? VcardConstants._fieldDelimiter : VcardConstants._argumentDelimiter)}" +