Brion VIBBER has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/62243


Change subject: Experimental $wgScoreUseSVG mode
......................................................................

Experimental $wgScoreUseSVG mode

Change-Id: I6388ad648e401548fc13b12dcfb7066ba0113515
---
M Score.body.php
M Score.php
2 files changed, 46 insertions(+), 18 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Score 
refs/changes/43/62243/1

diff --git a/Score.body.php b/Score.body.php
index 3201c4b..1a6e463 100644
--- a/Score.body.php
+++ b/Score.body.php
@@ -353,6 +353,21 @@
        }
 
        /**
+        * Return the file extension used for output images
+        *
+        * @return string
+        */
+       private static function fileExtension() {
+               global $wgScoreUseSVG;
+               if ( $wgScoreUseSVG ) {
+                       $ext = 'svg';
+               } else {
+                       $ext = 'png';
+               }
+               return $ext;
+       }
+
+       /**
         * Generates the HTML code for a score tag.
         *
         * @param $parser Parser MediaWiki parser.
@@ -395,6 +410,7 @@
         * @throws ScoreException if an error occurs.
         */
        private static function generateHTML( &$parser, $code, $options ) {
+               $ext = self::fileExtension();
                $prof = new Score_ScopedProfiling( __METHOD__ );
                try {
                        $backend = self::getBackend();
@@ -406,8 +422,8 @@
                        }
 
                        /* Generate PNG and MIDI files if necessary */
-                       $imageFileName = "{$options['file_name_prefix']}.png";
-                       $multi1FileName = 
"{$options['file_name_prefix']}-1.png";
+                       $imageFileName = "{$options['file_name_prefix']}.$ext";
+                       $multi1FileName = 
"{$options['file_name_prefix']}-1.$ext";
                        $midiFileName = "{$options['file_name_prefix']}.midi";
                        if (
                                ( 
@@ -461,7 +477,7 @@
                        } elseif ( isset( $existingFiles[$multi1Path] ) ) { // 
@fixme: $multi1Path is undefined
                                $link = '';
                                for ( $i = 1; ; ++$i ) {
-                                       $fileName = 
"{$options['file_name_prefix']}-$i.png";
+                                       $fileName = 
"{$options['file_name_prefix']}-$i.$ext";
                                        if ( !isset( $existingFiles[$fileName] 
) ) {
                                                break;
                                        }
@@ -548,12 +564,13 @@
                }
 
                /* Create the working environment */
+               $ext = self::fileExtension();
                $factoryDirectory = $options['factory_directory'];
                self::createDirectory( $factoryDirectory, 0700 );
                $factoryLy = "$factoryDirectory/file.ly";
                $factoryMidi = "$factoryDirectory/file.midi";
-               $factoryImage = "$factoryDirectory/file.png";
-               $factoryImageTrimmed = "$factoryDirectory/file-trimmed.png";
+               $factoryImage = "$factoryDirectory/file.$ext";
+               $factoryImageTrimmed = "$factoryDirectory/file-trimmed.$ext";
 
                /* Generate LilyPond input file */
                if ( $options['lang'] == 'lilypond' ) {
@@ -580,9 +597,14 @@
                if ( !$rc ) {
                        throw new ScoreException( wfMessage( 'score-chdirerr', 
$factoryDirectory ) );
                }
+               if ( $ext === 'png') {
+                       $mode = '-dbackend=ps --png';
+               } else {
+                       $mode = '-dbackend=svg';
+               }
                $cmd = wfEscapeShellArg( $wgScoreLilyPond )
                        . ' ' . wfEscapeShellArg( '-dsafe=#t' )
-                       . ' -dbackend=ps --png --header=texidoc '
+                       . ' ' . $mode . ' --header=texidoc '
                        . wfEscapeShellArg( $factoryLy )
                        . ' 2>&1';
                $output = wfShellExec( $cmd, $rc2 );
@@ -604,11 +626,11 @@
                                self::trimImage( $factoryImage, 
$factoryImageTrimmed );
                        } else {
                                for ( $i = 1; ; ++$i ) {
-                                       $src = "$factoryDirectory/file-$i.png";
+                                       $src = "$factoryDirectory/file-$i.$ext";
                                        if ( !file_exists( $src ) ) {
                                                break;
                                        }
-                                       $dest = 
"$factoryDirectory/file-$i-trimmed.png";
+                                       $dest = 
"$factoryDirectory/file-$i-trimmed.$ext";
                                        self::trimImage( $src, $dest );
                                }
                        }
@@ -637,13 +659,13 @@
                }
 
                // Add the PNGs
-               if ( file_exists( $factoryImageTrimmed ) ) {
-                       if ( $wgScoreTrim ) {
-                               $src = $factoryImageTrimmed;
-                       } else {
-                               $src = $factoryImage;
-                       }
-                       $dstFileName = "{$options['file_name_prefix']}.png";
+               if ( $wgScoreTrim ) {
+                       $src = $factoryImageTrimmed;
+               } else {
+                       $src = $factoryImage;
+               }
+               if ( file_exists( $src ) ) {
+                       $dstFileName = "{$options['file_name_prefix']}.$ext";
                        $ops[] = array(
                                'op' => 'store',
                                'src' => $src,
@@ -653,14 +675,14 @@
                } else {
                        for ( $i = 1; ; ++$i ) {
                                if ( $wgScoreTrim ) {
-                                       $src = 
"$factoryDirectory/file-$i-trimmed.png";
+                                       $src = 
"$factoryDirectory/file-$i-trimmed.$ext";
                                } else {
-                                       $src = "$factoryDirectory/file-$i.png";
+                                       $src = "$factoryDirectory/file-$i.$ext";
                                }
                                if ( !file_exists( $src ) ) {
                                        break;
                                }
-                               $dstFileName = 
"{$options['file_name_prefix']}-$i.png";
+                               $dstFileName = 
"{$options['file_name_prefix']}-$i.$ext";
                                $dest = 
"{$options['dest_storage_path']}/$dstFileName";
                                $ops[] = array(
                                        'op' => 'store',
diff --git a/Score.php b/Score.php
index dbfcf47..031fe9d 100644
--- a/Score.php
+++ b/Score.php
@@ -74,6 +74,12 @@
  */
 $wgScoreFileBackend = false;
 
+/**
+ * Option to use SVG files instead of PNG.
+ * Warning: this does not yet provide PNG fallbacks for old browsers.
+ */
+$wgScoreUseSVG = false;
+
 /*
  * Extension credits
  */

-- 
To view, visit https://gerrit.wikimedia.org/r/62243
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I6388ad648e401548fc13b12dcfb7066ba0113515
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Score
Gerrit-Branch: master
Gerrit-Owner: Brion VIBBER <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to