%\iffalse
%<*package>
%% \CharacterTable
%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%%   Digits        \0\1\2\3\4\5\6\7\8\9
%%   Exclamation   \!     Double quote  \"     Hash (number) \#
%%   Dollar        \$     Percent       \%     Ampersand     \&
%%   Acute accent  \'     Left paren    \(     Right paren   \)
%%   Asterisk      \*     Plus          \+     Comma         \,
%%   Minus         \-     Point         \.     Solidus       \/
%%   Colon         \:     Semicolon     \;     Less than     \<
%%   Equals        \=     Greater than  \>     Question mark \?
%%   Commercial at \@     Left bracket  \[     Backslash     \\
%%   Right bracket \]     Circumflex    \^     Underscore    \_
%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%%   Right brace   \}     Tilde         \~}
%</package>
%\fi
% \iffalse
% Doc-Source file to use with LaTeX2e
% Copyright (C) 2005 Nicola Talbot, all rights reserved.
% \fi
% \iffalse
%<*driver>
\documentclass{ltxdoc}

\usepackage[colorlinks,
            bookmarks,
            bookmarksopen,
            pdfauthor={N.L.C. Talbot},
            pdftitle={Documentation for doipubmed.sty},
            pdfkeywords={date,time,LaTeX}]{hyperref}



\begin{document}
\DocInput{doipubmed.dtx}
\end{document}
%</driver>
%\fi
%
%\def\filedate{9 September 2005}
%\def\fileversion{1.0}
%\def\filename{doipubmed.dtx}
%\def\docdate{9 September 2005}
%\title{Documentation for doipubmed.sty}
%\author{Nicola Talbot}
%\date{\docdate}
%\maketitle
% \section{Introduction}
% The commands defined in this package were primarily designed
% for use in bibliographies to make it easier to cite
% documents with digital object identifiers (DOI) or PubMed 
% entries. If the command \verb|\url| has been defined, the
% definition will remain, otherwise the \texttt{url} package
% will be loaded.
%
% Example:
%\begin{verbatim}
%@article{Cawley2002e,
%   author    = "Cawley, Gavin C. and Talbot, Nicola L. C.",
%   title     = "Fast leave-one-out cross-validation of sparse least-squares
%                support vector machines",
%   journal   = "Neural Networks",
%   volume    = 17,
%   number    = 10,
%   pages     = "1467--1475",
%   month     = DEC,
%   year      = 2004,
%   note      = "(\doi{10.1016/j.neunet.2004.07.002},
%                 \pubmed{15541948}). Also available from
%                  \citeurl{http://theoval.cmp.uea.ac.uk/~gcc/publications}"
%}
%\end{verbatim}
%
% \section{doipubmed.sty code}
% Package initialisation and identification
%    \begin{macrocode}
%<*package>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{doipubmed}[2005/09/09 (NLCT)]
%    \end{macrocode}
% If |\url| has not been defined, load the \texttt{url}
% package.
%    \begin{macrocode}
\@ifundefined{url}{\RequirePackage{url}}{}
%    \end{macrocode}
% If |\href| has been defined (e.g.\ if the \texttt{hyperref}
% package has been loaded), then do nothing, otherwise if
% |\htmladdnormallink| has been defined (e.g.\ if the 
% \texttt{html} package has been loaded) then define
% |\href| in terms of |\htmladdnormallink|, otherwise define
% |\href| to simply print the second argument and the first
% is ignored (so there will be no hyperlink).
%    \begin{macrocode}
\@ifundefined{href}{
\@ifundefined{htmladdnormallink}{
\newcommand{\href}[2]{#2}
}{%
\newcommand{\href}[2]{\htmladdnormallink{#2}{#1}}
}
}{}
%    \end{macrocode}
% Define some commands to allow the user to change the format
% of the text provided with the hyperlink. The argument will 
% be the argument as passed to |\doi| or |\pubmed|:
%    \begin{macrocode}
\newcommand{\doitext}[1]{doi: #1}
\newcommand{\pubmedtext}[1]{PubMed: #1}
%    \end{macrocode}
%\DescribeMacro{\doi}Define |\doi|. Syntax:
%|\doi{|\meta{code}|}|. 
% For example, |\doi{10.1109/ICPR.2004.1334245}| 
% will produce \href{http://dx.doi.org/10.1109/ICPR.2004.1334245}{doi: 10.1109/ICPR.2004.1334245}.
%    \begin{macrocode}
\newcommand{\doi}[1]{\href{http://dx.doi.org/#1}{\doitext{#1}}}
%    \end{macrocode}
%\DescribeMacro{\pubmed}Define |\pubmed|. Syntax:
%|\pubmed{|\meta{code}|}|.
%For example, |\pubmed{15541948}| will produce 
% \href{http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=PubMed&list_uids=15541948&dopt=Abstract}{PubMed: 15541948}.
%    \begin{macrocode}
\newcommand{\pubmed}[1]{%
\href{http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=PubMed&list_uids=#1&dopt=Abstract}{%
\pubmedtext{#1}}}
%    \end{macrocode}
%\DescribeMacro{\citeurl}Define |\citeurl| to place address
% between \textless\ and \textgreater.
%    \begin{macrocode}
\newcommand{\citeurl}[1]{\textless\url{#1}\textgreater}
%</package>
%    \end{macrocode}
% \section{doipubmed.perl code}
% This is the code for the \LaTeX2HTML style file. The text
% produced by the |\doi| and |\pubmed| commands don't include
% the code (but this can be changed by redefining |\doitext|
% and |\pubmedtext|)
%    \begin{macrocode}
%<*perl>
#!/usr/bin/perl

# File        : doipub.perl
# Author      : Nicola Talbot
# Date        : 9th September 2005
# Description : LaTeX2HTML style file implementing doipubmed package 

sub do_cmd_doitext{
   local($_) = @_;
   local($doi);

   s/$next_pair_pr_rx/$doi=$2;''/eo;
   join('', "doi", $_);
}

sub do_cmd_pubmedtext{
   local($_) = @_;
   local($pubmed);

   s/$next_pair_pr_rx/$pubmed=$2;''/eo;
   join('', "PubMed", $_);
}

sub do_cmd_doi{
   local($_) = @_;
   local($doi,$doitext,$br_id);

   s/$next_pair_pr_rx/$br_id=$1;$doi=$2;''/eo;

   $doitext = &do_cmd_doitext("$OP$br_id$CP$doi$OP$br_id$CP");

   join('', 
        &make_href("http://dx.doi.org/$doi", $doitext), 
        $_);
}

sub do_cmd_pubmed{
   local($_) = @_;
   local($pubmed,$pubmedtext,$br_id);

   s/$next_pair_pr_rx/$br_id=$1;$pubmed=$2;''/eo;

   $pubmedtext = &do_cmd_pubmedtext("$OP$br_id$CP$pubmed$OP$br_id$CP");

   join('', 
        &make_href("http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=PubMed&list_uids=$pubmed&dopt=Abstract", 
                   $pubmedtext), 
        $_);
}

sub do_cmd_citeurl{
   local($_) = @_;
   local($url);

   s/$next_pair_pr_rx/$url=$2;''/eo;

   join('', '&lt;',
        &make_href($url, $url), '&gt;',
        $_);
}

1;
%</perl>
%    \end{macrocode}
