mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 13:18:28 +00:00
Fix problem with validation when using InsetLayout.
(cherry picked from commit 2e444dd657
)
This commit is contained in:
parent
20996d46fc
commit
2ece10f327
@ -731,6 +731,7 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
|
||||
break;
|
||||
}
|
||||
docstring const name = subst(lexrc.getDocString(), '_', ' ');
|
||||
bool const validating = (rt == VALIDATION);
|
||||
if (name.empty()) {
|
||||
string s = "Could not read name for InsetLayout: `$$Token' "
|
||||
+ lexrc.getString() + " is probably not valid UTF-8!";
|
||||
@ -739,15 +740,17 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt)
|
||||
// Since we couldn't read the name, we just scan the rest
|
||||
// of the style and discard it.
|
||||
il.read(lexrc, *this);
|
||||
// Let's try to continue rather than abort.
|
||||
// error = true;
|
||||
// Let's try to continue rather than abort, unless we're validating
|
||||
// in which case we want to report the error
|
||||
if (validating)
|
||||
error = true;
|
||||
} else if (hasInsetLayout(name)) {
|
||||
InsetLayout & il = insetlayoutlist_[name];
|
||||
error = !il.read(lexrc, *this);
|
||||
error = !il.read(lexrc, *this, validating);
|
||||
} else {
|
||||
InsetLayout il;
|
||||
il.setName(name);
|
||||
error = !il.read(lexrc, *this);
|
||||
error = !il.read(lexrc, *this, validating);
|
||||
if (!error)
|
||||
insetlayoutlist_[name] = il;
|
||||
}
|
||||
|
@ -77,7 +77,8 @@ InsetLayout::InsetLaTeXType translateLaTeXType(std::string const & str)
|
||||
} // namespace
|
||||
|
||||
|
||||
bool InsetLayout::read(Lexer & lex, TextClass const & tclass)
|
||||
bool InsetLayout::read(Lexer & lex, TextClass const & tclass,
|
||||
bool validating)
|
||||
{
|
||||
enum {
|
||||
IL_ADDTOTOC,
|
||||
@ -203,6 +204,8 @@ bool InsetLayout::read(Lexer & lex, TextClass const & tclass)
|
||||
switch (le) {
|
||||
case Lexer::LEX_UNDEF:
|
||||
lex.printError("Unknown InsetLayout tag");
|
||||
if (validating)
|
||||
return false;
|
||||
continue;
|
||||
default:
|
||||
break;
|
||||
@ -219,13 +222,20 @@ bool InsetLayout::read(Lexer & lex, TextClass const & tclass)
|
||||
LYXERR0("Flex insets must have names of the form `Flex:<name>'.\n"
|
||||
"This one has the name `" << to_utf8(name_) << "'\n"
|
||||
"Ignoring LyXType declaration.");
|
||||
// this is not really a reason to abort
|
||||
if (validating)
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
string lt;
|
||||
lex >> lt;
|
||||
lyxtype_ = translateLyXType(lt);
|
||||
if (lyxtype_ == NOLYXTYPE)
|
||||
if (lyxtype_ == NOLYXTYPE) {
|
||||
LYXERR0("Unknown LyXType `" << lt << "'.");
|
||||
// this is not really a reason to abort
|
||||
if (validating)
|
||||
return false;
|
||||
}
|
||||
if (lyxtype_ == CHARSTYLE) {
|
||||
// by default, charstyles force the plain layout
|
||||
multipar_ = false;
|
||||
@ -237,8 +247,12 @@ bool InsetLayout::read(Lexer & lex, TextClass const & tclass)
|
||||
string lt;
|
||||
lex >> lt;
|
||||
latextype_ = translateLaTeXType(lt);
|
||||
if (latextype_ == ILT_ERROR)
|
||||
if (latextype_ == ILT_ERROR) {
|
||||
LYXERR0("Unknown LaTeXType `" << lt << "'.");
|
||||
// this is not really a reason to abort
|
||||
if (validating)
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case IL_LABELSTRING:
|
||||
@ -350,6 +364,9 @@ bool InsetLayout::read(Lexer & lex, TextClass const & tclass)
|
||||
tclass.insetLayouts().end();
|
||||
for (; lit != len; ++lit)
|
||||
lyxerr << lit->second.name() << "\n";
|
||||
// this is not really a reason to abort
|
||||
if (validating)
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -380,6 +397,9 @@ bool InsetLayout::read(Lexer & lex, TextClass const & tclass)
|
||||
tclass.insetLayouts().end();
|
||||
for (; lit != len; ++lit)
|
||||
lyxerr << lit->second.name() << "\n";
|
||||
// this is not really a reason to abort
|
||||
if (validating)
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -56,7 +56,8 @@ public:
|
||||
ILT_ERROR
|
||||
};
|
||||
///
|
||||
bool read(Lexer & lexrc, TextClass const & tclass);
|
||||
bool read(Lexer & lexrc, TextClass const & tclass,
|
||||
bool validating = false);
|
||||
///
|
||||
docstring name() const { return name_; }
|
||||
///
|
||||
|
@ -68,6 +68,7 @@ What's new
|
||||
- Fix a crash reported on lyx users.
|
||||
There was an uninitialized buffer member of MathData in LFUN dispatch.
|
||||
|
||||
- Fix problem with validation of InsetLayout.
|
||||
|
||||
* INTERNALS
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user