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 / bufferparams.C < prev    next >
C/C++ Source or Header  |  1998-04-23  |  8KB  |  302 lines

  1. /* This file is part of
  2. * ======================================================
  3. *           LyX, The Document Processor
  4. *      
  5. *        Copyright (C) 1995 Matthias Ettrich
  6. *           Copyright (C) 1995-1998 The LyX Team.
  7. *
  8. *======================================================*/
  9.  
  10. #include <config.h>
  11. #include <stdlib.h>
  12.  
  13. #ifdef __GNUG__
  14. #pragma implementation "bufferparams.h"
  15. #endif
  16.  
  17. #include "bufferparams.h"
  18. #include "tex-strings.h"
  19. #include "layout.h"
  20. #include "vspace.h"
  21. #include "error.h"
  22. #include "lyxlib.h"
  23.  
  24. //     $Id: bufferparams.C,v 1.1.1.1 1998/04/23 16:02:49 larsbj Exp $    
  25.  
  26. #if !defined(lint) && !defined(WITH_WARNINGS)
  27. static char vcid[] = "$Id: bufferparams.C,v 1.1.1.1 1998/04/23 16:02:49 larsbj Exp $";
  28. #endif /* lint */
  29.  
  30.  
  31. BufferParams::BufferParams()
  32. {
  33.     paragraph_separation = LYX_PARSEP_INDENT;
  34.     defskip = VSpace::MEDSKIP; 
  35.     quotes_language = InsetQuotes::EnglishQ;
  36.     quotes_times = InsetQuotes::DoubleQ;
  37.     fontsize = "default";
  38.     textclass = 0; 
  39.         /*  PaperLayout */
  40.     papersize = PAPER_DEFAULT;
  41.         papersize2 = VM_PAPER_DEFAULT; /* DEFAULT */
  42.         paperpackage = PACKAGE_NONE;
  43.     orientation = ORIENTATION_PORTRAIT;
  44.         use_geometry = false;
  45.         use_amsmath = false;
  46.     secnumdepth = 3;
  47.     tocdepth = 3;
  48.     language = "default";
  49.     fonts = "default";
  50.     inputenc = "default";
  51.     graphicsDriver = "default";
  52.     sides = 1;
  53.     columns = 1;
  54.     pagestyle = "default";
  55.     for(int iter = 0; iter < 4; iter++) {
  56.         user_defined_bullets[iter] = temp_bullets[iter] 
  57.                                = ITEMIZE_DEFAULTS[iter];
  58.     }
  59.     allowAccents=false;
  60. }
  61.  
  62.  
  63. void BufferParams::Copy(BufferParams const &p)
  64. {
  65.     paragraph_separation = p.paragraph_separation;
  66.     defskip = p.defskip;
  67.     quotes_language = p.quotes_language;
  68.     quotes_times = p.quotes_times;
  69.     fontsize = p.fontsize;
  70.     spacing = p.spacing;
  71.     papersize = p.papersize;
  72.         papersize2 = p.papersize2;
  73.         paperpackage = p.paperpackage;
  74.     orientation = p.orientation;
  75.         use_geometry = p.use_geometry;
  76.         use_amsmath = p.use_amsmath;
  77.         paperwidth = p.paperwidth;
  78.         paperheight = p.paperheight;
  79.         leftmargin = p.leftmargin;
  80.         topmargin = p.topmargin;
  81.         rightmargin = p.rightmargin;
  82.         bottommargin = p.bottommargin;
  83.         headheight = p.headheight;
  84.         headsep = p.headsep;
  85.         footskip = p.footskip;
  86.     secnumdepth = p.secnumdepth;
  87.     tocdepth = p.tocdepth;
  88.     language = p.language;
  89.     fonts = p.fonts;
  90.     inputenc = p.inputenc;
  91.     preamble = p.preamble;
  92.     options = p.options;
  93.     graphicsDriver = p.graphicsDriver;
  94.     textclass = p.textclass;
  95.     
  96.     pagestyle = p.pagestyle;
  97.     // WARNING destructor will deallocate paragraph!!
  98.     //paragraph = p.paragraph; // this is not good and will cause an error somewhere else.
  99.     float_placement = p.float_placement;
  100.     for (int i = 0; i < 4; ++i) {
  101.         temp_bullets[i] = p.temp_bullets[i];
  102.         user_defined_bullets[i] = p.user_defined_bullets[i];
  103.     }
  104.     allowAccents=p.allowAccents;
  105. }
  106.  
  107.  
  108. void BufferParams::writeFile(FILE *file)
  109. {
  110.     // The top of the file is written by the buffer.
  111.     // Prints out the buffer info into the .lyx file given by file
  112.  
  113.      // the textclass
  114.      fprintf(file, "\\textclass %s\n",
  115.          lyxstyle.NameOfClass(textclass).c_str());
  116.     
  117.     // then the the preamble
  118.     if (!preamble.empty()) {
  119.         fprintf(file, "\\begin_preamble\n");
  120.         {
  121.             // remove '\n' from the end of preamble
  122.             preamble.strip('\n');
  123.             
  124.             // write out the whole preamble  in one go
  125.             fwrite(preamble.c_str(),
  126.                    sizeof(char),
  127.                    preamble.length(),
  128.                    file);
  129.             fprintf(file, "\n\\end_preamble\n");
  130.         }
  131.     }
  132.       
  133.     /* the options */ 
  134.     if (!options.empty()) {
  135.         fprintf(file,
  136.             "\\options %s\n",
  137.             options.c_str());
  138.     }
  139.    
  140.     /* then the text parameters */ 
  141.     fprintf(file, "\\language %s\n", language.c_str());
  142.     fprintf(file, "\\inputencoding %s\n", inputenc.c_str());
  143.     fprintf(file, "\\fontscheme %s\n", fonts.c_str());
  144.     fprintf(file, "\\graphics %s\n", graphicsDriver.c_str());
  145.  
  146.     if (!float_placement.empty()) {
  147.         fprintf(file,
  148.             "\\float_placement %s\n",
  149.             float_placement.c_str());
  150.     }
  151.     fprintf(file, "\\paperfontsize %s\n", fontsize.c_str());
  152.  
  153.     spacing.writeFile(file);
  154.  
  155.     fprintf(file, "\\papersize %s\n", string_papersize[papersize2]);
  156.     fprintf(file, "\\paperpackage %s\n",
  157.                 string_paperpackages[paperpackage]);
  158.     fprintf(file, "\\use_geometry %d\n",use_geometry);
  159.     fprintf(file, "\\use_amsmath %d\n",use_amsmath);
  160.     fprintf(file, "\\paperorientation %s\n",
  161.         string_orientation[orientation]);
  162.         if (!paperwidth.empty())
  163.             fprintf(file, "\\paperwidth %s\n",
  164.                     VSpace(paperwidth).asLyXCommand().c_str());
  165.         if (!paperheight.empty())
  166.             fprintf(file, "\\paperheight %s\n",
  167.                     VSpace(paperheight).asLyXCommand().c_str());
  168.         if (!leftmargin.empty())
  169.             fprintf(file, "\\leftmargin %s\n",
  170.                     VSpace(leftmargin).asLyXCommand().c_str());
  171.         if (!topmargin.empty())
  172.             fprintf(file, "\\topmargin %s\n",
  173.                     VSpace(topmargin).asLyXCommand().c_str());
  174.         if (!rightmargin.empty())
  175.             fprintf(file, "\\rightmargin %s\n",
  176.                     VSpace(rightmargin).asLyXCommand().c_str());
  177.         if (!bottommargin.empty())
  178.             fprintf(file, "\\bottommargin %s\n",
  179.                     VSpace(bottommargin).asLyXCommand().c_str());
  180.         if (!headheight.empty())
  181.             fprintf(file, "\\headheight %s\n",
  182.                     VSpace(headheight).asLyXCommand().c_str());
  183.         if (!headsep.empty())
  184.             fprintf(file, "\\headsep %s\n",
  185.                     VSpace(headsep).asLyXCommand().c_str());
  186.         if (!footskip.empty())
  187.             fprintf(file, "\\footskip %s\n",
  188.                     VSpace(footskip).asLyXCommand().c_str());
  189.     fprintf(file, "\\secnumdepth %d\n", secnumdepth);
  190.     fprintf(file, "\\tocdepth %d\n", tocdepth);
  191.     fprintf(file, "\\paragraph_separation %s\n",
  192.         string_paragraph_separation[paragraph_separation]);
  193.     fprintf(file, "\\defskip %s\n", defskip.asLyXCommand().c_str());
  194.     fprintf(file, "\\quotes_language %s\n",
  195.         string_quotes_language[quotes_language]);
  196.     switch(quotes_times) {
  197.     case InsetQuotes::SingleQ: 
  198.         fprintf(file, "\\quotes_times 1\n"); break;
  199.     case InsetQuotes::DoubleQ: 
  200.         fprintf(file, "\\quotes_times 2\n"); break;
  201.     }        
  202.     fprintf(file, "\\papercolumns %d\n", columns);
  203.     fprintf(file, "\\papersides %d\n", sides);
  204.     fprintf(file, "\\paperpagestyle %s\n", pagestyle.c_str());
  205.     for (int i = 0; i < 4; ++i) {
  206.         if (user_defined_bullets[i] != ITEMIZE_DEFAULTS[i]) {
  207.             if (user_defined_bullets[i].getFont() != -1) {
  208.                 fprintf(file, "\\bullet %d\n\t%d\n\t%d\n\t%d\n\\end_bullet\n",
  209.                         i,
  210.                         user_defined_bullets[i].getFont(),
  211.                         user_defined_bullets[i].getCharacter(),
  212.                         user_defined_bullets[i].getSize());
  213.             }
  214.             else {
  215.                 fprintf(file, "\\bulletLaTeX %d\n\t%s\n\\end_bullet\n",
  216.                         i,
  217.                         user_defined_bullets[i].c_str());
  218.             }
  219.         }
  220.     }
  221. }
  222.  
  223.  
  224. void BufferParams::useClassDefaults() {
  225.     LyXTextClass *tclass = lyxstyle.TextClass(textclass);
  226.  
  227.     sides = tclass->sides;
  228.     columns = tclass->columns;
  229.     pagestyle = tclass->pagestyle;
  230.     options = tclass->options;
  231.     secnumdepth = tclass->secnumdepth;
  232.     tocdepth = tclass->tocdepth;
  233. }
  234.  
  235.  
  236. void BufferParams::readPreamble(LyXLex &lex)
  237. {
  238.     if (lex.GetString() != "\\begin_preamble")
  239.         lyxerr.print("Error (BufferParams::readPreamble):"
  240.                   "consistency check failed.");
  241.  
  242.     preamble = lex.getLongString("\\end_preamble");
  243. }
  244.  
  245.  
  246. void BufferParams::readLanguage(LyXLex &lex)
  247. {
  248.     LString tmptok;
  249.     LString test;
  250.     int n = 0;
  251.     
  252.     if (!lex.next()) return;
  253.     
  254.     tmptok = lex.GetString();
  255.     // check if tmptok is part of tex_babel in tex-defs.h
  256.     while (true) {
  257.         test = tex_babel[n++];
  258.         
  259.         if (test == tmptok) {
  260.             language = tmptok;
  261.             break;
  262.         }
  263.         else if (test == "") {
  264.             lyxerr.print("Warning: language `"
  265.                       + tmptok + "' not recognized!");
  266.             lyxerr.print("         Setting language to `default'.");
  267.             language = "default";
  268.             break;     
  269.         }      
  270.     }
  271. }
  272.  
  273.  
  274. void BufferParams::readGraphicsDriver(LyXLex &lex)
  275. {
  276.     LString tmptok;
  277.     LString test;
  278.     int n=0;
  279.     
  280.     
  281.     if (!lex.next()) return;
  282.     
  283.     tmptok = lex.GetString();
  284.     // check if tmptok is part of tex_graphics in tex_defs.h
  285.     while (true) {
  286.         test = tex_graphics[n++];
  287.         
  288.         if (test == tmptok) {     
  289.             graphicsDriver = tmptok;
  290.             break;
  291.         }      
  292.         else if (test == "last_item") {
  293.             lex.printError(
  294.                 "Warning: graphics driver `$$Token' not recognized!\n"
  295.                 "         Setting graphics driver to `default'.\n");
  296.             graphicsDriver = "default";
  297.             break;
  298.         }      
  299.     }
  300. }
  301.