User:Gizmhail/RawContent

Purpose edit

This extension adds the rawcontent parser function. It returns a page content unmodified (unlike msgnw wich transforms "---" symbols or bulleted lists). It can be seen as an improved (or fixed) msgnw.

It can be used, for instance, to include the true content of a page in a textarea form, using an extension like SimpleForm (trying to do this with msgnw parser function works, until the included page contains lists, includeonly sections or "----" symbols ).

It also adds the normalizedfullpagename parser function (see below).

Usage edit

{{#rawcontent:<Page title>}}

This will return <Page title> page content.

{{#normalizedfullpagename:<Full page title>}}

This will return namespace:pagetitle for <Full page title>, with namespace translated to english (for instance, "Modèle" namespace from a french wiki will be translated to "Template). It is useful, for instance, if you have to synchronize technical templates (like Template:Ambox of wikipedia) having the same name between several wikis in different languages.

Code edit

<?
/*
 * 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.
 *
 * @author Sebastien Poivre <gizmhail@gmail.com>
 * @copyright Copyright (C) 2008 Sebastien Poivre
 * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
 */

$wgExtensionCredits['parserhook'][] = array(
        'name' => 'RawContent',
        'author' =>  'Orange Labs (Sebastien Poivre)',
        'url' => 'http://www.mediawiki.org/wiki/User:Gizmhail/RawContent',
        'description' => 'Add (mainly) the rawcontent parser function. It returns a page content unmodified (unlike msgnw wich transforms among others "---" symbols, includeonly sections or bulleted lists).',
        'version' => 0.3
  );

# Define a setup function
$wgExtensionFunctions[] = 'wfRawContentParserFunction_Setup';
# Add a hook to initialise the magic word
$wgHooks['LanguageGetMagic'][]       = 'wfRawContentParserFunction_Magic';
$wgHooks['ParserAfterTidy'][] = 'wfRawContentParserAfterTidy';

function wfRawContentParserFunction_Setup() {
        global $wgParser;
        # Set a function hook associating the "rawcontent" magic word with our function
        $wgParser->setFunctionHook( 'rawcontent', 'wfRawContentParserFunction_Render' );
        $wgParser->setFunctionHook( 'normalizedfullpagename', 'wfRawContentParserFunctionNormalizedPageName_Render' );
}

function wfRawContentParserFunction_Magic( &$magicWords, $langCode ) {
        # Add the magic word
        # The first array element is case sensitive, in this case it is not case sensitive
        # All remaining elements are synonyms for our parser function
        $magicWords['rawcontent'] = array( 0, 'rawcontent' );
        $magicWords['normalizedfullpagename'] = array( 0, 'normalizedfullpagename' );
        # unless we return true, other parser functions extensions won't get loaded.
        return true;
}

function wfRawContentParserFunction_Render( &$parser, $param1 = '', $param2 = '' ) {
        # The parser function itself
        # The input parameters are wikitext with templates expanded
        # The output should be wikitext too
	global $rawContentMarkerList;
	$title = Title::newFromText( $param1 );
	$articleContent = "";
	if($title){
		list($articleContent,$final_title) = $parser->fetchTemplateAndtitle( $title );
		if(!$final_title||$final_title->getText()!=$title->getText()||$title->mNamespace!=$final_title->mNamespace){
			$articleContent = '';
			#Redirection
			#TODO : check that it is the proper way to do this
			$rev = Revision::newFromTitle( $title );
			if($rev){
				$articleContent =  $rev->getText();
			}
		}
	}
	$makercount =  count($rawContentMarkerList);
	$marker = "xx-start-raw-content---".$makercount."-raw-content-end-xx";
	$rawContentMarkerList[$makercount] = $articleContent;
	return $marker;
}


function wfRawContentParserFunctionNormalizedPageName_Render(&$parser,$param1 = ''){
        $title = Title::newFromText( $param1 );
        $namespace = '';
        $pagename = '';
        if($title){
                $namespace = Language::factory( 'en' )->getNsText($title->mNamespace);
                $pagename = $title->getText();
        }
        if($namespace != ''){
                $pagename = "$namespace:$pagename";
        }
        return $pagename;
}

function wfRawContentParserAfterTidy(&$parser, &$text){
        global $rawContentMarkerList;
        for ($i=0;$i<count($rawContentMarkerList);$i++)
                $text = preg_replace(
                        '/xx-start-raw-content---'.$i.'-raw-content-end-xx/',
                        $rawContentMarkerList[$i],
                        $text);
        return true;
}