Add automatic splitting and translation of centuries (CE)
This commit is contained in:
@ -525,6 +525,32 @@ final class NodaTimeSplitter {
|
||||
*/
|
||||
public static function is_incomplete_date(string $datum):array {
|
||||
|
||||
$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)) { // Hungarian Y-m
|
||||
$start = substr($datum, 0, 4);
|
||||
$month = substr($datum, 5, 2);
|
||||
$day = substr($datum, 8, 2);
|
||||
return [$start, "?", $month, $day, "+", ""];
|
||||
}
|
||||
if (preg_match("/^[0-9][0-9][0-9][0-9]\.[0-9][0-9]\-$/", $datum)) { // Hungarian Y-m
|
||||
$start = substr($datum, 0, 4);
|
||||
$month = substr($datum, 5, 2);
|
||||
return [$start, "?", $month, "00", "+", ""];
|
||||
}
|
||||
|
||||
if (preg_match("/^\-[0-9][0-9][0-9][0-9]\.[0-9][0-9]\.[0-9][0-9]$/", $datum)) { // Hungarian Y-m
|
||||
$start = substr($datum, 1, 4);
|
||||
$month = substr($datum, 6, 2);
|
||||
$day = substr($datum, 9, 2);
|
||||
return ["?", $start, $month, $day, "+", ""];
|
||||
}
|
||||
if (preg_match("/^\-[0-9][0-9][0-9][0-9]\.[0-9][0-9]$/", $datum)) { // Hungarian Y-m
|
||||
$start = substr($datum, 1, 4);
|
||||
$month = substr($datum, 6, 2);
|
||||
return ["?", $start, $month, "00", "+", ""];
|
||||
}
|
||||
|
||||
if (preg_match("/^(Ab|Seit|seit)\ /", $datum)) {
|
||||
if (($spacePos = strpos($datum, " ")) === false) {
|
||||
return [];
|
||||
@ -546,7 +572,7 @@ final class NodaTimeSplitter {
|
||||
}
|
||||
|
||||
// Endings beginning with a space
|
||||
if (preg_match("/ (\(bis\))$/", $datum)) {
|
||||
if (preg_match("/ (\(bis)$/", $datum)) {
|
||||
if (($spacePos = strrpos($datum, " ")) === false) {
|
||||
return [];
|
||||
}
|
||||
@ -569,6 +595,51 @@ final class NodaTimeSplitter {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if an input date is a century.
|
||||
*
|
||||
* @param string $datum Input date.
|
||||
*
|
||||
* @return array<string>
|
||||
*/
|
||||
public static function is_century(string $datum):array {
|
||||
|
||||
$datum = self::clean_input($datum);
|
||||
$bcBceIndicator = '+';
|
||||
|
||||
// 17. Jahrhundert
|
||||
if (preg_match("/^[0-9][0-9]\.\ (Jh\.|Jahrhundert|század)$/", $datum)) {
|
||||
if ($centuryNo = intval(substr($datum, 0, 2))) {
|
||||
$centuryNo--;
|
||||
return [(string)$centuryNo . "01", strval($centuryNo + 1) . "00", "00", "00", $bcBceIndicator, ""];
|
||||
}
|
||||
}
|
||||
|
||||
// 1. Jahrhundert
|
||||
if (preg_match("/^[0-9]\.\ (Jh\.|Jahrhundert|század)$/", $datum)) {
|
||||
echo "HI";
|
||||
if ($centuryNo = intval(substr($datum, 0, 1))) {
|
||||
$centuryNo--;
|
||||
return [(string)$centuryNo . "01", strval($centuryNo + 1) . "00", "00", "00", $bcBceIndicator, ""];
|
||||
}
|
||||
}
|
||||
|
||||
// 17.-18. Jahrhundert
|
||||
if (preg_match("/^[0-9][0-9]\.\-[0-9][0-9]\.\ (Jh\.|Jahrhundert|század)$/", $datum)) {
|
||||
return [(string)(intval(substr($datum, 0, 2)) - 1) . "01", substr($datum, 4, 2) . "00", "00", "00", $bcBceIndicator, ""];
|
||||
}
|
||||
if (preg_match("/^[0-9][0-9]\-[0-9][0-9]\.\ (Jh\.|Jahrhundert|század)$/", $datum)) {
|
||||
return [(string)(intval(substr($datum, 0, 2)) - 1) . "01", substr($datum, 3, 2) . "00", "00", "00", $bcBceIndicator, ""];
|
||||
}
|
||||
|
||||
if (preg_match("/^[0-9]\.\-[0-9]\.\ (Jh\.|Jahrhundert|század)$/", $datum)) {
|
||||
return [(string)(intval(substr($datum, 0, 1)) - 1) . "01", substr($datum, 3, 1) . "00", "00", "00", $bcBceIndicator, ""];
|
||||
}
|
||||
|
||||
return [];
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Wrapper to check if any splitting command works.
|
||||
*
|
||||
@ -582,6 +653,7 @@ final class NodaTimeSplitter {
|
||||
if (!$moda) $moda = NodaTimeSplitter::is_incomplete_date($datum);
|
||||
if (!$moda) $moda = NodaTimeSplitter::is_valid_date($datum);
|
||||
if (!$moda) $moda = NodaTimeSplitter::is_valid_date_hungarian($datum);
|
||||
if (!$moda) $moda = NodaTimeSplitter::is_century($datum);
|
||||
|
||||
return $moda;
|
||||
|
||||
|
Reference in New Issue
Block a user