move some functions around

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@6328 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Lars Gullik Bjønnes 2003-03-03 21:15:49 +00:00
parent b366633564
commit 60322bc9d7
8 changed files with 480 additions and 455 deletions

View File

@ -1,5 +1,13 @@
2003-03-03 Lars Gullik Bjønnes <larsbj@gullik.net>
* buffer.C (latexParagraphs): adjust
* paragraph.C (TeXOnePar): move function...
(optArgInset): move function...
(TeXEnvironment): move function...
* paragraph_pimpl.C (TeXDeeper): move function...
* paragraph_funcs.C: ...here
* tabular.C (UseParbox): rewrite to use ParagraphList iterators.
2003-03-02 Lars Gullik Bjønnes <larsbj@gullik.net>

View File

@ -1865,12 +1865,12 @@ void Buffer::latexParagraphs(ostream & ofs, Paragraph * par,
if (layout->isEnvironment() ||
!par->params().leftIndent().zero())
{
par = par->TeXEnvironment(this, params, ofs, texrow);
par = TeXEnvironment(this, params, par, ofs, texrow);
} else {
par = par->TeXOnePar(this, params, ofs, texrow, moving_arg);
par = TeXOnePar(this, params, par, ofs, texrow, moving_arg);
}
} else {
par = par->TeXOnePar(this, params, ofs, texrow, moving_arg);
par = TeXOnePar(this, params, par, ofs, texrow, moving_arg);
}
}
// It might be that we only have a title in this document

View File

@ -50,10 +50,6 @@ using std::upper_bound;
using lyx::pos_type;
// this is a bad idea, but how can Paragraph find its buffer to get
// parameters? (JMarc)
extern string bibitemWidest(Buffer const *);
// this is a minibuffer
@ -950,250 +946,6 @@ InsetBibitem * Paragraph::bibitem()
return 0;
}
namespace {
InsetOptArg * optArgInset(Paragraph const & par)
{
// Find the entry.
InsetList::iterator it = par.insetlist.begin();
InsetList::iterator end = par.insetlist.end();
for (; it != end; ++it) {
Inset * ins = it.getInset();
if (ins->lyxCode() == Inset::OPTARG_CODE) {
return static_cast<InsetOptArg *>(ins);
}
}
return 0;
}
} // end namespace
Paragraph * Paragraph::TeXOnePar(Buffer const * buf,
BufferParams const & bparams,
ostream & os, TexRow & texrow,
bool moving_arg)
{
lyxerr[Debug::LATEX] << "TeXOnePar... " << this << endl;
Inset const * in = inInset();
bool further_blank_line = false;
LyXLayout_ptr style;
// 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)) {
style = layout();
if (params().startOfAppendix()) {
os << "\\appendix\n";
texrow.newline();
}
if (!params().spacing().isDefault()
&& (!previous() || !previous()->hasSameLayout(this))) {
os << params().spacing().writeEnvirBegin() << '\n';
texrow.newline();
}
if (style->isCommand()) {
os << '\n';
texrow.newline();
}
if (params().pagebreakTop()) {
os << "\\newpage";
further_blank_line = true;
}
if (params().spaceTop().kind() != VSpace::NONE) {
os << params().spaceTop().asLatexCommand(bparams);
further_blank_line = true;
}
if (params().lineTop()) {
os << "\\lyxline{\\" << getFont(bparams, 0).latexSize() << '}'
<< "\\vspace{-1\\parskip}";
further_blank_line = true;
}
if (further_blank_line) {
os << '\n';
texrow.newline();
}
} else {
style = bparams.getLyXTextClass().defaultLayout();
}
Language const * language = getParLanguage(bparams);
Language const * doc_language = bparams.language;
Language const * previous_language = previous()
? previous()->getParLanguage(bparams) : doc_language;
if (language->babel() != previous_language->babel()
// check if we already put language command in TeXEnvironment()
&& !(style->isEnvironment()
&& (!previous() ||
(previous()->layout() != layout() &&
previous()->getDepth() <= getDepth())
|| previous()->getDepth() < getDepth())))
{
if (!lyxrc.language_command_end.empty() &&
previous_language->babel() != doc_language->babel())
{
os << subst(lyxrc.language_command_end, "$$lang",
previous_language->babel())
<< endl;
texrow.newline();
}
if (lyxrc.language_command_end.empty() ||
language->babel() != doc_language->babel())
{
os << subst(lyxrc.language_command_begin, "$$lang",
language->babel())
<< endl;
texrow.newline();
}
}
if (bparams.inputenc == "auto" &&
language->encoding() != previous_language->encoding()) {
os << "\\inputencoding{"
<< language->encoding()->LatexName()
<< "}\n";
texrow.newline();
}
switch (style->latextype) {
case LATEX_COMMAND:
os << '\\' << style->latexname();
// Separate handling of optional argument inset.
if (style->optionalargs == 1) {
InsetOptArg * it = optArgInset(*this);
if (it)
it->latexOptional(buf, os, false, false);
}
else
os << style->latexparam();
break;
case LATEX_ITEM_ENVIRONMENT:
case LATEX_LIST_ENVIRONMENT:
os << "\\item ";
break;
case LATEX_BIB_ENVIRONMENT:
// ignore this, the inset will write itself
break;
default:
break;
}
bool need_par = simpleTeXOnePar(buf, bparams, os, texrow, moving_arg);
// Make sure that \\par is done with the font of the last
// character if this has another size as the default.
// This is necessary because LaTeX (and LyX on the screen)
// calculates the space between the baselines according
// to this font. (Matthias)
//
// Is this really needed ? (Dekel)
// We do not need to use to change the font for the last paragraph
// or for a command.
LyXFont const font =
(empty()
? getLayoutFont(bparams) : getFont(bparams, size() - 1));
bool is_command = style->isCommand();
if (style->resfont.size() != font.size() && next_ && !is_command) {
if (!need_par)
os << '{';
os << "\\" << font.latexSize() << " \\par}";
} else if (need_par) {
os << "\\par}";
} else if (is_command)
os << '}';
switch (style->latextype) {
case LATEX_ITEM_ENVIRONMENT:
case LATEX_LIST_ENVIRONMENT:
if (next_ && (params().depth() < next_->params().depth())) {
os << '\n';
texrow.newline();
}
break;
case LATEX_ENVIRONMENT:
// if its the last paragraph of the current environment
// skip it otherwise fall through
if (next_
&& (next_->layout() != layout()
|| next_->params().depth() != params().depth()))
break;
// fall through possible
default:
// we don't need it for the last paragraph!!!
if (next_) {
os << '\n';
texrow.newline();
}
}
if ((in == 0) || !in->forceDefaultParagraphs(in)) {
further_blank_line = false;
if (params().lineBottom()) {
os << "\\lyxline{\\" << font.latexSize() << '}';
further_blank_line = true;
}
if (params().spaceBottom().kind() != VSpace::NONE) {
os << params().spaceBottom().asLatexCommand(bparams);
further_blank_line = true;
}
if (params().pagebreakBottom()) {
os << "\\newpage";
further_blank_line = true;
}
if (further_blank_line) {
os << '\n';
texrow.newline();
}
if (!params().spacing().isDefault()
&& (!next_ || !next_->hasSameLayout(this))) {
os << params().spacing().writeEnvirEnd() << '\n';
texrow.newline();
}
}
// we don't need it for the last paragraph!!!
if (next_) {
os << '\n';
texrow.newline();
} else {
// Since \selectlanguage write the language to the aux file,
// we need to reset the language at the end of footnote or
// float.
if (language->babel() != doc_language->babel()) {
if (lyxrc.language_command_end.empty())
os << subst(lyxrc.language_command_begin,
"$$lang",
doc_language->babel())
<< endl;
else
os << subst(lyxrc.language_command_end,
"$$lang",
language->babel())
<< endl;
texrow.newline();
}
}
lyxerr[Debug::LATEX] << "TeXOnePar...done " << next_ << endl;
return next_;
}
// This could go to ParagraphParameters if we want to
@ -1535,106 +1287,6 @@ bool Paragraph::simpleTeXOnePar(Buffer const * buf,
}
Paragraph * Paragraph::TeXEnvironment(Buffer const * buf,
BufferParams const & bparams,
ostream & os, TexRow & texrow)
{
lyxerr[Debug::LATEX] << "TeXEnvironment... " << this << endl;
LyXLayout_ptr const & style = layout();
Language const * language = getParLanguage(bparams);
Language const * doc_language = bparams.language;
Language const * previous_language = previous_
? previous_->getParLanguage(bparams) : doc_language;
if (language->babel() != previous_language->babel()) {
if (!lyxrc.language_command_end.empty() &&
previous_language->babel() != doc_language->babel()) {
os << subst(lyxrc.language_command_end, "$$lang",
previous_language->babel())
<< endl;
texrow.newline();
}
if (lyxrc.language_command_end.empty() ||
language->babel() != doc_language->babel()) {
os << subst(lyxrc.language_command_begin, "$$lang",
language->babel())
<< endl;
texrow.newline();
}
}
bool leftindent_open = false;
if (!params().leftIndent().zero()) {
os << "\\begin{LyXParagraphLeftIndent}{" <<
params().leftIndent().asLatexString() << "}\n";
texrow.newline();
leftindent_open = true;
}
if (style->isEnvironment()) {
if (style->latextype == LATEX_LIST_ENVIRONMENT) {
os << "\\begin{" << style->latexname() << "}{"
<< params().labelWidthString() << "}\n";
} else if (style->labeltype == LABEL_BIBLIO) {
// ale970405
os << "\\begin{" << style->latexname() << "}{"
<< bibitemWidest(buf)
<< "}\n";
} else if (style->latextype == LATEX_ITEM_ENVIRONMENT) {
os << "\\begin{" << style->latexname() << '}'
<< style->latexparam() << '\n';
} else
os << "\\begin{" << style->latexname() << '}'
<< style->latexparam() << '\n';
texrow.newline();
}
Paragraph * par = this;
do {
par = par->TeXOnePar(buf, bparams, os, texrow, false);
if (par && par->params().depth() > params().depth()) {
if (par->layout()->isParagraph()) {
// Thinko!
// How to handle this? (Lgb)
//&& !suffixIs(os, "\n\n")
//) {
// There should be at least one '\n' already
// but we need there to be two for Standard
// paragraphs that are depth-increment'ed to be
// output correctly. However, tables can
// also be paragraphs so don't adjust them.
// ARRae
// Thinkee:
// Will it ever harm to have one '\n' too
// many? i.e. that we sometimes will have
// three in a row. (Lgb)
os << '\n';
texrow.newline();
}
par = par->pimpl_->TeXDeeper(buf, bparams, os, texrow);
}
} while (par
&& par->layout() == layout()
&& par->params().depth() == params().depth()
&& par->params().leftIndent() == params().leftIndent());
if (style->isEnvironment()) {
os << "\\end{" << style->latexname() << "}\n";
texrow.newline();
}
if (leftindent_open) {
os << "\\end{LyXParagraphLeftIndent}\n";
texrow.newline();
}
lyxerr[Debug::LATEX] << "TeXEnvironment...done " << par << endl;
return par; // ale970302
}
bool Paragraph::isHfill(pos_type pos) const

View File

@ -90,11 +90,6 @@ public:
///
void read();
///
Paragraph * TeXOnePar(Buffer const *, BufferParams const &,
std::ostream &, TexRow & texrow,
bool moving_arg);
///
int startTeXParParams(BufferParams const &, std::ostream &, bool) const;
@ -107,9 +102,6 @@ public:
std::ostream &, TexRow & texrow, bool moving_arg);
///
Paragraph * TeXEnvironment(Buffer const *, BufferParams const &,
std::ostream &, TexRow & texrow);
///
bool hasSameLayout(Paragraph const * par) const;
///

View File

@ -16,11 +16,18 @@
#include "ParagraphParameters.h"
#include "lyxtextclasslist.h"
#include "debug.h"
#include "language.h"
#include "encoding.h"
#include "lyxrc.h"
#include "support/lstrings.h"
#include "insets/insetoptarg.h"
extern string bibitemWidest(Buffer const *);
using lyx::pos_type;
//using lyx::layout_type;
using std::endl;
using std::ostream;
void breakParagraph(BufferParams const & bparams,
Paragraph * par,
@ -238,3 +245,377 @@ int getEndLabel(Paragraph * para, BufferParams const & bparams)
return END_LABEL_NO_LABEL;
}
#endif
Paragraph * TeXDeeper(Buffer const * buf,
BufferParams const & bparams,
Paragraph * pit,
ostream & os, TexRow & texrow)
{
lyxerr[Debug::LATEX] << "TeXDeeper... " << pit << endl;
Paragraph * par = pit;
while (par && par->params().depth() == pit->params().depth()) {
if (par->layout()->isEnvironment()) {
par = TeXEnvironment(buf, bparams, par,
os, texrow);
} else {
par = TeXOnePar(buf, bparams, par,
os, texrow, false);
}
}
lyxerr[Debug::LATEX] << "TeXDeeper...done " << par << endl;
return par;
}
Paragraph * TeXEnvironment(Buffer const * buf,
BufferParams const & bparams,
Paragraph * pit,
ostream & os, TexRow & texrow)
{
lyxerr[Debug::LATEX] << "TeXEnvironment... " << pit << endl;
LyXLayout_ptr const & style = pit->layout();
Language const * language = pit->getParLanguage(bparams);
Language const * doc_language = bparams.language;
Language const * previous_language = pit->previous()
? pit->previous()->getParLanguage(bparams) : doc_language;
if (language->babel() != previous_language->babel()) {
if (!lyxrc.language_command_end.empty() &&
previous_language->babel() != doc_language->babel()) {
os << subst(lyxrc.language_command_end, "$$lang",
previous_language->babel())
<< endl;
texrow.newline();
}
if (lyxrc.language_command_end.empty() ||
language->babel() != doc_language->babel()) {
os << subst(lyxrc.language_command_begin, "$$lang",
language->babel())
<< endl;
texrow.newline();
}
}
bool leftindent_open = false;
if (!pit->params().leftIndent().zero()) {
os << "\\begin{LyXParagraphLeftIndent}{" <<
pit->params().leftIndent().asLatexString() << "}\n";
texrow.newline();
leftindent_open = true;
}
if (style->isEnvironment()) {
if (style->latextype == LATEX_LIST_ENVIRONMENT) {
os << "\\begin{" << style->latexname() << "}{"
<< pit->params().labelWidthString() << "}\n";
} else if (style->labeltype == LABEL_BIBLIO) {
// ale970405
os << "\\begin{" << style->latexname() << "}{"
<< bibitemWidest(buf)
<< "}\n";
} else if (style->latextype == LATEX_ITEM_ENVIRONMENT) {
os << "\\begin{" << style->latexname() << '}'
<< style->latexparam() << '\n';
} else
os << "\\begin{" << style->latexname() << '}'
<< style->latexparam() << '\n';
texrow.newline();
}
Paragraph * par = pit;
do {
par = TeXOnePar(buf, bparams, par, os, texrow, false);
if (par && par->params().depth() > pit->params().depth()) {
if (par->layout()->isParagraph()) {
// Thinko!
// How to handle this? (Lgb)
//&& !suffixIs(os, "\n\n")
//) {
// There should be at least one '\n' already
// but we need there to be two for Standard
// paragraphs that are depth-increment'ed to be
// output correctly. However, tables can
// also be paragraphs so don't adjust them.
// ARRae
// Thinkee:
// Will it ever harm to have one '\n' too
// many? i.e. that we sometimes will have
// three in a row. (Lgb)
os << '\n';
texrow.newline();
}
par = TeXDeeper(buf, bparams, par, os, texrow);
}
} while (par
&& par->layout() == pit->layout()
&& par->params().depth() == pit->params().depth()
&& par->params().leftIndent() == pit->params().leftIndent());
if (style->isEnvironment()) {
os << "\\end{" << style->latexname() << "}\n";
texrow.newline();
}
if (leftindent_open) {
os << "\\end{LyXParagraphLeftIndent}\n";
texrow.newline();
}
lyxerr[Debug::LATEX] << "TeXEnvironment...done " << par << endl;
return par; // ale970302
}
namespace {
InsetOptArg * optArgInset(Paragraph const & par)
{
// Find the entry.
InsetList::iterator it = par.insetlist.begin();
InsetList::iterator end = par.insetlist.end();
for (; it != end; ++it) {
Inset * ins = it.getInset();
if (ins->lyxCode() == Inset::OPTARG_CODE) {
return static_cast<InsetOptArg *>(ins);
}
}
return 0;
}
} // end namespace
Paragraph * TeXOnePar(Buffer const * buf,
BufferParams const & bparams,
Paragraph * pit,
ostream & os, TexRow & texrow,
bool moving_arg)
{
lyxerr[Debug::LATEX] << "TeXOnePar... " << pit << endl;
Inset const * in = pit->inInset();
bool further_blank_line = false;
LyXLayout_ptr style;
// 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)) {
style = pit->layout();
if (pit->params().startOfAppendix()) {
os << "\\appendix\n";
texrow.newline();
}
if (!pit->params().spacing().isDefault()
&& (!pit->previous() || !pit->previous()->hasSameLayout(pit))) {
os << pit->params().spacing().writeEnvirBegin() << '\n';
texrow.newline();
}
if (style->isCommand()) {
os << '\n';
texrow.newline();
}
if (pit->params().pagebreakTop()) {
os << "\\newpage";
further_blank_line = true;
}
if (pit->params().spaceTop().kind() != VSpace::NONE) {
os << pit->params().spaceTop().asLatexCommand(bparams);
further_blank_line = true;
}
if (pit->params().lineTop()) {
os << "\\lyxline{\\" << pit->getFont(bparams, 0).latexSize() << '}'
<< "\\vspace{-1\\parskip}";
further_blank_line = true;
}
if (further_blank_line) {
os << '\n';
texrow.newline();
}
} else {
style = bparams.getLyXTextClass().defaultLayout();
}
Language const * language = pit->getParLanguage(bparams);
Language const * doc_language = bparams.language;
Language const * previous_language = pit->previous()
? pit->previous()->getParLanguage(bparams) : doc_language;
if (language->babel() != previous_language->babel()
// check if we already put language command in TeXEnvironment()
&& !(style->isEnvironment()
&& (!pit->previous() ||
(pit->previous()->layout() != pit->layout() &&
pit->previous()->getDepth() <= pit->getDepth())
|| pit->previous()->getDepth() < pit->getDepth())))
{
if (!lyxrc.language_command_end.empty() &&
previous_language->babel() != doc_language->babel())
{
os << subst(lyxrc.language_command_end, "$$lang",
previous_language->babel())
<< endl;
texrow.newline();
}
if (lyxrc.language_command_end.empty() ||
language->babel() != doc_language->babel())
{
os << subst(lyxrc.language_command_begin, "$$lang",
language->babel())
<< endl;
texrow.newline();
}
}
if (bparams.inputenc == "auto" &&
language->encoding() != previous_language->encoding()) {
os << "\\inputencoding{"
<< language->encoding()->LatexName()
<< "}\n";
texrow.newline();
}
switch (style->latextype) {
case LATEX_COMMAND:
os << '\\' << style->latexname();
// Separate handling of optional argument inset.
if (style->optionalargs == 1) {
InsetOptArg * it = optArgInset(*pit);
if (it)
it->latexOptional(buf, os, false, false);
}
else
os << style->latexparam();
break;
case LATEX_ITEM_ENVIRONMENT:
case LATEX_LIST_ENVIRONMENT:
os << "\\item ";
break;
case LATEX_BIB_ENVIRONMENT:
// ignore this, the inset will write itself
break;
default:
break;
}
bool need_par = pit->simpleTeXOnePar(buf, bparams, os, texrow, moving_arg);
// Make sure that \\par is done with the font of the last
// character if this has another size as the default.
// This is necessary because LaTeX (and LyX on the screen)
// calculates the space between the baselines according
// to this font. (Matthias)
//
// Is this really needed ? (Dekel)
// We do not need to use to change the font for the last paragraph
// or for a command.
LyXFont const font =
(pit->empty()
? pit->getLayoutFont(bparams) : pit->getFont(bparams, pit->size() - 1));
bool is_command = style->isCommand();
if (style->resfont.size() != font.size() && pit->next() && !is_command) {
if (!need_par)
os << '{';
os << "\\" << font.latexSize() << " \\par}";
} else if (need_par) {
os << "\\par}";
} else if (is_command)
os << '}';
switch (style->latextype) {
case LATEX_ITEM_ENVIRONMENT:
case LATEX_LIST_ENVIRONMENT:
if (pit->next() && (pit->params().depth() < pit->next()->params().depth())) {
os << '\n';
texrow.newline();
}
break;
case LATEX_ENVIRONMENT:
// if its the last paragraph of the current environment
// skip it otherwise fall through
if (pit->next()
&& (pit->next()->layout() != pit->layout()
|| pit->next()->params().depth() != pit->params().depth()))
break;
// fall through possible
default:
// we don't need it for the last paragraph!!!
if (pit->next()) {
os << '\n';
texrow.newline();
}
}
if ((in == 0) || !in->forceDefaultParagraphs(in)) {
further_blank_line = false;
if (pit->params().lineBottom()) {
os << "\\lyxline{\\" << font.latexSize() << '}';
further_blank_line = true;
}
if (pit->params().spaceBottom().kind() != VSpace::NONE) {
os << pit->params().spaceBottom().asLatexCommand(bparams);
further_blank_line = true;
}
if (pit->params().pagebreakBottom()) {
os << "\\newpage";
further_blank_line = true;
}
if (further_blank_line) {
os << '\n';
texrow.newline();
}
if (!pit->params().spacing().isDefault()
&& (!pit->next() || !pit->next()->hasSameLayout(pit))) {
os << pit->params().spacing().writeEnvirEnd() << '\n';
texrow.newline();
}
}
// we don't need it for the last paragraph!!!
if (pit->next()) {
os << '\n';
texrow.newline();
} else {
// Since \selectlanguage write the language to the aux file,
// we need to reset the language at the end of footnote or
// float.
if (language->babel() != doc_language->babel()) {
if (lyxrc.language_command_end.empty())
os << subst(lyxrc.language_command_begin,
"$$lang",
doc_language->babel())
<< endl;
else
os << subst(lyxrc.language_command_end,
"$$lang",
language->babel())
<< endl;
texrow.newline();
}
}
lyxerr[Debug::LATEX] << "TeXOnePar...done " << pit->next() << endl;
return pit->next();
}

View File

@ -14,8 +14,10 @@
#include "support/types.h"
class Buffer;
class BufferParams;
class Paragraph;
class TexRow;
///
void breakParagraph(BufferParams const & bparams,
@ -49,4 +51,20 @@ bool isFirstInSequence(Paragraph * par);
int getEndLabel(Paragraph * para, BufferParams const & bparams);
#endif
Paragraph * TeXDeeper(Buffer const * buf,
BufferParams const & bparams,
Paragraph * pit,
std::ostream & os, TexRow & texrow);
Paragraph * TeXEnvironment(Buffer const * buf,
BufferParams const & bparams,
Paragraph * pit,
std::ostream & os, TexRow & texrow);
Paragraph * TeXOnePar(Buffer const * buf,
BufferParams const & bparams,
Paragraph * pit,
std::ostream & os, TexRow & texrow,
bool moving_arg);
#endif // PARAGRAPH_FUNCS_H

View File

@ -742,29 +742,6 @@ void Paragraph::Pimpl::simpleTeXSpecialChars(Buffer const * buf,
}
Paragraph * Paragraph::Pimpl::TeXDeeper(Buffer const * buf,
BufferParams const & bparams,
ostream & os, TexRow & texrow)
{
lyxerr[Debug::LATEX] << "TeXDeeper... " << this << endl;
Paragraph * par = owner_;
while (par && par->params().depth() == owner_->params().depth()) {
if (par->layout()->isEnvironment()) {
par = par->TeXEnvironment(buf, bparams,
os, texrow);
} else {
par = par->TeXOnePar(buf, bparams,
os, texrow, false);
}
}
lyxerr[Debug::LATEX] << "TeXDeeper...done " << par << endl;
return par;
}
void Paragraph::Pimpl::validate(LaTeXFeatures & features,
LyXLayout const & layout) const
{

View File

@ -147,9 +147,6 @@ struct Paragraph::Pimpl {
///
FontList fontlist;
///
Paragraph * TeXDeeper(Buffer const *, BufferParams const &,
std::ostream &, TexRow & texrow);
///
void simpleTeXBlanks(std::ostream &, TexRow & texrow,
lyx::pos_type const i,