Add the option to disable validation when reading vCards.
This commit is contained in:
@@ -27,7 +27,7 @@ proc add*[T](vc: VCard, content: varargs[T]): void =
|
|||||||
if vc.parsedVersion == VCardV3: add(cast[VCard3](vc), content)
|
if vc.parsedVersion == VCardV3: add(cast[VCard3](vc), content)
|
||||||
else: add(cast[VCard4](vc), content)
|
else: add(cast[VCard4](vc), content)
|
||||||
|
|
||||||
proc readVCard*(p: var VCardParser): VCard =
|
proc readVCard*(p: var VCardParser, validate = true): VCard =
|
||||||
# Read the preamble
|
# Read the preamble
|
||||||
discard p.readGroup
|
discard p.readGroup
|
||||||
p.expect("begin:vcard" & CRLF)
|
p.expect("begin:vcard" & CRLF)
|
||||||
@@ -55,13 +55,14 @@ proc readVCard*(p: var VCardParser): VCard =
|
|||||||
if result.parsedVersion == VCardV3:
|
if result.parsedVersion == VCardV3:
|
||||||
while (p.skip(CRLF, true)): discard
|
while (p.skip(CRLF, true)): discard
|
||||||
|
|
||||||
try:
|
if validate:
|
||||||
if result.parsedVersion == VCardV3:
|
try:
|
||||||
cast[VCard3](result).validate()
|
if result.parsedVersion == VCardV3:
|
||||||
else:
|
cast[VCard3](result).validate()
|
||||||
cast[VCard4](result).validate()
|
else:
|
||||||
except ValueError as exc:
|
cast[VCard4](result).validate()
|
||||||
p.error(exc.msg)
|
except ValueError as exc:
|
||||||
|
p.error(exc.msg)
|
||||||
|
|
||||||
proc initVCardParser*(input: Stream, filename = "input"): VCardParser =
|
proc initVCardParser*(input: Stream, filename = "input"): VCardParser =
|
||||||
result.filename = filename
|
result.filename = filename
|
||||||
@@ -73,12 +74,12 @@ proc initVCardParser*(content: string, filename = "input"): VCardParser =
|
|||||||
proc initVCardParserFromFile*(filepath: string): VCardParser =
|
proc initVCardParserFromFile*(filepath: string): VCardParser =
|
||||||
initVCardParser(newFileStream(filepath, fmRead), filepath)
|
initVCardParser(newFileStream(filepath, fmRead), filepath)
|
||||||
|
|
||||||
proc parseVCards*(input: Stream, filename = "input"): seq[VCard] =
|
proc parseVCards*(input: Stream, filename = "input", validate = true): seq[VCard] =
|
||||||
var p = initVCardParser(input, filename)
|
var p = initVCardParser(input, filename)
|
||||||
while p.peek != '\0': result.add(p.readVCard)
|
while p.peek != '\0': result.add(p.readVCard(validate))
|
||||||
|
|
||||||
proc parseVCards*(content: string, filename = "input"): seq[VCard] =
|
proc parseVCards*(content: string, filename = "input", validate = true): seq[VCard] =
|
||||||
parseVCards(newStringStream(content), filename)
|
parseVCards(newStringStream(content), filename, validate)
|
||||||
|
|
||||||
proc parseVCardsFromFile*(filepath: string): seq[VCard] =
|
proc parseVCardsFromFile*(filepath: string, validate = true): seq[VCard] =
|
||||||
parseVCards(newFileStream(filepath, fmRead), filepath)
|
parseVCards(newFileStream(filepath, fmRead), filepath, validate)
|
||||||
|
|||||||
Reference in New Issue
Block a user