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; |
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, @_)}, |
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 |
} |
} |
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 { |
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 |
|
|