+ // Namespace prefix only
+ $title = Title::newFromText( $input . 'Dummy' );
+ if (
+ $title &&
+ $title->getText() === 'Dummy' &&
+ !$title->inNamespace( NS_MAIN ) &&
+ !$title->isExternal()
+ ) {
+ return [ $title->getNamespace(), '' ];
+ }
+
+ // Namespace prefix with additional input
+ $title = Title::newFromText( $input );
+ if (
+ $title &&
+ !$title->inNamespace( NS_MAIN ) &&
+ !$title->isExternal()
+ ) {
+ // getText provides correct capitalization
+ return [ $title->getNamespace(), $title->getText() ];
+ }
+
+ return false;
+ }
+
+ /**
+ * Do a prefix search for all possible variants of the prefix
+ * @param string $search
+ * @param int $limit
+ * @param array $namespaces
+ * @param int $offset How many results to offset from the beginning
+ *
+ * @return array
+ */
+ public function searchWithVariants( $search, $limit, array $namespaces, $offset = 0 ) {
+ $searches = $this->search( $search, $limit, $namespaces, $offset );
+
+ // if the content language has variants, try to retrieve fallback results
+ $fallbackLimit = $limit - count( $searches );
+ if ( $fallbackLimit > 0 ) {
+ global $wgContLang;
+
+ $fallbackSearches = $wgContLang->autoConvertToAllVariants( $search );
+ $fallbackSearches = array_diff( array_unique( $fallbackSearches ), [ $search ] );
+
+ foreach ( $fallbackSearches as $fbs ) {
+ $fallbackSearchResult = $this->search( $fbs, $fallbackLimit, $namespaces );
+ $searches = array_merge( $searches, $fallbackSearchResult );
+ $fallbackLimit -= count( $fallbackSearchResult );
+
+ if ( $fallbackLimit == 0 ) {
+ break;
+ }
+ }
+ }
+ return $searches;