summaryrefslogtreecommitdiff
path: root/bin
AgeCommit message (Collapse)Author
2024-06-04improve biblatex tidying, to support multiple JabRef comments, and not use ↵Jonas Smedegaard
temporary files
2024-06-04extend BibLaTeX tidying to cover JabRef comment that bibclean chokes onJonas Smedegaard
2024-06-04handle dot graphsJonas Smedegaard
2024-04-18drop obsolete teamsJonas Smedegaard
2024-04-01use PlantUML for Gantt diagramsJonas Smedegaard
2024-03-31tighten regex; strip special comment marker '%%QUARTO%%'Jonas Smedegaard
2024-03-31tighten embedded POD documentationJonas Smedegaard
2024-03-31avoid custom argument in shebang, ignored when executed by explicit interpreterJonas Smedegaard
2024-03-31tidy script hedgedoc2quartoJonas Smedegaard
2024-03-29isolate subroutine mmd2mmdJonas Smedegaard
2024-03-29rewrite script hedgedoc2quarto as robust perl scriptJonas Smedegaard
2024-03-12add Gantt diagram to code reportJonas Smedegaard
2024-03-08add location to event web outputJonas Smedegaard
2024-03-05set timezone in web-rendered calendar viewsJonas Smedegaard
2024-03-05enable learn calendarJonas Smedegaard
2024-02-25cover eventsJonas Smedegaard
2024-02-21add helper script xmp2rdfxml, and make targets turtle-from-* dotgraph-from-*Jonas Smedegaard
uot;
  • and next;
  • /^(?:date|axis)Format\s/i
  • and push @newcode, "${indent}'UNSUPPORTED: $_"
  • and next;
  • /^todayMarker\s+(off|on)\b/i
  • and push @newcode, "${indent}'UNSUPPORTED' $_"
  • and next;
  • /^section\s+\K\S+(?:\s+\S+)*/i
  • and push @newcode, "${indent}-- $& --"
  • and next;
  • if (/^tickInterval\s+(?'tickAmount'\d+)(?'tickUnit'millisecond|second|minute|hour|day|week|month)\s*$/i
  • )
  • {
  • push @newcode, "${indent}projectscale daily"
  • and next
  • if $+{tickAmount} eq 1
  • and $+{tickUnit} eq 'day';
  • push @newcode, "${indent}projectscale weekly" and next
  • if $+{tickAmount} eq 1 and $+{tickUnit} eq 'week'
  • or $+{tickAmount} eq 7 and $+{tickUnit} eq 'day';
  • push @newcode, "${indent}projectscale monthly"
  • and next
  • if $+{tickAmount} eq 1
  • and $+{tickUnit} eq 'month';
  • push @newcode, "${indent}projectscale quarterly"
  • and next
  • if $+{tickAmount} eq 3
  • and $+{tickUnit} eq 'month';
  • push @newcode, "${indent}projectscale yearly"
  • and next
  • if $+{tickAmount} eq 12
  • and $+{tickUnit} eq 'month';
  • push @newcode, "${indent}'UNSUPPORTED' $&"
  • and next;
  • }
  • /^
  • (?'title'[^:\n]+)
  • \s*+:\s*+
  • # optional tags
  • (?:
  • (?:
  • (?'active'active)
  • |
  • (?'done'done)
  • |
  • (?'crit'crit)
  • |
  • (?'milestone'milestone)
  • )\s*+
  • ,\s*+
  • )?+
  • (?:
  • # optional tertiary item
  • (?:
  • (?'taskID'(?&id))\s*+
  • ,\s*+
  • (?=.*,) # several items must follow
  • )?+
  • # optional secondary item
  • (?:
  • (?'startDate'(?&date))
  • |
  • after
  • (?'afterTaskIDs'
  • (?:\s+(?&id))++
  • )
  • )\s*+
  • ,\s*+
  • )?+
  • # required main item
  • (?:
  • (?'endDate'(?&date))
  • |
  • until
  • (?'untilTaskIDs'
  • (?:\s+(?&id))++
  • )
  • |
  • (?'duration'\d+)
  • \s*+d
  • )\s*+
  • (?(DEFINE)
  • (?'id'[^\s\d,][^\s,]*+) # assume digit as lead caracter is illegal
  • (?'date'\d\d\d\d(?:-\d\d(?:-\d\d)?+)?+)
  • )
  • $/x
  • or defined( $+{comment} )
  • and push @newcode, "${indent}$_"
  • and next
  • or die "unhandled syntax on line $.: $_";
  • defined( $+{active} )
  • or defined( $+{done} )
  • or defined( $+{crit} )
  • and die "unhandled tag on line $.: $_";
  • my $task = "${indent}\[$+{title}]";
  • my $taskref = $task;
  • # optional 3rd item
  • if ( $+{taskID} ) {
  • $task .= " as [$+{taskID}]";
  • $taskref = "${indent}\[$+{taskID}]";
  • }
  • if ( defined( $+{afterTaskIDs} ) ) {
  • my @reqs = split ' ', $+{afterTaskIDs};
  • if ( $+{milestone} ) {
  • push @newcode, "$task happens at [$_]'s end" for @reqs;
  • }
  • elsif ( $+{endDate} ) {
  • push @newcode, "$task ends $+{endDate}";
  • push( @newcode, "$taskref starts at [$_]'s end" ) for @reqs;
  • }
  • elsif ( defined( $+{untilTaskIDs} ) ) {
  • my @reqsEnd = split ' ', $+{untilTaskIDs};
  • push @newcode, "$task ends at [$_]'s end" for @reqsEnd;
  • push( @newcode, "$taskref starts at [$_]'s end" ) for @reqs;
  • }
  • else {
  • push @newcode, "$task requires $+{duration} days";
  • push( @newcode, "$taskref starts at [$_]'s end" ) for @reqs;
  • }
  • }
  • else {
  • if ( $+{milestone} ) {
  • push @newcode, "$task happens $+{startDate}";
  • }
  • elsif ( $+{endDate} ) {
  • push @newcode,
  • "$task starts $+{startDate} and ends $+{ednDate}";
  • }
  • elsif ( defined( $+{untilTaskIDs} ) ) {
  • my @reqsEnd = split ' ', $+{untilTaskIDs};
  • push @newcode, "$task starts $+{startDate}";
  • push @newcode, "$task ends at [$_]'s end" for @reqsEnd;
  • }
  • else {
  • push @newcode,
  • "$task starts $+{startDate} and requires $+{duration} days";
  • }
  • }
  • }
  • $" = "\n";
  • return "\@start$type\n@newcode\n\@end$type\n";
  • }
  • =encoding UTF-8
  • =head1 AUTHOR
  • Jonas Smedegaard C<< <dr@jones.dk> >>
  • =head1 COPYRIGHT AND LICENSE
  • Copyright © 2024 Jonas Smedegaard
  • This program is free software:
  • you can redistribute it and/or modify it
  • under the terms of the GNU Affero General Public License
  • as published by the Free Software Foundation,
  • either version 3, or (at your option) any later version.
  • This program is distributed in the hope that it will be useful,
  • but WITHOUT ANY WARRANTY;
  • without even the implied warranty
  • of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  • See the GNU Affero General Public License for more details.
  • You should have received a copy
  • of the GNU Affero General Public License along with this program.
  • If not, see <https://www.gnu.org/licenses/>.
  • =cut
  • 1;