#include "support/filetools.h"
#include "support/path.h"
#include "LaTeX.h"
-#include "Literate.h"
#include "Chktex.h"
#include "LyXView.h"
#include "debug.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 "encoding.h"
#include "exporter.h"
+#include "Lsstream.h"
using std::ostream;
using std::ofstream;
using std::vector;
using std::max;
using std::set;
-using std::istringstream;
// all these externs should eventually be removed.
extern BufferList bufferlist;
if (read_only != flag) {
read_only = flag;
updateTitles();
- users->owner()->getDialogs()->updateBufferDependent();
+ users->owner()->getDialogs()->updateBufferDependent(false);
}
if (read_only) {
WarnReadonly(filename);
}
-void Buffer::fileName(string const & newfile)
+void Buffer::setFileName(string const & newfile)
{
filename = MakeAbsPath(newfile);
filepath = OnlyPath(filename);
bool the_end_read = false;
LyXParagraph * return_par = 0;
- LyXFont font(LyXFont::ALL_INHERIT, params.language_info);
- if (format < 2.16 && params.language == "hebrew")
+ LyXFont font(LyXFont::ALL_INHERIT, params.language);
+ if (format < 2.16 && params.language->lang() == "hebrew")
font.setLanguage(default_language);
// If we are inserting, we cheat and get a token in advance
bool has_token = false;
string pretoken;
- if(!par) {
+ if (!par) {
par = new LyXParagraph;
} else {
users->text->BreakParagraph(users);
par->footnotekind = footnotekind;
#endif
par->depth = depth;
- font = LyXFont(LyXFont::ALL_INHERIT, params.language_info);
- if (format < 2.16 && params.language == "hebrew")
+ font = LyXFont(LyXFont::ALL_INHERIT, params.language);
+ if (format < 2.16 && params.language->lang() == "hebrew")
font.setLanguage(default_language);
#ifndef NEW_INSETS
} else if (token == "\\end_float") {
pos = 0;
lex.EatLine();
par->layout = LYX_DUMMY_LAYOUT;
- font = LyXFont(LyXFont::ALL_INHERIT, params.language_info);
- if (format < 2.16 && params.language == "hebrew")
+ font = LyXFont(LyXFont::ALL_INHERIT, params.language);
+ if (format < 2.16 && params.language->lang() == "hebrew")
font.setLanguage(default_language);
} else if (token == "\\begin_float") {
int tmpret = lex.FindToken(string_footnotekinds);
if (tmpret != LYX_LAYOUT_DEFAULT) {
InsetQuotes::quote_language tmpl =
InsetQuotes::EnglishQ;
- switch(tmpret) {
+ switch (tmpret) {
case 0:
tmpl = InsetQuotes::EnglishQ;
break;
}
} else if (token == "\\quotes_times") {
lex.nextToken();
- switch(lex.GetInteger()) {
+ switch (lex.GetInteger()) {
case 1:
params.quotes_times = InsetQuotes::SingleQ;
break;
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 == "\\lang") {
lex.next();
string const tok = lex.GetString();
- Languages::iterator lit = languages.find(tok);
- if (lit != languages.end()) {
- font.setLanguage(&(*lit).second);
+ Language const * lang = languages.getLanguage(tok);
+ if (lang) {
+ font.setLanguage(lang);
} else {
- font.setLanguage(params.language_info);
+ font.setLanguage(params.language);
lex.printError("Unknown language `$$Token'");
}
+ } else if (token == "\\numeric") {
+ lex.next();
+ font.setNumber(font.setLyXMisc(lex.GetString()));
} else if (token == "\\emph") {
lex.next();
font.setEmph(font.setLyXMisc(lex.GetString()));
par->InsertChar(pos, LyXParagraph::META_NEWLINE, font);
++pos;
} else if (token == "\\LyXTable") {
- Inset * inset = new InsetTabular(this);
+ Inset * inset = new InsetTabular(*this);
inset->Read(this, lex);
par->InsertInset(pos, inset, font);
++pos;
"Inserting as text.");
string::const_iterator cit = token.begin();
string::const_iterator end = token.end();
- for(; cit != end; ++cit) {
+ for (; cit != end; ++cit) {
par->InsertChar(pos, (*cit), font);
++pos;
}
<< endl;
}
+ Inset * inset = 0;
+
lex.next();
string const tmptok = lex.GetString();
last_inset_read = tmptok;
+
// test the different insets
- if (tmptok == "Quotes") {
- Inset * inset = new InsetQuotes;
- inset->Read(this, lex);
- par->InsertInset(pos, inset, font);
- ++pos;
- } else if (tmptok == "External") {
- Inset * inset = new InsetExternal;
- inset->Read(this, lex);
- par->InsertInset(pos, inset, font);
- ++pos;
- } else if (tmptok == "FormulaMacro") {
- Inset * inset = new InsetFormulaMacro;
- inset->Read(this, lex);
- par->InsertInset(pos, inset, font);
- ++pos;
- } else if (tmptok == "Formula") {
- Inset * inset = new InsetFormula;
- inset->Read(this, lex);
- par->InsertInset(pos, inset, font);
- ++pos;
- } else if (tmptok == "Figure") {
- Inset * inset = new InsetFig(100, 100, this);
- inset->Read(this, lex);
- par->InsertInset(pos, inset, font);
- ++pos;
- } else if (tmptok == "Info") {
- Inset * inset = new InsetInfo;
- inset->Read(this, lex);
- par->InsertInset(pos, inset, font);
- ++pos;
- } else if (tmptok == "Include") {
- InsetCommandParams p( "Include" );
- Inset * inset = new InsetInclude(p, this);
- inset->Read(this, lex);
- par->InsertInset(pos, inset, font);
- ++pos;
- } else if (tmptok == "ERT") {
- Inset * inset = new InsetERT;
- inset->Read(this, lex);
- par->InsertInset(pos, inset, font);
- ++pos;
- } else if (tmptok == "Tabular") {
- Inset * inset = new InsetTabular(this);
- inset->Read(this, lex);
- par->InsertInset(pos, inset, font);
- ++pos;
- } else if (tmptok == "Text") {
- Inset * inset = new InsetText;
- inset->Read(this, lex);
- par->InsertInset(pos, inset, font);
- ++pos;
- } else if (tmptok == "Foot") {
- Inset * inset = new InsetFoot;
- inset->Read(this, lex);
- par->InsertInset(pos, inset, font);
- ++pos;
- } else if (tmptok == "Marginal") {
- Inset * inset = new InsetMarginal;
- inset->Read(this, lex);
- par->InsertInset(pos, inset, font);
- ++pos;
- } else if (tmptok == "Minipage") {
- Inset * inset = new InsetMinipage;
- inset->Read(this, lex);
- par->InsertInset(pos, inset, font);
- ++pos;
- } else if (tmptok == "Float") {
- lex.next();
- string const tmptok = lex.GetString();
- Inset * inset = new InsetFloat(tmptok);
- inset->Read(this, lex);
- par->InsertInset(pos, inset, font);
- ++pos;
- } else if (tmptok == "List") {
- Inset * inset = new InsetList;
- inset->Read(this, lex);
- par->InsertInset(pos, inset, font);
- ++pos;
- } else if (tmptok == "Theorem") {
- Inset * inset = new InsetList;
- inset->Read(this, lex);
- par->InsertInset(pos, inset, font);
- ++pos;
- } else if (tmptok == "Caption") {
- Inset * inset = new InsetCaption;
- inset->Read(this, lex);
- par->InsertInset(pos, inset, font);
- ++pos;
- } else if (tmptok == "GRAPHICS") {
- Inset * inset = new InsetGraphics;
- inset->Read(this, lex);
- par->InsertInset(pos, inset, font);
- ++pos;
- } else if (tmptok == "LatexCommand") {
+ if (tmptok == "LatexCommand") {
InsetCommandParams inscmd;
inscmd.Read(lex);
- Inset * inset = 0;
+
if (inscmd.getCmdName() == "cite") {
inset = new InsetCitation(inscmd);
} else if (inscmd.getCmdName() == "bibitem") {
lex.printError("Wrong place for bibitem");
inset = new InsetBibKey(inscmd);
} else if (inscmd.getCmdName() == "BibTeX") {
- inset = new InsetBibtex(inscmd, this);
+ inset = new InsetBibtex(inscmd);
} else if (inscmd.getCmdName() == "index") {
inset = new InsetIndex(inscmd);
} else if (inscmd.getCmdName() == "include") {
- inset = new InsetInclude(inscmd, this);
+ inset = new InsetInclude(inscmd, *this);
} else if (inscmd.getCmdName() == "label") {
inset = new InsetLabel(inscmd);
} else if (inscmd.getCmdName() == "url"
|| inscmd.getCmdName() == "prettyref") {
if (!inscmd.getOptions().empty()
|| !inscmd.getContents().empty()) {
- inset = new InsetRef(inscmd);
+ inset = new InsetRef(inscmd, *this);
}
} else if (inscmd.getCmdName() == "tableofcontents"
|| inscmd.getCmdName() == "listofalgorithms"
} else if (inscmd.getCmdName() == "printindex") {
inset = new InsetPrintIndex(inscmd);
} else if (inscmd.getCmdName() == "lyxparent") {
- inset = new InsetParent(inscmd, this);
+ inset = new InsetParent(inscmd, *this);
}
-
- if (inset) {
- par->InsertInset(pos, inset, font);
- ++pos;
+ } else {
+ if (tmptok == "Quotes") {
+ inset = new InsetQuotes;
+ } else if (tmptok == "External") {
+ inset = new InsetExternal;
+ } else if (tmptok == "FormulaMacro") {
+ inset = new InsetFormulaMacro;
+ } else if (tmptok == "Formula") {
+ inset = new InsetFormula;
+ } else if (tmptok == "Figure") {
+ inset = new InsetFig(100, 100, *this);
+ } else if (tmptok == "Info") {
+ inset = new InsetInfo;
+ } else if (tmptok == "Include") {
+ InsetCommandParams p( "Include" );
+ inset = new InsetInclude(p, *this);
+ } else if (tmptok == "ERT") {
+ inset = new InsetERT;
+ } else if (tmptok == "Tabular") {
+ inset = new InsetTabular(*this);
+ } else if (tmptok == "Text") {
+ inset = new InsetText;
+ } else if (tmptok == "Foot") {
+ inset = new InsetFoot;
+ } else if (tmptok == "Marginal") {
+ inset = new InsetMarginal;
+ } else if (tmptok == "Minipage") {
+ inset = new InsetMinipage;
+ } else if (tmptok == "Float") {
+ lex.next();
+ string tmptok = lex.GetString();
+ inset = new InsetFloat(tmptok);
+ } else if (tmptok == "List") {
+ inset = new InsetList;
+ } else if (tmptok == "Theorem") {
+ inset = new InsetList;
+ } else if (tmptok == "Caption") {
+ inset = new InsetCaption;
+ } else if (tmptok == "GRAPHICS") {
+ inset = new InsetGraphics;
}
+
+ if (inset) inset->Read(this, lex);
+ }
+
+ if (inset) {
+ par->InsertInset(pos, inset, font);
+ ++pos;
}
}
if (token == "\\lyxformat") { // the first token _must_ be...
lex.EatLine();
format = lex.GetFloat();
- if (format > 1) {
+ if (format > 1.0) {
if (LYX_FORMAT - format > 0.05) {
-
- printf(_("Warning: need lyxformat %.2f but found %.2f\n"),
- LYX_FORMAT, format);
+ lyxerr << fmt(_("Warning: need lyxformat %.2f but found %.2f"),
+ LYX_FORMAT, format) << endl;
}
if (format - LYX_FORMAT > 0.05) {
- printf(_("ERROR: need lyxformat %.2f but found %.2f\n"),
- LYX_FORMAT, format);
+ lyxerr << fmt(_("ERROR: need lyxformat %.2f but found %.2f"),
+ LYX_FORMAT, format) << endl;
}
bool the_end = readLyXformat2(lex, par);
// Formats >= 2.13 support "\the_end" marker
// We simulate a safe reading anyways to allow
// users to take the chance... (Asger)
return true;
- } // format < 1
+ } // format < 1.0
else {
WriteAlert(_("ERROR!"),
_("Old LyX file format found. "
// Write marker that shows file is complete
ofs << "\n\\the_end" << endl;
+
ofs.close();
+
// how to check if close went ok?
- return true;
+ // Following is an attempt... (BE 20001011)
+
+ // good() returns false if any error occured, including some
+ // formatting error.
+ // bad() returns true if something bad happened in the buffer,
+ // which should include file system full errors.
+
+ bool status = true;
+ if (!ofs.good()) {
+ status = false;
+#if 0
+ if (ofs.bad()) {
+ lyxerr << "Buffer::writeFile: BAD ERROR!" << endl;
+ } else {
+ lyxerr << "Buffer::writeFile: NOT SO BAD ERROR!"
+ << endl;
+ }
+#endif
+ }
+
+ return status;
}
+#if 0
void Buffer::writeFileAscii(string const & fname, int linelen)
{
Inset * inset;
int actcell = 0;
int actpos = 0;
int currlinelen = 0;
- long fpos = 0;
+ int fpos = 0;
bool ref_printed = false;
ofstream ofs(fname.c_str());
return;
}
- string const fname1 = TmpFileName();
+ string const fname1 = lyx::tempName(); //TmpFileName();
LyXParagraph * par = paragraph;
while (par) {
int noparbreak = 0;
}
LyXFont font1 =
- LyXFont(LyXFont::ALL_INHERIT, params.language_info);
+ LyXFont(LyXFont::ALL_INHERIT, params.language);
actcell = 0;
for (i = 0, actpos = 1; i < par->size(); ++i, ++actpos) {
if (!i && !footnoteflag && !noparbreak){
ofs << "\n\n";
- for(j = 0; j < depth; ++j)
+ for (j = 0; j < depth; ++j)
ofs << " ";
currlinelen = depth * 2;
- switch(ltype) {
+ switch (ltype) {
case 0: /* Standard */
case 4: /* (Sub)Paragraph */
case 5: /* Description */
break;
}
if (ltype_depth > depth) {
- for(j = ltype_depth - 1; j > depth; --j)
+ for (j = ltype_depth - 1; j > depth; --j)
ofs << " ";
currlinelen += (ltype_depth-depth)*2;
}
break;
case LyXParagraph::META_NEWLINE:
ofs << "\n";
- for(j = 0; j < depth; ++j)
+ for (j = 0; j < depth; ++j)
ofs << " ";
currlinelen = depth * 2;
if (ltype_depth > depth) {
- for(j = ltype_depth;
+ for (j = ltype_depth;
j > depth; --j)
ofs << " ";
currlinelen += (ltype_depth - depth) * 2;
if (currlinelen > linelen - 10
&& c == ' ' && i + 2 < par->size()) {
ofs << "\n";
- for(j = 0; j < depth; ++j)
+ for (j = 0; j < depth; ++j)
ofs << " ";
currlinelen = depth * 2;
if (ltype_depth > depth) {
- for(j = ltype_depth;
+ for (j = ltype_depth;
j > depth; --j)
ofs << " ";
currlinelen += (ltype_depth-depth)*2;
ofs << "\n";
}
+//----------------------------------------------------------------------------
+#else
+//----------------------------------------------------------------------------
+string const Buffer::asciiParagraph(LyXParagraph const * par,
+ unsigned int linelen) const
+{
+ ostringstream buffer;
+ LyXFont font1;
+ LyXFont font2;
+ Inset const * inset;
+ char c;
+ LyXParagraph::footnote_flag footnoteflag = LyXParagraph::NO_FOOTNOTE;
+ char depth = 0;
+ int ltype = 0;
+ int ltype_depth = 0;
+ unsigned int currlinelen = 0;
+ bool ref_printed = false;
+ int noparbreak = 0;
+ int islatex = 0;
+ if (
+#ifndef NEW_INSETS
+ par->footnoteflag != LyXParagraph::NO_FOOTNOTE ||
+#endif
+ !par->previous
+#ifndef NEW_INSETS
+ || par->previous->footnoteflag == LyXParagraph::NO_FOOTNOTE
+#endif
+ ){
+#ifndef NEW_INSETS
+ /* begins a footnote environment ? */
+ if (footnoteflag != par->footnoteflag) {
+ footnoteflag = par->footnoteflag;
+ if (footnoteflag) {
+ size_t const j = strlen(string_footnotekinds[par->footnotekind]) + 4;
+ if ((linelen > 0) &&
+ ((currlinelen + j) > linelen)) {
+ buffer << "\n";
+ currlinelen = 0;
+ }
+ buffer << "(["
+ << string_footnotekinds[par->footnotekind]
+ << "] ";
+ currlinelen += j;
+ }
+ }
+#endif
+ /* begins or ends a deeper area ?*/
+ if (depth != par->depth) {
+ if (par->depth > depth) {
+ while (par->depth > depth) {
+ ++depth;
+ }
+ }
+ else {
+ while (par->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 (strstr(tmp.c_str(), "ection")) {
+ ltype = 3;
+ ltype_depth = depth+1;
+ } else if (strstr(tmp.c_str(), "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;
+ }
+
+ /* maybe some vertical spaces */
+
+ /* the labelwidthstring used in lists */
+
+ /* some lines? */
+
+ /* some pagebreaks? */
+
+ /* noindent ? */
+
+ /* what about the alignment */
+ } else {
+#ifndef NEW_INSETS
+ /* dummy layout, that means a footnote ended */
+ footnoteflag = LyXParagraph::NO_FOOTNOTE;
+ buffer << ") ";
+ noparbreak = 1;
+#else
+ lyxerr << "Should this ever happen?" << endl;
+#endif
+ }
+
+ font1 = LyXFont(LyXFont::ALL_INHERIT, params.language);
+ for (LyXParagraph::size_type i = 0; i < par->size(); ++i) {
+ if (!i && !footnoteflag && !noparbreak){
+ if (linelen > 0)
+ buffer << "\n\n";
+ for (char 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 */
+ if (linelen > 0)
+ buffer << "Abstract\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->labelstring << " ";
+ break;
+ }
+ if (ltype_depth > depth) {
+ for (char j = ltype_depth - 1; j > depth; --j)
+ buffer << " ";
+ currlinelen += (ltype_depth-depth)*2;
+ }
+ }
+ font2 = par->GetFontSettings(params, i);
+ if (font1.latex() != font2.latex()) {
+ if (font2.latex() == LyXFont::OFF)
+ islatex = 0;
+ else
+ islatex = 1;
+ } else {
+ islatex = 0;
+ }
+ c = par->GetChar(i);
+ if (islatex)
+ continue;
+ switch (c) {
+ case LyXParagraph::META_INSET:
+ if ((inset = par->GetInset(i))) {
+ if (!inset->Ascii(this, buffer)) {
+ string dummy;
+ string s = rsplit(buffer.str().c_str(),
+ dummy, '\n');
+ currlinelen += s.length();
+ } else {
+ // to be sure it breaks paragraph
+ currlinelen += linelen;
+ }
+ }
+ break;
+ case LyXParagraph::META_NEWLINE:
+ if (linelen > 0) {
+ buffer << "\n";
+ for (char j = 0; j < depth; ++j)
+ buffer << " ";
+ }
+ currlinelen = depth * 2;
+ if (ltype_depth > depth) {
+ for (char j = ltype_depth;
+ j > depth; --j)
+ buffer << " ";
+ currlinelen += (ltype_depth - depth) * 2;
+ }
+ break;
+ case LyXParagraph::META_HFILL:
+ buffer << "\t";
+ break;
+ case '\\':
+ buffer << "\\";
+ break;
+ default:
+ if ((linelen > 0) && (currlinelen > (linelen - 10)) &&
+ (c == ' ') && ((i + 2) < par->size()))
+ {
+ buffer << "\n";
+ for (char j = 0; j < depth; ++j)
+ buffer << " ";
+ currlinelen = depth * 2;
+ if (ltype_depth > depth) {
+ for (char j = ltype_depth;
+ j > depth; --j)
+ buffer << " ";
+ currlinelen += (ltype_depth-depth)*2;
+ }
+ } else if (c != '\0')
+ buffer << c;
+ else if (c == '\0')
+ lyxerr.debug() << "writeAsciiFile: NULL char in structure." << endl;
+ ++currlinelen;
+ break;
+ }
+ }
+ return buffer.str().c_str();
+}
+
+
+void Buffer::writeFileAscii(string const & fname, int linelen)
+{
+ ofstream ofs(fname.c_str());
+ if (!ofs) {
+ WriteFSAlert(_("Error: Cannot write file:"), fname);
+ return;
+ }
+ writeFileAscii(ofs, linelen);
+}
+
+
+void Buffer::writeFileAscii(ostream & ofs, int linelen)
+{
+ LyXParagraph * par = paragraph;
+ while (par) {
+ ofs << asciiParagraph(par, linelen);
+ par = par->next;
+ }
+ ofs << "\n";
+}
+#endif
void Buffer::makeLaTeXFile(string const & fname,
string const & original_path,
// language should be a parameter to \documentclass
bool use_babel = false;
- if (params.language_info->lang() == "hebrew") // This seems necessary
+ if (params.language->babel() == "hebrew") // This seems necessary
features.UsedLanguages.insert(default_language);
- if (params.language != "default" ||
- !features.UsedLanguages.empty() ) {
+#ifdef DO_USE_DEFAULT_LANGUAGE
+ if (params.language->lang() != "default" ||
+ !features.UsedLanguages.empty()) {
+#endif
use_babel = true;
for (LaTeXFeatures::LanguageList::const_iterator cit =
features.UsedLanguages.begin();
cit != features.UsedLanguages.end(); ++cit)
- options += (*cit)->lang() + ",";
- options += params.language_info->lang() + ',';
+ options += (*cit)->babel() + ",";
+ options += params.language->babel() + ',';
+#ifdef DO_USE_DEFAULT_LANGUAGE
}
+#endif
// the user-defined options
if (!params.options.empty()) {
if (params.inputenc == "auto") {
string const doc_encoding =
- params.language_info->encoding()->LatexName();
+ params.language->encoding()->LatexName();
// Create a list with all the input encodings used
// in the document
encodings.insert((*it)->encoding()->LatexName());
ofs << "\\usepackage[";
- for (set<string>::const_iterator it = encodings.begin();
- it != encodings.end(); ++it)
- ofs << *it << ",";
+ std::copy(encodings.begin(), encodings.end(),
+ std::ostream_iterator<string>(ofs, ","));
ofs << doc_encoding << "]{inputenc}\n";
texrow.newline();
} else if (params.inputenc != "default") {
texrow.newline();
} // only_body
lyxerr.debug() << "preamble finished, now the body." << endl;
- if (!lyxrc.language_auto_begin && params.language != "default") {
+#ifdef DO_USE_DEFAULT_LANGUAGE
+ if (!lyxrc.language_auto_begin && params.language->lang() != "default") {
+#else
+ if (!lyxrc.language_auto_begin) {
+#endif
ofs << subst(lyxrc.language_command_begin, "$$lang",
- params.language)
+ params.language->babel())
<< endl;
texrow.newline();
}
ofs << endl;
texrow.newline();
- if (!lyxrc.language_auto_end && params.language != "default") {
+#ifdef DO_USE_DEFAULT_LANGUAGE
+ if (!lyxrc.language_auto_end && params.language->lang() != "default") {
+#else
+ if (!lyxrc.language_auto_end) {
+#endif
ofs << subst(lyxrc.language_command_end, "$$lang",
- params.language)
+ params.language->babel())
<< endl;
texrow.newline();
}
LaTeXFeatures features(params, tclass.numLayouts());
validate(features);
- //if(nice)
+ //if (nice)
tex_code_break_column = lyxrc.ascii_linelen;
//else
//tex_code_break_column = 0;
<< params.preamble << sgml_includedfiles << " \n]>\n\n";
}
- if(params.options.empty())
+ if (params.options.empty())
sgmlOpenTag(ofs, 0, top_element);
else {
string top = top_element;
// write opening SGML tags
switch (style.latextype) {
case LATEX_PARAGRAPH:
- if(depth == par->depth
+ if (depth == par->depth
&& !environment_stack[depth].empty()) {
sgmlCloseTag(ofs, depth, environment_stack[depth]);
environment_stack[depth].erase();
- if(depth)
+ if (depth)
--depth;
else
ofs << "</p>";
environment_stack[depth].erase();
}
if (environment_stack[depth] != style.latexname()) {
- if(depth == 0) {
+ if (depth == 0) {
string const temp = "p";
sgmlOpenTag(ofs, depth, temp);
}
sgmlOpenTag(ofs, depth,
environment_stack[depth]);
}
- if(style.latextype == LATEX_ENVIRONMENT) break;
+ if (style.latextype == LATEX_ENVIRONMENT) break;
desc_on = (style.labeltype == LABEL_MANUAL);
- if(desc_on)
+ if (desc_on)
item_name = "tag";
else
item_name = "item";
ofs << "\n";
// write closing SGML tags
- switch(style.latextype) {
+ switch (style.latextype) {
case LATEX_COMMAND:
case LATEX_ENVIRONMENT:
case LATEX_ITEM_ENVIRONMENT:
}
// Close open tags
- for(; depth > 0; --depth)
+ for (; depth > 0; --depth)
sgmlCloseTag(ofs, depth, environment_stack[depth]);
- if(!environment_stack[depth].empty())
+ if (!environment_stack[depth].empty())
sgmlCloseTag(ofs, depth, environment_stack[depth]);
if (!body_only) {
#ifndef NEW_INSETS
void Buffer::linuxDocHandleFootnote(ostream & os, LyXParagraph * & par,
- int const depth)
+ int depth)
{
string const tag = "footnote";
void Buffer::DocBookHandleCaption(ostream & os, string & inner_tag,
- int const depth, int desc_on,
+ int depth, int desc_on,
LyXParagraph * & par)
{
LyXParagraph * tpar = par;
SimpleDocBookOnePar(os, extra_par, tpar,
desc_on, depth + 2);
sgmlCloseTag(os, depth+1, inner_tag);
- if(!extra_par.empty())
+ if (!extra_par.empty())
os << extra_par;
}
}
#ifndef NEW_INSETS
void Buffer::DocBookHandleFootnote(ostream & os, LyXParagraph * & par,
- int const depth)
+ int depth)
{
string tag, inner_tag;
string tmp_par, extra_par;
par = par->next;
}
os << tmp_par;
- if(!inner_tag.empty()) sgmlCloseTag(os, depth + 1, inner_tag);
- if(!extra_par.empty()) os << extra_par;
- if(!tag.empty()) sgmlCloseTag(os, depth, tag);
+ if (!inner_tag.empty()) sgmlCloseTag(os, depth + 1, inner_tag);
+ if (!extra_par.empty()) os << extra_par;
+ if (!tag.empty()) sgmlCloseTag(os, depth, tag);
}
#endif
void Buffer::push_tag(ostream & os, string const & tag,
int & pos, char stack[5][3])
{
+#ifdef WITH_WARNINGS
#warning Use a real stack! (Lgb)
+#endif
// pop all previous tags
for (int j = pos; j >= 0; --j)
os << "</" << stack[j] << ">";
// checks, if newcol chars should be put into this line
// writes newline, if necessary.
static
-void linux_doc_line_break(ostream & os, unsigned int & colcount,
- const unsigned int newcol)
+void linux_doc_line_break(ostream & os, string::size_type & colcount,
+ string::size_type newcol)
{
colcount += newcol;
if (colcount > lyxrc.ascii_linelen) {
void Buffer::SimpleLinuxDocOnePar(ostream & os, LyXParagraph * par,
- int desc_on, int const /*depth*/)
+ int desc_on, int /*depth*/)
{
LyXFont font1;
char c;
int stack_num = -1; // style stack position
// Can this be rewritten to use a std::stack, please. (Lgb)
char stack[5][3]; // style stack
- unsigned int char_line_count = 5; // Heuristic choice ;-)
+ string::size_type char_line_count = 5; // Heuristic choice ;-)
if (style.labeltype != LABEL_MANUAL)
main_body = 0;
LyXFont const font2 = par->getFont(params, i);
if (font1.family() != font2.family()) {
- switch(family_type) {
+ switch (family_type) {
case 0:
if (font2.family() == LyXFont::TYPEWRITER_FAMILY) {
push_tag(os, "tt", stack_num, stack);
// handle italic and slanted fonts
if (font1.shape() != font2.shape()) {
- switch(shape_type) {
+ switch (shape_type) {
case 0:
if (font2.shape() == LyXFont::ITALIC_SHAPE) {
push_tag(os, "it", stack_num, stack);
}
// resets description flag correctly
- switch(desc_on){
+ switch (desc_on){
case 1:
// <tag> not closed...
linux_doc_line_break(os, char_line_count, 6);
LaTeXFeatures features(params, tclass.numLayouts());
validate(features);
- //if(nice)
+ //if (nice)
tex_code_break_column = lyxrc.ascii_linelen;
//else
//tex_code_break_column = 0;
texrow.reset();
- if(!only_body) {
+ if (!only_body) {
string sgml_includedfiles=features.getIncludedFiles();
ofs << "<!doctype " << top_element
ofs << "\n [ " << params.preamble
<< sgml_includedfiles << " \n]>\n\n";
- if(params.options.empty())
+ if (params.options.empty())
sgmlOpenTag(ofs, 0, top_element);
else {
string top = top_element;
par->layout);
// environment tag closing
- for( ; depth > par->depth; --depth) {
- if(environment_inner[depth] != "!-- --") {
+ for (; depth > par->depth; --depth) {
+ if (environment_inner[depth] != "!-- --") {
item_name= "listitem";
sgmlCloseTag(ofs, command_depth + depth,
item_name);
- if( environment_inner[depth] == "varlistentry")
+ if (environment_inner[depth] == "varlistentry")
sgmlCloseTag(ofs, depth+command_depth,
environment_inner[depth]);
}
environment_inner[depth].erase();
}
- if(depth == par->depth
+ if (depth == par->depth
&& environment_stack[depth] != style.latexname()
&& !environment_stack[depth].empty()) {
- if(environment_inner[depth] != "!-- --") {
+ if (environment_inner[depth] != "!-- --") {
item_name= "listitem";
sgmlCloseTag(ofs, command_depth+depth,
item_name);
- if( environment_inner[depth] == "varlistentry")
+ if (environment_inner[depth] == "varlistentry")
sgmlCloseTag(ofs,
depth + command_depth,
environment_inner[depth]);
}
// Write opening SGML tags.
- switch(style.latextype) {
+ switch (style.latextype) {
case LATEX_PARAGRAPH:
- if(style.latexname() != "dummy")
+ if (style.latexname() != "dummy")
sgmlOpenTag(ofs, depth+command_depth,
style.latexname());
break;
cmd_depth= lyx::atoi(c_depth);
- if(command_flag) {
- if(cmd_depth<command_base) {
- for(int j = command_depth;
+ if (command_flag) {
+ if (cmd_depth<command_base) {
+ for (int j = command_depth;
j >= command_base; --j)
- if(!command_stack[j].empty())
+ if (!command_stack[j].empty())
sgmlCloseTag(ofs, j, command_stack[j]);
command_depth= command_base= cmd_depth;
- } else if(cmd_depth <= command_depth) {
- for(int j = command_depth;
+ } else if (cmd_depth <= command_depth) {
+ for (int j = command_depth;
j >= cmd_depth; --j)
- if(!command_stack[j].empty())
+ if (!command_stack[j].empty())
sgmlCloseTag(ofs, j, command_stack[j]);
command_depth= cmd_depth;
} else
sgmlOpenTag(ofs, depth + command_depth,
environment_stack[depth]);
} else {
- if(environment_inner[depth] != "!-- --") {
+ if (environment_inner[depth] != "!-- --") {
item_name= "listitem";
sgmlCloseTag(ofs,
command_depth + depth,
}
}
- if(style.latextype == LATEX_ENVIRONMENT) {
- if(!style.latexparam().empty())
+ if (style.latextype == LATEX_ENVIRONMENT) {
+ if (!style.latexparam().empty())
sgmlOpenTag(ofs, depth + command_depth,
style.latexparam());
break;
desc_on = (style.labeltype == LABEL_MANUAL);
- if(desc_on)
+ if (desc_on)
environment_inner[depth]= "varlistentry";
else
environment_inner[depth]= "listitem";
sgmlOpenTag(ofs, depth + 1 + command_depth,
environment_inner[depth]);
- if(desc_on) {
+ if (desc_on) {
item_name= "term";
sgmlOpenTag(ofs, depth + 1 + command_depth,
item_name);
#endif
string end_tag;
// write closing SGML tags
- switch(style.latextype) {
+ switch (style.latextype) {
case LATEX_COMMAND:
end_tag = "title";
sgmlCloseTag(ofs, depth + command_depth, end_tag);
break;
case LATEX_ENVIRONMENT:
- if(!style.latexparam().empty())
+ if (!style.latexparam().empty())
sgmlCloseTag(ofs, depth + command_depth,
style.latexparam());
break;
case LATEX_ITEM_ENVIRONMENT:
- if(desc_on == 1) break;
+ if (desc_on == 1) break;
end_tag= "para";
sgmlCloseTag(ofs, depth + 1 + command_depth, end_tag);
break;
case LATEX_PARAGRAPH:
- if(style.latexname() != "dummy")
+ if (style.latexname() != "dummy")
sgmlCloseTag(ofs, depth + command_depth,
style.latexname());
break;
}
// Close open tags
- for(; depth >= 0; --depth) {
- if(!environment_stack[depth].empty()) {
- if(environment_inner[depth] != "!-- --") {
+ for (; depth >= 0; --depth) {
+ if (!environment_stack[depth].empty()) {
+ if (environment_inner[depth] != "!-- --") {
item_name= "listitem";
sgmlCloseTag(ofs, command_depth + depth,
item_name);
- if( environment_inner[depth] == "varlistentry")
+ if (environment_inner[depth] == "varlistentry")
sgmlCloseTag(ofs, depth + command_depth,
environment_inner[depth]);
}
}
}
- for(int j = command_depth; j >= command_base; --j)
- if(!command_stack[j].empty())
+ for (int j = command_depth; j >= command_base; --j)
+ if (!command_stack[j].empty())
sgmlCloseTag(ofs, j, command_stack[j]);
if (!only_body) {
void Buffer::SimpleDocBookOnePar(ostream & os, string & extra,
LyXParagraph * par, int & desc_on,
- int const depth)
+ int depth) const
{
bool emph_flag = false;
LyXFont font1 = main_body > 0 ? style.labelfont : style.font;
int char_line_count = depth;
- if(!style.free_spacing)
+ if (!style.free_spacing)
for (int j = 0; j < depth; ++j)
os << ' ';
// 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)
+ 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, '@');
}
// resets description flag correctly
- switch(desc_on){
+ switch (desc_on){
case 1:
// <term> not closed...
os << "</term>";
}
-int Buffer::runLiterate()
-{
- if (!users->text) return 0;
-
- ProhibitInput(users);
-
- // get LaTeX-Filename
- string name = getLatexName();
- // get Literate-Filename
- string lit_name = OnlyFilename(ChangeExtension (getLatexName(),
- lyxrc.literate_extension));
-
- string path = OnlyPath(filename);
-
- string org_path = path;
- if (lyxrc.use_tempdir || (IsDirWriteable(path) < 1)) {
- path = tmppath;
- }
-
- Path p(path); // path to Literate file
- users->owner()->getMiniBuffer()->Set(_("Running Literate..."));
-
- // Remove all error insets
- bool removedErrorInsets = users->removeAutoInsets();
-
- // generate the Literate file if necessary
- makeLaTeXFile(lit_name, org_path, false);
-
- string latex_command = lyxrc.pdf_mode ?
- lyxrc.pdflatex_command : lyxrc.latex_command;
- Literate literate(latex_command, name, filepath,
- lit_name,
- lyxrc.literate_command, lyxrc.literate_error_filter,
- lyxrc.build_command, lyxrc.build_error_filter);
- TeXErrors terr;
- int res = literate.weave(terr, users->owner()->getMiniBuffer());
-
- // check return value from literate.weave().
- if ((res & Literate::NO_LOGFILE)) {
- WriteAlert(_("Literate command did not work!"),
- _("Missing log file:"), name);
- } else if ((res & Literate::ERRORS)) {
- users->owner()->getMiniBuffer()->Set(_("Done"));
- // Insert all errors as errors boxes
- users->insertErrors(terr);
-
- // Dvi should also be kept dirty if the latex run
- // ends up with errors. However it should be possible
- // to view a dirty dvi too.
- } else {
- //no errors or any other things to think about so:
- users->owner()->getMiniBuffer()->Set(_("Done"));
- }
-
- // if we removed error insets before we ran LaTeX or if we inserted
- // error insets after we ran LaTeX this must be run:
- if (removedErrorInsets || (res & Literate::ERRORS)){
- users->redraw();
- users->fitCursor();
- //users->updateScrollbar();
- }
- AllowInput(users);
-
- return literate.getNumErrors();
-}
-
-
-int Buffer::buildProgram()
-{
- if (!users->text) return 0;
-
- ProhibitInput(users);
-
- // get LaTeX-Filename
- string name = getLatexName();
- // get Literate-Filename
- string lit_name = OnlyFilename(ChangeExtension(getLatexName(),
- lyxrc.literate_extension));
-
- string path = OnlyPath(filename);
-
- string org_path = path;
- if (lyxrc.use_tempdir || (IsDirWriteable(path) < 1)) {
- path = tmppath;
- }
-
- Path p(path); // path to Literate file
- users->owner()->getMiniBuffer()->Set(_("Building Program..."));
-
- // Remove all error insets
- bool removedErrorInsets = users->removeAutoInsets();
-
- // generate the LaTeX file if necessary
- if (!isNwClean() || removedErrorInsets) {
- makeLaTeXFile(lit_name, org_path, false);
- markNwDirty();
- }
-
- string latex_command = lyxrc.pdf_mode ?
- lyxrc.pdflatex_command : lyxrc.latex_command;
- Literate literate(latex_command, name, filepath,
- lit_name,
- lyxrc.literate_command, lyxrc.literate_error_filter,
- lyxrc.build_command, lyxrc.build_error_filter);
- TeXErrors terr;
- int const res = literate.build(terr, users->owner()->getMiniBuffer());
-
- // check return value from literate.build().
- if ((res & Literate::NO_LOGFILE)) {
- WriteAlert(_("Build did not work!"),
- _("Missing log file:"), name);
- } else if ((res & Literate::ERRORS)) {
- users->owner()->getMiniBuffer()->Set(_("Done"));
- // Insert all errors as errors boxes
- users->insertErrors(terr);
-
- // Literate files should also be kept dirty if the literate
- // command run ends up with errors.
- } else {
- //no errors or any other things to think about so:
- users->owner()->getMiniBuffer()->Set(_("Done"));
- markNwClean();
- }
-
- // if we removed error insets before we ran Literate/Build or
- // if we inserted error insets after we ran Literate/Build this
- // must be run:
- if (removedErrorInsets || (res & Literate::ERRORS)){
- users->redraw();
- users->fitCursor();
- //users->updateScrollbar();
- }
- AllowInput(users);
-
- return literate.getNumErrors();
-}
-
-
// 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
// error insets after we ran chktex, this must be run:
if (removedErrorInsets || res){
users->redraw();
- users->fitCursor();
- //users->updateScrollbar();
+ users->fitCursor(users->text);
}
AllowInput(users);
vector<vector<Buffer::TocItem> > const Buffer::getTocList()
{
+ int figs = 0;
+ int tables = 0;
+ int algs = 0;
vector<vector<TocItem> > l(4);
LyXParagraph * par = paragraph;
while (par) {
switch (par->footnotekind) {
case LyXParagraph::FIG:
case LyXParagraph::WIDE_FIG:
+ tmp.str = tostr(++figs) + ". "
+ + tmp.str;
l[TOC_LOF].push_back(tmp);
break;
case LyXParagraph::TAB:
case LyXParagraph::WIDE_TAB:
+ tmp.str = tostr(++tables) + ". "
+ + tmp.str;
l[TOC_LOT].push_back(tmp);
break;
case LyXParagraph::ALGORITHM:
+ tmp.str = tostr(++algs) + ". "
+ + tmp.str;
l[TOC_LOA].push_back(tmp);
break;
case LyXParagraph::FOOTNOTE:
// Search for Bibtex or Include inset
if ((*it)->LyxCode() == Inset::BIBTEX_CODE) {
vector<pair<string,string> > tmp =
- static_cast<InsetBibtex*>(*it)->getKeys();
+ static_cast<InsetBibtex*>(*it)->getKeys(this);
keys.insert(keys.end(), tmp.begin(), tmp.end());
} else if ((*it)->LyxCode() == Inset::INCLUDE_CODE) {
vector<pair<string,string> > const tmp =
{
/// then remove all LyXText in text-insets
LyXParagraph * par = paragraph;
- for(; par; par = par->next) {
+ for (; par; par = par->next) {
par->resizeInsetsLyXText(bv);
}
}