#include <config.h>
-#include <fstream>
-#include <iomanip>
-#include <map>
-#include <stack>
-#include <list>
-
-#include <cstdlib>
-#include <cmath>
-#include <unistd.h>
-#include <sys/types.h>
-#include <utime.h>
-
-#include <algorithm>
-
-#ifdef HAVE_LOCALE
-#include <locale>
-#endif
-
#ifdef __GNUG__
#pragma implementation
#endif
#include "bufferview_funcs.h"
#include "lyxfont.h"
#include "version.h"
+#include "LaTeX.h"
+#include "Chktex.h"
+#include "LyXView.h"
+#include "debug.h"
+#include "LaTeXFeatures.h"
+#include "lyxtext.h"
+#include "gettext.h"
+#include "language.h"
+#include "encoding.h"
+#include "exporter.h"
+#include "Lsstream.h"
+#include "converter.h"
+#include "BufferView.h"
+#include "ParagraphParameters.h"
+#include "iterators.h"
+
#include "mathed/formulamacro.h"
#include "mathed/formula.h"
+
#include "insets/inset.h"
#include "insets/inseterror.h"
#include "insets/insetlabel.h"
#endif
#include "insets/insetcaption.h"
#include "insets/insetfloatlist.h"
+
+#include "frontends/Dialogs.h"
+#include "frontends/Alert.h"
+
#include "support/textutils.h"
#include "support/filetools.h"
#include "support/path.h"
#include "support/os.h"
-#include "LaTeX.h"
-#include "Chktex.h"
-#include "LyXView.h"
-#include "debug.h"
-#include "LaTeXFeatures.h"
#include "support/syscall.h"
#include "support/lyxlib.h"
#include "support/FileInfo.h"
#include "support/lyxmanip.h"
-#include "lyxtext.h"
-#include "gettext.h"
-#include "language.h"
-#include "lyx_gui_misc.h" // WarnReadonly()
-#include "frontends/Dialogs.h"
-#include "encoding.h"
-#include "exporter.h"
-#include "Lsstream.h"
-#include "converter.h"
-#include "BufferView.h"
-#include "ParagraphParameters.h"
+
+#include <fstream>
+#include <iomanip>
+#include <map>
+#include <stack>
+#include <list>
+#include <algorithm>
+
+#include <cstdlib>
+#include <cmath>
+#include <unistd.h>
+#include <sys/types.h>
+#include <utime.h>
+
+
+#ifdef HAVE_LOCALE
+#include <locale>
+#endif
+
using std::ostream;
using std::ofstream;
using std::stack;
using std::list;
+using lyx::pos_type;
+using lyx::layout_type;
+using lyx::textclass_type;
+
// all these externs should eventually be removed.
extern BufferList bufferlist;
string const Buffer::getLatexName(bool no_path) const
{
- string name = ChangeExtension(MakeLatexName(filename), ".tex");
+ string const name = ChangeExtension(MakeLatexName(filename), ".tex");
if (no_path)
return OnlyFilename(name);
else
updateTitles();
users->owner()->getDialogs()->updateBufferDependent(false);
}
- if (read_only) {
- WarnReadonly(filename);
- }
-}
-
-
-bool Buffer::saveParamsAsDefaults() // const
-{
- string const fname = AddName(AddPath(user_lyxdir, "templates/"),
- "defaults.lyx");
- Buffer defaults = Buffer(fname);
-
- // Use the current buffer's parameters as default
- defaults.params = params;
-
- // add an empty paragraph. Is this enough?
- defaults.paragraph = new Paragraph;
-
- return defaults.writeFile(defaults.filename, false);
}
// Should work on a list
void Buffer::updateTitles() const
{
- if (users) users->owner()->updateWindowTitle();
+ if (users)
+ users->owner()->updateWindowTitle();
}
// Should work on a list
void Buffer::resetAutosaveTimers() const
{
- if (users) users->owner()->resetAutosaveTimer();
+ if (users)
+ users->owner()->resetAutosaveTimer();
}
string last_inset_read;
+#ifndef NO_COMPABILITY
struct ErtComp
{
ErtComp() : active(false), in_tabular(false) {
std::stack<ErtComp> ert_stack;
ErtComp ert_comp;
+#endif
+#warning And _why_ is this here? (Lgb)
+int unknown_layouts;
+int unknown_tokens;
} // anon
-int unknown_layouts;
-
// candidate for move to BufferView
// (at least some parts in the beginning of the func)
//
bool Buffer::readLyXformat2(LyXLex & lex, Paragraph * par)
{
unknown_layouts = 0;
-#ifdef NO_LATEX
+ unknown_tokens = 0;
+#ifndef NO_COMPABILITY
ert_comp.contents.erase();
ert_comp.active = false;
ert_comp.in_tabular = false;
#endif
-
int pos = 0;
Paragraph::depth_type depth = 0;
bool the_end_read = false;
markDirty();
// We don't want to adopt the parameters from the
// document we insert, so we skip until the text begins:
- while (lex.IsOK()) {
+ while (lex.isOK()) {
lex.nextToken();
- string const pretoken = lex.GetString();
+ string const pretoken = lex.getString();
if (pretoken == "\\layout") {
lex.pushToken(pretoken);
break;
}
}
- while (lex.IsOK()) {
+ while (lex.isOK()) {
lex.nextToken();
- string const token = lex.GetString();
+ string const token = lex.getString();
if (token.empty()) continue;
s += tostr(unknown_layouts);
s += _(" paragraphs");
}
- WriteAlert(_("Textclass Loading Error!"), s,
+ Alert::alert(_("Textclass Loading Error!"), s,
_("When reading " + fileName()));
- }
+ }
+
+ if (unknown_tokens > 0) {
+ string s = _("Encountered ");
+ if (unknown_tokens == 1) {
+ s += _("one unknown token");
+ } else {
+ s += tostr(unknown_tokens);
+ s += _(" unknown tokens");
+ }
+ Alert::alert(_("Textclass Loading Error!"), s,
+ _("When reading " + fileName()));
+ }
return the_end_read;
}
+#ifndef NO_COMPABILITY
void Buffer::insertErtContents(Paragraph * par, int & pos,
- LyXFont const & font, bool set_inactive)
+ LyXFont const & f, bool set_inactive)
{
if (!ert_comp.contents.empty()) {
- lyxerr[Debug::INSETS] << "ERT contents:\n"
- << ert_comp.contents << endl;
+ lyxerr[Debug::INSETS] << "ERT contents:\n'"
+ << ert_comp.contents << "'" << endl;
Inset * inset = new InsetERT(ert_comp.contents, true);
+ LyXFont font;
+ font.setLanguage(f.language());
par->insertInset(pos++, inset, font);
ert_comp.contents.erase();
}
ert_comp.active = false;
}
}
+#endif
bool
)
{
bool the_end_read = false;
+#ifndef NO_COMPABILITY
#ifndef NO_PEXTRA_REALLY
// This is super temporary but is needed to get the compability
// mode for minipages work correctly together with new tabulars.
static Paragraph * minipar;
static Paragraph * parBeforeMinipage;
#endif
-
+#endif
if (token[0] != '\\') {
-#ifdef NO_LATEX
+#ifndef NO_COMPABILITY
if (ert_comp.active) {
ert_comp.contents += token;
} else {
par->insertChar(pos, (*cit), font);
++pos;
}
-#ifdef NO_LATEX
+#ifndef NO_COMPABILITY
}
#endif
} else if (token == "\\i") {
par->insertInset(pos, inset, font);
++pos;
} else if (token == "\\layout") {
-#ifdef NO_LATEX
+#ifndef NO_COMPABILITY
ert_comp.in_tabular = false;
// Do the insetert.
insertErtContents(par, pos, font);
#endif
- lex.EatLine();
- string const layoutname = lex.GetString();
- pair<bool, LyXTextClass::LayoutList::size_type> pp
- = textclasslist.NumberOfLayout(params.textclass,
- layoutname);
+ lex.eatLine();
+ string const layoutname = lex.getString();
+ pair<bool, layout_type> pp
+ = textclasslist.NumberOfLayout(params.textclass, layoutname);
-#ifdef NO_LATEX
+#ifndef NO_COMPABILITY
if (compare_no_case(layoutname, "latex") == 0) {
ert_comp.active = true;
}
pos = 0;
if (pp.first) {
par->layout = pp.second;
+#ifndef NO_COMPABILITY
+ } else if (ert_comp.active) {
+ par->layout = 0;
+#endif
} else {
// layout not found
// use default layout "Standard" (0)
+ layoutname + _(" to ")
+ textclasslist.NameOfLayout(params.textclass, par->layout);
InsetError * new_inset = new InsetError(s);
- par->insertInset(0, new_inset);
+ par->insertInset(0, new_inset,
+ LyXFont(LyXFont::ALL_INHERIT,
+ params.language));
}
// Test whether the layout is obsolete.
LyXLayout const & layout =
}
#endif
+#ifndef NO_COMPABILITY
} else if (token == "\\begin_float") {
insertErtContents(par, pos, font);
//insertErtContents(par, pos, font, false);
// This is the compability reader. It can be removed in
// LyX version 1.3.0. (Lgb)
lex.next();
- string const tmptok = lex.GetString();
+ string const tmptok = lex.getString();
//lyxerr << "old float: " << tmptok << endl;
Inset * inset = 0;
if (tmptok == "footnote") {
inset = new InsetFoot;
+ old_float << "collapsed true\n";
} else if (tmptok == "margin") {
inset = new InsetMarginal;
+ old_float << "collapsed true\n";
} else if (tmptok == "fig") {
inset = new InsetFloat("figure");
old_float << "placement htbp\n"
- << "wide false\n";
+ << "wide false\n"
+ << "collapsed false\n";
} else if (tmptok == "tab") {
inset = new InsetFloat("table");
old_float << "placement htbp\n"
- << "wide false\n";
+ << "wide false\n"
+ << "collapsed false\n";
} else if (tmptok == "alg") {
inset = new InsetFloat("algorithm");
old_float << "placement htbp\n"
- << "wide false\n";
+ << "wide false\n"
+ << "collapsed false\n";
} else if (tmptok == "wide-fig") {
inset = new InsetFloat("figure");
//InsetFloat * tmp = new InsetFloat("figure");
//tmp->wide(true);
//inset = tmp;
old_float << "placement htbp\n"
- << "wide true\n";
+ << "wide true\n"
+ << "collapsed false\n";
} else if (tmptok == "wide-tab") {
inset = new InsetFloat("table");
//InsetFloat * tmp = new InsetFloat("table");
//tmp->wide(true);
//inset = tmp;
old_float << "placement htbp\n"
- << "wide true\n";
+ << "wide true\n"
+ << "collapsed false\n";
}
if (!inset) {
#endif
return false; // no end read yet
}
-
- old_float << "collapsed true\n";
// Here we need to check for \end_deeper and handle that
// before we do the footnote parsing.
// This _is_ a hack! (Lgb)
while (true) {
lex.next();
- string const tmp = lex.GetString();
+ string const tmp = lex.getString();
if (tmp == "\\end_deeper") {
//lyxerr << "\\end_deeper caught!" << endl;
if (!depth) {
par->insertInset(pos, inset, font);
++pos;
insertErtContents(par, pos, font);
+#endif
} else if (token == "\\begin_deeper") {
++depth;
} else if (token == "\\end_deeper") {
} else if (token == "\\begin_preamble") {
params.readPreamble(lex);
} else if (token == "\\textclass") {
- lex.EatLine();
- pair<bool, LyXTextClassList::size_type> pp =
- textclasslist.NumberOfClass(lex.GetString());
+ lex.eatLine();
+ pair<bool, textclass_type> pp =
+ textclasslist.NumberOfClass(lex.getString());
if (pp.first) {
params.textclass = pp.second;
} else {
- WriteAlert(string(_("Textclass error")),
+ Alert::alert(string(_("Textclass error")),
string(_("The document uses an unknown textclass \"")) +
- lex.GetString() + string("\"."),
+ lex.getString() + string("\"."),
string(_("LyX will not be able to produce output correctly.")));
params.textclass = 0;
}
if (!textclasslist.Load(params.textclass)) {
- // if the textclass wasn't loaded properly
- // we need to either substitute another
- // or stop loading the file.
- // I can substitute but I don't see how I can
- // stop loading... ideas?? ARRae980418
- WriteAlert(_("Textclass Loading Error!"),
+ // if the textclass wasn't loaded properly
+ // we need to either substitute another
+ // or stop loading the file.
+ // I can substitute but I don't see how I can
+ // stop loading... ideas?? ARRae980418
+ Alert::alert(_("Textclass Loading Error!"),
string(_("Can't load textclass ")) +
textclasslist.NameOfClass(params.textclass),
_("-- substituting default"));
params.textclass = 0;
}
} else if (token == "\\options") {
- lex.EatLine();
- params.options = lex.GetString();
+ lex.eatLine();
+ params.options = lex.getString();
} else if (token == "\\language") {
params.readLanguage(lex);
} else if (token == "\\fontencoding") {
- lex.EatLine();
+ lex.eatLine();
} else if (token == "\\inputencoding") {
- lex.EatLine();
- params.inputenc = lex.GetString();
+ lex.eatLine();
+ params.inputenc = lex.getString();
} else if (token == "\\graphics") {
params.readGraphicsDriver(lex);
} else if (token == "\\fontscheme") {
- lex.EatLine();
- params.fonts = lex.GetString();
+ lex.eatLine();
+ params.fonts = lex.getString();
} else if (token == "\\noindent") {
par->params().noindent(true);
} else if (token == "\\fill_top") {
} else if (token == "\\start_of_appendix") {
par->params().startOfAppendix(true);
} else if (token == "\\paragraph_separation") {
- int tmpret = lex.FindToken(string_paragraph_separation);
+ int tmpret = lex.findToken(string_paragraph_separation);
if (tmpret == -1) ++tmpret;
if (tmpret != LYX_LAYOUT_DEFAULT)
params.paragraph_separation =
static_cast<BufferParams::PARSEP>(tmpret);
} else if (token == "\\defskip") {
lex.nextToken();
- params.defskip = VSpace(lex.GetString());
+ params.defskip = VSpace(lex.getString());
} else if (token == "\\epsfig") { // obsolete
// Indeed it is obsolete, but we HAVE to be backwards
// compatible until 0.14, because otherwise all figures
// in existing documents are irretrivably lost. (Asger)
params.readGraphicsDriver(lex);
} else if (token == "\\quotes_language") {
- int tmpret = lex.FindToken(string_quotes_language);
+ int tmpret = lex.findToken(string_quotes_language);
if (tmpret == -1) ++tmpret;
if (tmpret != LYX_LAYOUT_DEFAULT) {
InsetQuotes::quote_language tmpl =
}
} else if (token == "\\quotes_times") {
lex.nextToken();
- switch (lex.GetInteger()) {
+ switch (lex.getInteger()) {
case 1:
params.quotes_times = InsetQuotes::SingleQ;
break;
break;
}
} else if (token == "\\papersize") {
- int tmpret = lex.FindToken(string_papersize);
+ int tmpret = lex.findToken(string_papersize);
if (tmpret == -1)
++tmpret;
else
params.papersize2 = tmpret;
} else if (token == "\\paperpackage") {
- int tmpret = lex.FindToken(string_paperpackages);
+ int tmpret = lex.findToken(string_paperpackages);
if (tmpret == -1) {
++tmpret;
params.paperpackage = BufferParams::PACKAGE_NONE;
params.paperpackage = tmpret;
} else if (token == "\\use_geometry") {
lex.nextToken();
- params.use_geometry = lex.GetInteger();
+ params.use_geometry = lex.getInteger();
} else if (token == "\\use_amsmath") {
lex.nextToken();
- params.use_amsmath = lex.GetInteger();
+ params.use_amsmath = lex.getInteger();
} else if (token == "\\use_natbib") {
lex.nextToken();
- params.use_natbib = lex.GetInteger();
+ params.use_natbib = lex.getInteger();
} else if (token == "\\use_numerical_citations") {
lex.nextToken();
- params.use_numerical_citations = lex.GetInteger();
+ params.use_numerical_citations = lex.getInteger();
} else if (token == "\\paperorientation") {
- int tmpret = lex.FindToken(string_orientation);
+ int tmpret = lex.findToken(string_orientation);
if (tmpret == -1) ++tmpret;
if (tmpret != LYX_LAYOUT_DEFAULT)
params.orientation = static_cast<BufferParams::PAPER_ORIENTATION>(tmpret);
} else if (token == "\\paperwidth") {
lex.next();
- params.paperwidth = lex.GetString();
+ params.paperwidth = lex.getString();
} else if (token == "\\paperheight") {
lex.next();
- params.paperheight = lex.GetString();
+ params.paperheight = lex.getString();
} else if (token == "\\leftmargin") {
lex.next();
- params.leftmargin = lex.GetString();
+ params.leftmargin = lex.getString();
} else if (token == "\\topmargin") {
lex.next();
- params.topmargin = lex.GetString();
+ params.topmargin = lex.getString();
} else if (token == "\\rightmargin") {
lex.next();
- params.rightmargin = lex.GetString();
+ params.rightmargin = lex.getString();
} else if (token == "\\bottommargin") {
lex.next();
- params.bottommargin = lex.GetString();
+ params.bottommargin = lex.getString();
} else if (token == "\\headheight") {
lex.next();
- params.headheight = lex.GetString();
+ params.headheight = lex.getString();
} else if (token == "\\headsep") {
lex.next();
- params.headsep = lex.GetString();
+ params.headsep = lex.getString();
} else if (token == "\\footskip") {
lex.next();
- params.footskip = lex.GetString();
+ params.footskip = lex.getString();
} else if (token == "\\paperfontsize") {
lex.nextToken();
- params.fontsize = strip(lex.GetString());
+ params.fontsize = strip(lex.getString());
} else if (token == "\\papercolumns") {
lex.nextToken();
- params.columns = lex.GetInteger();
+ params.columns = lex.getInteger();
} else if (token == "\\papersides") {
lex.nextToken();
- switch (lex.GetInteger()) {
+ switch (lex.getInteger()) {
default:
case 1: params.sides = LyXTextClass::OneSide; break;
case 2: params.sides = LyXTextClass::TwoSides; break;
}
} else if (token == "\\paperpagestyle") {
lex.nextToken();
- params.pagestyle = strip(lex.GetString());
+ params.pagestyle = strip(lex.getString());
} else if (token == "\\bullet") {
lex.nextToken();
- int const index = lex.GetInteger();
+ int const index = lex.getInteger();
lex.nextToken();
- int temp_int = lex.GetInteger();
+ int temp_int = lex.getInteger();
params.user_defined_bullets[index].setFont(temp_int);
params.temp_bullets[index].setFont(temp_int);
lex.nextToken();
- temp_int = lex.GetInteger();
+ temp_int = lex.getInteger();
params.user_defined_bullets[index].setCharacter(temp_int);
params.temp_bullets[index].setCharacter(temp_int);
lex.nextToken();
- temp_int = lex.GetInteger();
+ temp_int = lex.getInteger();
params.user_defined_bullets[index].setSize(temp_int);
params.temp_bullets[index].setSize(temp_int);
lex.nextToken();
- string const temp_str = lex.GetString();
+ string const temp_str = lex.getString();
if (temp_str != "\\end_bullet") {
// this element isn't really necessary for
// parsing but is easier for humans
}
} else if (token == "\\bulletLaTeX") {
lex.nextToken();
- int const index = lex.GetInteger();
+ int const index = lex.getInteger();
lex.next();
- string temp_str = lex.GetString();
+ string temp_str = lex.getString();
string sum_str;
while (temp_str != "\\end_bullet") {
// this loop structure is needed when user
// therefore needs to be read in turn
sum_str += temp_str;
lex.next();
- temp_str = lex.GetString();
+ temp_str = lex.getString();
}
params.user_defined_bullets[index].setText(sum_str);
params.temp_bullets[index].setText(sum_str);
} else if (token == "\\secnumdepth") {
lex.nextToken();
- params.secnumdepth = lex.GetInteger();
+ params.secnumdepth = lex.getInteger();
} else if (token == "\\tocdepth") {
lex.nextToken();
- params.tocdepth = lex.GetInteger();
+ params.tocdepth = lex.getInteger();
} else if (token == "\\spacing") {
lex.next();
- string const tmp = strip(lex.GetString());
+ string const tmp = strip(lex.getString());
Spacing::Space tmp_space = Spacing::Default;
float tmp_val = 0.0;
if (tmp == "single") {
} else if (tmp == "other") {
lex.next();
tmp_space = Spacing::Other;
- tmp_val = lex.GetFloat();
+ tmp_val = lex.getFloat();
} else {
lex.printError("Unknown spacing token: '$$Token'");
}
}
} else if (token == "\\paragraph_spacing") {
lex.next();
- string const tmp = strip(lex.GetString());
+ string const tmp = strip(lex.getString());
if (tmp == "single") {
par->params().spacing(Spacing(Spacing::Single));
} else if (tmp == "onehalf") {
} else if (tmp == "other") {
lex.next();
par->params().spacing(Spacing(Spacing::Other,
- lex.GetFloat()));
+ lex.getFloat()));
} else {
lex.printError("Unknown spacing token: '$$Token'");
}
} else if (token == "\\float_placement") {
lex.nextToken();
- params.float_placement = lex.GetString();
+ params.float_placement = lex.getString();
} else if (token == "\\family") {
lex.next();
- font.setLyXFamily(lex.GetString());
+ font.setLyXFamily(lex.getString());
} else if (token == "\\series") {
lex.next();
- font.setLyXSeries(lex.GetString());
+ font.setLyXSeries(lex.getString());
} else if (token == "\\shape") {
lex.next();
- font.setLyXShape(lex.GetString());
+ font.setLyXShape(lex.getString());
} else if (token == "\\size") {
lex.next();
- font.setLyXSize(lex.GetString());
-#ifndef NO_LATEX
-#ifdef WITH_WARNINGS
-#warning compatability hack needed
-#endif
+ font.setLyXSize(lex.getString());
+#ifndef NO_COMPABILITY
} else if (token == "\\latex") {
lex.next();
- string const tok = lex.GetString();
- // This is dirty, but gone with LyX3. (Asger)
- if (tok == "no_latex")
- font.setLatex(LyXFont::OFF);
- else if (tok == "latex")
- font.setLatex(LyXFont::ON);
- else if (tok == "default")
- font.setLatex(LyXFont::INHERIT);
- else
- lex.printError("Unknown LaTeX font flag "
- "`$$Token'");
-#else
- } else if (token == "\\latex") {
- lex.next();
- string const tok = lex.GetString();
+ string const tok = lex.getString();
if (tok == "no_latex") {
// Do the insetert.
insertErtContents(par, pos, font);
#endif
} else if (token == "\\lang") {
lex.next();
- string const tok = lex.GetString();
+ string const tok = lex.getString();
Language const * lang = languages.getLanguage(tok);
if (lang) {
font.setLanguage(lang);
}
} else if (token == "\\numeric") {
lex.next();
- font.setNumber(font.setLyXMisc(lex.GetString()));
+ font.setNumber(font.setLyXMisc(lex.getString()));
} else if (token == "\\emph") {
lex.next();
- font.setEmph(font.setLyXMisc(lex.GetString()));
+ font.setEmph(font.setLyXMisc(lex.getString()));
} else if (token == "\\bar") {
lex.next();
- string const tok = lex.GetString();
+ string const tok = lex.getString();
// This is dirty, but gone with LyX3. (Asger)
if (tok == "under")
font.setUnderbar(LyXFont::ON);
"`$$Token'");
} else if (token == "\\noun") {
lex.next();
- font.setNoun(font.setLyXMisc(lex.GetString()));
+ font.setNoun(font.setLyXMisc(lex.getString()));
} else if (token == "\\color") {
lex.next();
- font.setLyXColor(lex.GetString());
+ font.setLyXColor(lex.getString());
} else if (token == "\\align") {
- int tmpret = lex.FindToken(string_align);
+ int tmpret = lex.findToken(string_align);
if (tmpret == -1) ++tmpret;
if (tmpret != LYX_LAYOUT_DEFAULT) { // tmpret != 99 ???
int const tmpret2 = int(pow(2.0, tmpret));
}
} else if (token == "\\added_space_top") {
lex.nextToken();
- par->params().spaceTop(VSpace(lex.GetString()));
+ par->params().spaceTop(VSpace(lex.getString()));
} else if (token == "\\added_space_bottom") {
lex.nextToken();
- par->params().spaceBottom(VSpace(lex.GetString()));
+ par->params().spaceBottom(VSpace(lex.getString()));
+#ifndef NO_COMPABILITY
#ifndef NO_PEXTRA_REALLY
} else if (token == "\\pextra_type") {
lex.nextToken();
- par->params().pextraType(lex.GetInteger());
+ par->params().pextraType(lex.getInteger());
} else if (token == "\\pextra_width") {
lex.nextToken();
- par->params().pextraWidth(lex.GetString());
+ par->params().pextraWidth(lex.getString());
} else if (token == "\\pextra_widthp") {
lex.nextToken();
- par->params().pextraWidthp(lex.GetString());
+ par->params().pextraWidthp(lex.getString());
} else if (token == "\\pextra_alignment") {
lex.nextToken();
- par->params().pextraAlignment(lex.GetInteger());
+ par->params().pextraAlignment(lex.getInteger());
} else if (token == "\\pextra_hfill") {
lex.nextToken();
- par->params().pextraHfill(lex.GetInteger());
+ par->params().pextraHfill(lex.getInteger());
} else if (token == "\\pextra_start_minipage") {
lex.nextToken();
- par->params().pextraStartMinipage(lex.GetInteger());
+ par->params().pextraStartMinipage(lex.getInteger());
+#endif
#endif
} else if (token == "\\labelwidthstring") {
- lex.EatLine();
- par->params().labelWidthString(lex.GetString());
+ lex.eatLine();
+ par->params().labelWidthString(lex.getString());
// do not delete this token, it is still needed!
} else if (token == "\\end_inset") {
lyxerr << "Solitary \\end_inset. Missing \\begin_inset?.\n"
// But insets should read it, it is a part of
// the inset isn't it? Lgb.
} else if (token == "\\begin_inset") {
-#ifdef NO_LATEX
+#ifndef NO_COMPABILITY
insertErtContents(par, pos, font, false);
ert_stack.push(ert_comp);
ert_comp = ErtComp();
#endif
readInset(lex, par, pos, font);
-#ifdef NO_LATEX
+#ifndef NO_COMPABILITY
ert_comp = ert_stack.top();
ert_stack.pop();
insertErtContents(par, pos, font);
par->getLayout());
// Insets don't make sense in a free-spacing context! ---Kayvan
- if (layout.free_spacing) {
- if (lex.IsOK()) {
+ if (layout.free_spacing || par->isFreeSpacing()) {
+ if (lex.isOK()) {
lex.next();
- string next_token = lex.GetString();
+ string next_token = lex.getString();
if (next_token == "\\-") {
par->insertChar(pos, '-', font);
} else if (next_token == "\\protected_separator"
}
++pos;
} else if (token == "\\newline") {
-#ifdef NO_LATEX
-
+#ifndef NO_COMPABILITY
if (!ert_comp.in_tabular && ert_comp.active) {
ert_comp.contents += char(Paragraph::META_NEWLINE);
} else {
++pos;
#endif
} else if (token == "\\LyXTable") {
-#ifdef NO_LATEX
+#ifndef NO_COMPABILITY
ert_comp.in_tabular = true;
#endif
Inset * inset = new InsetTabular(*this);
textclasslist.Style(params.textclass,
par->getLayout());
- if (layout.free_spacing) {
+ if (layout.free_spacing || par->isFreeSpacing()) {
par->insertChar(pos, ' ', font);
} else {
Inset * inset = new InsetSpecialChar(InsetSpecialChar::PROTECTED_SEPARATOR);
}
par->bibkey->read(this, lex);
} else if (token == "\\backslash") {
-#ifdef NO_LATEX
+#ifndef NO_COMPABILITY
if (ert_comp.active) {
ert_comp.contents += "\\";
} else {
#endif
par->insertChar(pos, '\\', font);
++pos;
-#ifdef NO_LATEX
+#ifndef NO_COMPABILITY
}
#endif
} else if (token == "\\the_end") {
-#ifdef NO_LATEX
+#ifndef NO_COMPABILITY
//Â If we still have some ert active here we have to insert
// it so we don't loose it. (Lgb)
insertErtContents(par, pos, font);
#endif
the_end_read = true;
+#ifndef NO_COMPABILITY
#ifndef NO_PEXTRA_REALLY
minipar = parBeforeMinipage = 0;
+#endif
#endif
} else {
-#ifdef NO_LATEX
+#ifndef NO_COMPABILITY
if (ert_comp.active) {
ert_comp.contents += token;
} else {
#endif
// This should be insurance for the future: (Asger)
- lex.printError("Unknown token `$$Token'. "
- "Inserting as text.");
- string::const_iterator cit = token.begin();
- string::const_iterator end = token.end();
- for (; cit != end; ++cit) {
- par->insertChar(pos, (*cit), font);
- ++pos;
- }
-#ifdef NO_LATEX
+ ++unknown_tokens;
+ lex.eatLine();
+ string const s = _("Unknown token: ") + token
+ + " " + lex.text() + "\n";
+
+ InsetError * new_inset = new InsetError(s);
+ par->insertInset(pos, new_inset, LyXFont(LyXFont::ALL_INHERIT,
+ params.language));
+
+#ifndef NO_COMPABILITY
}
#endif
}
+#ifndef NO_COMPABILITY
#ifndef NO_PEXTRA_REALLY
// I wonder if we could use this blanket fix for all the
// checkminipage cases...
}
// End of pextra_minipage compability
--call_depth;
+#endif
#endif
return the_end_read;
}
// needed to insert the selection
-void Buffer::insertStringAsLines(Paragraph *& par, Paragraph::size_type & pos,
- LyXFont const & font,
- string const & str) const
+void Buffer::insertStringAsLines(Paragraph *& par, pos_type & pos,
+ LyXFont const & fn,string const & str) const
{
LyXLayout const & layout = textclasslist.Style(params.textclass,
- par->getLayout());
+ par->getLayout());
+ LyXFont font = fn;
+
+ (void)par->checkInsertChar(font);
// insert the string, don't insert doublespace
bool space_inserted = true;
for(string::const_iterator cit = str.begin();
if (*cit == '\n') {
if (par->size() || layout.keepempty) {
par->breakParagraph(params, pos,
- layout.isEnvironment());
+ layout.isEnvironment());
par = par->next();
pos = 0;
space_inserted = true;
continue;
}
// do not insert consecutive spaces if !free_spacing
- } else if ((*cit == ' ' || *cit == '\t')
- && space_inserted && !layout.free_spacing) {
+ } else if ((*cit == ' ' || *cit == '\t') &&
+ space_inserted && !layout.free_spacing &&
+ !par->isFreeSpacing())
+ {
continue;
} else if (*cit == '\t') {
- if (!layout.free_spacing) {
+ if (!layout.free_spacing && !par->isFreeSpacing()) {
// tabs are like spaces here
par->insertChar(pos, ' ', font);
++pos;
space_inserted = true;
} else {
- const Paragraph::value_type nb = 8 - pos % 8;
- for (Paragraph::size_type a = 0;
- a < nb ; ++a) {
+ const pos_type nb = 8 - pos % 8;
+ for (pos_type a = 0; a < nb ; ++a) {
par->insertChar(pos, ' ', font);
++pos;
}
int & pos, LyXFont & font)
{
// consistency check
- if (lex.GetString() != "\\begin_inset") {
+ if (lex.getString() != "\\begin_inset") {
lyxerr << "Buffer::readInset: Consistency check failed."
<< endl;
}
Inset * inset = 0;
lex.next();
- string const tmptok = lex.GetString();
+ string const tmptok = lex.getString();
last_inset_read = tmptok;
// test the different insets
inset = new InsetMinipage;
} else if (tmptok == "Float") {
lex.next();
- string tmptok = lex.GetString();
+ string tmptok = lex.getString();
inset = new InsetFloat(tmptok);
#if 0
} else if (tmptok == "List") {
bool Buffer::readFile(LyXLex & lex, Paragraph * par)
{
- if (lex.IsOK()) {
+ if (lex.isOK()) {
lex.next();
- string const token(lex.GetString());
+ string const token(lex.getString());
if (token == "\\lyxformat") { // the first token _must_ be...
- lex.EatLine();
- string tmp_format = lex.GetString();
+ lex.eatLine();
+ string tmp_format = lex.getString();
//lyxerr << "LyX Format: `" << tmp_format << "'" << endl;
// if present remove ".," from string.
string::size_type dot = tmp_format.find_first_of(".,");
// current format
} else if (file_format > LYX_FORMAT) {
// future format
- WriteAlert(_("Warning!"),
+ Alert::alert(_("Warning!"),
_("LyX file format is newer that what"),
_("is supported in this LyX version. Expect some problems."));
} else if (file_format < LYX_FORMAT) {
// old formats
if (file_format < 200) {
- WriteAlert(_("ERROR!"),
+ Alert::alert(_("ERROR!"),
_("Old LyX file format found. "
"Use LyX 0.10.x to read this!"));
return false;
}
}
bool the_end = readLyXformat2(lex, par);
- setPaperStuff();
+ params.setPaperStuff();
// the_end was added in 213
if (file_format < 213)
the_end = true;
- if (!the_end)
- WriteAlert(_("Warning!"),
+ if (!the_end) {
+ Alert::alert(_("Warning!"),
_("Reading of document is not complete"),
_("Maybe the document is truncated"));
+ }
return true;
} else { // "\\lyxformat" not found
- WriteAlert(_("ERROR!"), _("Not a LyX file!"));
+ Alert::alert(_("ERROR!"), _("Not a LyX file!"));
}
} else
- WriteAlert(_("ERROR!"), _("Unable to read file!"));
+ Alert::alert(_("ERROR!"), _("Unable to read file!"));
return false;
}
lyxerr << _("Error! Document is read-only: ")
<< fname << endl;
else
- WriteAlert(_("Error! Document is read-only: "),
+ Alert::alert(_("Error! Document is read-only: "),
fname);
return false;
}
lyxerr << _("Error! Cannot write file: ")
<< fname << endl;
else
- WriteFSAlert(_("Error! Cannot write file: "),
+ Alert::err_alert(_("Error! Cannot write file: "),
fname);
return false;
}
lyxerr << _("Error! Cannot open file: ")
<< fname << endl;
else
- WriteFSAlert(_("Error! Cannot open file: "),
+ Alert::err_alert(_("Error! Cannot open file: "),
fname);
return false;
}
// The top of the file should not be written by params.
// write out a comment in the top of the file
- ofs << '#' << LYX_DOCVERSION
+ ofs << '#' << lyx_docversion
<< " created this file. For more info see http://www.lyx.org/\n"
<< "\\lyxformat " << LYX_FORMAT << "\n";
Paragraph::depth_type depth = 0;
int ltype = 0;
Paragraph::depth_type ltype_depth = 0;
- unsigned int currlinelen = 0;
+ string::size_type currlinelen = 0;
bool ref_printed = false;
int noparbreak = 0;
lyxerr << "Should this ever happen?" << endl;
}
-#ifndef NO_LATEX
- LyXFont const font1 = LyXFont(LyXFont::ALL_INHERIT, params.language);
-#endif
- for (Paragraph::size_type i = 0; i < par->size(); ++i) {
+ for (pos_type i = 0; i < par->size(); ++i) {
if (!i && !noparbreak) {
if (linelen > 0)
buffer << "\n\n";
currlinelen += (ltype_depth-depth)*2;
}
}
-#ifndef NO_LATEX
- LyXFont const font2 = par->getFontSettings(params, i);
- if (font1.latex() != font2.latex()) {
- if (font2.latex() == LyXFont::OFF)
- islatex = 0;
- else
- islatex = 1;
- } else {
- islatex = 0;
- }
-#endif
char c = par->getUChar(params, i);
if (islatex)
case Paragraph::META_HFILL:
buffer << "\t";
break;
-
- case '\\':
- buffer << "\\";
- break;
-
+
default:
if ((linelen > 0) && (currlinelen > (linelen - 10)) &&
(c == ' ') && ((i + 2) < par->size()))
buffer << " ";
currlinelen += (ltype_depth-depth)*2;
}
- } else if (c != '\0')
+ } else if (c != '\0') {
buffer << c;
- else if (c == '\0')
+ ++currlinelen;
+ } else
lyxerr[Debug::INFO] << "writeAsciiFile: NULL char in structure." << endl;
- ++currlinelen;
break;
}
}
{
ofstream ofs(fname.c_str());
if (!ofs) {
- WriteFSAlert(_("Error: Cannot write file:"), fname);
+ Alert::err_alert(_("Error: Cannot write file:"), fname);
return;
}
writeFileAscii(ofs, linelen);
ofstream ofs(fname.c_str());
if (!ofs) {
- WriteFSAlert(_("Error: Cannot open file: "), fname);
+ Alert::err_alert(_("Error: Cannot open file: "), fname);
return;
}
texrow.start(paragraph, 0);
if (!only_body && nice) {
- ofs << "%% " LYX_DOCVERSION " created this file. "
+ ofs << "%% " << lyx_docversion << " created this file. "
"For more info, see http://www.lyx.org/.\n"
"%% Do not edit unless you really know what "
"you are doing.\n";
if (params.language->babel() == "hebrew"
&& default_language->babel() != "hebrew")
// This seems necessary
- features.UsedLanguages.insert(default_language);
+ features.useLanguage(default_language);
if (lyxrc.language_use_babel ||
params.language->lang() != lyxrc.default_language ||
- !features.UsedLanguages.empty()) {
+ !features.hasLanguages()) {
use_babel = true;
- for (LaTeXFeatures::LanguageList::const_iterator cit =
- features.UsedLanguages.begin();
- cit != features.UsedLanguages.end(); ++cit)
- language_options << (*cit)->babel() << ',';
+ language_options << features.getLanguages();
language_options << params.language->babel();
if (lyxrc.language_global_options)
options << language_options.str() << ',';
// Create a list with all the input encodings used
// in the document
- set<string> encodings;
- for (LaTeXFeatures::LanguageList::const_iterator it =
- features.UsedLanguages.begin();
- it != features.UsedLanguages.end(); ++it)
- if ((*it)->encoding()->LatexName() != doc_encoding)
- encodings.insert((*it)->encoding()->LatexName());
+ set<string> encodings = features.getEncodingSet(doc_encoding);
ofs << "\\usepackage[";
std::copy(encodings.begin(), encodings.end(),
ofs << "}\n";
texrow.newline();
}
- if (features.amsstyle
- && !tclass.provides(LyXTextClass::amsmath)) {
+
+ if (features.isRequired("amsstyle")
+ && !tclass.provides(LyXTextClass::amsmath)) {
ofs << "\\usepackage{amsmath}\n";
texrow.newline();
}
-
+
if (tokenPos(tclass.opt_pagestyle(),
'|', params.pagestyle) >= 0) {
if (params.pagestyle == "fancy") {
texrow.newline();
}
- // We try to load babel late, in case it interferes
- // with other packages.
- if (use_babel) {
- string tmp = lyxrc.language_package;
- if (!lyxrc.language_global_options
- && tmp == "\\usepackage{babel}")
- tmp = string("\\usepackage[") +
- language_options.str().c_str() +
- "]{babel}";
- ofs << tmp << "\n";
- texrow.newline();
- }
-
if (params.secnumdepth != tclass.secnumdepth()) {
ofs << "\\setcounter{secnumdepth}{"
<< params.secnumdepth
ofs << preamble;
+ // We try to load babel late, in case it interferes
+ // with other packages.
+ if (use_babel) {
+ string tmp = lyxrc.language_package;
+ if (!lyxrc.language_global_options
+ && tmp == "\\usepackage{babel}")
+ tmp = string("\\usepackage[") +
+ language_options.str().c_str() +
+ "]{babel}";
+ ofs << tmp << "\n";
+ texrow.newline();
+ }
+
// make the body.
ofs << "\\begin{document}\n";
texrow.newline();
}
lyxerr[Debug::INFO] << "Finished making latex file." << endl;
+ lyxerr[Debug::INFO] << "Row count was " << texrow.rows()-1 << "." << endl;
}
string const & latexname) const
{
if (!latexname.empty() && latexname != "!-- --")
- os << "<!-- " << depth << " -->" << "<" << latexname << ">";
- //os << string(depth, ' ') << "<" << latexname << ">\n";
+ //os << "<!-- " << depth << " -->" << "<" << latexname << ">";
+ os << string(depth, ' ') << "<" << latexname << ">\n";
}
string const & latexname) const
{
if (!latexname.empty() && latexname != "!-- --")
- os << "<!-- " << depth << " -->" << "</" << latexname << ">\n";
- //os << string(depth, ' ') << "</" << latexname << ">\n";
+ //os << "<!-- " << depth << " -->" << "</" << latexname << ">\n";
+ os << string(depth, ' ') << "</" << latexname << ">\n";
}
ofstream ofs(fname.c_str());
if (!ofs) {
- WriteAlert(_("LYX_ERROR:"), _("Cannot write file"), fname);
+ Alert::alert(_("LYX_ERROR:"), _("Cannot write file"), fname);
return;
}
string top_element = textclasslist.LatexnameOfClass(params.textclass);
if (!body_only) {
- string sgml_includedfiles=features.getIncludedFiles(fname);
+ ofs << "<!doctype linuxdoc system";
- if (params.preamble.empty() && sgml_includedfiles.empty()) {
- ofs << "<!doctype linuxdoc system>\n\n";
- } else {
- ofs << "<!doctype linuxdoc system [ "
- << params.preamble << sgml_includedfiles << " \n]>\n\n";
+ string preamble = params.preamble;
+ preamble += features.getIncludedFiles(fname);
+ preamble += features.getLyXSGMLEntities();
+
+ if (!preamble.empty()) {
+ ofs << " [ " << preamble << " ]";
}
+ ofs << ">\n\n";
if (params.options.empty())
sgmlOpenTag(ofs, 0, top_element);
}
}
- ofs << "<!-- " << LYX_DOCVERSION
+ ofs << "<!-- " << lyx_docversion
<< " created this file. For more info see http://www.lyx.org/"
<< " -->\n";
par->layout);
// treat <toc> as a special case for compatibility with old code
- if (par->getChar(0) == Paragraph::META_INSET) {
+ if (par->isInset(0)) {
Inset * inset = par->getInset(0);
Inset::Code lyx_code = inset->lyxCode();
if (lyx_code == Inset::TOC_CODE){
case LATEX_COMMAND:
if (depth!= 0)
- linuxDocError(par, 0,
- _("Error : Wrong depth for"
- " LatexType Command.\n"));
+ sgmlError(par, 0,
+ _("Error : Wrong depth for"
+ " LatexType Command.\n"));
if (!environment_stack[depth].empty()){
sgmlCloseTag(ofs, depth,
}
-void Buffer::docBookHandleCaption(ostream & os, string & inner_tag,
- Paragraph::depth_type depth, int desc_on,
- Paragraph * & par)
-{
- Paragraph * tpar = par;
- while (tpar
- && (tpar->layout != textclasslist.NumberOfLayout(params.textclass,
- "Caption").second))
- tpar = tpar->next();
-
- if (tpar &&
- tpar->layout == textclasslist.NumberOfLayout(params.textclass,
- "Caption").second) {
- sgmlOpenTag(os, depth + 1, inner_tag);
- string extra_par;
- simpleDocBookOnePar(os, extra_par, tpar,
- desc_on, depth + 2);
- sgmlCloseTag(os, depth+1, inner_tag);
- if (!extra_par.empty())
- os << extra_par;
- }
-}
-
-
// checks, if newcol chars should be put into this line
// writes newline, if necessary.
namespace {
-void linux_doc_line_break(ostream & os, string::size_type & colcount,
+void sgmlLineBreak(ostream & os, string::size_type & colcount,
string::size_type newcol)
{
colcount += newcol;
} // namespace anon
-
-
// Handle internal paragraph parsing -- layout already processed.
void Buffer::simpleLinuxDocOnePar(ostream & os,
Paragraph * par,
{
LyXLayout const & style = textclasslist.Style(params.textclass,
par->getLayout());
- string::size_type char_line_count = 5; // Heuristic choice ;-)
+ string::size_type char_line_count = 5; // Heuristic choice ;-)
// gets paragraph main font
LyXFont font_old;
LyXFont::FONT_SHAPE shape_type = LyXFont::UP_SHAPE;
bool is_em = false;
- stack < PAR_TAG > tag_state;
+ stack<PAR_TAG> tag_state;
// parsing main loop
- for (Paragraph::size_type i = 0; i < par->size(); ++i) {
+ for (pos_type i = 0; i < par->size(); ++i) {
PAR_TAG tag_close = NONE;
list < PAR_TAG > tag_open;
}
list < PAR_TAG > temp;
- while(!tag_state.empty() && tag_close ) {
+ while (!tag_state.empty() && tag_close ) {
PAR_TAG k = tag_state.top();
tag_state.pop();
os << "</" << tag_name(k) << ">";
continue;
}
- if (
-#ifndef NO_LATEX
- font.latex() == LyXFont::ON ||
-#endif
- style.latexparam() == "CDATA") {
+ if (style.latexparam() == "CDATA") {
// "TeX"-Mode on == > SGML-Mode on.
if (c != '\0')
os << c;
++char_line_count;
} else {
string sgml_string;
- if (par->linuxDocConvertChar(c, sgml_string)
- && !style.free_spacing) {
+ if (par->sgmlConvertChar(c, sgml_string)
+ && !style.free_spacing && !par->isFreeSpacing())
+ {
// in freespacing mode, spaces are
// non-breaking characters
if (desc_on) {// if char is ' ' then...
++char_line_count;
- linux_doc_line_break(os, char_line_count, 6);
+ sgmlLineBreak(os, char_line_count, 6);
os << "</tag>";
desc_on = false;
} else {
- linux_doc_line_break(os, char_line_count, 1);
+ sgmlLineBreak(os, char_line_count, 1);
os << c;
}
} else {
// resets description flag correctly
if (desc_on) {
// <tag> not closed...
- linux_doc_line_break(os, char_line_count, 6);
+ sgmlLineBreak(os, char_line_count, 6);
os << "</tag>";
}
}
// Print an error message.
-void Buffer::linuxDocError(Paragraph * par, int pos,
- string const & message)
+void Buffer::sgmlError(Paragraph * par, int pos,
+ string const & message) const
{
// insert an error marker in text
InsetError * new_inset = new InsetError(message);
- par->insertInset(pos, new_inset);
+ par->insertInset(pos, new_inset, LyXFont(LyXFont::ALL_INHERIT,
+ params.language));
}
{
ofstream ofs(fname.c_str());
if (!ofs) {
- WriteAlert(_("LYX_ERROR:"), _("Cannot write file"), fname);
+ Alert::alert(_("LYX_ERROR:"), _("Cannot write file"), fname);
return;
}
string top_element = textclasslist.LatexnameOfClass(params.textclass);
if (!only_body) {
- string sgml_includedfiles = features.getIncludedFiles(fname);
+ ofs << "<!DOCTYPE " << top_element
+ << " PUBLIC \"-//OASIS//DTD DocBook V4.1//EN\"";
- ofs << "<!doctype " << top_element
- << " public \"-//OASIS//DTD DocBook V3.1//EN\"";
+ string preamble = params.preamble;
+ preamble += features.getIncludedFiles(fname);
+ preamble += features.getLyXSGMLEntities();
- if (params.preamble.empty() && sgml_includedfiles.empty())
- ofs << ">\n\n";
- else
- ofs << "\n [ " << params.preamble
- << sgml_includedfiles << " \n]>\n\n";
+ if (!preamble.empty()) {
+ ofs << "\n [ " << preamble << " ]";
+ }
+ ofs << ">\n\n";
}
string top = top_element;
}
sgmlOpenTag(ofs, 0, top);
- ofs << "<!-- DocBook file was created by " << LYX_DOCVERSION
+ ofs << "<!-- DocBook file was created by " << lyx_docversion
<< "\n See http://www.lyx.org/ for more information -->\n";
vector<string> environment_stack(10);
case LATEX_COMMAND:
if (depth != 0)
- linuxDocError(par, 0,
- _("Error : Wrong depth for "
- "LatexType Command.\n"));
+ sgmlError(par, 0,
+ _("Error : Wrong depth for "
+ "LatexType Command.\n"));
command_name = style.latexname();
// treat label as a special case for
// more WYSIWYM handling.
- if (par->getChar(0) == Paragraph::META_INSET) {
+ // This is a hack while paragraphs can't have
+ // attributes, like id in this case.
+ if (par->isInset(0)) {
Inset * inset = par->getInset(0);
Inset::Code lyx_code = inset->lyxCode();
if (lyx_code == Inset::LABEL_CODE){
break;
}
- string extra_par;
- simpleDocBookOnePar(ofs, extra_par, par, desc_on,
- depth + 1 + command_depth);
+ simpleDocBookOnePar(ofs, par, desc_on, depth+1+command_depth);
par = par->next();
string end_tag;
}
-void Buffer::simpleDocBookOnePar(ostream & os, string & extra,
+void Buffer::simpleDocBookOnePar(ostream & os,
Paragraph * par, int & desc_on,
Paragraph::depth_type depth) const
{
// os << string(depth,' ');
// parsing main loop
- for (Paragraph::size_type i = 0;
- i < par->size(); ++i) {
+ for (pos_type i = 0; i < par->size(); ++i) {
LyXFont font = par->getFont(params, i);
// handle <emphasis> tag
}
}
- char c = par->getChar(i);
- if (c == Paragraph::META_INSET) {
+ if ( par->isInset(i) ) {
Inset * inset = par->getInset(i);
- ostringstream ost;
- inset->docBook(this, ost);
- string tmp_out = ost.str().c_str();
-
- //
- // This code needs some explanation:
- // Two insets are treated specially
- // label if it is the first element in a command paragraph
- // desc_on == 3
- // graphics inside tables or figure floats can't go on
- // title (the equivalente in latex for this case is caption
- // and title should come first
- // desc_on == 4
- //
- if (desc_on!= 3 || i!= 0) {
- if (!tmp_out.empty() && tmp_out[0] == '@') {
- if (desc_on == 4)
- extra += frontStrip(tmp_out, '@');
- else
- os << frontStrip(tmp_out, '@');
- }
- else
- os << tmp_out;
- }
-#ifndef NO_LATEX
- } else if (font.latex() == LyXFont::ON) {
- // "TeX"-Mode on ==> SGML-Mode on.
- if (c != '\0')
- os << c;
- ++char_line_count;
-#endif
+ // don't print the inset in position 0 if desc_on == 3 (label)
+ if ( i || desc_on != 3)
+ inset->docbook(this, os);
} else {
+ char c = par->getChar(i);
string sgml_string;
- if (par->linuxDocConvertChar(c, sgml_string)
- && !style.free_spacing) { // in freespacing
- // mode, spaces are
- // non-breaking characters
- // char is ' '
- if (desc_on == 1) {
- ++char_line_count;
- os << "\n</term><listitem><para>";
- desc_on = 2;
- } else {
- os << c;
- }
+ par->sgmlConvertChar(c, sgml_string);
+
+ if (style.pass_thru) {
+ os << c;
+ } else if(style.free_spacing || par->isFreeSpacing() || c != ' ') {
+ os << sgml_string;
+ } else if (desc_on ==1) {
+ ++char_line_count;
+ os << "\n</term><listitem><para>";
+ desc_on = 2;
} else {
- os << sgml_string;
+ os << ' ';
}
}
font_old = font;
int res = chktex.run(terr); // run chktex
if (res == -1) {
- WriteAlert(_("chktex did not work!"),
+ Alert::alert(_("chktex did not work!"),
_("Could not run with file:"), name);
} else if (res > 0) {
// Insert all errors as errors boxes
textclasslist.TextClass(params.textclass);
// AMS Style is at document level
- features.amsstyle = (params.use_amsmath ||
- tclass.provides(LyXTextClass::amsmath));
+ if (params.use_amsmath || tclass.provides(LyXTextClass::amsmath))
+ features.require("amsstyle");
while (par) {
// We don't use "lyxerr.debug" because of speed. (Asger)
|| c == 25
|| c == 26
|| c == 31) {
- features.latexsym = true;
+ features.require("latexsym");
}
} else if (font == 1) {
- features.amssymb = true;
+ features.require("amssymb");
} else if ((font >= 2 && font <= 5)) {
- features.pifont = true;
+ features.require("pifont");
}
}
}
}
-void Buffer::setPaperStuff()
-{
- params.papersize = BufferParams::PAPER_DEFAULT;
- char const c1 = params.paperpackage;
- if (c1 == BufferParams::PACKAGE_NONE) {
- char const c2 = params.papersize2;
- if (c2 == BufferParams::VM_PAPER_USLETTER)
- params.papersize = BufferParams::PAPER_USLETTER;
- else if (c2 == BufferParams::VM_PAPER_USLEGAL)
- params.papersize = BufferParams::PAPER_LEGALPAPER;
- else if (c2 == BufferParams::VM_PAPER_USEXECUTIVE)
- params.papersize = BufferParams::PAPER_EXECUTIVEPAPER;
- else if (c2 == BufferParams::VM_PAPER_A3)
- params.papersize = BufferParams::PAPER_A3PAPER;
- else if (c2 == BufferParams::VM_PAPER_A4)
- params.papersize = BufferParams::PAPER_A4PAPER;
- else if (c2 == BufferParams::VM_PAPER_A5)
- params.papersize = BufferParams::PAPER_A5PAPER;
- else if ((c2 == BufferParams::VM_PAPER_B3) || (c2 == BufferParams::VM_PAPER_B4) ||
- (c2 == BufferParams::VM_PAPER_B5))
- params.papersize = BufferParams::PAPER_B5PAPER;
- } else if ((c1 == BufferParams::PACKAGE_A4) || (c1 == BufferParams::PACKAGE_A4WIDE) ||
- (c1 == BufferParams::PACKAGE_WIDEMARGINSA4))
- params.papersize = BufferParams::PAPER_A4PAPER;
-}
-
-
// This function should be in Buffer because it's a buffer's property (ale)
string const Buffer::getIncludeonlyList(char delim)
{
{
Lists l;
Paragraph * par = paragraph;
+
+#if 1
+ std::pair<bool, textclass_type> const tmp =
+ textclasslist.NumberOfLayout(params.textclass, "Caption");
+ bool const found = tmp.first;
+ textclass_type const cap = tmp.second;
+
+#else
+ // This is the prefered way to to this, but boost::tie can break
+ // some compilers
bool found;
- LyXTextClassList::size_type cap;
+ textclass_type cap;
boost::tie(found, cap) = textclasslist
.NumberOfLayout(params.textclass, "Caption");
+#endif
while (par) {
char const labeltype =
void Buffer::changeLanguage(Language const * from, Language const * to)
{
- Paragraph * par = paragraph;
- while (par) {
- par->changeLanguage(params, from, to);
- par = par->next();
- }
+ ParIterator end = par_iterator_end();
+ for (ParIterator it = par_iterator_begin(); it != end; ++it)
+ (*it)->changeLanguage(params, from, to);
}
bool Buffer::isMultiLingual()
{
- Paragraph * par = paragraph;
- while (par) {
- if (par->isMultiLingual(params))
+ ParIterator end = par_iterator_end();
+ for (ParIterator it = par_iterator_begin(); it != end; ++it)
+ if ((*it)->isMultiLingual(params))
return true;
- par = par->next();
- }
+
return false;
}
-Buffer::inset_iterator::inset_iterator(Paragraph * paragraph,
- Paragraph::size_type pos)
+Buffer::inset_iterator::inset_iterator(Paragraph * paragraph, pos_type pos)
: par(paragraph)
{
it = par->InsetIterator(pos);
}
return 0;
}
+
+
+ParIterator Buffer::par_iterator_begin()
+{
+ return ParIterator(paragraph);
+}
+
+
+ParIterator Buffer::par_iterator_end()
+{
+ return ParIterator();
+}