Figlet Extension

From s23
Jump to navigation Jump to search

Integrate figlet text into wiki pages using figletlink in a custom Mediawiki extension:

Syntax[edit]

<figlet>text</figlet> (default font=standard)

<figlet font=fontname>text</figlet> (set another font)

<figlet>$fonts</figlet> (show font list)

<figlet font=$self>$self</figlet> (special for template usage, $self=pagename)

Example[edit]

<figlet>moo</figlet>

<figlet>moo</figlet>

Result[edit]

<figlet font=digital>moo</figlet>


Example[edit]

<figlet>$fonts</figlet>

Result[edit]

<figlet>$fonts</figlet>


For all fonts also see Category:Figlet

Source[edit]

Historic: The original idea by DrOwl: "this is a first untested version with just monkey knolage of how to make it work"

<highlightSyntax> <?php

  1. Figlet Mediawiki extension
  2. using shell figlet
  3. by DrOwl 21.06.2005 modded from
  4. by mutante 25.03.2005
  5. modded again 21.05.2005 ,mutante
  6. modded again Owl & mutante 20.06.2006 - the slightly more secure 23 line version

$wgExtensionFunctions[] = "wfFigletExtension";

  1. extension hook callback function

function wfFigletExtension() { global $wgParser;

  1. install parser hook for <figlet> tags

$wgParser->setHook( "figlet", "renderFiglet" ); } function renderFiglet( $input ) { global $wgOutputEncoding; $input = mysql_escape_string($input);

$output="

";
$output.=shell_exec("figlet " . escapeshellarg($input));
$output.="

";

return $output; } ?> </highlightSyntax>

Current Source[edit]

<highlightSyntax> <?php

  1. Figlet Mediawiki extension
  2. using shell figlet
  3. by DrOwl 21.06.2005 modded from
  4. by mutante 25.03.2005
  5. modded again 21.05.2005 ,mutante
  6. modded again Owl & mutante 20.06.2006 - the slightly more secure 23 line version
  7. modded again, mutante 22.06.2006 - the advanced version with fonts
  8. modded again, mutante 06.11.2006 - fixed bug (ctype_alnum) & added ExtensionCredits

$wgExtensionFunctions[] = "wfFigletExtension";

  1. extension hook callback function

function wfFigletExtension() { global $wgParser;

  1. install parser hook for <figlet> tags

$wgParser->setHook( "figlet", "renderFiglet" );

  }


$wgExtensionCredits['parserhook'][] = array(

       'name' => 'figlet extension',
       'author' => 'DrOwl / mutante',
       'url' => 'http://s23.org/wiki/Figlet Extension',
       'version' => '0.23',

);

function renderFiglet( $input, $argv, &$parser) { global $wgOutputEncoding; $baseurl="http://s23.org/wiki/";

  1. if ($argv["font"] && $argv["font"] <80 && ctype_alnum($argv["font"])) {
  2. <- this didnt work anymore after mediawiki and php upgrade somehow, removed "ctype_alnum", 061106

if ($argv["font"] && $argv["font"] ) { $userfont=$argv["font"]; } else { $userfont="standard"; }

$input = mysql_escape_string($input); $localParser = new Parser();

if ($input == "\$fonts") {

$fonts.=shell_exec("cd /usr/share/figlet; ls *.flf | cut -d. -f 1| xargs"); $fonts=explode(" ",$fonts);

$syntax.=" Available figlet fonts: ";

foreach ($fonts as $font) { $font=trim($font); $syntax.="$font "; }

$parsesyntax = $localParser->parse($syntax, $parser->mTitle, $parser->mOptions);

$output.=$parsesyntax->getText();

} else {

$output="

";

if ($input =="\$self") {
# $nt = Title::makeTitle( $row->page_namespace, $row->page_title );
# $input = $nt->getFullURL();
$title=$_GET["title"];
$title=explode("/",$title);
$title=$title[2];
$input=$title;
$fileinfocmd="head -n8 /usr/share/figlet/".$title.".flf";
$description=`$fileinfocmd`;
$comment="<br \>This font for [[figlet]] is called \"'''$title'''\".
File info: $description
You can create it with the wiki syntax: '''<figlet font=$title>text</figlet>'''.
Other fonts are in [[:Category:Figlet|Category:Figlet]].";
$parsecomment = $localParser->parse($comment, $parser->mTitle, $parser->mOptions);
$comment=$parsecomment->getText();
}

if ($userfont == "\$self") {
$userfont=$_GET["title"];
$userfont=explode("/",$userfont);
$userfont=$userfont[2];
}

$uinput=escapeshellarg($input);
$userfont=escapeshellarg($userfont);

$figlet=shell_exec("figlet -f $userfont $uinput");

if (!$figlet) {

$syntax.="Figlet error:  '''''could not find the fontfile (or other fnord)''''', fontname given: $userfont
check available fonts in [[:Category:Figlet|Category:Figlet]] or via '''<figlet>$fonts</figlet>'''.";
$parsesyntax = $localParser->parse($syntax, $parser->mTitle, $parser->mOptions);
$output.=$parsesyntax->getText();

} else {

# do we also need to fix <! here? 
$figlet = str_replace("<!","<!",$figlet);
$figlet = str_replace("</","</",$figlet);
# actual output

$output.=$figlet;

if ($comment) {
$output.=$comment;
}

}

$output.="

";

  1. $output.="userfont: $userfont uinput: $uinput";

}

return $output; } ?> </highlightSyntax>

See ongoing talk.

We use Syntax Highlighting Extension here to highlight the PHP source.