#include "buffer.h"
#include "bufferparams.h"
+#include "counters.h"
#include "encoding.h"
#include "debug.h"
#include "gettext.h"
#include "insets/insetoptarg.h"
#include "support/lstrings.h"
-#include "support/textutils.h"
#include "support/std_sstream.h"
+#include "support/textutils.h"
+#include "support/tostr.h"
#include <boost/tuple/tuple.hpp>
+#include <boost/bind.hpp>
#include <list>
#include <stack>
using lyx::support::contains;
using lyx::support::subst;
+using std::distance;
using std::endl;
using std::list;
using std::stack;
insetlist = par.insetlist;
InsetList::iterator it = insetlist.begin();
InsetList::iterator end = insetlist.end();
- for (; it != end; ++it) {
- // currently we hold Inset*, not InsetBase*
- it->inset = static_cast<InsetOld*>(it->inset->clone().release());
- }
+ for (; it != end; ++it)
+ it->inset = it->inset->clone().release();
}
insetlist = par.insetlist;
InsetList::iterator it = insetlist.begin();
InsetList::iterator end = insetlist.end();
- for (; it != end; ++it) {
- it->inset = static_cast<InsetOld*>(it->inset->clone().release());
- }
+ for (; it != end; ++it)
+ it->inset = it->inset->clone().release();
}
switch (c) {
case META_INSET:
{
- InsetOld const * inset = getInset(i);
+ InsetBase const * inset = getInset(i);
if (inset)
if (inset->directWrite()) {
// international char, let it write
}
-bool Paragraph::checkInsertChar(LyXFont & font)
+bool Paragraph::checkInsertChar(LyXFont &)
{
- if (pimpl_->inset_owner)
- return pimpl_->inset_owner->checkInsertChar(font);
return true;
}
}
-void Paragraph::insertInset(pos_type pos, InsetOld * inset)
+void Paragraph::insertInset(pos_type pos, InsetBase * inset)
{
insertInset(pos, inset, LyXFont(LyXFont::ALL_INHERIT));
}
-void Paragraph::insertInset(pos_type pos, InsetOld * inset,
+void Paragraph::insertInset(pos_type pos, InsetBase * inset,
LyXFont const & font, Change change)
{
pimpl_->insertInset(pos, inset, font, change);
}
-InsetOld * Paragraph::getInset(pos_type pos)
+InsetBase * Paragraph::getInset(pos_type pos)
{
BOOST_ASSERT(pos < size());
return insetlist.get(pos);
}
-InsetOld const * Paragraph::getInset(pos_type pos) const
+InsetBase const * Paragraph::getInset(pos_type pos) const
{
BOOST_ASSERT(pos < size());
return insetlist.get(pos);
LyXFont const Paragraph::getFontSettings(BufferParams const & bparams,
pos_type pos) const
{
- BOOST_ASSERT(pos <= size());
+ if (pos > size()) {
+ lyxerr << " pos: " << pos << " size: " << size() << endl;
+ BOOST_ASSERT(pos <= size());
+ }
Pimpl::FontList::const_iterator cit = pimpl_->fontlist.begin();
Pimpl::FontList::const_iterator end = pimpl_->fontlist.end();
if (it->pos() >= pos)
break;
}
- unsigned int i = std::distance(beg, it);
+ unsigned int i = distance(beg, it);
bool notfound = (it == endit);
if (!notfound && pimpl_->fontlist[i].font() == font)
bool Paragraph::hasSameLayout(Paragraph const & par) const
{
- return
- par.layout() == layout() &&
- params().sameLayout(par.params());
+ return par.layout() == layout() && params().sameLayout(par.params());
}
layout(new_layout);
params().labelWidthString(string());
params().align(LYX_ALIGN_LAYOUT);
- params().spaceTop(VSpace(VSpace::NONE));
- params().spaceBottom(VSpace(VSpace::NONE));
params().spacing(Spacing(Spacing::Default));
}
// returns -1 if inset not found
-int Paragraph::getPositionOfInset(InsetOld const * inset) const
+int Paragraph::getPositionOfInset(InsetBase const * inset) const
{
// Find the entry.
InsetList::const_iterator it = insetlist.begin();
InsetBibitem * Paragraph::bibitem() const
{
if (!insetlist.empty()) {
- InsetOld * inset = insetlist.begin()->inset;
- if (inset->lyxCode() == InsetOld::BIBTEX_CODE)
+ InsetBase * inset = insetlist.begin()->inset;
+ if (inset->lyxCode() == InsetBase::BIBTEX_CODE)
return static_cast<InsetBibitem *>(inset);
}
return 0;
namespace {
-/* paragraphs inside floats need different alignment tags to avoid
-unwanted space */
+// paragraphs inside floats need different alignment tags to avoid
+// unwanted space
bool noTrivlistCentering(UpdatableInset const * inset)
{
if (inset && inset->owner()) {
- InsetOld::Code const code = inset->owner()->lyxCode();
- return code == InsetOld::FLOAT_CODE ||
- code == InsetOld::WRAP_CODE;
+ InsetBase::Code const code = inset->owner()->lyxCode();
+ return code == InsetBase::FLOAT_CODE ||
+ code == InsetBase::WRAP_CODE;
}
return false;
}
}
enum PAR_TAG {
- NONE=0,
+ PAR_NONE=0,
TT = 1,
SF = 2,
BF = 4,
string tag_name(PAR_TAG const & pt) {
switch (pt) {
- case NONE: return "!-- --";
+ case PAR_NONE: return "!-- --";
case TT: return "tt";
case SF: return "sf";
case BF: return "bf";
// parsing main loop
for (pos_type i = 0; i < size(); ++i) {
- PAR_TAG tag_close = NONE;
+ PAR_TAG tag_close = PAR_NONE;
list < PAR_TAG > tag_open;
LyXFont const font = getFont(buf.params(), i, outerfont);
char c = getChar(i);
+
if (c == Paragraph::META_INSET) {
- InsetOld const * inset = getInset(i);
- inset->linuxdoc(buf, os, runparams);
+ getInset(i)->linuxdoc(buf, os, runparams);
font_old = font;
continue;
}
if (ws && !isFreeSpacing()) {
// in freespacing mode, spaces are
// non-breaking characters
- if (desc_on) {// if char is ' ' then...
-
+ if (desc_on) { // if char is ' ' then...
++char_line_count;
sgmlLineBreak(os, char_line_count, 6);
os << "</tag>";
void Paragraph::simpleDocBookOnePar(Buffer const & buf,
ostream & os,
LyXFont const & outerfont,
- int & desc_on,
OutputParams const & runparams,
- lyx::depth_type depth) const
+ lyx::depth_type depth,
+ bool labelid) const
{
bool emph_flag = false;
LyXLayout_ptr const & style = layout();
+ LyXLayout_ptr const & defaultstyle =
+ buf.params().getLyXTextClass().defaultLayout();
- LyXFont font_old = (style->labeltype == LABEL_MANUAL ? style->labelfont : style->font);
+ LyXFont font_old =
+ style->labeltype == LABEL_MANUAL ? style->labelfont : style->font;
int char_line_count = depth;
- //if (!style.free_spacing)
- // os << string(depth,' ');
+ bool label_closed = true;
+ bool para_closed = true;
+
+ if (style->latextype == LATEX_ITEM_ENVIRONMENT) {
+ string ls = "";
+ Counters & counters = buf.params().getLyXTextClass().counters();
+ if (!style->free_spacing)
+ os << string(depth,' ');
+ if (!style->labeltag().empty()) {
+ os << "<" << style->labeltag() << ">\n";
+ label_closed = false;
+ } else {
+ if (!defaultstyle->latexparam().empty()) {
+ counters.step("para");
+ ls = tostr(counters.value("para"));
+ ls = " id=\""
+ + subst(defaultstyle->latexparam(), "#", ls) + '"';
+ }
+ os << "<" << style->itemtag() << ">\n"
+ << string(depth, ' ') << "<"
+ << defaultstyle->latexname() << ls << ">\n";
+ para_closed = false;
+ }
+ }
// parsing main loop
for (pos_type i = 0; i < size(); ++i) {
}
}
-
if (isInset(i)) {
- InsetOld const * inset = getInset(i);
+ InsetBase const * inset = getInset(i);
// don't print the inset in position 0 if desc_on == 3 (label)
- if (i || desc_on != 3) {
+ //if (i || desc_on != 3) {
+ if (!labelid) {
if (style->latexparam() == "CDATA")
os << "]]>";
inset->docbook(buf, os, runparams);
os << c;
} else if (isFreeSpacing() || c != ' ') {
os << str;
- } else if (desc_on == 1) {
+ } else if (!style->labeltag().empty() && !label_closed) {
++char_line_count;
- os << "\n</term><listitem><para>";
- desc_on = 2;
+ os << "\n</" << style->labeltag() << "><"
+ << style->itemtag() << "><"
+ << defaultstyle->latexname() << ">";
+ label_closed = true;
+ para_closed = false;
} else {
os << ' ';
}
}
// resets description flag correctly
- if (desc_on == 1) {
+ if (!label_closed) {
// <term> not closed...
- os << "</term>\n<listitem><para> </para>";
+ os << "</" << style->labeltag() << ">\n<"
+ << style->itemtag() << "><"
+ << defaultstyle->latexname() << "> ";
+ }
+ if (!para_closed) {
+ os << "\n" << string(depth, ' ') << "</"
+ << defaultstyle->latexname() << ">\n";
}
if (style->free_spacing)
os << '\n';
bool Paragraph::isHfill(pos_type pos) const
{
return IsInsetChar(getChar(pos))
- && getInset(pos)->lyxCode() == InsetOld::HFILL_CODE;
+ && getInset(pos)->lyxCode() == InsetBase::HFILL_CODE;
}
bool Paragraph::isNewline(pos_type pos) const
{
return IsInsetChar(getChar(pos))
- && getInset(pos)->lyxCode() == InsetOld::NEWLINE_CODE;
+ && getInset(pos)->lyxCode() == InsetBase::NEWLINE_CODE;
}
return lyxrc.rtl_support
&& getParLanguage(bparams)->RightToLeft()
&& !(inInset() && inInset()->owner() &&
- inInset()->owner()->lyxCode() == InsetOld::ERT_CODE);
+ inInset()->owner()->lyxCode() == InsetBase::ERT_CODE);
}
}
-bool Paragraph::isMultiLingual(BufferParams const & bparams)
+bool Paragraph::isMultiLingual(BufferParams const & bparams) const
{
Language const * doc_language = bparams.language;
Pimpl::FontList::const_iterator cit = pimpl_->fontlist.begin();
if (IsPrintable(c))
s += c;
else if (c == META_INSET &&
- getInset(i)->lyxCode() == InsetOld::MATH_CODE) {
+ getInset(i)->lyxCode() == InsetBase::MATH_CODE) {
ostringstream os;
getInset(i)->plaintext(buffer, os, runparams);
s += subst(STRCONV(os.str()),'\n',' ');
void Paragraph::setChange(lyx::pos_type pos, Change::Type type)
{
pimpl_->setChange(pos, type);
-
}
<< id() << " of size " << siz
<< " is a bit silly !" << endl;
BOOST_ASSERT(false);
- return '\0';
}
return text_[pos];
LyXLayout_ptr const & Paragraph::layout() const
{
/*
- InsetOld * inset = inInset();
- if (inset && inset->lyxCode() == InsetOld::ENVIRONMENT_CODE)
+ InsetBase * inset = inInset();
+ if (inset && inset->lyxCode() == InsetBase::ENVIRONMENT_CODE)
return static_cast<InsetEnvironment*>(inset)->layout();
*/
return layout_;
return true;
// for now we just need this, later should we need this in some
- // other way we can always add a function to InsetOld too.
+ // other way we can always add a function to InsetBase too.
if (pimpl_->inset_owner && pimpl_->inset_owner->owner())
- return pimpl_->inset_owner->owner()->lyxCode() == InsetOld::ERT_CODE;
+ return pimpl_->inset_owner->owner()->lyxCode() == InsetBase::ERT_CODE;
return false;
}
if (layout()->keepempty)
return true;
if (pimpl_->inset_owner && pimpl_->inset_owner->owner())
- return pimpl_->inset_owner->owner()->lyxCode() == InsetOld::ERT_CODE;
+ return pimpl_->inset_owner->owner()->lyxCode() == InsetBase::ERT_CODE;
return false;
}
}
+RowList::const_iterator Paragraph::getRow(pos_type pos) const
+{
+ RowList::const_iterator rit = rows.end();
+ RowList::const_iterator const begin = rows.begin();
+
+ for (--rit; rit != begin && rit->pos() > pos; --rit)
+ ;
+
+ return rit;
+}
+
+
+size_t Paragraph::row(pos_type pos) const
+{
+ RowList::const_iterator rit = rows.end();
+ RowList::const_iterator const begin = rows.begin();
+
+ for (--rit; rit != begin && rit->pos() > pos; --rit)
+ ;
+
+ return rit - begin;
+}
+
+
unsigned char Paragraph::transformChar(unsigned char c, pos_type pos) const
{
if (!Encodings::is_arabic(c))