#!/usr/bin/perl # text2xfig.pl - A Perl program for translating plain text to Xfig format # http://www.cs.dal.ca/~vlado/srcperl/text2xfig.pl # Copyright 2007 Vlado Keselj http://www.cs.dal.ca/~vlado # Limitations: Probably does not work for all characters. # $Id: text2xfig.pl,v 1.3 2007/06/19 17:00:34 vlado Exp $ $Version = sprintf "%d.%d", q$Revision: 1.3 $ =~ /(\d+)/g; my $input = join('',<>); print &preamble; my $row=1, $col=1; $_ = $input; while ($_ ne '') { # find sequences of non-space and put them if (/^\n/) { $_=$'; $row++; $col=1; } elsif (/^(\S+)/) { $_=$'; print &print_text($&, r=>$row, c=>$col); $col+=length($&); } elsif (/^( +)/) { $_=$'; $col+=length($&); } elsif (/^\t/) { $_=$'; $col++; $col++ while ($col%8 != 0); } else { die ">>>$_" } } exit(0); # END RUN sub print_text { my $text = shift; my %p = @_; my $c = (exists($p{c}) ? $p{c} : 1); # column position my $x = int(0.5+($c-1)*91.2+1500); my $r = (exists($p{r}) ? $p{r} : 1); # row position my $y = ($r-1)*165+1350; #225 for 12pt, 165 for 10pt my $fontsize = 10; my $r = "4 0 0 50 -1"; $r.= " 12"; # font family, 0=Roman 12=Courier $r.= " $fontsize 0.0000 4 135"; $r.= " ".(105*length($text)); # 90*number of chars?, 105 for fixed $text =~ s/\\/\\\\/g; $r.=" $x $y $text\\001\n"; return $r; } sub preamble { my $r = "#FIG 3.2\n"; # http://www.xfig.org/userman/fig-format.html $r.= "Portrait\n" # "Landscape" or "Portrait" ."Center\n" # justification ("Center" or "Flush Left") ; $r.= << 'EOT'; Metric Letter 100.00 Single -2 1200 2 EOT return $r; } __END__ =head1 NAME text2xfig.pl - Translate plain text to Xfig format, word-by-word =head1 SYNOPIS text2xfig.pl in.txt > out.fig =head1 DESCRIPTION Translating plain text into Xfig format. Each word is positioned separately. Initial stage. There could be bugs. =head1 PREREQUISITES No prerequisites, but you need xfig to see and edit the output, and to produce other formats. =head1 SCRIPT CATEGORIES Xfig Misc =head1 COPYRIGHT Copyright 2007 Vlado Keselj F This script is provided "as is" without expressed or implied warranty. This is free software; you can redistribute it and/or modify it under the same terms as Perl itself. The latest version can be found at F. =cut