summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/progress/progress.sty
blob: 4b0147cea9f2a736556d51242031853d9262b828 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
%%
%% This is file `progress.sty',
%%
%% version 1.10
%%
%% Copyright (C) 2002-2003 Kasper B. Graversen - this is freeware
%%
%% Thanks to Robin Fairbairns for helping me sorting things out ;-)
%% Thanks to Dan Luecking for some definitions
%% Also thanks to David Bausum for his free 'trept' "TeX: Reference and Examples" information material
%%
%% Progress may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.1
%% 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.1 or later is part of all distributions of LaTeX
%% version 1999/06/01 or later.

\NeedsTeXFormat{LaTeX2e}[1994/06/01]
\ProvidesPackage{progress}[2003/29/06 v1.10 progress package]
\typeout{Package: progress v1.10 <2003/29/06> (Kasper B. Graversen)}


% User-redefinable option: the form of the output filename
\newcommand{\ProgressReportName}{\jobname\YYYYMMDDdate.html}

% User-redefinable option: the size of the picture, if progress graphs are drawn
\newlength{\ProgressGfxUnitSize}
\setlength{\ProgressGfxUnitSize}{0.07mm}    % default value

\newcount\ProgressGfxXSize
\newcount\ProgressGfxYSize
\ProgressGfxXSize = 100 \relax
\ProgressGfxYSize =  20 \relax


% User-redifinable option: the output in the document (dvi/pdf file)
\newcommand{\ProgressDocOutput}[1]{\marginpar{\ProgressDrawBar{#1}}}





% pr@gressArgument - holds the percent given to \progress{}
\newcount\pr@gressArgument

% pr@gressDepth is the level of output
%   pr@gressDepth = 1 : only chapters
%   pr@gressDepth = 2 : only chapters & sections
%   pr@gressDepth = 3 : only chapters & sections & subsections
%   pr@gressDepth = 4 : only chapters & sections & subsections & subsubsection
\newcount\pr@gressDepth

% pr@gressCurrentDepth denotes the currently encountered \chapter, \section, \subsection, or \subsubsection
%	pr@gressCurrentDepth = 1 : chapter
%	pr@gressCurrentDepth = 2 : section
%	pr@gressCurrentDepth = 3 : subsection
%	pr@gressCurrentDepth = 4 : subsubsection
\newcount\pr@gressCurrentDepth

% denotes if \progress should perfom actions or not
% \d@cumentstate = 1 : draft.. include all definitions
% \d@cumentstate = 2 : final.. include nothing
\newcount\d@cumentstate
\d@cumentstate=1\relax  % default is draftmode (\relax stops scanning: it's only active job)


\DeclareOption{chapter}{\pr@gressDepth=1\relax}
\DeclareOption{section}{\pr@gressDepth=2\relax}
\DeclareOption{subsection}{\pr@gressDepth=3\relax}
\DeclareOption{subsubsection}{\pr@gressDepth=4\relax}

\DeclareOption{textonly}{\renewcommand{\ProgressDocOutput}[1]{\marginpar{{\scriptsize progress: #1\%}}}}
\DeclareOption{textgfx}{\renewcommand{\ProgressDocOutput}[1]{\marginpar{\ProgressDrawBar{#1}{\scriptsize~#1\%}}}}

\DeclareOption{final}{%
	\newcommand{\progress}[1]{}%    in final mode do not write anything to the document (nor to the html file!)
	\d@cumentstate=2\relax%         set to final mode
}%

\DeclareOption{draft}{
	\d@cumentstate=1\relax%	set to draft mode
	\newcommand{\progress}[1]{%
        % ask if current level is <= user specified level
        \@tempcnta=\pr@gressDepth
        \advance\@tempcnta by 1
        \ifnum\pr@gressCurrentDepth < \@tempcnta
            \pr@gressArgument=#1 				% set a register to the given percent value to determine its size
            \ifnum\pr@gressArgument < 0
            \def\bgcolor{A05050} ****\else	    % HTML "brown"
            \ifnum\pr@gressArgument < 51
            \def\bgcolor{FF0000} \else        	% HTML "red"
            \ifnum\pr@gressArgument < 71
            \def\bgcolor{C71585} \else        	% HTML "MediumVioletRed"
            \ifnum\pr@gressArgument < 81
            \def\bgcolor{6495ED} \else         	% HTML light blue
            \ifnum\pr@gressArgument < 91
            \def\bgcolor{FF8C00} \else         	% orange
            \ifnum\pr@gressArgument < 95
            \def\bgcolor{008000} \else         	% green
            \ifnum\pr@gressArgument = 100
            \def\bgcolor{ADFF2F}              	% GreenYellow
            \fi\fi\fi\fi\fi\fi\fi
            \immediate\write\fp{<td bgcolor="\hashchar \bgcolor"><b><font color="\hashchar FFFFFF"> #1\percentchar</font><b></td></tr>}%
        \fi%
        \ProgressDocOutput{#1}					% write something in the document
	}%
}%

\ProcessOptions\relax
%
%  source2e contains some explanations of \@ifstar, \@dblarg, and the syntax of \chapter, ...
%  \dosometingbefore/\dosomethingafter marks the stuff/macro that you can insert.
%  Heiko <oberdiek@uni-freiburg.de>
%
% Syntax for \foo (\chapter, \section, ...):
%   \foo*{...}
%   \foo[...]{...}
%   \foo{...}
% The star is catched by \@ifstar:

%%% define \percentchar and \hashchar by Dan Luecking
{\catcode`\%=12 \gdef\percentchar{%}}
{\catcode`\#=12 \gdef\hashchar{#}}


\AtBeginDocument{%
\ifnum\d@cumentstate = 1\relax	% only if draft mode
	%%% setup file write..
	\newwrite\fp
	\immediate\openout\fp=\ProgressReportName

	%%% title header of document and document title
	\immediate\write\fp{<html><head><title>Progress of "\jobname"\space \eightdigitdate</title></head><body>}
	\immediate\write\fp{<h1>Progress of "\jobname"\space generated \eightdigitdate </h1>}

	%% start real HTML table
	\immediate\write\fp{<table border="1" width="100\percentchar">}
\fi
}


% long definition since @mkboth otherwise fucks up when using headers in document
\newcommand{\insertChapter}[1]{%
  \pr@gressCurrentDepth=1\relax
  \begingroup
    \set@display@protect
    \let\@mkboth\@gobbletwo
        \ifnum\thechapter > 0
		\immediate\write\fp{<tr><td bgcolor="\hashchar cccccc" width=70\percentchar><font size="+3">\thechapter&nbsp;#1</font></td>}
        \fi
  \endgroup
}


\newcommand{\insertSection}[1]{%
	\pr@gressCurrentDepth = 2\relax
	\ifnum\pr@gressDepth > 1
	    \immediate\write\fp{<tr><td><font size="+2">&nbsp;&nbsp;&nbsp;&nbsp;\thesection&nbsp;#1</font></td>}
	\fi
}
\newcommand{\insertSubsection}[1]{%
	\pr@gressCurrentDepth = 3\relax
	\ifnum\pr@gressDepth > 2
		\immediate\write\fp{<tr><td><font size="+1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\thesubsection&nbsp;#1</font></td>}
	\fi
}

\newcommand{\insertSubsubsection}[1]{%
	\pr@gressCurrentDepth = 4\relax
	\ifnum\pr@gressDepth > 3
		\immediate\write\fp{<tr><td><font size="+0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\thesubsubsection&nbsp;#1</font></td>}
	\fi
}


%%% CHAPTER
\ifx\chapter\undefined
%no definition if in article mode or other modes without chapter
\else
    \ifnum\d@cumentstate = 1\relax	% only if draft mode
        \newcommand*{\oooldchapter}{}% check, if \oooldchapter is free
        \let\oooldchapter\chapter

        \renewcommand*{\chapter}{%
          \@ifstar{\starchapter}%
          {\@dblarg\nostarchapter}%
        }

        \newcommand*{\starchapter}[1]{%
          \oooldchapter*{#1}%
          \insertChapter{#1}%
        }

        \newcommand{\nostarchapter}{}
        \def\nostarchapter[#1]#2{% #1: toc entry, #2: main entry
          \oooldchapter[{#1}]{#2}%
          \insertChapter{#2}%
        }
    \fi
\fi

%%% SECTION
\ifnum\d@cumentstate = 1 \relax	% only if draft mode
	\newcommand*{\oooldsection}{}% check, if \oooldchapter is free
	\let\oooldsection\section

	\renewcommand*{\section}{%
	  \@ifstar{\starsection}%
	  {\@dblarg\nostarsection}%
	}

	\newcommand*{\starsection}[1]{%
	  \oooldsection*{#1}%
	  \insertSection{#1}%
	}

	\newcommand{\nostarsection}{}
	\def\nostarsection[#1]#2{% #1: toc entry, #2: main entry
	  \oooldsection[{#1}]{#2}%
	  \insertSection{#2}%
	}
\fi


%%% SUBSECTION
\ifnum\d@cumentstate = 1\relax	% only if draft mode
	\newcommand*{\oooldsubsection}{}% check, if \oooldchapter is free
	\let\oooldsubsection\subsection

	\renewcommand*{\subsection}{%
	  \@ifstar{\starsubsection}%
	  {\@dblarg\nostarsubsection}%
	}

	\newcommand*{\starsubsection}[1]{%
	  \oooldsubsection*{#1}%
	  \insertSubsection{#1}%
	}

	\newcommand{\nostarsubsection}{}
	\def\nostarsubsection[#1]#2{% #1: toc entry, #2: main entry
	  \oooldsubsection[{#1}]{#2}%
	  \insertSubsection{#2}%
	}
\fi


%%% SUBSUBSECTION
\ifnum\d@cumentstate = 1\relax	% only if draft mode
	\newcommand*{\oooldsubsubsection}{}% check, if \oooldchapter is free
	\let\oooldsubsubsection\subsubsection

	\renewcommand*{\subsubsection}{%
	  \@ifstar{\starsubsubsection}%
	  {\@dblarg\nostarsubsubsection}%
	}

	\newcommand*{\starsubsubsection}[1]{%
	  \oooldsubsubsection*{#1}%
	  \insertSubsection{#1}%
	}

	\newcommand{\nostarsubsubsection}{}
	\def\nostarsubsubsection[#1]#2{% #1: toc entry, #2: main entry
	  \oooldsubsubsection[{#1}]{#2}%
	  \insertSubsubsection{#2}%
	}%
\fi




%%% helper methods for generating the date for the HTML file output
\newcommand{\eightdigitdate}{%
    \ifnum\number \day  < 10 0\number\day   \else \number\day\fi.%
    \ifnum\number \month< 10 0\number\month \else \number\month\fi.%
    \number\year%
}

%% is used for naming the progress output file. It returns an 8-digit date with no "." in format YYMMDD
\newcommand{\YYYYMMDDdate}{%
    \number\year%
    \ifnum\number \month< 10 0\number\month \else \number\month\fi%
    \ifnum\number \day  < 10 0\number\day   \else \number\day\fi%
}

%% is used for naming the progress output file. It returns an 8-digit date with no "." in format DDMMYY
\newcommand{\DDMMYYYYdate}{%
    \ifnum\number \day  < 10 0\number\day   \else \number\day\fi%
    \ifnum\number \month< 10 0\number\month \else \number\month\fi%
    \number\year%
}

%% is used for naming the progress output file. It returns an 8-digit date with no "." in format MMDDYY
\newcommand{\MMDDYYYYdate}{%
    \ifnum\number \month< 10 0\number\month \else \number\month\fi%
    \ifnum\number \day  < 10 0\number\day   \else \number\day\fi%
    \number\year%
}

\AtEndDocument{%
	\ifnum\d@cumentstate = 1\relax	% only if draft mode
		%% end overview table
		\immediate\write\fp{</table>}
		%% write legend table
		\immediate\write\fp{<br><br><br><br><blockquote>Legend:<br><table border="1" cellspacing="0" cellpadding="5">}
		\immediate\write\fp{<tr><td bgcolor="A05050" width=40> &nbsp; 	<td width=55> < 0 <td> Means the same as above 0, but indicate that the author is stuck and needs consultance with co-author(s)	</td></tr>}
		\immediate\write\fp{<tr><td bgcolor="FF0000"> 				 	<td> 0-50<td> Unfinished</td></tr>}
		\immediate\write\fp{<tr><td bgcolor="C71585">&nbsp; 			<td>51-70<td> 1st draft - can have "rough edges"<br><br> Focus: main form, contents, major points.</td></tr>}
		\immediate\write\fp{<tr><td bgcolor="6495ED">&nbsp; 			<td>71-80<td> 2nd draft <br><br> Focus: section consistency internally within the chapter, errors, misunderstandings, disagreements, missing points, missing references, additions, readability.</td></tr>}
		\immediate\write\fp{<tr><td bgcolor="FF8C00">&nbsp; 			<td>81-90<td> 3rd draft<br><br> Focus: chapter consistency externally within the report, agreement with contents, form, last check if points have been left out, readability.</td></tr>}
		\immediate\write\fp{<tr><td bgcolor="008000">&nbsp; 			<td>91-99<td> Deliverable</td></tr>}
		\immediate\write\fp{<tr><td bgcolor="008000">&nbsp; 			<td>95 	 <td> Deliverable, all quotes checked</td></tr>}
		\immediate\write\fp{<tr><td bgcolor="008000">&nbsp; 			<td>96 	 <td> Deliverable, BibTeX references checked</td></tr>}
		\immediate\write\fp{<tr><td bgcolor="008000">&nbsp; 			<td>97 	 <td> Deliverable, punctuation checked</td></tr>}
		\immediate\write\fp{<tr><td bgcolor="008000">&nbsp; 			<td>98 	 <td> Deliverable, thesaurus consulted</td></tr>}
		\immediate\write\fp{<tr><td bgcolor="008000">&nbsp; 			<td>99 	 <td> Deliverable, whole document spelling checked</td></tr>}
		\immediate\write\fp{<tr><td bgcolor="ADFF2F">&nbsp; 			<td>100  <td> Finished</td></tr>}
		\immediate\write\fp{</table>}
		%% end HTML
		\immediate\write\fp{<table width="100\percentchar"><tr align="right"><td><font size="-2">report generated by progress.sty (c) Kasper B. Graversen 2002-2003</font></td></tr></tabel>}
        \immediate\write\fp{</blockquote><br></body></html>}
	\fi
}

% draws a progress bar with the argument as the percent
\newcommand{\ProgressDrawBar}[1]{%
    \setlength{\unitlength}{\ProgressGfxUnitSize}
    \begin{picture}(\ProgressGfxXSize,\ProgressGfxYSize)(0,0)

    \put(0,0){\framebox(\ProgressGfxXSize,\ProgressGfxYSize)}	% draw the progress box
																% draw the progress bar
	\@tempcnta=\ProgressGfxXSize
	\ifnum \@tempcnta < 0 \multiply \@tempcnta by -1 \fi		% handle negative %'s by   * -1
	\multiply \@tempcnta by #1		\divide \@tempcnta by 100
    \multiput(1,0)(1,0){\@tempcnta}{\line(0,1){\ProgressGfxYSize}}

    % draw the 25% marker
    \@tempcnta=\ProgressGfxXSize   \divide \@tempcnta by 4    		% find x-length of 25%
    \@tempcntb=\ProgressGfxYSize   \divide \@tempcntb by 4			% find y-height of the 25% and 75% markers
    \put(\@tempcnta ,0){\line(0,1){\@tempcntb}}%

    % draw the 75% marker
    \@tempcnta=\ProgressGfxXSize   \divide \@tempcnta by 4    \multiply \@tempcnta by 3 	% find x-length of 75%
    \put(\@tempcnta ,0){\line(0,1){\@tempcntb}}%

    % draw the 50% marker
    \@tempcnta=\ProgressGfxXSize   \divide \@tempcnta by 2    	% find x-length of 50%
    \@tempcntb=\ProgressGfxYSize   \divide \@tempcntb by 2		% find y-height of the 50% marker
    \put(\@tempcnta ,0){\line(0,1){\@tempcntb}}%

    \end{picture}%
}



\endinput