22 public function __construct() {
23 parent::__construct();
24 $this->addDescription(
'Script for comparing supported YAML parser implementations.' );
25 $this->requireExtension(
'Translate' );
28 public function execute() {
29 global $wgTranslateGroupFiles, $wgTranslateYamlLibrary;
35 foreach ( [
'syck',
'spyc',
'phpyaml' ] as $driver ) {
36 $mempeaks[$driver] = -memory_get_peak_usage(
true );
37 $mems[$driver] = -memory_get_usage(
true );
38 $times[$driver] = -microtime(
true );
39 $wgTranslateYamlLibrary = $driver;
40 $documents[$driver] = [];
41 foreach ( $wgTranslateGroupFiles as $file ) {
42 foreach ( self::parseGroupFile( $file ) as $id => $docu ) {
43 $documents[$driver][
"$file-$id"] = $docu;
47 $times[$driver] += microtime(
true );
48 $mems[$driver] += memory_get_usage(
true );
49 $mempeaks[$driver] += memory_get_peak_usage(
true );
51 self::sortNestedArrayAssoc( $documents[$driver] );
52 file_put_contents(
"yaml-test-$driver.txt", var_export( $documents[$driver],
true ) );
53 file_put_contents(
"yaml-output-$driver.txt", TranslateYaml::dump( $documents[$driver] ) );
57 var_dump( $mempeaks );
60 public static function parseGroupFile( $filename ) {
61 $data = file_get_contents( $filename );
62 $documents = preg_split(
"/^---$/m", $data, -1, PREG_SPLIT_NO_EMPTY );
65 foreach ( $documents as $document ) {
67 if ( isset( $document[
'TEMPLATE'] ) ) {
68 $template = $document[
'TEMPLATE'];
70 if ( !isset( $document[
'BASIC'][
'id'] ) ) {
71 trigger_error(
'No path ./BASIC/id (group id not defined) ' .
72 "in yaml document located in $filename" );
75 $groups[$document[
'BASIC'][
'id']] = $document;
79 return array_map(
static function ( array $group ) use ( $template ): array {
84 public static function sortNestedArrayAssoc( &$a ) {
86 foreach ( $a as &$value ) {
87 if ( is_array( $value ) ) {
88 self::sortNestedArrayAssoc( $value );