Skip to content

Commit

Permalink
Title case, performances, spme es function words seboettg#147
Browse files Browse the repository at this point in the history
  • Loading branch information
glorieux-f committed Aug 12, 2023
1 parent 75d49a3 commit 5a1d3f8
Showing 1 changed file with 78 additions and 45 deletions.
123 changes: 78 additions & 45 deletions src/Util/StringHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,57 +22,79 @@
class StringHelper
{
const PREPOSITIONS = [
'about',
'above',
'across',
'ago',
'at',
'below',
'by',
'before',
'de',
'du',
'for',
'from',
'in',
'into',
'of',
'off',
'on',
'onto',
'over',
'past',
'since',
'through',
'till',
'to',
'towards',
'under',
'until',
'via'
"a", // es
"ante", // es
'about', // en
'above', // en
'across', // en
'ago', // en
'at', // en
'bajo', // es
'below', // en
'by', // en
'before', // en
'cabe', // es
'con', // es
'contra', // es
'de', // es, fr
'del', // es
'desde', // es
'du', // fr
'en', // fr
'entre', // es
'for', // en
'from', // en
'hacia', // es
'in', // en
'into', // en
'of', // en
'off', // en
'on', // en
'onto', // en
'over', // en
'past', // en
'por', // es
'since', // en
'through', // en
'till', // en
'to', // en
'towards', // en
'under', // en
'until', // en
'versus', // en, es, fr
'via', // en, es, fr
];

const ARTICLES = [
'a',
'an',
'la',
'le',
'les',
'the',
'un',
'une',
'a', // en
'an', // en
'la', // fr
'le', // fr
'les', // fr
'the', // en
'un', // fr
'une', // fr
];

const ADVERBS = [
'yet', 'so', 'just', 'only'
'just', // en
'only', // en
'so', // en
'yet', // en
];

const CONJUNCTIONS = [
'nor', 'so', 'and', 'or'
'and', // en
"et", // fr
'nor', // en
'or', // en
'ou', // fr
'so', // en
];

const ADJECTIVES = [
'down', 'up'
'down',
'up',
];

const ISO_ENCODINGS = [
Expand Down Expand Up @@ -175,12 +197,23 @@ public static function capitalizeForTitle($titleString)
*/
public static function keepLowerCase($word)
{
// keep lower case words as a dictionary O(1)
static $lcDic = null;
// compile one time
if ($lcDic === null) {
$lcDic = array_flip(array_merge(
self::PREPOSITIONS,
self::ARTICLES,
self::ADVERBS,
self::CONJUNCTIONS,
self::ADJECTIVES,
));
}
if (isset($lcDic[$word])) return true;
// keep lower case if the first char is not an utf-8 letter
return in_array($word, self::PREPOSITIONS) ||
in_array($word, self::ARTICLES) ||
in_array($word, self::CONJUNCTIONS) ||
in_array($word, self::ADJECTIVES) ||
(bool) preg_match("/[^\p{L}].+/", $word);
if (preg_match("/^[^\p{L}]/u", $word)) return true;
// no info
return false;
}

/**
Expand Down Expand Up @@ -251,7 +284,7 @@ public static function implodeAndPreventConsecutiveChars($delimiter, $arrayOfStr
$text .= mb_substr($delimiter, mb_strpos($delimiter, $delimiterFirst) + 1);
continue;
}
// common cae, append simply the delimiter
// common case, append simply the delimiter
$text .= $delimiter;
}
return $text;
Expand Down

0 comments on commit 5a1d3f8

Please sign in to comment.