Bundle-PBib

 view release on metacpan or  search on metacpan

lib/PBib/ReferenceConverter.pm  view on Meta::CPAN

	foreach my $arg (keys %args) {
		$self->{$arg} = $args{$arg};
	}
}

#
#
# access methods
#
#

sub inDoc { my $self = shift; return $self->{'inDoc'}; }
sub outDoc { my $self = shift; return $self->{'outDoc'}; }

# options for the ref' converter share the ref'style's options.
sub option { my ($self, $opt) = @_; return $self->refOptions()->{$opt}; }

sub refOptions { my $self = shift; return $self->{'refOptions'} || {}; }
sub labelOptions { my $self = shift; return $self->{'labelOptions'} || {}; }
sub bibOptions { my $self = shift; return $self->{'bibOptions'} || {}; }
sub itemOptions { my $self = shift; return $self->{'itemOptions'} || {}; }

sub refStyle { my $self = shift; return $self->{'refStyle'}; }
sub labelStyle { my $self = shift; return $self->{'labelStyle'}; }
sub bibStyle { my $self = shift; return $self->{'bibStyle'}; }
sub itemStyle { my $self = shift; return $self->{'itemStyle'}; }



sub messages {
    my ($self) = @_;
    return $self->{'messages'} if $self->{'messages'};
    return $self->{'messages'} = [];
}

sub clearMessages {
    my ($self) = @_;
    delete $self->{'messages'}
}

sub logMessage {
    my $self = shift;
    print STDERR utf8_to_ascii("@_\n") unless $self->{'quiet'};
    push @{$self->messages()}, "@_";
}

sub traceMessage {
    my $self = shift;
    print STDERR utf8_to_ascii("@_\n") if $self->{'verbose'};
    push @{$self->messages()}, "@_";
}

sub warn {
    my $self = shift;
    $self->logMessage("WARNING: @_");
}


sub utf8_to_ascii {
	# on my system (win), STDERR does not support utf8 (per default)
	# this function maps unicode to plain ascii to avoid warnings 
	# about unprintable wide characters.
   return join("",
	 map { $_ > 255 ?                  # if wide character...
		   sprintf("&#x%04X;", $_) :   # \x{...}
		   chr($_)                    # else as themselves
	 } unpack("U*", $_[0]));         # unpack Unicode characters
}


#
#
# scanning methods
#
#

# all information about found references
sub foundInfo { my ($self) = @_; $self->scan(); return $self->{'foundInfo'}; }

# all information about found paragraphs with references
sub parInfo { my ($self) = @_; $self->scan(); return $self->{'parInfo'}; }

# all indexes of paragraphs containing refs
sub parIndexes { my ($self) = @_; return [keys(%{$self->parInfo()})]; }

# all ID of found references
sub foundIDs { my ($self) = @_; return [keys(%{$self->foundInfo()})]; }

sub knownIDs {
#
# return known and found ref IDs => the items for the bibliography
#
  my ($self) = @_;
  my @items;
  my $refs = $self->refs();

  # remove unknown reference IDs
  foreach my $ref (@{$self->foundIDs()}) {
    push @items, $ref
		if defined($refs->{$ref});
  }
  return \@items;
}

sub unknownIDs {
#
# return unknown and found ref IDs => possible errors!
#
  my ($self) = @_;
  my @items;
  my $refs = $self->refs();

  # remove known reference IDs
  foreach my $ref (@{$self->foundIDs()}) {
    push @items, $ref
		unless defined($refs->{$ref});
  }
  return \@items;
}




( run in 2.317 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )