Add option to ignore a parameter in InsetCommandParams

It will not be saved to the file and will always be equal to a given default
value.
This commit is contained in:
Guillaume Munch 2017-02-14 21:16:39 +01:00
parent 3dec5826da
commit 387ac78088
2 changed files with 36 additions and 7 deletions

View File

@ -99,8 +99,10 @@ static ParamInfo const & findInfo(InsetCode code, string const & cmdName)
/////////////////////////////////////////////////////////////////////
ParamInfo::ParamData::ParamData(std::string const & s, ParamType t,
ParamHandling h)
: name_(s), type_(t), handling_(h)
ParamHandling h, bool ignore,
docstring default_value)
: name_(s), type_(t), handling_(h), ignore_(ignore),
default_value_(default_value)
{}
@ -130,9 +132,10 @@ bool ParamInfo::hasParam(std::string const & name) const
void ParamInfo::add(std::string const & name, ParamType type,
ParamHandling handling)
{
info_.push_back(ParamData(name, type, handling));
ParamHandling handling, bool ignore,
docstring default_value)
{
info_.push_back(ParamData(name, type, handling, ignore, default_value));
}
@ -296,6 +299,11 @@ void InsetCommandParams::Read(Lexer & lex, Buffer const * buffer)
}
info_ = findInfo(insetCode_, cmdName_);
for (ParamInfo::ParamData const & param : info_)
if (param.ignore()) {
params_[param.name()] = param.defaultValue();
}
string token;
while (lex.isOK()) {
@ -361,6 +369,8 @@ void InsetCommandParams::Write(ostream & os, Buffer const * buffer) const
ParamInfo::const_iterator it = info_.begin();
ParamInfo::const_iterator end = info_.end();
for (; it != end; ++it) {
if (it->ignore())
continue;
string const & name = it->name();
string data = to_utf8((*this)[name]);
if (!data.empty()) {
@ -538,6 +548,9 @@ docstring const & InsetCommandParams::operator[](string const & name) const
ParamMap::const_iterator data = params_.find(name);
if (data == params_.end() || data->second.empty())
return dummy;
ParamInfo::ParamData const & param = info_[name];
if (param.ignore())
return param.defaultValue();
return data->second;
}
@ -546,6 +559,9 @@ docstring & InsetCommandParams::operator[](string const & name)
{
LATTEST(info_.hasParam(name));
// this will add the name in release mode
ParamInfo::ParamData const & param = info_[name];
if (param.ignore())
params_[name] = param.defaultValue();
return params_[name];
}

View File

@ -52,7 +52,9 @@ public:
// flag for all commands.
public:
///
ParamData(std::string const &, ParamType, ParamHandling = HANDLING_NONE);
ParamData(std::string const &, ParamType, ParamHandling = HANDLING_NONE,
bool ignore = false,
docstring default_value = docstring());
///
std::string name() const { return name_; }
///
@ -62,6 +64,10 @@ public:
/// whether this is an optional LaTeX argument
bool isOptional() const;
///
bool ignore() const { return ignore_; }
///
docstring const & defaultValue() const { return default_value_; }
///
bool operator==(ParamData const &) const;
///
bool operator!=(ParamData const & rhs) const
@ -73,11 +79,18 @@ public:
ParamType type_;
/// do we need special handling on latex output?
ParamHandling handling_;
///
bool ignore_;
///
docstring default_value_;
};
/// adds a new parameter
/// If ignore is true, then the parameter is never saved, and is always
/// given the default value.
void add(std::string const & name, ParamType type,
ParamHandling = HANDLING_NONE);
ParamHandling = HANDLING_NONE, bool ignore = false,
docstring default_value = docstring());
///
bool empty() const { return info_.empty(); }
///