#include "version.h"
#include "LaTeX.h"
#include "Chktex.h"
-#include "LyXView.h"
+#include "frontends/LyXView.h"
#include "debug.h"
#include "LaTeXFeatures.h"
#include "lyxtext.h"
#ifndef NO_COMPABILITY
struct ErtComp
{
- ErtComp() : active(false), in_tabular(false) {
+ ErtComp() : active(false), fromlayout(false), in_tabular(false) {
}
string contents;
bool active;
+ bool fromlayout;
bool in_tabular;
LyXFont font;
};
#ifndef NO_COMPABILITY
ert_comp.contents.erase();
ert_comp.active = false;
+ ert_comp.fromlayout = false;
ert_comp.in_tabular = false;
#endif
int pos = 0;
Paragraph * first_par = 0;
LyXFont font(LyXFont::ALL_INHERIT, params.language);
+
+#if 0
if (file_format < 216 && params.language->lang() == "hebrew")
font.setLanguage(default_language);
+#endif
if (!par) {
par = new Paragraph;
#ifndef NO_COMPABILITY
+
+Inset * Buffer::isErtInset(Paragraph * par, int pos) const
+{
+ Inset * inset;
+ if ((par->getChar(pos) == Paragraph::META_INSET) &&
+ (inset = par->getInset(pos)) &&
+ (inset->lyxCode() == Inset::ERT_CODE))
+ {
+ return inset;
+ }
+ return 0;
+}
+
void Buffer::insertErtContents(Paragraph * par, int & pos, bool set_inactive)
{
- if (!ert_comp.contents.empty()) {
+ if (ert_comp.contents.find_first_not_of(' ') != string::npos) {
+ // we only skip completely empty ERT (only spaces) otherwise
+ // we have to insert it as is.
+ string str(ert_comp.contents);
lyxerr[Debug::INSETS] << "ERT contents:\n'"
- << ert_comp.contents << "'" << endl;
- Inset * inset = new InsetERT(params, params.language,
- ert_comp.contents, true);
- par->insertInset(pos++, inset, ert_comp.font);
- ert_comp.contents.erase();
+ << str << "'" << endl;
+ // check if we have already an ert inset a position earlier
+ // if this is the case then we should insert the contents
+ // inside the other ertinset as it is stupid to have various
+ // ert in a row.
+ Inset * inset;
+ if ((pos > 0) && (inset=isErtInset(par, pos-1))) {
+ // get the last paragraph from the inset before
+ Paragraph * last = inset->firstParagraph();
+ while(last->next())
+ last = last->next();
+ // create the new paragraph after the last one
+ Paragraph * par = new Paragraph(last);
+ par->layout(textclasslist[params.textclass].defaultLayoutName());
+ par->setInsetOwner(last->inInset());
+ // set the contents
+ LyXFont font(LyXFont::ALL_INHERIT, params.language);
+ string::const_iterator cit = str.begin();
+ string::const_iterator end = str.end();
+ pos_type pos = 0;
+ for (; cit != end; ++cit) {
+ par->insertChar(pos++, *cit, font);
+ }
+ } else {
+ Inset * inset =
+ new InsetERT(params, params.language, str, true);
+ par->insertInset(pos++, inset, ert_comp.font);
+ }
}
+ ert_comp.contents.erase();
+ ert_comp.fromlayout = false;
if (set_inactive) {
ert_comp.active = false;
}
++pos;
} else if (token == "\\layout") {
#ifndef NO_COMPABILITY
+ bool old_fromlayout = ert_comp.fromlayout;
+ bool create_new_par = true;
ert_comp.in_tabular = false;
// Do the insetert.
- insertErtContents(par, pos);
+ if (!par->size() && par->previous() &&
+ (par->previous()->size() == 1) &&
+ isErtInset(par->previous(), par->previous()->size()-1))
+ {
+ int p = par->previous()->size();
+ insertErtContents(par->previous(), p);
+ create_new_par = false;
+ } else {
+ insertErtContents(par, pos);
+ }
#endif
// reset the font as we start a new layout and if the font is
// not ALL_INHERIT,document_language then it will be set to the
// right values after this tag (Jug 20020420)
font = LyXFont(LyXFont::ALL_INHERIT, params.language);
+
+#if 0
if (file_format < 216 && params.language->lang() == "hebrew")
font.setLanguage(default_language);
+#endif
lex.eatLine();
string layoutname = lex.getString();
#ifndef NO_COMPABILITY
if (compare_no_case(layoutname, "latex") == 0) {
ert_comp.active = true;
+ ert_comp.fromlayout = true;
ert_comp.font = font;
+ if (old_fromlayout)
+ create_new_par = false;
}
#endif
bool hasLayout = tclass.hasLayout(layoutname);
par->InsertInset(pos, inset, font);
++pos;
} else {
+#endif
+#ifndef NO_COMPABILITY
+ if (create_new_par) {
#endif
if (!first_par)
first_par = par;
if (!layout.obsoleted_by().empty())
par->layout(layout.obsoleted_by());
par->params().depth(depth);
+#ifndef NO_COMPABILITY
+ } else {
+ // we duplicate code here because it's easier to remove
+ // the code then of NO_COMPATIBILITY
+ par->layout(layoutname);
+ // Test whether the layout is obsolete.
+ LyXLayout const & layout =
+ textclasslist[params.textclass][par->layout()];
+ if (!layout.obsoleted_by().empty())
+ par->layout(layout.obsoleted_by());
+ par->params().depth(depth);
+ }
+#endif
#if USE_CAPTION
}
#endif
LyXLex nylex(0, 0);
nylex.setStream(istr);
inset->read(this, nylex);
-
par->insertInset(pos, inset, font);
++pos;
insertErtContents(par, pos);
font.setLanguage(params.language);
lex.printError("Unknown language `$$Token'");
}
+#ifndef NO_COMPABILITY
+ // if the contents is still empty we're just behind the
+ // latex font change and so this inset should also be
+ // inserted with that language tag!
+ if (ert_comp.active && ert_comp.contents.empty()) {
+ ert_comp.font.setLanguage(font.language());
+ }
+#endif
} else if (token == "\\numeric") {
lex.next();
font.setNumber(font.setLyXMisc(lex.getString()));
#ifndef NO_COMPABILITY
ert_comp = ert_stack.top();
ert_stack.pop();
- insertErtContents(par, pos);
#endif
} else if (token == "\\SpecialChar") {
LyXLayout const & layout =
_("Old LyX file format found. "
"Use LyX 0.10.x to read this!"));
return false;
+ } else if (file_format < 220) {
+ Alert::alert(_("ERROR!"),
+ _("Old LyX file format found. "
+ "User LyX 1.2.x to read this!"));
+ return false;
}
}
bool the_end = readLyXformat2(lex, par);
params.setPaperStuff();
+
+#if 0
// the_end was added in 213
if (file_format < 213)
the_end = true;
+#endif
if (!the_end) {
Alert::alert(_("Warning!"),
*/
// Should probably have some more error checking here.
- // Should be cleaned up in 0.13, at least a bit.
// Doing it this way, also makes the inodes stay the same.
// This is still not a very good solution, in particular we
// might loose the owner of the backup.
// LaTeX all paragraphs from par to endpar, if endpar == 0 then to the end
//
void Buffer::latexParagraphs(ostream & ofs, Paragraph * par,
- Paragraph * endpar, TexRow & texrow) const
+ Paragraph * endpar, TexRow & texrow,
+ bool moving_arg) const
{
bool was_title = false;
bool already_title = false;
{
par = par->TeXEnvironment(this, params, ofs, texrow);
} else {
- par = par->TeXOnePar(this, params, ofs, texrow, false);
+ par = par->TeXOnePar(this, params, ofs, texrow, moving_arg);
}
} else {
- par = par->TeXOnePar(this, params, ofs, texrow, false);
+ par = par->TeXOnePar(this, params, ofs, texrow, moving_arg);
}
}
// It might be that we only have a title in this document
}
-// This should be enabled when the Chktex class is implemented. (Asger)
// chktex should be run with these flags disabled: 3, 22, 25, 30, 38(?)
// Other flags: -wall -v0 -x
int Buffer::runChktex()