iOS: Name/Marke per Text scannen + Frischedatum ohne Jahr erkennen
- Neuer TextScanView: beim Anlegen Name und Marke per Texterkennung einlesen (erkannte Zeilen antippen, wie beim MHD-Scan) - kein Abtippen mehr, wenn ein Produkt nicht in Open Food/Products Facts steht. - BestBeforeText erkennt jetzt auch Tag.Monat ohne Jahr (z.B. "05.01" bei Frischware / "zu verbrauchen bis") und ergaenzt das aktuelle Jahr (bzw. das naechste, falls schon vergangen). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -31,6 +31,10 @@ enum BestBeforeText {
|
||||
(#"(\d{1,2})[./-](\d{4})"#, ["m", "y"], "month"),
|
||||
(#"(\d{4})[./-](\d{1,2})(?!\d)"#, ["y", "m"], "month"),
|
||||
(#"(\d{1,2})[./-](\d{2})(?!\d)"#, ["m", "Y"], "month"),
|
||||
// Nur Tag und Monat, kein Jahr (z.B. „05.01" bei Frischware / „zu
|
||||
// verbrauchen bis"). Das Jahr ergänzt build(). Steht bewusst zuletzt,
|
||||
// damit Muster mit Jahr Vorrang haben.
|
||||
(#"(\d{1,2})[./-](\d{1,2})(?!\d)"#, ["d", "m"], "day"),
|
||||
]
|
||||
|
||||
/// Alle plausiblen Daten aus einem Textstueck, in Fundreihenfolge und ohne Dubletten.
|
||||
@@ -73,6 +77,18 @@ enum BestBeforeText {
|
||||
jahr = vier
|
||||
} else if let zwei = teile["Y"] {
|
||||
jahr = 2000 + zwei
|
||||
} else if precision == "day", let tag = teile["d"] {
|
||||
// Kein Jahr aufgedruckt (Frischware): aktuelles Jahr annehmen; liegt
|
||||
// das Datum schon in der Vergangenheit, das nächste Jahr nehmen.
|
||||
let cal = Calendar.current
|
||||
let aktuell = cal.component(.year, from: Date())
|
||||
var probe = DateComponents()
|
||||
probe.year = aktuell; probe.month = monat; probe.day = tag
|
||||
if let d = cal.date(from: probe), d < cal.startOfDay(for: Date()) {
|
||||
jahr = aktuell + 1
|
||||
} else {
|
||||
jahr = aktuell
|
||||
}
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user