Parse a bare trailing "a" as AM in AcroForm date/time parsing

Found while testing crates/forms/src/af.rs:638-642 and 750-755 (parse_date)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
NetterSilver
2026-10-20 19:30:45 +02:00
co-authored by Claude Haiku 5.5
parent 22bedbf2af
commit 4125bddbae
2 changed files with 12 additions and 1 deletions
+2 -1
View File
@@ -639,7 +639,8 @@ pub fn parse_date(text: &str, fmt: &str) -> Option<DateTime> {
// A bare trailing "p" ("5:30p") only counts when it follows a digit, not a word like "Sep".
let bare_p = lower.strip_suffix('p').is_some_and(|rest| rest.trim_end().ends_with(|c: char| c.is_ascii_digit()));
let pm = lower.contains("pm") || bare_p;
let am = lower.contains("am");
let bare_a = lower.strip_suffix('a').is_some_and(|rest| rest.trim_end().ends_with(|c: char| c.is_ascii_digit()));
let am = lower.contains("am") || bare_a;
// Tokens: runs of digits (kept as text, so a run can be split between fields typed without
// separators) and month names.
let mut nums: VecDeque<String> = VecDeque::new();
+10
View File
@@ -0,0 +1,10 @@
use pdfcraft_forms::af::parse_date;
#[test]
fn bare_a_suffix_is_am() {
assert_eq!(parse_date("12:05 a", "h:MM t").map(|d| d.hh), Some(0));
assert_eq!(parse_date("12:30a", "h:MM t").map(|d| d.hh), Some(0));
assert_eq!(parse_date("5:30 a", "h:MM t").map(|d| d.hh), Some(5));
assert_eq!(parse_date("5:30p", "h:MM t").map(|d| d.hh), Some(17));
assert_eq!(parse_date("12:05 p", "h:MM t").map(|d| d.hh), Some(12));
}