LyricExtension/Source Code Dev
From PeacockWiki
(Difference between revisions)
Revision as of 05:53, 1 June 2006 (edit) Trevorp (Talk | contribs) ← Previous diff |
Current revision (06:04, 11 June 2006) (edit) Trevorp (Talk | contribs) |
||
Line 4: | Line 4: | ||
# | # | ||
# Simple lyric parser extension for mediawiki. | # Simple lyric parser extension for mediawiki. | ||
- | # Written by Trevor Peacock, 1 June 2006 | + | # Written by Trevor Peacock, 11 June 2006 |
- | # version 0.2 | + | # version 0.3 |
# Tested on MediaWiki 1.6devel, PHP 5.0.5 (apache2handler) | # Tested on MediaWiki 1.6devel, PHP 5.0.5 (apache2handler) | ||
+ | # | ||
+ | # Official Site | ||
+ | # http://wiki.peacocktech.com/wiki/LyricExtension | ||
# | # | ||
# developed to support the notation of lyrics in mediawiki. | # developed to support the notation of lyrics in mediawiki. | ||
Line 15: | Line 18: | ||
# * Optional CSS styling embedded in every page | # * Optional CSS styling embedded in every page | ||
# * CSS styling not embedded in meta tage, rather @import-ed from extension file | # * CSS styling not embedded in meta tage, rather @import-ed from extension file | ||
+ | # * Support for lyricnote and spoken/speech tags | ||
+ | # | ||
+ | # Thanks to Sean Columbo for his assistance | ||
+ | # http://lyricwiki.org/User:Sean_Colombo | ||
# | # | ||
# To install, copy this file into "extensions" directory, and add | # To install, copy this file into "extensions" directory, and add | ||
Line 74: | Line 81: | ||
global $wgParser; | global $wgParser; | ||
$wgParser->setHook("lyric", "renderLyric"); | $wgParser->setHook("lyric", "renderLyric"); | ||
+ | $wgParser->setHook("lyrics", "renderLyric"); | ||
+ | $wgParser->setHook("spoken", "renderLyricSpeech"); | ||
+ | $wgParser->setHook("speech", "renderLyricSpeech"); | ||
+ | $wgParser->setHook("lyricnote", "renderLyricNote"); | ||
+ | } | ||
+ | |||
+ | function renderWikiText($input, &$parser) | ||
+ | { | ||
+ | return $parser->parse($input, $parser->mTitle, $parser->mOptions, true, false)->getText(); | ||
} | } | ||
#render <lyric> text | #render <lyric> text | ||
- | function renderLyric($input, $argv) | + | function breakText($input) |
+ | { | ||
+ | return str_replace(array("\r\n", "\r","\n"), "<br/>", trim($input)); | ||
+ | } | ||
+ | |||
+ | function renderLyric($input, $argv, &$parser) | ||
{ | { | ||
#make new lines in wikitext new lines in html | #make new lines in wikitext new lines in html | ||
- | $transform=str_replace(array("\r\n", "\r","\n"), "<br/>", trim($input)); | + | $transform=breakText($input); |
#define css lyric style | #define css lyric style | ||
Line 86: | Line 107: | ||
#parse embedded wikitext | #parse embedded wikitext | ||
- | global $wgOut; | + | #dirty dirty hack: how else to pass parameter to subsequent calls? |
- | return $wgOut->parse($transform, false); | + | $parser->mTitle->mRestrictions['inlyric']=1; |
+ | $output=renderWikiText($transform, $parser); | ||
+ | unset($parser->mTitle->mRestrictions['inlyric']); | ||
+ | return $output; | ||
+ | } | ||
+ | |||
+ | function renderCSSTag($input, $argv, &$parser, $tag) | ||
+ | { | ||
+ | #var_dump($parser->mTitle); | ||
+ | #define css lyric style | ||
+ | if(!isset($parser->mTitle->mRestrictions['inlyric'])) | ||
+ | { | ||
+ | #http://svn.wikimedia.org/doc/classParser.html#ee79d906f7320ab444b48d19c9d20f1e | ||
+ | #above instructs parse is not to be called recursivly. Am i breaking this? | ||
+ | # $transform="<lyric>"."<div id=\"$tag\">".$input."</div>"."</lyric>"; | ||
+ | $transform="<lyric>"."<$tag>".$input."</$tag>"."</lyric>"; | ||
+ | #parse embedded wikitext | ||
+ | $output=renderWikiText(breakText($transform), $parser); | ||
+ | return $output; | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | return "<div id=\"$tag\">".renderWikiText(breakText($input), $parser)."</div>"; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | #render <speech> text | ||
+ | function renderLyricSpeech($input, $argv, &$parser) | ||
+ | { | ||
+ | return renderCSSTag($input, $argv, &$parser, 'spoken'); | ||
+ | } | ||
+ | |||
+ | #render <note> text | ||
+ | function renderLyricNote($input, $argv, &$parser) | ||
+ | { | ||
+ | return renderCSSTag($input, $argv, &$parser, 'lyricnote'); | ||
} | } | ||
Line 126: | Line 182: | ||
color: black; | color: black; | ||
background-color: #ffffcc; | background-color: #ffffcc; | ||
+ | } | ||
+ | |||
+ | #lyricnote { | ||
+ | padding: 0em; | ||
+ | border: 0px; | ||
+ | color: black; | ||
+ | background-color: #cccccc; | ||
+ | } | ||
+ | |||
+ | #spoken { | ||
+ | padding: 0em; | ||
+ | border: 0px; | ||
+ | color: black; | ||
+ | background-color: #ffffff; | ||
} | } | ||
<?php | <?php |
Current revision
<?php # # Simple lyric parser extension for mediawiki. # Written by Trevor Peacock, 11 June 2006 # version 0.3 # Tested on MediaWiki 1.6devel, PHP 5.0.5 (apache2handler) # # Official Site # http://wiki.peacocktech.com/wiki/LyricExtension # # developed to support the notation of lyrics in mediawiki. # see http://lyricwiki.org/User:TrevorP/Notation # # Features: # * Allows basic lyric notation # * Optional CSS styling embedded in every page # * CSS styling not embedded in meta tage, rather @import-ed from extension file # * Support for lyricnote and spoken/speech tags # # Thanks to Sean Columbo for his assistance # http://lyricwiki.org/User:Sean_Colombo # # To install, copy this file into "extensions" directory, and add # the following line to the end of LocalSettings.php # (above the ? > ) # # require("extensions/lyric.php"); # ################################################################################ # Functions # # This section has no configuration, and can be ignored. # function filename($name) { $name=explode('/', $name); $name=explode('\\', $name[count($name)-1]); return $name[count($name)-1]; } ################################################################################ # Extension Credits Definition # # This section has no configuration, and can be ignored. # if(isset($wgScriptPath)) { $wgExtensionCredits["parserhook"][]=array( 'name' => 'Lyric Extension', 'version' => '0.1', 'url' => 'http://wiki.peacocktech.com/wiki/LyricExtension', 'author' => '[http://about.peacocktech.com/trevorp/ Trevor Peacock]', 'description' => 'Adds features allowing easy notation of lyrics in mediawiki' ); } ################################################################################ # Lyric Render Section # # This section has no configuration, and can be ignored. # # This section renders <lyric> tags. It forces a html break on every line, # and styles the section with a css id. # this id can either be in the mediawiki css files, or defined by the extension # if(isset($wgScriptPath)) { #Instruct mediawiki to call LyricExtension to initialise new extension $wgExtensionFunctions[] = "LyricExtension"; } #Install extension function LyricExtension() { #install hook on the element <lyric> global $wgParser; $wgParser->setHook("lyric", "renderLyric"); $wgParser->setHook("lyrics", "renderLyric"); $wgParser->setHook("spoken", "renderLyricSpeech"); $wgParser->setHook("speech", "renderLyricSpeech"); $wgParser->setHook("lyricnote", "renderLyricNote"); } function renderWikiText($input, &$parser) { return $parser->parse($input, $parser->mTitle, $parser->mOptions, true, false)->getText(); } #render <lyric> text function breakText($input) { return str_replace(array("\r\n", "\r","\n"), "<br/>", trim($input)); } function renderLyric($input, $argv, &$parser) { #make new lines in wikitext new lines in html $transform=breakText($input); #define css lyric style $transform="<div id=\"lyric\">".$transform."</div>"; #parse embedded wikitext #dirty dirty hack: how else to pass parameter to subsequent calls? $parser->mTitle->mRestrictions['inlyric']=1; $output=renderWikiText($transform, $parser); unset($parser->mTitle->mRestrictions['inlyric']); return $output; } function renderCSSTag($input, $argv, &$parser, $tag) { #var_dump($parser->mTitle); #define css lyric style if(!isset($parser->mTitle->mRestrictions['inlyric'])) { #http://svn.wikimedia.org/doc/classParser.html#ee79d906f7320ab444b48d19c9d20f1e #above instructs parse is not to be called recursivly. Am i breaking this? # $transform="<lyric>"."<div id=\"$tag\">".$input."</div>"."</lyric>"; $transform="<lyric>"."<$tag>".$input."</$tag>"."</lyric>"; #parse embedded wikitext $output=renderWikiText(breakText($transform), $parser); return $output; } else { return "<div id=\"$tag\">".renderWikiText(breakText($input), $parser)."</div>"; } } #render <speech> text function renderLyricSpeech($input, $argv, &$parser) { return renderCSSTag($input, $argv, &$parser, 'spoken'); } #render <note> text function renderLyricNote($input, $argv, &$parser) { return renderCSSTag($input, $argv, &$parser, 'lyricnote'); } ################################################################################ # CSS Styling Section # # This section may require configuration. # # This section adds a css style to all pages to style lyric sections # # If you wish to manually define the style in the css templates, # add a "#" at the start of this line: if(isset($wgScriptPath)) { $wgHooks['SkinTemplateSetupPageCss'][] = 'LyricCss'; } function LyricCss(&$css) { $css = "/*<![CDATA[*/". " @import \"$wgScriptPath/extensions/".filename(__FILE__)."\"; ". "/*]]>*/"; return true; } ################################################################################ # CSS section # # This section has no configuration, and can be ignored. # if(!isset($wgScriptPath)) { header("Content-type: text/css"); ?>#lyric { padding: 1em; border: 1px solid silver; color: black; background-color: #ffffcc; } #lyricnote { padding: 0em; border: 0px; color: black; background-color: #cccccc; } #spoken { padding: 0em; border: 0px; color: black; background-color: #ffffff; } <?php } ?>