LanguageNameIndexer: Generate PHP file instead of serialized file.

Serialized format is no longer in style for data. PHP files can
take advantage of AutoLoader and caching so they can even be faster
than serialized files. As side bonus we can have readable diffs
for updates.

Only downside is that the file generation takes about ten lines of
ugly string manipulation.

Change-Id: If09704d1172daa13c72a308814534cac1fe9899f
This commit is contained in:
Niklas Laxström authored and Santhosh committed 2016-08-08 07:55:42 +00:00
1 parent 8bb0c2f683
commit b3ba423354
6 files changed
+36674 -15

No files matched your search

-1
View File
@@ -6,5 +6,4 @@
.bundle/
node_modules/
composer.lock
langnames.ser
vendor/
+28 -1
View File
@@ -44,7 +44,34 @@ class LanguageNameIndexer extends Maintenance {
}
$this->output( 'Total buckets: ' . count( $buckets ) . "\n" );
file_put_contents( 'langnames.ser', serialize( $buckets ) );
$this->generateFile( $buckets );
}
private function generateFile( array $buckets ) {
$template = <<<PHP
<?php
// This file is generated by script!
class LanguageNameSearchData {
public static \$buckets = ___;
}
PHP;
// Format for short array format
$data = var_export( $buckets, true );
$data = str_replace( "array (", '[', $data );
$data = str_replace( "),", '],', $data );
// Closing of the array, add correct indendation
$data = preg_replace( "/\)$/", "\t]", $data );
// Remove newlines after =>s
$data = preg_replace( '/(=>)\s+(\[)/m', '\1 \2', $data );
// Convert spaces to tabs. Since we are not top-level need more tabs.
$data = preg_replace( '/^ /m', "\t\t\t", $data );
$data = preg_replace( '/^ /m', "\t\t", $data );
$template = str_replace( '___', $data, $template );
file_put_contents( __DIR__ . '/LanguageNameSearchData.php', $template );
}
}
+2 -12
View File
@@ -18,17 +18,7 @@
* @licence MIT License
*/
class LanguageNameSearch {
protected static $languagenames;
public static function init() {
self::$languagenames = unserialize( file_get_contents( __DIR__ . '/langnames.ser' ) );
}
public static function search( $searchKey, $typos = 0 ) {
if ( self::$languagenames === null ) {
self::init();
}
// Use code's mb_strtolower compatibily code for MW < 1.27
$language = Language::factory( 'en' );
@@ -36,11 +26,11 @@ class LanguageNameSearch {
$searchKey = $language->lc( $searchKey );
$index = self::getIndex( $searchKey );
if ( !isset( self::$languagenames[$index] ) ) {
if ( !isset( LanguageNameSearchData::$buckets[$index] ) ) {
return [];
}
$bucket = self::$languagenames[$index];
$bucket = LanguageNameSearchData::$buckets[$index];
$results = [];
foreach ( $bucket as $name => $code ) {
File diff suppressed because it is too large. Load diff
-1
View File
@@ -1 +0,0 @@
a:773:{i:113;a:63:{s:5:"qafar";s:2:"aa";s:14:"qırımtatarca";s:3:"crh";s:25:"qırımtatarca (latin)‎";s:8:"crh-latn";s:13:"qaraqalpaqsha";s:3:"kaa";s:14:"qabardjajəbza";s:8:"kbd-latn";s:20:"qazaqşa (latın)‎";s:7:"kk-latn";s:23:"qazaqşa (türkïya)‎";s:5:"kk-tr";s:9:"qafár af";s:2:"aa";s:7:"quechua";s:2:"qu";s:35:"quichua del altiplanu de chimborazo";s:3:"qug";s:18:"qədimi ingiliscə";s:3:"ang";s:13:"qərbi bəluc";s:3:"bgn";s:11:"qərbi friz";s:2:"fy";s:6:"qaqauz";s:3:"gag";s:8:"qalisian";s:2:"gl";s:7:"quarani";s:2:"gn";s:9:"qorontalo";s:3:"gor";s:15:"qədimi yunanca";s:3:"grc";s:7:"qucarat";s:2:"gu";s:11:"qara-qalpaq";s:3:"kaa";s:5:"qazax";s:2:"kk";s:15:"qaraçay-balkar";s:3:"krc";s:9:"qırğız";s:2:"ky";s:5:"qanda";s:2:"lg";s:13:"qədimi misir";s:3:"egy";s:18:"qədimi fransızca";s:3:"fro";s:2:"qa";s:3:"gaa";s:4:"qayo";s:3:"gay";s:6:"qabaya";s:3:"gba";s:3:"qez";s:3:"gez";s:12:"qilbert gili";s:3:"gil";s:15:"qədimi almanca";s:3:"goh";s:5:"qondi";s:3:"gon";s:5:"qrebo";s:3:"grb";s:4:"qusi";s:3:"guz";s:7:"qviçin";s:3:"gwi";s:14:"qədimi norsca";s:3:"non";s:14:"qədimi farsca";s:3:"peo";s:20:"qədimi provensialca";s:3:"pro";s:16:"qədimi irlandca";s:3:"sga";s:8:"quítxua";s:2:"qu";s:7:"quitxé";s:3:"quc";s:7:"quiché";s:3:"quc";s:9:"quechuera";s:2:"qu";s:26:"quichua du haut-chimborazo";s:3:"qug";s:28:"quichua àrd-tìr chimborazo";s:3:"qug";s:8:"quirguiz";s:2:"ky";s:39:"quechua dell’altopiano del chimborazo";s:3:"qug";s:11:"qallunaatut";s:2:"da";s:15:"quiché-sprooch";s:3:"quc";s:14:"quechua iyápi";s:2:"qu";s:18:"ထိုင်း";s:2:"th";s:7:"quicuio";s:2:"ki";s:8:"quíchua";s:2:"qu";s:12:"quiniaruanda";s:2:"rw";s:9:"quimbundo";s:3:"kmb";s:15:"qulla sami simi";s:3:"sma";s:6:"quiche";s:3:"quc";s:12:"quyi sorbcha";s:3:"dsb";s:8:"qozoqcha";s:2:"kk";s:11:"qirgʻizcha";s:2:"ky";s:10:"quyi nemis";s:3:"nds";s:11:"quyi sakson";s:6:"nds-nl";}i:72;a:238:{s:12:"аҧсшәа";s:2:"ab";s:16:"адыгабзэ";s:8:"ady-cyrl";s:8:"авар";s:2:"av";s:16:"адыгэбзэ";s:8:"kbd-cyrl";s:18:"абхазская";s:2:"ab";s:20:"адыгейская";s:3:"ady";s:18:"афрыкаанс";s:2:"af";s:8:"акан";s:2:"ak";s:18:"амхарская";s:2:"am";s:20:"арагонская";s:2:"an";s:16:"арабская";s:2:"ar";s:20:"арамейская";s:3:"arc";s:16:"асамская";s:2:"as";s:22:"астурыйская";s:3:"ast";s:16:"аварская";s:2:"av";s:12:"аймара";s:2:"ay";s:30:"азербайджанская";s:2:"az";s:20:"англійская";s:2:"en";s:34:"англійская (канад.)";s:5:"en-ca";s:18:"армянская";s:2:"hy";s:10:"арома";s:2:"om";s:20:"асецінская";s:2:"os";s:18:"албанская";s:2:"sq";s:8:"агем";s:3:"agq";s:16:"акадзкая";s:3:"akk";s:16:"алеуцкая";s:3:"ale";s:6:"асу";s:3:"asa";s:38:"англійская (аўстрал.)";s:5:"en-au";s:29:"англійская (зша)";s:5:"en-us";s:14:"аджыбве";s:2:"oj";s:16:"абхаская";s:2:"ab";s:30:"азэрбайджанская";s:2:"az";s:39:"аўстрыйская нямецкая";s:5:"de-at";s:35:"афіцыйная нямецкая";s:9:"de-formal";s:20:"ангельская";s:2:"en";s:20:"асэтынская";s:2:"os";s:20:"альбанская";s:2:"sq";s:47:"аўстралійская ангельская";s:5:"en-au";s:45:"амэрыканская ангельская";s:5:"en-us";s:8:"афар";s:2:"aa";s:14:"абхазки";s:2:"ab";s:14:"ачински";s:3:"ace";s:10:"адиге";s:3:"ady";s:18:"африкаанс";s:2:"af";s:16:"амхарски";s:2:"am";s:18:"арагонски";s:2:"an";s:12:"ангика";s:3:"anp";s:14:"арабски";s:2:"ar";s:18:"арамейски";s:3:"arc";s:14:"асамски";s:2:"as";s:16:"астурски";s:3:"ast";s:14:"аварски";s:2:"av";s:10:"авади";s:3:"awa";s:28:"азербайджански";s:2:"az";s:18:"английски";s:2:"en";s:16:"арменски";s:2:"hy";s:18:"арумънски";s:3:"rup";s:16:"албански";s:2:"sq";s:10:"аколи";s:3:"ach";s:14:"адангме";s:3:"ada";s:16:"авестски";s:2:"ae";s:16:"африхили";s:3:"afh";s:8:"айну";s:3:"ain";s:14:"акадски";s:3:"akk";s:16:"алеутски";s:3:"ale";s:14:"арапахо";s:3:"arp";s:12:"аравак";s:3:"arw";s:10:"атсам";s:3:"cch";s:27:"английски (сащ)";s:5:"en-us";s:18:"абхазхойн";s:2:"ab";s:16:"амхаройн";s:2:"am";s:22:"арауканхойн";s:3:"arn";s:16:"ассамийн";s:2:"as";s:28:"азербайджанийн";s:2:"az";s:29:"австрин немцойн";s:5:"de-at";s:16:"албанойн";s:2:"sq";s:21:"атта китайн";s:7:"zh-hans";s:12:"агхӀем";s:3:"agq";s:35:"австралин ингалсан";s:5:"en-au";s:33:"американ ингалсан";s:5:"en-us";s:20:"а҆ра́вскїй";s:2:"ar";s:45:"а҆ѵстрі́йскїй нѣме́цкїй";s:5:"de-at";s:24:"а҆нглі́йскїй";s:2:"en";s:55:"а҆ѵстралі́Line truncated
+1
View File
@@ -44,6 +44,7 @@
"ApiULSLocalization": "api/ApiULSLocalization.php",
"FontRepoCompiler": "includes/FontRepoCompiler.php",
"LanguageNameSearch": "data/LanguageNameSearch.php",
"LanguageNameSearchData": "data/LanguageNameSearchData.php",
"ResourceLoaderULSJsonMessageModule": "includes/ResourceLoaderULSJsonMessageModule.php",
"ResourceLoaderULSModule": "includes/ResourceLoaderULSModule.php",
"ULSJsonMessageLoader": "includes/ULSJsonMessageLoader.php",