BibliographicExtension/bibliographystyle-csu.php

From PeacockWiki

(Difference between revisions)
Jump to: navigation, search
Revision as of 10:54, 25 August 2006 (edit)
Trevorp (Talk | contribs)

← Previous diff
Current revision (23:48, 16 October 2006) (edit)
137.166.127.86 (Talk)

 
Line 13: Line 13:
class CSUHarvard_Style { class CSUHarvard_Style {
- static function formatNames($argv, $citation)+ static function formatNames($argv, $names1, $full=false)
{ {
$maxNames=3; $maxNames=3;
- $names1=$citation->names(); 
$count=count($names1); $count=count($names1);
- if($count>$maxNames)+ if(!$full & $count>$maxNames)
$names=$names1[0][1].' et al.'; $names=$names1[0][1].' et al.';
else else
Line 25: Line 24:
foreach($names1 as $name) foreach($names1 as $name)
{ {
- $names[]=$name[1];+ if($full)
 + {
 + $n=$name[1];
 + if(count($name[2])>0)
 + $n.=", ".BibliographyFormat::makeList($name[2], '', '');
 + $names[]=$n;
 + }
 + else
 + $names[]=$name[1];
} }
#var_dump($names); #var_dump($names);
Line 42: Line 49:
static function intextcite($articles) static function intextcite($articles)
{ {
- //TODO: Sort articles+ # TODO: McHenry (2004) and McHenry (2006) => McHenry (2004, 2006)
-# var_dump($articles);+ uasort($articles['articles'], array("CSUHarvard_Style", "intextListCmp"));
$text=array(); $text=array();
$lastarticle=null; $lastarticle=null;
 + $articlelist=array();
foreach($articles['articles'] as $name=>$article) foreach($articles['articles'] as $name=>$article)
{ {
- if($article['article']->type()==NULL)+ $author=CSUHarvard_Style::formatNames(array('type'=>$articles['type']), $article['article']->authors());
 + if(!array_key_exists($author, $articlelist))
 + $articlelist[$author]=array();
 + $articlelist[$author][$name]=$article;
 + }
 + foreach($articlelist as $author=>$authorsarticles)
 + {
 + //TODO: articlenotfound
 + if(count($authorsarticles)==1)
{ {
- $text[]=CSUHarvard_Style::notfoundText($article['article']);+ $article=array_keys($authorsarticles);
- continue;+ $article=$authorsarticles[$article[0]];
 + $entry=$author;
 + if($articles['type']=='name')
 + $entry.=' ('.$article['article']->year().')';
 + else
 + $entry.=' '.$article['article']->year();
 + if($article['note']!='')
 + $entry.=', '.$article['note'];
 + $entry="[[".$article['article']->referencename().'|'.$entry.']]';
} }
- $entry=CSUHarvard_Style::formatNames(array('type'=>$articles['type']), $article['article']); 
- if($articles['type']=='name') 
- $entry.=' ('.$article['article']->year().')'; 
else else
- $entry.=' '.$article['article']->year();+ {
- if($article['note']!='')+ $years=array();
- $entry.=', '.$article['note'];+ foreach($authorsarticles as $name=>$article)
- $entry=BibliographyFormat::renderWikiText("[[".$article['article']->referencename().'|'.$entry.']]');+ {
- $text[]=$entry;+ $year=$article['article']->year();
 + if($article['note']!='')
 + $year.=', '.$article['note'];
 + $years[]="[[".$article['article']->referencename().'|'.$year.']]';
 + }
 + $years=BibliographyFormat::makeList($years, ', ', ', ');
 + $entry=$author;
 + if($articles['type']=='name')
 + $entry.=' ('.$years.')';
 + else
 + $entry.=' '.$years;
 + }
 + $text[]=BibliographyFormat::renderWikiText($entry);
} }
-# var_dump($text); 
-# exit(); 
switch($articles['type']) switch($articles['type'])
{ {
Line 71: Line 102:
case 'text': $text=BibliographyFormat::makeList($text, ', ', ' and '); break; case 'text': $text=BibliographyFormat::makeList($text, ', ', ' and '); break;
} }
-# var_dump($text); 
if($articles['type']=='normal') if($articles['type']=='normal')
$text='('.$text.')'; $text='('.$text.')';
Line 81: Line 111:
if(!isset($citation->mFields['type'])) if(!isset($citation->mFields['type']))
return "Article not found: ".$citation->mFields['reference']; return "Article not found: ".$citation->mFields['reference'];
- formatNames(); 
if($argv!=null && key_exists('type', $argv) && $argv['type']=='name') if($argv!=null && key_exists('type', $argv) && $argv['type']=='name')
return $names.' ('.$citation->mFields['year'].')'; return $names.' ('.$citation->mFields['year'].')';
Line 88: Line 117:
} }
 + static function intextListCmp($a, $b)
 + {
 + return CSUHarvard_Style::referenceListCmp($a['article'], $b['article']);
 + }
 +
 + static function referenceListCmp($a, $b)
 + {
 + #var_dump($a);
 + $res=strcasecmp(CSUHarvard_Style::formatNames(array('type'=>'normal'), $a->authors(), true),
 + CSUHarvard_Style::formatNames(array('type'=>'normal'), $b->authors(), true));
 + if($res!=0) return $res;
 + $res=$a->year()-$b->year();
 + if($res!=0) return $res;
 + return strcasecmp($a->title(), $b->title());
 + }
 +
 + static function orderReferences($articles)
 + {
 + uasort($articles, array("CSUHarvard_Style", "referenceListCmp"));
 + $lastname='';
 + $count=0;
 + #var_dump($articles);
 + foreach($articles as $id=>$article)
 + {
 + $name=CSUHarvard_Style::formatNames(array('type'=>'normal'), $article->authors(), true);
 + if($name==$lastname && $lastarticle && $lastarticle->rawYear()==$article->rawYear())
 + {
 + if($count==0)
 + $lastarticle->displayYear=$lastarticle->rawYear().chr(97+$count++);
 + $article->displayYear=$article->year().chr(97+$count++);
 + }
 + else
 + $count=0;
 + $lastname=$name;
 + $lastarticle=$article;
 + }
 + return $articles;
 + }
 +
static function referenceList($articles) static function referenceList($articles)
{ {
- //TODO: sort 
$refrences=''; $refrences='';
foreach($articles as $article) foreach($articles as $article)
{ {
- $refrences.=CSUHarvard_Style::reference($article).'<br/>';+ $refrences.='<p class="bibliographicReference">'.CSUHarvard_Style::reference($article)."</p>\n";
} }
- return $refrences;+ return '<div class="bibliographicReferences">'.$refrences.'</div>';
return "refernce list"; return "refernce list";
} }
Line 104: Line 171:
if($citation->type()==NULL) if($citation->type()==NULL)
return CSUHarvard_Style::notfoundText($citation); return CSUHarvard_Style::notfoundText($citation);
- return BibliographyFormat::renderWikiText('[['.$citation->referencename().'|'.CSUHarvard_Style::formatNames(array('type'=>'normal'), $citation).' '.$citation->year().']], '.$citation->title());+ switch($citation->type())
 + {
 + case 'Book':
 + $text=CSUHarvard_Style::referenceBook($citation);
 + break;
 + case 'Article':
 + $text=CSUHarvard_Style::referenceArticle($citation);
 + break;
 + case 'Online Article':
 + $text=CSUHarvard_Style::referenceOnlineArticle($citation);
 + break;
 + default:
 + $text=referenceUnknownType($citation);
 + }
 + return BibliographyFormat::renderWikiText($text);
} }
Line 112: Line 193:
} }
 + static function referenceUnknownType($citation)
 + {
 + return '[['.$citation->referencename().'|'.CSUHarvard_Style::formatNames(array('type'=>'normal'), $citation->authors(), true).' '.$citation->year().']], '.$citation->title().'?';
 + }
 +
 + static function referenceBook($citation)
 + {
 + $text='[['.$citation->referencename().'|';
 + $text.=CSUHarvard_Style::formatNames(array('type'=>'normal'), $citation->authors(), true);
 + $text.=' '.$citation->year();
 + $text.=']]';
 + $text.=", ''".$citation->title()."''";
 + //series
 + if($citation->field('title'))
 + $text.=', '.$citation->field('title');
 + $text.=CSUHarvard_Style::electronicVer($citation);
 + //description
 + if($citation->field('book'))
 + $text.=", in ''".$citation->field('book')."''";
 + if($citation->field('edition'))
 + $text.=', '.BibliographyFormat::formatCount($citation->field('edition')).' edn';
 + //editor
 + //compiler
 + //revisor
 + //translator
 + //illustrator
 + //volume
 + if($citation->field('publisher'))
 + $text.=', '.$citation->field('publisher');
 + if($citation->field('location'))
 + $text.=', '.$citation->field('location');
 + $text.=CSUHarvard_Style::electronicTranscription($citation);
 + //page
 + return $text.'.';
 + }
 +
 + static function referenceArticle($citation)
 + {
 + $text='[['.$citation->referencename().'|';
 + $text.=CSUHarvard_Style::formatNames(array('type'=>'normal'), $citation->authors(), true);
 + $text.=' '.$citation->year();
 + $text.=']]';
 + $text.=", '".$citation->title()."'";
 + $text.=CSUHarvard_Style::electronicVer($citation);
 + if($citation->field('periodical'))
 + $text.=', '.CSUHarvard_Style::formatPeriodical($citation->field('periodical'));
 + if($citation->field('issue'))
 + $text.=', '.$citation->field('issue');
 + if($citation->field('pages'))
 + $text.=', pp.'.$citation->field('pages');
 + $text.=CSUHarvard_Style::electronicTranscription($citation);
 + return $text.'.';
 + }
 +
 + static function referenceOnlineArticle($citation)
 + {
 + if(!$citation->field('viewed') && !$citation->field('url'))
 + return CSUHarvard_Style::referenceUnknownType($citation);
 + $text='[['.$citation->referencename().'|';
 + if($citation->field('author'))
 + $text.=CSUHarvard_Style::formatNames(array('type'=>'normal'), $citation->authors(), true);
 + else
 + {
 + if($citation->field('editor'))
 + $text.=CSUHarvard_Style::formatNames(array('type'=>'normal'), $citation->editors(), true).(count($citation->editors())==1?" (ed.)":" (eds.)");
 + else
 + $text.="?";
 + }
 + $text.=' '.$citation->year();
 + $text.=']]';
 + $text.=", '".$citation->title()."'";
 + //version number
 + if($citation->field('date'))
 + $text.=', last edited '.CSUHarvard_Style::formatDate($citation->field('date'));
 + if($citation->field('description'))
 + $text.=', '.$citation->field('description');
 + //name of publisher, sponsor or source
 + //place or location of publication
 + if($citation->field('viewed'))
 + $text.=', viewed '.CSUHarvard_Style::formatDate($citation->field('viewed'));
 + if($citation->field('url'))
 + $text.=', <'.$citation->field('url').'>';
 + return $text.'.';
 + }
 +
 + static function electronicTranscription($citation)
 + {
 + $text='';
 + if(!$citation->field('url'))
 + return $text;
 + if($citation->field('electronicdesc'))
 + $text.=', '.$citation->field('electronicdesc');
 + if($citation->field('viewed'))
 + $text.=', viewed '.CSUHarvard_Style::formatDate($citation->field('viewed'));
 + if($citation->field('url'))
 + $text.=', <'.$citation->field('url').'>';
 + return $text;
 + }
 +
 + static function electronicVer($citation)
 + {
 + $text='';
 + if($citation->field('electronicversion'))
 + $text.=' electronic version';
 + return $text;
 + }
 +
 + static function formatDate($date)
 + {
 + $date2=split('/', $date);
 + if(count($date2)==3)
 + return date('j F Y', strtotime($date2[1].'/'.$date2[2].'/'.$date2[0]));
 + if(count($date2)==2)
 + return date('F Y', strtotime($date2[1].'/1/'.$date2[0]));
 + if(count($date2)==1)
 + return date('Y', strtotime('1/1/'.$date2[0]));
 + return $date;
 + }
 +
 + static function formatPeriodical($periodical)
 + {
 + preg_match('/(.*)(\(.*\))/', $periodical, $match);
 + if(count($match)==0)
 + return "''".$periodical."''";
 + return "''".trim($match[1])."'' ".$match[2];
 + }
 +
} }
?></pre> ?></pre>

Current revision

<?php

/*
TODO:
  2.4 Companies or organisations as authors
        ...this is not easily proven (CSIRO 1986)
        This publicatino of the Centre for Rurali Social Research (1988) shows ...
  2.5 Anonymous Works
  2.6 Authrs with the same surname
        distinguished by including initials in in-text citation.
*/

class CSUHarvard_Style {

  static function formatNames($argv, $names1, $full=false)
  {
    $maxNames=3;
    $count=count($names1);
    if(!$full & $count>$maxNames)
      $names=$names1[0][1].' et al.';
    else
    {
      $names=array();
      foreach($names1 as $name)
      {
        if($full)
        {
          $n=$name[1];
          if(count($name[2])>0)
          $n.=", ".BibliographyFormat::makeList($name[2], '', '');
          $names[]=$n;
        }
        else
          $names[]=$name[1];
      }
#var_dump($names);
      if($argv!=null && key_exists('type', $argv) && $argv['type']=='name')
        $names=BibliographyFormat::makeList($names, ', ', ' and ');
      else
        $names=BibliographyFormat::makeList($names, ', ', ' & ');
    }
    return $names;
  }
  
  //Types:
  //  normal - (Hayes 2000)
  //  name - Hayes (2000)
  //  text - Hayes 2000
  static function intextcite($articles)
  {
    # TODO: McHenry (2004) and McHenry (2006) => McHenry (2004, 2006)
    uasort($articles['articles'], array("CSUHarvard_Style", "intextListCmp"));
    $text=array();
    $lastarticle=null;
    $articlelist=array();
    foreach($articles['articles'] as $name=>$article)
    {
      $author=CSUHarvard_Style::formatNames(array('type'=>$articles['type']), $article['article']->authors());
      if(!array_key_exists($author, $articlelist))
        $articlelist[$author]=array();
      $articlelist[$author][$name]=$article;
    }
    foreach($articlelist as $author=>$authorsarticles)
    {
      //TODO: articlenotfound
      if(count($authorsarticles)==1)
      {
        $article=array_keys($authorsarticles);
        $article=$authorsarticles[$article[0]];
        $entry=$author;
        if($articles['type']=='name')
          $entry.=' ('.$article['article']->year().')';
        else
          $entry.=' '.$article['article']->year();
        if($article['note']!='')
          $entry.=', '.$article['note'];
        $entry="[[".$article['article']->referencename().'|'.$entry.']]';
      }
      else
      {
        $years=array();
        foreach($authorsarticles as $name=>$article)
        {
          $year=$article['article']->year();
          if($article['note']!='')
            $year.=', '.$article['note'];
          $years[]="[[".$article['article']->referencename().'|'.$year.']]';
        }
        $years=BibliographyFormat::makeList($years, ', ', ', ');
        $entry=$author;
        if($articles['type']=='name')
          $entry.=' ('.$years.')';
        else
          $entry.=' '.$years;
      }
      $text[]=BibliographyFormat::renderWikiText($entry);
    }
    switch($articles['type'])
    {
      case 'normal': $text=BibliographyFormat::makeList($text, ', ', ', '); break;
      case 'name': $text=BibliographyFormat::makeList($text, ' ', ' and '); break;
      case 'text': $text=BibliographyFormat::makeList($text, ', ', ' and '); break;
    }
    if($articles['type']=='normal')
      $text='('.$text.')';
    return $text;
  }
  
  static function intext($argv, $citation)
  {
    if(!isset($citation->mFields['type']))
      return "Article not found: ".$citation->mFields['reference'];
    if($argv!=null && key_exists('type', $argv) && $argv['type']=='name')
      return $names.' ('.$citation->mFields['year'].')';
    else
      return '('.$names.' '.$citation->mFields['year'].')';
  }

  static function intextListCmp($a, $b)
  {
    return CSUHarvard_Style::referenceListCmp($a['article'], $b['article']);
  }

  static function referenceListCmp($a, $b)
  {
  #var_dump($a);
    $res=strcasecmp(CSUHarvard_Style::formatNames(array('type'=>'normal'), $a->authors(), true),
      CSUHarvard_Style::formatNames(array('type'=>'normal'), $b->authors(), true));
    if($res!=0) return $res;
    $res=$a->year()-$b->year();
    if($res!=0) return $res;
    return strcasecmp($a->title(), $b->title());
  }

  static function orderReferences($articles)
  {
    uasort($articles, array("CSUHarvard_Style", "referenceListCmp"));
    $lastname='';
    $count=0;
    #var_dump($articles);
    foreach($articles as $id=>$article)
    {
      $name=CSUHarvard_Style::formatNames(array('type'=>'normal'), $article->authors(), true);
      if($name==$lastname && $lastarticle && $lastarticle->rawYear()==$article->rawYear())
      {
        if($count==0)
          $lastarticle->displayYear=$lastarticle->rawYear().chr(97+$count++);
        $article->displayYear=$article->year().chr(97+$count++);
      }
      else
        $count=0;
      $lastname=$name;
      $lastarticle=$article;
    }
    return $articles;
  }  
  
  static function referenceList($articles)
  {
    $refrences='';
    foreach($articles as $article)
    {
      $refrences.='<p class="bibliographicReference">'.CSUHarvard_Style::reference($article)."</p>\n";
    }
    return '<div class="bibliographicReferences">'.$refrences.'</div>';
    return "refernce list";
  }
  
  static function reference($citation)
  {
    if($citation->type()==NULL)
      return CSUHarvard_Style::notfoundText($citation);
    switch($citation->type())
    {
      case 'Book':
        $text=CSUHarvard_Style::referenceBook($citation);
        break;
      case 'Article':
        $text=CSUHarvard_Style::referenceArticle($citation);
        break;
      case 'Online Article':
        $text=CSUHarvard_Style::referenceOnlineArticle($citation);
        break;
      default:
        $text=referenceUnknownType($citation);
    }
    return BibliographyFormat::renderWikiText($text);
  }
  
  static function notfoundText($citation)
  {
    return BibliographyFormat::renderWikiText("[[".$citation->mFields['reference']."|Article not found: ".$citation->referencename()."]]");
  }

  static function referenceUnknownType($citation)
  {
    return '[['.$citation->referencename().'|'.CSUHarvard_Style::formatNames(array('type'=>'normal'), $citation->authors(), true).' '.$citation->year().']], '.$citation->title().'?';
  }
  
  static function referenceBook($citation)
  {
    $text='[['.$citation->referencename().'|';
    $text.=CSUHarvard_Style::formatNames(array('type'=>'normal'), $citation->authors(), true);
    $text.=' '.$citation->year();
    $text.=']]';
    $text.=", ''".$citation->title()."''";
    //series
    if($citation->field('title'))
      $text.=', '.$citation->field('title');
    $text.=CSUHarvard_Style::electronicVer($citation);
    //description
    if($citation->field('book'))
      $text.=", in ''".$citation->field('book')."''";
    if($citation->field('edition'))
      $text.=', '.BibliographyFormat::formatCount($citation->field('edition')).' edn';
    //editor
    //compiler
    //revisor
    //translator
    //illustrator
    //volume
    if($citation->field('publisher'))
      $text.=', '.$citation->field('publisher');
    if($citation->field('location'))
      $text.=', '.$citation->field('location');
    $text.=CSUHarvard_Style::electronicTranscription($citation);
    //page
    return $text.'.';
  }
  
  static function referenceArticle($citation)
  {
    $text='[['.$citation->referencename().'|';
    $text.=CSUHarvard_Style::formatNames(array('type'=>'normal'), $citation->authors(), true);
    $text.=' '.$citation->year();
    $text.=']]';
    $text.=", '".$citation->title()."'";
    $text.=CSUHarvard_Style::electronicVer($citation);
    if($citation->field('periodical'))
      $text.=', '.CSUHarvard_Style::formatPeriodical($citation->field('periodical'));
    if($citation->field('issue'))
      $text.=', '.$citation->field('issue');
    if($citation->field('pages'))
      $text.=', pp.'.$citation->field('pages');
    $text.=CSUHarvard_Style::electronicTranscription($citation);
    return $text.'.';
  }
  
  static function referenceOnlineArticle($citation)
  {
    if(!$citation->field('viewed') && !$citation->field('url'))
      return CSUHarvard_Style::referenceUnknownType($citation);
    $text='[['.$citation->referencename().'|';
    if($citation->field('author'))
      $text.=CSUHarvard_Style::formatNames(array('type'=>'normal'), $citation->authors(), true);
    else
    {
      if($citation->field('editor'))
        $text.=CSUHarvard_Style::formatNames(array('type'=>'normal'), $citation->editors(), true).(count($citation->editors())==1?" (ed.)":" (eds.)");
      else
        $text.="?";
    }
    $text.=' '.$citation->year();
    $text.=']]';
    $text.=", '".$citation->title()."'";
    //version number
    if($citation->field('date'))
      $text.=', last edited '.CSUHarvard_Style::formatDate($citation->field('date'));
    if($citation->field('description'))
      $text.=', '.$citation->field('description');
    //name of publisher, sponsor or source
    //place or location of publication
    if($citation->field('viewed'))
      $text.=', viewed '.CSUHarvard_Style::formatDate($citation->field('viewed'));
    if($citation->field('url'))
      $text.=', <'.$citation->field('url').'>';
    return $text.'.';
  }
  
  static function electronicTranscription($citation)
  {
    $text='';
    if(!$citation->field('url'))
      return $text;
    if($citation->field('electronicdesc'))
      $text.=', '.$citation->field('electronicdesc');
    if($citation->field('viewed'))
      $text.=', viewed '.CSUHarvard_Style::formatDate($citation->field('viewed'));
    if($citation->field('url'))
      $text.=', <'.$citation->field('url').'>';
    return $text;
  }
  
  static function electronicVer($citation)
  {
    $text='';
    if($citation->field('electronicversion'))
      $text.=' electronic version';
    return $text;
  }
  
  static function formatDate($date)
  {
    $date2=split('/', $date);
    if(count($date2)==3)
      return date('j F Y', strtotime($date2[1].'/'.$date2[2].'/'.$date2[0]));
    if(count($date2)==2)
      return date('F Y', strtotime($date2[1].'/1/'.$date2[0]));
    if(count($date2)==1)
      return date('Y', strtotime('1/1/'.$date2[0]));
    return $date;
  }
  
  static function formatPeriodical($periodical)
  {
    preg_match('/(.*)(\(.*\))/', $periodical, $match);
    if(count($match)==0)
      return "''".$periodical."''";
    return "''".trim($match[1])."'' ".$match[2];
  }
  
}

?>
Personal tools