mirror of
https://github.com/tildearrow/furnace.git
synced 2024-11-18 10:35:11 +00:00
243 lines
6 KiB
Perl
243 lines
6 KiB
Perl
|
## Lout output
|
||
|
# Copyright (C) 1993-1995 Ian Jackson.
|
||
|
|
||
|
# This file is free software; you can redistribute it and/or modify
|
||
|
# it under the terms of the GNU General Public License as published by
|
||
|
# the Free Software Foundation; either version 2, or (at your option)
|
||
|
# any later version.
|
||
|
|
||
|
# It 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 General Public License for more details.
|
||
|
|
||
|
# You should have received a copy of the GNU General Public License
|
||
|
# along with GNU Emacs; see the file COPYING. If not, write to
|
||
|
# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||
|
# Boston, MA 02111-1307, USA.
|
||
|
|
||
|
# (Note: I do not consider works produced using these BFNN processing
|
||
|
# tools to be derivative works of the tools, so they are NOT covered
|
||
|
# by the GPL. However, I would appreciate it if you credited me if
|
||
|
# appropriate in any documents you format using BFNN.)
|
||
|
|
||
|
sub lout_init {
|
||
|
open(LOUT,">$prefix.lout");
|
||
|
chop($dprint= `date '+%d %B %Y'`);
|
||
|
$dprint =~ s/^0//;
|
||
|
}
|
||
|
|
||
|
sub lout_startup {
|
||
|
local ($lbs) = &lout_sanitise($user_brieftitle);
|
||
|
print LOUT <<END;
|
||
|
\@SysInclude{ fontdefs }
|
||
|
\@SysInclude{ langdefs }
|
||
|
\@SysInclude{ dl }
|
||
|
\@SysInclude{ docf }
|
||
|
\@Use { \@DocumentLayout
|
||
|
\@OddTop { \@Null }
|
||
|
\@EvenTop { \@Null }
|
||
|
\@StartOddTop { \@Null }
|
||
|
\@StartEvenTop { \@Null }
|
||
|
\@OddFoot { { $lbs } \@Centre{ - \@PageNum - } \@Right{ $dprint } }
|
||
|
\@EvenFoot { { $lbs } \@Centre{ - \@PageNum - } \@Right{ $dprint } }
|
||
|
\@StartOddFoot { { $lbs } \@Centre{ - \@PageNum - } \@Right{ $dprint } }
|
||
|
\@StartEvenFoot { { $lbs } \@Centre{ - \@PageNum - } \@Right{ $dprint } }
|
||
|
\@ParaGap { 1.70vx }
|
||
|
\@InitialBreak { 1.0fx ragged hyphen }
|
||
|
}
|
||
|
\@Use { \@OrdinaryLayout }
|
||
|
END
|
||
|
$lout_textstatus= 'p';
|
||
|
}
|
||
|
|
||
|
sub lout_pageref {
|
||
|
print LOUT "Q$_[1] (page {\@PageOf{$_[0]}}) ";
|
||
|
&lout_text("\`");
|
||
|
}
|
||
|
|
||
|
sub lout_endpageref {
|
||
|
&lout_text("'");
|
||
|
}
|
||
|
|
||
|
sub lout_finish {
|
||
|
print LOUT "\@End \@Text\n";
|
||
|
close(L);
|
||
|
}
|
||
|
|
||
|
sub lout_startmajorheading {
|
||
|
$lout_styles .= 'h';
|
||
|
print LOUT <<END
|
||
|
\@CNP
|
||
|
{
|
||
|
newpath 0 ysize 0.3 ft sub moveto
|
||
|
xsize 0 rlineto
|
||
|
0 0.2 ft rlineto
|
||
|
xsize neg 0 rlineto
|
||
|
closepath fill
|
||
|
} \@Graphic { //1.6f \@HAdjust \@Heading{
|
||
|
END
|
||
|
;
|
||
|
$endh= "}\n{\@PageMark s_$_[0]}\n/1.0fo\n";
|
||
|
&lout_text($_[0] ? "Section $_[0]. " : '');
|
||
|
}
|
||
|
|
||
|
sub lout_startminorheading {
|
||
|
$lout_styles .= 'h';
|
||
|
print LOUT "//0.2f \@CNP {\@PageMark $_[0]} \@Heading{\n";
|
||
|
$endh= '';
|
||
|
}
|
||
|
|
||
|
sub lout_endheading {
|
||
|
$lout_styles =~ s/.$//; print LOUT "}\n$endh";
|
||
|
$lout_status= 'p';
|
||
|
}
|
||
|
|
||
|
sub lout_endmajorheading { &lout_endheading(@_); }
|
||
|
sub lout_endminorheading { &lout_endheading(@_); }
|
||
|
|
||
|
sub lout_courier {
|
||
|
$lout_styles .= 'f';
|
||
|
print LOUT "{{0.7 1.0} \@Scale {Courier Bold} \@Font {";
|
||
|
}
|
||
|
|
||
|
sub lout_endcourier {
|
||
|
$lout_styles =~ s/.$//; print LOUT "}}";
|
||
|
}
|
||
|
|
||
|
sub lout_italic { $lout_styles .= 'f'; print LOUT "{Slope \@Font {"; }
|
||
|
sub lout_enditalic { $lout_styles =~ s/.$//; print LOUT "}}"; }
|
||
|
|
||
|
sub lout_startindent { $lout_styles .= 'i'; print LOUT "\@IndentedDisplay {\n"; }
|
||
|
|
||
|
sub lout_endindent {
|
||
|
&lout_endpara;
|
||
|
$lout_styles =~ s/.$//; print LOUT "}\n\@LP\n";
|
||
|
}
|
||
|
|
||
|
sub lout_startpackedlist { $lout_plc=-1; }
|
||
|
sub lout_endpackedlist { &lout_newline if !$lout_plc; }
|
||
|
sub lout_packeditem {
|
||
|
&lout_newline if !$lout_plc;
|
||
|
&lout_tab(($lout_plc>0)*40+5);
|
||
|
$lout_plc= !$lout_plc;
|
||
|
}
|
||
|
|
||
|
sub lout_startlist {
|
||
|
&lout_endpara;
|
||
|
print LOUT "\@RawIndentedList style {\@Bullet} indent {0.5i} gap {1.1vx}\n";
|
||
|
$lout_styles .= 'l';
|
||
|
$lout_status= '';
|
||
|
}
|
||
|
|
||
|
sub lout_endlist {
|
||
|
&lout_endpara;
|
||
|
print LOUT "\@EndList\n\n";
|
||
|
$lout_styles =~ s/.$//;
|
||
|
}
|
||
|
|
||
|
sub lout_item {
|
||
|
&lout_endpara;
|
||
|
print LOUT "\@ListItem{";
|
||
|
$lout_styles.= 'I';
|
||
|
}
|
||
|
|
||
|
sub lout_startindex {
|
||
|
print LOUT "//0.0fe\n";
|
||
|
}
|
||
|
|
||
|
sub lout_endindex {
|
||
|
$lout_status='p';
|
||
|
}
|
||
|
|
||
|
sub lout_startindexmainitem {
|
||
|
$lout_marker= $_[0];
|
||
|
$lout_status= '';
|
||
|
print LOUT "//0.3vx Bold \@Font \@HAdjust { \@HContract { { $_[1] } |3cx {";
|
||
|
$lout_iiendheight= '1.00';
|
||
|
$lout_styles .= 'X';
|
||
|
}
|
||
|
|
||
|
sub lout_startindexitem {
|
||
|
$lout_marker= $_[0];
|
||
|
print LOUT "\@HAdjust { \@HContract { { $_[1] } |3cx {";
|
||
|
$lout_iiendheight= '0.95';
|
||
|
$lout_styles .= 'X';
|
||
|
}
|
||
|
|
||
|
sub lout_endindexitem {
|
||
|
print LOUT "} } |0c \@PageOf { $lout_marker } } //${lout_iiendheight}vx\n";
|
||
|
$lout_styles =~ s/.$//;
|
||
|
}
|
||
|
|
||
|
sub lout_email { &lout_courier; &lout_text('<'); }
|
||
|
sub lout_endemail { &lout_text('>'); &lout_endcourier; }
|
||
|
|
||
|
sub lout_ftpon { &lout_courier; } sub lout_endftpon { &lout_endcourier; }
|
||
|
sub lout_ftpin { &lout_courier; } sub lout_endftpin { &lout_endcourier; }
|
||
|
sub lout_docref { } sub lout_enddocref { }
|
||
|
sub lout_ftpsilent { $lout_ignore++; }
|
||
|
sub lout_endftpsilent { $lout_ignore--; }
|
||
|
|
||
|
sub lout_newsgroup { &lout_courier; }
|
||
|
sub lout_endnewsgroup { &lout_endcourier; }
|
||
|
|
||
|
sub lout_text {
|
||
|
return if $lout_ignore;
|
||
|
$lout_status= 'p';
|
||
|
$_= &lout_sanitise($_[0]);
|
||
|
s/ $/\n/ unless $lout_styles =~ m/[fhX]/;
|
||
|
print LOUT $_;
|
||
|
}
|
||
|
|
||
|
sub lout_tab {
|
||
|
local ($size) = $_[0]*0.5;
|
||
|
print LOUT " |${size}ft ";
|
||
|
}
|
||
|
|
||
|
sub lout_newline {
|
||
|
print LOUT " //1.0vx\n";
|
||
|
}
|
||
|
|
||
|
sub lout_sanitise {
|
||
|
local ($in) = @_;
|
||
|
local ($out);
|
||
|
$in= ' '.$in.' ';
|
||
|
$out='';
|
||
|
while ($in =~ m/(\s)(\S*[\@\/|\\\"\^\&\{\}\#]\S*)(\s)/) {
|
||
|
$out .= $`.$1;
|
||
|
$in = $3.$';
|
||
|
$_= $2;
|
||
|
s/[\\\"]/\\$&/g;
|
||
|
$out .= '"'.$_.'"';
|
||
|
}
|
||
|
$out .= $in;
|
||
|
$out =~ s/^ //; $out =~ s/ $//;
|
||
|
$out;
|
||
|
}
|
||
|
|
||
|
sub lout_endpara {
|
||
|
return if $lout_status eq '';
|
||
|
if ($lout_styles eq '') {
|
||
|
print LOUT "\@LP\n\n";
|
||
|
} elsif ($lout_styles =~ s/I$//) {
|
||
|
print LOUT "}\n";
|
||
|
}
|
||
|
$lout_status= '';
|
||
|
}
|
||
|
|
||
|
sub lout_startverbatim {
|
||
|
print LOUT "//0.4f\n\@RawIndentedDisplay lines \@Break".
|
||
|
" { {0.7 1.0} \@Scale {Courier Bold} \@Font {\n";
|
||
|
}
|
||
|
|
||
|
sub lout_verbatim {
|
||
|
$_= $_[0];
|
||
|
s/^\s*//;
|
||
|
print LOUT &lout_sanitise($_),"\n";
|
||
|
}
|
||
|
|
||
|
sub lout_endverbatim { print LOUT "}\n}\n//0.4f\n"; }
|
||
|
|
||
|
1;
|