%\iffalse
% doipubmed.dtx generated using makedtx version 0.94b (c) Nicola Talbot
% Command line args:
%   -macrocode "doipubmed.perl"
%   -setambles "doipubmed.perl=>\nopreamble\nopostamble"
%   -comment "doipubmed.perl"
%   -src "doipubmed.sty=>doipubmed.sty"
%   -src "doipubmed.perl=>doipubmed.perl"
%   -doc "manual.tex"
%   -author "Nicola Talbot"
%   -dir "source"
%   doipubmed
% Created on 2007/8/20 16:15
%\fi
%\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) 2007 Nicola Talbot, all rights reserved.
% \fi
% \iffalse
%<*driver>
\documentclass{ltxdoc}

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


\renewcommand{\usage}[1]{\textit{\hyperpage{#1}}}
\renewcommand{\main}[1]{\hyperpage{#1}}
\newcommand{\see}[2]{\emph{see} #1}
\makeatletter
\RecordChanges
\PageIndex
\definecolor{defbackground}{rgb}{1,1,0.75}
\newsavebox\defsbox
\newlength\defwidth

\newenvironment{definition}{%
\setlength{\fboxsep}{4pt}\setlength{\fboxrule}{1.25pt}%
\begin{lrbox}{\defsbox}%
\setlength\defwidth\linewidth
\addtolength\defwidth{-2\fboxrule}%
\addtolength\defwidth{-2\fboxsep}%
\begin{minipage}{\defwidth}\flushleft
}{%
\end{minipage}
\end{lrbox}%
\vskip10pt
\noindent
\fcolorbox{black}{defbackground}{\usebox\defsbox}%
\vskip10pt
}
\newcommand*{\sty}[1]{\textsf{#1}}


\CheckSum{148}

\begin{document}
\DocInput{doipubmed.dtx}
\end{document}
%</driver>
%\fi
%
%\title{Documentation for doipubmed.sty}
%\author{Nicola L. C. Talbot\\[10pt]
%School of Computing Sciences\\
%University of East Anglia\\
%Norwich. Norfolk\\
%NR4 7TJ. United Kingdom\\
%\url{http://theoval.cmp.uea.ac.uk/~nlct/}}
%\date{20th August 2007}
%\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 \cs{url} has been defined, the
% definition will remain, otherwise the \texttt{url} package
% will be loaded.
%
%\DescribeMacro{\doi}
%\begin{definition}
%\cs{doi}\marg{ref number}
%\end{definition}
%This displays doi: \meta{ref number} with a hyperlink to the
%corresponding web entry. For example:
%\begin{verbatim}
%\doi{10.1016/j.neunet.2004.07.002}
%\end{verbatim}
%produces:
%\doi{10.1016/j.neunet.2004.07.002}.
%
%As from version 1.01, this
%command also works with awkward characters, for example:
%\begin{verbatim}
%\doi{10.1002/1521-3951(200103)224:1<271::AID-PSSB271>3.0.CO;2-\#}
%\end{verbatim}
%produces:
%\doi{10.1002/1521-3951(200103)224:1<271::AID-PSSB271>3.0.CO;2-\#}.
%
%Alternatively, you can do:
%\begin{verbatim}
%\doi{10.1002/1521-3951(200103)224:1<271::AID-PSSB271>3.0.CO;2-\%23}
%\end{verbatim}
%which produces:
%\doi{10.1002/1521-3951(200103)224:1<271::AID-PSSB271>3.0.CO;2-\%23}.
%
%\DescribeMacro{\pubmed}
%\begin{definition}
%\cs{pubmed}\marg{ref number}
%\end{definition}
%This displays PubMed: \meta{ref number} with a hyperlink to the
%corresponding PubMed entry. For example:
%\begin{verbatim}
%\pubmed{15541948}
%\end{verbatim}
%produces:
%\pubmed{15541948}.
%
%\DescribeMacro{\citeurl}
%\begin{definition}
%\cs{citeurl}\marg{url}
%\end{definition}
%Displays the URL inside angle brackets. For example:
%\begin{verbatim}
%\citeurl{http://theoval.cmp.uea.ac.uk/~gcc/publications/}
%\end{verbatim}
%produces:
%\citeurl{http://theoval.cmp.uea.ac.uk/~gcc/publications/}.
%
%
%
%\StopEventually{}
%\section{The Code}
%\iffalse
%    \begin{macrocode}
%<*doipubmed.sty>
%    \end{macrocode}
%\fi
% Package initialisation and identification
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{doipubmed}[2007/08/20 1.01 (NLCT)]
%    \end{macrocode}
% If \cs{url} has not been defined, load the \sty{url}
% package.
%    \begin{macrocode}
\@ifundefined{url}{\RequirePackage{url}}{}
%    \end{macrocode}
% If \cs{href} has been defined (e.g.\ if the \sty{hyperref}
% package has been loaded), then do nothing, otherwise if
% \cs{htmladdnormallink} has been defined (e.g.\ if the 
% \sty{html} package has been loaded) then define
% \cs{href} in terms of \cs{htmladdnormallink}, otherwise define
% \cs{href} to simply print the second argument and the first
% is ignored (so there will be no hyperlink).
%\changes{1.01}{2007/8/19}{put \cs{href} check in \cs{AtBeginDocument}}
%    \begin{macrocode}
\AtBeginDocument{%
\@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.
%\begin{macro}{\doitext}
%\begin{definition}
%\cs{doitext}\marg{doi ref}
%\end{definition}
%This controls how to format the doi link text.
%    \begin{macrocode}
\newcommand*{\doitext}[1]{doi: #1}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\pubmedtext}
%\begin{definition}
%\cs{pubmedtext}\marg{pub med code}
%\end{definition}
% This controls how to format the PubMed link text.
%    \begin{macrocode}
\newcommand*{\pubmedtext}[1]{PubMed: #1}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\doi}
%\changes{1.01}{2007/8/19}{no works with awkward characters}
%    \begin{macrocode}
\providecommand*{\doi}[1]{%
\def\@doi@code{}%
\@doi@linksubs#1\#\@@\@doi@code
\@onelevel@sanitize{\@doi@code}%
\def\@doi@text{}%
\@doi@textsubs#1\@nil\@@\@doi@text
\href{http://dx.doi.org/\@doi@code}{\doitext{\@doi@text}}}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@doi@linksubs}
%    \begin{macrocode}
\newtoks\@doi@toks
\def\@doi@linksubs#1\##2\@@#3{%
\def\@doi@tmp{#2}%
\expandafter\@doi@toks\expandafter{#3}%
\toks@{#1}%
\edef#3{\the\@doi@toks\the\toks@}%
\ifx\@doi@tmp\@empty
  \let\@doi@next=\@doi@noop
\else
  \expandafter\@doi@toks\expandafter{#3}%
  \edef#3{\the\@doi@toks\%23}%
  \let\@doi@next=\@doi@linksubs
\fi
\@doi@next#2\@@#3\relax
}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@doi@noop}
%    \begin{macrocode}
\def\@doi@noop#1\@@#2{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\@doi@textsubs}
%    \begin{macrocode}
\def\@doi@textsubs#1#2\@@#3{%
\def\@doi@argi{#1}%
\def\@doi@argii{#2}%
\ifx\@doi@argi\@nnil
 \let\@doi@next=\@doi@noop
\else
 \ifx#1<\relax
   \expandafter\@doi@toks\expandafter{#3}%
   \edef#3{\the\@doi@toks\noexpand\textless}%
 \else
   \ifx#1>\relax
     \expandafter\@doi@toks\expandafter{#3}%
     \edef#3{\the\@doi@toks\noexpand\textgreater}%
   \else
     \expandafter\@doi@toks\expandafter{#3}%
     \toks@{#1}%
     \edef#3{\the\@doi@toks\the\toks@}%
   \fi
 \fi
 \ifx\@doi@argii\@nnil
   \let\@doi@next=\@doi@noop
 \else
   \let\@doi@next=\@doi@textsubs
 \fi
\fi
\@doi@next#2\@@#3\relax
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\pubmed}
%    \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}
%\end{macro}
%
%\begin{macro}{\citeurl}
%    \begin{macrocode}
\newcommand*{\citeurl}[1]{\textless\url{#1}\textgreater}
%    \end{macrocode}
%\end{macro}
%\iffalse
%    \begin{macrocode}
%</doipubmed.sty>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%<*doipubmed.perl>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
#!/usr/bin/perl

# File          : doipub.perl
# Author        : Nicola Talbot
# Date          : 9th September 2005
# Last Modified : 20 Aug 2007
# Version       : 1.01
#
# This is a LaTeX2HTML style implementing the doipubmed package, and
# is distributed as part of that package.
# Copyright 2007 Nicola L.C. Talbot
# This work may be distributed and/or modified under the
# conditions of the LaTeX Project Public License, either version 1.3
# of this license of (at your option) any later version.
# The latest version of this license is in
#   http://www.latex-project.org/lppl.txt
# and version 1.3 or later is part of all distributions of LaTeX
# version 2005/12/01 or later.
#
# This work has the LPPL maintenance status `maintained'.
#
# The Current Maintainer of this work is Nicola Talbot.

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 = &translate_commands("\\doitext$OP$br_id$CP$doi$OP$br_id$CP");

   $doi=~s/#/${percent_mark}23/g;
   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 = &translate_commands("\\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;
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%</doipubmed.perl>
%    \end{macrocode}
%\fi
%\Finale
\endinput
