/**
  * {@inheritDoc}
  */
 public function visit($string, array &$codes, Languages $languages)
 {
     $words = preg_split('/(\\s|\\n)/', $string);
     foreach ($words as $word) {
         $word = trim($word, '.,?!-');
         $wordLanguages = $this->dictionary->getLanguagesByWord($word);
         if (null !== $wordLanguages) {
             foreach ($wordLanguages as $wordLanguage) {
                 $languages->vote($wordLanguage, 0.5);
             }
         }
     }
 }
 /**
  * {@inheritDoc}
  */
 public function visit($string, array &$codes, Languages $languages)
 {
     foreach ($codes as $key => $code) {
         if ($code >= 32 && $code <= 47 || $code >= 58 && $code <= 64 || $code >= 91 && $code <= 96 || $code >= 123 && $code <= 127) {
             // This is a special char. Not detected.
             unset($codes[$key]);
             continue;
         }
         $section = $this->sections->findByCode($code);
         if ($section === null) {
             // Not found section for this char code
             continue;
         }
         if (count($section->getLanguages()) === 0) {
             // Not found languages for this char code.
             // This chan can is a special char (music, arrows, etc...)
             unset($codes[$key]);
         }
         $languages->addDetectedLanguages($section->getLanguages());
     }
 }
 /**
  * {@inheritDoc}
  */
 public function visit($string, array &$codes, Languages $languages)
 {
     if (!count($languages->getDetectedLanguages())) {
         // Not found detected languages.
         return;
     }
     /** @var \Ideea\LanguageDetector\Alphabet\Alphabet[] $checkAlphabets */
     $checkAlphabets = array();
     foreach ($languages->getDetectedLanguages() as $detectedLanguage) {
         $alphabet = $this->alphabets->get($detectedLanguage);
         if (null === $alphabet) {
             // Not found alphabet for language
             continue;
         }
         $checkAlphabets[$alphabet->getLanguage()] = $alphabet;
     }
     foreach ($codes as $code) {
         foreach ($checkAlphabets as $alphabet) {
             if ($alphabet->hasChar($code)) {
                 $languages->vote($alphabet->getLanguage(), 1);
             }
             if ($alphabet->hasCommonChar($code)) {
                 $languages->vote($alphabet->getLanguage(), 0.5);
             }
         }
     }
     // Devote languages if language chars not used
     // Can remove this functional?
     $votedLanguages = $languages->getVoteLanguages();
     if (count($votedLanguages) > 1) {
         foreach ($votedLanguages as $votedLanguage => $votes) {
             $votedLanguageAlphabet = $this->alphabets->get($votedLanguage);
             if (null === $votedLanguage) {
                 // Not alphabet exists for voted language
                 continue;
             }
             $languageAlphabetChars = $votedLanguageAlphabet->getCharCodes();
             $languageUsedChars = array_intersect(array_unique($codes), $languageAlphabetChars);
             $countUnusedChars = count($languageAlphabetChars) - count($languageUsedChars);
             if ($countUnusedChars > 2) {
                 $languages->devote($votedLanguage, $countUnusedChars * 0.02);
             }
         }
     }
 }