+ // FIXME This test should not be necessary.
+ // We should perhaps issue an error if it is.
+ bool const force_plain_layout = text.inset().forcePlainLayout();
+ Layout const & style = force_plain_layout
+ ? buf.params().documentClass().plainLayout()
+ : par->layout();
+
+ if (!style.isEnvironment()) {
+ // This is a standard paragraph, no need to call TeXEnvironment.
+ TeXOnePar(buf, text, pit, os, runparams);
+ continue;
+ }
+
+ // This is a new environment.
+ TeXEnvironmentData const data =
+ prepareEnvironment(buf, text, par, os, runparams);
+ // Recursive call to TeXEnvironment!
+ TeXEnvironment(buf, text, runparams, pit, os);
+ finishEnvironment(os, runparams, data);
+ }
+
+ if (pit != runparams.par_end)
+ LYXERR(Debug::LATEX, "TeXEnvironment for paragraph " << par_begin << " done.");
+}
+
+
+void getArgInsets(otexstream & os, OutputParams const & runparams, Layout::LaTeXArgMap const & latexargs,
+ map<int, lyx::InsetArgument const *> ilist, vector<string> required, string const & prefix)
+{
+ unsigned int const argnr = latexargs.size();
+ if (argnr == 0)
+ return;
+
+ for (unsigned int i = 1; i <= argnr; ++i) {
+ map<int, InsetArgument const *>::const_iterator lit = ilist.find(i);
+ bool inserted = false;
+ if (lit != ilist.end()) {
+ InsetArgument const * ins = (*lit).second;
+ if (ins) {
+ Layout::LaTeXArgMap::const_iterator const lait =
+ latexargs.find(ins->name());
+ if (lait != latexargs.end()) {
+ Layout::latexarg arg = (*lait).second;
+ docstring ldelim = arg.mandatory ?
+ from_ascii("{") : from_ascii("[");
+ docstring rdelim = arg.mandatory ?
+ from_ascii("}") : from_ascii("]");
+ if (!arg.ldelim.empty())
+ ldelim = arg.ldelim;
+ if (!arg.rdelim.empty())
+ rdelim = arg.rdelim;
+ ins->latexArgument(os, runparams, ldelim, rdelim, arg.presetarg);
+ inserted = true;
+ }
+ }
+ }
+ if (!inserted) {
+ Layout::LaTeXArgMap::const_iterator lait = latexargs.begin();
+ Layout::LaTeXArgMap::const_iterator const laend = latexargs.end();
+ for (; lait != laend; ++lait) {
+ string const name = prefix + convert<string>(i);
+ if ((*lait).first == name) {
+ Layout::latexarg arg = (*lait).second;
+ docstring preset = arg.presetarg;
+ if (!arg.defaultarg.empty()) {
+ if (!preset.empty())
+ preset += ",";
+ preset += arg.defaultarg;
+ }
+ if (arg.mandatory) {
+ docstring ldelim = arg.ldelim.empty() ?
+ from_ascii("{") : arg.ldelim;
+ docstring rdelim = arg.rdelim.empty() ?
+ from_ascii("}") : arg.rdelim;
+ os << ldelim << preset << rdelim;
+ } else if (!preset.empty()) {
+ docstring ldelim = arg.ldelim.empty() ?
+ from_ascii("[") : arg.ldelim;
+ docstring rdelim = arg.rdelim.empty() ?
+ from_ascii("]") : arg.rdelim;
+ os << ldelim << preset << rdelim;
+ } else if (find(required.begin(), required.end(),
+ (*lait).first) != required.end()) {
+ docstring ldelim = arg.ldelim.empty() ?
+ from_ascii("[") : arg.ldelim;
+ docstring rdelim = arg.rdelim.empty() ?
+ from_ascii("]") : arg.rdelim;
+ os << ldelim << rdelim;
+ } else
+ break;
+ }
+ }
+ }
+ }