home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Linux / Divers / lyx-0.13.2.tar.gz / lyx-0.13.2.tar / lyx-0.13.2 / src / LaTeXFeatures.C < prev    next >
C/C++ Source or Header  |  1998-04-23  |  5KB  |  241 lines

  1. // -*- C++ -*-
  2. /* This file is part of
  3. * ======================================================
  4. *           LyX, The Document Processor
  5. *        
  6. *           Copyright (C) 1995 Matthias Ettrich
  7. *           Copyright (C) 1995-1998 the LyX Team.
  8. *
  9. *======================================================*/
  10.  
  11. #include <config.h>
  12.  
  13. #ifdef __GNUG__
  14. #pragma implementation "LaTeXFeatures.h"
  15. #endif
  16.  
  17. #include "LString.h"
  18. #include "error.h"
  19. #include "lyx_sty.h"
  20. #include "lyxrc.h"
  21. #include "LaTeXFeatures.h"
  22. #include "bufferparams.h"
  23. #include "layout.h"
  24.  
  25. extern LyXRC* lyxrc;
  26.  
  27. LaTeXFeatures::LaTeXFeatures(int n) 
  28. {
  29.     // packages
  30.     color = false;
  31.     graphics = false;
  32.     setspace = false;
  33.     makeidx = false;
  34.     verbatim = false;
  35.     longtable = false;
  36.     algorithm = false;
  37.     rotating = false;
  38.     amssymb = false;
  39.     latexsym = false;
  40.     pifont = false;
  41.     subfigure = false;
  42.     floatflt = false;
  43.  
  44.     // commands
  45.     lyx = false;
  46.     lyxline = false;
  47.     noun = false;
  48.  
  49.     // quotes
  50.     quotesinglbase = false;
  51.     quotedblbase = false;
  52.     guilsinglleft = false;
  53.     guilsinglright = false;
  54.     guillemotleft = false;
  55.     guillemotright = false;
  56.  
  57.     // Math mode
  58.     amsstyle = false;
  59.     binom = false;
  60.     boldsymbol = false;
  61.     
  62.     // special features
  63.     LyXParagraphIndent = false;
  64.     NeedLyXFootnoteCode = false;
  65.     NeedLyXMinipageIndent = false;
  66.  
  67.     // layouts
  68.     layout = new bool[n];
  69.     for (int i = n; i--;) 
  70.         layout[i] = false;
  71. }
  72.  
  73.  
  74. LString LaTeXFeatures::getPackages(BufferParams const ¶ms)
  75. {
  76.     LString packages;
  77.  
  78.     // color.sty
  79.     if (color) {
  80.         if (params.graphicsDriver == "default")
  81.             packages +="\\usepackage{color}\n";
  82.         else
  83.             packages += "\\usepackage[" 
  84.                 + params.graphicsDriver + "]{color}\n";
  85.     }
  86.         
  87.     // makeidx.sty
  88.     if (makeidx) {
  89.         packages += "\\usepackage{makeidx}\n\\makeindex\n";
  90.     }
  91.  
  92.     // graphics.sty
  93.     if (graphics && params.graphicsDriver != "none") {
  94.         if (params.graphicsDriver == "default")
  95.             packages += "\\usepackage{graphics}\n";
  96.         else
  97.             packages += "\\usepackage[" 
  98.                 + params.graphicsDriver + "]{graphics}\n";
  99.     }
  100.  
  101.     //verbatim.sty
  102.     if (verbatim)
  103.         packages += "\\usepackage{verbatim}\n";
  104.  
  105.     if (algorithm) {
  106.         packages += "\\usepackage{algorithm}\n";
  107.     }
  108.  
  109.     // setspace.sty
  110.     if ((params.spacing.getSpace() != Spacing::Single)
  111.         || setspace) {
  112.         packages += "\\usepackage{setspace}\n";
  113.     }
  114.     switch (params.spacing.getSpace()) {
  115.     case Spacing::Single:
  116.         // we dont use setspace.sty so dont print anything
  117.         //packages += "\\singlespacing\n";
  118.         break;
  119.     case Spacing::Onehalf:
  120.         packages += "\\onehalfspacing\n";
  121.         break;
  122.     case Spacing::Double:
  123.         packages += "\\doublespacing\n";
  124.         break;
  125.     case Spacing::Other:
  126.         char value[30];
  127.         sprintf(value, "%.2f", params.spacing.getValue());
  128.         packages += LString("\\setstretch{") 
  129.               + value + "\n";
  130.         break;
  131.     }
  132.  
  133.     //longtable.sty
  134.     if (longtable)
  135.         packages += "\\usepackage{longtable}\n";
  136.  
  137.     //rotating.sty
  138.     if (rotating)
  139.         packages += "\\usepackage{rotating}\n";
  140.  
  141.     // amssymb.sty
  142.     if (amssymb)
  143.         packages += "\\usepackage{amssymb}\n";
  144.  
  145.     // latexsym.sty
  146.     if (latexsym)
  147.         packages += "\\usepackage{latexsym}\n";
  148.  
  149.     // pifont.sty
  150.     if (pifont)
  151.         packages += "\\usepackage{pifont}\n";
  152.  
  153.     // subfigure.sty
  154.     if (subfigure)
  155.         packages += "\\usepackage{subfigure}\n";
  156.  
  157.     // floatflt.sty
  158.     if (floatflt)
  159.         packages += "\\usepackage{floatflt}\n";
  160.  
  161.     return packages;
  162. }
  163.  
  164.  
  165. LString LaTeXFeatures::getMacros(BufferParams const & /* params */)
  166. {
  167.     LString macros;
  168.  
  169.     // always include this
  170.     if (true || lyx) 
  171.         macros += lyx_def + '\n';
  172.  
  173.     if (lyxline) 
  174.         macros += lyxline_def + '\n';
  175.  
  176.     if (noun) {
  177.         macros += noun_def + '\n';
  178.     }
  179.  
  180.     // quotes. 
  181.     if (quotesinglbase)
  182.         macros += quotesinglbase_def + '\n';
  183.     if (quotedblbase)
  184.         macros += quotedblbase_def + '\n';
  185.     if (guilsinglleft)
  186.         macros += guilsinglleft_def + '\n';
  187.     if (guilsinglright)
  188.         macros += guilsinglright_def + '\n';
  189.     if (guillemotleft)
  190.         macros += guillemotleft_def + '\n';
  191.     if (guillemotright)
  192.         macros += guillemotright_def + '\n';
  193.     
  194.         // Math mode    
  195.     if (boldsymbol && !amsstyle)
  196.         macros += boldsymbol_def + '\n';
  197.     if (binom && !amsstyle)
  198.         macros += binom_def + '\n';
  199.  
  200.     // other
  201.         if (NeedLyXMinipageIndent) 
  202.         macros += minipageindent_def;
  203.         if (LyXParagraphIndent) 
  204.         macros += paragraphindent_def;
  205.         if (NeedLyXFootnoteCode) 
  206.         macros += floatingfootnote_def;
  207.  
  208.     return macros;
  209. }
  210.  
  211.  
  212. LString LaTeXFeatures::getTClassPreamble(BufferParams const ¶ms)
  213. {
  214.     // the text class specific preamble 
  215.     LyXTextClass *tclass = lyxstyle.TextClass(params.textclass);
  216.     LString tcpreamble = tclass->preamble;
  217.  
  218.     int l;
  219.     for (l = 0 ; l < tclass->number_of_defined_layouts ; l++) {
  220.         if (layout[l] 
  221.             && !tclass->style[l].preamble.empty())
  222.             tcpreamble += tclass->style[l].preamble;
  223.     }
  224.  
  225.     return tcpreamble;
  226. }    
  227.  
  228.  
  229. void LaTeXFeatures::showStruct(BufferParams ¶ms) {
  230.     lyxerr.print("LyX needs the following commands when LaTeXing:");
  231.     // packs
  232.     lyxerr.print("***** Packages:");
  233.     lyxerr.print(getPackages(params));
  234.     lyxerr.print("***** Macros:");
  235.     lyxerr.print(getMacros(params));
  236.     lyxerr.print("***** Textclass stuff:");
  237.     lyxerr.print(getTClassPreamble(params));
  238.     lyxerr.print("***** done.");
  239. }
  240.