summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/acrotex-js
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2021-06-19 03:01:48 +0000
committerNorbert Preining <norbert@preining.info>2021-06-19 03:01:48 +0000
commitdaa6873fe1d06863ffc2980970295b39071f02ba (patch)
tree436daaf0d6464d12d7ad7af294e5aeed5851f8fb /macros/latex/contrib/acrotex-js
parent3ecc00c27119bc47ba26b518b7d26c00b69599df (diff)
CTAN sync 202106190301
Diffstat (limited to 'macros/latex/contrib/acrotex-js')
-rw-r--r--macros/latex/contrib/acrotex-js/README.md13
-rw-r--r--macros/latex/contrib/acrotex-js/acrotex-js.dtx83
-rw-r--r--macros/latex/contrib/acrotex-js/acrotex-js.ins60
-rw-r--r--macros/latex/contrib/acrotex-js/docs/acrotex-js.pdfbin0 -> 203759 bytes
-rw-r--r--macros/latex/contrib/acrotex-js/docs/install_jsfiles.pdfbin0 -> 188602 bytes
-rw-r--r--macros/latex/contrib/acrotex-js/docs/install_jsfiles.tex333
-rw-r--r--macros/latex/contrib/acrotex-js/js-files/aeb.js24
-rw-r--r--macros/latex/contrib/acrotex-js/js-files/aeb_pro.js177
8 files changed, 690 insertions, 0 deletions
diff --git a/macros/latex/contrib/acrotex-js/README.md b/macros/latex/contrib/acrotex-js/README.md
new file mode 100644
index 0000000000..2a2bb095aa
--- /dev/null
+++ b/macros/latex/contrib/acrotex-js/README.md
@@ -0,0 +1,13 @@
+The acrotex-js Package
+Author: D. P. Story
+Dated: 2021-06-18
+
+In the distribution of this package are two critical JavaScript files (aeb.js
+and aeb_pro.js) used by the packages insdljs, aeb_pro, thorshammer, and
+docassembly. Previously these JS files where distributed with the individual
+packages, now they are distributed by this package and must be installed according
+to the instructions in the docs folder.
+
+
+dps
+
diff --git a/macros/latex/contrib/acrotex-js/acrotex-js.dtx b/macros/latex/contrib/acrotex-js/acrotex-js.dtx
new file mode 100644
index 0000000000..950d7cb6a5
--- /dev/null
+++ b/macros/latex/contrib/acrotex-js/acrotex-js.dtx
@@ -0,0 +1,83 @@
+%\iffalse
+%<*copyright>
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% acrotex-js.sty package %%
+%% Copyright (C) 2021 %%
+%% dpstory@acrotex.net %%
+%% %%
+%% This program can redistributed and/or modified under %%
+%% the terms of the LaTeX Project Public License %%
+%% Distributed from CTAN archives in directory %%
+%% macros/latex/base/lppl.txt; either version 1 of the %%
+%% License, or (at your option) any later version. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%</copyright>
+%<package>\NeedsTeXFormat{LaTeX2e}[1997/12/01]
+%<package>\ProvidesPackage{acrotex-js}
+%<package> [2021/06/18 v1.0 acrotex-js: A library of JavaScript files (dps)]
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[colorlinks,hyperindex=false]{hyperref}
+\hypersetup{pdfpagemode=UseNone}
+%\pdfstringdefDisableCommands{\let\\\textbackslash}
+%\EnableCrossrefs \CodelineIndex
+\OnlyDescription % comment out for implementation details
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\InputIfFileExists{aebdocfmt.def}{\PackageInfo{web}{Inputting aebdocfmt.def}}
+ {\def\IndexOpt{\DescribeMacro}\def\IndexKey{\DescribeMacro}\let\setupFullwidth\relax
+ \PackageInfo{web}{aebdocfmt.def cannot be found}}
+\begin{document}
+\def\CMD#1{\textbackslash#1}
+\let\pkg\textsf
+\let\opt\texttt
+\let\app\textsf
+\addtolength{\marginparwidth}{3pt}
+ \GetFileInfo{acrotex-js.sty}
+ \title{\texorpdfstring{\protect\pkg{acrotex-js}}{acrotex-js}: Formatting for mobile devices}
+ \author{D. P. Story\\
+ Email: \texttt{dpstory@acrotex.net}}
+ \date{processed \today}
+ \maketitle
+ \tableofcontents
+ \DocInput{acrotex-js.dtx}
+\IfFileExists{\jobname.ind}{\newpage\setupFullwidth\par\PrintIndex}{\paragraph*{Index} The index goes here.\\Execute
+ \texttt{makeindex -s gind.ist -o acrotex-js.ind acrotex-js.idx} on the command line and recompile
+ \texttt{acrotex-js.dtx}.}
+\IfFileExists{\jobname.gls}{\PrintChanges}{\paragraph*{Change History} The list of changes goes here.\\Execute
+ \texttt{makeindex -s gglo.ist -o acrotex-js.gls acrotex-js.glo} on the command line and recompile
+ \texttt{acrotex-js.dtx}.}
+\end{document}
+%</driver>
+% \fi
+% \MakeShortVerb{|}
+% \InputIfFileExists{aebdonotindex.def}{\PackageInfo{web}{Inputting aebdonotindex.def}}
+% {\PackageInfo{web}{cannot find aebdonotindex.def}}
+% \section*{Commentary}
+% This file is a dummy {\LaTeX} package. The output of \pkg{acrotex-js} produces no document
+% that is consumed by any {\LaTeX} engine. At the time of first publication of this ``package''
+% distributes the JavaScript files \texttt{aeb.js} and \texttt{aeb\_pro.js} (found in the
+% \texttt{js-files} folder of this distribution) and provides documentation of how to
+% install it, refer to \texttt{docs/install\_jsfiles.pdf}.
+%
+% \paragraph*{Packages that require this JS files.} The following is a list of packages
+% that require the proper installation of the JS files provided by this package.
+% \begin{itemize}
+% \item \texttt{aeb.js}: Required by the \pkg{insdljs} package,\footnote{Or, any package that uses \pkg{insdljs}.}
+% but for only for owners of the \app{Acrobat} application \emph{and} who use the
+% \textsf{dvips \texttt{->} Adobe Distiller}
+% or \textsf{dvips \texttt{->} ps2pdf} workflow.\footnote{There is no harm in the routine installation of this
+% file even if you don't use \app{Distiller} or \app{ps2pdf}.}
+% \item \texttt{aeb\_pro.js}: Required by the \pkg{aeb\_pro}, \pkg{thorshammer}, and \pkg{docassembly} packages.
+% \end{itemize}
+% In all cases, the JS files must be correctly installed for the above packages for them to perform as designed.
+% Refer to \texttt{docs/install\_jsfiles.pdf} for installation instructions.
+%
+% \changes{v1.0}{2021/06/18}{First publication version}
+% \begin{macrocode}
+%<*package>
+% noop
+%</package>
+% \end{macrocode}
+\endinput
diff --git a/macros/latex/contrib/acrotex-js/acrotex-js.ins b/macros/latex/contrib/acrotex-js/acrotex-js.ins
new file mode 100644
index 0000000000..2f358ca317
--- /dev/null
+++ b/macros/latex/contrib/acrotex-js/acrotex-js.ins
@@ -0,0 +1,60 @@
+%%
+%% This file will generate fast loadable files and documentation
+%% driver files from the doc files in this package when run through
+%% LaTeX or TeX.
+%%
+%% Copyright 1999-2012 D. P. Story
+%%
+%% This file is part of the `AcroTeX eDucation Bundle'.
+%% -------------------------------------------
+%%
+%% It may be distributed under the conditions of the LaTeX Project Public
+%% License, either version 1.2 of this license or (at your option) any
+%% later version. The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.2 or later is part of all distributions of LaTeX
+%% version 1999/12/01 or later.
+%%
+%% --------------- start of docstrip commands ------------------
+%%
+\def\filedate{2018/04/26}
+\def\batchfile{acrotex-js.ins}
+
+\input docstrip
+\ifx\generate\undefined
+ \Msg{**********************************************}
+ \Msg{*}
+ \Msg{* This installation requires docstrip}
+ \Msg{* version 2.4 or later.}
+ \Msg{*}
+ \Msg{* An older version of docstrip has been input}
+ \Msg{*}
+ \Msg{**********************************************}
+ \errhelp{Move or rename old docstrip.tex and get a newer one.}
+ \errmessage{Old docstrip in input path}
+ \batchmode
+ \csname @@end\endcsname\end
+\fi
+
+\keepsilent
+\askforoverwritefalse
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\preamble
+\endpreamble
+
+\generate
+{%
+ \file{acrotex-js.sty}{\from{acrotex-js.dtx}{copyright,package}}
+}
+
+\Msg{***************************************************************}
+\Msg{*}
+\Msg{* \space To finish the installation you have to copy the files }
+\Msg{*}
+\Msg{* \space *.sty, *.cfg and *.def into a directory searched by TeX}
+\Msg{*}
+\Msg{***************************************************************}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\endinput
diff --git a/macros/latex/contrib/acrotex-js/docs/acrotex-js.pdf b/macros/latex/contrib/acrotex-js/docs/acrotex-js.pdf
new file mode 100644
index 0000000000..fd3da4b47d
--- /dev/null
+++ b/macros/latex/contrib/acrotex-js/docs/acrotex-js.pdf
Binary files differ
diff --git a/macros/latex/contrib/acrotex-js/docs/install_jsfiles.pdf b/macros/latex/contrib/acrotex-js/docs/install_jsfiles.pdf
new file mode 100644
index 0000000000..f4f1b89a47
--- /dev/null
+++ b/macros/latex/contrib/acrotex-js/docs/install_jsfiles.pdf
Binary files differ
diff --git a/macros/latex/contrib/acrotex-js/docs/install_jsfiles.tex b/macros/latex/contrib/acrotex-js/docs/install_jsfiles.tex
new file mode 100644
index 0000000000..bae522243b
--- /dev/null
+++ b/macros/latex/contrib/acrotex-js/docs/install_jsfiles.tex
@@ -0,0 +1,333 @@
+\documentclass{article}
+\usepackage[fleqn]{amsmath}
+%
+% the driver line is not necessary if you
+% have aebpro.cfg configured to your driver.
+%
+\usepackage[web]{aeb_pro}
+\usepackage{eforms}
+\usepackage[altbullet]{lucidbry}
+\usepackage{pifont}
+\usepackage{fancyvrb}
+
+\ifpdf\def\x{%
+ \usepackage[T1]{fontenc}
+ \usepackage[altbullet]{lucidabr}}
+ \let\copyright\textcopyright
+\else\def\x{%
+ \usepackage[altbullet]{lucidbry}}
+ \usepackage[active]{srcltx}
+\fi\x
+
+
+
+\makeatletter
+\renewcommand{\paragraph}
+ {\@startsection{paragraph}{4}{0pt}{6pt}{-3pt}
+ {\normalfont\normalsize\bfseries}}
+\renewcommand{\subparagraph}
+ {\@startsection{subparagraph}{5}{\parindent}{6pt}{-3pt}%
+ {\normalfont\normalsize\bfseries}}
+\makeatother
+
+\mathindent\parindent
+
+\def\AEBP{\app{AeB Pro}}
+\def\AEB{\app{AeB}}
+\def\app#1{\textsf{#1}}
+\def\amtIndent{\parindent}
+\def\meta#1{$\langle\textit{\texttt{#1}}\rangle$}
+\def\SC#1{{\small#1}}
+\def\PDF{\SC{PDF}}
+\let\opt\texttt
+\let\pkg\textsf
+
+\def\copyGetPath{\qquad\pushButton[\TU{Copy app.getPath to console}
+\CA{getPath}\A{\JS{console.show();\r
+console.println('\\napp.getPath("user");');
+}}]{cpyGtPth}{}{11bp}}
+
+\def\copyGetPathJS{\qquad\pushButton[\TU{Copy app.getPath to console}
+\CA{getPath}\A{\JS{console.show();\r
+console.println('\\napp.getPath("user", "javascript");');
+}}]{cpyGtPthJS}{}{11bp}}
+
+%\reversemarginpar
+\def\jsSupInstr{How to install JavaScript support files}
+\title{\jsSupInstr}
+\author{D. P. Story}
+\version{1.0}
+
+\chngDocObjectTo{\newDO}{doc}
+\begin{docassembly}
+var titleOfManual="How to install JavaScript files";
+var manualfilename="Manual_BG_Print_jsfiles.pdf";
+var manualtemplate="Manual_BG_Brown.pdf"; // Blue, Green, Brown
+var _pathToBlank="C:/Users/Public/Documents/ManualBGs/"+manualtemplate;
+var doc;
+var buildIt=false;
+if ( buildIt ) {
+ console.println("Creating new " + manualfilename + " file.");
+ doc = \appopenDoc({cPath: _pathToBlank, bHidden: true});
+ var _path=this.path;
+ var pos=_path.lastIndexOf("/");
+ _path=_path.substring(0,pos)+"/"+manualfilename;
+ \docSaveAs\newDO ({ cPath: _path });
+ doc.closeDoc();
+ doc = \appopenDoc({cPath: manualfilename, oDoc:this, bHidden: true});
+ f=doc.getField("ManualTitle");
+ f.value=titleOfManual;
+ doc.flattenPages();
+ \docSaveAs\newDO({ cPath: manualfilename });
+ doc.closeDoc();
+} else {
+ console.println("Using the current "+manualfilename+" file.");
+}
+\retnAbsPathAs(_path);
+_path += "/"+manualfilename;
+var _path=this.path;
+var pos=_path.lastIndexOf("/");
+_path=_path.substring(0,pos)+"/"+manualfilename;
+\addWatermarkFromFile({
+ bOnTop:false,
+ bOnPrint:false,
+ cDIPath:_path
+});
+\executeSave();
+\end{docassembly}
+
+\begin{document}
+
+\maketitle
+
+\section{Introduction}
+
+Because some of the \app{Acrobat} JavaScript methods have security
+restrictions, they can be only executed in the console window, or as part
+of a batch sequence, or from the JavaScript folder reserved by
+\app{Acrobat} for that use. The developer (of {\LaTeX} packages or {\PDF}
+form documents) may want to use these restricted JavaScript methods as
+part of document assembly. To use the restricted methods, they must be
+called from the \emph{user JavaScript folder}. The scripts are contained in a
+\SC{JS} file that \app{Acrobat} reads when it first starts up.
+
+In this article, we provide detailed steps for locating the user JavaScript
+folder of \app{Acrobat} and for installing JavaScript files in that folder.
+Various packages distributed by package author D. P. Story (notably
+\pkg{acrotex}, \pkg{aeb\_pro}, \pkg{thorshammer}, and \pkg{docassembly}), use
+the JavaScript files \texttt{aeb.js} and \texttt{aeb\_pro.js}, which are
+placed in the user JavaScript folder. It is important to correctly install
+these files for the packages listed above to function as expected.
+
+Other JavaScript files may be placed in the folder as well, for example, the
+\texttt{config.js} file is one that is commonly used for general purposes.
+
+Before we get started, if you are using a version of \app{Acrobat} prior
+to version~8.1, you need not read any further. The security restrictions
+described below were not in effect for those versions.
+
+\section{Installing the JavaScript support files}
+
+The functionality of {\AEB} (\pkg{acrotex}) and {\AEBP} (\pkg{aeb\_pro}, as
+well as other packages, depends, to some extent, on the proper installation
+of their JavaScript support files.
+\begin{itemize}
+ \item \AEB: For authors using the $\app{dvips}+\app{Acrobat Distiller}$
+ workflow, \texttt{aeb.js} is required; this file is not used by
+ \app{pdflatex} or \app{xelatex} users.
+
+ \item \AEBP: For authors using the $\app{dvips}+\app{Acrobat
+ Distiller}$ workflow, \texttt{aeb\_pro.js} is required; for authors
+ that prefer \app{pdflatex}, \app{lualatex}, or \app{xelatex} as the
+ {\PDF} creator \emph{and who own} the \app{Acrobat} application,
+ the \texttt{aeb\_pro.js} is required with the \opt{useacrobat}
+ option of \AEBP. When using the \opt{nopro} option of \AEBP, the
+ JavaScript file \texttt{aeb\_pro.js} is not used.
+ \item For \pkg{thorshammer} and \pkg{docassembly}, \pkg{aeb\_pro.js} is
+ required to be installed.
+
+\end{itemize}
+The placement of the JavaScript files has changed over the years and is a
+function of the version number \meta{ver}. Start \app{Acrobat} and open the
+console debugger window by pressing \texttt{Ctrl+J} (for \app{Windows OS})
+or \texttt{Cmd+J} (for \app{Mac OS}). Now execute the code
+\texttt{app.getPath("user")} in the console window. To do this, press the
+\textsf{getPath} button provided below, which copies the necessary code to
+the console window.
+\begin{equation}
+\begin{minipage}{.8\linewidth}
+\begin{Verbatim}[commandchars={!~@}]
+app.getPath("user");!copyGetPath
+\end{Verbatim}
+\end{minipage}\label{display:getPath}
+\end{equation}
+With the cursor on the line containing the script, press the
+\texttt{Ctrl+Enter} (for \app{Windows OS}) or \texttt{Cmd+Enter} (for
+\app{Mac~OS}) key. This will execute the JavaScript and return the `root'
+path to the user's application data for \app{Acrobat}.
+
+The rest of the instructions depend on your operating system,
+\app{Windows} or \app{Mac}.
+
+\subsection{For users of \app{Windows OS}}
+
+There are several cases, jump to the numbered paragraph that describes your
+version (\meta{ver}) of \app{Acrobat}.
+
+%/C/Users/D. P. Story/AppData/Roaming/Adobe/Acrobat/11.0
+%/C/Users/D. P. Story/AppData/Roaming/Adobe/Acrobat/Privileged/11.0/JavaScripts
+
+\def\Stepi{\ding{182}\enspace}
+\def\Stepii{\ding{183}\enspace}
+\def\Stepiii{\ding{184}\enspace}
+
+\paragraph*{{\Stepi}For $\mathbf{\text{\meta{ver}}}$, $\mathbf{8.1 \le
+\text{\meta{ver}} < 10.1.1}$.} For the \app{Windows OS}, executing the script
+in display~\eqref{display:getPath} returns a string of the
+form:\footnote{This string is for \app{Windows OS} beyond \app{WinXP}.}
+\begin{equation}
+\begin{minipage}{.8\linewidth}
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
+/C/Users/!meta(username)/AppData/Roaming/Adobe/Acrobat/!meta(ver)
+\end{Verbatim}
+\end{minipage}\label{display:path}
+\end{equation}
+Navigate to this folder location. The correct location for the \SC{JS}
+files is in the \texttt{JavaScripts} subfolder. If the folder does not
+exist, create it. The final path for the JavaScript support files is then
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
+/C/Users/!meta(username)/AppData/Roaming/Adobe/
+ Acrobat/!meta(ver)/JavaScripts
+\end{Verbatim}
+Finally, copy \texttt{aeb.js} (if applicable) and/or \texttt{aeb\_pro.js} (if
+applicable) into this folder. Close \app{Acrobat}, the next time
+\app{Acrobat} is started, it will read in the \SC{JS} files.
+
+\paragraph*{{\Stepii}For $\mathbf{\text{\meta{ver}}}$, $\mathbf{10.1.1 \le
+\text{\meta{ver}} < 12}$.} For these versions of \app{Acrobat} security has
+have tightened up even more; the \texttt{JavaScripts} folder is now a
+subfolder of a special \texttt{Privileged} folder. Execute
+\texttt{app.getPath("user")} in the console window, as in
+display~\eqref{display:getPath}. The method brings back a string similar to
+the one in display~\eqref{display:path}. The correct path is obtained by
+simply inserting \texttt{Privileged} into the path in
+display~\eqref{display:path}, between \texttt{Acrobat} and \meta{ver}, as
+displayed below.
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
+/C/Users/!meta(username)/AppData/Roaming/Adobe/
+ Acrobat/!textbf(Privileged)/!meta(ver)/JavaScripts
+\end{Verbatim}
+But this is a mere description of the correct location, the path must
+exist! The path must be created, if it does not already exist.
+
+Navigate to the folder, one folder above the path shown in
+display~\eqref{display:path}, that is, navigate to,
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
+/C/Users/!meta(username)/AppData/Roaming/Adobe/Acrobat/
+\end{Verbatim}
+If a \texttt{Privileged} folder exists, enter into it; otherwise, create
+it, then enter it.
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
+/C/Users/!meta(username)/AppData/Roaming/Adobe/Acrobat/Privileged
+\end{Verbatim}
+Now create a folder named \meta{ver}, unless it already exists, and enter
+it. The version is always the major release \texttt{8.0}, \texttt{9.0},
+\texttt{10.0}, or \texttt{11.0}.
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
+/C/Users/!meta(username)/AppData/Roaming/Adobe/
+ Acrobat/Privileged/!meta(ver)
+\end{Verbatim}
+Finally, create the \texttt{JavaScript} folder, unless it already exists,
+to obtain the final path to the user folder JavaScripts:
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
+/C/Users/!meta(username)/AppData/Roaming/Adobe/
+ Acrobat/Privileged/!meta(ver)/JavaScripts
+\end{Verbatim}
+Copy \texttt{aeb.js} (if applicable) and/or \texttt{aeb\_pro.js} (if
+applicable) into this folder. Close \textsf{Acrobat}, the next time
+\textsf{Acrobat} is started, it will read in the \SC{JS} files.
+
+\paragraph*{{\Stepiii}For $\mathbf{\text{\meta{ver}}}$, $\mathbf{
+\text{\meta{ver}} > 12} $.} Beginning with the next major version following
+version~11, Adobe changed its versioning scheme. There are now two tracks,
+\emph{subscription} and \emph{classic} (also called \emph{perpetual}). For
+subscription, the version, as I understand it, will always be \texttt{DC}
+(Document Cloud), and for the classic, for which you've purchased a
+\emph{perpetual license}, the \meta{ver} is a calendar year. The first
+classic version is \texttt{2015}, the next one is most likely \texttt{2017},
+since major releases occur about every two years.
+
+Execute the code of display~\eqref{display:getPath} by pressing the button
+provided to obtain a path of the form,
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
+/C/Users/!meta(username)/AppData/Roaming/Adobe/Acrobat/DC
+\end{Verbatim}
+for the subscription license or,
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
+/C/Users/!meta(username)/AppData/Roaming/Adobe/Acrobat/2015
+\end{Verbatim}
+for the classic (or perpetual) license. Of course, this last path is for
+the first classic version.
+
+Now, to obtain the path to the \texttt{JavaScripts} folder, follow the
+instructions for numbered paragraph \ding{183}, but with \meta{ver} equal
+to either \texttt{DC} or \texttt{2015} (a calendar year).
+
+%/C/Users/D. P. Story/AppData/Roaming/Adobe/Acrobat/Privileged/11.0/JavaScripts
+
+\subsection{For users of \app{Mac OS}}
+
+\app{Mac OS} does not have the security restrictions that \app{Windows OS}
+does, as described in paragraphs \ding{183} and \ding{184}.
+
+Follow the instructions of paragraph \ding{182}, by first pressing the button
+provided in display~\eqref{display:getPath}, then, in the console window,
+execute this script as described in the paragraph following
+display~\eqref{display:getPath}. After working through \ding{182}, one
+obtains any of the following paths depending on the version (\meta{ver}) you
+are using:\medskip
+
+\noindent
+For $\text{\meta{ver}} = \texttt{8.0}, \texttt{9.0}, \texttt{10.0},
+\texttt{11.0}$:
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
+/Users/!meta(user)/Library/Application\ Support/Adobe/
+ Acrobat/!meta(ver)/JavaScripts
+\end{Verbatim}
+\medskip
+
+\noindent
+For $\text{\meta{ver}} > 12$, the path is,
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
+/Users/!meta(user)/Library/Application\ Support/Adobe/
+ Acrobat/DC/JavaScripts
+\end{Verbatim}
+for a subscription license, and,
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
+/Users/!meta(user)/Library/Application\ Support/Adobe/
+ Acrobat/2015/JavaScripts
+\end{Verbatim}
+or more generally,
+\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
+/Users/!meta(user)/Library/Application\ Support/Adobe/
+ Acrobat/!meta(year)/JavaScripts
+\end{Verbatim}
+for the perpetual license.
+
+In all cases, if the \texttt{JavaScripts} folder does not exist, it must
+be created. Copy any \SC{JS} support files into the \texttt{JavaScripts}
+folder. The script files are read the next time \app{Acrobat} is started.
+
+\section{Testing the placement of the JavaScript support files}
+
+Assuming you have successfully followed the instructions and created the
+\texttt{JavaScripts} folder, test the validity of what you have done by
+closing \app{Acrobat} then opening it again. Open the console window
+(\texttt{Ctrl+J} or \texttt{Cmd+J}, for \app{Mac OS}) and execute this
+command in the console window:
+\begin{Verbatim}[xleftmargin=\amtIndent,commandchars={!~@}]
+app.getPath("user","javascript");!quad!copyGetPathJS
+\end{Verbatim}
+If you have followed the instructions, the return string should read the
+complete path to the \texttt{JavaScripts} folder.
+\end{document}
diff --git a/macros/latex/contrib/acrotex-js/js-files/aeb.js b/macros/latex/contrib/acrotex-js/js-files/aeb.js
new file mode 100644
index 0000000000..09310d2e40
--- /dev/null
+++ b/macros/latex/contrib/acrotex-js/js-files/aeb.js
@@ -0,0 +1,24 @@
+/*
+ AEB Import FDF Methods
+
+ Copyright (C) 2006--2016 AcroTeX.Net
+ D. P. Story
+ http://www.acrotex.net
+
+ Version 1.0
+*/
+if ( typeof aebTrustedFunctions == "undefined") {
+ aebTrustedFunctions = app.trustedFunction( function ( doc, oFunction, oArgs )
+ {
+ app.beginPriv();
+ var retn = oFunction( oArgs, doc )
+ app.endPriv();
+ return retn;
+ });
+}
+aebImportAnFDF = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ app.beginPriv();
+ doc.importAnFDF(oArgs);
+ app.endPriv();
+});
diff --git a/macros/latex/contrib/acrotex-js/js-files/aeb_pro.js b/macros/latex/contrib/acrotex-js/js-files/aeb_pro.js
new file mode 100644
index 0000000000..5dbfe4d53a
--- /dev/null
+++ b/macros/latex/contrib/acrotex-js/js-files/aeb_pro.js
@@ -0,0 +1,177 @@
+/*
+ AEB Pro Document Assembly Methods
+
+ Copyright (C) 2012 -- 2021 AcroTeX.Net
+ D. P. Story
+ http://www.acrotex.net
+
+ Version 1.6.1
+
+ v1.6.1 aebCreateTemplate now returns an object
+ v1.6 Added aebAddWatermarkFromText, aebLaunchURL
+ v1.5 Added aebCertifyInvisibleSign
+*/
+
+if ( typeof aebTrustedFunctions == "undefined") {
+ aebTrustedFunctions = app.trustedFunction( function ( doc, oFunction, oArgs )
+ {
+ app.beginPriv();
+ var retn = oFunction( oArgs, doc );
+ app.endPriv();
+ return retn;
+ });
+}
+aebAddWatermarkFromFile = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ var Msg=function(e){return (aebAddWatermarkFromFile.msg==undefined)?("Add Watermark from File Error: " + e.toString()):aebAddWatermarkFromFile.msg;}
+ app.beginPriv();
+ try { doc.addWatermarkFromFile(oArgs); } catch(e) {console.println(Msg(e));}
+ app.endPriv();
+ aebAddWatermarkFromFile.msg=undefined;
+});
+aebAddWatermarkFromText = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ app.beginPriv();
+ return doc.addWatermarkFromText(oArgs);
+ app.endPriv();
+});
+aebImportIcon = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ app.beginPriv();
+ return doc.importIcon(oArgs);
+ app.endPriv();
+});
+aebInsertPages = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ var Msg=function(e){return (aebInsertPages.msg==undefined)?("Insert Pages Error: " + e.toString()):aebInsertPages.msg;}
+ app.beginPriv();
+ try { doc.insertPages(oArgs); } catch(e) {console.println(Msg(e));}
+ app.endPriv();
+ aebInsertPages.msg=undefined;
+})
+aebAppOpenDoc = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ var Msg=function(e){return (aebAppOpenDoc.msg==undefined)?("App Open Doc Error: " + e.toString()):aebAppOpenDoc.msg;}
+ app.beginPriv();
+ try { return app.openDoc(oArgs); } catch(e) {console.println(Msg(e));}
+ app.endPriv();
+ aebAppOpenDoc.msg=undefined;
+ return retn;
+})
+aebImportTextData = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ app.beginPriv();
+ return doc.importTextData(oArgs);
+ app.endPriv();
+});
+aebImportSound = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ app.beginPriv();
+ return doc.importSound(oArgs);
+ app.endPriv();
+});
+aebSaveAs = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ app.beginPriv();
+ app.execMenuItem("Save");
+ app.endPriv();
+});
+aebDocSaveAs = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ var Msg=function(e){return (aebDocSaveAs.msg==undefined)?("Doc SaveAs Error: " + e.toString()):aebDocSaveAs.msg;}
+ app.beginPriv();
+ try {
+ return doc.saveAs(oArgs);
+ } catch(e){console.println(Msg(e));}
+ app.endPriv();
+ aebDocSaveAs.msg=undefined;
+
+});
+aebExtractPages = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ app.beginPriv();
+ return doc.extractPages(oArgs);
+ app.endPriv();
+});
+aebMailDoc = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ app.beginPriv();
+ return doc.mailDoc(oArgs);
+ app.endPriv();
+});
+aebImportDataObject = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ app.beginPriv();
+ return doc.importDataObject(oArgs);
+ app.endPriv();
+});
+aebSignatureSign = app.trustPropagatorFunction( function ( oArgs, field )
+{
+ app.beginPriv();
+ return field.signatureSign(oArgs);
+ app.endPriv();
+});
+aebSecurityHandlerLogin = app.trustPropagatorFunction( function ( oArgs, securityHandler )
+{
+ app.beginPriv();
+ return securityHandler.login(oArgs);
+ app.endPriv();
+});
+aebTimestampSign = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ app.beginPriv();
+ return doc.timestampSign(oArgs);
+ app.endPriv();
+});
+aebSecurityGetHandler = app.trustPropagatorFunction( function ( oArgs, security )
+{
+ app.beginPriv();
+ return security.getHandler(oArgs);
+ app.endPriv();
+});
+aebAppGetPath = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ app.beginPriv();
+ return app.getPath(oArgs);
+ app.endPriv();
+ return retn;
+});
+aebSignatureSetSeedValue = app.trustPropagatorFunction( function ( oArgs, field )
+{
+ app.beginPriv();
+ return field.signatureSetSeedValue( oArgs )
+ app.endPriv();
+});
+aebCertifyInvisibleSign = app.trustPropagatorFunction( function ( oArgs, field )
+{
+ app.beginPriv();
+ return field.certifyInvisibleSign( oArgs )
+ app.endPriv();
+});
+aebAddIcon=app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ app.beginPriv();
+ doc.addIcon(oArgs);
+ app.endPriv();
+});
+aebCreateTemplate = app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ var Msg=function(e){return (aebCreateTemplate.msg==undefined)?("Create Template Error: " + e.toString()):aebCreateTemplate.msg;}
+ app.beginPriv();
+ try { return doc.createTemplate(oArgs); } catch(e) {console.println(Msg(e));}
+ app.endPriv();
+ aebCreateTemplate.msg=undefined;
+
+})
+aebBrowseForDoc=app.trustPropagatorFunction( function ( oArgs, doc )
+{
+ app.beginPriv();
+ var retn = app.browseForDoc(oArgs);
+ app.endPriv();
+});
+aebLaunchURL=app.trustPropagatorFunction ( function ( oArgs )
+{
+ app.beginPriv();
+ var retn = app.launchURL(oArgs);
+ app.endPriv();
+});