From bca32c33c7b3c8d318e4bbe1cec77750a68c70f1 Mon Sep 17 00:00:00 2001 From: Joshua Ramon Enslin Date: Sun, 12 Apr 2026 01:38:37 +0200 Subject: [PATCH] Timesplitter: Translate "(terminus post quem)" to since Close #39 --- src/NodaTimeSplitter.php | 17 +++++++++++++++++ tests/NodaTimeSplitterTest.php | 27 +++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/src/NodaTimeSplitter.php b/src/NodaTimeSplitter.php index 3b6c445..f542d17 100644 --- a/src/NodaTimeSplitter.php +++ b/src/NodaTimeSplitter.php @@ -917,6 +917,23 @@ final class NodaTimeSplitter { $output->counting_time_indicator, NodaTimeBeforeAfterIndicator::until, '?', $output->end_date); } } + if (str_ends_with($datum, "terminus ante quem")) { + if (($spacePos = \strrpos($datum, " ", -15)) === false) { + return false; + } + if ($output = self::attempt_splitting(\substr($datum, 0, $spacePos))) { + return self::_turn_noda_split_time_to_before($output); + } + } + if (\str_ends_with($datum, "termiusost quem")) { + if (($spacePos = strrpos($datum, " ", -10)) === false) { + return false; + } + if ($output = self::attempt_splitting(\substr($datum, 0, $spacePos))) { + return new NodaSplitTime($output->start_year, '?', $output->counting_time_month, $output->counting_time_day, + $output->counting_time_indicator, NodaTimeBeforeAfterIndicator::since, $output->start_date, '?'); + } + } // Ends beginning with a hyphen if (\preg_match("/\-ig(\.|)$/", $datum)) { if (($spacePos = strrpos($datum, "-")) === false) { diff --git a/tests/NodaTimeSplitterTest.php b/tests/NodaTimeSplitterTest.php index ebc545e..b67f883 100644 --- a/tests/NodaTimeSplitterTest.php +++ b/tests/NodaTimeSplitterTest.php @@ -764,6 +764,19 @@ final class NodaTimeSplitterTest extends TestCase { self::assertEquals($output->toTimeName(), "1920-1929"); self::assertEquals(NodaTimeSplitter::timePartsToCountingYear($output), 1925); + $output = NodaTimeSplitter::attempt_splitting("2020 (terminus ante quem)"); + self::assertNotEmpty($output); + self::assertEquals($output->toOldFormat(), [ + 0 => "?", + 1 => "2019", + 2 => "00", + 3 => "00", + 4 => "+", + 5 => "Vor", + ]); + self::assertEquals($output->toTimeName(), "Vor 2020"); + self::assertEquals(NodaTimeSplitter::timePartsToCountingYear($output), 2020); + $output = NodaTimeSplitter::attempt_splitting("Vor Dezember 2020"); self::assertNotEmpty($output); self::assertEquals($output->toOldFormat(), [ @@ -1271,6 +1284,20 @@ final class NodaTimeSplitterTest extends TestCase { self::assertEquals($output->toTimeName(), "Seit 1920"); self::assertEquals(NodaTimeSplitter::timePartsToCountingYear($output), 1920); + // From 1920 onwards + $output = NodaTimeSplitter::attempt_splitting("1926 (termius post quem)"); + self::assertNotEmpty($output); + self::assertEquals($output->toOldFormat(), [ + 0 => "1926", + 1 => "?", + 2 => "00", + 3 => "00", + 4 => "+", + 5 => "Seit", + ]); + self::assertEquals($output->toTimeName(), "Seit 1926"); + self::assertEquals(NodaTimeSplitter::timePartsToCountingYear($output), 1926); + $output = NodaTimeSplitter::attempt_splitting("III. század"); self::assertNotEmpty($output); self::assertEquals($output->toOldFormat(), [