-void LyXParagraph::SimpleDocBookOneTablePar(ostream & os, string & extra,
- int & desc_on, int depth)
-{
- if (!table) return;
- lyxerr[Debug::LATEX] << "SimpleDocbookOneTablePar... " << this << endl;
- int column = 0;
- LyXFont font1, font2;
- char c;
- Inset * inset;
- size_type main_body;
- bool emph_flag = false;
-
- LyXLayout const & style =
- textclasslist.Style(current_view->buffer()->params.textclass,
- GetLayout());
-
- if (style.labeltype != LABEL_MANUAL)
- main_body = 0;
- else
- main_body = BeginningOfMainBody();
-
- // Gets paragraph main font.
- if (main_body > 0)
- font1 = style.labelfont;
- else
- font1 = style.font;
-
- int char_line_count = depth;
- os << newlineAndDepth(depth);
- if (footnoteflag == LyXParagraph::NO_FOOTNOTE) {
- os << "<INFORMALTABLE>"
- << newlineAndDepth(++depth);
- }
- int current_cell_number = -1;
- int tmp = table->DocBookEndOfCell(os, current_cell_number, depth);
-
- // Parsing main loop.
- for (size_type i = 0; i < size(); ++i) {
- c = GetChar(i);
- if (table->IsContRow(current_cell_number+1)) {
- if (c == LyXParagraph::META_NEWLINE)
- ++current_cell_number;
- continue;
- }
- ++column;
-
- // Fully instantiated font
- font2 = getFont(i);
-
- // Handle <emphasis> tag.
- if (font1.emph() != font2.emph() && i) {
- if (font2.emph() == LyXFont::ON) {
- os << "<emphasis>";
- emph_flag= true;
- } else if (emph_flag) {
- os << "</emphasis>";
- emph_flag= false;
- }
- }
- if (c == LyXParagraph::META_NEWLINE) {
- // We have only to control for emphasis open here!
- if (emph_flag) {
- os << "</emphasis>";
- emph_flag= false;
- }
- font1 = font2 = getFont(-1);
- ++current_cell_number;
- if (table->CellHasContRow(current_cell_number) >= 0) {
- DocBookContTableRows(os, extra, desc_on, i + 1,
- current_cell_number,
- column);
- }
- // if this cell follow only ContRows till end don't
- // put the EndOfCell because it is put after the
- // for(...)
- if (table->ShouldBeVeryLastCell(current_cell_number)) {
- --current_cell_number;
- break;
- }
- tmp = table->DocBookEndOfCell(os,
- current_cell_number,
- depth);
-
- if (tmp > 0)
- column = 0;
- } else if (c == LyXParagraph::META_INSET) {
- inset = GetInset(i);
-#ifdef HAVE_SSTREAM
- ostringstream ost;
- inset->DocBook(ost);
- string tmp_out = ost.str().c_str();
-#else
- ostrstream ost;
- inset->DocBook(ost);
- ost << '\0';
- char * ctmp = ost.str();
- string tmp_out(ctmp);
- delete [] ctmp;
-#endif
- //
- // 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[0] == '@') {
- if(desc_on == 4)
- extra += frontStrip(tmp_out,
- '@');
- else
- os << frontStrip(tmp_out,
- '@');
- } else
- os << tmp_out;
- }
- } else if (font2.latex() == LyXFont::ON) {
- // "TeX"-Mode on == > SGML-Mode on.
- if (c != '\0')
- os << c;
- ++char_line_count;
- } else {
- string sgml_string;
- if (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;
- }
- } else {
- os << sgml_string;
- }
- }
- font1 = font2;
- }
-
- // Needed if there is an optional argument but no contents.
- if (main_body > 0 && main_body == size()) {
- font1 = style.font;
- }
-
- if (emph_flag) {
- os << "</emphasis>";
- }
-
- ++current_cell_number;
- tmp = table->DocBookEndOfCell(os, current_cell_number, depth);
- // Resets description flag correctly.
- switch(desc_on){
- case 1:
- // <term> not closed...
- os << "</term>";
- break;
- }
- if (footnoteflag == LyXParagraph::NO_FOOTNOTE)
- os << "</INFORMALTABLE>";
- os << '\n';
- lyxerr[Debug::LATEX] << "SimpleDocbookOneTablePar...done "
- << this << endl;
-}
-
-
-void LyXParagraph::DocBookContTableRows(ostream & os, string & extra,
- int & desc_on,
- LyXParagraph::size_type i,
- int current_cell_number, int &column)
-
-{
- if (!table) return;
-
- lyxerr[Debug::LATEX] << "DocBookContTableRows... " << this << endl;
-
- LyXFont font2;
- char c;
- Inset * inset;
- //string emph = "emphasis";
- bool emph_flag = false;
- int char_line_count = 0;
-
- LyXLayout const & style =
- textclasslist.Style(current_view->buffer()->params.textclass,
- GetLayout());
-
- size_type main_body;
- if (style.labeltype != LABEL_MANUAL)
- main_body = 0;
- else
- main_body = BeginningOfMainBody();
-
- // Gets paragraph main font.
- LyXFont font1;
- if (main_body > 0)
- font1 = style.labelfont;
- else
- font1 = style.font;
-
- size_type lastpos = i;
- int cell = table->CellHasContRow(current_cell_number);
- ++current_cell_number;
- while(cell >= 0) {
- // first find the right position
- i = lastpos;
- for (; i < size() && current_cell_number < cell; ++i) {
- c = GetChar(i);
- if (c == LyXParagraph::META_NEWLINE)
- ++current_cell_number;
- }
- lastpos = i;
- c = GetChar(i);
- // I don't know how to handle this so I comment it
- // for the moment (Jug)
-// if (table->Linebreaks(table->FirstVirtualCell(cell))) {
-// file += " \\\\\n";
-// column = 0;
-// } else
- if ((c != ' ') && (c != LyXParagraph::META_NEWLINE)) {
- os << ' ';
- }
-
- for (; i < size()
- && (c = GetChar(i)) != LyXParagraph::META_NEWLINE;
- ++i) {
- ++column;
-
- // Fully instantiated font
- font2 = getFont(i);
-
- // Handle <emphasis> tag.
- if (font1.emph() != font2.emph() && i) {
- if (font2.emph() == LyXFont::ON) {
- os << "<emphasis>";
- emph_flag= true;
- } else if (emph_flag) {
- os << "</emphasis>";
- emph_flag= false;
- }
- }
- if (c == LyXParagraph::META_INSET) {
- inset = GetInset(i);
-#ifdef HAVE_SSTREAM
- ostringstream ost;
- inset->DocBook(ost);
- string tmp_out = ost.str().c_str();
-#else
- ostrstream ost;
- inset->DocBook(ost);
- ost << '\0';
- char * ctmp = ost.str();
- string tmp_out(ctmp);
- delete [] ctmp;
-#endif
- //
- // 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[0] == '@') {
- if(desc_on == 4)
- extra += frontStrip(tmp_out, '@');
- else
- os << frontStrip(tmp_out, '@');
- } else
- os << tmp_out;
- }
- } else if (font2.latex() == LyXFont::ON) {
- // "TeX"-Mode on == > SGML-Mode on.
- if (c!= '\0')
- os << c;
- ++char_line_count;
- } else {
- string sgml_string;
- if (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;
- }
- } else {
- os << sgml_string;
- }
- }
- }
- // we have only to control for emphasis open here!
- if (emph_flag) {
- os << "</emphasis>";
- emph_flag= false;
- }
- font1 = font2 = getFont(-1);
- cell = table->CellHasContRow(current_cell_number);
- }
- lyxerr[Debug::LATEX] << "DocBookContTableRows...done " << this << endl;
-}
-
-