Enable splitting of 4-digit times BC (in German)

This commit is contained in:
Joshua Ramon Enslin 2020-09-20 17:32:20 +02:00 committed by Stefan Rohde-Enslin
parent 974fe39cde
commit c0047a5956

View File

@ -48,6 +48,9 @@ final class NodaTimeSplitter {
"nach Chr." => "", "nach Chr." => "",
"n. Chr." => "", "n. Chr." => "",
"n.Chr." => "", "n.Chr." => "",
// To clean
"v.Chr." => "v. Chr.",
"v. Chr" => "v. Chr.",
]; ];
const STOP_STRINGS_GERMAN = [ const STOP_STRINGS_GERMAN = [
@ -114,6 +117,7 @@ final class NodaTimeSplitter {
while (strpos($input, " -") !== false) $input = str_replace(" -", "-", $input); while (strpos($input, " -") !== false) $input = str_replace(" -", "-", $input);
while (strpos($input, "- ") !== false) $input = str_replace("- ", "-", $input); while (strpos($input, "- ") !== false) $input = str_replace("- ", "-", $input);
$input = strtr($input, self::STRINGS_TO_CLEAN); $input = strtr($input, self::STRINGS_TO_CLEAN);
while (strpos($input, "..") !== false) $input = str_replace("..", ".", $input);
return trim($input, ", [](){}"); return trim($input, ", [](){}");
@ -174,7 +178,7 @@ final class NodaTimeSplitter {
$moda[0] = intval($moda[0]); $moda[0] = intval($moda[0]);
$moda[1] = intval($moda[1]); $moda[1] = intval($moda[1]);
if ($moda[0] > $moda[1]) { if ($moda[0] < 0 && $moda[1] < 0) {
$suffix = " v. Chr."; $suffix = " v. Chr.";
} }
else if ($moda[1] < 1000) { else if ($moda[1] < 1000) {
@ -182,6 +186,9 @@ final class NodaTimeSplitter {
} }
else $suffix = ""; else $suffix = "";
$moda[0] = abs($moda[0]);
$moda[1] = abs($moda[1]);
if ($moda[0] !== $moda[1]) { if ($moda[0] !== $moda[1]) {
return "{$moda[0]}-{$moda[1]}{$suffix}"; return "{$moda[0]}-{$moda[1]}{$suffix}";
} }
@ -209,7 +216,7 @@ final class NodaTimeSplitter {
*/ */
public static function timePartsToCountingYear(array $moda):int { public static function timePartsToCountingYear(array $moda):int {
return (int)ceil(intval($moda[1]) - ((intval($moda[1]) - intval($moda[0])) / 2)); return abs((int)ceil(intval($moda[1]) - ((intval($moda[1]) - intval($moda[0])) / 2)));
} }
@ -234,7 +241,7 @@ final class NodaTimeSplitter {
if (($newTimeName = self::timePartsToTimeName($moda)) !== "") { if (($newTimeName = self::timePartsToTimeName($moda)) !== "") {
$output .= "&zeit_name_neu={$newTimeName}"; $output .= "&zeit_name_neu={$newTimeName}";
} }
$output .= '&zeit_beginn_neu=' . $moda[0] . '&zeit_ende_neu=' . $moda[1] . '&zeit_zaehlzeit_vorzeichen_neu=%2B&zeit_zaehlzeit_jahr_neu=' . $zaehlzeit_jahr . '&zeit_zaehlzeit_monat_neu=' . $moda[2] . '&zeit_zaehlzeit_tag_neu=' . $moda[3] . '&zeit_status_neu=%2B" class="icons iconsBell buttonLike" id="splitTimeLink">+'; $output .= '&zeit_beginn_neu=' . $moda[0] . '&zeit_ende_neu=' . $moda[1] . '&zeit_zaehlzeit_vorzeichen_neu=' . urlencode($moda[4]) . '&zeit_zaehlzeit_jahr_neu=' . $zaehlzeit_jahr . '&zeit_zaehlzeit_monat_neu=' . $moda[2] . '&zeit_zaehlzeit_tag_neu=' . $moda[3] . '&zeit_status_neu=%2B" class="icons iconsBell buttonLike" id="splitTimeLink">+';
if (!empty($newTimeName)) { if (!empty($newTimeName)) {
$output .= $newTimeName; $output .= $newTimeName;
@ -282,6 +289,12 @@ final class NodaTimeSplitter {
$datum = self::clean_input($datum); $datum = self::clean_input($datum);
if (preg_match("/^[0-9][0-9][0-9][0-9](\-|\/)[0-9][0-9][0-9][0-9] v\. Chr\.$/", $datum)) {
$start = "-" . substr($datum, 0, 4);
$end = "-" . substr($datum, 5, 4);
return [$start, $end, "00", "00", "-"];
}
if (self::stri_occurs($datum, self::STOP_STRINGS_GERMAN)) { if (self::stri_occurs($datum, self::STOP_STRINGS_GERMAN)) {
return []; return [];
} }
@ -396,65 +409,63 @@ final class NodaTimeSplitter {
$datum = self::clean_input($datum); $datum = self::clean_input($datum);
if (preg_match("/^[0-9][0-9][0-9][0-9](-|\/)[0-9][0-9][0-9][0-9]$/", $datum)) { if (preg_match("/^[0-9][0-9][0-9][0-9](-|\/)[0-9][0-9][0-9][0-9]$/", $datum)) {
$start = substr($datum, 0, 4); $start = substr($datum, 0, 4);
$end = substr($datum, -4); $end = substr($datum, -4);
return [$start, $end, "00", "00"]; return [$start, $end, "00", "00", "+"];
} }
if (preg_match("/^[0-9][0-9]\.[0-9]\.[0-9][0-9][0-9][0-9]$/", $datum)) { // German T.MM.JJJJ if (preg_match("/^[0-9][0-9]\.[0-9]\.[0-9][0-9][0-9][0-9]$/", $datum)) { // German T.MM.JJJJ
$start = substr($datum, 5, 4); $start = substr($datum, 5, 4);
$month = "0" . substr($datum, 3, 1); $month = "0" . substr($datum, 3, 1);
$day = substr($datum, 0, 2); $day = substr($datum, 0, 2);
return [$start, $start, $month, $day]; return [$start, $start, $month, $day, "+"];
} }
if (preg_match("/^[0-9]\.[0-9][0-9]\.[0-9][0-9][0-9][0-9]$/", $datum)) { // German T.MM.JJJJ if (preg_match("/^[0-9]\.[0-9][0-9]\.[0-9][0-9][0-9][0-9]$/", $datum)) { // German T.MM.JJJJ
$start = substr($datum, 5, 4); $start = substr($datum, 5, 4);
$month = substr($datum, 2, 2); $month = substr($datum, 2, 2);
$day = "0" . substr($datum, 0, 1); $day = "0" . substr($datum, 0, 1);
return [$start, $start, $month, $day]; return [$start, $start, $month, $day, "+"];
} }
if (preg_match("/^[0-9]\.[0-9]\.[0-9][0-9][0-9][0-9]$/", $datum)) { // German T.M.JJJJ if (preg_match("/^[0-9]\.[0-9]\.[0-9][0-9][0-9][0-9]$/", $datum)) { // German T.M.JJJJ
$start = substr($datum, 4, 4); $start = substr($datum, 4, 4);
$month = "0" . substr($datum, 2, 1); $month = "0" . substr($datum, 2, 1);
$day = "0" . substr($datum, 0, 1); $day = "0" . substr($datum, 0, 1);
return [$start, $start, $month, $day]; return [$start, $start, $month, $day, "+"];
} }
if (preg_match("/^[0-9][0-9]\.[0-9][0-9][0-9][0-9]$/", $datum)) { // German Y-m if (preg_match("/^[0-9][0-9]\.[0-9][0-9][0-9][0-9]$/", $datum)) { // German Y-m
$start = substr($datum, 3, 4); $start = substr($datum, 3, 4);
$month = substr($datum, 0, 2); $month = substr($datum, 0, 2);
return [$start, $start, $month, "00"]; return [$start, $start, $month, "00", "+"];
} }
if (preg_match("/^[0-9]\.[0-9][0-9][0-9][0-9]$/", $datum)) { // German Y-m if (preg_match("/^[0-9]\.[0-9][0-9][0-9][0-9]$/", $datum)) { // German Y-m
$start = substr($datum, 2, 4); $start = substr($datum, 2, 4);
$month = "0" . substr($datum, 0, 1); $month = "0" . substr($datum, 0, 1);
return [$start, $start, $month, "00"]; return [$start, $start, $month, "00", "+"];
} }
if (preg_match("/^[0-9][0-9][0-9][0-9]\.[0-9][0-9]$/", $datum)) { // Hungarian Y-m if (preg_match("/^[0-9][0-9][0-9][0-9]\.[0-9][0-9]$/", $datum)) { // Hungarian Y-m
$start = substr($datum, 0, 4); $start = substr($datum, 0, 4);
$month = substr($datum, 5, 2); $month = substr($datum, 5, 2);
return [$start, $start, $month, "00"]; return [$start, $start, $month, "00", "+"];
} }
if (preg_match("/^[0-9][0-9][0-9][0-9]\-[0-9][0-9]$/", $datum)) { // Hungarian Y-m if (preg_match("/^[0-9][0-9][0-9][0-9]\-[0-9][0-9]$/", $datum)) { // Hungarian Y-m
$start = substr($datum, 0, 4); $start = substr($datum, 0, 4);
$endDigits = substr($datum, 5, 2); $endDigits = substr($datum, 5, 2);
if (intval($endDigits) > 12) return [$start, substr($datum, 0, 2) . $endDigits, "00", "00"]; if (intval($endDigits) > 12) return [$start, substr($datum, 0, 2) . $endDigits, "00", "00", "+"];
} }
if (preg_match("/^01\.01\.[0-9][0-9][0-9][0-9]\-31\.12\.[0-9][0-9][0-9][0-9]$/", $datum)) { // Hungarian Y-m if (preg_match("/^01\.01\.[0-9][0-9][0-9][0-9]\-31\.12\.[0-9][0-9][0-9][0-9]$/", $datum)) { // Hungarian Y-m
$start = substr($datum, 6, 4); $start = substr($datum, 6, 4);
$end = substr($datum, -4); $end = substr($datum, -4);
return [$start, $end, "00", "00"]; return [$start, $end, "00", "00", "+"];
} }
if (preg_match("/[0-9][0-9][0-9]\-[0-9][0-9][0-9]$/", $datum)) { // Hungarian Y-m if (preg_match("/[0-9][0-9][0-9]\-[0-9][0-9][0-9]$/", $datum)) { // Hungarian Y-m
$start = substr($datum, 0, 3); $start = substr($datum, 0, 3);
$end = substr($datum, -3); $end = substr($datum, -3);
if ($end > $start) return ["0" . $start, "0" . $end, "00", "00"]; if ($end > $start) return ["0" . $start, "0" . $end, "00", "00", "+"];
} }
if (preg_match("/^[0-9][0-9][0-9][0-9]$/", $datum)) { if (preg_match("/^[0-9][0-9][0-9][0-9]$/", $datum)) {
$start = substr($datum, 0, 4); $start = substr($datum, 0, 4);
return [$start, $start, "00", "00"]; return [$start, $start, "00", "00", "+"];
} }
return []; return [];