home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / c / c2man-2.0pl33.lha / c2man-2.0 / latex.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-01-24  |  4.0 KB  |  210 lines

  1. /* $Id: latex.c,v 2.0.1.8 1994/09/16 05:55:23 greyham Exp $
  2.  * functions for LaTeX style output.
  3.  */
  4. #include "c2man.h"
  5. #include "manpage.h"
  6. #include "output.h"
  7.  
  8. static boolean verbatim = FALSE;    /* skip quoting in verbatim section */
  9.  
  10. void latex_char(c)
  11. const int c;
  12. {
  13.     int i;
  14.  
  15.     switch (c)
  16.     {
  17.     case '$':
  18.     case '#':
  19.     case '&':
  20.     case '^':
  21.     case '_':
  22.     if (!verbatim)
  23.         putchar('\\');
  24.     putchar(c);
  25.     break;
  26.     case '>':
  27.     case '<':
  28.     if (!verbatim)
  29.         putchar('$');
  30.     putchar(c);
  31.     if (!verbatim)
  32.         putchar('$');
  33.     break;
  34.     case '\t':
  35.     for (i = 0; i < NUM_TAB_SPACES; i++)
  36.         putchar(' ');
  37.     break;
  38.     default:
  39.     putchar(c);
  40.     break;
  41.     }
  42. }
  43.  
  44. void latex_text(text)
  45. const char *text;
  46. {
  47.     while(*text)
  48.     latex_char(*text++);
  49. }
  50.  
  51. void latex_comment() { put_string("% "); }
  52.  
  53. void latex_header(firstpage, input_files, grouped, name, section)
  54. ManualPage *firstpage;
  55. int input_files;
  56. boolean grouped;
  57. const char *name;
  58. const char *section;
  59. {
  60.     if (make_embeddable) return;
  61.  
  62.     put_string("\\documentstyle{article}\n");
  63.     output_warning();
  64.     put_string("\\begin{document}\n");
  65. }
  66.  
  67. void latex_dash()    { put_string("---"); }
  68.  
  69. void latex_section(name)
  70. const char *name;
  71. {
  72.     put_string("\\section*{");
  73.     latex_text(name);
  74.     put_string("}\n");
  75. }
  76.  
  77. void latex_sub_section(name)
  78. const char *name;
  79. {
  80.     put_string("\\subsection*{");
  81.     latex_text(name);
  82.     put_string("}\n");
  83. }
  84.  
  85. void latex_break_line() { /* put_string("\\newline\n"); */ }
  86. void latex_blank_line() { put_string("\n"); }
  87.  
  88. void latex_code_start() { put_string("\\begin{verbatim}\n"); verbatim = TRUE; }
  89. void latex_code_end()    { put_string("\\end{verbatim}\n"); verbatim = FALSE; }
  90.  
  91. void latex_code(text)
  92. const char *text;
  93. {
  94.     put_string("\\verb`");
  95.     put_string(text);
  96.     put_string("`");
  97. }
  98.  
  99. void latex_tag_list_start()    { put_string("\\begin{description}\n"); }
  100. void latex_tag_entry_start()    { put_string("\\item["); }
  101. void latex_tag_entry_end()    { put_string("]\\hfill\\newline\n"); }
  102. void latex_tag_entry_end_extra(text)
  103. const char *text;
  104. {
  105.     put_string("(");
  106.     latex_text(text);
  107.     put_string(")");
  108.     latex_tag_entry_end();
  109. }
  110. void latex_tag_list_end()    { put_string("\\end{description}\n"); }
  111.     
  112. void latex_table_start(longestag)
  113. const char *longestag;
  114. { put_string("\\begin{description}\n"); }
  115.  
  116. void latex_table_entry(name, description)
  117. const char *name;
  118. const char *description;
  119. {
  120.     put_string("\\item[");
  121.     latex_text(name);
  122.     put_string("]\n");
  123.     if (description)
  124.     output_comment(description);
  125.     else
  126.     latex_char('\n');
  127. }
  128.  
  129. void latex_table_end()    { put_string("\\end{description}\n"); }
  130.  
  131. void latex_list_entry(text)
  132. const char *text;
  133. {
  134.     latex_text(text);
  135. }
  136. void latex_list_separator() { put_string(",\n"); }
  137. void latex_list_end()    { latex_char('\n'); }
  138.  
  139. void latex_include(filename)
  140. const char *filename;
  141. {
  142.     put_string("\\include{");
  143.     latex_text(filename);
  144.     put_string("}\n");
  145. }
  146.  
  147. void latex_file_end() { put_string("\\end{document}\n"); }
  148.  
  149. void latex_name(name)
  150. const char *name;
  151. {
  152.     if (name) latex_text(name);
  153.     else      latex_section("NAME");
  154. }
  155.  
  156. void latex_terse_sep()
  157. {
  158.     latex_char(' ');
  159.     latex_dash();
  160.     latex_char(' ');
  161. }
  162.  
  163. void latex_reference(text)
  164. const char *text;
  165. {
  166.     latex_text(text);
  167.     latex_char('(');
  168.     latex_text(manual_section);
  169.     latex_char(')');
  170. }
  171.  
  172.  
  173. struct Output latex_output =
  174. {
  175.     latex_comment,
  176.     latex_header,
  177.     latex_dash,
  178.     latex_section,
  179.     latex_sub_section,
  180.     latex_break_line,
  181.     latex_blank_line,
  182.     latex_code_start,
  183.     latex_code_end,
  184.     latex_code,
  185.     latex_tag_list_start,
  186.     latex_tag_list_end,
  187.     latex_tag_entry_start,
  188.     latex_tag_entry_start,    /* entry_start_extra */
  189.     latex_tag_entry_end,
  190.     latex_tag_entry_end_extra,
  191.     latex_table_start,
  192.     latex_table_entry,
  193.     latex_table_end,
  194.     dummy,        /* latex_indent */
  195.     dummy,        /* latex_list_start */
  196.     latex_list_entry,
  197.     latex_list_separator,
  198.     latex_list_end,
  199.     latex_include,
  200.     latex_file_end,
  201.     latex_text,
  202.     latex_char,
  203.     NULL,        /* latex_parse_option */
  204.     dummy,        /* latex_print_option */
  205.     latex_name,
  206.     latex_terse_sep,
  207.     latex_reference,
  208.     latex_text
  209. };
  210.