diff --git a/Cargo.toml b/Cargo.toml index a949a63..63ce39f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "vcard4" -version = "0.5.0" +version = "0.5.1" edition = "2021" description = "Fast and correct vCard parser for RFC6350" repository = "https://github.com/tmpfs/vcard4" diff --git a/src/parser.rs b/src/parser.rs index 081490f..57bb7fd 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -82,7 +82,7 @@ pub(crate) enum Token { #[regex("(?i:END:VCARD)")] End, - #[regex(".", priority = 0)] + #[regex("[\u{00}-\u{7F}]", priority = 0)] Text, } @@ -153,7 +153,6 @@ impl<'s> VcardParser<'s> { card: &mut Vcard, ) -> Result<()> { while let Some(first) = lex.next() { - //println!("{:#?} {}", first, &self.source[lex.span()]); if first == Ok(Token::End) { break; } diff --git a/tests/fold.rs b/tests/fold.rs index ff6005f..67a6e66 100644 --- a/tests/fold.rs +++ b/tests/fold.rs @@ -4,6 +4,25 @@ use anyhow::Result; use test_helpers::assert_round_trip; use vcard4::parse; +#[test] +fn parse_multi_byte() -> Result<()> { + let input = r#"BEGIN:VCARD +VERSION:4.0 +FN:Mr. + John Qö + Public\, + Esqö +END:VCARD"#; + let mut vcards = parse(input)?; + assert_eq!(1, vcards.len()); + + let card = vcards.remove(0); + let fname = card.formatted_name.get(0).unwrap(); + assert_eq!("Mr. John Qö Public, Esqö", fname.value); + assert_round_trip(&card)?; + Ok(()) +} + #[test] fn parse_folded_space() -> Result<()> { let input = r#"BEGIN:VCARD