BibliographicExtension/bibliographyformat.php
From PeacockWiki
Revision as of 10:53, 25 August 2006; Trevorp (Talk | contribs)
(diff) ←Older revision | Current revision | Newer revision→ (diff)
(diff) ←Older revision | Current revision | Newer revision→ (diff)
<?php
class BibliographicPageParser {
static function parse($wikiText)
{
preg_match('/\{\{.*?\/(.*?)(\|.*)\}\}/ms', $wikiText, $match);
$fields=array('type'=>$match[1]);
preg_match_all('/\|(.*?)=(.*?)(\||$)/ms', $match[2], $match);
foreach($match[1] as $key => $value)
$fields[$value]=$match[2][$key];
return $fields;
}
static function names($names)
{
$names=split(',', $names);
foreach($names as $key=>$item)
{
preg_match('/(.*)\s+(.*)/', trim($item), $match);
$initials=array();
$name=array();
foreach(split(' ', $match[1]) as $initial)
{
$initials[]=$initial[0];
$name[]=$initial;
}
$names[$key]=array($match[1], $match[2], $initials, $name);
}
return $names;
}
}
class BibliographyFormat {
var $mFields=array();
static $styleClass = '';
static function renderWikiText($input)
{
global $wgOut;
return $wgOut->parse($input, false);
}
function BibliographyFormat($reference)
{
$this->mFields=BibliographicPageParser::parse($this->getArticleText($reference));
$this->mFields['reference']=$reference;
if(BibliographyFormat::$styleClass=='')
BibliographyFormat::setStyle('CSUHarvard_Style', 'extensions/bibliographystyle-csu.php');
}
static function getArticleText($name)
{
if($name=='')
return null;
$title=Title::newFromText($name);
$title=Revision::newFromTitle( $title );
if($title==null)
return null;
return $title->getText();
}
static function setStyle($style, $file)
{
require_once($file);
BibliographyFormat::$styleClass=$style;
}
function intext($argv)
{
return call_user_func(array(BibliographyFormat::$styleClass, 'intext'), $argv, $this);
}
static function intextcite($articles)
{
return call_user_func(array(BibliographyFormat::$styleClass, 'intextcite'), $articles);
}
function reference($argv)
{
return call_user_func(array(BibliographyFormat::$styleClass, 'reference'), $this);
}
function referenceList($argv)
{
return call_user_func(array(BibliographyFormat::$styleClass, 'referenceList'), $argv);
}
function bibliography($refrenceList)
{
$bibliography="bibliography:\n";
foreach ($refrenceList as $item)
{
$bibliography.="#".$item->reference($str, $argv)."\n";
}
return $bibliography;
}
function names()
{
return BibliographicPageParser::names($this->mFields['author']);
}
function year()
{
return $this->mFields['year'];
}
function title()
{
return $this->mFields['name'];
}
function type()
{
return $this->mFields['type'];
}
function referencename()
{
return $this->mFields['reference'];
}
static function makeList($items, $delim=', ', $finalDelim=' & ')
{
$list='';
if(count($items)==1)
return array_shift($items);
foreach($items as $key=>$item)
if($key+1==count($items))
$list.=$finalDelim.$item;
else
$list.=$delim.$item;
return substr($list, strlen($delim)+0);
}
}
?>
