summaryrefslogtreecommitdiff
path: root/Master/texmf-dist
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2015-12-29 00:16:03 +0000
committerKarl Berry <karl@freefriends.org>2015-12-29 00:16:03 +0000
commitd3c8410c4bf38ea695fb6580785720e426a71a87 (patch)
tree62d8ec81a9b6ca9fc63d53121d29249e9f56d01b /Master/texmf-dist
parentbac237f29f6ca325050af70f4720d1af61c45bbe (diff)
bibtexperllibs (26dec15)
git-svn-id: svn://tug.org/texlive/trunk@39224 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist')
-rw-r--r--Master/texmf-dist/scripts/bibtexperllibs/BibTeX/Parser.pm64
-rw-r--r--Master/texmf-dist/scripts/bibtexperllibs/BibTeX/Parser/Author.pm214
-rw-r--r--Master/texmf-dist/scripts/bibtexperllibs/BibTeX/Parser/Entry.pm136
-rw-r--r--Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/Changes5
-rw-r--r--Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/MANIFEST6
-rw-r--r--Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/META.yml29
-rw-r--r--Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/Makefile.PL4
-rw-r--r--Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/README7
-rw-r--r--Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/dist.ini6
-rw-r--r--Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/03-parse_entry.t122
-rw-r--r--Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/05-author.t8
-rw-r--r--Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/11-split_braced.t28
-rw-r--r--Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/12-von_token.t12
-rw-r--r--Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/13_output.t27
-rw-r--r--Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/bibs/braces.bib21
-rw-r--r--Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/bibs/english.bib2
-rw-r--r--Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/bug67419.t29
-rw-r--r--Master/texmf-dist/source/support/bibtexperllibs/README19
18 files changed, 540 insertions, 199 deletions
diff --git a/Master/texmf-dist/scripts/bibtexperllibs/BibTeX/Parser.pm b/Master/texmf-dist/scripts/bibtexperllibs/BibTeX/Parser.pm
index 8f0ab3a4c49..c7d7a75fc35 100644
--- a/Master/texmf-dist/scripts/bibtexperllibs/BibTeX/Parser.pm
+++ b/Master/texmf-dist/scripts/bibtexperllibs/BibTeX/Parser.pm
@@ -1,6 +1,6 @@
package BibTeX::Parser;
{
- $BibTeX::Parser::VERSION = '0.65';
+ $BibTeX::Parser::VERSION = '0.66';
}
# ABSTRACT: A pure perl BibTeX parser
use warnings;
@@ -208,6 +208,53 @@ sub _extract_bracketed
}
}
+# Split the $string using $pattern as a delimiter with
+# each part having balanced braces (so "{$pattern}"
+# does NOT split).
+# Return empty list if unmatched braces
+
+sub _split_braced_string {
+ my $string = shift;
+ my $pattern = shift;
+ my @tokens;
+ return () if $string eq '';
+ my $buffer;
+ while (!defined pos $string || pos $string < length $string) {
+ if ( $string =~ /\G(.*?)(\{|$pattern)/cgi ) {
+ my $match = $1;
+ if ( $2 =~ /$pattern/i ) {
+ $buffer .= $match;
+ push @tokens, $buffer;
+ $buffer = "";
+ } elsif ( $2 =~ /\{/ ) {
+ $buffer .= $match . "{";
+ my $numbraces=1;
+ while ($numbraces !=0 && pos $string < length $string) {
+ my $symbol = substr($string, pos $string, 1);
+ $buffer .= $symbol;
+ if ($symbol eq '{') {
+ $numbraces ++;
+ } elsif ($symbol eq '}') {
+ $numbraces --;
+ }
+ pos($string) ++;
+ }
+ if ($numbraces != 0) {
+ return ();
+ }
+ } else {
+ $buffer .= $match;
+ }
+ } else {
+ $buffer .= substr $string, (pos $string || 0);
+ last;
+ }
+ }
+ push @tokens, $buffer if $buffer;
+ return @tokens;
+}
+
+
1; # End of BibTeX::Parser
@@ -220,7 +267,7 @@ BibTeX::Parser - A pure perl BibTeX parser
=head1 VERSION
-version 0.65
+version 0.66
=head1 SYNOPSIS
@@ -279,7 +326,13 @@ Parameters:
Returns the next parsed entry or undef.
-=head2 SEE ALSO
+=head1 NOTES
+
+The fields C<author> and C<editor> are canonized, see
+L<BibTeX::Parser::Author>
+
+
+=head1 SEE ALSO
=over 4
@@ -295,11 +348,12 @@ L<BibTeX::Parser::Author>
=head1 AUTHOR
-Gerhard Gossen <gerhard.gossen@googlemail.com>
+Gerhard Gossen <gerhard.gossen@googlemail.com> and
+Boris Veytsman <boris@varphi.com>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Gerhard Gossen.
+This software is copyright (c) 2013-2015 by Gerhard Gossen and Boris Veytsman
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/Master/texmf-dist/scripts/bibtexperllibs/BibTeX/Parser/Author.pm b/Master/texmf-dist/scripts/bibtexperllibs/BibTeX/Parser/Author.pm
index c358d245116..d7e84577e60 100644
--- a/Master/texmf-dist/scripts/bibtexperllibs/BibTeX/Parser/Author.pm
+++ b/Master/texmf-dist/scripts/bibtexperllibs/BibTeX/Parser/Author.pm
@@ -1,11 +1,14 @@
package BibTeX::Parser::Author;
{
- $BibTeX::Parser::Author::VERSION = '0.65';
+ $BibTeX::Parser::Author::VERSION = '0.66';
}
use warnings;
use strict;
+use BibTeX::Parser;
+
+
use overload
'""' => \&to_string;
@@ -52,42 +55,124 @@ sub jr {
}
+# Take a string and create an array [first, von, last, jr]
sub split {
- my ($self_or_class, $name) = @_;
+ my ($self_or_class, $name) = @_;
+
+ # remove whitespace at start and end of string
+ $name =~ s/^\s*(.*)\s*$/$1/s;
+
- # remove whitespace at start and end of string
- $name =~ s/^\s*(.*)\s*$/$1/s;
- if ( $name =~ /^\{\s*(.*)\s*\}$/ ) {
- return (undef, undef, $1, undef);
+ if (!length($name)) {
+ return (undef, undef, undef, undef);
+ }
+
+ my @comma_separated =
+ BibTeX::Parser::_split_braced_string($name,
+ '\s*,\s*');
+ if (scalar(@comma_separated) == 0) {
+ # Error?
+ return (undef, undef, undef, undef);
+ }
+
+ my $first=undef;
+ my $von=undef;
+ my $last=undef;
+ my $jr=undef;
+
+ if (scalar(@comma_separated) == 1) {
+ # First von Last form
+ my @tokens =
+ BibTeX::Parser::_split_braced_string($name, '\s+');
+ if (!scalar (@tokens)) {
+ return (undef, undef, undef, undef);
+ }
+ my ($start_von, $start_last) = _getStartVonLast (@tokens);
+ if ($start_von >0) {
+ $first = join(' ', splice(@tokens,0,$start_von));
}
+ if (($start_last-$start_von) >0) {
+ $von = join(' ', splice(@tokens,0,$start_last-$start_von));
+ }
+ $last = join(' ',@tokens);
+ return ($first, $von, $last, $jr);
+ }
+ # Now we work with von Last, [Jr,] First form
+ if (scalar @comma_separated == 2) { # no jr
+ my @tokens=
+ BibTeX::Parser::_split_braced_string($comma_separated[1], '\s+');
+ $first = join(' ', @tokens);
+ } else { # jr is present
+ my @tokens=
+ BibTeX::Parser::_split_braced_string($comma_separated[1], '\s+');
+ $jr = join(' ', @tokens);
+ @tokens=
+ BibTeX::Parser::_split_braced_string($comma_separated[2], '\s+');
+ $first = join(' ', @tokens);
+ }
+ my @tokens =
+ BibTeX::Parser::_split_braced_string($comma_separated[0], '\s+');
+ my $start_last = _getStartLast(@tokens);
+ if ($start_last > 0) {
+ $von=join(' ', splice(@tokens,0,$start_last));
+ }
+ $last = join(' ',@tokens);
+ return ($first, $von, $last, $jr);
- if ( $name =~ /\{/ ) {
- my @tokens;
- my $cur_token = '';
- while ( scalar( $name =~ /\G \s* ( [^,\{]*? ) ( \s* , \s* | \{ | \s* $ ) /xgc ) ) {
- $cur_token .= $1 if $1;
- if ( $2 =~ /\{/ ) {
- if ( scalar( $name =~ /\G([^\}]*)\}/gc ) ) {
- $cur_token .= "{$1}";
- } else {
- die "Unmatched brace in name '$name'";
- }
- } else {
- $cur_token =~ s/\s*$//;
- push @tokens, $cur_token if $cur_token;
- $cur_token = '';
- }
- }
- push @tokens, $cur_token if $cur_token;
- return _get_single_author_from_tokens( @tokens );
- } else {
- my @tokens = split /\s*,\s*/, $name;
+}
- return _get_single_author_from_tokens( @tokens );
- }
+# Return the index of the first von element and the first lastname
+# element. If no von element, von=last
+
+sub _getStartVonLast {
+ my $length=scalar(@_);
+ if ($length==1) {
+ return (0,0);
+ }
+ my $start_von=-1;
+ my $start_last=$length-1;
+ for (my $i=0; $i<$length; $i++) {
+ if (_is_von_token($_[$i])) {
+ $start_von=$i;
+ last;
+ }
+ }
+ if ($start_von== -1) { # no von part
+ return($length-1, $length-1);
+ }
+ if ($start_von== $length-1) { # all parts but last are upper case?
+ return($length-1, $length-1);
+ }
+ for (my $i=$start_von+1; $i<$length; $i++) {
+ if (!_is_von_token($_[$i])) {
+ $start_last=$i;
+ last;
+ }
+ }
+ return($start_von, $start_last);
+}
+
+
+# Return the index of the first lastname
+# element provided no first name elements are present
+
+sub _getStartLast {
+ my $length=scalar(@_);
+ if ($length==1) {
+ return 0;
+ }
+ my $start_last=$length-1;
+ for (my $i=0; $i<$length; $i++) {
+ if (!_is_von_token($_[$i])) {
+ $start_last=$i;
+ last;
+ }
+ }
+ return $start_last;
}
+
sub _split_name_parts {
my $name = shift;
@@ -172,6 +257,8 @@ sub _get_single_author_from_tokens {
}
+
+
sub to_string {
my $self = shift;
@@ -182,6 +269,39 @@ sub to_string {
}
}
+
+# Return 1 if the first letter on brace level 0 is lowercase
+sub _is_von_token {
+ my $string = shift;
+ while ($string =~
+ s/^(\\[[:alpha:]]+\{|\{|\\[[:^alpha:]]?|[[:^alpha:]])//) {
+ if ($1 eq '{' ) {
+ my $numbraces=1;
+ while ($numbraces !=0 && length($string)) {
+ my $symbol = substr($string, 0, 1);
+ if ($symbol eq '{') {
+ $numbraces ++;
+ } elsif ($symbol eq '}') {
+ $numbraces --;
+ }
+ $string = substr($string,1);
+ }
+ }
+ }
+
+ if (length $string ) {
+ my $symbol = substr($string, 0, 1);
+ if (lc($symbol) eq $symbol) {
+ return 1;
+ } else {
+ return 0;
+ }
+ } else {
+ return 1;
+ }
+
+}
+
1; # End of BibTeX::Entry
__END__
@@ -219,7 +339,7 @@ BibTeX::Author - Contains a single author for a BibTeX document.
=head1 VERSION
-version 0.65
+version 0.66
=head1 FUNCTIONS
@@ -252,13 +372,43 @@ with four strings, some of them possibly empty.
Return string representation of the name.
+=head1 NOTES
+
+BibTeX allows three representations of a person's name:
+
+=over 4
+
+=item 1.
+
+First von Last
+
+=item 2.
+
+von Last, First
+
+=item 3.
+
+von Last, Jr, First
+
+=back
+
+The module always converts the first form to the second of third one
+to allow simple string comparisons.
+
+The algorithm to determine the von part is the following: von part
+consists of tokens where the first letter at brace level 0 is in lower case.
+Anything in a "special characters" is on brace level 0. Thus the following
+tokens are considered von parts: C<von>, C<\NOOP{von}Von>, and
+the following token is not: C<{von}>
+
=head1 AUTHOR
-Gerhard Gossen <gerhard.gossen@googlemail.com>
+Gerhard Gossen <gerhard.gossen@googlemail.com> and
+Boris Veytsman <boris@varphi.com>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Gerhard Gossen.
+This software is copyright (c) 2013--2015 by Gerhard Gossen and Boris Veytsman.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/Master/texmf-dist/scripts/bibtexperllibs/BibTeX/Parser/Entry.pm b/Master/texmf-dist/scripts/bibtexperllibs/BibTeX/Parser/Entry.pm
index 6fb54a3972a..b10317c42b4 100644
--- a/Master/texmf-dist/scripts/bibtexperllibs/BibTeX/Parser/Entry.pm
+++ b/Master/texmf-dist/scripts/bibtexperllibs/BibTeX/Parser/Entry.pm
@@ -1,11 +1,12 @@
package BibTeX::Parser::Entry;
{
- $BibTeX::Parser::Entry::VERSION = '0.65';
+ $BibTeX::Parser::Entry::VERSION = '0.66';
}
use warnings;
use strict;
+use BibTeX::Parser;
use BibTeX::Parser::Author;
@@ -122,76 +123,44 @@ sub _handle_cleaned_author_editor {
no LaTeX::ToUnicode;
sub _handle_author_editor {
- my $type = shift;
- my $self = shift;
- if (@_) {
- if (@_ == 1) { #single string
- # my @names = split /\s+and\s+/i, $_[0];
- my @names = _split_author_field( $_[0] );
- $self->{"_$type"} = [map {new BibTeX::Parser::Author $_} @names];
- $self->field($type, join " and ", @{$self->{"_$type"}});
- } else {
- $self->{"_$type"} = [];
- foreach my $param (@_) {
- if (ref $param eq "BibTeX::Author") {
- push @{$self->{"_$type"}}, $param;
- } else {
- push @{$self->{"_$type"}}, new BibTeX::Parser::Author $param;
- }
-
- $self->field($type, join " and ", @{$self->{"_$type"}});
- }
- }
+ my $type = shift;
+ my $self = shift;
+ if (@_) {
+ if (@_ == 1) { #single string
+ # my @names = split /\s+and\s+/i, $_[0];
+ $_[0] =~ s/^\s*//;
+ $_[0] =~ s/\s*$//;
+ my @names = BibTeX::Parser::_split_braced_string($_[0],
+ '\s+and\s+');
+ if (!scalar @names) {
+ $self->error('Bad names in author/editor field');
+ return;
+ }
+ $self->{"_$type"} = [map {new BibTeX::Parser::Author $_} @names];
+ $self->field($type, join " and ", @{$self->{"_$type"}});
} else {
- unless ( defined $self->{"_$type"} ) {
- #my @names = split /\s+and\s+/i, $self->{$type} || "";
- my @names = _split_author_field( $self->{$type} || "" );
- $self->{"_$type"} = [map {new BibTeX::Parser::Author $_} @names];
- }
- return @{$self->{"_$type"}};
- }
-}
-
-# _split_author_field($field)
-#
-# Split an author field into different author names.
-# Handles quoted names ({name}).
-sub _split_author_field {
- my $field = shift;
-
- return () if !defined $field || $field eq '';
-
- my @names;
-
- my $buffer;
- while (!defined pos $field || pos $field < length $field) {
- if ( $field =~ /\G ( .*? ) ( \{ | \s+ and \s+ )/xcgi ) {
- my $match = $1;
- if ( $2 =~ /and/i ) {
- $buffer .= $match;
- push @names, $buffer;
- $buffer = "";
- } elsif ( $2 =~ /\{/ ) {
- $buffer .= $match . "{";
- if ( $field =~ /\G (.* \})/cgx ) {
- $buffer .= $1;
+ $self->{"_$type"} = [];
+ foreach my $param (@_) {
+ if (ref $param eq "BibTeX::Author") {
+ push @{$self->{"_$type"}}, $param;
} else {
- die "Missing closing brace at " . substr( $field, pos $field, 10 );
+ push @{$self->{"_$type"}}, new BibTeX::Parser::Author $param;
}
- } else {
- $buffer .= $match;
+
+ $self->field($type, join " and ", @{$self->{"_$type"}});
}
- } else {
- #print "# $field " . (pos ($field) || 0) . "\n";
- $buffer .= substr $field, (pos $field || 0);
- last;
}
+ } else {
+ unless ( defined $self->{"_$type"}) {
+ my @names = BibTeX::Parser::_split_braced_string($self->{$type} || "", '\s+and\s+' );
+ $self->{"_$type"} = [map {new BibTeX::Parser::Author $_} @names];
+ }
+ return @{$self->{"_$type"}};
}
- push @names, $buffer if $buffer;
- return @names;
}
+
sub author {
_handle_author_editor('author', @_);
}
@@ -235,6 +204,26 @@ sub raw_bibtex {
return $self->{_raw};
}
+sub to_string {
+ my $self = shift;
+ my @fields = grep {!/^_/} keys %$self;
+ my $result = '@'.$self->type."{".$self->key.",\n";
+ foreach my $field (@fields) {
+ my $value = $self->field($field);
+ if ($field eq 'author') {
+ my @names = ($self->author);
+ $value = join(' and ', @names);
+ }
+ if ($field eq 'editor') {
+ my @names = ($self->editors);
+ $value = join(' and ', @names);
+ }
+ $result .= " $field = {"."$value"."},\n";
+ }
+ $result .= "}";
+ return $result;
+}
+
1; # End of BibTeX::Entry
__END__
@@ -246,7 +235,7 @@ BibTeX::Parser::Entry
=head1 VERSION
-version 0.65
+version 0.66
=head1 SYNOPSIS
@@ -265,15 +254,19 @@ by a BibTeX::Parser.
my @editors = $entry->editor;
...
+
+ print $entry->to_string;
}
+
+
=head1 NAME
-BibTeX::Entry - Contains a single entry of a BibTeX document.
+BibTeX::Parser::Entry - Contains a single entry of a BibTeX document.
=head1 VERSION
-version 0.65
+version 0.66
=head1 FUNCTIONS
@@ -333,7 +326,7 @@ or strings.
Note: You can also change the authors with $entry->field('editor', $editors_string)
-=head2 fieldlist()
+=head2 fieldlist ()
Returns a list of all the fields used in this entry.
@@ -341,17 +334,22 @@ Returns a list of all the fields used in this entry.
Returns a true value if this entry has a value for $fieldname.
-=head2 raw_bibtex
+=head2 raw_bibtex ()
Return raw BibTeX entry (if available).
+=head2 to_string ()
+
+Returns a text of the BibTeX entry in BibTeX format
+
=head1 AUTHOR
-Gerhard Gossen <gerhard.gossen@googlemail.com>
+Gerhard Gossen <gerhard.gossen@googlemail.com> and
+Boris Veytsman <boris@varphi.com>
=head1 COPYRIGHT AND LICENSE
-This software is copyright (c) 2013 by Gerhard Gossen.
+This software is copyright (c) 2013-2015 by Gerhard Gossen and Boris Veytsman
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
diff --git a/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/Changes b/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/Changes
index 6aed797f987..57ba094ac68 100644
--- a/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/Changes
+++ b/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/Changes
@@ -1,5 +1,10 @@
Revision history for BibTeX-Parser
+0.66 2015-12-23 19:52:55-05:00
+ Corrected bug 67419.
+ Added $entry->to_string function
+ No Do not remove braces from the authors' names
+
0.65 2013-09-03 21:04:43
Add links in documentation.
diff --git a/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/MANIFEST b/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/MANIFEST
index b9b800a52e7..a08640964d6 100644
--- a/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/MANIFEST
+++ b/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/MANIFEST
@@ -20,17 +20,23 @@ t/07-parse_englishbib.t
t/08-parse_large.t
t/09-complex.t
t/10-funnyname.t
+t/11-split_braced.t
+t/12-von_token.t
+t/13_output.t
t/bibs/01.bib
t/bibs/06.bib
t/bibs/09-complex.bib
t/bibs/10-funnyname.bib
+t/bibs/braces.bib
t/bibs/endnote.txt
t/bibs/engineering_village.txt
t/bibs/english.bib
t/bibs/mathscinet.txt
t/bug66325.t
+t/bug67419.t
t/cleaned_field.t
t/pod-coverage.t
t/pod.t
t/release-pod-coverage.t
t/release-pod-syntax.t
+META.json Module JSON meta-data (added by MakeMaker)
diff --git a/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/META.yml b/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/META.yml
index c8bb09663ed..8cee4bb38eb 100644
--- a/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/META.yml
+++ b/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/META.yml
@@ -1,22 +1,27 @@
---
abstract: 'A pure perl BibTeX parser'
author:
- - 'Gerhard Gossen <gerhard.gossen@googlemail.com>'
+ - 'Gerhard Gossen <gerhard.gossen@googlemail.com> and Boris Veytsman <boris@varphi.com>'
build_requires:
- Test::More: 0.88
+ Test::More: '0.88'
configure_requires:
- ExtUtils::MakeMaker: 6.30
-dynamic_config: 0
-generated_by: 'Dist::Zilla version 4.300037, CPAN::Meta::Converter version 2.120921'
+ ExtUtils::MakeMaker: '6.30'
+dynamic_config: 1
+generated_by: 'ExtUtils::MakeMaker version 7.1, CPAN::Meta::Converter version 2.150005'
license: perl
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
- version: 1.4
+ version: '1.4'
name: BibTeX-Parser
+no_index:
+ directory:
+ - t
+ - inc
requires:
- File::Spec: 0
- IO::File: 0
- IO::String: 0
- LaTeX::ToUnicode: 0.02
- Test::More: 0
-version: 0.65
+ File::Spec: '0'
+ IO::File: '0'
+ IO::String: '0'
+ LaTeX::ToUnicode: '0.02'
+ Test::More: '0'
+version: '0.66'
+x_serialization_backend: 'CPAN::Meta::YAML version 0.016'
diff --git a/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/Makefile.PL b/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/Makefile.PL
index bd0f7c0d16b..b800aa6f863 100644
--- a/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/Makefile.PL
+++ b/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/Makefile.PL
@@ -10,7 +10,7 @@ use ExtUtils::MakeMaker 6.30;
my %WriteMakefileArgs = (
"ABSTRACT" => "A pure perl BibTeX parser",
- "AUTHOR" => "Gerhard Gossen <gerhard.gossen\@googlemail.com>",
+ "AUTHOR" => "Gerhard Gossen <gerhard.gossen\@googlemail.com> and Boris Veytsman <boris\@varphi.com>",
"BUILD_REQUIRES" => {},
"CONFIGURE_REQUIRES" => {
"ExtUtils::MakeMaker" => "6.30"
@@ -29,7 +29,7 @@ my %WriteMakefileArgs = (
"TEST_REQUIRES" => {
"Test::More" => "0.88"
},
- "VERSION" => "0.65",
+ "VERSION" => "0.66",
"test" => {
"TESTS" => "t/*.t"
}
diff --git a/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/README b/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/README
index 016740c5516..0960f8935e5 100644
--- a/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/README
+++ b/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/README
@@ -1,13 +1,16 @@
This archive contains the distribution BibTeX-Parser,
-version 0.65:
+version 0.66:
A pure perl BibTeX parser
-This software is copyright (c) 2013 by Gerhard Gossen.
+This software is copyright (c) 2013--2015 by Gerhard Gossen and Boris Veytsman
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
+Version 0.66 is the first version released by Boris Veytsman.
+It has an important change: now braces in names are kept to
+allow the proper output of the entries \ No newline at end of file
diff --git a/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/dist.ini b/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/dist.ini
index 60d9924ad7a..5e435b528c2 100644
--- a/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/dist.ini
+++ b/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/dist.ini
@@ -1,8 +1,8 @@
name = BibTeX-Parser
-version = 0.65
-author = Gerhard Gossen <gerhard.gossen@googlemail.com>
+version = 0.66
+author = Gerhard Gossen <gerhard.gossen@googlemail.com> and Boris Veytsman <boris@varphi.com>
license = Perl_5
-copyright_holder = Gerhard Gossen
+copyright_holder = Gerhard Gossen and Boris Veytsman
[@Classic]
diff --git a/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/03-parse_entry.t b/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/03-parse_entry.t
index 92597173a94..e4d0e1b18cc 100644
--- a/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/03-parse_entry.t
+++ b/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/03-parse_entry.t
@@ -1,61 +1,61 @@
-#!/usr/bin/perl -w
-
-use Test::More tests => 2;
-
-use IO::String;
-use BibTeX::Parser;
-
-{
- my $string = q|@article{lin1973,
- author = "Shen Lin and Brian W. Kernighan",
- title = "An Effective Heuristic Algorithm for the Travelling-Salesman Problem",
- journal = "Operations Research",
- volume = 21,
- year = 1973,
- pages = "498--516"
- }|;
- my $fh = IO::String->new($string);
-
- my $parser = BibTeX::Parser->new( $fh );
-
-#my @result = BibTeX::Parser->_parse($fh);
-
- my $entry = $parser->next;
-
- is_deeply($entry, {_type => 'ARTICLE', _key => 'lin1973', author => "Shen Lin and Brian W. Kernighan",
- title => "An Effective Heuristic Algorithm for the Travelling-Salesman Problem",
- journal => "Operations Research",
- volume => 21,
- year => 1973,
- pages => "498--516", _parse_ok => 1,
- _raw => $string}, "parse \@ARTICLE");
-
-}
-{
- my $string = q|@InProceedings{Herper:2001:MVS,
- author = {Henry Herper},
- title = {{M}odellierung von {S}ystemen: ein
- {A}pplikationsgebiet im {I}nformatikunterricht},
- booktitle = {Informatikunterricht und Medienbildung, INFOS 2001
- (9. Fachtagung Informatik und Schule, Paderborn
- 17.-20- September 2001) -- Tagungsband},
- editor = {Reinhard Keil-Slavik and Johannes Magenheim},
- year = {2001},
-}|;
- my $fh = IO::String->new($string);
-
- my $parser = BibTeX::Parser->new( $fh );
-
- my $entry = $parser->next;
-
- is_deeply($entry, {
- _type => 'INPROCEEDINGS',
- _key => 'Herper:2001:MVS',
- author => "Henry Herper",
- title => "{M}odellierung von {S}ystemen: ein {A}pplikationsgebiet im {I}nformatikunterricht",
- booktitle => "Informatikunterricht und Medienbildung, INFOS 2001 (9. Fachtagung Informatik und Schule, Paderborn 17.-20- September 2001) -- Tagungsband",
- editor => "Reinhard Keil-Slavik and Johannes Magenheim",
- year => 2001,
- _parse_ok => 1,
- _raw => $string}, "parse \@ARTICLE");
-}
+#!/usr/bin/perl -w
+
+use Test::More tests => 2;
+
+use IO::String;
+use BibTeX::Parser;
+
+{
+ my $string = q|@article{lin1973,
+ author = "Shen Lin and Brian W. Kernighan",
+ title = "An Effective Heuristic Algorithm for the Travelling-Salesman Problem",
+ journal = "Operations Research",
+ volume = 21,
+ year = 1973,
+ pages = "498--516"
+ }|;
+ my $fh = IO::String->new($string);
+
+ my $parser = BibTeX::Parser->new( $fh );
+
+#my @result = BibTeX::Parser->_parse($fh);
+
+ my $entry = $parser->next;
+
+ is_deeply($entry, {_type => 'ARTICLE', _key => 'lin1973', author => "Shen Lin and Brian W. Kernighan",
+ title => "An Effective Heuristic Algorithm for the Travelling-Salesman Problem",
+ journal => "Operations Research",
+ volume => 21,
+ year => 1973,
+ pages => "498--516", _parse_ok => 1,
+ _raw => $string}, "parse \@ARTICLE");
+
+}
+{
+ my $string = q|@InProceedings{Herper:2001:MVS,
+ author = {Henry Herper},
+ title = {{M}odellierung von {S}ystemen: ein
+ {A}pplikationsgebiet im {I}nformatikunterricht},
+ booktitle = {Informatikunterricht und Medienbildung, INFOS 2001
+ (9. Fachtagung Informatik und Schule, Paderborn
+ 17.-20- September 2001) -- Tagungsband},
+ editor = {Reinhard Keil-Slavik and Johannes Magenheim},
+ year = {2001},
+}|;
+ my $fh = IO::String->new($string);
+
+ my $parser = BibTeX::Parser->new( $fh );
+
+ my $entry = $parser->next;
+
+ is_deeply($entry, {
+ _type => 'INPROCEEDINGS',
+ _key => 'Herper:2001:MVS',
+ author => "Henry Herper",
+ title => "{M}odellierung von {S}ystemen: ein {A}pplikationsgebiet im {I}nformatikunterricht",
+ booktitle => "Informatikunterricht und Medienbildung, INFOS 2001 (9. Fachtagung Informatik und Schule, Paderborn 17.-20- September 2001) -- Tagungsband",
+ editor => "Reinhard Keil-Slavik and Johannes Magenheim",
+ year => 2001,
+ _parse_ok => 1,
+ _raw => $string}, "parse \@ARTICLE");
+}
diff --git a/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/05-author.t b/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/05-author.t
index cae7824099e..45bc5413df1 100644
--- a/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/05-author.t
+++ b/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/05-author.t
@@ -26,7 +26,7 @@ my %names = (
" " => [undef, undef, undef, undef],
"\n" => [undef, undef, undef, undef],
"al." => [undef, undef, "al.", undef],
- "et. al." => [undef, undef, "et. al.", undef],
+ "et.~al." => [undef, undef, "et.~al.", undef],
"O'Malley, A." => ["A.", undef, "O'Malley", undef],
"A. O'Malley" => ["A.", undef, "O'Malley", undef],
"Arthur O'Malley" => ["Arthur", undef, "O'Malley", undef],
@@ -36,9 +36,9 @@ my %names = (
'L.M. M"uller' => ["L.M.", undef, 'M"uller', undef],
'M"uller, L.M.' => ["L.M.", undef, 'M"uller', undef],
'van Beethoven, Ludwig' => ["Ludwig", "van", "Beethoven", undef ],
- '{Barnes and Noble, Inc.}' => [undef, undef, 'Barnes and Noble, Inc.', undef],
- "Ludwigg {van Beethoven}" => ["Ludwigg", undef, "van Beethoven", undef],
- '{van Beethoven}, Ludwig' => ["Ludwig", undef, "van Beethoven", undef ],
+ '{Barnes and Noble, Inc.}' => [undef, undef, '{Barnes and Noble, Inc.}', undef],
+ "Ludwigg {van Beethoven}" => ["Ludwigg", undef, "{van Beethoven}", undef],
+ '{van Beethoven}, Ludwig' => ["Ludwig", undef, "{van Beethoven}", undef ],
);
plan tests => (keys(%names) * 6 + 5);
diff --git a/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/11-split_braced.t b/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/11-split_braced.t
new file mode 100644
index 00000000000..85a29be86fd
--- /dev/null
+++ b/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/11-split_braced.t
@@ -0,0 +1,28 @@
+#!/usr/bin/perl -w
+
+use Test::More tests => 12;
+
+use BibTeX::Parser;
+use IO::File;
+
+my @tokens = BibTeX::Parser::_split_braced_string("a and b", '\s+and\s+');
+is(scalar @tokens,2);
+is($tokens[0],'a');
+is($tokens[1],'b');
+
+@tokens = BibTeX::Parser::_split_braced_string("a {and} b", '\s+and\s+');
+is(scalar @tokens,1);
+is($tokens[0],'a {and} b');
+
+@tokens = BibTeX::Parser::_split_braced_string("a {and b", '\s+and\s+');
+is(scalar @tokens,0);
+
+@tokens = BibTeX::Parser::_split_braced_string("} a {", '\s+');
+is(scalar @tokens,0);
+
+@tokens = BibTeX::Parser::_split_braced_string("{a b} c {d}e u", '\s+');
+is(scalar @tokens,4);
+is($tokens[0],'{a b}');
+is($tokens[1],'c');
+is($tokens[2],'{d}e');
+is($tokens[3],'u');
diff --git a/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/12-von_token.t b/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/12-von_token.t
new file mode 100644
index 00000000000..6daceafa960
--- /dev/null
+++ b/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/12-von_token.t
@@ -0,0 +1,12 @@
+#!/usr/bin/perl -w
+
+use Test::More tests => 5;
+
+use BibTeX::Parser::Author;
+use IO::File;
+
+is(BibTeX::Parser::Author::_is_von_token('von'),1);
+is(BibTeX::Parser::Author::_is_von_token('Von'),0);
+is(BibTeX::Parser::Author::_is_von_token('\noop{von}Von'),1);
+is(BibTeX::Parser::Author::_is_von_token('\noop{Von}von'),0);
+is(BibTeX::Parser::Author::_is_von_token('\noop{AE}{\AE}schylus'),0);
diff --git a/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/13_output.t b/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/13_output.t
new file mode 100644
index 00000000000..2d2e1ebfd36
--- /dev/null
+++ b/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/13_output.t
@@ -0,0 +1,27 @@
+#!/usr/bin/perl -w
+
+use Test::More;
+
+use BibTeX::Parser;
+use IO::File;
+
+
+my $fh = new IO::File "t/bibs/01.bib", "r" ;
+
+my $parser = new BibTeX::Parser $fh;
+
+
+while (my $entry = $parser->next) {
+ if($entry->key eq 'key01') {
+ my $result='@ARTICLE{key01,
+ month = {January~1},
+ title = {Title text},
+ author = {Duck, Donald and Else, Someone},
+ year = {1950},
+}';
+ is($entry->to_string,$result);
+ }
+
+}
+
+done_testing();
diff --git a/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/bibs/braces.bib b/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/bibs/braces.bib
new file mode 100644
index 00000000000..3791fb57604
--- /dev/null
+++ b/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/bibs/braces.bib
@@ -0,0 +1,21 @@
+@Article{scholkopf98kpca,
+ author = {Bernhard {Sch\"olkopf} and Alex Smola and K.R. Muller},
+ title = {Nonlinear component analysis as a kernel eigenvalue
+problem},
+ journal = {Neural Computation},
+ year = {1998},
+ volume = {10},
+ pages = {1299--1319}
+}
+
+@article{brownetal93,
+ author = {Peter F. Brown and Stephen A. {Della Pietra} and
+ Vincent J. {Della Pietra} and Robert~L. Mercer},
+ title = {The Mathematics of Statistical Machine Translation:
+ Parameter Estimation},
+ journal = {Computational Linguistics},
+ year = 1993,
+ volume = 19,
+ number = 2,
+ pages = {263-311}
+}
diff --git a/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/bibs/english.bib b/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/bibs/english.bib
index 6893e1e4111..eda85e24d05 100644
--- a/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/bibs/english.bib
+++ b/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/bibs/english.bib
@@ -1,4 +1,4 @@
-$Id: english.bib,v 1.1.1.1 2015/10/25 01:25:20 boris Exp $
+$Id: english.bib,v 1.2 2015/12/24 18:46:53 boris Exp $
Please notify Adrian F Clark <alien@uk.ac.essex.ese> of any additions
or corrections to this list.
diff --git a/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/bug67419.t b/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/bug67419.t
new file mode 100644
index 00000000000..0f944f373a9
--- /dev/null
+++ b/Master/texmf-dist/source/support/bibtexperllibs/BibTeX-Parser/t/bug67419.t
@@ -0,0 +1,29 @@
+#!/usr/bin/perl -w
+
+use Test::More;
+
+use BibTeX::Parser;
+use IO::File;
+
+my $fh = new IO::File "t/bibs/braces.bib", "r" ;
+my $parser = new BibTeX::Parser $fh;
+while (my $entry=$parser->next) {
+ is($entry->parse_ok,1);
+ if ($entry->key eq 'scholkopf98kpca') {
+ @authors=$entry->author;
+ is(scalar @authors,3);
+ is("$authors[0]", '{Sch\"olkopf}, Bernhard');
+ is("$authors[1]", 'Smola, Alex');
+ is("$authors[2]", 'Muller, K.R.');
+ }
+ if ($entry->key eq 'brownetal93') {
+ @authors=$entry->author;
+ is(scalar @authors,4);
+ is("$authors[0]", 'Brown, Peter F.');
+ is("$authors[1]", '{Della Pietra}, Stephen A.');
+ is("$authors[2]", '{Della Pietra}, Vincent J.');
+ is("$authors[3]", 'Mercer, Robert~L.');
+ }
+}
+
+done_testing();
diff --git a/Master/texmf-dist/source/support/bibtexperllibs/README b/Master/texmf-dist/source/support/bibtexperllibs/README
index 9915b70105a..6266323fb8f 100644
--- a/Master/texmf-dist/source/support/bibtexperllibs/README
+++ b/Master/texmf-dist/source/support/bibtexperllibs/README
@@ -1,13 +1,16 @@
BibTeX Perl Libs
- Version 0.1
- Gerhard Gossen
+ Version 0.2
+ Gerhard Gossen and Boris Veytsman
This package provides BibTeX related Perl libraries by Gerhard Gossen,
-repacked by Boris Veytsman, boris@varphi.com, for TeXLive and other
-TDS-compliant distributions. The libraries are written in pure
-Perl, so shoud work out of the box on any architecture. They are packaged
-mostly for Boris Veytsman's BibTeX suite, but can be used in any
-other Perl script.
+maintained and repacked by Boris Veytsman, boris@varphi.com, for
+TeXLive and other TDS-compliant distributions. The libraries are
+written in pure Perl, so shoud work out of the box on any
+architecture.
To use them in your scripts, add to the @INC variable the directory
-scripts/bibtexperllibs in your TeX distribution.
+scripts/bibtexperllibs inside your TeX distribution.
+
+Changes:
+
+ version 0.2 New upstream version for BibTeX::Parser (0.66)