From: Richard Heck Date: Thu, 16 Jun 2011 14:22:43 +0000 (+0000) Subject: Restore fix for #7517. X-Git-Tag: 2.0.1~179 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=ad56a9914c18ed8572fc2a5f9bf2d35ac3af0602;p=features.git Restore fix for #7517. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/branches/BRANCH_2_0_X@39090 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/CutAndPaste.cpp b/src/CutAndPaste.cpp index 39b732fea6..2bac66f8a6 100644 --- a/src/CutAndPaste.cpp +++ b/src/CutAndPaste.cpp @@ -647,13 +647,25 @@ void switchBetweenClasses(DocumentClass const * const oldone, DocumentClass const & newtc = *newone; // layouts + ParIterator it = par_iterator_begin(in); ParIterator end = par_iterator_end(in); - for (ParIterator it = par_iterator_begin(in); it != end; ++it) { + // for remembering which layouts we've had to add + set newlayouts; + for (; it != end; ++it) { docstring const name = it->layout().name(); // the pasted text will keep their own layout name. If this layout does // not exist in the new document, it will behave like a standard layout. - newtc.addLayoutIfNeeded(name); + bool const added_one = newtc.addLayoutIfNeeded(name); + if (added_one) + newlayouts.insert(name); + + if (added_one || newlayouts.find(name) != newlayouts.end()) { + // Warn the user. + docstring const s = bformat(_("Layout `%1$s' was not found."), name); + errorlist.push_back( + ErrorItem(_("Layout Not Found"), s, it->id(), 0, it->size())); + } if (in.usePlainLayout()) it->setLayout(newtc.plainLayout()); diff --git a/src/Text.cpp b/src/Text.cpp index 6cc6c520e6..7da48185c8 100644 --- a/src/Text.cpp +++ b/src/Text.cpp @@ -357,6 +357,14 @@ void Text::readParToken(Paragraph & par, Lexer & lex, // all unknown layouts such as frame will be added to document class article so that // these layouts can keep their original names. tclass.addLayoutIfNeeded(layoutname); + bool const added_one = tclass.addLayoutIfNeeded(layoutname); + if (added_one) { + // Warn the user. + docstring const s = bformat(_("Layout `%1$s' was not found."), layoutname); + errorList.push_back( + ErrorItem(_("Layout Not Found"), s, par.id(), 0, par.size())); + } + par.setLayout(bp.documentClass()[layoutname]); // Test whether the layout is obsolete. diff --git a/src/TextClass.cpp b/src/TextClass.cpp index 00558d5862..c9cbcae5e0 100644 --- a/src/TextClass.cpp +++ b/src/TextClass.cpp @@ -1199,10 +1199,13 @@ bool TextClass::load(string const & path) const } -void DocumentClass::addLayoutIfNeeded(docstring const & n) const +bool DocumentClass::addLayoutIfNeeded(docstring const & n) const { - if (!hasLayout(n)) - layoutlist_.push_back(createBasicLayout(n, true)); + if (hasLayout(n)) + return false; + + layoutlist_.push_back(createBasicLayout(n, true)); + return true; } diff --git a/src/TextClass.h b/src/TextClass.h index f3d2197278..6e20650cc2 100644 --- a/src/TextClass.h +++ b/src/TextClass.h @@ -373,7 +373,8 @@ public: /// a plain inset layout for use as a default static InsetLayout const & plainInsetLayout() { return plain_insetlayout_; } /// add a new layout \c name if it does not exist in layoutlist_ - void addLayoutIfNeeded(docstring const & name) const; + /// \return whether we had to add one. + bool addLayoutIfNeeded(docstring const & name) const; /////////////////////////////////////////////////////////////////// // accessors diff --git a/status.20x b/status.20x index b55983e1e7..08f77642f4 100644 --- a/status.20x +++ b/status.20x @@ -83,6 +83,8 @@ What's new - Fix output of decimally aligned columns in unviewed (on screen) tables. +- Inform user of unknown layouts caused by class change (bug 7571). + - Avoid LaTeX errors if font changing commands are used in the wrong mode by assuring to switch to the right mode on export.