]> git.lyx.org Git - lyx.git/blobdiff - src/buffer.C
don't rm emergency saves ever
[lyx.git] / src / buffer.C
index f7b0aae7623405cf549ea55a39b3fe0f09193ad3..731e538c1c756f3e3345ebea7db34efdbd7a957a 100644 (file)
@@ -36,6 +36,7 @@
 #include "lyxtextclasslist.h"
 #include "sgml.h"
 #include "paragraph_funcs.h"
+#include "messages.h"
 #include "author.h"
 
 #include "frontends/LyXView.h"
@@ -494,12 +495,20 @@ void Buffer::insertStringAsLines(ParagraphList::iterator & par, pos_type & pos,
 
 bool Buffer::readFile(LyXLex & lex, string const & filename)
 {
-       return readFile(lex, filename, paragraphs.begin());
+       bool ret = readFile(lex, filename, paragraphs.begin());
+
+       // After we have read a file, we must ensure that the buffer
+       // language is set and used in the gui.
+       // If you know of a better place to put this, please tell me. (Lgb)
+       updateDocLang(params.language);
+
+       return ret;
 }
 
 
 // FIXME: all the below Alerts should give the filename..
-bool Buffer::readFile(LyXLex & lex, string const & filename, ParagraphList::iterator pit)
+bool Buffer::readFile(LyXLex & lex, string const & filename,
+                     ParagraphList::iterator pit)
 {
        if (!lex.isOK()) {
                Alert::error(_("Document could not be read"),
@@ -1028,7 +1037,7 @@ void Buffer::makeLaTeXFile(ostream & os,
        texrow.reset();
        // The starting paragraph of the coming rows is the
        // first paragraph of the document. (Asger)
-       texrow.start(&*(paragraphs.begin()), 0);
+       texrow.start(paragraphs.begin()->id(), 0);
 
        if (!only_body && nice) {
                os << "%% " << lyx_docversion << " created this file.  "
@@ -1310,7 +1319,7 @@ void Buffer::makeLinuxDocFile(string const & fname, bool nice, bool body_only)
                        break;
                }
 
-               simpleLinuxDocOnePar(ofs, &*pit, depth);
+               simpleLinuxDocOnePar(ofs, pit, depth);
 
                ofs << "\n";
                // write closing SGML tags
@@ -1403,8 +1412,8 @@ void reset(PAR_TAG & p1, PAR_TAG const & p2)
 
 // Handle internal paragraph parsing -- layout already processed.
 void Buffer::simpleLinuxDocOnePar(ostream & os,
-       Paragraph * par,
-       Paragraph::depth_type /*depth*/)
+       ParagraphList::iterator par,
+       Paragraph::depth_type /*depth*/) const
 {
        LyXLayout_ptr const & style = par->layout();
 
@@ -1631,7 +1640,6 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
 #endif
                Alert::error(_("Could not save document"), text);
                return;
-               return;
        }
 
        niceFile = nice; // this will be used by Insetincludes.
@@ -2206,6 +2214,10 @@ void Buffer::redraw()
 
 void Buffer::changeLanguage(Language const * from, Language const * to)
 {
+       lyxerr << "Changing Language!" << endl;
+
+       // Take care of l10n/i18n
+       updateDocLang(to);
 
        ParIterator end = par_iterator_end();
        for (ParIterator it = par_iterator_begin(); it != end; ++it)
@@ -2213,6 +2225,12 @@ void Buffer::changeLanguage(Language const * from, Language const * to)
 }
 
 
+void Buffer::updateDocLang(Language const * nlang)
+{
+       messages_.reset(new Messages(nlang->code()));
+}
+
+
 bool Buffer::isMultiLingual()
 {
        ParIterator end = par_iterator_end();
@@ -2250,22 +2268,24 @@ Inset * Buffer::getInsetFromID(int id_arg) const
 }
 
 
-Paragraph * Buffer::getParFromID(int id) const
+ParagraphList::iterator Buffer::getParFromID(int id) const
 {
-       if (id < 0)
-               return 0;
-
-       // why should we allow < 0 ??
-       //lyx::Assert(id >= 0);
+#warning FIXME: const correctness! (Andre)
+       ParIterator it(const_cast<Buffer*>(this)->par_iterator_begin());
+       ParIterator end(const_cast<Buffer*>(this)->par_iterator_end());
 
-       ParConstIterator it(par_iterator_begin());
-       ParConstIterator end(par_iterator_end());
+#warning FIXME, perhaps this func should return a ParIterator? (Lgb)
+       if (id < 0) {
+               // John says this is called with id == -1 from undo
+               lyxerr << "getParFromID(), id: " << id << endl;
+               return 0;
+       }
 
        for (; it != end; ++it) {
                // go on then, show me how to remove
                // the cast
                if ((*it)->id() == id) {
-                       return const_cast<Paragraph*>(*it);
+                       return *it;
                }
        }
 
@@ -2273,6 +2293,25 @@ Paragraph * Buffer::getParFromID(int id) const
 }
 
 
+bool Buffer::hasParWithID(int id) const
+{
+       ParIterator it(const_cast<Buffer*>(this)->par_iterator_begin());
+       ParIterator end(const_cast<Buffer*>(this)->par_iterator_end());
+
+       if (id < 0) {
+               // John says this is called with id == -1 from undo
+               lyxerr << "hasParWithID(), id: " << id << endl;
+               return 0;
+       }
+
+       for (; it != end; ++it)
+               if ((*it)->id() == id)
+                       return true;
+
+       return false;
+}
+
+
 ParIterator Buffer::par_iterator_begin()
 {
        return ParIterator(&*(paragraphs.begin()));
@@ -2315,6 +2354,16 @@ Language const * Buffer::getLanguage() const
 }
 
 
+string const Buffer::B_(string const & l10n) const
+{
+       if (messages_.get()) {
+               return messages_->get(l10n);
+       }
+
+       return _(l10n);
+}
+
+
 bool Buffer::isClean() const
 {
        return lyx_clean;
@@ -2449,9 +2498,9 @@ Buffer::inset_iterator::pointer Buffer::inset_iterator::operator->()
 }
 
 
-Paragraph * Buffer::inset_iterator::getPar()
+ParagraphList::iterator Buffer::inset_iterator::getPar() const
 {
-       return &(*pit);
+       return pit;
 }