home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 8 / CDACTUAL8.iso / docs / linux.faq / linux-fa.sou / linux-fa / m-lout.pl < prev    next >
Encoding:
Text File  |  1995-09-10  |  6.0 KB  |  243 lines

  1. ## Lout output
  2. # Copyright (C) 1993-1995 Ian Jackson.
  3.  
  4. # This file is free software; you can redistribute it and/or modify
  5. # it under the terms of the GNU General Public License as published by
  6. # the Free Software Foundation; either version 2, or (at your option)
  7. # any later version.
  8.  
  9. # It is distributed in the hope that it will be useful,
  10. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. # GNU General Public License for more details.
  13.  
  14. # You should have received a copy of the GNU General Public License
  15. # along with GNU Emacs; see the file COPYING.  If not, write to
  16. # the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  17. # Boston, MA 02111-1307, USA.
  18.  
  19. # (Note: I do not consider works produced using these BFNN processing
  20. # tools to be derivative works of the tools, so they are NOT covered
  21. # by the GPL.  However, I would appreciate it if you credited me if
  22. # appropriate in any documents you format using BFNN.)
  23.  
  24. sub lout_init {
  25.     open(LOUT,">$prefix.lout");
  26.     chop($dprint= `date '+%d %B %Y'`);
  27.     $dprint =~ s/^0//;
  28. }
  29.  
  30. sub lout_startup {
  31.     local ($lbs) = &lout_sanitise($user_brieftitle);
  32.     print LOUT <<END;
  33. \@SysInclude{ fontdefs }
  34. \@SysInclude{ langdefs }
  35. \@SysInclude{ dl }
  36. \@SysInclude{ docf }
  37. \@Use { \@DocumentLayout
  38.   \@OddTop { \@Null }
  39.   \@EvenTop { \@Null }
  40.   \@StartOddTop { \@Null }
  41.   \@StartEvenTop { \@Null }
  42.   \@OddFoot { { $lbs } \@Centre{ - \@PageNum - } \@Right{ $dprint } }
  43.   \@EvenFoot { { $lbs } \@Centre{ - \@PageNum - } \@Right{ $dprint } }
  44.   \@StartOddFoot { { $lbs } \@Centre{ - \@PageNum - } \@Right{ $dprint } }
  45.   \@StartEvenFoot { { $lbs } \@Centre{ - \@PageNum - } \@Right{ $dprint } }
  46.   \@ParaGap { 1.70vx }
  47.   \@InitialBreak { 1.0fx ragged hyphen }
  48. }
  49. \@Use { \@OrdinaryLayout }
  50. END
  51.     $lout_textstatus= 'p';
  52. }
  53.  
  54. sub lout_pageref {
  55.     print LOUT "Q$_[1] (page {\@PageOf{$_[0]}}) ";
  56.     &lout_text("\`");
  57. }
  58.  
  59. sub lout_endpageref {
  60.     &lout_text("'");
  61. }
  62.  
  63. sub lout_finish {
  64.     print LOUT "\@End \@Text\n";
  65.     close(L);
  66. }
  67.  
  68. sub lout_startmajorheading {
  69.     $lout_styles .= 'h';
  70.     print LOUT <<END
  71. \@CNP
  72. {
  73.   newpath   0  ysize 0.3 ft sub  moveto
  74.             xsize  0  rlineto
  75.             0  0.2 ft  rlineto
  76.             xsize neg  0  rlineto
  77.   closepath fill
  78. } \@Graphic { //1.6f \@HAdjust \@Heading{
  79. END
  80.     ;
  81.     $endh= "}\n{\@PageMark s_$_[0]}\n/1.0fo\n";
  82.     &lout_text($_[0] ? "Section $_[0].  " : '');
  83. }
  84.  
  85. sub lout_startminorheading {
  86.     $lout_styles .= 'h';
  87.     print LOUT "//0.2f \@CNP {\@PageMark $_[0]} \@Heading{\n";
  88.     $endh= '';
  89. }
  90.  
  91. sub lout_endheading {
  92.     $lout_styles =~ s/.$//; print LOUT "}\n$endh";
  93.     $lout_status= 'p';
  94. }
  95.  
  96. sub lout_endmajorheading { &lout_endheading(@_); }
  97. sub lout_endminorheading { &lout_endheading(@_); }
  98.  
  99. sub lout_courier {
  100.     $lout_styles .= 'f';
  101.     print LOUT "{{0.7 1.0} \@Scale {Courier Bold} \@Font {";
  102. }
  103.  
  104. sub lout_endcourier {
  105.     $lout_styles =~ s/.$//; print LOUT "}}";
  106. }
  107.  
  108. sub lout_italic { $lout_styles .= 'f'; print LOUT "{Slope \@Font {"; }
  109. sub lout_enditalic { $lout_styles =~ s/.$//; print LOUT "}}"; }
  110.  
  111. sub lout_startindent { $lout_styles .= 'i'; print LOUT "\@IndentedDisplay {\n"; }
  112.  
  113. sub lout_endindent {
  114.     &lout_endpara;
  115.     $lout_styles =~ s/.$//; print LOUT "}\n\@LP\n";
  116. }
  117.  
  118. sub lout_startpackedlist { $lout_plc=-1; }
  119. sub lout_endpackedlist { &lout_newline if !$lout_plc; }
  120. sub lout_packeditem {
  121.     &lout_newline if !$lout_plc;
  122.     &lout_tab(($lout_plc>0)*40+5);
  123.     $lout_plc= !$lout_plc;
  124. }
  125.  
  126. sub lout_startlist {
  127.     &lout_endpara;
  128.     print LOUT "\@RawIndentedList style {\@Bullet} indent {0.5i} gap {1.1vx}\n";
  129.     $lout_styles .= 'l';
  130.     $lout_status= '';
  131. }
  132.  
  133. sub lout_endlist {
  134.     &lout_endpara;
  135.     print LOUT "\@EndList\n\n";
  136.     $lout_styles =~ s/.$//;
  137. }
  138.  
  139. sub lout_item {
  140.     &lout_endpara;
  141.     print LOUT "\@ListItem{";
  142.     $lout_styles.= 'I';
  143. }
  144.  
  145. sub lout_startindex {
  146.     print LOUT "//0.0fe\n";
  147. }
  148.  
  149. sub lout_endindex {
  150.     $lout_status='p';
  151. }
  152.  
  153. sub lout_startindexmainitem {
  154.     $lout_marker= $_[0];
  155.     $lout_status= '';
  156.     print LOUT "//0.3vx Bold \@Font \@HAdjust { \@HContract { { $_[1] } |3cx {";
  157.     $lout_iiendheight= '1.00';
  158.     $lout_styles .= 'X';
  159. }
  160.  
  161. sub lout_startindexitem {
  162.     $lout_marker= $_[0];
  163.     print LOUT "\@HAdjust { \@HContract { { $_[1] } |3cx {";
  164.     $lout_iiendheight= '0.95';
  165.     $lout_styles .= 'X';
  166. }
  167.  
  168. sub lout_endindexitem {
  169.     print LOUT "} } |0c \@PageOf { $lout_marker } } //${lout_iiendheight}vx\n";
  170.     $lout_styles =~ s/.$//;
  171. }
  172.  
  173. sub lout_email { &lout_courier; &lout_text('<'); }
  174. sub lout_endemail { &lout_text('>'); &lout_endcourier; }
  175.  
  176. sub lout_ftpon { &lout_courier; }  sub lout_endftpon { &lout_endcourier; }
  177. sub lout_ftpin { &lout_courier; }  sub lout_endftpin { &lout_endcourier; }
  178. sub lout_docref { }  sub lout_enddocref { }
  179. sub lout_ftpsilent { $lout_ignore++; }
  180. sub lout_endftpsilent { $lout_ignore--; }
  181.  
  182. sub lout_newsgroup { &lout_courier; }
  183. sub lout_endnewsgroup { &lout_endcourier; }
  184.  
  185. sub lout_text {
  186.     return if $lout_ignore;
  187.     $lout_status= 'p';
  188.     $_= &lout_sanitise($_[0]);
  189.     s/ $/\n/ unless $lout_styles =~ m/[fhX]/;
  190.     print LOUT $_;
  191. }
  192.  
  193. sub lout_tab {
  194.     local ($size) = $_[0]*0.5;
  195.     print LOUT " |${size}ft ";
  196. }
  197.  
  198. sub lout_newline {
  199.     print LOUT " //1.0vx\n";
  200. }
  201.  
  202. sub lout_sanitise {
  203.     local ($in) = @_;
  204.     local ($out);
  205.     $in= ' '.$in.' ';
  206.     $out='';
  207.     while ($in =~ m/(\s)(\S*[\@\/|\\\"\^\&\{\}\#]\S*)(\s)/) {
  208.         $out .= $`.$1;
  209.         $in = $3.$';
  210.         $_= $2;
  211.         s/[\\\"]/\\$&/g;
  212.         $out .= '"'.$_.'"';
  213.     }
  214.     $out .= $in;
  215.     $out =~ s/^ //;  $out =~ s/ $//;
  216.     $out;
  217. }
  218.  
  219. sub lout_endpara {
  220.     return if $lout_status eq '';
  221.     if ($lout_styles eq '') {
  222.         print LOUT "\@LP\n\n";
  223.     } elsif ($lout_styles =~ s/I$//) {
  224.         print LOUT "}\n";
  225.     }
  226.     $lout_status= '';
  227. }
  228.  
  229. sub lout_startverbatim {
  230.     print LOUT "//0.4f\n\@RawIndentedDisplay lines \@Break".
  231.                " { {0.7 1.0} \@Scale {Courier Bold} \@Font {\n";
  232. }
  233.  
  234. sub lout_verbatim {
  235.     $_= $_[0];
  236.     s/^\s*//;
  237.     print LOUT &lout_sanitise($_),"\n";
  238. }
  239.  
  240. sub lout_endverbatim { print LOUT "}\n}\n//0.4f\n"; }
  241.  
  242. 1;
  243.