]> git.lyx.org Git - lyx.git/blobdiff - src/buffer.C
Remove the XOpenIM test as lyxlookup.C has been buried.
[lyx.git] / src / buffer.C
index 44ac43836b6184d991c482282b9c53662ed14112..31dd511ea82498cc36963b029ee4c02b06d29b8a 100644 (file)
@@ -20,7 +20,6 @@
 
 #include "buffer.h"
 #include "bufferlist.h"
-#include "counters.h"
 #include "LyXAction.h"
 #include "lyxrc.h"
 #include "lyxlex.h"
@@ -76,6 +75,7 @@
 #include "insets/insetoptarg.h"
 #include "insets/insetminipage.h"
 #include "insets/insetfloat.h"
+#include "insets/insetwrap.h"
 #include "insets/insettabular.h"
 #if 0
 #include "insets/insettheorem.h"
 
 #include <boost/bind.hpp>
 #include <boost/tuple/tuple.hpp>
+#include "BoostFormat.h"
 
 #include <fstream>
 #include <iomanip>
@@ -147,24 +148,17 @@ extern BufferList bufferlist;
 
 namespace {
 
-const int LYX_FORMAT = 220;
+const int LYX_FORMAT = 221;
 
 } // namespace anon
 
 Buffer::Buffer(string const & file, bool ronly)
        : niceFile(true), lyx_clean(true), bak_clean(true),
          unnamed(false), dep_clean(0), read_only(ronly),
-         filename_(file), users(0), ctrs(new Counters)
+         filename_(file), users(0)
 {
        lyxerr[Debug::INFO] << "Buffer::Buffer()" << endl;
-//     filename = file;
        filepath_ = OnlyPath(file);
-//     lyx_clean = true;
-//     bak_clean = true;
-//     dep_clean = 0;
-//     read_only = ronly;
-//     unnamed = false;
-//     users = 0;
        lyxvc.buffer(this);
        if (read_only || lyxrc.use_tempdir) {
                tmppath = CreateBufferTmpDir();
@@ -206,7 +200,7 @@ string const Buffer::getLatexName(bool no_path) const
 }
 
 
-pair<Buffer::LogType, string> const Buffer::getLogName(void) const
+pair<Buffer::LogType, string> const Buffer::getLogName() const
 {
        string const filename = getLatexName(false);
 
@@ -345,7 +339,7 @@ bool Buffer::readLyXformat2(LyXLex & lex, Paragraph * par)
                if (token.empty()) continue;
 
                lyxerr[Debug::PARSER] << "Handling token: `"
-                                     << token << "'" << endl;
+                                     << token << '\'' << endl;
 
                the_end_read =
                        parseSingleLyXformat2Token(lex, par, first_par,
@@ -366,8 +360,13 @@ bool Buffer::readLyXformat2(LyXLex & lex, Paragraph * par)
                        s += tostr(unknown_layouts);
                        s += _(" paragraphs");
                }
+#if USE_BOOST_FORMAT
                Alert::alert(_("Textclass Loading Error!"), s,
-                          _("When reading " + fileName()));
+                          boost::io::str(boost::format(_("When reading %1$s")) % fileName()));
+#else
+               Alert::alert(_("Textclass Loading Error!"), s,
+                            _("When reading ") + fileName());
+#endif
        }
 
        if (unknown_tokens > 0) {
@@ -378,8 +377,13 @@ bool Buffer::readLyXformat2(LyXLex & lex, Paragraph * par)
                        s += tostr(unknown_tokens);
                        s += _(" unknown tokens");
                }
+#if USE_BOOST_FORMAT
+               Alert::alert(_("Textclass Loading Error!"), s,
+                          boost::io::str(boost::format(_("When reading %1$s")) % fileName()));
+#else
                Alert::alert(_("Textclass Loading Error!"), s,
-                          _("When reading " + fileName()));
+                            _("When reading ") +  fileName());
+#endif
        }
 
        return the_end_read;
@@ -570,11 +574,10 @@ Buffer::parseSingleLyXformat2Token(LyXLex & lex, Paragraph *& par,
                if (layout->free_spacing || par->isFreeSpacing()) {
                        if (lex.isOK()) {
                                lex.next();
-                               string next_token = lex.getString();
+                               string const next_token = lex.getString();
                                if (next_token == "\\-") {
                                        par->insertChar(pos, '-', font);
-                               } else if (next_token == "\\protected_separator"
-                                       || next_token == "~") {
+                               } else if (next_token == "~") {
                                        par->insertChar(pos, ' ', font);
                                } else {
                                        lex.printError("Token `$$Token' "
@@ -615,10 +618,17 @@ Buffer::parseSingleLyXformat2Token(LyXLex & lex, Paragraph *& par,
                if (pp.first) {
                        params.textclass = pp.second;
                } else {
-                       Alert::alert(string(_("Textclass error")),
-                               string(_("The document uses an unknown textclass \"")) +
-                               lex.getString() + string("\"."),
-                               string(_("LyX will not be able to produce output correctly.")));
+#if USE_BOOST_FORMAT
+                       Alert::alert(_("Textclass error"),
+                               boost::io::str(boost::format(_("The document uses an unknown textclass \"%1$s\".")) % lex.getString()),
+                               _("LyX will not be able to produce output correctly."));
+#else
+                       Alert::alert(
+                               _("Textclass error"),
+                               _("The document uses an unknown textclass ")
+                               + lex.getString(),
+                               _("LyX will not be able to produce output correctly."));
+#endif
                        params.textclass = 0;
                }
                if (!params.getLyXTextClass().load()) {
@@ -627,10 +637,17 @@ Buffer::parseSingleLyXformat2Token(LyXLex & lex, Paragraph *& par,
                        // or stop loading the file.
                        // I can substitute but I don't see how I can
                        // stop loading... ideas??  ARRae980418
+#if USE_BOOST_FORMAT
                        Alert::alert(_("Textclass Loading Error!"),
-                                  string(_("Can't load textclass ")) +
-                                  params.getLyXTextClass().name(),
+                                  boost::io::str(boost::format(_("Can't load textclass %1$s")) %
+                                  params.getLyXTextClass().name()),
                                   _("-- substituting default"));
+#else
+                       Alert::alert(_("Textclass Loading Error!"),
+                                    _("Can't load textclass ")
+                                    + params.getLyXTextClass().name(),
+                                    _("-- substituting default"));
+#endif
                        params.textclass = 0;
                }
        } else if (token == "\\options") {
@@ -922,19 +939,6 @@ Buffer::parseSingleLyXformat2Token(LyXLex & lex, Paragraph *& par,
        } else if (token == "\\hfill") {
                par->insertChar(pos, Paragraph::META_HFILL, font);
                ++pos;
-       } else if (token == "\\protected_separator") { // obsolete
-               // This is a backward compability thingie. (Lgb)
-               // Remove it later some time...introduced with fileformat
-               // 2.16. (Lgb)
-               LyXLayout_ptr const & layout = par->layout();
-
-               if (layout->free_spacing || par->isFreeSpacing()) {
-                       par->insertChar(pos, ' ', font);
-               } else {
-                       Inset * inset = new InsetSpecialChar(InsetSpecialChar::PROTECTED_SEPARATOR);
-                       par->insertInset(pos, inset, font);
-               }
-               ++pos;
        } else if (token == "\\bibitem") {  // ale970302
                if (!par->bibkey) {
                        InsetCommandParams p("bibitem", "dummy");
@@ -947,8 +951,14 @@ Buffer::parseSingleLyXformat2Token(LyXLex & lex, Paragraph *& par,
                // This should be insurance for the future: (Asger)
                ++unknown_tokens;
                lex.eatLine();
+#if USE_BOOST_FORMAT
+               boost::format fmt(_("Unknown token: %1$s %2$s\n"));
+               fmt % token % lex.text();
+               string const s = fmt.str();
+#else
                string const s = _("Unknown token: ") + token
-                       + " " + lex.text()  + "\n";
+                       + ' ' + lex.text() + '\n';
+#endif
                // we can do this here this way because we're actually reading
                // the buffer and don't care about LyXText right now.
                InsetError * new_inset = new InsetError(s);
@@ -960,6 +970,7 @@ Buffer::parseSingleLyXformat2Token(LyXLex & lex, Paragraph *& par,
        return the_end_read;
 }
 
+
 // needed to insert the selection
 void Buffer::insertStringAsLines(Paragraph *& par, pos_type & pos,
                                 LyXFont const & fn,string const & str) const
@@ -1124,6 +1135,10 @@ void Buffer::readInset(LyXLex & lex, Paragraph *& par,
                        lex.next();
                        string tmptok = lex.getString();
                        inset = new InsetFloat(params, tmptok);
+               } else if (tmptok == "Wrap") {
+                       lex.next();
+                       string tmptok = lex.getString();
+                       inset = new InsetWrap(params, tmptok);
 #if 0
                } else if (tmptok == "List") {
                        inset = new InsetList;
@@ -1146,7 +1161,7 @@ void Buffer::readInset(LyXLex & lex, Paragraph *& par,
 }
 
 
-bool Buffer::readFile(LyXLex & lex, Paragraph * par)
+bool Buffer::readFile(LyXLex & lex, string const & filename, Paragraph * par)
 {
        if (lex.isOK()) {
                lex.next();
@@ -1154,20 +1169,21 @@ bool Buffer::readFile(LyXLex & lex, Paragraph * par)
                if (token == "\\lyxformat") { // the first token _must_ be...
                        lex.eatLine();
                        string tmp_format = lex.getString();
-                       //lyxerr << "LyX Format: `" << tmp_format << "'" << endl;
+                       //lyxerr << "LyX Format: `" << tmp_format << '\'' << endl;
                        // if present remove ".," from string.
                        string::size_type dot = tmp_format.find_first_of(".,");
                        //lyxerr << "           dot found at " << dot << endl;
                        if (dot != string::npos)
                                tmp_format.erase(dot, 1);
                        file_format = strToInt(tmp_format);
+                       //lyxerr << "format: " << file_format << endl;
                        if (file_format == LYX_FORMAT) {
                                // current format
                        } else if (file_format > LYX_FORMAT) {
                                // future format
                                Alert::alert(_("Warning!"),
-                                          _("LyX file format is newer that what"),
-                                          _("is supported in this LyX version. Expect some problems."));
+                                       _("The file was created with a newer version of"
+                                       "LyX. This is likely to cause problems."));
 
                        } else if (file_format < LYX_FORMAT) {
                                // old formats
@@ -1176,20 +1192,37 @@ bool Buffer::readFile(LyXLex & lex, Paragraph * par)
                                                   _("Old LyX file format found. "
                                                     "Use LyX 0.10.x to read this!"));
                                        return false;
-                               } else if (file_format < 220) {
-                                       string const command = "lyx2lyx "
-                                               + QuoteName(filename_);
+                               } else if (!filename.empty()) {
+                                       string command =
+                                               LibFileSearch("lyx2lyx", "lyx2lyx");
+                                       if (command.empty()) {
+                                               Alert::alert(_("ERROR!"),
+                                                            _("Can't find conversion script."));
+                                               return false;
+                                       }
+                                       command += " -t"
+                                               +tostr(LYX_FORMAT) + ' '
+                                               + QuoteName(filename);
+                                       lyxerr[Debug::INFO] << "Running '"
+                                                           << command << '\''
+                                                           << endl;
                                        cmd_ret const ret = RunCommand(command);
                                        if (ret.first) {
                                                Alert::alert(_("ERROR!"),
-                                                    _("An error occured while "
-                                                      "running the conversion script."));
+                                                            _("An error occured while "
+                                                              "running the conversion script."));
                                                return false;
                                        }
-                                       istringstream is(ret.second);
+                                       istringstream is(STRCONV(ret.second));
                                        LyXLex tmplex(0, 0);
                                        tmplex.setStream(is);
-                                       return readFile(tmplex);
+                                       return readFile(tmplex, string());
+                               } else {
+                                       // This code is reached if lyx2lyx failed (for
+                                       // some reason) to change the file format of
+                                       // the file.
+                                       lyx::Assert(false);
+                                       return false;
                                }
                        }
                        bool the_end = readLyXformat2(lex, par);
@@ -1493,7 +1526,7 @@ string const Buffer::asciiParagraph(Paragraph const & par,
                default:
                {
                        string const parlab = par.params().labelString();
-                       buffer << parlab << " ";
+                       buffer << parlab << ' ';
                        currlinelen += parlab.length() + 1;
                }
                break;
@@ -1588,7 +1621,7 @@ string const Buffer::asciiParagraph(Paragraph const & par,
                }
        }
        buffer << word;
-       return buffer.str().c_str();
+       return STRCONV(buffer.str());
 }
 
 
@@ -1775,7 +1808,7 @@ void Buffer::makeLaTeXFile(ostream & os,
                        options << params.options << ',';
                }
 
-               string strOptions(options.str().c_str());
+               string strOptions(STRCONV(options.str()));
                if (!strOptions.empty()) {
                        strOptions = rtrim(strOptions, ",");
                        os << '[' << strOptions << ']';
@@ -2055,7 +2088,7 @@ void Buffer::makeLaTeXFile(ostream & os,
                        if (!lyxrc.language_global_options
                            && tmp == "\\usepackage{babel}")
                                tmp = string("\\usepackage[") +
-                                       language_options.str().c_str() +
+                                       STRCONV(language_options.str()) +
                                        "]{babel}";
                        preamble += tmp + "\n";
                        preamble += features.getBabelOptions();
@@ -2108,7 +2141,8 @@ void Buffer::makeLaTeXFile(ostream & os,
        texrow.newline();
 
        lyxerr[Debug::INFO] << "Finished making latex file." << endl;
-       lyxerr[Debug::INFO] << "Row count was " << texrow.rows()-1 << "." << endl;
+       lyxerr[Debug::INFO] << "Row count was " << texrow.rows() - 1
+                           << '.' << endl;
 
        // we want this to be true outside previews (for insetexternal)
        niceFile = true;
@@ -2201,38 +2235,6 @@ bool Buffer::isSGML() const
 }
 
 
-int Buffer::sgmlOpenTag(ostream & os, Paragraph::depth_type depth, bool mixcont,
-                        string const & latexname) const
-{
-       if (!latexname.empty() && latexname != "!-- --") {
-               if (!mixcont)
-                       os << string(" ",depth);
-               os << "<" << latexname << ">";
-       }
-
-       if (!mixcont)
-               os << endl;
-
-       return mixcont?0:1;
-}
-
-
-int Buffer::sgmlCloseTag(ostream & os, Paragraph::depth_type depth, bool mixcont,
-                         string const & latexname) const
-{
-       if (!latexname.empty() && latexname != "!-- --") {
-               if (!mixcont)
-                       os << endl << string(" ",depth);
-               os << "</" << latexname << ">";
-       }
-
-       if (!mixcont)
-               os << endl;
-
-       return mixcont?0:1;
-}
-
-
 void Buffer::makeLinuxDocFile(string const & fname, bool nice, bool body_only)
 {
        ofstream ofs(fname.c_str());
@@ -2269,12 +2271,12 @@ void Buffer::makeLinuxDocFile(string const & fname, bool nice, bool body_only)
                ofs << ">\n\n";
 
                if (params.options.empty())
-                       sgmlOpenTag(ofs, 0, false, top_element);
+                       sgml::openTag(ofs, 0, false, top_element);
                else {
                        string top = top_element;
-                       top += " ";
+                       top += ' ';
                        top += params.options;
-                       sgmlOpenTag(ofs, 0, false, top);
+                       sgml::openTag(ofs, 0, false, top);
                }
        }
 
@@ -2295,7 +2297,7 @@ void Buffer::makeLinuxDocFile(string const & fname, bool nice, bool body_only)
                        Inset::Code lyx_code = inset->lyxCode();
                        if (lyx_code == Inset::TOC_CODE) {
                                string const temp = "toc";
-                               sgmlOpenTag(ofs, depth, false, temp);
+                               sgml::openTag(ofs, depth, false, temp);
 
                                par = par->next();
                                continue;
@@ -2304,7 +2306,7 @@ void Buffer::makeLinuxDocFile(string const & fname, bool nice, bool body_only)
 
                // environment tag closing
                for (; depth > par->params().depth(); --depth) {
-                       sgmlCloseTag(ofs, depth, false, environment_stack[depth]);
+                       sgml::closeTag(ofs, depth, false, environment_stack[depth]);
                        environment_stack[depth].erase();
                }
 
@@ -2313,14 +2315,14 @@ void Buffer::makeLinuxDocFile(string const & fname, bool nice, bool body_only)
                case LATEX_PARAGRAPH:
                        if (depth == par->params().depth()
                           && !environment_stack[depth].empty()) {
-                               sgmlCloseTag(ofs, depth, false, environment_stack[depth]);
+                               sgml::closeTag(ofs, depth, false, environment_stack[depth]);
                                environment_stack[depth].erase();
                                if (depth)
                                        --depth;
                                else
                                        ofs << "</p>";
                        }
-                       sgmlOpenTag(ofs, depth, false, style->latexname());
+                       sgml::openTag(ofs, depth, false, style->latexname());
                        break;
 
                case LATEX_COMMAND:
@@ -2330,12 +2332,12 @@ void Buffer::makeLinuxDocFile(string const & fname, bool nice, bool body_only)
                                            " LatexType Command.\n"));
 
                        if (!environment_stack[depth].empty()) {
-                               sgmlCloseTag(ofs, depth, false, environment_stack[depth]);
+                               sgml::closeTag(ofs, depth, false, environment_stack[depth]);
                                ofs << "</p>";
                        }
 
                        environment_stack[depth].erase();
-                       sgmlOpenTag(ofs, depth, false, style->latexname());
+                       sgml::openTag(ofs, depth, false, style->latexname());
                        break;
 
                case LATEX_ENVIRONMENT:
@@ -2345,7 +2347,7 @@ void Buffer::makeLinuxDocFile(string const & fname, bool nice, bool body_only)
 
                        if (depth == par->params().depth()
                            && environment_stack[depth] != latexname) {
-                               sgmlCloseTag(ofs, depth, false,
+                               sgml::closeTag(ofs, depth, false,
                                             environment_stack[depth]);
                                environment_stack[depth].erase();
                        }
@@ -2355,9 +2357,9 @@ void Buffer::makeLinuxDocFile(string const & fname, bool nice, bool body_only)
                        }
                        if (environment_stack[depth] != latexname) {
                                if (depth == 0) {
-                                       sgmlOpenTag(ofs, depth, false, "p");
+                                       sgml::openTag(ofs, depth, false, "p");
                                }
-                               sgmlOpenTag(ofs, depth, false, latexname);
+                               sgml::openTag(ofs, depth, false, latexname);
 
                                if (environment_stack.size() == depth + 1)
                                        environment_stack.push_back("!-- --");
@@ -2374,12 +2376,12 @@ void Buffer::makeLinuxDocFile(string const & fname, bool nice, bool body_only)
                        else
                                item_name = "item";
 
-                       sgmlOpenTag(ofs, depth + 1, false, item_name);
+                       sgml::openTag(ofs, depth + 1, false, item_name);
                }
                break;
 
                default:
-                       sgmlOpenTag(ofs, depth, false, style->latexname());
+                       sgml::openTag(ofs, depth, false, style->latexname());
                        break;
                }
 
@@ -2398,18 +2400,18 @@ void Buffer::makeLinuxDocFile(string const & fname, bool nice, bool body_only)
                                ofs << "]]>";
                        break;
                default:
-                       sgmlCloseTag(ofs, depth, false, style->latexname());
+                       sgml::closeTag(ofs, depth, false, style->latexname());
                        break;
                }
        }
 
        // Close open tags
        for (int i = depth; i >= 0; --i)
-               sgmlCloseTag(ofs, depth, false, environment_stack[i]);
+               sgml::closeTag(ofs, depth, false, environment_stack[i]);
 
        if (!body_only) {
                ofs << "\n\n";
-               sgmlCloseTag(ofs, 0, false, top_element);
+               sgml::closeTag(ofs, 0, false, top_element);
        }
 
        ofs.close();
@@ -2597,7 +2599,7 @@ void Buffer::simpleLinuxDocOnePar(ostream & os,
                while (!tag_state.empty() && tag_close) {
                        PAR_TAG k =  tag_state.top();
                        tag_state.pop();
-                       os << "</" << tag_name(k) << ">";
+                       os << "</" << tag_name(k) << '>';
                        if (tag_close & k)
                                reset(tag_close,k);
                        else
@@ -2607,13 +2609,13 @@ void Buffer::simpleLinuxDocOnePar(ostream & os,
                for(list< PAR_TAG >::const_iterator j = temp.begin();
                    j != temp.end(); ++j) {
                        tag_state.push(*j);
-                       os << "<" << tag_name(*j) << ">";
+                       os << '<' << tag_name(*j) << '>';
                }
 
                for(list< PAR_TAG >::const_iterator j = tag_open.begin();
                    j != tag_open.end(); ++j) {
                        tag_state.push(*j);
-                       os << "<" << tag_name(*j) << ">";
+                       os << '<' << tag_name(*j) << '>';
                }
 
                char c = par->getChar(i);
@@ -2656,7 +2658,7 @@ void Buffer::simpleLinuxDocOnePar(ostream & os,
        }
 
        while (!tag_state.empty()) {
-               os << "</" << tag_name(tag_state.top()) << ">";
+               os << "</" << tag_name(tag_state.top()) << '>';
                tag_state.pop();
        }
 
@@ -2729,13 +2731,13 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
        string top = top_element;
        top += " lang=\"";
        top += params.language->code();
-       top += "\"";
+       top += '"';
 
        if (!params.options.empty()) {
-               top += " ";
+               top += ' ';
                top += params.options;
        }
-       sgmlOpenTag(ofs, 0, false, top);
+       sgml::openTag(ofs, 0, false, top);
 
        ofs << "<!-- DocBook file was created by " << lyx_docversion
            << "\n  See http://www.lyx.org/ for more information -->\n";
@@ -2765,11 +2767,11 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
                for (; depth > par->params().depth(); --depth) {
                        if (environment_inner[depth] != "!-- --") {
                                item_name = "listitem";
-                               sgmlCloseTag(ofs, command_depth + depth, false, item_name);
+                               sgml::closeTag(ofs, command_depth + depth, false, item_name);
                                if (environment_inner[depth] == "varlistentry")
-                                       sgmlCloseTag(ofs, depth+command_depth, false, environment_inner[depth]);
+                                       sgml::closeTag(ofs, depth+command_depth, false, environment_inner[depth]);
                        }
-                       sgmlCloseTag(ofs, depth + command_depth, false, environment_stack[depth]);
+                       sgml::closeTag(ofs, depth + command_depth, false, environment_stack[depth]);
                        environment_stack[depth].erase();
                        environment_inner[depth].erase();
                }
@@ -2779,12 +2781,12 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
                   && !environment_stack[depth].empty()) {
                        if (environment_inner[depth] != "!-- --") {
                                item_name= "listitem";
-                               sgmlCloseTag(ofs, command_depth+depth, false, item_name);
+                               sgml::closeTag(ofs, command_depth+depth, false, item_name);
                                if (environment_inner[depth] == "varlistentry")
-                                       sgmlCloseTag(ofs, depth + command_depth, false, environment_inner[depth]);
+                                       sgml::closeTag(ofs, depth + command_depth, false, environment_inner[depth]);
                        }
 
-                       sgmlCloseTag(ofs, depth + command_depth, false, environment_stack[depth]);
+                       sgml::closeTag(ofs, depth + command_depth, false, environment_stack[depth]);
 
                        environment_stack[depth].erase();
                        environment_inner[depth].erase();
@@ -2793,7 +2795,7 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
                // Write opening SGML tags.
                switch (style->latextype) {
                case LATEX_PARAGRAPH:
-                       sgmlOpenTag(ofs, depth + command_depth,
+                       sgml::openTag(ofs, depth + command_depth,
                                    false, style->latexname());
                        break;
 
@@ -2814,14 +2816,14 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
                                if (cmd_depth < command_base) {
                                        for (Paragraph::depth_type j = command_depth;
                                             j >= command_base; --j) {
-                                               sgmlCloseTag(ofs, j, false, command_stack[j]);
+                                               sgml::closeTag(ofs, j, false, command_stack[j]);
                                                ofs << endl;
                                        }
                                        command_depth = command_base = cmd_depth;
                                } else if (cmd_depth <= command_depth) {
                                        for (int j = command_depth;
                                             j >= int(cmd_depth); --j) {
-                                               sgmlCloseTag(ofs, j, false, command_stack[j]);
+                                               sgml::closeTag(ofs, j, false, command_stack[j]);
                                                ofs << endl;
                                        }
                                        command_depth = cmd_depth;
@@ -2845,15 +2847,15 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
                                if (lyx_code == Inset::LABEL_CODE) {
                                        command_name += " id=\"";
                                        command_name += (static_cast<InsetCommand *>(inset))->getContents();
-                                       command_name += "\"";
+                                       command_name += '"';
                                        desc_on = 3;
                                }
                        }
 
-                       sgmlOpenTag(ofs, depth + command_depth, false, command_name);
+                       sgml::openTag(ofs, depth + command_depth, false, command_name);
 
-                       item_name = c_params.empty()?"title":c_params;
-                       sgmlOpenTag(ofs, depth + 1 + command_depth, false, item_name);
+                       item_name = c_params.empty() ? "title" : c_params;
+                       sgml::openTag(ofs, depth + 1 + command_depth, false, item_name);
                        break;
 
                case LATEX_ENVIRONMENT:
@@ -2870,13 +2872,13 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
                                }
                                environment_stack[depth] = style->latexname();
                                environment_inner[depth] = "!-- --";
-                               sgmlOpenTag(ofs, depth + command_depth, false, environment_stack[depth]);
+                               sgml::openTag(ofs, depth + command_depth, false, environment_stack[depth]);
                        } else {
                                if (environment_inner[depth] != "!-- --") {
                                        item_name= "listitem";
-                                       sgmlCloseTag(ofs, command_depth + depth, false, item_name);
+                                       sgml::closeTag(ofs, command_depth + depth, false, item_name);
                                        if (environment_inner[depth] == "varlistentry")
-                                               sgmlCloseTag(ofs, depth + command_depth, false, environment_inner[depth]);
+                                               sgml::closeTag(ofs, depth + command_depth, false, environment_inner[depth]);
                                }
                        }
 
@@ -2885,7 +2887,7 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
                                        if (style->latexparam() == "CDATA")
                                                ofs << "<![CDATA[";
                                        else
-                                               sgmlOpenTag(ofs, depth + command_depth, false, style->latexparam());
+                                               sgml::openTag(ofs, depth + command_depth, false, style->latexparam());
                                }
                                break;
                        }
@@ -2893,15 +2895,15 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
                        desc_on = (style->labeltype == LABEL_MANUAL);
 
                        environment_inner[depth] = desc_on ? "varlistentry" : "listitem";
-                       sgmlOpenTag(ofs, depth + 1 + command_depth,
+                       sgml::openTag(ofs, depth + 1 + command_depth,
                                    false, environment_inner[depth]);
 
                        item_name = desc_on ? "term" : "para";
-                       sgmlOpenTag(ofs, depth + 1 + command_depth,
+                       sgml::openTag(ofs, depth + 1 + command_depth,
                                    false, item_name);
                        break;
                default:
-                       sgmlOpenTag(ofs, depth + command_depth,
+                       sgml::openTag(ofs, depth + command_depth,
                                    false, style->latexname());
                        break;
                }
@@ -2915,7 +2917,7 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
                switch (style->latextype) {
                case LATEX_COMMAND:
                        end_tag = c_params.empty() ? "title" : c_params;
-                       sgmlCloseTag(ofs, depth + command_depth,
+                       sgml::closeTag(ofs, depth + command_depth,
                                     false, end_tag);
                        break;
                case LATEX_ENVIRONMENT:
@@ -2923,19 +2925,19 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
                                if (style->latexparam() == "CDATA")
                                        ofs << "]]>";
                                else
-                                       sgmlCloseTag(ofs, depth + command_depth, false, style->latexparam());
+                                       sgml::closeTag(ofs, depth + command_depth, false, style->latexparam());
                        }
                        break;
                case LATEX_ITEM_ENVIRONMENT:
                        if (desc_on == 1) break;
-                       end_tag= "para";
-                       sgmlCloseTag(ofs, depth + 1 + command_depth, false, end_tag);
+                       end_tag = "para";
+                       sgml::closeTag(ofs, depth + 1 + command_depth, false, end_tag);
                        break;
                case LATEX_PARAGRAPH:
-                       sgmlCloseTag(ofs, depth + command_depth, false, style->latexname());
+                       sgml::closeTag(ofs, depth + command_depth, false, style->latexname());
                        break;
                default:
-                       sgmlCloseTag(ofs, depth + command_depth, false, style->latexname());
+                       sgml::closeTag(ofs, depth + command_depth, false, style->latexname());
                        break;
                }
        }
@@ -2945,23 +2947,23 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
                if (!environment_stack[depth].empty()) {
                        if (environment_inner[depth] != "!-- --") {
                                item_name = "listitem";
-                               sgmlCloseTag(ofs, command_depth + depth, false, item_name);
+                               sgml::closeTag(ofs, command_depth + depth, false, item_name);
                               if (environment_inner[depth] == "varlistentry")
-                                      sgmlCloseTag(ofs, depth + command_depth, false, environment_inner[depth]);
+                                      sgml::closeTag(ofs, depth + command_depth, false, environment_inner[depth]);
                        }
 
-                       sgmlCloseTag(ofs, depth + command_depth, false, environment_stack[depth]);
+                       sgml::closeTag(ofs, depth + command_depth, false, environment_stack[depth]);
                }
        }
 
        for (int j = command_depth; j >= 0 ; --j)
                if (!command_stack[j].empty()) {
-                       sgmlCloseTag(ofs, j, false, command_stack[j]);
+                       sgml::closeTag(ofs, j, false, command_stack[j]);
                        ofs << endl;
                }
 
        ofs << "\n\n";
-       sgmlCloseTag(ofs, 0, false, top_element);
+       sgml::closeTag(ofs, 0, false, top_element);
 
        ofs.close();
        // How to check for successful close
@@ -3150,26 +3152,6 @@ void Buffer::validate(LaTeXFeatures & features) const
 }
 
 
-// This function should be in Buffer because it's a buffer's property (ale)
-string const Buffer::getIncludeonlyList(char delim)
-{
-       string lst;
-       for (inset_iterator it = inset_iterator_begin();
-           it != inset_iterator_end(); ++it) {
-               if (it->lyxCode() == Inset::INCLUDE_CODE) {
-                       InsetInclude & inc = static_cast<InsetInclude &>(*it);
-                       if (inc.isIncludeOnly()) {
-                               if (!lst.empty())
-                                       lst += delim;
-                               lst += inc.getRelFileBaseName();
-                       }
-               }
-       }
-       lyxerr[Debug::INFO] << "Includeonly(" << lst << ')' << endl;
-       return lst;
-}
-
-
 vector<string> const Buffer::getLabelList() const
 {
        /// if this is a child document and the parent is already loaded
@@ -3217,20 +3199,21 @@ vector<pair<string, string> > const Buffer::getBibkeyList() const
                }
        }
 
+       if (!keys.empty())
+               return keys;
+
        // Might be either using bibtex or a child has bibliography
-       if (keys.empty()) {
-               for (inset_iterator it = inset_const_iterator_begin();
-                       it != inset_const_iterator_end(); ++it) {
-                       // Search for Bibtex or Include inset
-                       if (it->lyxCode() == Inset::BIBTEX_CODE) {
-                               vector<StringPair> tmp =
-                                       static_cast<InsetBibtex &>(*it).getKeys(this);
-                               keys.insert(keys.end(), tmp.begin(), tmp.end());
-                       } else if (it->lyxCode() == Inset::INCLUDE_CODE) {
-                               vector<StringPair> const tmp =
-                                       static_cast<InsetInclude &>(*it).getKeys();
-                               keys.insert(keys.end(), tmp.begin(), tmp.end());
-                       }
+       for (inset_iterator it = inset_const_iterator_begin();
+               it != inset_const_iterator_end(); ++it) {
+               // Search for Bibtex or Include inset
+               if (it->lyxCode() == Inset::BIBTEX_CODE) {
+                       vector<StringPair> tmp =
+                               static_cast<InsetBibtex &>(*it).getKeys(this);
+                       keys.insert(keys.end(), tmp.begin(), tmp.end());
+               } else if (it->lyxCode() == Inset::INCLUDE_CODE) {
+                       vector<StringPair> const tmp =
+                               static_cast<InsetInclude &>(*it).getKeys();
+                       keys.insert(keys.end(), tmp.begin(), tmp.end());
                }
        }
 
@@ -3337,12 +3320,6 @@ bool Buffer::isMultiLingual()
 }
 
 
-Counters & Buffer::counters() const
-{
-       return *ctrs.get();
-}
-
-
 void Buffer::inset_iterator::setParagraph()
 {
        while (pit != pend) {
@@ -3400,6 +3377,18 @@ ParIterator Buffer::par_iterator_end()
        return ParIterator();
 }
 
+ParConstIterator Buffer::par_iterator_begin() const
+{
+       return ParConstIterator(&*(paragraphs.begin()));
+}
+
+
+ParConstIterator Buffer::par_iterator_end() const
+{
+       return ParConstIterator();
+}
+
+
 
 void Buffer::addUser(BufferView * u)
 {