Benutzer:Martin Lemke/extensions/Zitat: Unterschied zwischen den Versionen

Aus Wiki der Arachnologischen Gesellschaft e. V.
Zur Navigation springenZur Suche springen
K (Martin Lemke verschob die Seite Benutzer:Martin/extensions/Zitat nach Benutzer:Martin Lemke/extensions/Zitat: Seite während der Benutzerkontoumbenennung von „Martin“ in „Martin Lemke“ automatisch v…)
 
Zeile 13: Zeile 13:
  
 
Eine alphabetisch sorfierte Quelleliste erhält man durch Angabe von <nowiki><references/></nowiki>
 
Eine alphabetisch sorfierte Quelleliste erhält man durch Angabe von <nowiki><references/></nowiki>
 +
 +
===Attribut zur Anzeige des vollständigen Zitats===
 +
anzeige='ganzes Zitat'
 +
 +
Zweck: Anzeige der gesamten Referenz (z.B. im Artikel [[Phantomarten]] verwendet)
 +
 +
Bsp.:
 +
* '''Ohne dieses Attribut'''
 +
<nowiki><ref name='blick 2003'>{{Lit Blick Nentwig 2003 Aculepeira lapponica}}</ref></nowiki><br>=> <ref name='blick 2003'>{{Lit Blick Nentwig 2003 Aculepeira lapponica}}</ref>
 +
 +
*'''Mit diesem Attribut'''
 +
<nowiki><ref anzeige='ganzes Zitat' name='blick 2003'>{{Lit Blick Nentwig 2003 Aculepeira lapponica}}</ref></nowiki><br>=> <ref anzeige='ganzes Zitat'  name='blick 2003'>{{Lit Blick Nentwig 2003 Aculepeira lapponica}}</ref>
  
 
===Source===
 
===Source===
  
 
<zitat_source/>
 
<zitat_source/>

Aktuelle Version vom 25. April 2017, 06:43 Uhr

Zitat anstatt Cite

Die Extension Cite zeigt leider den Fehler, dass die Referenzliste der Zitate nicht eingeloggten Besuchern des Wikis nicht angezeigt werden. Der Quellcode der Extension Cite ist dabei derart komplex, dass bisher niemand herausfinden konnte, warum das so ist. Der Autor von Cite teile mir mit, dass er die Extension nicht mehr pflege und lies mich mit dem Problem allein.

Ich will nun versuchen, eine Altternative zu Cite, nämlich Zitat zu entwickeln. Zitat soll bei der Gelegenheit in der wissenschaftlich üblichen Weise zitieren (mit Orientierung an den Vorgaben für Autoren der Arachnologischen Mitteilungen der AraGes).

Zitat einfügen

Als Literaturangabe wird die hier im Spinnen-Wiki verwendete Vorlage {{Literatur}} (Link: Vorlage:Literatur) vorausgesetzt.

Referenzen werden wie folgt eingefügt: <ref>{{Lit Domes et al 2007 Reevolution}}</ref>, bzw. <ref name='blick 2003'>{{Lit Blick Nentwig 2003 Aculepeira lapponica}}</ref> und .

Dabei ist darauf zu achten, dass die Defininition <ref name='blick 2003'>{{Lit Blick Nentwig 2003 Aculepeira lapponica}}</ref> im Text unbegingt vor der namensbasierten Referenz <ref name='blick 2003/> auftaucht.

Eine alphabetisch sorfierte Quelleliste erhält man durch Angabe von <references/>

Attribut zur Anzeige des vollständigen Zitats

anzeige='ganzes Zitat'

Zweck: Anzeige der gesamten Referenz (z.B. im Artikel Phantomarten verwendet)

Bsp.:

  • Ohne dieses Attribut

<ref name='blick 2003'>{{Lit Blick Nentwig 2003 Aculepeira lapponica}}</ref>
=> (Blick & Nentwig 2003)

  • Mit diesem Attribut

<ref anzeige='ganzes Zitat' name='blick 2003'>{{Lit Blick Nentwig 2003 Aculepeira lapponica}}</ref>
=> Blick T & Nentwig W (2003): Taxonomische Notiz zu Aculepeira lapponica (Arachnida: Araneae: Araneidae). Arachnologische Mitteilungen 25, S. 38–41, ISSN 1018-4171, doi:10.5431/aramit2503.

Source

<?php

/*
ver 1.0.1 2013-05-01
\n entfernt

ver 2.0 2020-01-10
- verlässliches Abtrennen des Vornamens aufgrund neuer Eingabe-Norm: van Helsdingen JP, Lemke M & Bauer H
*/

$wgExtensionCredits['parserhook'][]=
  array(
    
'name'=>'Zitat',
    
'author'=>'Martin Lemke',
    
'url'=>'/index.php?title=Benutzer:Martin/extensions/Zitat',
    
'version'=>'2.0.1',
    
'description'=>'Wissenschaftlich zitieren. Kompatibel zur Extension Cite.'
  
);

  if (
defined('MW_SUPPORTS_PARSERFIRSTCALLINIT'))
  {
    
$wgHooks['ParserFirstCallInit'][]='initZitat';
  }
  else 
$wgExtensionsFunctions[]='initZitat';

function 
initZitat(Parser $parser)
{
    new 
zitat($parser);
    return 
true;
}


class 
zitat {


    private 
$refs=array();
    private 
$zitate=array();

  function 
__construct(Parser $parser)
  {
      
// HOOKS aus Introspektion
    
$methods=get_class_methods($this);
    foreach(
$methods as $method)
      if (
substr($method,0,5)=='HOOK_')
         
$parser->setHook(substr($method,5), array(&$this,$method));

    }

  private function 
pimpup($line$char)
  
//  wenn ein Autor mehr als eine Pubikation in dem einen Jahr hat, Anfügen von a,b,c ...
  
{
    
$pos=strpos($line,')');
    if (
false!=$pos)
    {
      
$pos--;
      if (
is_numeric($line[$pos]))
      {
        
$retstr_replace(')',"$char)"$line);
        return 
$ret;
      }
      else
      {
        
$line[$pos]=$char;
        return 
$line;
      }
    }
  }

    private function 
Nachname($name) {
        
/*  neu in V 2
        Trennt zum Schluss genannte Vornamenkürzel ab
        Übergabeformat: van Helsing JP => van Helsing
        Lemke M => Lemke
        aber 'World Spider Catalog Association' darf nicht gekürzt werden!  Merkmal: letzter Bst. kein Großbuchstabe: preg_match('~^\p{Lu}~u',$name[strlen($name)-1])
        */
        
$name=trim($name);
        if (
preg_match('~^\p{Lu}~u',$name[strlen($name)-1])) {
            
// letzter Buchstabe ist ein großer Buchstabe, also abgekürzter Vorname
            
$name=trim($name); // sicher ist sicher
            
$i=strlen($name)-2// Leerzeichen bei Vornamen einfacher Länge
            
while($i>AND $name[$i]!==' ')
                
$i--;
            return 
substr($name,0,$i);
        } else return 
$name//letzter Buchstabe ist ein kleiner Buchstabe, Name soll nicht geändert werden
    
}


  private function 
extractAutor($inp)
  {
    
$sub=substr($inpstrpos($inp'>')+1);
    if (
strstr($sub,'et al.')!==false)
      
$additional=' et al.';
    else 
$additional='';
    
$rohsubstr($sub0strpos($sub,'<'));

    
$namen=array();
    
$roh=str_replace('&',','$roh);
    
$namen=explode(',',$roh);
    for(
$i=0$i<count($namen); $i++)
        
$namen[$i]=$this->Nachname($namen[$i]);
    if (
count($namen)>2)
      
$autor=sprintf("<span style='font-variant: small-caps;'>%s</span> et al."$namen[0]);
    else
    {
      
//$namen=explode('&', $roh);
      
if (count($namen)==2)
        
$autor=sprintf("<span style='font-variant: small-caps;'>%s & %s</span>"$namen[0], $namen[1]);
      else 
$autor=sprintf("<span style='font-variant: small-caps;'>%s</span>%s"$namen[0], $additional);
    }
    return 
$autor;
  }

  function 
HOOK_ref($input$args$parser$frame)
  {
    
// Einlesen Parameter
    
$lit=$parser->recursiveTagParse($input$frame);
    if (isset(
$args['name']))
      
$name=$args['name'];
    else 
$name=NULL;

    if (isset(
$args['anzeige']))
    {
        if (
strtolower($args['anzeige'])=='ganzes zitat')
            
$anzeige='fullref';
            else 
$anzeige='shortref';
    }
  else
    
$anzeige='';

    if (!empty(
$lit))
    {
      
$n=strpos($lit,'(');
      
$autor=$this->extractAutor($lit);
      
$jahr=substr($lit$n+1,4);

      if (
$anzeige=='fullref')
        
$refanzeige=$lit;
      else 
$refanzeige=sprintf(" <span class='litref'>(%s %s)</span>"$autor$jahr);


      if (!
is_null($name))
      {
        if (!
array_key_exists($name$this->refs ))
        {
           
$ref=array('shortref'=>$refanzeige'fullref'=>$lit);
           
$this->refs[$name]=$ref;
        }
      }
      elseif (!
array_key_exists($refanzeige$this->refs))
      {
         
$ref=array('shortref'=>$refanzeige'fullref'=>$lit);
         
$this->refs[$refanzeige]=$ref;
      }
      else
      {
         
$buchstaben='abcdefghiklmnopqrstuvwxyz';
         
$index=0;
         
$refanzeige=$this->pimpup($refanzeige'a');
         while(
array_key_exists($refanzeige$this->refs))
         {
           
$index++;
           
$refanzeige=$this->pimpup($refanzeige$buchstaben[$index]);
         }
         
$lit=$this->pimpup($lit$buchstaben[$index]);
         
$ref=array('shortref'=>$refanzeige'fullref'=>$lit);
         
$this->refs[$refanzeige]=$ref;
      }
      if (!
in_array($lit$this->zitate))
        
$this->zitate[]=$lit;
      return 
$refanzeige;
    }
    elseif ((
$name!=NULL) && (!empty($this->refs[$name])))
    {
       
$ref=$this->refs[$name];
       return 
$ref['shortref'];
    }
    else return 
sprintf("<span style='color: red; '> Fehler! Referenz name='%s' kann nicht zugeordnet werden</span>"$name);
  }

  function 
HOOK_references()
  {
    
natsort($this->zitate);
    
//Es treten bei Wiki-Notation Formatierungsfehler auf.
    
$result="<ul>"// \n entfernt ver 1.0.1
    
foreach($this->zitate as $eintrag)
      
$result.="<li>$eintrag</li>\n";
    
$result.="</ul>"// \n entfernt ver 1.0.1
    
return $result;
  }

    function 
HOOK_zitat_source() {
      
// formatierte Anzeige des aktuellen Quellcodes
        
$source=highlight_string(file_get_contents(__FILE__), true);
        
// gelbe Kommentare grau drucken. Sonst ausgedruckt nicht lesbar.
        
$source=str_replace('#5C5C5C"','#5C5C5C"'$source);
        return 
$source;
    }

//END CLASS
?>