# Do not forget to document format change in Customization
# Manual (section "Declaring a new text class").
-currentFormat = 16
+currentFormat = 17
def usage(prog_name):
continue
# This just involved new features, not any changes to old ones
- if format == 14 or format == 15:
+ if format == 14 or format == 15 or format == 16:
i += 1
continue
}
-bool Counters::read(Lexer & lex, docstring const & name)
+bool Counters::read(Lexer & lex, docstring const & name, bool makenew)
{
if (hasCounter(name)) {
LYXERR(Debug::TCLASS, "Reading existing counter " << to_utf8(name));
return counterList_[name].read(lex);
}
+
LYXERR(Debug::TCLASS, "Reading new counter " << to_utf8(name));
Counter cnt;
bool success = cnt.read(lex);
- if (success)
+ // if makenew is false, we will just discard what we read
+ if (success && makenew)
counterList_[name] = cnt;
- else
+ else if (!success)
LYXERR0("Error reading counter `" << name << "'!");
return success;
}
/// Checks whether the given counter exists.
bool hasCounter(docstring const & c) const;
/// reads the counter name
+ /// \param makeNew whether to make a new counter if one
+ /// doesn't already exist
/// \return true on success
- bool read(Lexer & lex, docstring const & name);
+ bool read(Lexer & lex, docstring const & name, bool makenew);
///
void set(docstring const & ctr, int val);
///
};
// Keep the changes documented in the Customization manual.
-int const FORMAT = 16;
+int const FORMAT = 17;
bool layout2layout(FileName const & filename, FileName const & tempfile)
TC_OUTPUTFORMAT,
TC_INPUT,
TC_STYLE,
+ TC_IFSTYLE,
TC_DEFAULTSTYLE,
TC_INSETLAYOUT,
TC_NOSTYLE,
TC_RIGHTMARGIN,
TC_FLOAT,
TC_COUNTER,
+ TC_IFCOUNTER,
TC_NOFLOAT,
TC_TITLELATEXNAME,
TC_TITLELATEXTYPE,
{ "float", TC_FLOAT },
{ "format", TC_FORMAT },
{ "htmlpreamble", TC_HTMLPREAMBLE },
+ { "ifcounter", TC_IFCOUNTER },
+ { "ifstyle", TC_IFSTYLE },
{ "input", TC_INPUT },
{ "insetlayout", TC_INSETLAYOUT },
{ "leftmargin", TC_LEFTMARGIN },
break;
}
+ // used below to track whether we are in an IfStyle or IfCounter tag.
+ bool ifstyle = false;
+ bool ifcounter = false;
+
switch (static_cast<TextClassTags>(le)) {
case TC_FORMAT:
}
break;
+ case TC_IFSTYLE:
+ ifstyle = true;
+ // fall through
case TC_STYLE: {
if (!lexrc.next()) {
lexrc.printError("No name given for style: `$$Token'.");
} else if (hasLayout(name)) {
Layout & lay = operator[](name);
error = !readStyle(lexrc, lay);
- } else {
+ } else if (!ifstyle) {
Layout layout;
layout.setName(name);
error = !readStyle(lexrc, layout);
defaultlayout_ = name;
}
}
+ else {
+ // scan the rest and discard it
+ Layout lay;
+ readStyle(lexrc, lay);
+ error = false;
+ }
+
+ // reset flag
+ ifstyle = false;
break;
}
readFloat(lexrc);
break;
+ case TC_IFCOUNTER:
+ ifcounter = true;
case TC_COUNTER:
if (lexrc.next()) {
docstring const name = lexrc.getDocString();
// and discard it.
c.read(lexrc);
} else
- error = !counters_.read(lexrc, name);
+ error = !counters_.read(lexrc, name, !ifcounter);
}
else {
lexrc.printError("No name given for style: `$$Token'.");
error = true;
}
+ // reset flag
+ ifcounter = false;
break;
case TC_TITLELATEXTYPE: