#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 "iterators.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();
}
#warning And _why_ is this here? (Lgb)
int unknown_layouts;
+int unknown_tokens;
} // anon
bool Buffer::readLyXformat2(LyXLex & lex, Paragraph * par)
{
unknown_layouts = 0;
+ unknown_tokens = 0;
#ifndef NO_COMPABILITY
ert_comp.contents.erase();
ert_comp.active = false;
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();
}
// 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);
#ifndef NO_COMPABILITY
if (compare_no_case(layoutname, "latex") == 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 =
params.readPreamble(lex);
} else if (token == "\\textclass") {
lex.eatLine();
- pair<bool, LyXTextClassList::size_type> pp =
+ 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("\"."),
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"));
par->getLayout());
// Insets don't make sense in a free-spacing context! ---Kayvan
- if (layout.free_spacing) {
+ if (layout.free_spacing || par->isFreeSpacing()) {
if (lex.isOK()) {
lex.next();
string next_token = lex.getString();
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);
} 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;
- }
+ ++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
}
// 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;
}
// 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;
}
- 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";
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;
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) << ">";
++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;
- }
+ // 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)
{
Paragraph * par = paragraph;
#if 1
- std::pair<bool, LyXTextClassList::size_type> const tmp =
+ std::pair<bool, textclass_type> const tmp =
textclasslist.NumberOfLayout(params.textclass, "Caption");
bool const found = tmp.first;
- LyXTextClassList::size_type const cap = tmp.second;
+ 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
}
-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);