mediawiki-extensions-Syntax.../maintenance/updateLexerList.php
Kunal Mehta af6654e5f9 Port to BoxedCommand
All of the interactions with `pygmentize` have been refactored into a
new class, conviently called Pygmentize. It is responsible for getting

* pygments version (cached in APCu for 1 hour)
* generated CSS (cached in WAN by version for 1 week)
* lexer list (cached in APCu by version for 1 day)

and actually highlighting stuff! Most code paths differentiate whether
we're using a bundled version of pygments or one that has been
explicitly configured. If using the bundled one, we take shortcuts since
we already know the lexer list, have the CSS generated, etc.

ResourceLoaderPygmentsModule is added to switch between loading
generated CSS from the bundled file or Shellboxing out to get it from
pygments.

Bug: T289227
Change-Id: I2e82e5aa2a71604b87ffb4936204201d06678341
2021-09-10 11:47:28 -07:00

60 lines
1.9 KiB
PHP

<?php
/**
* Script to update list of supported lexers.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*
* @file
* @author Ori Livneh <ori@wikimedia.org>
* @ingroup Maintenance
*/
use MediaWiki\SyntaxHighlight\Pygmentize;
use MediaWiki\SyntaxHighlight\PygmentsException;
use Wikimedia\StaticArrayWriter;
$IP = getenv( 'MW_INSTALL_PATH' ) ?: __DIR__ . '/../../..';
require_once "$IP/maintenance/Maintenance.php";
class UpdateLexerList extends Maintenance {
public function __construct() {
parent::__construct();
$this->requireExtension( 'SyntaxHighlight' );
$this->addDescription( 'Update list of lexers supported by SyntaxHighlight' );
}
public function execute() {
$header = 'Generated by ' . basename( __FILE__ );
try {
$data = Pygmentize::fetchLexers();
} catch ( PygmentsException $e ) {
$this->fatalError( "Error when getting lexers:\n" . $e->getMessage() );
}
$writer = new StaticArrayWriter();
$code = $writer->create( $data, $header );
file_put_contents( __DIR__ . '/../SyntaxHighlight.lexers.php', $code );
$this->output( "Updated language list written to SyntaxHighlight.lexers.php\n" );
}
}
$maintClass = UpdateLexerList::class;
require_once RUN_MAINTENANCE_IF_MAIN;