#!/usr/bin/perl =head1 NAME timeline - Program to draw an SVG timeline diagram from events defined in a file =head1 SYNOPSIS $ timeline list_of_events.txt > timeline.svg =head1 DESCRIPTION A program to produce SVG timeline diagrams from events defined in a file. This program reads data from a file given on the command line and writes an SVG document to C<STDOUT>. =head2 Input Data The program reads input data from a tab-separated file. Each line in the file represents a single event in the timeline - which will be represented by a coloured rectangle in the diagram. Each line in the file requires three columns of data: a text string (to be used as the label for the event), a start year and an end year. There can also be an optional fourth column which is a colour for the background of the rectangle representing the event. This colour can be a colour name (e.g. C<red>) or an RGB string as recognised by SVG (e.g. C<rgb(255,0,0)>). An example input file might be: World War I 1914 1918 World War II 1939 1945 Or, with colours included: World War I 1914 1918 red World War II 1939 1940 blue =head2 Command Line Options The program takes three command line options. This are all options. =over 4 =item years_per_grid The number of years between grid lines in the output. The default value is ten, which gives a line every decade. =item width This will be inserted as the C<width> attribute of the top-level SVG element in the output. The default is C<100%>. =item height This will be inserted as the C<height> attribute of the top-level SVG element in the output. The default is C<100%>. =back =cut use strict; use warnings; use 5.010; use List::Util qw[min max]; use Getopt::Long; use SVG::Timeline; my %opts; GetOptions( \%opts, 'years_per_grid=i', 'width=s', 'height=s', ); my $timeline = SVG::Timeline->new(%opts); while (<>) { chomp; my %rec; @rec{qw[text start end colour]} = split /\t/; $timeline->add_event(\%rec); } say $timeline->draw; =head1 AUTHOR Dave Cross <dave@perlhacks.com> =head1 COPYRIGHT AND LICENCE Copyright (c) 2017, Magnum Solutions Ltd. All Rights Reserved. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut