Blob Blame History Raw
%%
%% PDF Text Annotations to handle comments/remarks
%%
%% This code has been based on the following sources, where other variants can be
%% found too:
%%
%% * http://www.tug.org/pipermail/pdftex/2002-December/003330.html
%% * http://www.ce.cmu.edu/~kijoo/latex2pdf.pdf
%% * ConTeXt
%%
%% See also the Adobe PDF Reference directly for the syntax of the Annotation object:
%%
%% * http://partners.adobe.com/public/developer/en/pdf/PDFReference16.pdf
%%   (section 8.4 Annotations)
%%
%% Example of use: \comment[width=5cm,symbol=Balloon,title={Note}]{...}
%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{dbk_annot}[2006/11/19 v0.1 PDF Text Annotations]

\@ifundefined{define@key}{\RequirePackage{keyval}}{}%


%% Default text annotation parameter values
\let\defaultPDFlocation\empty%
\let\defaultPDFopen\empty
\let\defaultPDFtitle\empty
\let\defaultPDFheight\baselineskip
\def\defaultPDFwidth{10cm}
\def\defaultPDFdepth{0cm}

\def\commentdefault{%
  \let\PDFsymbol\empty%
  \let\PDFlocation\defaultPDFlocation%
  \let\PDFtitle\defaultPDFtitle%
  \let\PDFopen\defaultPDFopen%
  \let\PDFwidth\defaultPDFwidth%
  \let\PDFheight\defaultPDFheight%
  \let\PDFdepth\defaultPDFdepth%
}

%% Set values from key values
\def\commentsetsymbol#1{%
\expandafter\ifx\csname PDFsymbol#1\endcsname\relax%
  \else\def\PDFsymbol{/Name \csname PDFsymbol#1\endcsname}\fi}

\define@key{comment}{symbol}{\commentsetsymbol{#1}}
\define@key{comment}{width}{\def\PDFwidth{#1}}
\define@key{comment}{height}{\def\PDFheight{#1}}
\define@key{comment}{depth}{\def\PDFdepth{#1}}
\define@key{comment}{title}{\def\PDFtitle{/T (#1)}}
\define@key{comment}{location}{\def\PDFlocation{#1}}
\define@key{comment}{open}[true]{%
\ifthenelse{\equal{#1}{true}}%
  {\def\PDFopen{/Open true}}%
  {\let\PDFopen\empty}%
}

%% Actions to do for default setting
\define@key{defcomment}{width}{\def\defaultPDFwidth{#1}}
\define@key{defcomment}{height}{\def\defaultPDFheight{#1}}
\define@key{defcomment}{depth}{\def\defaultPDFdepth{#1}}
\define@key{defcomment}{title}{\def\defaultPDFtitle{/T (#1)}}
\define@key{defcomment}{location}{\def\defaultPDFlocation{#1}}
\define@key{defcomment}{open}[true]{%
\ifthenelse{\equal{#1}{true}}%
  {\def\defaultPDFopen{/Open true}}%
  {\let\defaultPDFopen\empty}%
}

%% Text annotation symbols
\def\PDFsymbolBalloon   {/Comment}
\def\PDFsymbolHelp      {/Help}
\def\PDFsymbolNew       {/Insert}
\def\PDFsymbolKey       {/Key }
\def\PDFsymbolAddition  {/NewParagraph}
\def\PDFsymbolNote      {/Note}
\def\PDFsymbolParagraph {/Paragraph}

%% Global comment setup
\def\commentsetup#1{\setkeys{defcomment}{#1}}

%% Insert a remark/comment as a text annotation
\def\comment{\@ifnextchar[\docomment{\docomment[]}}

\def\docomment[#1]#2{%
  \begingroup%
  \commentdefault%
  \setkeys{comment}{#1}%
  \ifthenelse{\equal{\PDFlocation}{margin}}%
    {\marginpar{\dodocomment{#2}}}%
    {\dodocomment{#2}}%
  \endgroup%
}

\def\dodocomment#1{%
  \pdfstringdef\@tempa{#1}%
  \pdfannot width \PDFwidth height \PDFheight depth \PDFdepth{%
    /Subtype /Text
    /Contents (\@tempa)
    \PDFtitle
    \PDFopen
    \PDFsymbol
  }%
  \let\@tempa\relax%
}

%% Apply only when using pdflatex
\RequirePackage{ifpdf}
\ifpdf
\else
  \def\docomment[#1]#2{}
\fi