Loading core/lib/Drupal/Component/Transliteration/PhpTransliteration.php +18 −0 Original line number Diff line number Diff line Loading @@ -58,6 +58,21 @@ class PhpTransliteration implements TransliterationInterface { */ protected $genericMap = []; /** * Special characters for ::removeDiacritics(). * * Characters which have accented variants but their base character * transliterates to more than one ASCII character require special * treatment: we want to remove their accent and use the un- * transliterated base character. */ protected $fixTransliterateForRemoveDiacritics = [ 'AE' => 'Æ', 'ae' => 'æ', 'ZH' => 'Ʒ', 'zh' => 'ʒ', ]; /** * Constructs a transliteration object. * Loading Loading @@ -93,6 +108,9 @@ public function removeDiacritics($string) { if (strlen($to_add) === 1) { $replacement = $to_add; } elseif (isset($this->fixTransliterateForRemoveDiacritics[$to_add])) { $replacement = $this->fixTransliterateForRemoveDiacritics[$to_add]; } } $result .= $replacement; Loading core/modules/search/search.post_update.php +11 −0 Original line number Diff line number Diff line Loading @@ -22,3 +22,14 @@ function search_post_update_block_page(&$sandbox = NULL) { return $block->getPluginId() === 'search_form_block'; }); } /** * Mark everything for reindexing after diacritics removal rule change. */ function search_post_update_reindex_after_diacritics_rule_change() { $search_page_repository = \Drupal::service('search.search_page_repository'); foreach ($search_page_repository->getIndexableSearchPages() as $entity) { $entity->getPlugin()->markForReindex(); } return t("Content has been marked for re-indexing for all active search pages. Searching will continue to work, but new content won't be indexed until all existing content has been re-indexed."); } core/tests/Drupal/Tests/Component/Transliteration/PhpTransliterationTest.php +2 −2 Original line number Diff line number Diff line Loading @@ -58,8 +58,8 @@ public function providerTestPhpTransliterationRemoveDiacritics() { // Test all characters in the Unicode range 0x01CD to 0x024F. ['ǍǎǏ', 'AaI'], ['ǐǑǒǓǔǕǖǗǘǙǚǛǜǝǞǟ', 'iOoUuUuUuUuUuǝAa'], ['ǠǡǢǣǤǥǦǧǨǩǪǫǬǭǮǯ', 'AaǢǣGgGgKkOoOoǮǯ'], ['ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ', 'jDZDzdzGgǶǷNnAaǼǽOo'], ['ǠǡǢǣǤǥǦǧǨǩǪǫǬǭǮǯ', 'AaÆæGgGgKkOoOoƷʒ'], ['ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ', 'jDZDzdzGgǶǷNnAaÆæOo'], ['ȀȁȂȃȄȅȆȇȈȉȊȋȌȍȎȏ', 'AaAaEeEeIiIiOoOo'], ['ȐȑȒȓȔȕȖȗȘșȚțȜȝȞȟ', 'RrRrUuUuSsTtȜȝHh'], ['ȠȡȢȣȤȥȦȧȨȩȪȫȬȭȮȯ', 'ȠȡȢȣZzAaEeOoOoOo'], Loading Loading
core/lib/Drupal/Component/Transliteration/PhpTransliteration.php +18 −0 Original line number Diff line number Diff line Loading @@ -58,6 +58,21 @@ class PhpTransliteration implements TransliterationInterface { */ protected $genericMap = []; /** * Special characters for ::removeDiacritics(). * * Characters which have accented variants but their base character * transliterates to more than one ASCII character require special * treatment: we want to remove their accent and use the un- * transliterated base character. */ protected $fixTransliterateForRemoveDiacritics = [ 'AE' => 'Æ', 'ae' => 'æ', 'ZH' => 'Ʒ', 'zh' => 'ʒ', ]; /** * Constructs a transliteration object. * Loading Loading @@ -93,6 +108,9 @@ public function removeDiacritics($string) { if (strlen($to_add) === 1) { $replacement = $to_add; } elseif (isset($this->fixTransliterateForRemoveDiacritics[$to_add])) { $replacement = $this->fixTransliterateForRemoveDiacritics[$to_add]; } } $result .= $replacement; Loading
core/modules/search/search.post_update.php +11 −0 Original line number Diff line number Diff line Loading @@ -22,3 +22,14 @@ function search_post_update_block_page(&$sandbox = NULL) { return $block->getPluginId() === 'search_form_block'; }); } /** * Mark everything for reindexing after diacritics removal rule change. */ function search_post_update_reindex_after_diacritics_rule_change() { $search_page_repository = \Drupal::service('search.search_page_repository'); foreach ($search_page_repository->getIndexableSearchPages() as $entity) { $entity->getPlugin()->markForReindex(); } return t("Content has been marked for re-indexing for all active search pages. Searching will continue to work, but new content won't be indexed until all existing content has been re-indexed."); }
core/tests/Drupal/Tests/Component/Transliteration/PhpTransliterationTest.php +2 −2 Original line number Diff line number Diff line Loading @@ -58,8 +58,8 @@ public function providerTestPhpTransliterationRemoveDiacritics() { // Test all characters in the Unicode range 0x01CD to 0x024F. ['ǍǎǏ', 'AaI'], ['ǐǑǒǓǔǕǖǗǘǙǚǛǜǝǞǟ', 'iOoUuUuUuUuUuǝAa'], ['ǠǡǢǣǤǥǦǧǨǩǪǫǬǭǮǯ', 'AaǢǣGgGgKkOoOoǮǯ'], ['ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ', 'jDZDzdzGgǶǷNnAaǼǽOo'], ['ǠǡǢǣǤǥǦǧǨǩǪǫǬǭǮǯ', 'AaÆæGgGgKkOoOoƷʒ'], ['ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ', 'jDZDzdzGgǶǷNnAaÆæOo'], ['ȀȁȂȃȄȅȆȇȈȉȊȋȌȍȎȏ', 'AaAaEeEeIiIiOoOo'], ['ȐȑȒȓȔȕȖȗȘșȚțȜȝȞȟ', 'RrRrUuUuSsTtȜȝHh'], ['ȠȡȢȣȤȥȦȧȨȩȪȫȬȭȮȯ', 'ȠȡȢȣZzAaEeOoOoOo'], Loading