Diff for /gobook.perl between versions 1.3 and 3.4

version 1.3, 2011/01/06 00:14:18 version 3.4, 2017/07/15 00:04:02
Line 1 Line 1
 #! /usr/bin/perl -w  #! /usr/bin/perl -w
   # $Id$
 use XML::Simple;  use XML::Simple;
 use strict;  use strict;
 use PostScript::Simple;  use PostScript::Simple;
 use Text::Wrap;  use Text::Wrap;
   
 $Text::Wrap::columns = 30;  $Text::Wrap::columns = 30;
 my $strips;  #my $strips;
   
 my $xml = "OmLand.xml";  #my $xml = "OmLand.xml";
 if ( defined $xml ){  #if ( defined $xml ){
     $strips = XMLin($xml, KeyAttr => {strip => 'id'});  #    $strips = XMLin($xml, KeyAttr => {strip => 'id'});
 }  #}
   
   my $strips = XMLin('OmLand.gpx');
   
   # create a new PostScript object;
   
 # create a new PostScript object  my $p = new PostScript::Simple(papersize => "A5", 
 my $p = new PostScript::Simple(papersize => "A5",                                    colour => 1,
                           colour => 1,                                       eps => 0,
                           eps => 0,                                     units => "mm");
                           units => "mm",);  
   
 # co-ords are horizontal, vertical. from bottom left corner. 148 x 210  # co-ords are horizontal, vertical. from bottom left corner. 148 x 210
   
Line 53  $p->setcolour(60,28,0); Line 57  $p->setcolour(60,28,0);
 $p->text(35,175, "Land-Out Guide");  $p->text(35,175, "Land-Out Guide");
 $p->setfont("Helvetica", 17);  $p->setfont("Helvetica", 17);
 $p->setcolour("white");  $p->setcolour("white");
 $p->text(12,52, "2nd Edition 3rd Revision 2011");  $p->text(12,52, "5th Edition 2017");
   
 $p->newpage;  $p->newpage;
 # Contents  # Contents
Line 94  $p->text($t1,$v, "Photos by Gavin Wills. Line 98  $p->text($t1,$v, "Photos by Gavin Wills.
 $v -= $ls;  $v -= $ls;
 $p->text($t1,$v, "Text by Phil Plane and Gavin Wills. ");  $p->text($t1,$v, "Text by Phil Plane and Gavin Wills. ");
 $v -= $ls;  $v -= $ls;
 $p->text($t1,$v, "Copyright GlideOmarama.com 2007.");  $p->text($t1,$v, "Copyright GlideOmarama.com 2013.");
 $v -= $ls;  $v -= $ls;
 $p->text($t1,$v, "First Edition published November 2007. ");  $p->text($t1,$v, "First Edition published November 2007.");
 $v -= $ls;  $v -= $ls;
 $p->text($t1,$v, "Second Edition published November 2008. ");  $p->text($t1,$v, "Fifth Edition published February 2017.");
 $v -= $ls;  
 $p->text($t1,$v, "Second Edition 1st Revision published November 2009. ");  
 $p->text(70,5, "(" . $pn++ . ")");  $p->text(70,5, "(" . $pn++ . ")");
   
 my $welcome = q{Produced for Omarama based glider pilots to assist safe emergency landings and satisfactory retrieves, this Guide and the associated South Island Gliding Maps (SIGMap) have been nearly 4 years in the making.  Special thanks to Phil Plane, Chris Streat, Chris Rudge, Malcolm Walls and posthumously to Richard Halstead who started it all.  my $welcome = q{Produced for Omarama based glider pilots to assist safe emergency landings and satisfactory retrieves, this Guide and the associated South Island Gliding Maps (SIGMap) have been nearly 4 years in the making.  Special thanks to Phil Plane, Chris Streat, Chris Rudge, Malcolm Walls and posthumously to Richard Halstead who started it all.
Line 444  $p->text(70,5, "(" . $pn++ . ")"); Line 446  $p->text(70,5, "(" . $pn++ . ")");
   
 # Start the strip pages with pictures:  # Start the strip pages with pictures:
   
 foreach my $stripnum ( sort keys %{$strips->{strip}} ){  foreach my $stripnum ( sort keys %{$strips->{'wpt'}} ){
  if ( $strips->{strip}->{$stripnum}->{gobook} eq "yes" ){   if ( $strips->{'wpt'}->{$stripnum}->{'extensions'}->{gobook} eq "yes" ){
  $strips{$strips->{strip}->{$stripnum}->{name}} = $stripnum;   $strips{$strips->{'wpt'}->{$stripnum}->{'desc'}} = $stripnum;
   
  # create a new page for the pic and data   # create a new page for the pic and data
  $p->newpage;   $p->newpage;
  $p->setcolour("blue");   $p->setcolour("blue");
  $p->setfont("Helvetica", 20);   $p->setfont("Helvetica", 20);
  $p->text($t1,195, $strips->{strip}->{$stripnum}->{name});   $p->text($t1,195, $strips->{'wpt'}->{$stripnum}->{'desc'});
  $p->text($t1+115,195, $stripnum);   $p->text($t1+115,195, $stripnum);
  $p->setcolour("black");   $p->setcolour("black");
  $p->setfont("Helvetica", 14);   $p->setfont("Helvetica", 14);
  if ( defined $strips->{strip}->{$stripnum}->{elev} ){   if ( defined $strips->{'wpt'}->{$stripnum}->{'ele'} ){
   $p->text($t5,195, $strips->{strip}->{$stripnum}->{elev} . 'ft');    $p->text($t5,195, printfeet($strips->{'wpt'}->{$stripnum}->{'ele'}));
  }   }
  if ( defined $strips->{strip}->{$stripnum}->{length} ){   if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'length'} ){
   $p->text($t6,195, $strips->{strip}->{$stripnum}->{length} . 'm');    $p->text($t6,195, $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'length'} . 'm');
  }   }
  $p->setfont("Helvetica", 10);   $p->setfont("Helvetica", 10);
  my $latlng = $strips->{strip}->{$stripnum}->{lat} . " " .    my $latlng = printlat($strips->{'wpt'}->{$stripnum}->{'lat'}) . " " . 
               $strips->{strip}->{$stripnum}->{lng};                printlon($strips->{'wpt'}->{$stripnum}->{'lon'});
  $p->text($t1,190, $latlng);   $p->text($t1,190, $latlng);
  if ( defined $strips->{strip}->{$stripnum}->{slope} ){   if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'slope'} ){
   $p->text($t1 + 45,190, 'Slope: ' . $strips->{strip}->{$stripnum}->{slope});    $p->text($t1 + 45,190, 'Slope: ' . $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'slope'});
  }   }
  if ( defined $strips->{strip}->{$stripnum}->{surface} ){   if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{surface} ){
   $p->text($t5 ,190, 'Sfc: ' . $strips->{strip}->{$stripnum}->{surface});    $p->text($t5 ,190, 'Sfc: ' . $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'surface'});
  }   }
  if ( defined $strips->{strip}->{$stripnum}->{width} ){   if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'width'} ){
   $p->text($t6 ,190, 'Width: ' . $strips->{strip}->{$stripnum}->{width});    $p->text($t6 ,190, 'Width: ' . $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'width'});
  }   }
   
  my $eps = "M" . $stripnum . ".ps";   my $eps = "M" . $stripnum . ".ps";
Line 487  foreach my $stripnum ( sort keys %{$stri Line 489  foreach my $stripnum ( sort keys %{$stri
  else {   else {
   $p->setcolour(255,54,0); # Glide Omarama Orange    $p->setcolour(255,54,0); # Glide Omarama Orange
   $p->setfont("Helvetica", 32);    $p->setfont("Helvetica", 32);
   $p->text({rotate => 45}, $t2 ,20, 'Details in next edition' );    $p->text({rotate => 45}, $t2 ,20, 'No picture yet' );
   $p->setcolour("black");    $p->setcolour("black");
  }   }
  my $v = 185;   my $v = 185;
  $p->setfont("Helvetica", 12);   $p->setfont("Helvetica", 12);
   
  $p->text($t5,$v,"Location:");   $p->text($t5,$v,"Location:");
  if ( defined $strips->{strip}->{$stripnum}->{location} ){   if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'location'} ){
   $v -= 5;    $v -= 5;
   $Text::Wrap::columns = 30;    $Text::Wrap::columns = 30;
   my @para = split (/\n/,wrap('', '', $strips->{strip}->{$stripnum}->{location}));    my @para = split (/\n/,wrap('', '', $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'location'}));
   while (my $ln = shift @para){    while (my $ln = shift @para){
    $p->text($t5,$v, $ln);     $p->text($t5,$v, $ln);
    $v -= 5;     $v -= 5;
Line 507  foreach my $stripnum ( sort keys %{$stri Line 509  foreach my $stripnum ( sort keys %{$stri
  $v -= 10;   $v -= 10;
   
  $p->text($t5,$v,"Comment:");   $p->text($t5,$v,"Comment:");
  if ( defined $strips->{strip}->{$stripnum}->{comment} ){   if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'comment'} ){
   $v -= 5;    $v -= 5;
   $Text::Wrap::columns = 30;    $Text::Wrap::columns = 30;
   if ( $strips->{strip}->{$stripnum}->{comment} =~ /Danger/ ){    if ( $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'comment'} =~ /Danger/ ){
    $p->setcolour("red");     $p->setcolour("red");
      # Draw over image ...
      $p->setlinewidth(4);
      $p->arc( 70, 60, 20, 0, 360);
      $p->line(50,40, 90,80);
   }    }
   my @para = split (/\n/,wrap('', '', $strips->{strip}->{$stripnum}->{comment}));    my @para = split (/\n/,wrap('', '', $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'comment'}));
   while (my $ln = shift @para){    while (my $ln = shift @para){
    $p->text($t5,$v, $ln);     $p->text($t5,$v, $ln);
    $v -= 5;     $v -= 5;
Line 524  foreach my $stripnum ( sort keys %{$stri Line 530  foreach my $stripnum ( sort keys %{$stri
  $v -= 10;   $v -= 10;
   
  $p->text($t5,$v,"Alternate:");   $p->text($t5,$v,"Alternate:");
  if ( defined $strips->{strip}->{$stripnum}->{alternate} ){   if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'alternate'} ){
   $v -= 5;    $v -= 5;
   $Text::Wrap::columns = 30;    $Text::Wrap::columns = 30;
   my @para = split (/\n/,wrap('', '', $strips->{strip}->{$stripnum}->{alternate}));    my @para = split (/\n/,wrap('', '', $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'alternate'}));
   while (my $ln = shift @para){    while (my $ln = shift @para){
    $p->text($t5,$v, $ln);     $p->text($t5,$v, $ln);
    $v -= 5;     $v -= 5;
Line 541  foreach my $stripnum ( sort keys %{$stri Line 547  foreach my $stripnum ( sort keys %{$stri
 startpage();  startpage();
 $v = 185;  $v = 185;
   
 foreach my $stripnum ( sort keys %{$strips->{strip}} ){  foreach my $stripnum ( sort keys %{$strips->{'wpt'}} ){
  if ( $strips->{strip}->{$stripnum}->{gobook} eq "yes" ){   if ( $strips->{'wpt'}->{$stripnum}->{'extensions'}->{gobook} eq "yes" ){
   $strips{$strips->{strip}->{$stripnum}->{name}} = $stripnum;    $strips{$strips->{'wpt'}->{$stripnum}->{'desc'}} = $stripnum;
   $p->setfont("Helvetica-Bold", 12);    $p->setfont("Helvetica-Bold", 12);
   $p->text($t1,$v, $stripnum);    $p->text($t1,$v, $stripnum);
   $p->text($t2,$v, $strips->{strip}->{$stripnum}->{name});    $p->text($t2,$v, $strips->{'wpt'}->{$stripnum}->{'desc'});
   $p->setfont("Helvetica", 12);    $p->setfont("Helvetica", 12);
   $v -= 8;    $v -= 8;
   
   $p->text($t1,$v,"Station:");    $p->text($t1,$v,"Station:");
   if ( defined $strips->{strip}->{$stripnum}->{station} ){    if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'station'} ){
    $p->text($t2,$v, $strips->{strip}->{$stripnum}->{station});     $p->text($t2,$v, $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'station'});
   }    }
   $v -= 6;    $v -= 6;
   
   $p->text($t1,$v,"Contact:");    $p->text($t1,$v,"Contact:");
   if ( defined $strips->{strip}->{$stripnum}->{contact} ){    if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'contact'} ){
    $Text::Wrap::columns = 50;     $Text::Wrap::columns = 50;
    my @para = split (/\n/,wrap('', '', $strips->{strip}->{$stripnum}->{contact}));     my @para = split (/\n/,wrap('', '', $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'contact'}));
    while (my $ln = shift @para){     while (my $ln = shift @para){
     $p->text($t2,$v, $ln);      $p->text($t2,$v, $ln);
     $v -= 6;      $v -= 6;
Line 568  foreach my $stripnum ( sort keys %{$stri Line 574  foreach my $stripnum ( sort keys %{$stri
   }    }
   $v -= 6;    $v -= 6;
   $p->text($t1,$v,"Retrieve:");    $p->text($t1,$v,"Retrieve:");
   if ( defined $strips->{strip}->{$stripnum}->{retrieve} ){    if ( defined $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'retrieve'} ){
    $p->text($t2,$v, $strips->{strip}->{$stripnum}->{retrieve});     $p->text($t2,$v, $strips->{'wpt'}->{$stripnum}->{'extensions'}->{'retrieve'});
   }    }
   $v -= 8;    $v -= 8;
   
Line 601  foreach my $stripname ( sort keys %strip Line 607  foreach my $stripname ( sort keys %strip
 # write the output to a file  # write the output to a file
 $p->output("gobook.ps");  $p->output("gobook.ps");
   
   # use ghostscript to convert to pdf ...
   `gs -q -dNOPAUSE -dSAFER -dBATCH -sDEVICE=pdfwrite -sOutputFile=gobook.pdf gobook.ps`;
   
 exit 0;  exit 0;
   
 sub startpage {  sub startpage {
Line 618  sub newindex { Line 627  sub newindex {
  $p->setfont("Helvetica", 12);   $p->setfont("Helvetica", 12);
 }  }
   
   sub printlat {
    my $latitude = shift(@_);
    my $minutes = 0;
    my $degrees = 0;
    my $northing = "";
   
    if ($latitude < 0) {
     $northing = "S";
     $latitude = 0 - $latitude;
    }
    else{
     $northing = "N";
    }
    $degrees = int($latitude);
    $minutes = ($latitude - $degrees) * 60;
    return sprintf("%d:%06.3f%s",$degrees,$minutes,$northing);
   }
   
   sub printlon {
    my $longitude = shift(@_);
    my $minutes = 0;
    my $degrees = 0;
    my $westing = "";
    if ($longitude < 0) {
     $westing = "W";
     $longitude = 0 - $longitude;
    }
    else{
     $westing = "E";
    }
    $degrees = int($longitude);
    $minutes = ($longitude - $degrees) * 60;
    return sprintf("%d:%06.3f%s",$degrees,$minutes,$westing);
   }
   
   sub printfeet {
    my $meters = shift(@_);
    return sprintf("%d ft", int($meters * 3.2808399));
   }

Removed from v.1.3  
changed lines
  Added in v.3.4


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>