summaryrefslogtreecommitdiff
path: root/p/tools/todo.pl
diff options
context:
space:
mode:
authorschodet2005-10-05 22:04:28 +0000
committerschodet2005-10-05 22:04:28 +0000
commit15b9d85e5514d1ba481ee493c15f5aab80424ae9 (patch)
tree3e4c811e9262811ab503a64e9c632e1fde81bd6e /p/tools/todo.pl
parentcfc26c09952095a4db528802768400cff5b43936 (diff)
Ajout d'une préversion de la sortie HTML.
Ajout d'une préversion de la sortie texte.
Diffstat (limited to 'p/tools/todo.pl')
-rw-r--r--p/tools/todo.pl72
1 files changed, 66 insertions, 6 deletions
diff --git a/p/tools/todo.pl b/p/tools/todo.pl
index 31e55da..13be3cb 100644
--- a/p/tools/todo.pl
+++ b/p/tools/todo.pl
@@ -3,11 +3,14 @@
# Tool to parse todo files.
#
use strict;
+use Template;
+use Getopt::Long;
# Parse a todo file and add tasks to \%todos.
sub parse_todo
{
my ($todos, $path, $file) = @_;
+ #print "$path...\n";
my $owner;
local $_;
local *FILE;
@@ -22,10 +25,11 @@ sub parse_todo
{
chomp;
# Task line.
- /^([-+=x]) (?:\(([^)]+)\) |)(.+)$/ and do {
- my ($state, $owner, $text) = ($1, $2 || $owner, $3);
- #$owner = $1 if $2 =~ /^\((.*)\) $/;
- my @owners = split /, */, $owner;
+ /^([-+=x]) (?:\[(\d\d\/\d\d\/\d{4})\] |)(?:\(([^)]+)\) |)(.+)$/ and do {
+ my ($state, $deadline, $owner, $text) =
+ ($1, $2, $3 || $owner, $4);
+ my @owners;
+ @owners = split /, */, $owner if defined $owner;
# Read next lines.
while (<FILE>)
{
@@ -39,6 +43,7 @@ sub parse_todo
# Add task.
push @$tasks, {
state => $state,
+ deadline => $deadline,
owner => [ @owners ],
text => $text
};
@@ -89,11 +94,66 @@ sub parse_dir
parse_dir ($$todos{$_}, "$path/$_", "$dir/$_") foreach @tododirs;
}
-my %todos;
+# Output todo tree file.
+sub output_tree
+{
+ my ($d, $f, $t) = @_;
+ my $tt = new Template ({
+ INCLUDE_PATH => $d,
+ PRE_CHOMP => 1,
+ POST_CHOMP => 1,
+ INTERPOLATE => 1,
+ });
+ $tt->process ("todo.$f.tt", { 'tasks' => $t }) or die $tt->error;
+}
+
+# Print short help.
+sub usage
+{
+ print <<EOF;
+todo.pl - Parse todo files.
+
+Usage: todo.pl [OPTIONS]
+
+Options:
+ -t, --todo-dir=DIR Set the todo directory (defaults to'../todo').
+ -T, --template-dir=DIR Set the template directory (defaults to '.').
+ -f, --format=FORMAT Set the output format ('text' or 'html', defaults to
+ 'text').
+ -d, --dump Dump todo hash instead of normal output.
+ -h, --help Print this help screen.
+EOF
+}
-parse_dir (\%todos, '', '.');
+# Parse options.
+sub config
+{
+ my %config = (
+ 'todo-dir' => '../todo',
+ 'template-dir' => '.',
+ 'format' => 'text',
+ );
+ GetOptions (\%config,
+ 'todo-dir=s',
+ 'template-dir|T=s',
+ 'format=s',
+ 'dump',
+ 'help',
+ ) or die;
+ usage () and exit 0 if (exists ($config{help}));
+ return %config;
+}
+my %todos;
+
+my %config = config ();
+parse_dir (\%todos, '', $config{'todo-dir'});
+if (exists ($config{'dump'}))
{
use Data::Dumper;
print Dumper \%todos;
}
+else
+{
+ output_tree ($config{'template-dir'}, $config{'format'}, \%todos);
+}