]> git.lyx.org Git - lyx.git/blobdiff - src/buffer.C
add missing writeNormal() methods to some insets
[lyx.git] / src / buffer.C
index de4866e3b9b9d6aa9ae4fec9dac6902fe679cb8e..114cb02e3212a7a9efec0fa1e8b8b6a24e191d49 100644 (file)
@@ -32,8 +32,6 @@
 #include <locale>
 #endif
 
-#include <boost/tuple/tuple.hpp>
-
 #ifdef __GNUG__
 #pragma implementation
 #endif
@@ -1342,11 +1340,13 @@ Buffer::parseSingleLyXformat2Token(LyXLex & lex, Paragraph *& par,
 
 // needed to insert the selection
 void Buffer::insertStringAsLines(Paragraph *& par, Paragraph::size_type & pos,
-                                LyXFont const & font, 
-                                string const & str) const
+                                 LyXFont const & fn,string const & str) const
 {
        LyXLayout const & layout = textclasslist.Style(params.textclass, 
-                                                    par->getLayout());
+                                                      par->getLayout());
+       LyXFont font = fn;
+       
+       (void)par->checkInsertChar(font);
        // insert the string, don't insert doublespace
        bool space_inserted = true;
        for(string::const_iterator cit = str.begin(); 
@@ -1354,7 +1354,7 @@ void Buffer::insertStringAsLines(Paragraph *& par, Paragraph::size_type & pos,
                if (*cit == '\n') {
                        if (par->size() || layout.keepempty) { 
                                par->breakParagraph(params, pos, 
-                                                   layout.isEnvironment());
+                                                   layout.isEnvironment());
                                par = par->next();
                                pos = 0;
                                space_inserted = true;
@@ -1362,8 +1362,9 @@ void Buffer::insertStringAsLines(Paragraph *& par, Paragraph::size_type & pos,
                                continue;
                        }
                        // do not insert consecutive spaces if !free_spacing
-               } else if ((*cit == ' ' || *cit == '\t')
-                          && space_inserted && !layout.free_spacing) {
+               } else if ((*cit == ' ' || *cit == '\t') &&
+                          space_inserted && !layout.free_spacing)
+               {
                        continue;
                } else if (*cit == '\t') {
                        if (!layout.free_spacing) {
@@ -1372,7 +1373,7 @@ void Buffer::insertStringAsLines(Paragraph *& par, Paragraph::size_type & pos,
                                ++pos;
                                space_inserted = true;
                        } else {
-                               const Paragraph::value_type nb = 8 - pos % 8;
+                               const Paragraph::size_type nb = 8 - pos % 8;
                                for (Paragraph::size_type a = 0; 
                                     a < nb ; ++a) {
                                        par->insertChar(pos, ' ', font);
@@ -1699,7 +1700,7 @@ bool Buffer::writeFile(string const & fname, bool flag) const
        // The top of the file should not be written by params.
 
        // write out a comment in the top of the file
-       ofs << '#' << LYX_DOCVERSION 
+       ofs << '#' << lyx_docversion 
            << " created this file. For more info see http://www.lyx.org/\n"
            << "\\lyxformat " << LYX_FORMAT << "\n";
 
@@ -1749,7 +1750,7 @@ string const Buffer::asciiParagraph(Paragraph const * par,
        Paragraph::depth_type depth = 0;
        int ltype = 0;
        Paragraph::depth_type ltype_depth = 0;
-       unsigned int currlinelen = 0;
+       string::size_type currlinelen = 0;
        bool ref_printed = false;
 
        int noparbreak = 0;
@@ -1891,11 +1892,7 @@ string const Buffer::asciiParagraph(Paragraph const * par,
                case Paragraph::META_HFILL: 
                        buffer << "\t";
                        break;
-                       
-               case '\\':
-                       buffer << "\\";
-                       break;
-                       
+
                default:
                        if ((linelen > 0) && (currlinelen > (linelen - 10)) &&
                            (c == ' ') && ((i + 2) < par->size()))
@@ -1911,11 +1908,11 @@ string const Buffer::asciiParagraph(Paragraph const * par,
                                                buffer << "  ";
                                        currlinelen += (ltype_depth-depth)*2;
                                }
-                       } else if (c != '\0')
+                       } else if (c != '\0') {
                                buffer << c;
-                       else if (c == '\0')
+                               ++currlinelen;
+                       } else
                                lyxerr[Debug::INFO] << "writeAsciiFile: NULL char in structure." << endl;
-                       ++currlinelen;
                        break;
                }
        }
@@ -1977,7 +1974,7 @@ void Buffer::makeLaTeXFile(string const & fname,
        texrow.start(paragraph, 0);
 
        if (!only_body && nice) {
-               ofs << "%% " LYX_DOCVERSION " created this file.  "
+               ofs << "%% " << lyx_docversion << " created this file.  "
                        "For more info, see http://www.lyx.org/.\n"
                        "%% Do not edit unless you really know what "
                        "you are doing.\n";
@@ -2269,19 +2266,6 @@ void Buffer::makeLaTeXFile(string const & fname,
                        texrow.newline();
                }
 
-               // We try to load babel late, in case it interferes
-               // with other packages.
-               if (use_babel) {
-                       string tmp = lyxrc.language_package;
-                       if (!lyxrc.language_global_options
-                           && tmp == "\\usepackage{babel}")
-                               tmp = string("\\usepackage[") +
-                                       language_options.str().c_str() +
-                                       "]{babel}";
-                       ofs << tmp << "\n";
-                       texrow.newline();
-               }
-
                if (params.secnumdepth != tclass.secnumdepth()) {
                        ofs << "\\setcounter{secnumdepth}{"
                            << params.secnumdepth
@@ -2396,6 +2380,19 @@ void Buffer::makeLaTeXFile(string const & fname,
 
                ofs << preamble;
 
+               // We try to load babel late, in case it interferes
+               // with other packages.
+               if (use_babel) {
+                       string tmp = lyxrc.language_package;
+                       if (!lyxrc.language_global_options
+                           && tmp == "\\usepackage{babel}")
+                               tmp = string("\\usepackage[") +
+                                       language_options.str().c_str() +
+                                       "]{babel}";
+                       ofs << tmp << "\n";
+                       texrow.newline();
+               }
+
                // make the body.
                ofs << "\\begin{document}\n";
                texrow.newline();
@@ -2564,14 +2561,16 @@ void Buffer::makeLinuxDocFile(string const & fname, bool nice, bool body_only)
        string top_element = textclasslist.LatexnameOfClass(params.textclass);
 
        if (!body_only) {
-               string sgml_includedfiles=features.getIncludedFiles(fname);
+               ofs << "<!doctype linuxdoc system";
 
-               if (params.preamble.empty() && sgml_includedfiles.empty()) {
-                       ofs << "<!doctype linuxdoc system>\n\n";
-               } else {
-                       ofs << "<!doctype linuxdoc system [ "
-                           << params.preamble << sgml_includedfiles << " \n]>\n\n";
+               string preamble = params.preamble;
+               preamble += features.getIncludedFiles(fname);
+               preamble += features.getLyXSGMLEntities();
+
+               if (!preamble.empty()) {
+                       ofs << " [ " << preamble << " ]";
                }
+               ofs << ">\n\n";
 
                if (params.options.empty())
                        sgmlOpenTag(ofs, 0, top_element);
@@ -2583,7 +2582,7 @@ void Buffer::makeLinuxDocFile(string const & fname, bool nice, bool body_only)
                }
        }
 
-       ofs << "<!-- "  << LYX_DOCVERSION 
+       ofs << "<!-- "  << lyx_docversion
            << " created this file. For more info see http://www.lyx.org/"
            << " -->\n";
 
@@ -2721,30 +2720,6 @@ void Buffer::makeLinuxDocFile(string const & fname, bool nice, bool body_only)
 }
 
 
-void Buffer::docBookHandleCaption(ostream & os, string & inner_tag,
-                                 Paragraph::depth_type depth, int desc_on,
-                                 Paragraph * & par)
-{
-       Paragraph * tpar = par;
-       while (tpar
-              && (tpar->layout != textclasslist.NumberOfLayout(params.textclass,
-                                                               "Caption").second))
-               tpar = tpar->next();
-
-       if (tpar &&
-           tpar->layout == textclasslist.NumberOfLayout(params.textclass,
-                                                        "Caption").second) {
-               sgmlOpenTag(os, depth + 1, inner_tag);
-               string extra_par;
-               simpleDocBookOnePar(os, extra_par, tpar,
-                                   desc_on, depth + 2);
-               sgmlCloseTag(os, depth+1, inner_tag);
-               if (!extra_par.empty())
-                       os << extra_par;
-       }
-}
-
-
 // checks, if newcol chars should be put into this line
 // writes newline, if necessary.
 namespace {
@@ -2800,8 +2775,6 @@ void reset(PAR_TAG & p1, PAR_TAG const & p2)
 } // namespace anon
 
 
-
-
 // Handle internal paragraph parsing -- layout already processed.
 void Buffer::simpleLinuxDocOnePar(ostream & os,
                                  Paragraph * par, 
@@ -3028,16 +3001,17 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
        string top_element = textclasslist.LatexnameOfClass(params.textclass);
 
        if (!only_body) {
-               string sgml_includedfiles = features.getIncludedFiles(fname);
+               ofs << "<!DOCTYPE " << top_element
+                   << "  PUBLIC \"-//OASIS//DTD DocBook V4.1//EN\"";
 
-               ofs << "<!doctype " << top_element
-                   << " public \"-//OASIS//DTD DocBook V3.1//EN\"";
+               string preamble = params.preamble;
+               preamble += features.getIncludedFiles(fname);
+               preamble += features.getLyXSGMLEntities();
 
-               if (params.preamble.empty() && sgml_includedfiles.empty())
-                       ofs << ">\n\n";
-               else
-                       ofs << "\n [ " << params.preamble 
-                           << sgml_includedfiles << " \n]>\n\n";
+               if (!preamble.empty()) {
+                       ofs << "\n [ " << preamble << " ]";
+               }
+               ofs << ">\n\n";
        }
 
        string top = top_element;       
@@ -3051,7 +3025,7 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
        }
        sgmlOpenTag(ofs, 0, top);
 
-       ofs << "<!-- DocBook file was created by " << LYX_DOCVERSION 
+       ofs << "<!-- DocBook file was created by " << lyx_docversion
            << "\n  See http://www.lyx.org/ for more information -->\n";
 
        vector<string> environment_stack(10);
@@ -3342,7 +3316,7 @@ void Buffer::simpleDocBookOnePar(ostream & os, string & extra,
                if (c == Paragraph::META_INSET) {
                        Inset * inset = par->getInset(i);
                        ostringstream ost;
-                       inset->docBook(this, ost);
+                       inset->docbook(this, ost);
                        string tmp_out = ost.str().c_str();
 
                        //
@@ -3367,20 +3341,18 @@ void Buffer::simpleDocBookOnePar(ostream & os, string & extra,
                        }
                } else {
                        string sgml_string;
-                       if (par->linuxDocConvertChar(c, sgml_string)
-                           && !style.free_spacing) { // in freespacing
-                                                    // mode, spaces are
-                                                    // non-breaking characters
-                               // char is ' '
-                               if (desc_on == 1) {
-                                       ++char_line_count;
-                                       os << "\n</term><listitem><para>";
-                                       desc_on = 2;
-                               } else {
-                                       os << c;
-                               }
+                       par->linuxDocConvertChar(c, sgml_string);
+
+                       if (style.pass_thru) {
+                               os << c;
+                       } else if(style.free_spacing || c != ' ') {
+                                       os << sgml_string;
+                       } else if (desc_on ==1) {
+                               ++char_line_count;
+                               os << "\n</term><listitem><para>";
+                               desc_on = 2;
                        } else {
-                               os << sgml_string;
+                               os << ' ';
                        }
                }
                font_old = font;
@@ -3576,10 +3548,21 @@ Buffer::Lists const Buffer::getLists() const
 {
        Lists l;
        Paragraph * par = paragraph;
+
+#if 1
+       std::pair<bool, LyXTextClassList::size_type> const tmp =
+               textclasslist.NumberOfLayout(params.textclass, "Caption");
+       bool const found = tmp.first;
+       LyXTextClassList::size_type const cap = tmp.second;
+       
+#else
+       // This is the prefered way to to this, but boost::tie can break
+       // some compilers
        bool found;
        LyXTextClassList::size_type cap;
        boost::tie(found, cap) = textclasslist
                .NumberOfLayout(params.textclass, "Caption");
+#endif
 
        while (par) {
                char const labeltype =