%% %% This is file `acrosort.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% acrosort.dtx (with options: `copyright,package') %% %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% acrosort package, 2011-12-22 %% %% Copyright (C) 2006--2011 D. P. Story %% %% dpstory@acrotex.net %% %% storyd@nwfsc.edu %% %% %% %% 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. %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{acrosort} [2011/12/22 v1.5 AcroSort (dps)] \RequirePackage[execJS]{eforms} \RequirePackage{graphicx} \def\theTotalTiles#1{\def\nTotalTiles{#1}} \let\nTotalTiles\@empty \def\theNumRows#1{% \def\nRows{#1}% \ifx\nCols\@empty\else \ifx\nTotalTiles\@empty {\count0=#1\relax\multiply\count0by\nCols \xdef\nTotalTiles{\the\count0}}% \fi \fi } \let\nRows\@empty \def\theNumCols#1{% \def\nCols{#1}% \ifx\nRows\@empty\else \ifx\nTotalTiles\@empty {\count0=#1\relax\multiply\count0by\nRows \xdef\nTotalTiles{\the\count0}}% \fi \fi } \let\nCols\@empty \def\theImportPath#1{\def\importpath{#1}} \def\theIconExt#1{\def\iconsExt{#1}} \def\iconsExt{pdf} \def\theTeXImageWidth#1{\def\texImageWidth{#1}% {\dimen0=\texImageWidth \xdef\imageWidth{\strip@pt\dimen0 }}% } \def\isPackage{\def\bIsPackage{true}} \def\bIsPackage{false} \def\ulCornerHere{\makebox[0pt][l]% {\pushButton[\autoCenter{n}]{ulcorner}{0pt}{0pt}}} \def\reserveSpaceByDimension#1#2{% \hbox{\ifpreview\setlength\fboxrule{0.4pt}\setlength\fboxsep{0pt}% \@tempdima=#1\advance\@tempdima by-\fboxrule \@tempdimb=#2\advance\@tempdimb by-\fboxrule \fbox{\parbox[t][\@tempdimb][t]{\@tempdima}{\kern0pt\hfill\vfill}}% \else\parbox[t][#2][t]{#1}{\kern0pt\hfill\vfill}\fi}% } \newcommand{\reserveSpaceByFile}[1][\importpath]% {{\setbox0=\hbox{\includegraphics[draft,width=\texImageWidth]{#1}}% \reserveSpaceByDimension{\wd0}{\ht0}}} \newcommand{\StartSort}[1][]{{\small\pushButton[\CA{Press Me}#1 \A{\JS{% ok2Continue = true;\r mixupDPS();\r showDPS();\r sortoutDPS(); }}]{StartButton}{}{12bp}}% } \newcommand{\ClearSort}[1][]% {\small{\pushButton[\CA{Clear}#1\A{\JS{% clearDPS();\sortCustomStartJS}}% ]{StartButton}{}{12bp}}% } \newcommand{\StopSort}[1][]% {\small{\pushButton[\CA{Stop}#1\A{\JS{ok2Continue = false;}}% ]{StartButton}{}{12bp}}% } \def\bDebug{\def\memDebug{true}} \def\memDebug{false} \newcommand{\customStartJS}[1]{\def\sortCustomStartJS{#1}} \let\sortCustomStartJS\@empty \newcommand{\customFinishJS}[1]{\def\sortCustomFinishJS{#1}} \def\sortCustomFinishJS{;} \begin{insDLJS}[randomDPS]{sort}{JS for bubble sort} // Global Data: var randomDPS = new Array(\nTotalTiles+1); var ldps = randomDPS.length; var timeout = 10; var shutdown; var debug = \memDebug; var ok2Continue = true; for (i=1; i<=\nTotalTiles; i++) randomDPS[i]=i; // Clear DPS: try {this.addIcon("nullIcon", this.createIcon("", 0, 0));} catch(e) {} function clearDPS() { for ( var i=1; i<=\nTotalTiles; i++ ) { var oIcon = this.getIcon("nullIcon"); var f = this.getField("button."+i); f.buttonSetIcon(oIcon); } } // Mixup DPS: function mixupDPS() { var i, rand, temp; for (i=1; i<= \nTotalTiles; i++) { var rand = Math.random(); rand *= ldps*ldps; rand = Math.ceil(rand); rand = rand \% ldps; if (rand == 0 ) rand = 1; temp = randomDPS[i]; randomDPS[i]=randomDPS[rand]; randomDPS[rand]=temp; } } // Show DPS: function showDPS() { \sortCustomStartJS for ( var i=1; i<=\nTotalTiles; i++ ) { var oIcon = this.getIcon("pic."+randomDPS[i]); var f = this.getField("button."+i); f.buttonSetIcon(oIcon); } } // Sortout DPS: function sortoutDPS() { outerLoop(randomDPS.length-1); } function outerLoop(i) { if ( ok2Continue && (i >= 0) ) shutdown = app.setTimeOut("app.clearTimeOut(shutdown); innerLoop("+i+",1);", timeout); else { \sortCustomFinishJS } } function innerLoop(i,j) { if ( j <= i ) { if (randomDPS[j-1] > randomDPS[j]) { var temp = randomDPS[j-1]; randomDPS[j-1] = randomDPS[j]; randomDPS[j] = temp; var oIcon = this.getIcon("pic."+randomDPS[j-1]); var f = this.getField("button."+(j-1)); f.buttonSetIcon(oIcon); var oIcon = this.getIcon("pic."+randomDPS[j]); var f = this.getField("button."+j); f.buttonSetIcon(oIcon); } j++ if ( ok2Continue ) shutdown = app.setTimeOut("app.clearTimeOut(shutdown); innerLoop("+i+","+j+");", timeout); else { \sortCustomFinishJS } } else { i--; outerLoop(i); } } \end{insDLJS} \begin{execJS}{acrosortjs} var index, ip="\importpath"; var re=/_package$/; var isPackage=\bIsPackage; if (debug) console.println("isPackage: " + isPackage); if (debug) console.println("nTotalTiles = " + \nTotalTiles) if (isPackage) { ip = ip+"_package"; for ( var i = 1; i <= \nTotalTiles; i++) { try { aebTrustedFunctions(this, aebImportIcon, {cName: "pic."+i, nPage: (i-1), cDIPath: ip+".\iconsExt"}, this); } catch(e) {console.println("exception: " + e.toSource())} } } else { for ( var i = 1; i <= \nTotalTiles; i++) { index = ( i < 10 ) ? "0"+i : ""+i; if (debug) console.println(ip+"_"+index+".\iconsExt") try { aebTrustedFunctions(this, aebImportIcon, {cName: "pic."+i, cDIPath: ip+"_"+index+".\iconsExt"}, this); } catch(e) {console.println("exception: " + e.toSource())} } } // Now lay out the icon fields. var f = this.getField("ulcorner"); var nPage = f.page; var ulCorner = f.rect; this.removeField("ulcorner"); ip = ip.replace(re,""); ip=ip+".pdf"; var doc = aebTrustedFunctions( this, aebAppOpenDoc, { cPath: ip, oDoc: this, bHidden: true }); var aRect = doc.getPageBox({cBox:"Crop"}) doc.closeDoc(true); if (debug) console.println("aRect: " + aRect.toSource()); var nRows = \nRows; var nCols = \nCols; var width = aRect[2]-aRect[0]; var height = aRect[1]-aRect[3]; var scaleFactor = \imageWidth/width; if (debug) console.println("scaleFactor = " + scaleFactor); var scaledWidth = width*scaleFactor; var scaledHeight = height*scaleFactor; if (debug) console.println("scaledWidth = " + scaledWidth); if (debug) console.println("scaledHeight = " + scaledHeight); var mWidth = scaledWidth/nCols var mHeight = scaledHeight/nRows if (debug) console.println("mWidth = " + mWidth); if (debug) console.println("mHeight = " + mHeight); var nCnt = 0; for ( var i=0; i