/[bibulus]/bibulus/Bibulus.pm
ViewVC logotype

Diff of /bibulus/Bibulus.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.7 by twid, Sat Apr 19 13:53:11 2003 UTC revision 1.8 by twid, Sun Apr 20 22:30:14 2003 UTC
# Line 32  sub inlinecrossref { Line 32  sub inlinecrossref {
32  sub doinlinecrossref {  sub doinlinecrossref {
33    my $self = shift;    my $self = shift;
34    
35      $self->{CITEALL} and return;
36    
37    foreach my $n (0..$#{$self->{EL}}) {    foreach my $n (0..$#{$self->{EL}}) {
38      my $i = $self->{EL}[$n];      my $i = $self->{EL}[$n];
39      my $id = $i->id;      my $id = $i->id;
# Line 142  sub load { Line 144  sub load {
144       manual => sub {insertentry($self, @_)},       manual => sub {insertentry($self, @_)},
145       misc => sub {insertentry($self, @_)},       misc => sub {insertentry($self, @_)},
146       reprint => sub {insertentry($self, @_)},       reprint => sub {insertentry($self, @_)},
147         magazine => sub {insertentry($self, @_)},
148       personal => sub {insertentry($self, @_)},       personal => sub {insertentry($self, @_)},
149       lecture => sub {insertentry($self, @_)},       lecture => sub {insertentry($self, @_)},
150       oral => sub {insertentry($self, @_)},       oral => sub {insertentry($self, @_)},
# Line 230  sub gensortkeys { Line 233  sub gensortkeys {
233    
234  sub sortkey_author {  sub sortkey_author {
235    my ($i) = @_;    my ($i) = @_;
236    my $t = $i->first_child('author');    my $t = $i->first_child('author') or return '';
237    my $s = $t->first_child('name');    my $s = $t->first_child('name') or return '';
238    my $sortkey = $s->first_child('family')->text;    my $sortkey = $s->first_child('family')->text or return '';
239    
240    return $sortkey;    return $sortkey;
241  }  }
# Line 420  sub formatentry { Line 423  sub formatentry {
423      return;      return;
424    }    }
425    
426    $t = $self->item_start($attr->{id}, $e->field('label'));    $self->{CUREL} = $e;
427      $self->{CURR} = $self->item_start($attr->{id}, $e->field('label'));
428    
429      my $et = $e->tag;    # entry type
430    
431      if ($et eq 'article') {
432        $self->formatauthors;
433        $self->formatnewblock;
434        $self->formattitle();
435        $self->formatnewblock;
436        if (!defined($e->first_child('crossref'))) {
437          $self->formatjournal;
438          $self->formatvolnumpages;
439          $self->formatdate;
440        } else {
441          $self->formatcrossref;
442          $self->formatpages;
443        }
444        $self->formatnewblock;
445        $self->formatrest;
446      } elsif ($et eq 'book') {
447        $self->formateditors;
448        $self->formatauthors;
449        $self->formatnewblock;
450        $self->formattitle;
451        $self->formatvolume;
452        $self->formatnewblock;
453        $self->newsentence;
454        $self->formatpublisheraddress;
455        $self->formatedition;
456        $self->formatdate;
457        $self->formatnewblock;
458        $self->formatrest;
459      } elsif ($et eq 'booklet') {
460        $self->formateditors;
461        $self->formatauthors;
462        $self->formatnewblock;
463        $self->formattitle;
464        $self->formatvolume;
465        $self->formatnewblock;
466        $self->newsentence;
467        $self->formatpublisheraddress;
468        $self->formatedition;
469        $self->formatdate;
470        $self->formatnewblock;
471        $self->formatrest;
472      }
473    
474      $self->{CURR} .= $self->item_end;
475    }
476    
477    sub formatauthors {
478      my $self = shift;
479    
480      my $i = $self->{CUREL}->first_child('author');
481      unless (defined($i)) {
482        warn "No author for id = ", $self->{CUREL}->atts->{id}, ".\n";
483        return;
484      }
485    
486      $self->{CURR} .= $self->formatnames($i);
487    }
488    
489    sub formateditors {
490      my $self = shift;
491    
492      my $i = $self->{CUREL}->first_child('editor');
493      unless (defined($i)) {
494        warn "No editor for id = ", $self->{CUREL}->atts->{id}, ".\n";
495        return;
496      }
497    
498      $self->{CURR} .= $self->formatnames($i) . ' (editor)';
499    }
500    
501    sub formatnames {
502      my $self = shift;
503    
504      my $authed = shift;
505    
506      my $r = '';
507      my @d = $authed->descendants('name');
508      foreach my $i (0 .. $#d) {
509        $r .= $self->formatname($d[$i]);
510    
511        if ($i < $#d - 1) {
512          $r .= $self->comma . ' ';
513        } elsif ($i == $#d - 1) {
514          $r .= ' ' . $self->and . ' ';
515        }
516      }
517      return $r;
518    }
519    
520    sub formatname {
521      my $self = shift;
522    
523      my $name = shift;
524    
525      my ($given, $von, $family, $extrafamily, $jr)
526        = (perhapstext($name->first_child('given')),
527           perhapstext($name->first_child('von')),
528           perhapstext($name->first_child('family')),
529           perhapstext($name->first_child('extrafamily')),
530           perhapstext($name->first_child('jr')));
531    
532      my $r = $family;
533    
534      defined($extrafamily) and $r .= ' ' . $extrafamily;
535    
536      defined($von) and $self->{STYLE}{vonbefore}
537        and $r = "$von $r";
538    
539      defined($given) and $self->{STYLE}{givenbefore}
540        and $r = "$given $r";
541    
542      defined($given) and !$self->{STYLE}{givenbefore}
543        and $r .= ", $given";
544    
545      defined($jr) and $r .= ", $von";
546    
547      return $r;
548    }
549    
550    # if the text field is defined, then return it else undef
551    sub perhapstext {
552      my $e = shift;
553      if (defined($e)) {
554        return $e->text;
555      } else {
556        return undef;
557      }
558    }
559    
560    sub formatnewblock {
561      my $self = shift;
562    
563      $self->{CURR} .= ". " . $self->newblock;
564    }
565    
566    sub newsentence {
567      my $self = shift;
568    
569      $self->{CURR} .= ". " . $self->newblock;
570    }
571    
572    sub formattitle {
573      my $self = shift;
574      my $type = shift;
575    
576      my $i = $self->{CUREL}->first_child('title');
577      unless (defined($i)) {
578        warn "No title for id = ", $self->{CUREL}->atts->{id}, ".\n";
579        return;
580      }
581    
582      my $t = $i->text;
583    
584      defined($type) and $type eq 'emph' and $t = $self->emph($t);
585    
586      $self->{CURR} .= $t;
587    }
588    
589    sub formatjournal {
590      my $self = shift;
591      my $type = shift;
592    
593      my $i = $self->{CUREL}->first_child('journal');
594      unless (defined($i)) {
595        warn "No journal for id = ", $self->{CUREL}->atts->{id}, ".\n";
596        return;
597      }
598    
599      my $t = $i->text;
600    
601      $t = $self->emph($t);
602    
603      $self->{CURR} .= $t;
604    }
605    
606    sub formatvolnumpages {
607      my $self = shift;
608    
609      $self->{CURR} .= 'XXX';
610    }
611    sub formatvolume {
612      my $self = shift;
613    
614      $self->{CURR} .= 'XXX';
615    }
616    sub formatdate {
617      my $self = shift;
618    
619      $self->{CURR} .= 'XXX';
620    }
621    sub formatedition {
622      my $self = shift;
623    
624      $self->{CURR} .= 'XXX';
625    }
626    
627    # This needs to be expanded dramatically -- many fields are ignored,  sub formatpublisheraddress {
628    # and entry types are not distinguished...    my $self = shift;
   $t .= list2text(  
                   $self->author($e, $attr),  
                   $newblock,  
                   $self->title($e, $attr),  
                   $newblock,  
                   $self->journal($e, $attr),  
                   $self->volnumpages($e, $attr),  
                   $self->field('publisher', $e, $attr),  
                   $self->field('place', $e, $attr),  
                   $self->field('year', $e, $attr),  
                   $newblock,  
                   $self->field('note', $e, $attr)  
                  );  
629    
630    $t .= $self->item_end;    $self->{CURR} .= 'XXX';
631    }
632    
633    sub formatcrossref {
634      my $self = shift;
635    
636      my $i = $self->{CUREL}->first_child('crossref');
637      unless (defined($i)) {
638        warn "No crossref for id = ", $self->{CUREL}->atts->{id}, ".\n";
639        return;
640      }
641    
642      my $t = $i->atts->{id};
643    
644      $self->{CURR} .= $self->in($self->outputcite($t));
645    }
646    
647    sub formatpages {
648      my $self = shift;
649    
650      my $i = $self->{CUREL}->first_child('pages');
651      unless (defined($i)) {
652        warn "No pages for id = ", $self->{CUREL}->atts->{id}, ".\n";
653        return;
654      }
655    
656      my $t = $i->text;
657    
658      $self->{CURR} .= $self->comma . ' ' . $t;
659    }
660    
661    sub formatrest {
662      my $self = shift;
663    
664      # handle notes, annotations, ISBN & ISSN numbers etc. here
665    
666      my $i = $self->{CUREL}->first_child('note');
667      if (defined($i)) {
668        my $t = $i->text;
669        $self->{CURR} .= $t;
670      }
671  }  }
672    
673  sub author {  sub author {
# Line 657  sub and { Line 886  sub and {
886    return "and";    return "and";
887  }  }
888    
889    sub in {
890      my $self = shift;
891      my $t = shift;
892      return "in $t";
893    }
894    
895    sub outputcite {
896      my $self = shift;
897      my $c = shift;
898      return "\\cite{$c}";
899    }
900    
901    sub comma {
902      return ',';
903    }
904    
905  1;  1;
906  __END__  __END__
907    

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.8

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26