]> git.lyx.org Git - lyx.git/blobdiff - src/buffer.C
more cursor dispatch
[lyx.git] / src / buffer.C
index 0485be21db0c3c41a08e8a0e3e1c16152ddf0ca6..d9ba8c0f676b4dc3b0794d6745ea876436c87d8c 100644 (file)
@@ -132,7 +132,7 @@ extern BufferList bufferlist;
 
 namespace {
 
-const int LYX_FORMAT = 225;
+const int LYX_FORMAT = 229;
 
 } // namespace anon
 
@@ -146,10 +146,8 @@ struct Buffer::Impl
        limited_stack<Undo> undostack;
        limited_stack<Undo> redostack;
        BufferParams params;
-       ParagraphList paragraphs;
        LyXVC lyxvc;
        string temppath;
-       bool nicefile;
        TexRow texrow;
 
        /// need to regenerate .tex ?
@@ -187,10 +185,9 @@ struct Buffer::Impl
 
 
 Buffer::Impl::Impl(Buffer & parent, string const & file, bool readonly_)
-       : nicefile(true),
-         lyx_clean(true), bak_clean(true), unnamed(false), read_only(readonly_),
+       : lyx_clean(true), bak_clean(true), unnamed(false), read_only(readonly_),
          filename(file), filepath(OnlyPath(file)), file_fully_loaded(false),
-               text(0, 0, 0, paragraphs)
+               text(0, 0)
 {
        lyxvc.buffer(&parent);
        if (readonly_ || lyxrc.use_tempdir)
@@ -218,8 +215,6 @@ Buffer::~Buffer()
                        bformat(_("Could not remove the temporary directory %1$s"), temppath()));
        }
 
-       paragraphs().clear();
-
        // Remove any previewed LaTeX snippets associated with this buffer.
        lyx::graphics::Previews::get().removeLoader(*this);
 }
@@ -269,13 +264,13 @@ BufferParams const & Buffer::params() const
 
 ParagraphList & Buffer::paragraphs()
 {
-       return pimpl_->paragraphs;
+       return pimpl_->text.paragraphs();
 }
 
 
 ParagraphList const & Buffer::paragraphs() const
 {
-       return pimpl_->paragraphs;
+       return pimpl_->text.paragraphs();
 }
 
 
@@ -297,18 +292,6 @@ string const & Buffer::temppath() const
 }
 
 
-bool & Buffer::niceFile()
-{
-       return pimpl_->nicefile;
-}
-
-
-bool Buffer::niceFile() const
-{
-       return pimpl_->nicefile;
-}
-
-
 TexRow & Buffer::texrow()
 {
        return pimpl_->texrow;
@@ -393,6 +376,7 @@ void unknownClass(string const & unknown)
 
 } // anon
 
+
 int Buffer::readHeader(LyXLex & lex)
 {
        int unknown_tokens = 0;
@@ -438,9 +422,8 @@ int Buffer::readHeader(LyXLex & lex)
 // if par = 0 normal behavior
 // else insert behavior
 // Returns false if "\end_document" is not read (Asger)
-bool Buffer::readBody(LyXLex & lex, ParagraphList::iterator pit)
+bool Buffer::readBody(LyXLex & lex)
 {
-       Paragraph::depth_type depth = 0;
        bool the_end_read = false;
 
        if (paragraphs().empty()) {
@@ -461,73 +444,16 @@ bool Buffer::readBody(LyXLex & lex, ParagraphList::iterator pit)
                tmpbuf.readHeader(lex);
        }
 
-       while (lex.isOK()) {
-               lex.nextToken();
-               string const token = lex.getString();
-
-               if (token.empty())
-                       continue;
-
-               lyxerr[Debug::PARSER] << "Handling token: `"
-                                     << token << '\'' << endl;
-
-               if (token == "\\end_document") {
-                       the_end_read = true;
-                       continue;
-               }
-
-               readParagraph(lex, token, paragraphs(), pit, depth);
-       }
+       if (text().read(*this, lex))
+               the_end_read = true;
 
        return the_end_read;
 }
 
 
-int Buffer::readParagraph(LyXLex & lex, string const & token,
-                         ParagraphList & pars, ParagraphList::iterator & pit,
-                         lyx::depth_type & depth)
-{
-       static Change current_change;
-       int unknown = 0;
-
-       if (token == "\\begin_layout") {
-               lex.pushToken(token);
-
-               Paragraph par;
-               par.params().depth(depth);
-               if (params().tracking_changes)
-                       par.trackChanges();
-               LyXFont f(LyXFont::ALL_INHERIT, params().language);
-               par.setFont(0, f);
-
-               // insert after
-               if (pit != pars.end())
-                       ++pit;
-
-               pit = pars.insert(pit, par);
-
-               // FIXME: goddamn InsetTabular makes us pass a Buffer
-               // not BufferParams
-               ::readParagraph(*this, *pit, lex);
-
-       } else if (token == "\\begin_deeper") {
-               ++depth;
-       } else if (token == "\\end_deeper") {
-               if (!depth) {
-                       lex.printError("\\end_deeper: " "depth is already null");
-               } else {
-                       --depth;
-               }
-       } else {
-               ++unknown;
-       }
-       return unknown;
-}
-
-
 // needed to insert the selection
 void Buffer::insertStringAsLines(ParagraphList::iterator & par, pos_type & pos,
-                                LyXFont const & fn,string const & str)
+                                LyXFont const & fn, string const & str)
 {
        LyXLayout_ptr const & layout = par->layout();
 
@@ -704,7 +630,7 @@ bool Buffer::readFile(LyXLex & lex, string const & filename,
 
        }
 
-       bool the_end = readBody(lex, pit);
+       bool the_end = readBody(lex);
        params().setPaperStuff();
 
        if (!the_end) {
@@ -842,19 +768,13 @@ bool Buffer::do_writeFile(ostream & ofs) const
            << " created this file. For more info see http://www.lyx.org/\n"
            << "\\lyxformat " << LYX_FORMAT << "\n";
 
-       // now write out the buffer paramters.
+       // now write out the buffer parameters.
        params().writeFile(ofs);
 
        ofs << "\\end_header\n";
 
-       Paragraph::depth_type depth = 0;
-
-       // this will write out all the paragraphs
-       // using recursive descent.
-       ParagraphList::const_iterator pit = paragraphs().begin();
-       ParagraphList::const_iterator pend = paragraphs().end();
-       for (; pit != pend; ++pit)
-               pit->write(*this, ofs, params(), depth);
+       // write the text
+       text().write(*this, ofs);
 
        // Write marker that shows file is complete
        ofs << "\n\\end_document" << endl;
@@ -914,11 +834,10 @@ void Buffer::makeLaTeXFile(ostream & os,
                           bool output_preamble, bool output_body)
 {
        OutputParams runparams = runparams_in;
-       niceFile() = runparams.nice; // this will be used by Insetincludes.
 
        // validate the buffer.
        lyxerr[Debug::LATEX] << "  Validating buffer..." << endl;
-       LaTeXFeatures features(*this, params());
+       LaTeXFeatures features(*this, params(), runparams.nice);
        validate(features);
        lyxerr[Debug::LATEX] << "  Buffer validation done." << endl;
 
@@ -1010,9 +929,6 @@ void Buffer::makeLaTeXFile(ostream & os,
        lyxerr[Debug::INFO] << "Finished making LaTeX file." << endl;
        lyxerr[Debug::INFO] << "Row count was " << texrow().rows() - 1
                            << '.' << endl;
-
-       // we want this to be true outside previews (for insetexternal)
-       niceFile() = true;
 }
 
 
@@ -1057,10 +973,7 @@ void Buffer::makeLinuxDocFile(string const & fname,
        if (!openFileWrite(ofs, fname))
                return;
 
-       niceFile() = runparams.nice; // this will be used by included files.
-
-       LaTeXFeatures features(*this, params());
-
+       LaTeXFeatures features(*this, params(), runparams.nice);
        validate(features);
 
        texrow().reset();
@@ -1106,9 +1019,6 @@ void Buffer::makeLinuxDocFile(string const & fname,
 
        ofs.close();
        // How to check for successful close
-
-       // we want this to be true outside previews (for insetexternal)
-       niceFile() = true;
 }
 
 
@@ -1120,9 +1030,7 @@ void Buffer::makeDocBookFile(string const & fname,
        if (!openFileWrite(ofs, fname))
                return;
 
-       niceFile() = runparams.nice; // this will be used by Insetincludes.
-
-       LaTeXFeatures features(*this, params());
+       LaTeXFeatures features(*this, params(), runparams.nice);
        validate(features);
 
        texrow().reset();
@@ -1167,9 +1075,6 @@ void Buffer::makeDocBookFile(string const & fname,
 
        ofs.close();
        // How to check for successful close
-
-       // we want this to be true outside previews (for insetexternal)
-       niceFile() = true;
 }
 
 
@@ -1283,7 +1188,8 @@ void Buffer::getLabelList(std::vector<string> & list) const
 
 
 // This is also a buffer property (ale)
-void Buffer::fillWithBibKeys(std::vector<std::pair<string, string> > & keys) const
+void Buffer::fillWithBibKeys(std::vector<std::pair<string, string> > & keys)
+       const
 {
        /// if this is a child document and the parent is already loaded
        /// use the parent's list instead  [ale990412]