generatePhpCharToUpperMappings: Die if fopen fails
[lhc/web/wiklou.git] / maintenance / mediawiki.Title / generatePhpCharToUpperMappings.php
index 8073c7c..9fc5513 100755 (executable)
@@ -40,11 +40,13 @@ class GeneratePhpCharToUpperMappings extends Maintenance {
        }
 
        public function execute() {
-               global $wgContLang;
+               global $wgContLang, $IP;
 
                $data = [];
 
-               $result = Shell::command( [ 'node', __DIR__ . '/generateJsToUpperCaseList.js' ] )
+               $result = Shell::command(
+                               [ 'node', $IP . '/maintenance/mediawiki.Title/generateJsToUpperCaseList.js' ]
+                       )
                        // Node allocates lots of memory
                        ->limits( [ 'memory' => 1024 * 1024 ] )
                        ->execute();
@@ -65,13 +67,28 @@ class GeneratePhpCharToUpperMappings extends Maintenance {
                        $phpUpper = $wgContLang->ucfirst( $char );
                        $jsUpper = $jsUpperChars[$i];
                        if ( $jsUpper !== $phpUpper ) {
-                               $data[$char] = $phpUpper;
+                               if ( $char === $phpUpper ) {
+                                       // Optimisation: Use the empty string to signal "leave character unchanged".
+                                       // Reduces the transfer size by ~50%. Reduces browser memory cost as well.
+                                       $data[$char] = '';
+                               } else {
+                                       $data[$char] = $phpUpper;
+                               }
                        }
                }
 
-               $this->output( str_replace( '    ', "\t",
+               $mappingJson = str_replace( '    ', "\t",
                        json_encode( $data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE )
-               ) . "\n" );
+               ) . "\n";
+               $outputPath = '/resources/src/mediawiki.Title/phpCharToUpper.json';
+               $file = fopen( $IP . $outputPath, 'w' );
+               if ( !$file ) {
+                       $this->fatalError( "Unable to write file \"$IP$outputPath\"" );
+               }
+               fwrite( $file, $mappingJson );
+
+               $this->output( count( $data ) . " differences found.\n" );
+               $this->output( "Written to $outputPath\n" );
        }
 }