Buffer::Buffer(string const & file, bool ronly)
- : paragraph(0), lyx_clean(true), bak_clean(true),
+ : paragraph(0), niceFile(true), lyx_clean(true), bak_clean(true),
unnamed(false), dep_clean(0), read_only(ronly),
filename_(file), users(0)
{
if (!ert_comp.contents.empty()) {
lyxerr[Debug::INSETS] << "ERT contents:\n'"
<< ert_comp.contents << "'" << endl;
- Inset * inset = new InsetERT(params.language, ert_comp.contents, true);
+ Inset * inset = new InsetERT(params, params.language,
+ ert_comp.contents, true);
par->insertInset(pos++, inset, ert_comp.font);
ert_comp.contents.erase();
}
static int call_depth;
++call_depth;
bool checkminipage = false;
- static Paragraph * minipar;
+ static Paragraph * minipar = 0;
static Paragraph * parBeforeMinipage;
#endif
#endif
insertErtContents(par, pos);
#endif
lex.eatLine();
- string const layoutname = lex.getString();
- //lyxerr << "Looking for layout '"
- // << layoutname << "'!" << endl;
+ string layoutname = lex.getString();
+
+ LyXTextClass const & tclass = textclasslist[params.textclass];
- //lyxerr << "Result: " << pp.first << "/" << pp.second << endl;
+ if (layoutname.empty()) {
+ layoutname = tclass.defaultLayoutName();
+ }
+
+ bool hasLayout = tclass.hasLayout(layoutname);
+ if (!hasLayout) {
+ lyxerr << "Layout '" << layoutname << "' does not"
+ << " exist in textclass '" << tclass.name()
+ << "'." << endl;
+ lyxerr << "Trying to use default layout instead."
+ << endl;
+ layoutname = tclass.defaultLayoutName();
+ }
#ifndef NO_COMPABILITY
if (compare_no_case(layoutname, "latex") == 0) {
stringstream old_float;
if (tmptok == "footnote") {
- inset = new InsetFoot;
+ inset = new InsetFoot(params);
old_float << "collapsed true\n";
} else if (tmptok == "margin") {
- inset = new InsetMarginal;
+ inset = new InsetMarginal(params);
old_float << "collapsed true\n";
} else if (tmptok == "fig") {
- inset = new InsetFloat("figure");
+ inset = new InsetFloat(params, "figure");
old_float << "placement htbp\n"
<< "wide false\n"
<< "collapsed false\n";
} else if (tmptok == "tab") {
- inset = new InsetFloat("table");
+ inset = new InsetFloat(params, "table");
old_float << "placement htbp\n"
<< "wide false\n"
<< "collapsed false\n";
} else if (tmptok == "alg") {
- inset = new InsetFloat("algorithm");
+ inset = new InsetFloat(params, "algorithm");
old_float << "placement htbp\n"
<< "wide false\n"
<< "collapsed false\n";
} else if (tmptok == "wide-fig") {
- inset = new InsetFloat("figure");
+ inset = new InsetFloat(params, "figure");
//InsetFloat * tmp = new InsetFloat("figure");
//tmp->wide(true);
//inset = tmp;
<< "wide true\n"
<< "collapsed false\n";
} else if (tmptok == "wide-tab") {
- inset = new InsetFloat("table");
+ inset = new InsetFloat(params, "table");
//InsetFloat * tmp = new InsetFloat("table");
//tmp->wide(true);
//inset = tmp;
the_end_read = true;
#ifndef NO_COMPABILITY
#ifndef NO_PEXTRA_REALLY
+ if (minipar == par)
+ par = 0;
minipar = parBeforeMinipage = 0;
#endif
#endif
if (checkminipage && (call_depth == 1)) {
checkminipage = false;
if (minipar && (minipar != par) &&
- (par->params().pextraType() == Paragraph::PEXTRA_MINIPAGE)) {
+ (par->params().pextraType() == Paragraph::PEXTRA_MINIPAGE))
+ {
lyxerr << "minipages in a row" << endl;
if (par->params().pextraStartMinipage()) {
lyxerr << "start new minipage" << endl;
p->params().depth(parBeforeMinipage->params().depth());
parBeforeMinipage = p;
}
- InsetMinipage * mini = new InsetMinipage;
+ InsetMinipage * mini = new InsetMinipage(params);
mini->pos(static_cast<InsetMinipage::Position>(par->params().pextraAlignment()));
mini->pageWidth(LyXLength(par->params().pextraWidth()));
if (!par->params().pextraWidthp().empty()) {
lyxerr << "WP:" << mini->pageWidth().asString() << endl;
- mini->pageWidth(LyXLength((par->params().pextraWidthp())+"%"));
+ mini->pageWidth(LyXLength((par->params().pextraWidthp())+"p%"));
}
Paragraph * op = mini->firstParagraph();
mini->inset.paragraph(par);
if (!first_par || (first_par == par))
first_par = p;
- InsetMinipage * mini = new InsetMinipage;
+ InsetMinipage * mini = new InsetMinipage(params);
mini->pos(static_cast<InsetMinipage::Position>(minipar->params().pextraAlignment()));
mini->pageWidth(LyXLength(minipar->params().pextraWidth()));
if (!par->params().pextraWidthp().empty()) {
lyxerr << "WP:" << mini->pageWidth().asString() << endl;
- mini->pageWidth(LyXLength((par->params().pextraWidthp())+"%"));
+ mini->pageWidth(LyXLength((par->params().pextraWidthp())+"p%"));
}
+
+ Paragraph * op = mini->firstParagraph();
mini->inset.paragraph(minipar);
+ //
+ // and free the old ones!
+ //
+ while(op) {
+ Paragraph * pp = op->next();
+ delete op;
+ op = pp;
+ }
// Insert the minipage last in the
// previous paragraph.
true);
alreadyread = true;
} else if (tmptok == "Note") {
- inset = new InsetNote;
+ inset = new InsetNote(params);
} else if (tmptok == "Include") {
InsetCommandParams p("Include");
inset = new InsetInclude(p, *this);
} else if (tmptok == "ERT") {
- inset = new InsetERT;
+ inset = new InsetERT(params);
} else if (tmptok == "Tabular") {
inset = new InsetTabular(*this);
} else if (tmptok == "Text") {
- inset = new InsetText;
+ inset = new InsetText(params);
} else if (tmptok == "Foot") {
- inset = new InsetFoot;
+ inset = new InsetFoot(params);
} else if (tmptok == "Marginal") {
- inset = new InsetMarginal;
+ inset = new InsetMarginal(params);
} else if (tmptok == "Minipage") {
- inset = new InsetMinipage;
+ inset = new InsetMinipage(params);
} else if (tmptok == "Float") {
lex.next();
string tmptok = lex.getString();
- inset = new InsetFloat(tmptok);
+ inset = new InsetFloat(params, tmptok);
#if 0
} else if (tmptok == "List") {
inset = new InsetList;
inset = new InsetList;
#endif
} else if (tmptok == "Caption") {
- inset = new InsetCaption;
+ inset = new InsetCaption(params);
} else if (tmptok == "FloatList") {
inset = new InsetFloatList;
}
#endif
// First write the layout
- string const & tmp = lowercase(par->layout());
- if (tmp == "itemize") {
+ string const & tmp = par->layout();
+ if (compare_no_case(tmp, "itemize") == 0) {
ltype = 1;
ltype_depth = depth + 1;
- } else if (tmp == "enumerate") {
+ } else if (compare_no_case(tmp, "enumerate") == 0) {
ltype = 2;
ltype_depth = depth + 1;
- } else if (contains(tmp, "ection")) {
+ } else if (contains(lowercase(tmp), "ection")) {
ltype = 3;
ltype_depth = depth + 1;
- } else if (contains(tmp, "aragraph")) {
+ } else if (contains(lowercase(tmp), "aragraph")) {
ltype = 4;
ltype_depth = depth + 1;
- } else if (tmp == "description") {
+ } else if (compare_no_case(tmp, "description") == 0) {
ltype = 5;
ltype_depth = depth + 1;
- } else if (tmp == "abstract") {
+ } else if (compare_no_case(tmp, "abstract") == 0) {
ltype = 6;
ltype_depth = 0;
- } else if (tmp == "bibliography") {
+ } else if (compare_no_case(tmp, "bibliography") == 0) {
ltype = 7;
ltype_depth = 0;
} else {
{
lyxerr[Debug::LATEX] << "makeLaTeXFile..." << endl;
- niceFile = nice; // this will be used by Insetincludes.
-
- tex_code_break_column = lyxrc.ascii_linelen;
-
- LyXTextClass const & tclass =
- textclasslist[params.textclass];
-
ofstream ofs(fname.c_str());
if (!ofs) {
Alert::err_alert(_("Error: Cannot open file: "), fname);
return;
}
+ niceFile = nice; // this will be used by Insetincludes.
+
+ tex_code_break_column = lyxrc.ascii_linelen;
+
// validate the buffer.
lyxerr[Debug::LATEX] << " Validating buffer..." << endl;
- LaTeXFeatures features(params, tclass.size());
+ LaTeXFeatures features(params);
validate(features);
lyxerr[Debug::LATEX] << " Buffer validation done." << endl;
texrow.newline();
}
if (!original_path.empty()) {
+ string inputpath = os::external_path(original_path);
+ subst(inputpath, "~", "\\string~");
ofs << "\\makeatletter\n"
<< "\\def\\input@path{{"
- << os::external_path(original_path) << "/}}\n"
+ << inputpath << "/}}\n"
<< "\\makeatother\n";
texrow.newline();
texrow.newline();
ofs << "\\documentclass";
+ LyXTextClass const & tclass = textclasslist[params.textclass];
+
ostringstream options; // the document class options.
if (tokenPos(tclass.opt_fontsize(),
ofs << '[' << strOptions << ']';
}
- ofs << '{'
- << textclasslist[params.textclass].latexname()
- << "}\n";
+ ofs << '{' << tclass.latexname() << "}\n";
texrow.newline();
// end of \documentclass defs
lyxerr[Debug::INFO] << "Finished making latex file." << endl;
lyxerr[Debug::INFO] << "Row count was " << texrow.rows()-1 << "." << endl;
+
+ // we want this to be true outside previews (for insetexternal)
+ niceFile = true;
}
}
-void Buffer::sgmlOpenTag(ostream & os, Paragraph::depth_type depth,
+void Buffer::sgmlOpenTag(ostream & os, Paragraph::depth_type,
string const & latexname) const
{
if (!latexname.empty() && latexname != "!-- --")
//os << "<!-- " << depth << " -->" << "<" << latexname << ">";
- os << string(depth, ' ') << "<" << latexname << ">\n";
+ os << "<" << latexname << ">";
}
-void Buffer::sgmlCloseTag(ostream & os, Paragraph::depth_type depth,
+void Buffer::sgmlCloseTag(ostream & os, Paragraph::depth_type,
string const & latexname) const
{
if (!latexname.empty() && latexname != "!-- --")
//os << "<!-- " << depth << " -->" << "</" << latexname << ">\n";
- os << string(depth, ' ') << "</" << latexname << ">\n";
+ os << "</" << latexname << ">";
}
niceFile = nice; // this will be used by included files.
- LyXTextClass const & tclass = textclasslist[params.textclass];
-
- LaTeXFeatures features(params, tclass.size());
+ LaTeXFeatures features(params);
validate(features);
texrow.reset();
- string top_element = textclasslist[params.textclass].latexname();
+ LyXTextClass const & tclass = textclasslist[params.textclass];
+
+ string top_element = tclass.latexname();
if (!body_only) {
ofs << "<!doctype linuxdoc system";
string preamble = params.preamble;
- preamble += features.getIncludedFiles(fname);
+ const string name = nice ? ChangeExtension(filename_, ".sgml")
+ : fname;
+ preamble += features.getIncludedFiles(name);
preamble += features.getLyXSGMLEntities();
if (!preamble.empty()) {
vector<string> environment_stack(5);
while (par) {
- LyXLayout const & style =
- textclasslist[params.textclass][par->layout()];
+ LyXLayout const & style = tclass[par->layout()];
// treat <toc> as a special case for compatibility with old code
if (par->isInset(0)) {
ofs.close();
// How to check for successful close
+
+ // we want this to be true outside previews (for insetexternal)
+ niceFile = true;
}
niceFile = nice; // this will be used by Insetincludes.
- LyXTextClass const & tclass =
- textclasslist[params.textclass];
-
- LaTeXFeatures features(params, tclass.size());
+ LaTeXFeatures features(params);
validate(features);
texrow.reset();
- string top_element = textclasslist[params.textclass].latexname();
+ LyXTextClass const & tclass = textclasslist[params.textclass];
+ string top_element = tclass.latexname();
if (!only_body) {
ofs << "<!DOCTYPE " << top_element
<< " PUBLIC \"-//OASIS//DTD DocBook V4.1//EN\"";
string preamble = params.preamble;
- preamble += features.getIncludedFiles(fname);
+ const string name = nice ? ChangeExtension(filename_, ".sgml")
+ : fname;
+ preamble += features.getIncludedFiles(name);
preamble += features.getLyXSGMLEntities();
if (!preamble.empty()) {
string c_params;
int desc_on = 0; // description mode
- LyXLayout const & style =
- textclasslist[params.textclass][par->layout()];
+ LyXLayout const & style = tclass[par->layout()];
// environment tag closing
for (; depth > par->params().depth(); --depth) {
ofs.close();
// How to check for successful close
+
+ // we want this to be true outside previews (for insetexternal)
+ niceFile = true;
}