mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 13:18:28 +00:00
TeXOnePar() simplification: use pit_type instead of iterator
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@36936 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
fd73107054
commit
1614a64e15
@ -132,9 +132,8 @@ static docstring buffer_to_latex(Buffer & buffer)
|
||||
// No side effect of file copying and image conversion
|
||||
runparams.dryrun = true;
|
||||
buffer.texrow().reset();
|
||||
ParagraphList::const_iterator pit = buffer.paragraphs().begin();
|
||||
ParagraphList::const_iterator const end = buffer.paragraphs().end();
|
||||
for (; pit != end; ++pit) {
|
||||
pit_type const endpit = buffer.paragraphs().size();
|
||||
for (pit_type pit = 0; pit != endpit; ++pit) {
|
||||
TeXOnePar(buffer, buffer.text(),
|
||||
pit, os, buffer.texrow(), runparams);
|
||||
LYXERR(Debug::FIND, "searchString up to here: "
|
||||
|
@ -915,14 +915,12 @@ docstring latexifyFromCursor(DocIterator const & cur, int len)
|
||||
runparams.dryrun = true;
|
||||
|
||||
if (cur.inTexted()) {
|
||||
// @TODO what about searching beyond/across paragraph breaks ?
|
||||
ParagraphList::const_iterator pit = cur.innerText()->paragraphs().begin();
|
||||
for (int i = 0; i < cur.pit(); ++i)
|
||||
++pit;
|
||||
pos_type const endpos = (len == -1 || cur.pos() + len > int(pit->size()))
|
||||
? pit->size() : cur.pos() + len;
|
||||
TeXOnePar(buf, *cur.innerText(), pit, ods, texrow, runparams, string(),
|
||||
cur.pos(), endpos);
|
||||
// @TODO what about searching beyond/across paragraph breaks ?
|
||||
pos_type endpos = cur.paragraph().size();
|
||||
if (len != -1 && endpos > cur.pos() + len)
|
||||
endpos = cur.pos() + len;
|
||||
TeXOnePar(buf, *cur.innerText(), cur.pit(), ods, texrow, runparams,
|
||||
string(), cur.pos(), endpos);
|
||||
LYXERR(Debug::FIND, "Latexified text: '" << lyx::to_utf8(ods.str()) << "'");
|
||||
} else if (cur.inMathed()) {
|
||||
// Retrieve the math environment type, and add '$' or '$[' or others (\begin{equation}) accordingly
|
||||
@ -1216,8 +1214,7 @@ static void findAdvReplace(BufferView * bv, FindAndReplaceOptions const & opt, M
|
||||
runparams.linelen = 8000; //lyxrc.plaintext_linelen;
|
||||
runparams.dryrun = true;
|
||||
TexRow texrow;
|
||||
TeXOnePar(repl_buffer, repl_buffer.text(),
|
||||
repl_buffer.paragraphs().begin(), ods, texrow, runparams);
|
||||
TeXOnePar(repl_buffer, repl_buffer.text(), 0, ods, texrow, runparams);
|
||||
//repl_buffer.getSourceCode(ods, 0, repl_buffer.paragraphs().size(), false);
|
||||
docstring repl_latex = ods.str();
|
||||
LYXERR(Debug::FIND, "Latexified replace_buffer: '" << repl_latex << "'");
|
||||
|
@ -272,7 +272,7 @@ void TeXEnvironment(Buffer const & buf,
|
||||
&& par->params().depth() == current_depth
|
||||
&& par->params().leftIndent() == current_left_indent) {
|
||||
// We are still in the same environment so TeXOnePar and continue;
|
||||
TeXOnePar(buf, text, par, os, texrow, runparams);
|
||||
TeXOnePar(buf, text, pit, os, texrow, runparams);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -307,7 +307,7 @@ void TeXEnvironment(Buffer const & buf,
|
||||
|
||||
if (!style.isEnvironment()) {
|
||||
// This is a standard paragraph, no need to call TeXEnvironment.
|
||||
TeXOnePar(buf, text, par, os, texrow, runparams);
|
||||
TeXOnePar(buf, text, pit, os, texrow, runparams);
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -384,7 +384,7 @@ int latexArgInsets(Paragraph const & par, odocstream & os,
|
||||
// FIXME: this should be anonymous
|
||||
void TeXOnePar(Buffer const & buf,
|
||||
Text const & text,
|
||||
ParagraphList::const_iterator const pit,
|
||||
pit_type pit,
|
||||
odocstream & os, TexRow & texrow,
|
||||
OutputParams const & runparams_in,
|
||||
string const & everypar,
|
||||
@ -392,26 +392,21 @@ void TeXOnePar(Buffer const & buf,
|
||||
{
|
||||
|
||||
BufferParams const & bparams = buf.params();
|
||||
ParagraphList const & paragraphs = text.paragraphs();
|
||||
Paragraph const & par = paragraphs.at(pit);
|
||||
// FIXME This check should not really be needed.
|
||||
// Perhaps we should issue an error if it is.
|
||||
Layout const style = text.inset().forcePlainLayout() ?
|
||||
bparams.documentClass().plainLayout() : pit->layout();
|
||||
|
||||
ParagraphList const & paragraphs = text.paragraphs();
|
||||
ParagraphList::const_iterator const priorpit =
|
||||
pit == paragraphs.begin() ? pit : boost::prior(pit);
|
||||
ParagraphList::const_iterator const nextpit =
|
||||
pit == paragraphs.end() ? pit : boost::next(pit);
|
||||
bparams.documentClass().plainLayout() : par.layout();
|
||||
|
||||
if (style.inpreamble)
|
||||
return;
|
||||
|
||||
size_t pos = paragraphs.position(pit);
|
||||
LYXERR(Debug::LATEX, "TeXOnePar for paragraph " << pos << " ptr " << &*pit << " '"
|
||||
LYXERR(Debug::LATEX, "TeXOnePar for paragraph " << pit << " ptr " << &par << " '"
|
||||
<< everypar << "'");
|
||||
|
||||
OutputParams runparams = runparams_in;
|
||||
runparams.isLastPar = nextpit == paragraphs.end();
|
||||
runparams.isLastPar = (pit == paragraphs.size() - 1);
|
||||
// We reinitialze par begin and end to be on the safe side
|
||||
// with embedded inset as we don't know if they set those
|
||||
// value correctly.
|
||||
@ -421,18 +416,17 @@ void TeXOnePar(Buffer const & buf,
|
||||
bool const maintext = text.isMainText();
|
||||
// we are at the beginning of an inset and CJK is already open;
|
||||
// we count inheritation levels to get the inset nesting right.
|
||||
if (pit == paragraphs.begin() && !maintext
|
||||
if (pit == 0 && !maintext
|
||||
&& (cjk_inherited_ > 0 || open_encoding_ == CJK)) {
|
||||
cjk_inherited_ += 1;
|
||||
open_encoding_ = none;
|
||||
}
|
||||
|
||||
if (text.inset().getLayout().isPassThru()) {
|
||||
int const dist = paragraphs.position(pit);
|
||||
Font const outerfont = text.outerFont(dist);
|
||||
Font const outerfont = text.outerFont(pit);
|
||||
|
||||
// No newline before first paragraph in this lyxtext
|
||||
if (dist > 0) {
|
||||
if (pit > 0) {
|
||||
os << '\n';
|
||||
texrow.newline();
|
||||
if (!text.inset().getLayout().parbreakIsNewline()) {
|
||||
@ -441,24 +435,26 @@ void TeXOnePar(Buffer const & buf,
|
||||
}
|
||||
}
|
||||
|
||||
pit->latex(bparams, outerfont, os, texrow,
|
||||
runparams, start_pos, end_pos);
|
||||
par.latex(bparams, outerfont, os, texrow, runparams, start_pos,
|
||||
end_pos);
|
||||
return;
|
||||
}
|
||||
|
||||
Paragraph const * nextpar = runparams.isLastPar
|
||||
? 0 : ¶graphs.at(pit + 1);
|
||||
|
||||
if (style.pass_thru) {
|
||||
int const dist = paragraphs.position(pit);
|
||||
Font const outerfont = text.outerFont(dist);
|
||||
pit->latex(bparams, outerfont, os, texrow,
|
||||
runparams, start_pos, end_pos);
|
||||
Font const outerfont = text.outerFont(pit);
|
||||
par.latex(bparams, outerfont, os, texrow, runparams, start_pos,
|
||||
end_pos);
|
||||
os << '\n';
|
||||
texrow.newline();
|
||||
if (!style.parbreak_is_newline) {
|
||||
os << '\n';
|
||||
texrow.newline();
|
||||
} else if (nextpit != paragraphs.end()) {
|
||||
} else if (nextpar) {
|
||||
Layout const nextstyle = text.inset().forcePlainLayout() ?
|
||||
bparams.documentClass().plainLayout() : nextpit->layout();
|
||||
bparams.documentClass().plainLayout() : nextpar->layout();
|
||||
if (nextstyle.name() != style.name()) {
|
||||
os << '\n';
|
||||
texrow.newline();
|
||||
@ -469,7 +465,7 @@ void TeXOnePar(Buffer const & buf,
|
||||
}
|
||||
|
||||
// This paragraph's language
|
||||
Language const * const par_language = pit->getParLanguage(bparams);
|
||||
Language const * const par_language = par.getParLanguage(bparams);
|
||||
// The document's language
|
||||
Language const * const doc_language = bparams.language;
|
||||
// The language that was in effect when the environment this paragraph is
|
||||
@ -478,20 +474,23 @@ void TeXOnePar(Buffer const & buf,
|
||||
(runparams.local_font != 0) ?
|
||||
runparams.local_font->language() : doc_language;
|
||||
|
||||
Paragraph const * priorpar = (pit == 0) ? 0 : ¶graphs.at(pit - 1);
|
||||
|
||||
// The previous language that was in effect is the language of the
|
||||
// previous paragraph, unless the previous paragraph is inside an
|
||||
// environment with nesting depth greater than (or equal to, but with
|
||||
// a different layout) the current one. If there is no previous
|
||||
// paragraph, the previous language is the outer language.
|
||||
bool const use_prev_env_language = prev_env_language_ != 0
|
||||
&& priorpit->layout().isEnvironment()
|
||||
&& (priorpit->getDepth() > pit->getDepth()
|
||||
|| (priorpit->getDepth() == pit->getDepth()
|
||||
&& priorpit->layout() != pit->layout()));
|
||||
&& priorpar
|
||||
&& priorpar->layout().isEnvironment()
|
||||
&& (priorpar->getDepth() > par.getDepth()
|
||||
|| (priorpar->getDepth() == par.getDepth()
|
||||
&& priorpar->layout() != par.layout()));
|
||||
Language const * const prev_language =
|
||||
(pit != paragraphs.begin())
|
||||
(pit != 0)
|
||||
? (use_prev_env_language ? prev_env_language_
|
||||
: priorpit->getParLanguage(bparams))
|
||||
: priorpar->getParLanguage(bparams))
|
||||
: outer_language;
|
||||
|
||||
string par_lang = par_language->babel();
|
||||
@ -512,10 +511,10 @@ void TeXOnePar(Buffer const & buf,
|
||||
if (par_lang != prev_lang
|
||||
// check if we already put language command in TeXEnvironment()
|
||||
&& !(style.isEnvironment()
|
||||
&& (pit == paragraphs.begin() ||
|
||||
(priorpit->layout() != pit->layout() &&
|
||||
priorpit->getDepth() <= pit->getDepth())
|
||||
|| priorpit->getDepth() < pit->getDepth())))
|
||||
&& (pit == 0 ||
|
||||
(priorpar->layout() != par.layout() &&
|
||||
priorpar->getDepth() <= par.getDepth())
|
||||
|| priorpar->getDepth() < par.getDepth())))
|
||||
{
|
||||
if (!lang_end_command.empty() &&
|
||||
prev_lang != outer_lang &&
|
||||
@ -604,15 +603,15 @@ void TeXOnePar(Buffer const & buf,
|
||||
// sections. For this reason we only set runparams.moving_arg
|
||||
// after checking for the encoding change, otherwise the
|
||||
// change would be always avoided by switchEncoding().
|
||||
for (pos_type i = 0; i < pit->size(); ++i) {
|
||||
char_type const c = pit->getChar(i);
|
||||
for (pos_type i = 0; i < par.size(); ++i) {
|
||||
char_type const c = par.getChar(i);
|
||||
Encoding const * const encoding =
|
||||
pit->getFontSettings(bparams, i).language()->encoding();
|
||||
par.getFontSettings(bparams, i).language()->encoding();
|
||||
if (encoding->package() != Encoding::CJK &&
|
||||
runparams.encoding->package() == Encoding::inputenc &&
|
||||
c < 0x80)
|
||||
continue;
|
||||
if (pit->isInset(i))
|
||||
if (par.isInset(i))
|
||||
break;
|
||||
// All characters before c are in the ASCII range, and
|
||||
// c is non-ASCII (but no inset), so change the
|
||||
@ -658,17 +657,16 @@ void TeXOnePar(Buffer const & buf,
|
||||
Encoding const * const prev_encoding = runparams.encoding;
|
||||
|
||||
bool const useSetSpace = bparams.documentClass().provides("SetSpace");
|
||||
if (pit->allowParagraphCustomization()) {
|
||||
if (pit->params().startOfAppendix()) {
|
||||
if (par.allowParagraphCustomization()) {
|
||||
if (par.params().startOfAppendix()) {
|
||||
os << "\\appendix\n";
|
||||
texrow.newline();
|
||||
}
|
||||
|
||||
if (!pit->params().spacing().isDefault()
|
||||
&& (pit == paragraphs.begin()
|
||||
|| !priorpit->hasSameLayout(*pit)))
|
||||
if (!par.params().spacing().isDefault()
|
||||
&& (pit == 0 || !priorpar->hasSameLayout(par)))
|
||||
{
|
||||
os << from_ascii(pit->params().spacing().writeEnvirBegin(useSetSpace))
|
||||
os << from_ascii(par.params().spacing().writeEnvirBegin(useSetSpace))
|
||||
<< '\n';
|
||||
texrow.newline();
|
||||
}
|
||||
@ -685,7 +683,7 @@ void TeXOnePar(Buffer const & buf,
|
||||
|
||||
// Separate handling of optional argument inset.
|
||||
if (style.optargs != 0 || style.reqargs != 0) {
|
||||
int ret = latexArgInsets(*pit, os, runparams, style.reqargs, style.optargs);
|
||||
int ret = latexArgInsets(par, os, runparams, style.reqargs, style.optargs);
|
||||
while (ret > 0) {
|
||||
texrow.newline();
|
||||
--ret;
|
||||
@ -705,12 +703,11 @@ void TeXOnePar(Buffer const & buf,
|
||||
break;
|
||||
}
|
||||
|
||||
Font const outerfont = text.outerFont(paragraphs.position(pit));
|
||||
Font const outerfont = text.outerFont(pit);
|
||||
|
||||
// FIXME UNICODE
|
||||
os << from_utf8(everypar);
|
||||
pit->latex(bparams, outerfont, os, texrow,
|
||||
runparams, start_pos, end_pos);
|
||||
par.latex(bparams, outerfont, os, texrow, runparams, start_pos, end_pos);
|
||||
|
||||
// Make sure that \\par is done with the font of the last
|
||||
// character if this has another size as the default.
|
||||
@ -722,14 +719,14 @@ void TeXOnePar(Buffer const & buf,
|
||||
// We do not need to use to change the font for the last paragraph
|
||||
// or for a command.
|
||||
|
||||
Font const font = pit->empty()
|
||||
? pit->getLayoutFont(bparams, outerfont)
|
||||
: pit->getFont(bparams, pit->size() - 1, outerfont);
|
||||
Font const font = par.empty()
|
||||
? par.getLayoutFont(bparams, outerfont)
|
||||
: par.getFont(bparams, par.size() - 1, outerfont);
|
||||
|
||||
bool const is_command = style.isCommand();
|
||||
|
||||
if (style.resfont.size() != font.fontInfo().size()
|
||||
&& nextpit != paragraphs.end()
|
||||
&& nextpar
|
||||
&& !is_command) {
|
||||
os << '{';
|
||||
os << "\\" << from_ascii(font.latexSize()) << " \\par}";
|
||||
@ -746,35 +743,33 @@ void TeXOnePar(Buffer const & buf,
|
||||
switch (style.latextype) {
|
||||
case LATEX_ITEM_ENVIRONMENT:
|
||||
case LATEX_LIST_ENVIRONMENT:
|
||||
if (nextpit != paragraphs.end()
|
||||
&& (pit->params().depth() < nextpit->params().depth()))
|
||||
if (nextpar && (par.params().depth() < nextpar->params().depth()))
|
||||
pending_newline = true;
|
||||
break;
|
||||
case LATEX_ENVIRONMENT: {
|
||||
// if its the last paragraph of the current environment
|
||||
// skip it otherwise fall through
|
||||
if (nextpit != paragraphs.end() &&
|
||||
(nextpit->layout() != pit->layout()
|
||||
|| nextpit->params().depth() != pit->params().depth()))
|
||||
if (nextpar && (nextpar->layout() != par.layout()
|
||||
|| nextpar->params().depth() != par.params().depth()))
|
||||
break;
|
||||
}
|
||||
|
||||
// fall through possible
|
||||
default:
|
||||
// we don't need it for the last paragraph!!!
|
||||
if (nextpit != paragraphs.end())
|
||||
if (nextpar)
|
||||
pending_newline = true;
|
||||
}
|
||||
|
||||
if (pit->allowParagraphCustomization()) {
|
||||
if (!pit->params().spacing().isDefault()
|
||||
&& (nextpit == paragraphs.end() || !nextpit->hasSameLayout(*pit)))
|
||||
if (par.allowParagraphCustomization()) {
|
||||
if (!par.params().spacing().isDefault()
|
||||
&& (runparams.isLastPar || !nextpar->hasSameLayout(par)))
|
||||
{
|
||||
if (pending_newline) {
|
||||
os << '\n';
|
||||
texrow.newline();
|
||||
}
|
||||
os << from_ascii(pit->params().spacing().writeEnvirEnd(useSetSpace));
|
||||
os << from_ascii(par.params().spacing().writeEnvirEnd(useSetSpace));
|
||||
pending_newline = true;
|
||||
}
|
||||
}
|
||||
@ -791,14 +786,11 @@ void TeXOnePar(Buffer const & buf,
|
||||
runparams.local_font != 0 &&
|
||||
runparams.local_font->isRightToLeft() != par_language->rightToLeft() &&
|
||||
// are we about to close the language?
|
||||
((nextpit != paragraphs.end() &&
|
||||
par_language->babel() !=
|
||||
(nextpit->getParLanguage(bparams))->babel()) ||
|
||||
(nextpit == paragraphs.end() &&
|
||||
par_language->babel() != outer_language->babel()));
|
||||
((nextpar && par_language->babel() != (nextpar->getParLanguage(bparams))->babel())
|
||||
|| (runparams.isLastPar && par_language->babel() != outer_language->babel()));
|
||||
|
||||
if (closing_rtl_ltr_environment || (nextpit == paragraphs.end()
|
||||
&& par_language->babel() != outer_language->babel())) {
|
||||
if (closing_rtl_ltr_environment
|
||||
|| (runparams.isLastPar && par_language->babel() != outer_language->babel())) {
|
||||
// Since \selectlanguage write the language to the aux file,
|
||||
// we need to reset the language at the end of footnote or
|
||||
// float.
|
||||
@ -813,8 +805,7 @@ void TeXOnePar(Buffer const & buf,
|
||||
// If this is a child, we should restore the
|
||||
// master language after the last paragraph.
|
||||
Language const * const current_language =
|
||||
(nextpit == paragraphs.end()
|
||||
&& runparams.master_language)
|
||||
(runparams.isLastPar && runparams.master_language)
|
||||
? runparams.master_language
|
||||
: outer_language;
|
||||
string const current_lang = runparams.use_polyglossia ?
|
||||
@ -846,18 +837,18 @@ void TeXOnePar(Buffer const & buf,
|
||||
|
||||
// if this is a CJK-paragraph and the next isn't, close CJK
|
||||
// also if the next paragraph is a multilingual environment (because of nesting)
|
||||
if (nextpit != paragraphs.end() && open_encoding_ == CJK &&
|
||||
(nextpit->getParLanguage(bparams)->encoding()->package() != Encoding::CJK ||
|
||||
(nextpit->layout().isEnvironment() && nextpit->isMultiLingual(bparams)))
|
||||
if (nextpar && open_encoding_ == CJK &&
|
||||
(nextpar->getParLanguage(bparams)->encoding()->package() != Encoding::CJK ||
|
||||
(nextpar->layout().isEnvironment() && nextpar->isMultiLingual(bparams)))
|
||||
// inbetween environments, CJK has to be closed later (nesting!)
|
||||
&& (!style.isEnvironment() || !nextpit->layout().isEnvironment())) {
|
||||
&& (!style.isEnvironment() || !nextpar->layout().isEnvironment())) {
|
||||
os << "\\end{CJK}\n";
|
||||
open_encoding_ = none;
|
||||
}
|
||||
|
||||
// If this is the last paragraph, close the CJK environment
|
||||
// if necessary. If it's an environment, we'll have to \end that first.
|
||||
if (nextpit == paragraphs.end() && !style.isEnvironment()) {
|
||||
if (runparams.isLastPar && !style.isEnvironment()) {
|
||||
switch (open_encoding_) {
|
||||
case CJK: {
|
||||
// do nothing at the end of child documents
|
||||
@ -892,7 +883,7 @@ void TeXOnePar(Buffer const & buf,
|
||||
// should be set back to that local_font's encoding.
|
||||
// However, do not change the encoding when a fully unicode aware backend
|
||||
// such as XeTeX is used.
|
||||
if (nextpit == paragraphs.end() && runparams_in.local_font != 0
|
||||
if (runparams.isLastPar && runparams_in.local_font != 0
|
||||
&& runparams_in.encoding != runparams_in.local_font->language()->encoding()
|
||||
&& (bparams.inputenc == "auto" || bparams.inputenc == "default")
|
||||
&& (!runparams.isFullUnicode())) {
|
||||
@ -907,8 +898,8 @@ void TeXOnePar(Buffer const & buf,
|
||||
// we don't need a newline for the last paragraph!!!
|
||||
// Note from JMarc: we will re-add a \n explicitly in
|
||||
// TeXEnvironment, because it is needed in this case
|
||||
if (nextpit != paragraphs.end()) {
|
||||
Layout const & next_layout = nextpit->layout();
|
||||
if (nextpar) {
|
||||
Layout const & next_layout = nextpar->layout();
|
||||
if (style == next_layout
|
||||
// no blank lines before environments!
|
||||
|| !next_layout.isEnvironment()
|
||||
@ -919,14 +910,14 @@ void TeXOnePar(Buffer const & buf,
|
||||
// information whether the current TeX row is empty or not.
|
||||
// For some ideas about how to fix this, see this thread:
|
||||
// http://www.mail-archive.com/lyx-devel@lists.lyx.org/msg145787.html
|
||||
|| nextpit->params().depth() != pit->params().depth()) {
|
||||
|| nextpar->params().depth() != par.params().depth()) {
|
||||
os << '\n';
|
||||
texrow.newline();
|
||||
}
|
||||
}
|
||||
|
||||
if (nextpit != paragraphs.end())
|
||||
LYXERR(Debug::LATEX, "TeXOnePar for paragraph " << pos << " done; ptr " << &*pit << " next " << &*nextpit);
|
||||
LYXERR(Debug::LATEX, "TeXOnePar for paragraph " << pit << " done; ptr "
|
||||
<< &par << " next " << nextpar);
|
||||
|
||||
return;
|
||||
}
|
||||
@ -1036,7 +1027,7 @@ void latexParagraphs(Buffer const & buf,
|
||||
|
||||
if (!layout.isEnvironment() && par->params().leftIndent().zero()) {
|
||||
// This is a standard top level paragraph, TeX it and continue.
|
||||
TeXOnePar(buf, text, par, os, texrow, runparams, everypar);
|
||||
TeXOnePar(buf, text, pit, os, texrow, runparams, everypar);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -63,7 +63,7 @@ std::pair<bool, int> switchEncoding(odocstream & os,
|
||||
/// FIXME: this should not be visible.
|
||||
void TeXOnePar(Buffer const & buf,
|
||||
Text const & text,
|
||||
ParagraphList::const_iterator pit,
|
||||
pit_type pit,
|
||||
odocstream & os, TexRow & texrow,
|
||||
OutputParams const & runparams,
|
||||
std::string const & everypar = std::string(),
|
||||
|
Loading…
Reference in New Issue
Block a user