* integrate Poem extension into core (patch by Nathaniel Herman)
authorRyan Schmidt <skizzerz@users.mediawiki.org>
Sun, 5 Oct 2008 20:27:23 +0000 (20:27 +0000)
committerRyan Schmidt <skizzerz@users.mediawiki.org>
Sun, 5 Oct 2008 20:27:23 +0000 (20:27 +0000)
CREDITS
RELEASE-NOTES
includes/parser/Parser.php

diff --git a/CREDITS b/CREDITS
index a36a66c..2c418e1 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -53,6 +53,7 @@ following names for their contribution to the product.
 * Michael De La Rue
 * Mike Horvath
 * Mormegil
+* Nathaniel Herman
 * RememberTheDot
 * ST47
 
index 672dcb6..a78271e 100644 (file)
@@ -60,6 +60,7 @@ The following extensions are migrated into MediaWiki 1.14:
 * RenderHash
 * NoMoveUserPages
 * Special:Nuke to mass delete all pages created by a user
+* Poem (patch by Nathaniel Herman)
 
 === New features in 1.14 ===
 
index 9e8ed0c..52b8692 100644 (file)
@@ -127,7 +127,7 @@ class Parser
                $this->mTransparentTagHooks = array();
                $this->mFunctionHooks = array();
                $this->mFunctionSynonyms = array( 0 => array(), 1 => array() );
-               $this->mDefaultStripList = $this->mStripList = array( 'nowiki', 'gallery' );
+               $this->mDefaultStripList = $this->mStripList = array( 'nowiki', 'gallery', 'poem' );
                $this->mUrlProtocols = wfUrlProtocols();
                $this->mExtLinkBracketedRegex = '/\[(\b(' . wfUrlProtocols() . ')'.
                        '[^][<>"\\x00-\\x20\\x7F]+) *([^\]\\x0a\\x0d]*?)\]/S';
@@ -3304,6 +3304,9 @@ class Parser
                                case 'gallery':
                                        $output = $this->renderImageGallery( $content, $attributes );
                                        break;
+                               case 'poem':
+                                       $output = $this->renderPoem( $content, $attributes );
+                                       break;
                                default:
                                        if( isset( $this->mTagHooks[$name] ) ) {
                                                # Workaround for PHP bug 35229 and similar
@@ -4173,6 +4176,40 @@ class Parser
                return $ig->toHTML();
        }
 
+       /** Renders any text in between <poem></poem> tags
+        * based on http://www.mediawiki.org/wiki/Extension:Poem
+        */
+
+       function renderPoem( $in, $param=array() ) {
+
+               /* using newlines in the text will cause the parser to add <p> tags,
+               * which may not be desired in some cases
+               */
+               $nl = isset( $param['compact'] ) ? '' : "\n";
+  
+               $tag = $this->insertStripItem( "<br />", $this->mStripState );
+               $text = preg_replace(
+                       array( "/^\n/", "/\n$/D", "/\n/", "/^( +)/me" ),
+                       array( "", "", "$tag\n", "str_replace(' ','&nbsp;','\\1')" ),
+                       $in );
+               $text = $this->recursiveTagParse( $text );
+
+               // Pass HTML attributes through to the output.
+               $attribs = Sanitizer::validateTagAttributes( $param, 'div' );
+
+               // Wrap output in a <div> with "poem" class.
+               if( isset( $attribs['class'] ) ) {
+                       $attribs['class'] = 'poem ' . $attribs['class'];
+               } else {
+                       $attribs['class'] = 'poem';
+               }
+
+               return wfOpenElement( 'div', $attribs ) .
+                       $nl .
+                       trim( $text ) .
+                       "$nl</div>";
+       }
+
        function getImageParams( $handler ) {
                if ( $handler ) {
                        $handlerClass = get_class( $handler );