r19989 - in /branches/upstream/libbiblio-endnotestyle-perl: ./ current/ current/bin/ current/lib/ current/lib/Biblio/ current/t/

vdanjean at users.alioth.debian.org vdanjean at users.alioth.debian.org
Fri May 16 08:01:35 UTC 2008


Author: vdanjean
Date: Fri May 16 08:01:34 2008
New Revision: 19989

URL: http://svn.debian.org/wsvn/?sc=1&rev=19989
Log:
[svn-inject] Installing original source of libbiblio-endnotestyle-perl

Added:
    branches/upstream/libbiblio-endnotestyle-perl/
    branches/upstream/libbiblio-endnotestyle-perl/current/
    branches/upstream/libbiblio-endnotestyle-perl/current/Changes
    branches/upstream/libbiblio-endnotestyle-perl/current/MANIFEST
    branches/upstream/libbiblio-endnotestyle-perl/current/MANIFEST.SKIP
    branches/upstream/libbiblio-endnotestyle-perl/current/META.yml
    branches/upstream/libbiblio-endnotestyle-perl/current/Makefile.PL
    branches/upstream/libbiblio-endnotestyle-perl/current/README
    branches/upstream/libbiblio-endnotestyle-perl/current/bin/
    branches/upstream/libbiblio-endnotestyle-perl/current/bin/endnote-format   (with props)
    branches/upstream/libbiblio-endnotestyle-perl/current/lib/
    branches/upstream/libbiblio-endnotestyle-perl/current/lib/Biblio/
    branches/upstream/libbiblio-endnotestyle-perl/current/lib/Biblio/EndnoteStyle.pm
    branches/upstream/libbiblio-endnotestyle-perl/current/t/
    branches/upstream/libbiblio-endnotestyle-perl/current/t/Biblio-EndnoteStyle.t

Added: branches/upstream/libbiblio-endnotestyle-perl/current/Changes
URL: http://svn.debian.org/wsvn/branches/upstream/libbiblio-endnotestyle-perl/current/Changes?rev=19989&op=file
==============================================================================
--- branches/upstream/libbiblio-endnotestyle-perl/current/Changes (added)
+++ branches/upstream/libbiblio-endnotestyle-perl/current/Changes Fri May 16 08:01:34 2008
@@ -1,0 +1,43 @@
+$Id: Changes,v 1.11 2007/10/04 00:07:18 mike Exp $
+
+Revision history for Perl extension Biblio::EndnoteStyle.
+
+0.05  Thu Oct  4 01:07:14 BST 2007
+	- Field names may contain digits.
+	- Horrible but useful special case: when inserting a field
+	  called URL, if the value does not begin with a schema then
+	  "http://" is prepended.
+
+0.04  Wed Mar 14 11:14:57 GMT 2007
+	- Templates may now contain |-separated components consisting
+	  only of whitespace.  (That they couldn't previously was a
+	  bug.)
+	- Templates now correctly interpret backquotes surrounding a
+	  word for force its interpretation as a literal rather than a
+	  fieldname.
+	- Much better test-suite.
+
+0.03  Sat Feb 17 22:09:38 GMT 2007
+	- Downgrade "use 5.008" in lib/Biblio/EndnoteStyle.pm to
+	  5.006, to match what's specified in Makefile.PL.
+
+0.02  Fri Feb 16 01:16:32 GMT 2007
+	- Properly implement non-breaking space "¬", which was
+	  previously rendered as a literal.
+	- Tweak the rules so that a field that exists but is undefined
+	  in the data hash is treated as an absent field rather than a
+	  literal.
+	- Add debug() method to the formatter, causing compiled
+	  templates to be dumped to standard error.
+	- Add command-line script "bin/endnote-format", to allow the
+	  library to be simply exercised.
+	- Improvements to documentation.
+
+0.01  Mon Jan 22 22:03:12 2007
+	- original version; created by h2xs 1.23 with options
+		-X --name=Biblio::EndnoteStyle --compat-version=5.6.0 --omit-constant --skip-exporter --skip-ppport
+	- This release is functional but incomplete: many, many more
+	  test cases are needed, and adding these will no doubt
+	  require fixes to the code.  Nevertheless, the module is
+	  useful as it stands.
+

Added: branches/upstream/libbiblio-endnotestyle-perl/current/MANIFEST
URL: http://svn.debian.org/wsvn/branches/upstream/libbiblio-endnotestyle-perl/current/MANIFEST?rev=19989&op=file
==============================================================================
--- branches/upstream/libbiblio-endnotestyle-perl/current/MANIFEST (added)
+++ branches/upstream/libbiblio-endnotestyle-perl/current/MANIFEST Fri May 16 08:01:34 2008
@@ -1,0 +1,11 @@
+# $Id: MANIFEST,v 1.4 2007/02/15 23:49:52 mike Exp $
+
+Changes
+MANIFEST
+MANIFEST.SKIP
+META.yml                                 Module meta-data (added by MakeMaker)
+Makefile.PL
+README
+bin/endnote-format
+lib/Biblio/EndnoteStyle.pm
+t/Biblio-EndnoteStyle.t

Added: branches/upstream/libbiblio-endnotestyle-perl/current/MANIFEST.SKIP
URL: http://svn.debian.org/wsvn/branches/upstream/libbiblio-endnotestyle-perl/current/MANIFEST.SKIP?rev=19989&op=file
==============================================================================
--- branches/upstream/libbiblio-endnotestyle-perl/current/MANIFEST.SKIP (added)
+++ branches/upstream/libbiblio-endnotestyle-perl/current/MANIFEST.SKIP Fri May 16 08:01:34 2008
@@ -1,0 +1,8 @@
+# $Id: MANIFEST.SKIP,v 1.3 2007/01/23 09:36:10 mike Exp $
+
+.cvsignore
+CVS
+archive
+lib/Biblio/CVS
+lib/CVS
+t/CVS

Added: branches/upstream/libbiblio-endnotestyle-perl/current/META.yml
URL: http://svn.debian.org/wsvn/branches/upstream/libbiblio-endnotestyle-perl/current/META.yml?rev=19989&op=file
==============================================================================
--- branches/upstream/libbiblio-endnotestyle-perl/current/META.yml (added)
+++ branches/upstream/libbiblio-endnotestyle-perl/current/META.yml Fri May 16 08:01:34 2008
@@ -1,0 +1,10 @@
+# http://module-build.sourceforge.net/META-spec.html
+#XXXXXXX This is a prototype!!!  It will change in the future!!! XXXXX#
+name:         Biblio-EndnoteStyle
+version:      0.05
+version_from: lib/Biblio/EndnoteStyle.pm
+installdirs:  site
+requires:
+
+distribution_type: module
+generated_by: ExtUtils::MakeMaker version 6.30_01

Added: branches/upstream/libbiblio-endnotestyle-perl/current/Makefile.PL
URL: http://svn.debian.org/wsvn/branches/upstream/libbiblio-endnotestyle-perl/current/Makefile.PL?rev=19989&op=file
==============================================================================
--- branches/upstream/libbiblio-endnotestyle-perl/current/Makefile.PL (added)
+++ branches/upstream/libbiblio-endnotestyle-perl/current/Makefile.PL Fri May 16 08:01:34 2008
@@ -1,0 +1,15 @@
+# $Id: Makefile.PL,v 1.2 2007/02/15 23:52:08 mike Exp $
+
+use 5.006;
+use ExtUtils::MakeMaker;
+# See lib/ExtUtils/MakeMaker.pm for details of how to influence
+# the contents of the Makefile that is written.
+WriteMakefile(
+    NAME              => 'Biblio::EndnoteStyle',
+    VERSION_FROM      => 'lib/Biblio/EndnoteStyle.pm', # finds $VERSION
+    PREREQ_PM         => {}, # e.g., Module::Name => 1.1
+    ($] >= 5.005 ?     ## Add these new keywords supported since 5.005
+      (ABSTRACT_FROM  => 'lib/Biblio/EndnoteStyle.pm', # retrieve abstract from module
+       AUTHOR         => 'Mike Taylor <mike at miketaylor.org.uk>') : ()),
+    EXE_FILES    => [ 'bin/endnote-format' ],
+);

Added: branches/upstream/libbiblio-endnotestyle-perl/current/README
URL: http://svn.debian.org/wsvn/branches/upstream/libbiblio-endnotestyle-perl/current/README?rev=19989&op=file
==============================================================================
--- branches/upstream/libbiblio-endnotestyle-perl/current/README (added)
+++ branches/upstream/libbiblio-endnotestyle-perl/current/README Fri May 16 08:01:34 2008
@@ -1,0 +1,29 @@
+$Id: README,v 1.1.1.1 2007/01/23 09:26:00 mike Exp $
+
+Biblio::EndnoteStyle
+====================
+
+This module provides a class that can format references according to
+style templates resembling those used by Endnote.  For details, see
+the POD documentation in lib/Biblio/EndnoteStyle.pm -- for example,
+use:
+	$ perldoc lib/Biblio/EndnoteStyle.pm
+
+INSTALLATION
+
+To install this module type the following:
+
+   perl Makefile.PL
+   make
+   make test
+   make install
+
+COPYRIGHT AND LICENCE
+
+Copyright (C) 2007 by Mike Taylor
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself, either Perl version 5.8.7 or,
+at your option, any later version of Perl 5 you may have available.
+
+

Added: branches/upstream/libbiblio-endnotestyle-perl/current/bin/endnote-format
URL: http://svn.debian.org/wsvn/branches/upstream/libbiblio-endnotestyle-perl/current/bin/endnote-format?rev=19989&op=file
==============================================================================
--- branches/upstream/libbiblio-endnotestyle-perl/current/bin/endnote-format (added)
+++ branches/upstream/libbiblio-endnotestyle-perl/current/bin/endnote-format Fri May 16 08:01:34 2008
@@ -1,0 +1,20 @@
+#! /usr/bin/perl -w
+
+# $Id: endnote-format,v 1.2 2007/02/16 01:16:48 mike Exp $
+
+use strict;
+use warnings;
+use Getopt::Std;
+use Biblio::EndnoteStyle;
+
+my %opts;
+if (!getopts('d', \%opts) || @ARGV < 1 || @ARGV % 2 != 1) {
+    print STDERR "Usage: $0 [options] 'template' key1 val1 [keyN valN] ...
+	-d	Dump compiled recipe to standard error\n";
+    exit 1;
+}
+
+my($template, %data) = @ARGV;
+my $style = new Biblio::EndnoteStyle();
+$style->debug(1) if $opts{d};
+print $style->format($template, \%data);

Propchange: branches/upstream/libbiblio-endnotestyle-perl/current/bin/endnote-format
------------------------------------------------------------------------------
    svn:executable = 

Added: branches/upstream/libbiblio-endnotestyle-perl/current/lib/Biblio/EndnoteStyle.pm
URL: http://svn.debian.org/wsvn/branches/upstream/libbiblio-endnotestyle-perl/current/lib/Biblio/EndnoteStyle.pm?rev=19989&op=file
==============================================================================
--- branches/upstream/libbiblio-endnotestyle-perl/current/lib/Biblio/EndnoteStyle.pm (added)
+++ branches/upstream/libbiblio-endnotestyle-perl/current/lib/Biblio/EndnoteStyle.pm Fri May 16 08:01:34 2008
@@ -1,0 +1,308 @@
+# $Id: EndnoteStyle.pm,v 1.10 2007/10/04 00:07:03 mike Exp $
+
+package Biblio::EndnoteStyle;
+
+use 5.006;
+use strict;
+use warnings;
+
+our $VERSION = 0.05;
+
+=head1 NAME
+
+Biblio::EndnoteStyle - reference formatting using Endnote-like templates
+
+=head1 SYNOPSIS
+
+ use Biblio::EndnoteStyle;
+ $style = new Biblio::EndnoteStyle();
+ ($text, $errmsg) = $style->format($template, \%fields);
+
+=head1 DESCRIPTION
+
+This small module provides a way of formatting bibliographic
+references using style templates similar to those used by the popular
+reference management software Endnote (http://www.endnote.com/).  The
+API is embarrassingly simple: a formatter object is made using the
+class's constructor, the C<new()> method; C<format()> may then be
+repeatedly called on this object, using the same or different
+templates.
+
+(The sole purpose of the object is to cache compiled templates so that
+multiple C<format()> invocations are more efficient than they would
+otherwise be.  Apart from that, the API might just as well have been a
+single function.)
+
+=head1 METHODS
+
+=head2 new()
+
+ $style = new Biblio::EndnoteStyle();
+
+Creates a new formatter object.  Takes no arguments.
+
+=cut
+
+# The object is vacuous except that it knows its class, so that
+# subclasses can be made that override some of the methods.
+#
+sub new {
+    my $class = shift();
+
+    return bless {
+	debug => 0,
+	compiled => {},		# cache of compiled templates
+    }, $class;
+}
+
+
+=head2 debug()
+
+ $olddebug = $style->debug(1);
+
+Turns debugging on or off and returns the old debugging status.  If an
+argument is provided, then debugging is turned either on or off
+according to whether then argument is true or false.  In any case, the
+old value of the debugging status is returned, so that a call with no
+argument is a side-effect-free inquiry.
+
+When debugging is turned on, compiled templates are dumped to standard
+error.  It is not pretty.
+
+=cut
+
+sub debug {
+    my $this = shift();
+    my($val) = @_;
+
+    my $old = $this->{debug};
+    $this->{debug} = $val if defined $val;
+    return $old;
+}
+
+
+=head2 format()
+
+ ($text, $errmsg) = $style->format($template, \%fields);
+
+Formats a reference, consisting of a hash of fields, according to an
+Endnote-like template.  The template is a string essentially the same
+as those used in Endnote, as documented in the Endnote X User Guide at
+http://www.endnote.com/support/helpdocs/EndNoteXWinManual.pdf
+pages 390ff.  In particular, pages 415-210 have details of the recipe
+format.  Because the templates used in this module are plain text, a
+few special characters are used:
+
+=over 4
+
+=item ¬
+
+Link adjacent words.  This is the "non-breaking space"
+described on page 418 of the EndNote X
+
+=item |
+
+Forced Seperation of elements that would otherwise be dependent.
+
+=item ^
+
+Separator for singular/plural aternatives.
+
+=cut `
+
+=item `
+
+Used to prevent literal text from being interpreted as a fieldname.
+
+=back
+
+The hash of fields is passed by reference: keys are fieldnames, and
+the corresponding values are the data.  PLEASE NOTE AN IMPORTANT
+DIFFERENCE.  Keys that do not appear in the hash at all are not
+considered to be fields, so that if they appear in the template, they
+will be interpreted as literal text; keys that appear in the hash but
+whose values are undefined or empty are considered to be fields with
+no value, and will be formatted as empty with dependent text omitted.
+So for example:
+
+ $style->format(";Author: ", { Author => "Taylor" }) eq ":Taylor: "
+ $style->format(";Author: ", { Author => "" }) eq ";"
+ $style->format(";Author: ", { xAuthor => "" }) eq ";Author: "
+
+C<format()> returns two values: the formatted reference and an
+error-message.  The error message is defined if and only if the
+formatted reference is not.
+
+=cut
+
+sub format {
+    my $this = shift();
+    my($text, $data) = @_;
+
+    #use Data::Dumper; print Dumper($data);
+    my $template = $this->{compiled}->{$text};
+    if (!defined $template) {
+	my $errmsg;
+	($template, $errmsg) =
+	    Biblio::EndnoteStyle::Template->new($text, $this->{debug});
+	return (undef, $errmsg) if !defined $template;
+	#print "template '$text'\n", $template->render();
+	$this->{compiled}->{$text} = $template;
+    }
+
+    return $template->format($data);
+}
+
+
+package Biblio::EndnoteStyle::Template;
+
+sub new {
+    my $class = shift();
+    my($text, $debug) = @_;
+
+    my @sequences;
+    while ($text ne "") {
+	if ($text =~ s/^(\s*[^\s|]*\s?)//) {
+	    my $sequence = $1;
+	    my $obj = Biblio::EndnoteStyle::Sequence->new($sequence);
+	    push @sequences, $obj;
+	    $text =~ s/^\|//;
+	} else {
+	    die "unparseable template fragment '$text'";
+	}
+    }
+
+    my $this = bless {
+	text => $text,
+	sequences => \@sequences,
+    }, $class;
+    print STDERR $this->render() if $debug;
+
+    return $this;
+}
+
+sub render {
+    my $this = shift();
+
+    return join("", map { $_->render() . "\n" } @{ $this->{sequences} });
+}
+
+sub format {
+    my $this = shift();
+    my($data) = @_;
+
+    my $result = "";
+    foreach my $sequence (@{ $this->{sequences} }) {
+	my($substr, $errmsg) = $sequence->format($data);
+	return (undef, $errmsg) if !defined $substr;
+	$result .= $substr;
+    }
+
+    return $result;
+}
+
+
+# ----------------------------------------------------------------------------
+
+package Biblio::EndnoteStyle::Sequence;
+
+sub WORD { 290168 }
+sub LITERAL { 120368 }
+sub typename {
+    my($type) = @_;
+    return "WORD" if $type == WORD;
+    return "LITERAL" if $type == LITERAL;
+    return "???";
+}
+
+sub new {
+    my $class = shift();
+    my($text) = @_;
+
+    use Carp;
+    confess("new($class) with text undefined") if !defined $text;
+    my $tail = $text;
+    $tail =~ s/¬/ /g;
+    my @tokens;
+    while ($tail =~ s/(.*?)([``a-z_0-9]+)//i) {
+	my($head, $word) = ($1, $2);
+	push @tokens, [ LITERAL, $head ] if $head ne "";
+	if ($word =~ s/^`(.*)`$/$1/) {
+	    push @tokens, [ LITERAL, $word ];
+	} else {
+	    push @tokens, [ WORD, $word ];
+	}
+    }
+    push @tokens, [ LITERAL, $tail ] if $tail ne "";
+
+    return bless {
+	text => $text,
+	tokens => \@tokens,
+    }, $class;
+}
+
+sub render {
+    my $this = shift();
+
+    return (sprintf("%24s: ", ("'" . $this->{text} . "'")) .
+	    join(", ", map {
+		my($type, $val) = @$_;
+		typename($type) . " '$val'";
+	    } @{ $this->{tokens} }));
+}
+
+sub format {
+    my $this = shift();
+    my($data) = @_;
+
+    my $gotField = 0;
+    my $result = "";
+    foreach my $token (@{ $this->{tokens} }) {
+	my($type, $val) = @$token;
+	if ($type == LITERAL) {
+	    $result .= $val;
+	} elsif ($type != WORD) {
+	    die "unexpected token type '$type'";
+	} else {
+	    my $dval = $data->{$val};
+	    $dval = $data->{lc($val)} if !defined $dval;
+	    $dval = "" if !defined $dval && (exists $data->{$val} ||
+					     exists $data->{lc($val)});
+	    if (!defined $dval) {
+		# The word is not a fieldname at all: treat as a literal
+		#print "!defined \$dval\n";
+		$result .= $val;
+	    } elsif (!$gotField && $dval eq "") {
+		#print "\$dval is empty\n";
+		# Field is empty, so whole dependent sequence is omitted
+		return "";
+	    } else {
+		#print "$dval eq '$dval'\n";
+		$gotField = 1;
+		# Loathesome but useful special case
+		$dval = "http://$dval" if $val eq "URL" && $dval !~ /^[a-z]+:/;
+		$result .= $dval;
+	    }
+	}
+    }
+
+    return $result;
+}
+
+
+=head1 AUTHOR
+
+Mike Taylor, E<lt>mike at miketaylor.org.ukE<gt>
+
+=head1 COPYRIGHT AND LICENCE
+
+Copyright (C) 2007 by Mike Taylor.
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself, either Perl version 5.8.4 or,
+at your option, any later version of Perl 5 you may have available.
+
+=cut
+
+
+1;

Added: branches/upstream/libbiblio-endnotestyle-perl/current/t/Biblio-EndnoteStyle.t
URL: http://svn.debian.org/wsvn/branches/upstream/libbiblio-endnotestyle-perl/current/t/Biblio-EndnoteStyle.t?rev=19989&op=file
==============================================================================
--- branches/upstream/libbiblio-endnotestyle-perl/current/t/Biblio-EndnoteStyle.t (added)
+++ branches/upstream/libbiblio-endnotestyle-perl/current/t/Biblio-EndnoteStyle.t Fri May 16 08:01:34 2008
@@ -1,0 +1,40 @@
+# $Id: Biblio-EndnoteStyle.t,v 1.4 2007/03/14 11:12:49 mike Exp $
+
+use strict;
+use warnings;
+
+use vars qw(@tests);
+
+BEGIN {
+    @tests = (
+	[ ";Author: ", ";Taylor: ", "author provided" ],
+	[ ";`Author`: ", ";Author: ", "author quoted" ],
+	[ ";Title: ", "", "title empty" ],
+	[ ";Title|: ", ": ", "title empty 2" ],
+	[ ";Title|: ", ": ", "title empty 2" ],
+	[ ";Title |: ", ": ", "title empty 3" ],
+	[ ";Title¬|: ", ": ", "absent title with nbsp" ],
+	[ ";Author¬|: ", ";Taylor : ", "present author with nbsp" ],
+	[ ";NoSuchField: ", ";NoSuchField: ", "NoSuchField absent" ],
+    );
+};
+
+use Test::More tests => 2+ at tests;
+
+BEGIN { use_ok('Biblio::EndnoteStyle') };
+
+my $style = new Biblio::EndnoteStyle();
+ok(1, "made style object");
+
+my $data = { Author => "Taylor", Title => "" };
+
+foreach my $test (@tests) {
+    my($template, $result, $description) = @$test;
+    #print("[", $style->format($template, $data), "]\n");
+    my $actual = $style->format($template, $data);
+    if ($actual eq $result) {
+	ok(1, $description);
+    } else {
+	ok(0, qq[$description: expected "$result", got "$actual"]);
+    }
+}




More information about the Pkg-perl-cvs-commits mailing list