}
context.check_deeper(os);
context.check_layout(os);
- // FIXME: Adjust to format 446!
- // Since format 446, layouts do not require anymore all optional
- // arguments before the required ones. Needs to be implemented!
- int optargs = 0;
- while (optargs < context.layout->optArgs()) {
+ int i = 0;
+ Layout::LaTeXArgMap::const_iterator lait = context.layout->latexargs().begin();
+ Layout::LaTeXArgMap::const_iterator const laend = context.layout->latexargs().end();
+ for (; lait != laend; ++lait) {
+ ++i;
eat_whitespace(p, os, context, false);
- if (p.next_token().cat() == catEscape ||
- p.next_token().character() != '[')
- break;
- p.get_token(); // eat '['
- // FIXME: Just a workaround. InsetArgument::updateBuffer
- // will compute a proper ID for all "999" Arguments
- // (which is also what lyx2lyx produces).
- // However, tex2lyx should be able to output proper IDs
- // itself.
- begin_inset(os, "Argument 999\n");
- os << "status collapsed\n\n";
- parse_text_in_inset(p, os, FLAG_BRACK_LAST, outer, context);
- end_inset(os);
- eat_whitespace(p, os, context, false);
- ++optargs;
- }
- int reqargs = 0;
- while (reqargs < context.layout->requiredArgs()) {
- eat_whitespace(p, os, context, false);
- if (p.next_token().cat() != catBegin)
- break;
- p.get_token(); // eat '{'
- // FIXME: Just a workaround. InsetArgument::updateBuffer
- // will compute a proper ID for all "999" Arguments
- // (which is also what lyx2lyx produces).
- // However, tex2lyx should be able to output proper IDs
- // itself.
- begin_inset(os, "Argument 999\n");
- os << "status collapsed\n\n";
- parse_text_in_inset(p, os, FLAG_BRACE_LAST, outer, context);
- end_inset(os);
+ if (lait->second.mandatory) {
+ if (p.next_token().cat() != catBegin)
+ break;
+ p.get_token(); // eat '{'
+ begin_inset(os, "Argument ");
+ os << i << "\nstatus collapsed\n\n";
+ parse_text_in_inset(p, os, FLAG_BRACE_LAST, outer, context);
+ end_inset(os);
+ } else {
+ if (p.next_token().cat() == catEscape ||
+ p.next_token().character() != '[')
+ break;
+ p.get_token(); // eat '['
+ begin_inset(os, "Argument ");
+ os << i << "\nstatus collapsed\n\n";
+ parse_text_in_inset(p, os, FLAG_BRACK_LAST, outer, context);
+ end_inset(os);
+ }
eat_whitespace(p, os, context, false);
- ++reqargs;
}
parse_text(p, os, FLAG_ITEM, outer, context);
context.check_end_layout(os);