From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Mon, 2 Sep 2019 13:46:59 +0900
Subject: Initial commit

---
 macros/latex/contrib/issuulinks/issuulinks.dtx | 297 +++++++++++++++++++++++++
 1 file changed, 297 insertions(+)
 create mode 100644 macros/latex/contrib/issuulinks/issuulinks.dtx

(limited to 'macros/latex/contrib/issuulinks/issuulinks.dtx')

diff --git a/macros/latex/contrib/issuulinks/issuulinks.dtx b/macros/latex/contrib/issuulinks/issuulinks.dtx
new file mode 100644
index 0000000000..5204aba772
--- /dev/null
+++ b/macros/latex/contrib/issuulinks/issuulinks.dtx
@@ -0,0 +1,297 @@
+% \iffalse
+% $Id: issuulinks.dtx,v 1.6 2012-03-22 22:54:19 boris Exp $
+%
+% Copyright 2012, Boris Veytsman <borisv@lk.net>
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either
+% version 1.3 of this license or (at your option) any 
+% later version.
+% The latest version of the license is in
+%    http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of
+% LaTeX version 2003/06/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Boris Veytsman
+%
+% This work consists of the file issuulinks.dtx and the
+% derived files issuulinks.sty, issuulinks.dtx. 
+%
+% \fi 
+% \CheckSum{106}
+%
+%
+%% \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         \~} 
+%
+% \MakeShortVerb{|}
+%
+%\GetFileInfo{issuulinks.dtx}
+% \title{Produce External Links Instead of Internal
+% Ones\thanks{\copyright Boris Veytsman, 2012}}  
+% \author{Boris Veytsman\thanks{This work was partially supported by
+% The Food and Agriculture Organization of the United Nations}}
+% \date{\filedate, \fileversion}
+% \maketitle
+%
+% \begin{abstract}
+%   A package to change automatic internal links in a document into
+%   external ones in the form
+%   \path{http://issue.com/action/page=PAGENUMBER} as required by
+%   \url{http://issuu.com}.
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \clearpage
+%
+%\section{Introduction}
+%\label{sec:intro}
+%
+% PDF visualizer ISSUU (\url{http://issuu.com}) is a popular service
+% allowing to show PDF documents ``one page a time''.  Due to the way
+% it is implemented, internal links in these documents are not
+% allowed.  Instead, they must be converted to external ones in the
+% form \path{http://issuu.com/action/page?page=PAGENUMBER}.  
+%
+% This package patches \textsf{hyperref} to produce external links in
+% the required form instead of internal links created by |\ref|,
+% |\cite| and other commands.
+%
+% Since the package redefines the internals of \textsf{hyperref}, you
+% need to call it \emph{after} \textsf{hyperref}.
+% 
+% The author is grateful to FAO UN which partially funded this work
+% and to Matthieu Stigler, Adam Prakash \& Filippo Gheri for
+% suggesting and testing this package.
+% 
+%\section{Usage}
+%\label{sec:usage}
+%
+%  To use this package just add |\usepackage{issuulinks}| \emph{after}
+%  calling \textsf{hyperref}.  By default all links will be converted
+%  into the form required by ISSUU.
+%
+% \DescribeMacro{\issuusetup}
+% The command |\issuusetup|\marg{setup commands} might be used to
+% customize the behavior of the package.  At present the only
+% customizable command is |prefix|, that sets the part of the link
+% before |PAGENUMBER|by default 
+% |http://issuu.com/action/page?page=|.  You can change it, for example,
+% \begin{verbatim}
+% \issuusetup{prefix={http://www.issuu.com/action/page?page=}}
+% \end{verbatim}
+%
+% Otherwise the work of the package should be transparent for the
+% user.   
+%
+%\StopEventually{}
+%
+% \clearpage
+% 
+% \section{Implementation}
+% \label{sec:implementation}
+% 
+%
+%\subsection{Algorithm}
+%\label{sec:alg}
+%
+% The idea is following.  Whenever \textsf{hyperref} creates an
+% internal anchor \marg{name}, we write to the aux file the command
+% \cmd{\newISSUUlink}\marg{name}\marg{abspage}, where \marg{abspage}
+% is the absolute page number (as different from the displayed page
+% number).  Then when \textsf{hyperref} creates an internal link to
+% \marg{name}, we substitute this to a call to \url{http://issuu.com}
+% with the corresponding page number. 
+%
+%\subsection{Declarations}
+%\label{sec:decl}
+% 
+%  We start with declaration, who we are:
+%
+% \changes{v1.0}{2012/02/27}{First released version}
+%    \begin{macrocode}
+%<style>\NeedsTeXFormat{LaTeX2e}
+%<*gobble>
+\ProvidesFile{issuulinks.dtx}
+%</gobble>
+%<style>\ProvidesPackage{issuulinks}
+[2012/03/22 v1.1 Links in ISSUU style]
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%<*gobble>
+\documentclass{ltxdoc}
+\usepackage{hypdoc}
+\usepackage{url}
+\CodelineIndex
+\RecordChanges
+\EnableCrossrefs
+\begin{document}
+  \DocInput{issuulinks.dtx}
+\end{document}
+%</gobble> 
+%<*style>
+%    \end{macrocode}
+%
+%
+%\subsection{Parameters}
+%\label{sec:params}
+%
+% We use \textsf{keyval} to process options:
+%    \begin{macrocode}
+\RequirePackage{xkeyval}
+%    \end{macrocode}
+% 
+% \begin{macro}{\issuusetup}
+%   The shorthand for setting options:
+%    \begin{macrocode}
+\def\issuusetup#1{\setkeys{ISL}{#1}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ISL@prefix}
+%   The |prefix| macro:
+%    \begin{macrocode}
+\define@key{ISL}{prefix}{\def\ISL@prefix{#1}}
+\issuusetup{prefix={http://issuu.com/action/page?page=}}
+%    \end{macrocode}
+%   
+% \end{macro}
+%
+%
+%\subsection{Working with Aux File}
+%\label{sec:file}
+%
+%
+% \begin{macro}{\newISSUUlink}
+% \changes{v1.1}{2012/03/22}{Added check for undefined/changed references} 
+% The page numbers in |\Hy@abspage| start from zero, so we need to
+% increment them:
+%    \begin{macrocode}
+\def\newISSUUlink#1#2{\@tempcnta=#2\relax\advance\@tempcnta by1\relax
+  \expandafter\xdef\csname ISL@link#1\endcsname{\the\@tempcnta}}
+%    \end{macrocode}
+% Someone can use an aux file from the previous run, so we provide a
+% safety valve:
+%    \begin{macrocode}
+\AtBeginDocument{%
+  \if@filesw
+  \immediate\write\@mainaux{\string\providecommand\string\newISSUUlink[2]{}}%
+  \fi}
+%    \end{macrocode}   
+% At the end of document \LaTeX{} checks whether references might
+% been changed or undefined.  Here we plug in into this mechanism:
+%    \begin{macrocode}
+\AtEndDocument{\let\newISSUUlink\@testISSUUlink}
+%    \end{macrocode}
+% \end{macro}
+% 
+% \begin{macro}{\@testISSUUlink}
+% \changes{v1.1}{2012/03/22}{Added macro} 
+%   Test whether this link is defined.  If not, set |\@tempswa| to
+%   true---this will cause \LaTeX{} to issue a warning:
+%    \begin{macrocode}
+\def\@testISSUUlink#1#2{\@tempcnta=#2\relax\advance\@tempcnta by1\relax
+  \edef\reserved@a{\the\@tempcnta}%
+  \expandafter\ifx\csname ISL@link#1\endcsname\reserved@a\else
+     \@tempswatrue
+  \fi}
+%    \end{macrocode}
+%   
+% \end{macro}
+%
+% 
+%
+%\subsection{Writing the Internal Link Information}
+%\label{sec:writing}
+%
+% \begin{macro}{\new@pdflink}
+%   We patch |\new@pdflink| to write its argument into the aux file.
+%   Note that the counter |\Hy@abspage| stores the absolute page
+%   position in \textsl{hyperref}.  We do not prevent writing the
+%   internal anchor in the catalog---probably a waste of time and
+%   bits, but somebody might rely on this for some other
+%   purpose\footnote{Actually I am too lazy to do otherwise\dots}.
+%    \begin{macrocode}
+\let\new@pdflink@ISLorig=\new@pdflink
+\def\new@pdflink#1{%
+  \@bsphack
+  \protected@write\@mainaux{}%
+         {\string\newISSUUlink{#1}{\the\Hy@abspage}}%
+  \@esphack
+  \new@pdflink@ISLorig{#1}}
+%    \end{macrocode}   
+% \end{macro}
+%
+%
+%\subsection{Patching Internal Links}
+%\label{sec:patching}
+% 
+%
+% \begin{macro}{\Hy@StartlinkName}
+%   The standard |\Hy@StartlinkName| is defined like this:
+% \begin{verbatim}
+% \def\Hy@StartlinkName#1#2{%
+%   \pdfstartlink attr{#1}goto name{#2}\relax
+% }
+% \end{verbatim}
+% Here we are patching it.  Note that we can have bad links if we use
+% `old' aux file
+%    \begin{macrocode}
+\def\Hy@StartlinkName#1#2{%
+  \expandafter\ifx\csname ISL@link#2\endcsname\relax
+    \PackageWarning{issuulinks}{The page number for an external link
+      is not defined.  Setting it to 1.  You need to rerun LaTeX to
+      get the page numbers right.}%
+    \expandafter\def\csname ISL@link#2\endcsname{1}\fi
+  \edef\Hy@pstringURI{\ISL@prefix\csname ISL@link#2\endcsname}%
+  \pdfstartlink attr{#1}%
+  user{%
+       /Subtype/Link%
+       \ifHy@pdfa /F 4\fi
+       /A<<%
+         /Type/Action%
+         /S/URI%
+         /URI(\Hy@pstringURI)%
+         \ifHy@href@ismap
+           /IsMap true%
+         \fi
+         \Hy@href@nextactionraw
+       >>%
+      }%
+      \relax
+}
+%    \end{macrocode}
+% 
+%
+%  
+% \end{macro}
+%
+%
+%
+%    \begin{macrocode}
+%</style>
+%    \end{macrocode}
+%\Finale
+%\clearpage
+%
+%\PrintChanges
+%\clearpage
+%\PrintIndex
+%
+\endinput
-- 
cgit v1.2.3

