Created
April 2, 2021 07:58
-
-
Save jarmitage/fc659e874b15cff871841cb76c94957b to your computer and use it in GitHub Desktop.
progress.sty (by Kasper Graverson) but exports .csv of progress % as well
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
%% | |
%% 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. | |
% \usepackage{catchfile} | |
% \pagestyle{myheadings} | |
% \newwrite\appendwrite | |
% \newcommand*\appendtofile[2]{% | |
% \begingroup | |
% \IfFileExists{#1}% | |
% {\CatchFileDef{\filecontent}{#1}{\endlinechar=`^^J\catcode\endlinechar=12\relax}}% keep existing end-of-lines | |
% {\let\filecontent\empty}% | |
% \immediate\openout\appendwrite=#1\relax | |
% \immediate\write\appendwrite{\filecontent #2}% | |
% \immediate\closeout\appendwrite | |
% \endgroup | |
% } | |
\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}{progress/html/\YYYYMMDDdate_\jobname.html} | |
\newcommand{\ProgressLogTest}{progress/csv/\YYYYMMDDdate_\jobname.csv} | |
% \newcommand{\appendtolog}[1]{\appendtofile{\ProgressLogTest}{#1}} | |
\newcommand{\appendtolog}[1]{\immediate\write\fl{#1}} | |
\def\sec{0,Abstract} | |
\def\sep{;} | |
% 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>}% | |
\ifdefined\COUNT\appendtolog{\sec\sep#1}\fi | |
\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 | |
\ifdefined\COUNT | |
\newwrite\fl | |
\immediate\openout\fl=\ProgressLogTest | |
\immediate\write\fl{Type\sep Number\sep Title\sep Progress} | |
\fi | |
%%% setup file write.. | |
\newwrite\fp | |
\immediate\openout\fp=\ProgressReportName | |
%%% title header of document and document title | |
\immediate\write\fp{<html><head><title>[\eightdigitdate]\space \jobname</title>} | |
\immediate\write\fp{<style>body{font-family: Arial; background-color: \hashchar 262626; color: \hashchar fff;}</style>} | |
\immediate\write\fp{</head><body>} | |
\immediate\write\fp{<h1>[\eightdigitdate]\space \jobname </h1>} | |
%% start real HTML table | |
\immediate\write\fp{<table border="0" style="max-width:600px;" 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=90\percentchar><font size="+3">\thechapter #1</font></td>} | |
\fi | |
\endgroup | |
\def\sec{chapter\sep\thechapter\sep#1} | |
} | |
\newcommand{\insertSection}[1]{% | |
\pr@gressCurrentDepth = 2\relax | |
\ifnum\pr@gressDepth > 1 | |
\immediate\write\fp{<tr><td><font size="+2"> \thesection #1</font></td>} | |
\def\sec{section\sep\thesection\sep#1} | |
\fi | |
} | |
\newcommand{\insertSubsection}[1]{% | |
\pr@gressCurrentDepth = 3\relax | |
\ifnum\pr@gressDepth > 2 | |
\immediate\write\fp{<tr><td><font size="+1"> \thesubsection #1</font></td>} | |
\def\sec{subsection\sep\thesubsection\sep#1} | |
\fi | |
} | |
\newcommand{\insertSubsubsection}[1]{% | |
\pr@gressCurrentDepth = 4\relax | |
\ifnum\pr@gressDepth > 3 | |
\immediate\write\fp{<tr><td><font size="+0"> \thesubsubsection #1</font></td>} | |
\def\sec{subsubsection\sep\thesubsubsection\sep#1} | |
\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}{% | |
\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 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="0" cellspacing="0" cellpadding="5">} | |
\immediate\write\fp{<tr><td bgcolor="A05050" width=40> <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"> <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"> <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"> <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"> <td>91-99<td> Deliverable</td></tr>} | |
\immediate\write\fp{<tr><td bgcolor="008000"> <td>95 <td> Deliverable, all quotes checked</td></tr>} | |
\immediate\write\fp{<tr><td bgcolor="008000"> <td>96 <td> Deliverable, BibTeX references checked</td></tr>} | |
\immediate\write\fp{<tr><td bgcolor="008000"> <td>97 <td> Deliverable, punctuation checked</td></tr>} | |
\immediate\write\fp{<tr><td bgcolor="008000"> <td>98 <td> Deliverable, thesaurus consulted</td></tr>} | |
\immediate\write\fp{<tr><td bgcolor="008000"> <td>99 <td> Deliverable, whole document spelling checked</td></tr>} | |
\immediate\write\fp{<tr><td bgcolor="ADFF2F"> <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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment