BibliographicExtension/bibliographyformat.php

From PeacockWiki

(Difference between revisions)
Jump to: navigation, search
Revision as of 15:17, 16 October 2006 (edit)
137.166.127.86 (Talk)

← Previous diff
Current revision (15:24, 16 October 2006) (edit)
137.166.127.86 (Talk)

 
Line 1: Line 1:
<pre><?php <pre><?php
- 
- 
class BibliographicPageParser { class BibliographicPageParser {
- 
- 
static function parse($wikiText) static function parse($wikiText)
- 
{ {
- 
preg_match('/\{\{.*?\/(.*?)(\|.*)\}\}/ms', $wikiText, $match); preg_match('/\{\{.*?\/(.*?)(\|.*)\}\}/ms', $wikiText, $match);
- 
$fields=array('type'=>$match[1]); $fields=array('type'=>$match[1]);
- 
preg_match_all('/\|(.*?)=(.*?)(\||$)/ms', $match[2], $match); preg_match_all('/\|(.*?)=(.*?)(\||$)/ms', $match[2], $match);
- 
foreach($match[1] as $key => $value) foreach($match[1] as $key => $value)
- 
$fields[$value]=$match[2][$key]; $fields[$value]=$match[2][$key];
- 
return $fields; return $fields;
- 
} }
- 
- 
static function names($names) static function names($names)
- 
{ {
- 
$names=split(',', $names); $names=split(',', $names);
- 
foreach($names as $key=>$item) foreach($names as $key=>$item)
- 
{ {
- 
$item=trim($item); $item=trim($item);
- 
$name=split(' ', $item); $name=split(' ', $item);
- 
$lastname=array_pop($name); $lastname=array_pop($name);
- 
$givennames=BibliographyFormat::makeList($name, ' ', ' '); $givennames=BibliographyFormat::makeList($name, ' ', ' ');
- 
$initials=array(); $initials=array();
- 
if(count($name)>0) if(count($name)>0)
- 
foreach(split('[ -]', $givennames) as $initial) foreach(split('[ -]', $givennames) as $initial)
- 
{ {
- 
if($initial==strtoupper($initial)) if($initial==strtoupper($initial))
- 
for($letter=0; $letter<strlen($initials); $letter++) for($letter=0; $letter<strlen($initials); $letter++)
- 
$initials[]=$initial[$letter]; $initials[]=$initial[$letter];
- 
else else
- 
$initials[]=$initial[0]; $initials[]=$initial[0];
- 
} }
- 
$names[$key]=array($givennames, $lastname, $initials, $name); $names[$key]=array($givennames, $lastname, $initials, $name);
- 
} }
- 
return $names; return $names;
- 
} }
- 
- 
} }
- 
- 
class BibliographyFormat { class BibliographyFormat {
- 
- 
var $mFields=array(); var $mFields=array();
var $displayYear=null; var $displayYear=null;
- 
static $styleClass = ''; static $styleClass = '';
- 
- 
static function renderWikiText($input) static function renderWikiText($input)
- 
{ {
- 
global $wgOut; global $wgOut;
- 
return $wgOut->parse($input, false); return $wgOut->parse($input, false);
- 
} }
- 
- 
function BibliographyFormat($reference) function BibliographyFormat($reference)
- 
{ {
- 
$this->mFields=BibliographicPageParser::parse($this->getArticleText($reference)); $this->mFields=BibliographicPageParser::parse($this->getArticleText($reference));
- 
$this->mFields['reference']=$reference; $this->mFields['reference']=$reference;
- 
if(BibliographyFormat::$styleClass=='') if(BibliographyFormat::$styleClass=='')
- 
BibliographyFormat::setStyle('CSUHarvard_Style', 'extensions/bibliographystyle-csu.php'); BibliographyFormat::setStyle('CSUHarvard_Style', 'extensions/bibliographystyle-csu.php');
- 
} }
- 
static function getArticleName($name) static function getArticleName($name)
{ {
if($name=='') if($name=='')
- 
return null; return null;
- 
$title=Title::newFromText($name); $title=Title::newFromText($name);
return $title->mDbkeyform; return $title->mDbkeyform;
} }
- 
static function getArticleText($name) static function getArticleText($name)
- 
{ {
- 
if($name=='') if($name=='')
- 
return null; return null;
- 
$title=Title::newFromText($name); $title=Title::newFromText($name);
$title=Revision::newFromTitle( $title ); $title=Revision::newFromTitle( $title );
- 
if($title==null) if($title==null)
- 
return null; return null;
- 
return $title->getText(); return $title->getText();
- 
} }
- 
- 
static function setStyle($style, $file) static function setStyle($style, $file)
- 
{ {
- 
require_once($file); require_once($file);
- 
BibliographyFormat::$styleClass=$style; BibliographyFormat::$styleClass=$style;
- 
} }
- 
- 
function intext($argv) function intext($argv)
- 
{ {
- 
return call_user_func(array(BibliographyFormat::$styleClass, 'intext'), $argv, $this); return call_user_func(array(BibliographyFormat::$styleClass, 'intext'), $argv, $this);
- 
} }
- 
- 
static function intextcite($articles) static function intextcite($articles)
- 
{ {
- 
return call_user_func(array(BibliographyFormat::$styleClass, 'intextcite'), $articles); return call_user_func(array(BibliographyFormat::$styleClass, 'intextcite'), $articles);
- 
} }
- 
- 
function reference($argv) function reference($argv)
- 
{ {
- 
return call_user_func(array(BibliographyFormat::$styleClass, 'reference'), $this); return call_user_func(array(BibliographyFormat::$styleClass, 'reference'), $this);
- 
} }
- 
- 
function referenceList($argv) function referenceList($argv)
- 
{ {
- 
return call_user_func(array(BibliographyFormat::$styleClass, 'referenceList'), $argv); return call_user_func(array(BibliographyFormat::$styleClass, 'referenceList'), $argv);
- 
} }
Line 202: Line 107:
{ {
return call_user_func(array(BibliographyFormat::$styleClass, 'orderReferences'), $articles); return call_user_func(array(BibliographyFormat::$styleClass, 'orderReferences'), $articles);
- 
} }
- 
- 
function bibliography($refrenceList) function bibliography($refrenceList)
- 
{ {
- 
$bibliography="bibliography:\n"; $bibliography="bibliography:\n";
- 
foreach ($refrenceList as $item) foreach ($refrenceList as $item)
- 
{ {
- 
$bibliography.="#".$item->reference($str, $argv)."\n"; $bibliography.="#".$item->reference($str, $argv)."\n";
- 
} }
- 
return $bibliography; return $bibliography;
- 
} }
- 
- 
function authors() function authors()
- 
{ {
if($this->field('author')) if($this->field('author'))
- 
return BibliographicPageParser::names($this->mFields['author']); return BibliographicPageParser::names($this->mFields['author']);
- 
if($this->field('editor')) if($this->field('editor'))
- 
return $this->editors(); return $this->editors();
return ""; return "";
- 
} }
- 
- 
function editors() function editors()
- 
{ {
- 
return BibliographicPageParser::names($this->mFields['editor']); return BibliographicPageParser::names($this->mFields['editor']);
- 
} }
- 
- 
function year() function year()
- 
{ {
if($this->displayYear) return $this->displayYear; if($this->displayYear) return $this->displayYear;
return $this->rawYear(); return $this->rawYear();
- 
} }
- 
function rawYear() function rawYear()
- 
{ {
if(key_exists('year', $this->mFields)) if(key_exists('year', $this->mFields))
- 
return $this->mFields['year']; return $this->mFields['year'];
- 
if(key_exists('date', $this->mFields)) if(key_exists('date', $this->mFields))
- 
{ {
- 
$date=split('/', $this->mFields['date']); $date=split('/', $this->mFields['date']);
- 
return date('Y', strtotime('1/1/'.$date[0])); return date('Y', strtotime('1/1/'.$date[0]));
- 
} }
- 
return '?'; return '?';
- 
} }
- 
- 
function title() function title()
- 
{ {
- 
return $this->mFields['name']; return $this->mFields['name'];
- 
} }
- 
- 
function type() function type()
- 
{ {
- 
return $this->mFields['type']; return $this->mFields['type'];
- 
} }
- 
- 
function field($name) function field($name)
- 
{ {
- 
if(!key_exists($name, $this->mFields)) if(!key_exists($name, $this->mFields))
- 
return NULL; return NULL;
- 
return $this->mFields[$name]; return $this->mFields[$name];
- 
} }
- 
- 
function referencename() function referencename()
- 
{ {
- 
return $this->mFields['reference']; return $this->mFields['reference'];
- 
} }
- 
- 
function formatCount($num) function formatCount($num)
- 
{ {
- 
if(!is_numeric($num)) if(!is_numeric($num))
- 
return $num; return $num;
- 
if($num>3 && $num<21) if($num>3 && $num<21)
- 
return $num.'th'; return $num.'th';
- 
switch($num % 10) switch($num % 10)
- 
{ {
- 
case 1: case 1:
- 
return $num.'st'; return $num.'st';
- 
case 1: case 1:
- 
return $num.'nd'; return $num.'nd';
- 
case 1: case 1:
- 
return $num.'rd'; return $num.'rd';
- 
} }
- 
return $num.'th'; return $num.'th';
- 
} }
- 
- 
static function makeList($items, $delim=', ', $finalDelim=' & ') static function makeList($items, $delim=', ', $finalDelim=' & ')
- 
{ {
- 
$list=''; $list='';
- 
if(count($items)==1) if(count($items)==1)
- 
return array_shift($items); return array_shift($items);
- 
foreach($items as $key=>$item) foreach($items as $key=>$item)
- 
if($key+1==count($items)) if($key+1==count($items))
- 
$list.=$finalDelim.$item; $list.=$finalDelim.$item;
- 
else else
- 
$list.=$delim.$item; $list.=$delim.$item;
- 
return substr($list, strlen($delim)+0); return substr($list, strlen($delim)+0);
- 
} }
- 
- 
} }
- 
- 
?></pre> ?></pre>

Current revision

<?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)
    {
      $item=trim($item);
      $name=split(' ', $item);
      $lastname=array_pop($name);
      $givennames=BibliographyFormat::makeList($name, ' ', ' ');
      $initials=array();
      if(count($name)>0)
        foreach(split('[ -]', $givennames) as $initial)
        {
          if($initial==strtoupper($initial))
            for($letter=0; $letter<strlen($initials); $letter++)
              $initials[]=$initial[$letter];
          else
            $initials[]=$initial[0];
        }
      $names[$key]=array($givennames, $lastname, $initials, $name);
    }
    return $names;
  }

}

class BibliographyFormat {

  var $mFields=array();
  var $displayYear=null;
  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 getArticleName($name)
  {
    if($name=='')
      return null;
    $title=Title::newFromText($name);
    return $title->mDbkeyform;
  }
    
  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 orderReferences($articles)
  {
    return call_user_func(array(BibliographyFormat::$styleClass, 'orderReferences'), $articles);
  }
  
  function bibliography($refrenceList)
  {
    $bibliography="bibliography:\n";
    foreach ($refrenceList as $item)
    {
      $bibliography.="#".$item->reference($str, $argv)."\n";
    }
    return $bibliography;
  }

  function authors()
  {
    if($this->field('author'))
      return BibliographicPageParser::names($this->mFields['author']);
    if($this->field('editor'))
      return $this->editors();
    return "";
  }

  function editors()
  {
    return BibliographicPageParser::names($this->mFields['editor']);
  }

  function year()
  {
    if($this->displayYear) return $this->displayYear;
    return $this->rawYear();
  }

  function rawYear()
  {
    if(key_exists('year', $this->mFields))
      return $this->mFields['year'];
    if(key_exists('date', $this->mFields))
    {
      $date=split('/', $this->mFields['date']);
      return date('Y', strtotime('1/1/'.$date[0]));
    }
    return '?';
  }

  function title()
  {
    return $this->mFields['name'];
  }

  function type()
  {
    return $this->mFields['type'];
  }

  function field($name)
  {
    if(!key_exists($name, $this->mFields))
      return NULL;
    return $this->mFields[$name];
  }

  function referencename()
  {
    return $this->mFields['reference'];
  }
  
  function formatCount($num)
  {
    if(!is_numeric($num))
      return $num;
    if($num>3 && $num<21)
      return $num.'th';
    switch($num % 10)
    {
      case 1:
        return $num.'st';
      case 1:
        return $num.'nd';
      case 1:
        return $num.'rd';
    }
    return $num.'th';
  }

  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);
  }
  
}

?>
Personal tools