Fix bug #7517. This restores some code removed when we started adding basic layouts we didn't recognize.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/branches/BRANCH_2_0_X@38983 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Richard Heck 2011-06-08 00:53:19 +00:00
parent 50fc0ea9bb
commit 7b4a9b95e3
5 changed files with 31 additions and 6 deletions

View File

@ -647,13 +647,25 @@ void switchBetweenClasses(DocumentClass const * const oldone,
DocumentClass const & newtc = *newone; DocumentClass const & newtc = *newone;
// layouts // layouts
ParIterator it = par_iterator_begin(in);
ParIterator end = par_iterator_end(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<docstring> newlayouts;
for (; it != end; ++it) {
docstring const name = it->layout().name(); docstring const name = it->layout().name();
// the pasted text will keep their own layout name. If this layout does // 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. // 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()) if (in.usePlainLayout())
it->setLayout(newtc.plainLayout()); it->setLayout(newtc.plainLayout());

View File

@ -357,6 +357,13 @@ void Text::readParToken(Paragraph & par, Lexer & lex,
// all unknown layouts such as frame will be added to document class article so that // all unknown layouts such as frame will be added to document class article so that
// these layouts can keep their original names. // these layouts can keep their original names.
tclass.addLayoutIfNeeded(layoutname); 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]); par.setLayout(bp.documentClass()[layoutname]);

View File

@ -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)) if (hasLayout(n))
layoutlist_.push_back(createBasicLayout(n, true)); return false;
layoutlist_.push_back(createBasicLayout(n, true));
return true;
} }

View File

@ -373,7 +373,8 @@ public:
/// a plain inset layout for use as a default /// a plain inset layout for use as a default
static InsetLayout const & plainInsetLayout() { return plain_insetlayout_; } static InsetLayout const & plainInsetLayout() { return plain_insetlayout_; }
/// add a new layout \c name if it does not exist in layoutlist_ /// 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 // accessors

View File

@ -70,6 +70,8 @@ What's new
- Fix output of decimally aligned columns in unviewed (on screen) tables. - 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 - Avoid LaTeX errors if font changing commands are used in the wrong mode
by assuring to switch to the right mode on export. by assuring to switch to the right mode on export.