Improve the sorting function in order to deal with incipits like "Ite IIb" or "Kyrie XVIIa".

This commit is contained in:
Olivier Berten 2013-03-03 13:59:19 +01:00
parent ce9d672287
commit 7ea1b10331

View File

@ -52,16 +52,21 @@ $hours = array('matins','lauds','prime','terce','sext','none','vespers','complin
function custom_split($str) {
global $days, $hours;
$test = preg_split('/(?=[a-z]+[^A-Z]?)|(?<=\D)\d|(?<=\d)\D|[ \.,\(\)]/', $str,0,PREG_SPLIT_NO_EMPTY);
$test = preg_split('/(?<=\D)\d|(?<=\d)\D|[ \.,\(\)]/', $str,0,PREG_SPLIT_NO_EMPTY);
$i = 1;
while(count($test) > $i) {
if(ctype_alpha($test[$i]) && ctype_alpha($test[$i-1]) &&
!RomanNumber::IsRomanNumber($test[$i]) && !RomanNumber::IsRomanNumber($test[$i-1]) &&
!(RomanNumber::IsRomanNumber(substr($test[$i],0,-1)) && in_array(substr($test[$i],-1), array('a','b','c'))) &&
!in_array(strtolower($test[$i]),$days) && !in_array(strtolower($test[$i-1]),$days) &&
!in_array(strtolower($test[$i]),$hours) && !in_array(strtolower($test[$i-1]),$hours)) {
$test[$i-1] = $test[$i-1].$test[$i];
unset($test[$i]);
$test = array_values($test);
} elseif(RomanNumber::IsRomanNumber(substr($test[$i],0,-1)) && in_array(substr($test[$i],-1), array('a','b','c'))) {
array_splice($test, $i+1, 0, array(substr($test[$i],-1)));
$test[$i] = substr($test[$i],0,-1);
$i+=2;
} else {
$i++;
}