Blame |
Last modification |
View Log
| RSS feed
## 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;