char const * const known_ref_commands[] = { "ref", "pageref", "vref",
- "vpageref", "prettyref", "eqref", 0 };
+ "vpageref", "prettyref", "nameref", "eqref", 0 };
char const * const known_coded_ref_commands[] = { "ref", "pageref", "vref",
- "vpageref", "formatted", "eqref", 0 };
+ "vpageref", "formatted", "nameref", "eqref", 0 };
char const * const known_refstyle_commands[] = { "algref", "chapref", "corref",
"eqref", "enuref", "figref", "fnref", "lemref", "parref", "partref", "propref",
width_unit = "in";
width_special = "width";
} else if (latex_width.empty() && outer_type == "framebox") {
- use_ert = true;
+ width_value.clear();
+ width_unit.clear();
+ width_special = "none";
}
if (use_ert) {
ostringstream ss;
if (outer_flags & FLAG_END)
output_ert_inset(os, "\\end{" + outer_type + '}',
parent_context);
- else if (inner_type.empty() && outer_type == "framebox")
- // in this case it is already closed later
- ;
else
output_ert_inset(os, "}", parent_context);
}
begin_inset(os, "Box ");
if (outer_type == "framed")
os << "Framed\n";
- else if (outer_type == "framebox")
+ else if (outer_type == "framebox" || outer_type == "fbox")
os << "Boxed\n";
else if (outer_type == "shadowbox")
os << "Shadowbox\n";
preamble.registerAutomaticallyLoadedPackage("color");
} else if (outer_type == "doublebox")
os << "Doublebox\n";
- else if (outer_type.empty())
+ else if (outer_type.empty() || outer_type == "mbox")
os << "Frameless\n";
else
os << outer_type << '\n';
os << "position \"" << position << "\"\n";
os << "hor_pos \"" << hor_pos << "\"\n";
- os << "has_inner_box " << !inner_type.empty() << "\n";
+ if (outer_type == "mbox")
+ os << "has_inner_box 1\n";
+ else
+ os << "has_inner_box " << !inner_type.empty() << "\n";
os << "inner_pos \"" << inner_pos << "\"\n";
os << "use_parbox " << (inner_type == "parbox" || shadedparbox)
<< '\n';
- os << "use_makebox " << (inner_type == "makebox") << '\n';
- os << "width \"" << width_value << width_unit << "\"\n";
+ if (outer_type == "mbox")
+ os << "use_makebox 1\n";
+ else
+ os << "use_makebox " << (inner_type == "makebox") << '\n';
+ if (outer_type == "fbox" || outer_type == "mbox")
+ os << "width \"\"\n";
+ else
+ os << "width \"" << width_value << width_unit << "\"\n";
os << "special \"" << width_special << "\"\n";
os << "height \"" << height_value << height_unit << "\"\n";
os << "height_special \"" << height_special << "\"\n";
p.skip_spaces(true);
}
}
- if (outer_type == "shaded") {
+ if (outer_type == "shaded" || outer_type == "fbox"
+ || outer_type == "mbox") {
// These boxes never have an inner box
;
} else if (p.next_token().asInput() == "\\parbox") {
preamble.registerAutomaticallyLoadedPackage("color");
}
+ else if (name == "btSect") {
+ eat_whitespace(p, os, parent_context, false);
+ parent_context.check_layout(os);
+ begin_command_inset(os, "bibtex", "bibtex");
+ string bibstyle = "plain";
+ if (p.hasOpt()) {
+ bibstyle = p.getArg('[', ']');
+ p.skip_spaces(true);
+ }
+ string const bibfile = p.getArg('{', '}');
+ eat_whitespace(p, os, parent_context, false);
+ Token t = p.get_token();
+ if (t.asInput() == "\\btPrintCited") {
+ p.skip_spaces(true);
+ os << "btprint " << '"' << "btPrintCited" << '"' << "\n";
+ }
+ if (t.asInput() == "\\btPrintNotCited") {
+ p.skip_spaces(true);
+ os << "btprint " << '"' << "btPrintNotCited" << '"' << "\n";
+ }
+ if (t.asInput() == "\\btPrintAll") {
+ p.skip_spaces(true);
+ os << "btprint " << '"' << "btPrintAll" << '"' << "\n";
+ }
+ os << "bibfiles " << '"' << bibfile << '"' << "\n";
+ os << "options " << '"' << bibstyle << '"' << "\n";
+ parse_text_in_inset(p, os, FLAG_END, outer, parent_context);
+ end_inset(os);
+ p.skip_spaces();
+ }
+
else if (name == "framed" || name == "shaded") {
eat_whitespace(p, os, parent_context, false);
parse_outer_box(p, os, FLAG_END, outer, parent_context, name, "");
if (last_env == name) {
// we need to output a separator since LyX would export
// the two environments as one otherwise (bug 5716)
- docstring const sep = from_ascii("--Separator--");
TeX2LyXDocClass const & textclass(parent_context.textclass);
- if (textclass.hasLayout(sep)) {
- Context newcontext(parent_context);
- newcontext.layout = &(textclass[sep]);
- newcontext.check_layout(os);
- newcontext.check_end_layout(os);
- } else {
- parent_context.check_layout(os);
- begin_inset(os, "Note Note\n");
- os << "status closed\n";
- Context newcontext(true, textclass,
- &(textclass.defaultLayout()));
- newcontext.check_layout(os);
- newcontext.check_end_layout(os);
- end_inset(os);
- parent_context.check_end_layout(os);
- }
+ Context newcontext(true, textclass,
+ &(textclass.defaultLayout()));
+ newcontext.check_layout(os);
+ begin_inset(os, "Separator plain\n");
+ end_inset(os);
+ newcontext.check_end_layout(os);
}
switch (context.layout->latextype) {
case LATEX_LIST_ENVIRONMENT:
}
-/// Parse a NoWeb Chunk section. The initial "<<" is already parsed.
-bool parse_noweb(Parser & p, ostream & os, Context & context)
+/// Parse a literate Chunk section. The initial "<<" is already parsed.
+bool parse_chunk(Parser & p, ostream & os, Context & context)
{
// check whether a chunk is possible here.
- if (!context.new_layout_allowed ||
- !context.textclass.hasLayout(from_ascii("Chunk"))) {
+ if (!context.textclass.hasInsetLayout(from_ascii("Flex:Chunk"))) {
return false;
}
p.pushPosition();
// read the parameters
- Parser::Arg stuff = p.verbatimStuff(">>=", false);
- if (!stuff.first) {
+ Parser::Arg const params = p.verbatimStuff(">>=\n", false);
+ if (!params.first) {
p.popPosition();
return false;
}
- string chunk = "<<" + stuff.second + ">>="
- + p.verbatimStuff("\n").second + '\n';
- stuff = p.verbatimStuff("\n@");
- if (!stuff.first) {
+ Parser::Arg const code = p.verbatimStuff("\n@");
+ if (!code.first) {
p.popPosition();
return false;
}
- chunk += stuff.second + "\n@";
- string post_chunk = p.verbatimStuff("\n").second + '\n';
+ string const post_chunk = p.verbatimStuff("\n").second + '\n';
if (post_chunk[0] != ' ' && post_chunk[0] != '\n') {
p.popPosition();
return false;
}
- chunk += post_chunk;
+ // The last newline read is important for paragraph handling
+ p.putback();
+ p.deparse();
- context.new_paragraph(os);
- Context newcontext(true, context.textclass,
- &context.textclass[from_ascii("Chunk")]);
- output_ert(os, chunk, newcontext);
+ //cerr << "params=[" << params.second << "], code=[" << code.second << "]" <<endl;
+ // We must have a valid layout before outputting the Chunk inset.
+ context.check_layout(os);
+ Context chunkcontext(true, context.textclass);
+ chunkcontext.layout = &context.textclass.plainLayout();
+ begin_inset(os, "Flex Chunk");
+ os << "\nstatus open\n";
+ if (!params.second.empty()) {
+ chunkcontext.check_layout(os);
+ Context paramscontext(true, context.textclass);
+ paramscontext.layout = &context.textclass.plainLayout();
+ begin_inset(os, "Argument 1");
+ os << "\nstatus open\n";
+ output_ert(os, params.second, paramscontext);
+ end_inset(os);
+ }
+ output_ert(os, code.second, chunkcontext);
+ end_inset(os);
p.dropPosition();
return true;
else if (t.asInput() == "<"
&& p.next_token().asInput() == "<") {
- bool has_noweb = false;
+ bool has_chunk = false;
if (noweb_mode) {
p.pushPosition();
p.get_token();
- has_noweb = parse_noweb(p, os, context);
- if (!has_noweb)
+ has_chunk = parse_chunk(p, os, context);
+ if (!has_chunk)
p.popPosition();
}
- if (!has_noweb) {
+ if (!has_chunk) {
context.check_layout(os);
begin_inset(os, "Quotes ");
//FIXME: this is a right danish quote;
if (!rem.empty())
output_ert_inset(os,
to_utf8(rem), context);
+ for (set<string>::const_iterator it = req.begin();
+ it != req.end(); ++it)
+ preamble.registerAutomaticallyLoadedPackage(*it);
} else
// we did not find a non-ert version
output_ert_inset(os, name, context);
}
if (optarg) {
if (context.layout->labeltype != LABEL_MANUAL) {
- // LyX does not support \item[\mybullet]
- // in itemize environments
+ // handle option of itemize item
+ begin_inset(os, "Argument item:1\n");
+ os << "status open\n";
+ os << "\n\\begin_layout Plain Layout\n";
Parser p2(s + ']');
os << parse_text_snippet(p2,
FLAG_BRACK_LAST, outer, context);
+ // we must not use context.check_end_layout(os)
+ // because that would close the outer itemize layout
+ os << "\n\\end_layout\n";
+ end_inset(os);
+ eat_whitespace(p, os, context, false);
} else if (!s.empty()) {
// LyX adds braces around the argument,
// so we need to remove them here.
} else {
Parser p2(s + ']');
os << parse_text_snippet(p2,
- FLAG_BRACK_LAST,
- outer, context);
+ FLAG_BRACK_LAST, outer, context);
}
// The space is needed to separate the
// item from the rest of the sentence.
}
else if (t.cs() == "caption") {
+ bool starred = false;
+ if (p.next_token().asInput() == "*") {
+ p.get_token();
+ starred = true;
+ }
p.skip_spaces();
context.check_layout(os);
p.skip_spaces();
- begin_inset(os, "Caption Standard\n");
+ if (starred)
+ begin_inset(os, "Caption LongTableNoNumber\n");
+ else
+ begin_inset(os, "Caption Standard\n");
Context newcontext(true, context.textclass, 0, 0, context.font);
newcontext.check_layout(os);
// FIXME InsetArgument is now properly implemented in InsetLayout
os << to_utf8(s);
if (!rem.empty())
output_ert_inset(os, to_utf8(rem), context);
+ for (set<string>::const_iterator it = req.begin();
+ it != req.end(); ++it)
+ preamble.registerAutomaticallyLoadedPackage(*it);
} else
// we did not find a non-ert version
output_ert_inset(os, command, context);
skip_braces(p);
}
- else if (t.cs() == "-") {
- context.check_layout(os);
- os << "\\SpecialChar \\-\n";
- }
-
else if (t.cs() == "_" || t.cs() == "&" || t.cs() == "#"
|| t.cs() == "$" || t.cs() == "{" || t.cs() == "}"
- || t.cs() == "%") {
+ || t.cs() == "%" || t.cs() == "-") {
context.check_layout(os);
- os << t.cs();
+ if (t.cs() == "-")
+ os << "\\SpecialChar \\-\n";
+ else
+ os << t.cs();
}
else if (t.cs() == "char") {
string const absfigname =
changeExtension(abstexname, ".fig");
fix_child_filename(filename);
- string const lyxname =
- changeExtension(filename, ".lyx");
+ string const lyxname = changeExtension(filename,
+ roundtripMode() ? ".lyx.lyx" : ".lyx");
string const abslyxname = makeAbsPath(
lyxname, getParentFilePath(false)).absFileName();
bool xfig = false;
"", "", t.cs());
}
- else if (t.cs() == "ovalbox" || t.cs() == "Ovalbox" ||
+ else if (t.cs() == "fbox" || t.cs() == "mbox" ||
+ t.cs() == "ovalbox" || t.cs() == "Ovalbox" ||
t.cs() == "shadowbox" || t.cs() == "doublebox")
parse_outer_box(p, os, FLAG_ITEM, outer, context, t.cs(), "");
parse_text(p, os, FLAG_ITEM, outer, context);
output_ert_inset(os, "}", context);
} else {
+ //the syntax is: \framebox[width][position]{content}
string special = p.getFullOpt();
special += p.getOpt();
- // LyX does not yet support \framebox without any option
- if (!special.empty())
- parse_outer_box(p, os, FLAG_ITEM, outer,
- context, t.cs(), special);
- else {
- eat_whitespace(p, os, context, false);
- output_ert_inset(os, "\\framebox{", context);
- parse_text(p, os, FLAG_ITEM, outer, context);
- output_ert_inset(os, "}", context);
- }
+ parse_outer_box(p, os, FLAG_ITEM, outer,
+ context, t.cs(), special);
}
}