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
This commit is contained in:
Richard Heck 2011-06-16 14:22:43 +00:00
parent 1211af5c0a
commit ad56a9914c
5 changed files with 32 additions and 6 deletions

View File

@ -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<docstring> 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());

View File

@ -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.

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

View File

@ -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.