X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fbuffer.C;h=d55a1b38357ba2447ee57867bbd40936bb993ea2;hb=ba21e6498c620beca81e9735795dd2cea2a1cf48;hp=f1c277bd07e6a7e0ae6a5518a4a21a390eb67cc6;hpb=8c1402faba0bd5fe77cda0a285e51faeeb6c6f04;p=lyx.git
diff --git a/src/buffer.C b/src/buffer.C
index f1c277bd07..d55a1b3835 100644
--- a/src/buffer.C
+++ b/src/buffer.C
@@ -1,6 +1,6 @@
/* This file is part of
- * ======================================================
- *
+ * ======================================================
+ *
* LyX, The Document Processor
*
* Copyright 1995 Matthias Ettrich
@@ -9,29 +9,11 @@
* This file is Copyright 1996-2001
* Lars Gullik Bjønnes
*
- * ======================================================
+ * ======================================================
*/
#include
-#include
-#include
-#include
";
+ ofs << "";
}
sgmlOpenTag(ofs, depth, style.latexname());
break;
@@ -2627,7 +2747,7 @@ void Buffer::makeLinuxDocFile(string const & fname, bool nice, bool body_only)
_("Error : Wrong depth for"
" LatexType Command.\n"));
- if (!environment_stack[depth].empty()){
+ if (!environment_stack[depth].empty()) {
sgmlCloseTag(ofs, depth,
environment_stack[depth]);
ofs << "";
@@ -2639,7 +2759,7 @@ void Buffer::makeLinuxDocFile(string const & fname, bool nice, bool body_only)
case LATEX_ENVIRONMENT:
case LATEX_ITEM_ENVIRONMENT:
- if (depth == par->params().depth()
+ if (depth == par->params().depth()
&& environment_stack[depth] != style.latexname()) {
sgmlCloseTag(ofs, depth,
environment_stack[depth]);
@@ -2696,10 +2816,10 @@ void Buffer::makeLinuxDocFile(string const & fname, bool nice, bool body_only)
break;
}
}
-
+
// Close open tags
for (int i=depth; i >= 0; --i)
- sgmlCloseTag(ofs, depth, environment_stack[i]);
+ sgmlCloseTag(ofs, depth, environment_stack[i]);
if (!body_only) {
ofs << "\n\n";
@@ -2708,6 +2828,9 @@ void Buffer::makeLinuxDocFile(string const & fname, bool nice, bool body_only)
ofs.close();
// How to check for successful close
+
+ // we want this to be true outside previews (for insetexternal)
+ niceFile = true;
}
@@ -2753,27 +2876,27 @@ string tag_name(PAR_TAG const & pt) {
inline
void operator|=(PAR_TAG & p1, PAR_TAG const & p2)
{
- p1 = static_cast(p1 | p2);
+ p1 = static_cast(p1 | p2);
}
inline
void reset(PAR_TAG & p1, PAR_TAG const & p2)
{
- p1 = static_cast( p1 & ~p2);
+ p1 = static_cast(p1 & ~p2);
}
-} // namespace anon
+} // anon
// Handle internal paragraph parsing -- layout already processed.
void Buffer::simpleLinuxDocOnePar(ostream & os,
- Paragraph * par,
- Paragraph::depth_type /*depth*/)
+ Paragraph * par,
+ Paragraph::depth_type /*depth*/)
{
- LyXLayout const & style = textclasslist.Style(params.textclass,
- par->getLayout());
- string::size_type char_line_count = 5; // Heuristic choice ;-)
+ LyXLayout const & style =
+ textclasslist[params.textclass][par->layout()];
+ string::size_type char_line_count = 5; // Heuristic choice ;-)
// gets paragraph main font
LyXFont font_old;
@@ -2793,7 +2916,7 @@ void Buffer::simpleLinuxDocOnePar(ostream & os,
stack 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;
@@ -2885,7 +3008,7 @@ void Buffer::simpleLinuxDocOnePar(ostream & os,
}
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) << ">";
@@ -2924,7 +3047,8 @@ void Buffer::simpleLinuxDocOnePar(ostream & os,
} else {
string sgml_string;
if (par->sgmlConvertChar(c, sgml_string)
- && !style.free_spacing) {
+ && !style.free_spacing && !par->isFreeSpacing())
+ {
// in freespacing mode, spaces are
// non-breaking characters
if (desc_on) {// if char is ' ' then...
@@ -2960,12 +3084,21 @@ void Buffer::simpleLinuxDocOnePar(ostream & os,
// Print an error message.
-void Buffer::sgmlError(Paragraph * par, int pos,
- string const & message) const
+void Buffer::sgmlError(Paragraph * /*par*/, int /*pos*/,
+ string const & /*message*/) const
{
+#warning This is wrong we cannot insert an inset like this!!!
+ // I guess this was Jose' so I explain you more or less why this
+ // is wrong. This way you insert something in the paragraph and
+ // don't tell it to LyXText (row rebreaking and undo handling!!!)
+ // I deactivate this code, have a look at BufferView::insertErrors
+ // how you should do this correctly! (Jug 20020315)
+#if 0
// 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));
+#endif
}
@@ -2973,7 +3106,7 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
{
ofstream ofs(fname.c_str());
if (!ofs) {
- WriteAlert(_("LYX_ERROR:"), _("Cannot write file"), fname);
+ Alert::alert(_("LYX_ERROR:"), _("Cannot write file"), fname);
return;
}
@@ -2981,22 +3114,22 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
niceFile = nice; // this will be used by Insetincludes.
- LyXTextClass const & tclass =
- textclasslist.TextClass(params.textclass);
-
- LaTeXFeatures features(params, tclass.numLayouts());
+ LaTeXFeatures features(params);
validate(features);
-
+
texrow.reset();
- string top_element = textclasslist.LatexnameOfClass(params.textclass);
+ LyXTextClass const & tclass = textclasslist[params.textclass];
+ string top_element = tclass.latexname();
if (!only_body) {
ofs << "\n\n";
}
- string top = top_element;
+ string top = top_element;
top += " lang=\"";
top += params.language->code();
top += "\"";
@@ -3029,7 +3162,7 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
Paragraph::depth_type cmd_depth = 0;
Paragraph::depth_type depth = 0; // paragraph depth
- string item_name;
+ string item_name;
string command_name;
while (par) {
@@ -3038,9 +3171,7 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
string c_params;
int desc_on = 0; // description mode
- LyXLayout const & style =
- textclasslist.Style(params.textclass,
- par->layout);
+ LyXLayout const & style = tclass[par->layout()];
// environment tag closing
for (; depth > par->params().depth(); --depth) {
@@ -3070,13 +3201,13 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
depth + command_depth,
environment_inner[depth]);
}
-
+
sgmlCloseTag(ofs, depth + command_depth,
environment_stack[depth]);
-
+
environment_stack[depth].erase();
environment_inner[depth].erase();
- }
+ }
// Write opening SGML tags.
switch (style.latextype) {
@@ -3090,14 +3221,14 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
sgmlError(par, 0,
_("Error : Wrong depth for "
"LatexType Command.\n"));
-
+
command_name = style.latexname();
-
+
sgmlparam = style.latexparam();
c_params = split(sgmlparam, c_depth,'|');
-
+
cmd_depth = lyx::atoi(c_depth);
-
+
if (command_flag) {
if (cmd_depth < command_base) {
for (Paragraph::depth_type j = command_depth; j >= command_base; --j)
@@ -3119,10 +3250,12 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
// 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 * 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(inset))->getContents();
command_name += "\"";
@@ -3146,7 +3279,7 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
}
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("!-- --");
}
@@ -3166,10 +3299,10 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
environment_inner[depth]);
}
}
-
+
if (style.latextype == LATEX_ENVIRONMENT) {
if (!style.latexparam().empty()) {
- if(style.latexparam() == "CDATA")
+ if (style.latexparam() == "CDATA")
ofs << "";
else
sgmlCloseTag(ofs, depth + command_depth,
@@ -3247,16 +3380,16 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
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]);
}
-
+
sgmlCloseTag(ofs, depth + command_depth,
environment_stack[depth]);
}
}
-
+
for (int j = command_depth; j >= 0 ; --j)
if (!command_stack[j].empty())
sgmlCloseTag(ofs, j, command_stack[j]);
@@ -3266,6 +3399,9 @@ void Buffer::makeDocBookFile(string const & fname, bool nice, bool only_body)
ofs.close();
// How to check for successful close
+
+ // we want this to be true outside previews (for insetexternal)
+ niceFile = true;
}
@@ -3275,8 +3411,8 @@ void Buffer::simpleDocBookOnePar(ostream & os,
{
bool emph_flag = false;
- LyXLayout const & style = textclasslist.Style(params.textclass,
- par->getLayout());
+ LyXLayout const & style =
+ textclasslist[params.textclass][par->layout()];
LyXFont font_old = style.labeltype == LABEL_MANUAL ? style.labelfont : style.font;
@@ -3285,8 +3421,7 @@ void Buffer::simpleDocBookOnePar(ostream & os,
// 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 tag
@@ -3294,24 +3429,31 @@ void Buffer::simpleDocBookOnePar(ostream & os,
if (font.emph() == LyXFont::ON) {
os << "";
emph_flag = true;
- }else if(i) {
+ } else if (i) {
os << "";
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 << "getChar(i);
string sgml_string;
par->sgmlConvertChar(c, sgml_string);
if (style.pass_thru) {
os << c;
- } else if(style.free_spacing || c != ' ') {
+ } else if (style.free_spacing || par->isFreeSpacing() || c != ' ') {
os << sgml_string;
} else if (desc_on ==1) {
++char_line_count;
@@ -3327,13 +3469,13 @@ void Buffer::simpleDocBookOnePar(ostream & os,
if (emph_flag) {
os << "";
}
-
+
// resets description flag correctly
if (desc_on == 1) {
// not closed...
- os << "";
+ os << "\n ";
}
- if(style.free_spacing) os << '\n';
+ if (style.free_spacing) os << '\n';
}
@@ -3348,11 +3490,11 @@ int Buffer::runChktex()
// 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)) {
- path = tmppath;
+ path = tmppath;
}
Path p(path); // path to LaTeX file
@@ -3365,11 +3507,11 @@ int Buffer::runChktex()
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) {
- 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
@@ -3378,7 +3520,7 @@ int Buffer::runChktex()
// 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();
}
@@ -3391,13 +3533,12 @@ int Buffer::runChktex()
void Buffer::validate(LaTeXFeatures & features) const
{
Paragraph * par = paragraph;
- LyXTextClass const & tclass =
- textclasslist.TextClass(params.textclass);
-
- // AMS Style is at document level
- if (params.use_amsmath || tclass.provides(LyXTextClass::amsmath))
- features.require("amsstyle");
-
+ LyXTextClass const & tclass = textclasslist[params.textclass];
+
+ // AMS Style is at document level
+ if (params.use_amsmath || tclass.provides(LyXTextClass::amsmath))
+ features.require("amsmath");
+
while (par) {
// We don't use "lyxerr.debug" because of speed. (Asger)
if (lyxerr.debugging(Debug::LATEX))
@@ -3434,7 +3575,7 @@ void Buffer::validate(LaTeXFeatures & features) const
}
}
}
-
+
if (lyxerr.debugging(Debug::LATEX)) {
features.showStruct();
}
@@ -3448,7 +3589,7 @@ string const Buffer::getIncludeonlyList(char delim)
for (inset_iterator it = inset_iterator_begin();
it != inset_iterator_end(); ++it) {
if ((*it)->lyxCode() == Inset::INCLUDE_CODE) {
- InsetInclude * insetinc =
+ InsetInclude * insetinc =
static_cast(*it);
if (insetinc->isIncludeOnly()) {
if (!lst.empty())
@@ -3488,57 +3629,44 @@ Buffer::Lists const Buffer::getLists() const
Lists l;
Paragraph * par = paragraph;
-#if 1
- std::pair const tmp =
- textclasslist.NumberOfLayout(params.textclass, "Caption");
- bool const found = tmp.first;
- LyXTextClassList::size_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;
- boost::tie(found, cap) = textclasslist
- .NumberOfLayout(params.textclass, "Caption");
-#endif
+ LyXTextClass const & textclass = textclasslist[params.textclass];
+ bool found = textclass.hasLayout("Caption");
+ string const layout("Caption");
while (par) {
- char const labeltype =
- textclasslist.Style(params.textclass,
- par->getLayout()).labeltype;
-
+ char const labeltype = textclass[par->layout()].labeltype;
+
if (labeltype >= LABEL_COUNTER_CHAPTER
&& labeltype <= LABEL_COUNTER_CHAPTER + params.tocdepth) {
// insert this into the table of contents
SingleList & item = l["TOC"];
int depth = max(0,
- labeltype -
- textclasslist.TextClass(params.textclass).maxcounter());
+ labeltype -
+ textclass.maxcounter());
item.push_back(TocItem(par, depth, par->asString(this, true)));
}
// For each paragrph, traverse its insets and look for
// FLOAT_CODE
-
+
if (found) {
Paragraph::inset_iterator it =
par->inset_iterator_begin();
Paragraph::inset_iterator end =
par->inset_iterator_end();
-
+
for (; it != end; ++it) {
if ((*it)->lyxCode() == Inset::FLOAT_CODE) {
InsetFloat * il =
static_cast(*it);
-
+
string const type = il->type();
-
+
// Now find the caption in the float...
// We now tranverse the paragraphs of
// the inset...
Paragraph * tmp = il->inset.paragraph();
while (tmp) {
- if (tmp->layout == cap) {
+ if (tmp->layout() == layout) {
SingleList & item = l[type];
string const str =
tostr(item.size()+1) + ". " + tmp->asString(this, false);
@@ -3549,9 +3677,9 @@ Buffer::Lists const Buffer::getLists() const
}
}
} else {
- lyxerr << "caption not found" << endl;
+ lyxerr << "Caption not found" << endl;
}
-
+
par = par->next();
}
return l;
@@ -3563,7 +3691,7 @@ vector > const Buffer::getBibkeyList()
{
/// if this is a child document and the parent is already loaded
/// Use the parent's list instead [ale990412]
- if (!params.parentname.empty() && bufferlist.exists(params.parentname)) {
+ if (!params.parentname.empty() && bufferlist.exists(params.parentname)) {
Buffer * tmp = bufferlist.getBuffer(params.parentname);
if (tmp)
return tmp->getBibkeyList();
@@ -3594,7 +3722,7 @@ vector > const Buffer::getBibkeyList()
}
}
}
-
+
return keys;
}
@@ -3647,7 +3775,7 @@ bool Buffer::dispatch(int action, string const & argument)
{
bool dispatched = true;
switch (action) {
- case LFUN_EXPORT:
+ case LFUN_EXPORT:
Exporter::Export(this, argument, false);
break;
@@ -3670,8 +3798,8 @@ void Buffer::resizeInsets(BufferView * bv)
void Buffer::redraw()
{
- users->redraw();
- users->fitCursor();
+ users->redraw();
+ users->fitCursor();
}
@@ -3695,8 +3823,7 @@ bool Buffer::isMultiLingual()
}
-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);
@@ -3755,11 +3882,11 @@ Paragraph * Buffer::getParFromID(int id) const
ParIterator Buffer::par_iterator_begin()
{
- return ParIterator(paragraph);
+ return ParIterator(paragraph);
}
ParIterator Buffer::par_iterator_end()
{
- return ParIterator();
+ return ParIterator();
}