[ Index ]

PHP Cross Reference of Joomla 4.2.2 documentation

title

Body

[close]

/administrator/components/com_finder/src/Indexer/Language/ -> El.php (source)

   1  <?php
   2  
   3  /**
   4   * @package     Joomla.Administrator
   5   * @subpackage  com_finder
   6   *
   7   * @copyright   (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
   8   * @license     GNU General Public License version 2 or later; see LICENSE.txt
   9   *
  10   * The Greek stemmer was adapted for Joomla! 4 by Nicholas K. Dionysopoulos <[email protected]>. This is
  11   * derivative work, based on the Greek stemmer for Drupal, see
  12   * https://github.com/magaras/greek_stemmer/blob/master/mod_stemmer.php
  13   */
  14  
  15  namespace Joomla\Component\Finder\Administrator\Indexer\Language;
  16  
  17  use Joomla\Component\Finder\Administrator\Indexer\Language;
  18  
  19  // phpcs:disable PSR1.Files.SideEffects
  20  \defined('_JEXEC') or die;
  21  // phpcs:enable PSR1.Files.SideEffects
  22  
  23  /**
  24   * Greek language support class for the Finder indexer package.
  25   *
  26   * @since  4.0.0
  27   */
  28  class El extends Language
  29  {
  30      /**
  31       * Language locale of the class
  32       *
  33       * @var    string
  34       * @since  4.0.0
  35       */
  36      public $language = 'el';
  37  
  38      /**
  39       * Method to construct the language object.
  40       *
  41       * @since   4.0.0
  42       */
  43      public function __construct($locale = null)
  44      {
  45          // Override parent constructor since we don't need to load an external stemmer
  46      }
  47  
  48      /**
  49       * Method to tokenise a text string. It takes into account the odd punctuation commonly used in Greek text, mapping
  50       * it to ASCII punctuation.
  51       *
  52       * Reference: http://www.teicrete.gr/users/kutrulis/Glosika/Stixi.htm
  53       *
  54       * @param string $input The input to tokenise.
  55       *
  56       * @return  array  An array of term strings.
  57       *
  58       * @since   4.0.0
  59       */
  60      public function tokenise($input)
  61      {
  62          // Replace Greek calligraphic double quotes (various styles) to dumb double quotes
  63          $input = str_replace(['“', '”', '„', '«' ,'»'], '"', $input);
  64  
  65          // Replace Greek calligraphic single quotes (various styles) to dumb single quotes
  66          $input = str_replace(['‘','’','‚'], "'", $input);
  67  
  68          // Replace the middle dot (ano teleia) with a comma, adequate for the purpose of stemming
  69          $input = str_replace('·', ',', $input);
  70  
  71          // Dot and dash (τελεία και παύλα), used to denote the end of a context at the end of a paragraph.
  72          $input = str_replace('.–', '.', $input);
  73  
  74          // Ellipsis, two styles (separate dots or single glyph)
  75          $input = str_replace(['...', '…'], '.', $input);
  76  
  77          // Cross. Marks the death date of a person. Removed.
  78          $input = str_replace('†', '', $input);
  79  
  80          // Star. Reference, supposition word (in philology), birth date of a person.
  81          $input = str_replace('*', '', $input);
  82  
  83          // Paragraph. Indicates change of subject.
  84          $input = str_replace('§', '.', $input);
  85  
  86          // Plus/minus. Shows approximation. Not relevant for the stemmer, hence its conversion to a space.
  87          $input = str_replace('±', ' ', $input);
  88  
  89          return parent::tokenise($input);
  90      }
  91  
  92      /**
  93       * Method to stem a token.
  94       *
  95       * @param   string  $token  The token to stem.
  96       *
  97       * @return  string  The stemmed token.
  98       *
  99       * @since   4.0.0
 100       */
 101      public function stem($token)
 102      {
 103          $token = $this->toUpperCase($token, $wCase);
 104  
 105          // Stop-word removal
 106          $stop_words = '/^(ΕΚΟ|ΑΒΑ|ΑΓΑ|ΑΓΗ|ΑΓΩ|ΑΔΗ|ΑΔΩ|ΑΕ|ΑΕΙ|ΑΘΩ|ΑΙ|ΑΙΚ|ΑΚΗ|ΑΚΟΜΑ|ΑΚΟΜΗ|ΑΚΡΙΒΩΣ|ΑΛΑ|ΑΛΗΘΕΙΑ|ΑΛΗΘΙΝΑ|ΑΛΛΑΧΟΥ|ΑΛΛΙΩΣ|ΑΛΛΙΩΤΙΚΑ|'
 107                  . 'ΑΛΛΟΙΩΣ|ΑΛΛΟΙΩΤΙΚΑ|ΑΛΛΟΤΕ|ΑΛΤ|ΑΛΩ|ΑΜΑ|ΑΜΕ|ΑΜΕΣΑ|ΑΜΕΣΩΣ|ΑΜΩ|ΑΝ|ΑΝΑ|ΑΝΑΜΕΣΑ|ΑΝΑΜΕΤΑΞΥ|ΑΝΕΥ|ΑΝΤΙ|ΑΝΤΙΠΕΡΑ|ΑΝΤΙΣ|ΑΝΩ|ΑΝΩΤΕΡΩ|ΑΞΑΦΝΑ|'
 108                  . 'ΑΠ|ΑΠΕΝΑΝΤΙ|ΑΠΟ|ΑΠΟΨΕ|ΑΠΩ|ΑΡΑ|ΑΡΑΓΕ|ΑΡΕ|ΑΡΚ|ΑΡΚΕΤΑ|ΑΡΛ|ΑΡΜ|ΑΡΤ|ΑΡΥ|ΑΡΩ|ΑΣ|ΑΣΑ|ΑΣΟ|ΑΤΑ|ΑΤΕ|ΑΤΗ|ΑΤΙ|ΑΤΜ|ΑΤΟ|ΑΥΡΙΟ|ΑΦΗ|ΑΦΟΤΟΥ|ΑΦΟΥ|'
 109                  . 'ΑΧ|ΑΧΕ|ΑΧΟ|ΑΨΑ|ΑΨΕ|ΑΨΗ|ΑΨΥ|ΑΩΕ|ΑΩΟ|ΒΑΝ|ΒΑΤ|ΒΑΧ|ΒΕΑ|ΒΕΒΑΙΟΤΑΤΑ|ΒΗΞ|ΒΙΑ|ΒΙΕ|ΒΙΗ|ΒΙΟ|ΒΟΗ|ΒΟΩ|ΒΡΕ|ΓΑ|ΓΑΒ|ΓΑΡ|ΓΕΝ|ΓΕΣ||ΓΗ|ΓΗΝ|ΓΙ|ΓΙΑ|'
 110                  . 'ΓΙΕ|ΓΙΝ|ΓΙΟ|ΓΚΙ|ΓΙΑΤΙ|ΓΚΥ|ΓΟΗ|ΓΟΟ|ΓΡΗΓΟΡΑ|ΓΡΙ|ΓΡΥ|ΓΥΗ|ΓΥΡΩ|ΔΑ|ΔΕ|ΔΕΗ|ΔΕΙ|ΔΕΝ|ΔΕΣ|ΔΗ|ΔΗΘΕΝ|ΔΗΛΑΔΗ|ΔΗΩ|ΔΙ|ΔΙΑ|ΔΙΑΡΚΩΣ|ΔΙΟΛΟΥ|ΔΙΣ|'
 111                  . 'ΔΙΧΩΣ|ΔΟΛ|ΔΟΝ|ΔΡΑ|ΔΡΥ|ΔΡΧ|ΔΥΕ|ΔΥΟ|ΔΩ|ΕΑΜ|ΕΑΝ|ΕΑΡ|ΕΘΗ|ΕΙ|ΕΙΔΕΜΗ|ΕΙΘΕ|ΕΙΜΑΙ|ΕΙΜΑΣΤΕ|ΕΙΝΑΙ|ΕΙΣ|ΕΙΣΑΙ|ΕΙΣΑΣΤΕ|ΕΙΣΤΕ|ΕΙΤΕ|ΕΙΧΑ|ΕΙΧΑΜΕ|'
 112                  . 'ΕΙΧΑΝ|ΕΙΧΑΤΕ|ΕΙΧΕ|ΕΙΧΕΣ|ΕΚ|ΕΚΕΙ|ΕΛΑ|ΕΛΙ|ΕΜΠ|ΕΝ|ΕΝΤΕΛΩΣ|ΕΝΤΟΣ|ΕΝΤΩΜΕΤΑΞΥ|ΕΝΩ|ΕΞ|ΕΞΑΦΝΑ|ΕΞΙ|ΕΞΙΣΟΥ|ΕΞΩ|ΕΟΚ|ΕΠΑΝΩ|ΕΠΕΙΔΗ|ΕΠΕΙΤΑ|ΕΠΗ|'
 113                  . 'ΕΠΙ|ΕΠΙΣΗΣ|ΕΠΟΜΕΝΩΣ|ΕΡΑ|ΕΣ|ΕΣΑΣ|ΕΣΕ|ΕΣΕΙΣ|ΕΣΕΝΑ|ΕΣΗ|ΕΣΤΩ|ΕΣΥ|ΕΣΩ|ΕΤΙ|ΕΤΣΙ|ΕΥ|ΕΥΑ|ΕΥΓΕ|ΕΥΘΥΣ|ΕΥΤΥΧΩΣ|ΕΦΕ|ΕΦΕΞΗΣ|ΕΦΤ|ΕΧΕ|ΕΧΕΙ|'
 114                  . 'ΕΧΕΙΣ|ΕΧΕΤΕ|ΕΧΘΕΣ|ΕΧΟΜΕ|ΕΧΟΥΜΕ|ΕΧΟΥΝ|ΕΧΤΕΣ|ΕΧΩ|ΕΩΣ|ΖΕΑ|ΖΕΗ|ΖΕΙ|ΖΕΝ|ΖΗΝ|ΖΩ|Η|ΗΔΗ|ΗΔΥ|ΗΘΗ|ΗΛΟ|ΗΜΙ|ΗΠΑ|ΗΣΑΣΤΕ|ΗΣΟΥΝ|ΗΤΑ|ΗΤΑΝ|ΗΤΑΝΕ|'
 115                  . 'ΗΤΟΙ|ΗΤΤΟΝ|ΗΩ|ΘΑ|ΘΥΕ|ΘΩΡ|Ι|ΙΑ|ΙΒΟ|ΙΔΗ|ΙΔΙΩΣ|ΙΕ|ΙΙ|ΙΙΙ|ΙΚΑ|ΙΛΟ|ΙΜΑ|ΙΝΑ|ΙΝΩ|ΙΞΕ|ΙΞΟ|ΙΟ|ΙΟΙ|ΙΣΑ|ΙΣΑΜΕ|ΙΣΕ|ΙΣΗ|ΙΣΙΑ|ΙΣΟ|ΙΣΩΣ|ΙΩΒ|ΙΩΝ|'
 116                  . 'ΙΩΣ|ΙΑΝ|ΚΑΘ|ΚΑΘΕ|ΚΑΘΕΤΙ|ΚΑΘΟΛΟΥ|ΚΑΘΩΣ|ΚΑΙ|ΚΑΝ|ΚΑΠΟΤΕ|ΚΑΠΟΥ|ΚΑΠΩΣ|ΚΑΤ|ΚΑΤΑ|ΚΑΤΙ|ΚΑΤΙΤΙ|ΚΑΤΟΠΙΝ|ΚΑΤΩ|ΚΑΩ|ΚΒΟ|ΚΕΑ|ΚΕΙ|ΚΕΝ|ΚΙ|ΚΙΜ|'
 117                  . 'ΚΙΟΛΑΣ|ΚΙΤ|ΚΙΧ|ΚΚΕ|ΚΛΙΣΕ|ΚΛΠ|ΚΟΚ|ΚΟΝΤΑ|ΚΟΧ|ΚΤΛ|ΚΥΡ|ΚΥΡΙΩΣ|ΚΩ|ΚΩΝ|ΛΑ|ΛΕΑ|ΛΕΝ|ΛΕΟ|ΛΙΑ|ΛΙΓΑΚΙ|ΛΙΓΟΥΛΑΚΙ|ΛΙΓΟ|ΛΙΓΩΤΕΡΟ|ΛΙΟ|ΛΙΡ|ΛΟΓΩ|'
 118                  . 'ΛΟΙΠΑ|ΛΟΙΠΟΝ|ΛΟΣ|ΛΣ|ΛΥΩ|ΜΑ|ΜΑΖΙ|ΜΑΚΑΡΙ|ΜΑΛΙΣΤΑ|ΜΑΛΛΟΝ|ΜΑΝ|ΜΑΞ|ΜΑΣ|ΜΑΤ|ΜΕ|ΜΕΘΑΥΡΙΟ|ΜΕΙ|ΜΕΙΟΝ|ΜΕΛ|ΜΕΛΕΙ|ΜΕΛΛΕΤΑΙ|ΜΕΜΙΑΣ|ΜΕΝ|ΜΕΣ|'
 119                  . 'ΜΕΣΑ|ΜΕΤ|ΜΕΤΑ|ΜΕΤΑΞΥ|ΜΕΧΡΙ|ΜΗ|ΜΗΔΕ|ΜΗΝ|ΜΗΠΩΣ|ΜΗΤΕ|ΜΙ|ΜΙΞ|ΜΙΣ|ΜΜΕ|ΜΝΑ|ΜΟΒ|ΜΟΛΙΣ|ΜΟΛΟΝΟΤΙ|ΜΟΝΑΧΑ|ΜΟΝΟΜΙΑΣ|ΜΙΑ|ΜΟΥ|ΜΠΑ|ΜΠΟΡΕΙ|'
 120                  . 'ΜΠΟΡΟΥΝ|ΜΠΡΑΒΟ|ΜΠΡΟΣ|ΜΠΩ|ΜΥ|ΜΥΑ|ΜΥΝ|ΝΑ|ΝΑΕ|ΝΑΙ|ΝΑΟ|ΝΔ|ΝΕΐ|ΝΕΑ|ΝΕΕ|ΝΕΟ|ΝΙ|ΝΙΑ|ΝΙΚ|ΝΙΛ|ΝΙΝ|ΝΙΟ|ΝΤΑ|ΝΤΕ|ΝΤΙ|ΝΤΟ|ΝΥΝ|ΝΩΕ|ΝΩΡΙΣ|ΞΑΝΑ|'
 121                  . 'ΞΑΦΝΙΚΑ|ΞΕΩ|ΞΙ|Ο|ΟΑ|ΟΑΠ|ΟΔΟ|ΟΕ|ΟΖΟ|ΟΗΕ|ΟΙ|ΟΙΑ|ΟΙΗ|ΟΚΑ|ΟΛΟΓΥΡΑ|ΟΛΟΝΕΝ|ΟΛΟΤΕΛΑ|ΟΛΩΣΔΙΟΛΟΥ|ΟΜΩΣ|ΟΝ|ΟΝΕ|ΟΝΟ|ΟΠΑ|ΟΠΕ|ΟΠΗ|ΟΠΟ|'
 122                  . 'ΟΠΟΙΑΔΗΠΟΤΕ|ΟΠΟΙΑΝΔΗΠΟΤΕ|ΟΠΟΙΑΣΔΗΠΟΤΕ|ΟΠΟΙΔΗΠΟΤΕ|ΟΠΟΙΕΣΔΗΠΟΤΕ|ΟΠΟΙΟΔΗΠΟΤΕ|ΟΠΟΙΟΝΔΗΠΟΤΕ|ΟΠΟΙΟΣΔΗΠΟΤΕ|ΟΠΟΙΟΥΔΗΠΟΤΕ|ΟΠΟΙΟΥΣΔΗΠΟΤΕ|'
 123                  . 'ΟΠΟΙΩΝΔΗΠΟΤΕ|ΟΠΟΤΕΔΗΠΟΤΕ|ΟΠΟΥ|ΟΠΟΥΔΗΠΟΤΕ|ΟΠΩΣ|ΟΡΑ|ΟΡΕ|ΟΡΗ|ΟΡΟ|ΟΡΦ|ΟΡΩ|ΟΣΑ|ΟΣΑΔΗΠΟΤΕ|ΟΣΕ|ΟΣΕΣΔΗΠΟΤΕ|ΟΣΗΔΗΠΟΤΕ|ΟΣΗΝΔΗΠΟΤΕ|'
 124                  . 'ΟΣΗΣΔΗΠΟΤΕ|ΟΣΟΔΗΠΟΤΕ|ΟΣΟΙΔΗΠΟΤΕ|ΟΣΟΝΔΗΠΟΤΕ|ΟΣΟΣΔΗΠΟΤΕ|ΟΣΟΥΔΗΠΟΤΕ|ΟΣΟΥΣΔΗΠΟΤΕ|ΟΣΩΝΔΗΠΟΤΕ|ΟΤΑΝ|ΟΤΕ|ΟΤΙ|ΟΤΙΔΗΠΟΤΕ|ΟΥ|ΟΥΔΕ|ΟΥΚ|ΟΥΣ|'
 125                  . 'ΟΥΤΕ|ΟΥΦ|ΟΧΙ|ΟΨΑ|ΟΨΕ|ΟΨΗ|ΟΨΙ|ΟΨΟ|ΠΑ|ΠΑΛΙ|ΠΑΝ|ΠΑΝΤΟΤΕ|ΠΑΝΤΟΥ|ΠΑΝΤΩΣ|ΠΑΠ|ΠΑΡ|ΠΑΡΑ|ΠΕΙ|ΠΕΡ|ΠΕΡΑ|ΠΕΡΙ|ΠΕΡΙΠΟΥ|ΠΕΡΣΙ|ΠΕΡΥΣΙ|ΠΕΣ|ΠΙ|'
 126                  . 'ΠΙΑ|ΠΙΘΑΝΟΝ|ΠΙΚ|ΠΙΟ|ΠΙΣΩ|ΠΙΤ|ΠΙΩ|ΠΛΑΙ|ΠΛΕΟΝ|ΠΛΗΝ|ΠΛΩ|ΠΜ|ΠΟΑ|ΠΟΕ|ΠΟΛ|ΠΟΛΥ|ΠΟΠ|ΠΟΤΕ|ΠΟΥ|ΠΟΥΘΕ|ΠΟΥΘΕΝΑ|ΠΡΕΠΕΙ|ΠΡΙ|ΠΡΙΝ|ΠΡΟ|'
 127                  . 'ΠΡΟΚΕΙΜΕΝΟΥ|ΠΡΟΚΕΙΤΑΙ|ΠΡΟΠΕΡΣΙ|ΠΡΟΣ|ΠΡΟΤΟΥ|ΠΡΟΧΘΕΣ|ΠΡΟΧΤΕΣ|ΠΡΩΤΥΤΕΡΑ|ΠΥΑ|ΠΥΞ|ΠΥΟ|ΠΥΡ|ΠΧ|ΠΩ|ΠΩΛ|ΠΩΣ|ΡΑ|ΡΑΙ|ΡΑΠ|ΡΑΣ|ΡΕ|ΡΕΑ|ΡΕΕ|ΡΕΙ|'
 128                  . 'ΡΗΣ|ΡΘΩ|ΡΙΟ|ΡΟ|ΡΟΐ|ΡΟΕ|ΡΟΖ|ΡΟΗ|ΡΟΘ|ΡΟΙ|ΡΟΚ|ΡΟΛ|ΡΟΝ|ΡΟΣ|ΡΟΥ|ΣΑΙ|ΣΑΝ|ΣΑΟ|ΣΑΣ|ΣΕ|ΣΕΙΣ|ΣΕΚ|ΣΕΞ|ΣΕΡ|ΣΕΤ|ΣΕΦ|ΣΗΜΕΡΑ|ΣΙ|ΣΙΑ|ΣΙΓΑ|ΣΙΚ|'
 129                  . 'ΣΙΧ|ΣΚΙ|ΣΟΙ|ΣΟΚ|ΣΟΛ|ΣΟΝ|ΣΟΣ|ΣΟΥ|ΣΡΙ|ΣΤΑ|ΣΤΗ|ΣΤΗΝ|ΣΤΗΣ|ΣΤΙΣ|ΣΤΟ|ΣΤΟΝ|ΣΤΟΥ|ΣΤΟΥΣ|ΣΤΩΝ|ΣΥ|ΣΥΓΧΡΟΝΩΣ|ΣΥΝ|ΣΥΝΑΜΑ|ΣΥΝΕΠΩΣ|ΣΥΝΗΘΩΣ|'
 130                  . 'ΣΧΕΔΟΝ|ΣΩΣΤΑ|ΤΑ|ΤΑΔΕ|ΤΑΚ|ΤΑΝ|ΤΑΟ|ΤΑΥ|ΤΑΧΑ|ΤΑΧΑΤΕ|ΤΕ|ΤΕΙ|ΤΕΛ|ΤΕΛΙΚΑ|ΤΕΛΙΚΩΣ|ΤΕΣ|ΤΕΤ|ΤΖΟ|ΤΗ|ΤΗΛ|ΤΗΝ|ΤΗΣ|ΤΙ|ΤΙΚ|ΤΙΜ|ΤΙΠΟΤΑ|ΤΙΠΟΤΕ|'
 131                  . 'ΤΙΣ|ΤΝΤ|ΤΟ|ΤΟΙ|ΤΟΚ|ΤΟΜ|ΤΟΝ|ΤΟΠ|ΤΟΣ|ΤΟΣ?Ν|ΤΟΣΑ|ΤΟΣΕΣ|ΤΟΣΗ|ΤΟΣΗΝ|ΤΟΣΗΣ|ΤΟΣΟ|ΤΟΣΟΙ|ΤΟΣΟΝ|ΤΟΣΟΣ|ΤΟΣΟΥ|ΤΟΣΟΥΣ|ΤΟΤΕ|ΤΟΥ|ΤΟΥΛΑΧΙΣΤΟ|'
 132                  . 'ΤΟΥΛΑΧΙΣΤΟΝ|ΤΟΥΣ|ΤΣ|ΤΣΑ|ΤΣΕ|ΤΥΧΟΝ|ΤΩ|ΤΩΝ|ΤΩΡΑ|ΥΑΣ|ΥΒΑ|ΥΒΟ|ΥΙΕ|ΥΙΟ|ΥΛΑ|ΥΛΗ|ΥΝΙ|ΥΠ|ΥΠΕΡ|ΥΠΟ|ΥΠΟΨΗ|ΥΠΟΨΙΝ|ΥΣΤΕΡΑ|ΥΦΗ|ΥΨΗ|ΦΑ|ΦΑΐ|ΦΑΕ|'
 133                  . 'ΦΑΝ|ΦΑΞ|ΦΑΣ|ΦΑΩ|ΦΕΖ|ΦΕΙ|ΦΕΤΟΣ|ΦΕΥ|ΦΙ|ΦΙΛ|ΦΙΣ|ΦΟΞ|ΦΠΑ|ΦΡΙ|ΧΑ|ΧΑΗ|ΧΑΛ|ΧΑΝ|ΧΑΦ|ΧΕ|ΧΕΙ|ΧΘΕΣ|ΧΙ|ΧΙΑ|ΧΙΛ|ΧΙΟ|ΧΛΜ|ΧΜ|ΧΟΗ|ΧΟΛ|ΧΡΩ|ΧΤΕΣ|'
 134                  . 'ΧΩΡΙΣ|ΧΩΡΙΣΤΑ|ΨΕΣ|ΨΗΛΑ|ΨΙ|ΨΙΤ|Ω|ΩΑ|ΩΑΣ|ΩΔΕ|ΩΕΣ|ΩΘΩ|ΩΜΑ|ΩΜΕ|ΩΝ|ΩΟ|ΩΟΝ|ΩΟΥ|ΩΣ|ΩΣΑΝ|ΩΣΗ|ΩΣΟΤΟΥ|ΩΣΠΟΥ|ΩΣΤΕ|ΩΣΤΟΣΟ|ΩΤΑ|ΩΧ|ΩΩΝ)$/';
 135  
 136          if (preg_match($stop_words, $token)) {
 137              return $this->toLowerCase($token, $wCase);
 138          }
 139  
 140          // Vowels
 141          $v = '(Α|Ε|Η|Ι|Ο|Υ|Ω)';
 142  
 143          // Vowels without Y
 144          $v2 = '(Α|Ε|Η|Ι|Ο|Ω)';
 145  
 146          $test1 = true;
 147  
 148          // Step S1. 14 stems
 149          $re       = '/^(.+?)(ΙΖΑ|ΙΖΕΣ|ΙΖΕ|ΙΖΑΜΕ|ΙΖΑΤΕ|ΙΖΑΝ|ΙΖΑΝΕ|ΙΖΩ|ΙΖΕΙΣ|ΙΖΕΙ|ΙΖΟΥΜΕ|ΙΖΕΤΕ|ΙΖΟΥΝ|ΙΖΟΥΝΕ)$/';
 150          $exceptS1 = '/^(ΑΝΑΜΠΑ|ΕΜΠΑ|ΕΠΑ|ΞΑΝΑΠΑ|ΠΑ|ΠΕΡΙΠΑ|ΑΘΡΟ|ΣΥΝΑΘΡΟ|ΔΑΝΕ)$/';
 151          $exceptS2 = '/^(ΜΑΡΚ|ΚΟΡΝ|ΑΜΠΑΡ|ΑΡΡ|ΒΑΘΥΡΙ|ΒΑΡΚ|Β|ΒΟΛΒΟΡ|ΓΚΡ|ΓΛΥΚΟΡ|ΓΛΥΚΥΡ|ΙΜΠ|Λ|ΛΟΥ|ΜΑΡ|Μ|ΠΡ|ΜΠΡ|ΠΟΛΥΡ|Π|Ρ|ΠΙΠΕΡΟΡ)$/';
 152  
 153          if (preg_match($re, $token, $match)) {
 154              $token = $match[1];
 155  
 156              if (preg_match($exceptS1, $token)) {
 157                  $token = $token . 'I';
 158              }
 159  
 160              if (preg_match($exceptS2, $token)) {
 161                  $token = $token . 'IΖ';
 162              }
 163  
 164              return $this->toLowerCase($token, $wCase);
 165          }
 166  
 167          // Step S2. 7 stems
 168          $re       = '/^(.+?)(ΩΘΗΚΑ|ΩΘΗΚΕΣ|ΩΘΗΚΕ|ΩΘΗΚΑΜΕ|ΩΘΗΚΑΤΕ|ΩΘΗΚΑΝ|ΩΘΗΚΑΝΕ)$/';
 169          $exceptS1 = '/^(ΑΛ|ΒΙ|ΕΝ|ΥΨ|ΛΙ|ΖΩ|Σ|Χ)$/';
 170  
 171          if (preg_match($re, $token, $match)) {
 172              $token = $match[1];
 173  
 174              if (preg_match($exceptS1, $token)) {
 175                  $token = $token . 'ΩΝ';
 176              }
 177  
 178              return $this->toLowerCase($token, $wCase);
 179          }
 180  
 181          // Step S3. 7 stems
 182          $re       = '/^(.+?)(ΙΣΑ|ΙΣΕΣ|ΙΣΕ|ΙΣΑΜΕ|ΙΣΑΤΕ|ΙΣΑΝ|ΙΣΑΝΕ)$/';
 183          $exceptS1 = '/^(ΑΝΑΜΠΑ|ΑΘΡΟ|ΕΜΠΑ|ΕΣΕ|ΕΣΩΚΛΕ|ΕΠΑ|ΞΑΝΑΠΑ|ΕΠΕ|ΠΕΡΙΠΑ|ΑΘΡΟ|ΣΥΝΑΘΡΟ|ΔΑΝΕ|ΚΛΕ|ΧΑΡΤΟΠΑ|ΕΞΑΡΧΑ|ΜΕΤΕΠΕ|ΑΠΟΚΛΕ|ΑΠΕΚΛΕ|ΕΚΛΕ|ΠΕ|ΠΕΡΙΠΑ)$/';
 184          $exceptS2 = '/^(ΑΝ|ΑΦ|ΓΕ|ΓΙΓΑΝΤΟΑΦ|ΓΚΕ|ΔΗΜΟΚΡΑΤ|ΚΟΜ|ΓΚ|Μ|Π|ΠΟΥΚΑΜ|ΟΛΟ|ΛΑΡ)$/';
 185  
 186          if ($token == "ΙΣΑ") {
 187              $token = "ΙΣ";
 188  
 189              return $token;
 190          }
 191  
 192          if (preg_match($re, $token, $match)) {
 193              $token = $match[1];
 194  
 195              if (preg_match($exceptS1, $token)) {
 196                  $token = $token . 'Ι';
 197              }
 198  
 199              if (preg_match($exceptS2, $token)) {
 200                  $token = $token . 'ΙΣ';
 201              }
 202  
 203              return $this->toLowerCase($token, $wCase);
 204          }
 205  
 206          // Step S4. 7 stems
 207          $re       = '/^(.+?)(ΙΣΩ|ΙΣΕΙΣ|ΙΣΕΙ|ΙΣΟΥΜΕ|ΙΣΕΤΕ|ΙΣΟΥΝ|ΙΣΟΥΝΕ)$/';
 208          $exceptS1 = '/^(ΑΝΑΜΠΑ|ΕΜΠΑ|ΕΣΕ|ΕΣΩΚΛΕ|ΕΠΑ|ΞΑΝΑΠΑ|ΕΠΕ|ΠΕΡΙΠΑ|ΑΘΡΟ|ΣΥΝΑΘΡΟ|ΔΑΝΕ|ΚΛΕ|ΧΑΡΤΟΠΑ|ΕΞΑΡΧΑ|ΜΕΤΕΠΕ|ΑΠΟΚΛΕ|ΑΠΕΚΛΕ|ΕΚΛΕ|ΠΕ|ΠΕΡΙΠΑ)$/';
 209  
 210          if (preg_match($re, $token, $match)) {
 211              $token = $match[1];
 212  
 213              if (preg_match($exceptS1, $token)) {
 214                  $token = $token . 'Ι';
 215              }
 216  
 217              return $this->toLowerCase($token, $wCase);
 218          }
 219  
 220          // Step S5. 11 stems
 221          $re       = '/^(.+?)(ΙΣΤΟΣ|ΙΣΤΟΥ|ΙΣΤΟ|ΙΣΤΕ|ΙΣΤΟΙ|ΙΣΤΩΝ|ΙΣΤΟΥΣ|ΙΣΤΗ|ΙΣΤΗΣ|ΙΣΤΑ|ΙΣΤΕΣ)$/';
 222          $exceptS1 = '/^(Μ|Π|ΑΠ|ΑΡ|ΗΔ|ΚΤ|ΣΚ|ΣΧ|ΥΨ|ΦΑ|ΧΡ|ΧΤ|ΑΚΤ|ΑΟΡ|ΑΣΧ|ΑΤΑ|ΑΧΝ|ΑΧΤ|ΓΕΜ|ΓΥΡ|ΕΜΠ|ΕΥΠ|ΕΧΘ|ΗΦΑ|ΚΑΘ|ΚΑΚ|ΚΥΛ|ΛΥΓ|ΜΑΚ|ΜΕΓ|ΤΑΧ|ΦΙΛ|ΧΩΡ)$/';
 223          $exceptS2 = '/^(ΔΑΝΕ|ΣΥΝΑΘΡΟ|ΚΛΕ|ΣΕ|ΕΣΩΚΛΕ|ΑΣΕ|ΠΛΕ)$/';
 224  
 225          if (preg_match($re, $token, $match)) {
 226              $token = $match[1];
 227  
 228              if (preg_match($exceptS1, $token)) {
 229                  $token = $token . 'ΙΣΤ';
 230              }
 231  
 232              if (preg_match($exceptS2, $token)) {
 233                  $token = $token . 'Ι';
 234              }
 235  
 236              return $this->toLowerCase($token, $wCase);
 237          }
 238  
 239          // Step S6. 6 stems
 240          $re       = '/^(.+?)(ΙΣΜΟ|ΙΣΜΟΙ|ΙΣΜΟΣ|ΙΣΜΟΥ|ΙΣΜΟΥΣ|ΙΣΜΩΝ)$/';
 241          $exceptS1 = '/^(ΑΓΝΩΣΤΙΚ|ΑΤΟΜΙΚ|ΓΝΩΣΤΙΚ|ΕΘΝΙΚ|ΕΚΛΕΚΤΙΚ|ΣΚΕΠΤΙΚ|ΤΟΠΙΚ)$/';
 242          $exceptS2 = '/^(ΣΕ|ΜΕΤΑΣΕ|ΜΙΚΡΟΣΕ|ΕΓΚΛΕ|ΑΠΟΚΛΕ)$/';
 243          $exceptS3 = '/^(ΔΑΝΕ|ΑΝΤΙΔΑΝΕ)$/';
 244          $exceptS4 = '/^(ΑΛΕΞΑΝΔΡΙΝ|ΒΥΖΑΝΤΙΝ|ΘΕΑΤΡΙΝ)$/';
 245  
 246          if (preg_match($re, $token, $match)) {
 247              $token = $match[1];
 248  
 249              if (preg_match($exceptS1, $token)) {
 250                  $token = str_replace('ΙΚ', "", $token);
 251              }
 252  
 253              if (preg_match($exceptS2, $token)) {
 254                  $token = $token . "ΙΣΜ";
 255              }
 256  
 257              if (preg_match($exceptS3, $token)) {
 258                  $token = $token . "Ι";
 259              }
 260  
 261              if (preg_match($exceptS4, $token)) {
 262                  $token = str_replace('ΙΝ', "", $token);
 263              }
 264  
 265              return $this->toLowerCase($token, $wCase);
 266          }
 267  
 268          // Step S7. 4 stems
 269          $re       = '/^(.+?)(ΑΡΑΚΙ|ΑΡΑΚΙΑ|ΟΥΔΑΚΙ|ΟΥΔΑΚΙΑ)$/';
 270          $exceptS1 = '/^(Σ|Χ)$/';
 271  
 272          if (preg_match($re, $token, $match)) {
 273              $token = $match[1];
 274  
 275              if (preg_match($exceptS1, $token)) {
 276                  $token = $token . "AΡΑΚ";
 277              }
 278  
 279              return $this->toLowerCase($token, $wCase);
 280          }
 281  
 282          // Step S8. 8 stems
 283          $re       = '/^(.+?)(ΑΚΙ|ΑΚΙΑ|ΙΤΣΑ|ΙΤΣΑΣ|ΙΤΣΕΣ|ΙΤΣΩΝ|ΑΡΑΚΙ|ΑΡΑΚΙΑ)$/';
 284          $exceptS1 = '/^(ΑΝΘΡ|ΒΑΜΒ|ΒΡ|ΚΑΙΜ|ΚΟΝ|ΚΟΡ|ΛΑΒΡ|ΛΟΥΛ|ΜΕΡ|ΜΟΥΣΤ|ΝΑΓΚΑΣ|ΠΛ|Ρ|ΡΥ|Σ|ΣΚ|ΣΟΚ|ΣΠΑΝ|ΤΖ|ΦΑΡΜ|Χ|'
 285                  . 'ΚΑΠΑΚ|ΑΛΙΣΦ|ΑΜΒΡ|ΑΝΘΡ|Κ|ΦΥΛ|ΚΑΤΡΑΠ|ΚΛΙΜ|ΜΑΛ|ΣΛΟΒ|Φ|ΣΦ|ΤΣΕΧΟΣΛΟΒ)$/';
 286          $exceptS2 = '/^(Β|ΒΑΛ|ΓΙΑΝ|ΓΛ|Ζ|ΗΓΟΥΜΕΝ|ΚΑΡΔ|ΚΟΝ|ΜΑΚΡΥΝ|ΝΥΦ|ΠΑΤΕΡ|Π|ΣΚ|ΤΟΣ|ΤΡΙΠΟΛ)$/';
 287  
 288          // For words like ΠΛΟΥΣΙΟΚΟΡΙΤΣΑ, ΠΑΛΙΟΚΟΡΙΤΣΑ etc
 289          $exceptS3 = '/(ΚΟΡ)$/';
 290  
 291          if (preg_match($re, $token, $match)) {
 292              $token = $match[1];
 293  
 294              if (preg_match($exceptS1, $token)) {
 295                  $token = $token . "ΑΚ";
 296              }
 297  
 298              if (preg_match($exceptS2, $token)) {
 299                  $token = $token . "ΙΤΣ";
 300              }
 301  
 302              if (preg_match($exceptS3, $token)) {
 303                  $token = $token . "ΙΤΣ";
 304              }
 305  
 306              return $this->toLowerCase($token, $wCase);
 307          }
 308  
 309          // Step S9. 3 stems
 310          $re       = '/^(.+?)(ΙΔΙΟ|ΙΔΙΑ|ΙΔΙΩΝ)$/';
 311          $exceptS1 = '/^(ΑΙΦΝ|ΙΡ|ΟΛΟ|ΨΑΛ)$/';
 312          $exceptS2 = '/(Ε|ΠΑΙΧΝ)$/';
 313  
 314          if (preg_match($re, $token, $match)) {
 315              $token = $match[1];
 316  
 317              if (preg_match($exceptS1, $token)) {
 318                  $token = $token . "ΙΔ";
 319              }
 320  
 321              if (preg_match($exceptS2, $token)) {
 322                  $token = $token . "ΙΔ";
 323              }
 324  
 325              return $this->toLowerCase($token, $wCase);
 326          }
 327  
 328          // Step S10. 4 stems
 329          $re       = '/^(.+?)(ΙΣΚΟΣ|ΙΣΚΟΥ|ΙΣΚΟ|ΙΣΚΕ)$/';
 330          $exceptS1 = '/^(Δ|ΙΒ|ΜΗΝ|Ρ|ΦΡΑΓΚ|ΛΥΚ|ΟΒΕΛ)$/';
 331  
 332          if (preg_match($re, $token, $match)) {
 333              $token = $match[1];
 334  
 335              if (preg_match($exceptS1, $token)) {
 336                  $token = $token . "ΙΣΚ";
 337              }
 338  
 339              return $this->toLowerCase($token, $wCase);
 340          }
 341  
 342          // Step 1
 343          // step1list is used in Step 1. 41 stems
 344          $step1list             = array();
 345          $step1list["ΦΑΓΙΑ"]    = "ΦΑ";
 346          $step1list["ΦΑΓΙΟΥ"]   = "ΦΑ";
 347          $step1list["ΦΑΓΙΩΝ"]   = "ΦΑ";
 348          $step1list["ΣΚΑΓΙΑ"]   = "ΣΚΑ";
 349          $step1list["ΣΚΑΓΙΟΥ"]  = "ΣΚΑ";
 350          $step1list["ΣΚΑΓΙΩΝ"]  = "ΣΚΑ";
 351          $step1list["ΟΛΟΓΙΟΥ"]  = "ΟΛΟ";
 352          $step1list["ΟΛΟΓΙΑ"]   = "ΟΛΟ";
 353          $step1list["ΟΛΟΓΙΩΝ"]  = "ΟΛΟ";
 354          $step1list["ΣΟΓΙΟΥ"]   = "ΣΟ";
 355          $step1list["ΣΟΓΙΑ"]    = "ΣΟ";
 356          $step1list["ΣΟΓΙΩΝ"]   = "ΣΟ";
 357          $step1list["ΤΑΤΟΓΙΑ"]  = "ΤΑΤΟ";
 358          $step1list["ΤΑΤΟΓΙΟΥ"] = "ΤΑΤΟ";
 359          $step1list["ΤΑΤΟΓΙΩΝ"] = "ΤΑΤΟ";
 360          $step1list["ΚΡΕΑΣ"]    = "ΚΡΕ";
 361          $step1list["ΚΡΕΑΤΟΣ"]  = "ΚΡΕ";
 362          $step1list["ΚΡΕΑΤΑ"]   = "ΚΡΕ";
 363          $step1list["ΚΡΕΑΤΩΝ"]  = "ΚΡΕ";
 364          $step1list["ΠΕΡΑΣ"]    = "ΠΕΡ";
 365          $step1list["ΠΕΡΑΤΟΣ"]  = "ΠΕΡ";
 366  
 367          // Added by Spyros. Also at $re in step1
 368          $step1list["ΠΕΡΑΤΗ"]     = "ΠΕΡ";
 369          $step1list["ΠΕΡΑΤΑ"]     = "ΠΕΡ";
 370          $step1list["ΠΕΡΑΤΩΝ"]    = "ΠΕΡ";
 371          $step1list["ΤΕΡΑΣ"]      = "ΤΕΡ";
 372          $step1list["ΤΕΡΑΤΟΣ"]    = "ΤΕΡ";
 373          $step1list["ΤΕΡΑΤΑ"]     = "ΤΕΡ";
 374          $step1list["ΤΕΡΑΤΩΝ"]    = "ΤΕΡ";
 375          $step1list["ΦΩΣ"]        = "ΦΩ";
 376          $step1list["ΦΩΤΟΣ"]      = "ΦΩ";
 377          $step1list["ΦΩΤΑ"]       = "ΦΩ";
 378          $step1list["ΦΩΤΩΝ"]      = "ΦΩ";
 379          $step1list["ΚΑΘΕΣΤΩΣ"]   = "ΚΑΘΕΣΤ";
 380          $step1list["ΚΑΘΕΣΤΩΤΟΣ"] = "ΚΑΘΕΣΤ";
 381          $step1list["ΚΑΘΕΣΤΩΤΑ"]  = "ΚΑΘΕΣΤ";
 382          $step1list["ΚΑΘΕΣΤΩΤΩΝ"] = "ΚΑΘΕΣΤ";
 383          $step1list["ΓΕΓΟΝΟΣ"]    = "ΓΕΓΟΝ";
 384          $step1list["ΓΕΓΟΝΟΤΟΣ"]  = "ΓΕΓΟΝ";
 385          $step1list["ΓΕΓΟΝΟΤΑ"]   = "ΓΕΓΟΝ";
 386          $step1list["ΓΕΓΟΝΟΤΩΝ"]  = "ΓΕΓΟΝ";
 387  
 388          $re = '/(.*)(ΦΑΓΙΑ|ΦΑΓΙΟΥ|ΦΑΓΙΩΝ|ΣΚΑΓΙΑ|ΣΚΑΓΙΟΥ|ΣΚΑΓΙΩΝ|ΟΛΟΓΙΟΥ|ΟΛΟΓΙΑ|ΟΛΟΓΙΩΝ|ΣΟΓΙΟΥ|ΣΟΓΙΑ|ΣΟΓΙΩΝ|ΤΑΤΟΓΙΑ|ΤΑΤΟΓΙΟΥ|ΤΑΤΟΓΙΩΝ|ΚΡΕΑΣ|ΚΡΕΑΤΟΣ|'
 389                  . 'ΚΡΕΑΤΑ|ΚΡΕΑΤΩΝ|ΠΕΡΑΣ|ΠΕΡΑΤΟΣ|ΠΕΡΑΤΗ|ΠΕΡΑΤΑ|ΠΕΡΑΤΩΝ|ΤΕΡΑΣ|ΤΕΡΑΤΟΣ|ΤΕΡΑΤΑ|ΤΕΡΑΤΩΝ|ΦΩΣ|ΦΩΤΟΣ|ΦΩΤΑ|ΦΩΤΩΝ|ΚΑΘΕΣΤΩΣ|ΚΑΘΕΣΤΩΤΟΣ|'
 390                  . 'ΚΑΘΕΣΤΩΤΑ|ΚΑΘΕΣΤΩΤΩΝ|ΓΕΓΟΝΟΣ|ΓΕΓΟΝΟΤΟΣ|ΓΕΓΟΝΟΤΑ|ΓΕΓΟΝΟΤΩΝ)$/';
 391  
 392          if (preg_match($re, $token, $match)) {
 393              $stem   = $match[1];
 394              $suffix = $match[2];
 395              $token  = $stem . (array_key_exists($suffix, $step1list) ? $step1list[$suffix] : '');
 396              $test1  = false;
 397          }
 398  
 399          // Step 2a. 2 stems
 400          $re = '/^(.+?)(ΑΔΕΣ|ΑΔΩΝ)$/';
 401  
 402          if (preg_match($re, $token, $match)) {
 403              $token = $match[1];
 404              $re    = '/(ΟΚ|ΜΑΜ|ΜΑΝ|ΜΠΑΜΠ|ΠΑΤΕΡ|ΓΙΑΓΙ|ΝΤΑΝΤ|ΚΥΡ|ΘΕΙ|ΠΕΘΕΡ)$/';
 405  
 406              if (!preg_match($re, $token)) {
 407                  $token = $token . "ΑΔ";
 408              }
 409          }
 410  
 411          // Step 2b. 2 stems
 412          $re = '/^(.+?)(ΕΔΕΣ|ΕΔΩΝ)$/';
 413  
 414          if (preg_match($re, $token)) {
 415              preg_match($re, $token, $match);
 416              $token  = $match[1];
 417              $exept2 = '/(ΟΠ|ΙΠ|ΕΜΠ|ΥΠ|ΓΗΠ|ΔΑΠ|ΚΡΑΣΠ|ΜΙΛ)$/';
 418  
 419              if (preg_match($exept2, $token)) {
 420                  $token = $token . 'ΕΔ';
 421              }
 422          }
 423  
 424          // Step 2c
 425          $re = '/^(.+?)(ΟΥΔΕΣ|ΟΥΔΩΝ)$/';
 426  
 427          if (preg_match($re, $token)) {
 428              preg_match($re, $token, $match);
 429              $token = $match[1];
 430  
 431              $exept3 = '/(ΑΡΚ|ΚΑΛΙΑΚ|ΠΕΤΑΛ|ΛΙΧ|ΠΛΕΞ|ΣΚ|Σ|ΦΛ|ΦΡ|ΒΕΛ|ΛΟΥΛ|ΧΝ|ΣΠ|ΤΡΑΓ|ΦΕ)$/';
 432  
 433              if (preg_match($exept3, $token)) {
 434                  $token = $token . 'ΟΥΔ';
 435              }
 436          }
 437  
 438          // Step 2d
 439          $re = '/^(.+?)(ΕΩΣ|ΕΩΝ)$/';
 440  
 441          if (preg_match($re, $token)) {
 442              preg_match($re, $token, $match);
 443              $token  = $match[1];
 444              $test1  = false;
 445              $exept4 = '/^(Θ|Δ|ΕΛ|ΓΑΛ|Ν|Π|ΙΔ|ΠΑΡ)$/';
 446  
 447              if (preg_match($exept4, $token)) {
 448                  $token = $token . 'Ε';
 449              }
 450          }
 451  
 452          // Step 3
 453          $re = '/^(.+?)(ΙΑ|ΙΟΥ|ΙΩΝ)$/';
 454  
 455          if (preg_match($re, $token, $fp)) {
 456              $stem  = $fp[1];
 457              $token = $stem;
 458              $re    = '/' . $v . '$/';
 459              $test1 = false;
 460  
 461              if (preg_match($re, $token)) {
 462                  $token = $stem . 'Ι';
 463              }
 464          }
 465  
 466          // Step 4
 467          $re = '/^(.+?)(ΙΚΑ|ΙΚΟ|ΙΚΟΥ|ΙΚΩΝ)$/';
 468  
 469          if (preg_match($re, $token)) {
 470              preg_match($re, $token, $match);
 471              $token  = $match[1];
 472              $test1  = false;
 473              $re     = '/' . $v . '$/';
 474              $exept5 = '/^(ΑΛ|ΑΔ|ΕΝΔ|ΑΜΑΝ|ΑΜΜΟΧΑΛ|ΗΘ|ΑΝΗΘ|ΑΝΤΙΔ|ΦΥΣ|ΒΡΩΜ|ΓΕΡ|ΕΞΩΔ|ΚΑΛΠ|ΚΑΛΛΙΝ|ΚΑΤΑΔ|ΜΟΥΛ|ΜΠΑΝ|ΜΠΑΓΙΑΤ|ΜΠΟΛ|ΜΠΟΣ|ΝΙΤ|ΞΙΚ|ΣΥΝΟΜΗΛ|ΠΕΤΣ|'
 475                      . 'ΠΙΤΣ|ΠΙΚΑΝΤ|ΠΛΙΑΤΣ|ΠΟΣΤΕΛΝ|ΠΡΩΤΟΔ|ΣΕΡΤ|ΣΥΝΑΔ|ΤΣΑΜ|ΥΠΟΔ|ΦΙΛΟΝ|ΦΥΛΟΔ|ΧΑΣ)$/';
 476  
 477              if (preg_match($re, $token) || preg_match($exept5, $token)) {
 478                  $token = $token . 'ΙΚ';
 479              }
 480          }
 481  
 482          // Step 5a
 483          $re  = '/^(.+?)(ΑΜΕ)$/';
 484          $re2 = '/^(.+?)(ΑΓΑΜΕ|ΗΣΑΜΕ|ΟΥΣΑΜΕ|ΗΚΑΜΕ|ΗΘΗΚΑΜΕ)$/';
 485  
 486          if ($token == "ΑΓΑΜΕ") {
 487              $token = "ΑΓΑΜ";
 488          }
 489  
 490          if (preg_match($re2, $token)) {
 491              preg_match($re2, $token, $match);
 492              $token = $match[1];
 493              $test1 = false;
 494          }
 495  
 496          if (preg_match($re, $token)) {
 497              preg_match($re, $token, $match);
 498              $token  = $match[1];
 499              $test1  = false;
 500              $exept6 = '/^(ΑΝΑΠ|ΑΠΟΘ|ΑΠΟΚ|ΑΠΟΣΤ|ΒΟΥΒ|ΞΕΘ|ΟΥΛ|ΠΕΘ|ΠΙΚΡ|ΠΟΤ|ΣΙΧ|Χ)$/';
 501  
 502              if (preg_match($exept6, $token)) {
 503                  $token = $token . "ΑΜ";
 504              }
 505          }
 506  
 507          // Step 5b
 508          $re2 = '/^(.+?)(ΑΝΕ)$/';
 509          $re3 = '/^(.+?)(ΑΓΑΝΕ|ΗΣΑΝΕ|ΟΥΣΑΝΕ|ΙΟΝΤΑΝΕ|ΙΟΤΑΝΕ|ΙΟΥΝΤΑΝΕ|ΟΝΤΑΝΕ|ΟΤΑΝΕ|ΟΥΝΤΑΝΕ|ΗΚΑΝΕ|ΗΘΗΚΑΝΕ)$/';
 510  
 511          if (preg_match($re3, $token)) {
 512              preg_match($re3, $token, $match);
 513              $token = $match[1];
 514              $test1 = false;
 515              $re3   = '/^(ΤΡ|ΤΣ)$/';
 516  
 517              if (preg_match($re3, $token)) {
 518                  $token = $token . "ΑΓΑΝ";
 519              }
 520          }
 521  
 522          if (preg_match($re2, $token)) {
 523              preg_match($re2, $token, $match);
 524              $token  = $match[1];
 525              $test1  = false;
 526              $re2    = '/' . $v2 . '$/';
 527              $exept7 = '/^(ΒΕΤΕΡ|ΒΟΥΛΚ|ΒΡΑΧΜ|Γ|ΔΡΑΔΟΥΜ|Θ|ΚΑΛΠΟΥΖ|ΚΑΣΤΕΛ|ΚΟΡΜΟΡ|ΛΑΟΠΛ|ΜΩΑΜΕΘ|Μ|ΜΟΥΣΟΥΛΜ|Ν|ΟΥΛ|Π|ΠΕΛΕΚ|ΠΛ|ΠΟΛΙΣ|ΠΟΡΤΟΛ|ΣΑΡΑΚΑΤΣ|ΣΟΥΛΤ|'
 528                      . 'ΤΣΑΡΛΑΤ|ΟΡΦ|ΤΣΙΓΓ|ΤΣΟΠ|ΦΩΤΟΣΤΕΦ|Χ|ΨΥΧΟΠΛ|ΑΓ|ΟΡΦ|ΓΑΛ|ΓΕΡ|ΔΕΚ|ΔΙΠΛ|ΑΜΕΡΙΚΑΝ|ΟΥΡ|ΠΙΘ|ΠΟΥΡΙΤ|Σ|ΖΩΝΤ|ΙΚ|ΚΑΣΤ|ΚΟΠ|ΛΙΧ|ΛΟΥΘΗΡ|ΜΑΙΝΤ|'
 529                      . 'ΜΕΛ|ΣΙΓ|ΣΠ|ΣΤΕΓ|ΤΡΑΓ|ΤΣΑΓ|Φ|ΕΡ|ΑΔΑΠ|ΑΘΙΓΓ|ΑΜΗΧ|ΑΝΙΚ|ΑΝΟΡΓ|ΑΠΗΓ|ΑΠΙΘ|ΑΤΣΙΓΓ|ΒΑΣ|ΒΑΣΚ|ΒΑΘΥΓΑΛ|ΒΙΟΜΗΧ|ΒΡΑΧΥΚ|ΔΙΑΤ|ΔΙΑΦ|ΕΝΟΡΓ|'
 530                      . 'ΘΥΣ|ΚΑΠΝΟΒΙΟΜΗΧ|ΚΑΤΑΓΑΛ|ΚΛΙΒ|ΚΟΙΛΑΡΦ|ΛΙΒ|ΜΕΓΛΟΒΙΟΜΗΧ|ΜΙΚΡΟΒΙΟΜΗΧ|ΝΤΑΒ|ΞΗΡΟΚΛΙΒ|ΟΛΙΓΟΔΑΜ|ΟΛΟΓΑΛ|ΠΕΝΤΑΡΦ|ΠΕΡΗΦ|ΠΕΡΙΤΡ|ΠΛΑΤ|'
 531                      . 'ΠΟΛΥΔΑΠ|ΠΟΛΥΜΗΧ|ΣΤΕΦ|ΤΑΒ|ΤΕΤ|ΥΠΕΡΗΦ|ΥΠΟΚΟΠ|ΧΑΜΗΛΟΔΑΠ|ΨΗΛΟΤΑΒ)$/';
 532  
 533              if (preg_match($re2, $token) || preg_match($exept7, $token)) {
 534                  $token = $token . "ΑΝ";
 535              }
 536          }
 537  
 538          // Step 5c
 539          $re3 = '/^(.+?)(ΕΤΕ)$/';
 540          $re4 = '/^(.+?)(ΗΣΕΤΕ)$/';
 541  
 542          if (preg_match($re4, $token)) {
 543              preg_match($re4, $token, $match);
 544              $token = $match[1];
 545              $test1 = false;
 546          }
 547  
 548          if (preg_match($re3, $token)) {
 549              preg_match($re3, $token, $match);
 550              $token  = $match[1];
 551              $test1  = false;
 552              $re3    = '/' . $v2 . '$/';
 553              $exept8 = '/(ΟΔ|ΑΙΡ|ΦΟΡ|ΤΑΘ|ΔΙΑΘ|ΣΧ|ΕΝΔ|ΕΥΡ|ΤΙΘ|ΥΠΕΡΘ|ΡΑΘ|ΕΝΘ|ΡΟΘ|ΣΘ|ΠΥΡ|ΑΙΝ|ΣΥΝΔ|ΣΥΝ|ΣΥΝΘ|ΧΩΡ|ΠΟΝ|ΒΡ|ΚΑΘ|ΕΥΘ|ΕΚΘ|ΝΕΤ|ΡΟΝ|ΑΡΚ|ΒΑΡ|ΒΟΛ|ΩΦΕΛ)$/';
 554              $exept9 = '/^(ΑΒΑΡ|ΒΕΝ|ΕΝΑΡ|ΑΒΡ|ΑΔ|ΑΘ|ΑΝ|ΑΠΛ|ΒΑΡΟΝ|ΝΤΡ|ΣΚ|ΚΟΠ|ΜΠΟΡ|ΝΙΦ|ΠΑΓ|ΠΑΡΑΚΑΛ|ΣΕΡΠ|ΣΚΕΛ|ΣΥΡΦ|ΤΟΚ|Υ|Δ|ΕΜ|ΘΑΡΡ|Θ)$/';
 555  
 556              if (preg_match($re3, $token) || preg_match($exept8, $token) || preg_match($exept9, $token)) {
 557                  $token = $token . "ΕΤ";
 558              }
 559          }
 560  
 561          // Step 5d
 562          $re = '/^(.+?)(ΟΝΤΑΣ|ΩΝΤΑΣ)$/';
 563  
 564          if (preg_match($re, $token)) {
 565              preg_match($re, $token, $match);
 566              $token   = $match[1];
 567              $test1   = false;
 568              $exept10 = '/^(ΑΡΧ)$/';
 569              $exept11 = '/(ΚΡΕ)$/';
 570  
 571              if (preg_match($exept10, $token)) {
 572                  $token = $token . "ΟΝΤ";
 573              }
 574  
 575              if (preg_match($exept11, $token)) {
 576                  $token = $token . "ΩΝΤ";
 577              }
 578          }
 579  
 580          // Step 5e
 581          $re = '/^(.+?)(ΟΜΑΣΤΕ|ΙΟΜΑΣΤΕ)$/';
 582  
 583          if (preg_match($re, $token)) {
 584              preg_match($re, $token, $match);
 585              $token   = $match[1];
 586              $test1   = false;
 587              $exept11 = '/^(ΟΝ)$/';
 588  
 589              if (preg_match($exept11, $token)) {
 590                  $token = $token . "ΟΜΑΣΤ";
 591              }
 592          }
 593  
 594          // Step 5f
 595          $re  = '/^(.+?)(ΕΣΤΕ)$/';
 596          $re2 = '/^(.+?)(ΙΕΣΤΕ)$/';
 597  
 598          if (preg_match($re2, $token)) {
 599              preg_match($re2, $token, $match);
 600              $token = $match[1];
 601              $test1 = false;
 602              $re2   = '/^(Π|ΑΠ|ΣΥΜΠ|ΑΣΥΜΠ|ΑΚΑΤΑΠ|ΑΜΕΤΑΜΦ)$/';
 603  
 604              if (preg_match($re2, $token)) {
 605                  $token = $token . "ΙΕΣΤ";
 606              }
 607          }
 608  
 609          if (preg_match($re, $token)) {
 610              preg_match($re, $token, $match);
 611              $token   = $match[1];
 612              $test1   = false;
 613              $exept12 = '/^(ΑΛ|ΑΡ|ΕΚΤΕΛ|Ζ|Μ|Ξ|ΠΑΡΑΚΑΛ|ΑΡ|ΠΡΟ|ΝΙΣ)$/';
 614  
 615              if (preg_match($exept12, $token)) {
 616                  $token = $token . "ΕΣΤ";
 617              }
 618          }
 619  
 620          // Step 5g
 621          $re  = '/^(.+?)(ΗΚΑ|ΗΚΕΣ|ΗΚΕ)$/';
 622          $re2 = '/^(.+?)(ΗΘΗΚΑ|ΗΘΗΚΕΣ|ΗΘΗΚΕ)$/';
 623  
 624          if (preg_match($re2, $token)) {
 625              preg_match($re2, $token, $match);
 626              $token = $match[1];
 627              $test1 = false;
 628          }
 629  
 630          if (preg_match($re, $token)) {
 631              preg_match($re, $token, $match);
 632              $token   = $match[1];
 633              $test1   = false;
 634              $exept13 = '/(ΣΚΩΛ|ΣΚΟΥΛ|ΝΑΡΘ|ΣΦ|ΟΘ|ΠΙΘ)$/';
 635              $exept14 = '/^(ΔΙΑΘ|Θ|ΠΑΡΑΚΑΤΑΘ|ΠΡΟΣΘ|ΣΥΝΘ|)$/';
 636  
 637              if (preg_match($exept13, $token) || preg_match($exept14, $token)) {
 638                  $token = $token . "ΗΚ";
 639              }
 640          }
 641  
 642          // Step 5h
 643          $re = '/^(.+?)(ΟΥΣΑ|ΟΥΣΕΣ|ΟΥΣΕ)$/';
 644  
 645          if (preg_match($re, $token)) {
 646              preg_match($re, $token, $match);
 647              $token   = $match[1];
 648              $test1   = false;
 649              $exept15 = '/^(ΦΑΡΜΑΚ|ΧΑΔ|ΑΓΚ|ΑΝΑΡΡ|ΒΡΟΜ|ΕΚΛΙΠ|ΛΑΜΠΙΔ|ΛΕΧ|Μ|ΠΑΤ|Ρ|Λ|ΜΕΔ|ΜΕΣΑΖ|ΥΠΟΤΕΙΝ|ΑΜ|ΑΙΘ|ΑΝΗΚ|ΔΕΣΠΟΖ|ΕΝΔΙΑΦΕΡ|ΔΕ|ΔΕΥΤΕΡΕΥ|ΚΑΘΑΡΕΥ|ΠΛΕ|ΤΣΑ)$/';
 650              $exept16 = '/(ΠΟΔΑΡ|ΒΛΕΠ|ΠΑΝΤΑΧ|ΦΡΥΔ|ΜΑΝΤΙΛ|ΜΑΛΛ|ΚΥΜΑΤ|ΛΑΧ|ΛΗΓ|ΦΑΓ|ΟΜ|ΠΡΩΤ)$/';
 651  
 652              if (preg_match($exept15, $token) || preg_match($exept16, $token)) {
 653                  $token = $token . "ΟΥΣ";
 654              }
 655          }
 656  
 657          // Step 5i
 658          $re = '/^(.+?)(ΑΓΑ|ΑΓΕΣ|ΑΓΕ)$/';
 659  
 660          if (preg_match($re, $token)) {
 661              preg_match($re, $token, $match);
 662              $token   = $match[1];
 663              $test1   = false;
 664              $exept17 = '/^(ΨΟΦ|ΝΑΥΛΟΧ)$/';
 665              $exept20 = '/(ΚΟΛΛ)$/';
 666              $exept18 = '/^(ΑΒΑΣΤ|ΠΟΛΥΦ|ΑΔΗΦ|ΠΑΜΦ|Ρ|ΑΣΠ|ΑΦ|ΑΜΑΛ|ΑΜΑΛΛΙ|ΑΝΥΣΤ|ΑΠΕΡ|ΑΣΠΑΡ|ΑΧΑΡ|ΔΕΡΒΕΝ|ΔΡΟΣΟΠ|ΞΕΦ|ΝΕΟΠ|ΝΟΜΟΤ|ΟΛΟΠ|ΟΜΟΤ|ΠΡΟΣΤ|ΠΡΟΣΩΠΟΠ|'
 667                  . 'ΣΥΜΠ|ΣΥΝΤ|Τ|ΥΠΟΤ|ΧΑΡ|ΑΕΙΠ|ΑΙΜΟΣΤ|ΑΝΥΠ|ΑΠΟΤ|ΑΡΤΙΠ|ΔΙΑΤ|ΕΝ|ΕΠΙΤ|ΚΡΟΚΑΛΟΠ|ΣΙΔΗΡΟΠ|Λ|ΝΑΥ|ΟΥΛΑΜ|ΟΥΡ|Π|ΤΡ|Μ)$/';
 668              $exept19 = '/(ΟΦ|ΠΕΛ|ΧΟΡΤ|ΛΛ|ΣΦ|ΡΠ|ΦΡ|ΠΡ|ΛΟΧ|ΣΜΗΝ)$/';
 669  
 670              if (
 671                  (preg_match($exept18, $token) || preg_match($exept19, $token))
 672                  && !(preg_match($exept17, $token) || preg_match($exept20, $token))
 673              ) {
 674                  $token = $token . "ΑΓ";
 675              }
 676          }
 677  
 678          // Step 5j
 679          $re = '/^(.+?)(ΗΣΕ|ΗΣΟΥ|ΗΣΑ)$/';
 680  
 681          if (preg_match($re, $token)) {
 682              preg_match($re, $token, $match);
 683              $token   = $match[1];
 684              $test1   = false;
 685              $exept21 = '/^(Ν|ΧΕΡΣΟΝ|ΔΩΔΕΚΑΝ|ΕΡΗΜΟΝ|ΜΕΓΑΛΟΝ|ΕΠΤΑΝ)$/';
 686  
 687              if (preg_match($exept21, $token)) {
 688                  $token = $token . "ΗΣ";
 689              }
 690          }
 691  
 692          // Step 5k
 693          $re = '/^(.+?)(ΗΣΤΕ)$/';
 694  
 695          if (preg_match($re, $token)) {
 696              preg_match($re, $token, $match);
 697              $token   = $match[1];
 698              $test1   = false;
 699              $exept22 = '/^(ΑΣΒ|ΣΒ|ΑΧΡ|ΧΡ|ΑΠΛ|ΑΕΙΜΝ|ΔΥΣΧΡ|ΕΥΧΡ|ΚΟΙΝΟΧΡ|ΠΑΛΙΜΨ)$/';
 700  
 701              if (preg_match($exept22, $token)) {
 702                  $token = $token . "ΗΣΤ";
 703              }
 704          }
 705  
 706          // Step 5l
 707          $re = '/^(.+?)(ΟΥΝΕ|ΗΣΟΥΝΕ|ΗΘΟΥΝΕ)$/';
 708  
 709          if (preg_match($re, $token)) {
 710              preg_match($re, $token, $match);
 711              $token   = $match[1];
 712              $test1   = false;
 713              $exept23 = '/^(Ν|Ρ|ΣΠΙ|ΣΤΡΑΒΟΜΟΥΤΣ|ΚΑΚΟΜΟΥΤΣ|ΕΞΩΝ)$/';
 714  
 715              if (preg_match($exept23, $token)) {
 716                  $token = $token . "ΟΥΝ";
 717              }
 718          }
 719  
 720          // Step 5m
 721          $re = '/^(.+?)(ΟΥΜΕ|ΗΣΟΥΜΕ|ΗΘΟΥΜΕ)$/';
 722  
 723          if (preg_match($re, $token)) {
 724              preg_match($re, $token, $match);
 725              $token   = $match[1];
 726              $test1   = false;
 727              $exept24 = '/^(ΠΑΡΑΣΟΥΣ|Φ|Χ|ΩΡΙΟΠΛ|ΑΖ|ΑΛΛΟΣΟΥΣ|ΑΣΟΥΣ)$/';
 728  
 729              if (preg_match($exept24, $token)) {
 730                  $token = $token . "ΟΥΜ";
 731              }
 732          }
 733  
 734          // Step 6
 735          $re  = '/^(.+?)(ΜΑΤΑ|ΜΑΤΩΝ|ΜΑΤΟΣ)$/';
 736          $re2 = '/^(.+?)(Α|ΑΓΑΤΕ|ΑΓΑΝ|ΑΕΙ|ΑΜΑΙ|ΑΝ|ΑΣ|ΑΣΑΙ|ΑΤΑΙ|ΑΩ|Ε|ΕΙ|ΕΙΣ|ΕΙΤΕ|ΕΣΑΙ|ΕΣ|ΕΤΑΙ|Ι|ΙΕΜΑΙ|ΙΕΜΑΣΤΕ|ΙΕΤΑΙ|ΙΕΣΑΙ|ΙΕΣΑΣΤΕ|ΙΟΜΑΣΤΑΝ|ΙΟΜΟΥΝ|'
 737                  . 'ΙΟΜΟΥΝΑ|ΙΟΝΤΑΝ|ΙΟΝΤΟΥΣΑΝ|ΙΟΣΑΣΤΑΝ|ΙΟΣΑΣΤΕ|ΙΟΣΟΥΝ|ΙΟΣΟΥΝΑ|ΙΟΤΑΝ|ΙΟΥΜΑ|ΙΟΥΜΑΣΤΕ|ΙΟΥΝΤΑΙ|ΙΟΥΝΤΑΝ|Η|ΗΔΕΣ|ΗΔΩΝ|ΗΘΕΙ|ΗΘΕΙΣ|ΗΘΕΙΤΕ|'
 738                  . 'ΗΘΗΚΑΤΕ|ΗΘΗΚΑΝ|ΗΘΟΥΝ|ΗΘΩ|ΗΚΑΤΕ|ΗΚΑΝ|ΗΣ|ΗΣΑΝ|ΗΣΑΤΕ|ΗΣΕΙ|ΗΣΕΣ|ΗΣΟΥΝ|ΗΣΩ|Ο|ΟΙ|ΟΜΑΙ|ΟΜΑΣΤΑΝ|ΟΜΟΥΝ|ΟΜΟΥΝΑ|ΟΝΤΑΙ|ΟΝΤΑΝ|ΟΝΤΟΥΣΑΝ|ΟΣ|'
 739                  . 'ΟΣΑΣΤΑΝ|ΟΣΑΣΤΕ|ΟΣΟΥΝ|ΟΣΟΥΝΑ|ΟΤΑΝ|ΟΥ|ΟΥΜΑΙ|ΟΥΜΑΣΤΕ|ΟΥΝ|ΟΥΝΤΑΙ|ΟΥΝΤΑΝ|ΟΥΣ|ΟΥΣΑΝ|ΟΥΣΑΤΕ|Υ|ΥΣ|Ω|ΩΝ)$/';
 740  
 741          if (preg_match($re, $token, $match)) {
 742              $token = $match[1] . "ΜΑ";
 743          }
 744  
 745          if (preg_match($re2, $token) && $test1) {
 746              preg_match($re2, $token, $match);
 747              $token = $match[1];
 748          }
 749  
 750          // Step 7 (ΠΑΡΑΘΕΤΙΚΑ)
 751          $re = '/^(.+?)(ΕΣΤΕΡ|ΕΣΤΑΤ|ΟΤΕΡ|ΟΤΑΤ|ΥΤΕΡ|ΥΤΑΤ|ΩΤΕΡ|ΩΤΑΤ)$/';
 752  
 753          if (preg_match($re, $token)) {
 754              preg_match($re, $token, $match);
 755              $token = $match[1];
 756          }
 757  
 758          return $this->toLowerCase($token, $wCase);
 759      }
 760  
 761      /**
 762       * Converts the token to uppercase, suppressing accents and diaeresis. The array $wCase contains a special map of
 763       * the uppercase rule used to convert each character at each position.
 764       *
 765       * @param   string  $token   Token to process
 766       * @param   array   &$wCase  Map of uppercase rules
 767       *
 768       * @return  string
 769       *
 770       * @since   4.0.0
 771       */
 772      protected function toUpperCase($token, &$wCase)
 773      {
 774          $wCase      = array_fill(0, mb_strlen($token, 'UTF-8'), 0);
 775          $caseConvert = array(
 776              "α" => 'Α',
 777              "β" => 'Β',
 778              "γ" => 'Γ',
 779              "δ" => 'Δ',
 780              "ε" => 'Ε',
 781              "ζ" => 'Ζ',
 782              "η" => 'Η',
 783              "θ" => 'Θ',
 784              "ι" => 'Ι',
 785              "κ" => 'Κ',
 786              "λ" => 'Λ',
 787              "μ" => 'Μ',
 788              "ν" => 'Ν',
 789              "ξ" => 'Ξ',
 790              "ο" => 'Ο',
 791              "π" => 'Π',
 792              "ρ" => 'Ρ',
 793              "σ" => 'Σ',
 794              "τ" => 'Τ',
 795              "υ" => 'Υ',
 796              "φ" => 'Φ',
 797              "χ" => 'Χ',
 798              "ψ" => 'Ψ',
 799              "ω" => 'Ω',
 800              "ά" => 'Α',
 801              "έ" => 'Ε',
 802              "ή" => 'Η',
 803              "ί" => 'Ι',
 804              "ό" => 'Ο',
 805              "ύ" => 'Υ',
 806              "ώ" => 'Ω',
 807              "ς" => 'Σ',
 808              "ϊ" => 'Ι',
 809              "ϋ" => 'Ι',
 810              "ΐ" => 'Ι',
 811              "ΰ" => 'Υ',
 812          );
 813          $newToken    = '';
 814  
 815          for ($i = 0; $i < mb_strlen($token); $i++) {
 816              $char    = mb_substr($token, $i, 1);
 817              $isLower = array_key_exists($char, $caseConvert);
 818  
 819              if (!$isLower) {
 820                  $newToken .= $char;
 821  
 822                  continue;
 823              }
 824  
 825              $upperCase = $caseConvert[$char];
 826              $newToken  .= $upperCase;
 827  
 828              $wCase[$i] = 1;
 829  
 830              if (in_array($char, ['ά', 'έ', 'ή', 'ί', 'ό', 'ύ', 'ώ', 'ς'])) {
 831                  $wCase[$i] = 2;
 832              }
 833  
 834              if (in_array($char, ['ϊ', 'ϋ'])) {
 835                  $wCase[$i] = 3;
 836              }
 837  
 838              if (in_array($char, ['ΐ', 'ΰ'])) {
 839                  $wCase[$i] = 4;
 840              }
 841          }
 842  
 843          return $newToken;
 844      }
 845  
 846      /**
 847       * Converts the suppressed uppercase token back to lowercase, using the $wCase map to add back the accents,
 848       * diaeresis and handle the special case of final sigma (different lowercase glyph than the regular sigma, only
 849       * used at the end of words).
 850       *
 851       * @param   string  $token  Token to process
 852       * @param   array   $wCase  Map of lowercase rules
 853       *
 854       * @return  string
 855       *
 856       * @since   4.0.0
 857       */
 858      protected function toLowerCase($token, $wCase)
 859      {
 860          $newToken    = '';
 861  
 862          for ($i = 0; $i < mb_strlen($token); $i++) {
 863              $char    = mb_substr($token, $i, 1);
 864  
 865              // Is $wCase not set at this position? We assume no case conversion ever took place.
 866              if (!isset($wCase[$i])) {
 867                  $newToken .= $char;
 868  
 869                  continue;
 870              }
 871  
 872              // The character was not case-converted
 873              if ($wCase[$i] == 0) {
 874                  $newToken .= $char;
 875  
 876                  continue;
 877              }
 878  
 879              // Case 1: Unaccented letter
 880              if ($wCase[$i] == 1) {
 881                  $newToken .= mb_strtolower($char);
 882  
 883                  continue;
 884              }
 885  
 886              // Case 2: Vowel with accent (tonos); or the special case of final sigma
 887              if ($wCase[$i] == 2) {
 888                  $charMap = [
 889                      'Α' => 'ά',
 890                      'Ε' => 'έ',
 891                      'Η' => 'ή',
 892                      'Ι' => 'ί',
 893                      'Ο' => 'ό',
 894                      'Υ' => 'ύ',
 895                      'Ω' => 'ώ',
 896                      'Σ' => 'ς'
 897                  ];
 898  
 899                  $newToken .= $charMap[$char];
 900  
 901                  continue;
 902              }
 903  
 904              // Case 3: vowels with diaeresis (dialytika)
 905              if ($wCase[$i] == 3) {
 906                  $charMap = [
 907                      'Ι' => 'ϊ',
 908                      'Υ' => 'ϋ'
 909                  ];
 910  
 911                  $newToken .= $charMap[$char];
 912  
 913                  continue;
 914              }
 915  
 916              // Case 4: vowels with both diaeresis (dialytika) and accent (tonos)
 917              if ($wCase[$i] == 4) {
 918                  $charMap = [
 919                      'Ι' => 'ΐ',
 920                      'Υ' => 'ΰ'
 921                  ];
 922  
 923                  $newToken .= $charMap[$char];
 924  
 925                  continue;
 926              }
 927  
 928              // This should never happen!
 929              $newToken .= $char;
 930          }
 931  
 932          return $newToken;
 933      }
 934  }


Generated: Wed Sep 7 05:41:13 2022 Chilli.vc Blog - For Webmaster,Blog-Writer,System Admin and Domainer