#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 "lyxtextclasslist.h"
+
#include "mathed/formulamacro.h"
#include "mathed/formula.h"
+
#include "insets/inset.h"
#include "insets/inseterror.h"
#include "insets/insetlabel.h"
#include "insets/insettoc.h"
#include "insets/insetparent.h"
#include "insets/insetspecialchar.h"
-#include "insets/figinset.h"
#include "insets/insettext.h"
#include "insets/insetert.h"
#include "insets/insetgraphics.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 "frontends/Dialogs.h"
-#include "frontends/Alert.h"
-#include "encoding.h"
-#include "exporter.h"
-#include "Lsstream.h"
-#include "converter.h"
-#include "BufferView.h"
-#include "ParagraphParameters.h"
-#include "iterators.h"
+#include "support/lyxalgo.h" // for lyx::count
+
+#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;
Buffer::Buffer(string const & file, bool ronly)
+ : paragraph(0), lyx_clean(true), bak_clean(true),
+ unnamed(false), dep_clean(0), read_only(ronly),
+ filename_(file), users(0)
{
lyxerr[Debug::INFO] << "Buffer::Buffer()" << endl;
- filename = file;
- filepath = OnlyPath(file);
- paragraph = 0;
- lyx_clean = true;
- bak_clean = true;
- dep_clean = 0;
- read_only = ronly;
- unnamed = false;
- users = 0;
+// filename = file;
+ filepath_ = OnlyPath(file);
+// paragraph = 0;
+// lyx_clean = true;
+// bak_clean = true;
+// dep_clean = 0;
+// read_only = ronly;
+// unnamed = false;
+// users = 0;
lyxvc.buffer(this);
- if (read_only || (lyxrc.use_tempdir)) {
+ if (read_only || lyxrc.use_tempdir) {
tmppath = CreateBufferTmpDir();
- } else tmppath.erase();
+ } else {
+ tmppath.erase();
+ }
}
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
// 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();
}
void Buffer::setFileName(string const & newfile)
{
- filename = MakeAbsPath(newfile);
- filepath = OnlyPath(filename);
- setReadonly(IsFileWriteable(filename) == 0);
+ filename_ = MakeAbsPath(newfile);
+ filepath_ = OnlyPath(filename_);
+ setReadonly(IsFileWriteable(filename_) == 0);
updateTitles();
}
string contents;
bool active;
bool in_tabular;
+ LyXFont font;
};
std::stack<ErtComp> ert_stack;
ErtComp ert_comp;
#endif
+#ifdef WITH_WARNINGS
#warning And _why_ is this here? (Lgb)
+#endif
int unknown_layouts;
int unknown_tokens;
} else {
// We are inserting into an existing document
users->text->breakParagraph(users);
- first_par = users->text->firstParagraph();
+ first_par = users->text->ownerParagraph();
pos = 0;
markDirty();
// We don't want to adopt the parameters from the
#ifndef NO_COMPABILITY
-void Buffer::insertErtContents(Paragraph * par, int & pos,
- LyXFont const & font, bool set_inactive)
+void Buffer::insertErtContents(Paragraph * par, int & pos, bool set_inactive)
{
if (!ert_comp.contents.empty()) {
- lyxerr[Debug::INSETS] << "ERT contents:\n"
- << ert_comp.contents << endl;
- Inset * inset = new InsetERT(ert_comp.contents, true);
- par->insertInset(pos++, inset, font);
+ lyxerr[Debug::INSETS] << "ERT contents:\n'"
+ << ert_comp.contents << "'" << endl;
+ Inset * inset = new InsetERT(params.language, ert_comp.contents, true);
+ par->insertInset(pos++, inset, ert_comp.font);
ert_comp.contents.erase();
}
if (set_inactive) {
#ifndef NO_COMPABILITY
ert_comp.in_tabular = false;
// Do the insetert.
- insertErtContents(par, pos, font);
+ insertErtContents(par, pos);
#endif
lex.eatLine();
string const layoutname = lex.getString();
+ //lyxerr << "Looking for layout '"
+ // << layoutname << "'!" << endl;
+
pair<bool, layout_type> pp
= textclasslist.NumberOfLayout(params.textclass, layoutname);
+ //lyxerr << "Result: " << pp.first << "/" << pp.second << endl;
+
#ifndef NO_COMPABILITY
if (compare_no_case(layoutname, "latex") == 0) {
ert_comp.active = true;
+ ert_comp.font = font;
}
#endif
#ifdef USE_CAPTION
} else {
// layout not found
// use default layout "Standard" (0)
+ //lyxerr << "Layout '" << layoutname
+ // << "' was not found!" << endl;
+
par->layout = 0;
++unknown_layouts;
string const s = _("Layout had to be changed from\n")
+ layoutname + _(" to ")
+ textclasslist.NameOfLayout(params.textclass, par->layout);
InsetError * new_inset = new InsetError(s);
- par->insertInset(0, new_inset);
- par->setFont(0, LyXFont(LyXFont::ALL_INHERIT,
- params.language));
+ par->insertInset(0, new_inset,
+ LyXFont(LyXFont::ALL_INHERIT,
+ params.language));
}
// Test whether the layout is obsolete.
LyXLayout const & layout =
#ifndef NO_COMPABILITY
} else if (token == "\\begin_float") {
- insertErtContents(par, pos, font);
- //insertErtContents(par, pos, font, false);
+ insertErtContents(par, pos);
+ //insertErtContents(par, pos, false);
//ert_stack.push(ert_comp);
//ert_comp = ErtComp();
inset->read(this, nylex);
par->insertInset(pos, inset, font);
++pos;
- insertErtContents(par, pos, font);
+ insertErtContents(par, pos);
#endif
} else if (token == "\\begin_deeper") {
++depth;
par->params().startOfAppendix(true);
} else if (token == "\\paragraph_separation") {
int tmpret = lex.findToken(string_paragraph_separation);
- if (tmpret == -1) ++tmpret;
+ 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());
+#ifndef NO_COMPABILITY
} 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);
+#endif
} else if (token == "\\quotes_language") {
int tmpret = lex.findToken(string_quotes_language);
- if (tmpret == -1) ++tmpret;
+ if (tmpret == -1)
+ ++tmpret;
if (tmpret != LYX_LAYOUT_DEFAULT) {
InsetQuotes::quote_language tmpl =
InsetQuotes::EnglishQ;
params.use_numerical_citations = lex.getInteger();
} else if (token == "\\paperorientation") {
int tmpret = lex.findToken(string_orientation);
- if (tmpret == -1) ++tmpret;
+ if (tmpret == -1)
+ ++tmpret;
if (tmpret != LYX_LAYOUT_DEFAULT)
params.orientation = static_cast<BufferParams::PAPER_ORIENTATION>(tmpret);
} else if (token == "\\paperwidth") {
//how can I put it back?
}
} else if (token == "\\bulletLaTeX") {
+ // The bullet class should be able to read this.
lex.nextToken();
int const index = lex.getInteger();
lex.next();
lex.next();
temp_str = lex.getString();
}
+
params.user_defined_bullets[index].setText(sum_str);
params.temp_bullets[index].setText(sum_str);
} else if (token == "\\secnumdepth") {
string const tok = lex.getString();
if (tok == "no_latex") {
// Do the insetert.
- insertErtContents(par, pos, font);
+ insertErtContents(par, pos);
} else if (tok == "latex") {
ert_comp.active = true;
+ ert_comp.font = font;
} else if (tok == "default") {
// Do the insetert.
- insertErtContents(par, pos, font);
+ insertErtContents(par, pos);
} else {
lex.printError("Unknown LaTeX font flag "
"`$$Token'");
}
} else if (token == "\\added_space_top") {
lex.nextToken();
- par->params().spaceTop(VSpace(lex.getString()));
+ VSpace value = VSpace(lex.getString());
+ if ((value.length().len().value() != 0) ||
+ (value.kind() != VSpace::LENGTH))
+ par->params().spaceTop(value);
} else if (token == "\\added_space_bottom") {
lex.nextToken();
- par->params().spaceBottom(VSpace(lex.getString()));
+ VSpace value = VSpace(lex.getString());
+ if ((value.length().len().value() != 0) ||
+ (value.kind() != VSpace::LENGTH))
+ par->params().spaceBottom(value);
#ifndef NO_COMPABILITY
#ifndef NO_PEXTRA_REALLY
} else if (token == "\\pextra_type") {
// the inset isn't it? Lgb.
} else if (token == "\\begin_inset") {
#ifndef NO_COMPABILITY
- insertErtContents(par, pos, font, false);
+ insertErtContents(par, pos, false);
ert_stack.push(ert_comp);
ert_comp = ErtComp();
#endif
#ifndef NO_COMPABILITY
ert_comp = ert_stack.top();
ert_stack.pop();
- insertErtContents(par, pos, font);
+ insertErtContents(par, pos);
#endif
} else if (token == "\\SpecialChar") {
LyXLayout const & layout =
// Since we cannot know it this is only a regular
// newline or a tabular cell delimter we have to
// handle the ERT here.
- insertErtContents(par, pos, font, false);
+ insertErtContents(par, pos, false);
par->insertChar(pos, Paragraph::META_NEWLINE, font);
++pos;
#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);
+ insertErtContents(par, pos);
#endif
the_end_read = true;
#ifndef NO_COMPABILITY
+ " " + lex.text() + "\n";
InsetError * new_inset = new InsetError(s);
- par->insertInset(pos, new_inset);
- par->setFont(pos, LyXFont(LyXFont::ALL_INHERIT,
- params.language));
+ par->insertInset(pos, new_inset, LyXFont(LyXFont::ALL_INHERIT,
+ params.language));
#ifndef NO_COMPABILITY
}
#ifndef NO_PEXTRA_REALLY
// I wonder if we could use this blanket fix for all the
// checkminipage cases...
- if (par && par->size()) {
+ // don't forget about ert paragraphs and compatibility read for'em
+ if (par && (par->size() || !ert_comp.contents.empty())) {
// It is possible that this will check to often,
// but that should not be an correctness issue.
// Only a speed issue.
//
// BEGIN pextra_minipage compability
// This should be removed in 1.3.x (Lgb)
+ // I don't think we should remove this so fast (Jug)
// This compability code is not perfect. In a couple
// of rand cases it fails. When the minipage par is
}
InsetMinipage * mini = new InsetMinipage;
mini->pos(static_cast<InsetMinipage::Position>(par->params().pextraAlignment()));
- mini->width(par->params().pextraWidth());
+ mini->pageWidth(LyXLength(par->params().pextraWidth()));
if (!par->params().pextraWidthp().empty()) {
- lyxerr << "WP:" << mini->width() << endl;
- mini->width(tostr(par->params().pextraWidthp())+"%");
+ lyxerr << "WP:" << mini->pageWidth().asString() << endl;
+ mini->pageWidth(LyXLength((par->params().pextraWidthp())+"%"));
}
+ Paragraph * op = mini->firstParagraph();
mini->inset.paragraph(par);
+ //
+ // and free the old ones!
+ //
+ while(op) {
+ Paragraph * pp = op->next();
+ delete op;
+ op = pp;
+ }
// Insert the minipage last in the
// previous paragraph.
if (par->params().pextraHfill()) {
tmp = tmp->next();
}
depth = parBeforeMinipage->params().depth();
+ // and set this depth on the par as it has not been set already
+ par->params().depth(depth);
minipar = parBeforeMinipage = 0;
} else if (!minipar &&
(par->params().pextraType() == Paragraph::PEXTRA_MINIPAGE))
InsetMinipage * mini = new InsetMinipage;
mini->pos(static_cast<InsetMinipage::Position>(minipar->params().pextraAlignment()));
- mini->width(minipar->params().pextraWidth());
+ mini->pageWidth(LyXLength(minipar->params().pextraWidth()));
if (!par->params().pextraWidthp().empty()) {
- lyxerr << "WP:" << mini->width() << endl;
- mini->width(tostr(par->params().pextraWidthp())+"%");
+ lyxerr << "WP:" << mini->pageWidth().asString() << endl;
+ mini->pageWidth(LyXLength((par->params().pextraWidthp())+"%"));
}
mini->inset.paragraph(minipar);
} else if (tmptok == "Formula") {
inset = new InsetFormula;
} else if (tmptok == "Figure") { // Backward compatibility
- inset = new InsetFig(100, 100, *this);
- //inset = new InsetGraphics;
+// inset = new InsetFig(100, 100, *this);
+ inset = new InsetGraphics;
} else if (tmptok == "Graphics") {
inset = new InsetGraphics;
} else if (tmptok == "Info") {// backwards compatibility
} else if (tmptok == "Note") {
inset = new InsetNote;
} else if (tmptok == "Include") {
- InsetCommandParams p( "Include" );
+ InsetCommandParams p("Include");
inset = new InsetInclude(p, *this);
} else if (tmptok == "ERT") {
inset = new InsetERT;
// warnings, only cerr.
// Needed for autosave in background or panic save (Matthias 120496)
- if (read_only && (fname == filename)) {
+ if (read_only && (fname == fileName())) {
// Here we should come with a question if we should
// perform the write anyway.
if (flag)
string const Buffer::asciiParagraph(Paragraph const * par,
- unsigned int linelen) const
+ unsigned int linelen,
+ bool noparbreak) const
{
ostringstream buffer;
+ ostringstream word;
Paragraph::depth_type depth = 0;
int ltype = 0;
Paragraph::depth_type ltype_depth = 0;
string::size_type currlinelen = 0;
bool ref_printed = false;
-
- int noparbreak = 0;
- int islatex = 0;
- if (!par->previous()) {
- // begins or ends a deeper area ?
- if (depth != par->params().depth()) {
- if (par->params().depth() > depth) {
- while (par->params().depth() > depth) {
- ++depth;
- }
- } else {
- while (par->params().depth() < depth) {
- --depth;
- }
+// if (!par->previous()) {
+#if 0
+ // begins or ends a deeper area ?
+ if (depth != par->params().depth()) {
+ if (par->params().depth() > depth) {
+ while (par->params().depth() > depth) {
+ ++depth;
}
- }
-
- // First write the layout
- string const tmp = textclasslist.NameOfLayout(params.textclass, par->layout);
- if (tmp == "Itemize") {
- ltype = 1;
- ltype_depth = depth + 1;
- } else if (tmp == "Enumerate") {
- ltype = 2;
- ltype_depth = depth + 1;
- } else if (contains(tmp, "ection")) {
- ltype = 3;
- ltype_depth = depth + 1;
- } else if (contains(tmp, "aragraph")) {
- ltype = 4;
- ltype_depth = depth + 1;
- } else if (tmp == "Description") {
- ltype = 5;
- ltype_depth = depth + 1;
- } else if (tmp == "Abstract") {
- ltype = 6;
- ltype_depth = 0;
- } else if (tmp == "Bibliography") {
- ltype = 7;
- ltype_depth = 0;
} else {
- ltype = 0;
- ltype_depth = 0;
+ while (par->params().depth() < depth) {
+ --depth;
+ }
}
+ }
+#else
+ depth = par->params().depth();
+#endif
- /* maybe some vertical spaces */
+ // First write the layout
+ string const tmp = textclasslist.NameOfLayout(params.textclass, par->layout);
+ if (tmp == "Itemize") {
+ ltype = 1;
+ ltype_depth = depth + 1;
+ } else if (tmp == "Enumerate") {
+ ltype = 2;
+ ltype_depth = depth + 1;
+ } else if (contains(tmp, "ection")) {
+ ltype = 3;
+ ltype_depth = depth + 1;
+ } else if (contains(tmp, "aragraph")) {
+ ltype = 4;
+ ltype_depth = depth + 1;
+ } else if (tmp == "Description") {
+ ltype = 5;
+ ltype_depth = depth + 1;
+ } else if (tmp == "Abstract") {
+ ltype = 6;
+ ltype_depth = 0;
+ } else if (tmp == "Bibliography") {
+ ltype = 7;
+ ltype_depth = 0;
+ } else {
+ ltype = 0;
+ ltype_depth = 0;
+ }
- /* the labelwidthstring used in lists */
+ /* maybe some vertical spaces */
- /* some lines? */
+ /* the labelwidthstring used in lists */
- /* some pagebreaks? */
+ /* some lines? */
- /* noindent ? */
+ /* some pagebreaks? */
- /* what about the alignment */
- } else {
- lyxerr << "Should this ever happen?" << endl;
- }
-
- for (pos_type i = 0; i < par->size(); ++i) {
- if (!i && !noparbreak) {
+ /* noindent ? */
+
+ /* what about the alignment */
+// } else {
+// lyxerr << "Should this ever happen?" << endl;
+// }
+
+ // linelen <= 0 is special and means we don't have pargraph breaks
+ if (!noparbreak) {
+ if (linelen > 0)
+ buffer << "\n\n";
+ for (Paragraph::depth_type j = 0; j < depth; ++j)
+ buffer << " ";
+ currlinelen = depth * 2;
+ //--
+ // we should probably change to the paragraph language in the
+ // gettext here (if possible) so that strings are outputted in
+ // the correct language! (20012712 Jug)
+ //--
+ switch (ltype) {
+ case 0: // Standard
+ case 4: // (Sub)Paragraph
+ case 5: // Description
+ break;
+ case 6: // Abstract
if (linelen > 0)
- buffer << "\n\n";
- for (Paragraph::depth_type j = 0; j < depth; ++j)
- buffer << " ";
- currlinelen = depth * 2;
- switch (ltype) {
- case 0: // Standard
- case 4: // (Sub)Paragraph
- case 5: // Description
- break;
- case 6: // Abstract
+ buffer << _("Abstract") << "\n\n";
+ else
+ buffer << _("Abstract: ");
+ break;
+ case 7: // Bibliography
+ if (!ref_printed) {
if (linelen > 0)
- buffer << "Abstract\n\n";
+ buffer << _("References") << "\n\n";
else
- buffer << "Abstract: ";
- break;
- case 7: // Bibliography
- if (!ref_printed) {
- if (linelen > 0)
- buffer << "References\n\n";
- else
- buffer << "References: ";
- ref_printed = true;
- }
- break;
- default:
- buffer << par->params().labelString() << " ";
- break;
+ buffer << _("References: ");
+ ref_printed = true;
}
- if (ltype_depth > depth) {
- for (Paragraph::depth_type j = ltype_depth - 1;
- j > depth; --j)
- buffer << " ";
- currlinelen += (ltype_depth-depth)*2;
+ break;
+ default:
+ buffer << par->params().labelString() << " ";
+ break;
+ }
+ }
+ string s = buffer.str();
+ if (s.rfind('\n') != string::npos) {
+ string dummy;
+ s = rsplit(buffer.str().c_str(), dummy, '\n');
+ }
+ currlinelen = s.length();
+ if (!currlinelen) {
+ for (Paragraph::depth_type j = 0; j < depth; ++j)
+ buffer << " ";
+ currlinelen = depth * 2;
+ if (ltype_depth > depth) {
+ for (Paragraph::depth_type j = ltype_depth;
+ j > depth; --j)
+ {
+ buffer << " ";
}
+ currlinelen += (ltype_depth-depth)*2;
}
-
+ }
+ // this is to change the linebreak to do it by word a bit more intelligent
+ // hopefully! (only in the case where we have a max linelenght!) (Jug)
+ for (pos_type i = 0; i < par->size(); ++i) {
char c = par->getUChar(params, i);
- if (islatex)
- continue;
switch (c) {
case Paragraph::META_INSET:
{
Inset const * inset = par->getInset(i);
if (inset) {
- if (!inset->ascii(this, buffer)) {
+ if (linelen > 0) {
+ buffer << word.str();
+ word.str("");
+ }
+ if (inset->ascii(this, buffer, linelen)) {
+ // to be sure it breaks paragraph
+ currlinelen += linelen;
+ }
+#if 0
+ else {
string dummy;
string const s =
rsplit(buffer.str().c_str(),
dummy, '\n');
- currlinelen += s.length();
- } else {
- // to be sure it breaks paragraph
- currlinelen += linelen;
+ currlinelen = s.length();
}
+#endif
}
}
break;
case Paragraph::META_NEWLINE:
if (linelen > 0) {
- buffer << "\n";
+ buffer << word.str() << "\n";
+ word.str("");
for (Paragraph::depth_type j = 0;
j < depth; ++j)
buffer << " ";
- }
- currlinelen = depth * 2;
- if (ltype_depth > depth) {
- for (Paragraph::depth_type j = ltype_depth;
- j > depth; --j)
- buffer << " ";
- currlinelen += (ltype_depth - depth) * 2;
+ currlinelen = depth * 2;
+ if (ltype_depth > depth) {
+ for (Paragraph::depth_type j = ltype_depth;
+ j > depth; --j)
+ buffer << " ";
+ currlinelen += (ltype_depth - depth) * 2;
+ }
}
break;
- case Paragraph::META_HFILL:
- buffer << "\t";
+ case Paragraph::META_HFILL:
+ buffer << word.str() << "\t";
+ currlinelen += word.str().length() + 1;
+ word.str("");
break;
default:
- if ((linelen > 0) && (currlinelen > (linelen - 10)) &&
- (c == ' ') && ((i + 2) < par->size()))
- {
- buffer << "\n";
- for (Paragraph::depth_type j = 0;
- j < depth; ++j)
- buffer << " ";
- currlinelen = depth * 2;
- if (ltype_depth > depth) {
- for (Paragraph::depth_type j = ltype_depth;
- j > depth; --j)
+ if (c == ' ') {
+ buffer << word.str() << ' ';
+ currlinelen += word.str().length() + 1;
+ word.str("");
+ } else {
+ if (c != '\0') {
+ word << c;
+ } else {
+ lyxerr[Debug::INFO] <<
+ "writeAsciiFile: NULL char in structure." << endl;
+ }
+ if ((linelen > 0) &&
+ (currlinelen+word.str().length()) > linelen)
+ {
+ buffer << "\n";
+ for (Paragraph::depth_type j = 0; j < depth; ++j)
buffer << " ";
- currlinelen += (ltype_depth-depth)*2;
+ currlinelen = depth * 2;
+ if (ltype_depth > depth) {
+ for (Paragraph::depth_type j = ltype_depth;
+ j > depth; --j)
+ {
+ buffer << " ";
+ }
+ currlinelen += (ltype_depth-depth)*2;
+ }
}
- } else if (c != '\0') {
- buffer << c;
- ++currlinelen;
- } else
- lyxerr[Debug::INFO] << "writeAsciiFile: NULL char in structure." << endl;
+ }
break;
}
}
+ buffer << word.str();
return buffer.str().c_str();
}
{
Paragraph * par = paragraph;
while (par) {
- ofs << asciiParagraph(par, linelen);
+ ofs << asciiParagraph(par, linelen, par->previous() == 0);
par = par->next();
}
ofs << "\n";
}
+
bool use_babel;
+
void Buffer::makeLaTeXFile(string const & fname,
string const & original_path,
bool nice, bool only_body)
// original_path is set. This is done for usual tex-file, but not
// for nice-latex-file. (Matthias 250696)
if (!only_body) {
- if (!nice){
+ if (!nice) {
// code for usual, NOT nice-latex-file
ofs << "\\batchmode\n"; // changed
// from \nonstopmode
}
string strOptions(options.str().c_str());
- if (!strOptions.empty()){
+ if (!strOptions.empty()) {
strOptions = strip(strOptions, ',');
ofs << '[' << strOptions << ']';
}
texrow.newline();
}
- 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") {
if (!bullets_def.empty())
preamble += bullets_def + "}\n\n";
- for (int j = countChar(preamble, '\n'); j-- ;) {
+ int const nlines =
+ int(lyx::count(preamble.begin(), preamble.end(), '\n'));
+ for (int j = 0; j != nlines; ++j) {
texrow.newline();
}
}
lyxerr[Debug::INFO] << "Finished making latex file." << endl;
+ lyxerr[Debug::INFO] << "Row count was " << texrow.rows()-1 << "." << endl;
}
// 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) const
{
bool was_title = false;
bool already_title = false;
// if only_body
while (par != endpar) {
- LyXLayout const & layout =
- textclasslist.Style(params.textclass,
- par->layout);
-
- if (layout.intitle) {
- if (already_title) {
- lyxerr <<"Error in latexParagraphs: You"
- " should not mix title layouts"
- " with normal ones." << endl;
- } else
- was_title = true;
- } else if (was_title && !already_title) {
- ofs << "\\maketitle\n";
- texrow.newline();
- already_title = true;
- was_title = false;
- }
-
- if (layout.isEnvironment()) {
- par = par->TeXEnvironment(this, params, ofs, texrow);
+ Inset * in = par->inInset();
+ // well we have to check if we are in an inset with unlimited
+ // lenght (all in one row) if that is true then we don't allow
+ // any special options in the paragraph and also we don't allow
+ // any environment other then "Standard" to be valid!
+ if ((in == 0) || !in->forceDefaultParagraphs(in)) {
+ LyXLayout const & layout =
+ textclasslist.Style(params.textclass, par->layout);
+
+ if (layout.intitle) {
+ if (already_title) {
+ lyxerr <<"Error in latexParagraphs: You"
+ " should not mix title layouts"
+ " with normal ones." << endl;
+ } else
+ was_title = true;
+ } else if (was_title && !already_title) {
+ ofs << "\\maketitle\n";
+ texrow.newline();
+ already_title = true;
+ was_title = false;
+ }
+
+ if (layout.isEnvironment()) {
+ par = par->TeXEnvironment(this, params, ofs, texrow);
+ } else {
+ par = par->TeXOnePar(this, params, ofs, texrow, false);
+ }
} else {
par = par->TeXOnePar(this, params, ofs, texrow, false);
}
if (par->isInset(0)) {
Inset * inset = par->getInset(0);
Inset::Code lyx_code = inset->lyxCode();
- if (lyx_code == Inset::TOC_CODE){
+ if (lyx_code == Inset::TOC_CODE) {
string const temp = "toc";
sgmlOpenTag(ofs, depth, temp);
_("Error : Wrong depth for"
" LatexType Command.\n"));
- if (!environment_stack[depth].empty()){
+ if (!environment_stack[depth].empty()) {
sgmlCloseTag(ofs, depth,
environment_stack[depth]);
ofs << "</p>";
inline
void reset(PAR_TAG & p1, PAR_TAG const & p2)
{
- p1 = static_cast<PAR_TAG>( p1 & ~p2);
+ p1 = static_cast<PAR_TAG>(p1 & ~p2);
}
} // namespace anon
}
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) << ">";
{
// insert an error marker in text
InsetError * new_inset = new InsetError(message);
- par->insertInset(pos, new_inset);
- par->setFont(pos, LyXFont(LyXFont::ALL_INHERIT, params.language));
+ par->insertInset(pos, new_inset, LyXFont(LyXFont::ALL_INHERIT,
+ params.language));
}
// treat label as a special case for
// more WYSIWYM handling.
+ // 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){
+ if (lyx_code == Inset::LABEL_CODE) {
command_name += " id=\"";
command_name += (static_cast<InsetCommand *>(inset))->getContents();
command_name += "\"";
}
if (environment_stack[depth] != style.latexname()) {
- if(environment_stack.size() == depth + 1) {
+ if (environment_stack.size() == depth + 1) {
environment_stack.push_back("!-- --");
environment_inner.push_back("!-- --");
}
if (style.latextype == LATEX_ENVIRONMENT) {
if (!style.latexparam().empty()) {
- if(style.latexparam() == "CDATA")
+ if (style.latexparam() == "CDATA")
ofs << "<![CDATA[";
else
sgmlOpenTag(ofs, depth + command_depth,
break;
case LATEX_ENVIRONMENT:
if (!style.latexparam().empty()) {
- if(style.latexparam() == "CDATA")
+ if (style.latexparam() == "CDATA")
ofs << "]]>";
else
sgmlCloseTag(ofs, depth + command_depth,
if (font.emph() == LyXFont::ON) {
os << "<emphasis>";
emph_flag = true;
- }else if(i) {
+ } else if (i) {
os << "</emphasis>";
emph_flag = false;
}
}
- char c = par->getChar(i);
- if (c == Paragraph::META_INSET) {
+ if (par->isInset(i)) {
Inset * inset = par->getInset(i);
- inset->docbook(this, os);
+ // don't print the inset in position 0 if desc_on == 3 (label)
+ if ( i || desc_on != 3) {
+ if(style.latexparam() == "CDATA")
+ os << "]]>";
+ inset->docbook(this, os);
+ if(style.latexparam() == "CDATA")
+ os << "<![CDATA[";
+ }
} else {
+ char c = par->getChar(i);
string sgml_string;
par->sgmlConvertChar(c, sgml_string);
if (style.pass_thru) {
os << c;
- } else if(style.free_spacing || par->isFreeSpacing() || c != ' ') {
+ } else if (style.free_spacing || par->isFreeSpacing() || c != ' ') {
os << sgml_string;
} else if (desc_on ==1) {
++char_line_count;
// <term> not closed...
os << "</term>";
}
- if(style.free_spacing) os << '\n';
+ if (style.free_spacing) os << '\n';
}
// get LaTeX-Filename
string const name = getLatexName();
- string path = OnlyPath(filename);
+ string path = filePath();
string const org_path = path;
if (lyxrc.use_tempdir || !IsDirWriteable(path)) {
makeLaTeXFile(name, org_path, false);
TeXErrors terr;
- Chktex chktex(lyxrc.chktex_command, name, filepath);
+ Chktex chktex(lyxrc.chktex_command, name, filePath());
int res = chktex.run(terr); // run chktex
if (res == -1) {
// if we removed error insets before we ran chktex or if we inserted
// error insets after we ran chktex, this must be run:
- if (removedErrorInsets || res){
+ if (removedErrorInsets || res) {
users->redraw();
users->fitCursor();
}
// AMS Style is at document level
if (params.use_amsmath || tclass.provides(LyXTextClass::amsmath))
- features.require("amsstyle");
+ features.require("amsmath");
while (par) {
// We don't use "lyxerr.debug" because of speed. (Asger)