support both version 1 and 2 of tabular, some other small changes

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@1309 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Lars Gullik Bjønnes 2001-01-09 20:17:06 +00:00
parent fe00b6f1a2
commit 26db00333d
7 changed files with 626 additions and 230 deletions

View File

@ -1,3 +1,19 @@
2001-01-09 Lars Gullik Bjønnes <larsbj@lyx.org>
* src/tabular.C (ReadNew): new method
(Read): changed to call ReadNew or ReadOld depending on the
tabular version found.
* src/tabular-old.C: new file with the support functions and the
ReadOld method.
(ReadOld): new method
* src/frontends/xforms/FormDocument.C (CheckChoiceClass): make tc
unsigned to remove a signed/usigned warning.
* src/tabular.C (tostr): new spesializations, replaces type2string
(Write): use the new spesializations
2001-01-09 Juergen Vigna <jug@sad.it>
* src/tabular.C (OldFormatRead): convert the footer/header information

View File

@ -53,35 +53,35 @@ src/frontends/kde/refdlg.C
src/frontends/kde/tocdlg.C
src/frontends/kde/urldlg.C
src/frontends/xforms/FormBase.h
src/frontends/xforms/FormCitation.C
src/frontends/xforms/form_citation.C
src/frontends/xforms/FormCopyright.C
src/frontends/xforms/FormCitation.C
src/frontends/xforms/form_copyright.C
src/frontends/xforms/FormDocument.C
src/frontends/xforms/FormCopyright.C
src/frontends/xforms/form_document.C
src/frontends/xforms/FormError.C
src/frontends/xforms/FormDocument.C
src/frontends/xforms/form_error.C
src/frontends/xforms/FormGraphics.C
src/frontends/xforms/FormError.C
src/frontends/xforms/form_graphics.C
src/frontends/xforms/FormIndex.C
src/frontends/xforms/FormGraphics.C
src/frontends/xforms/form_index.C
src/frontends/xforms/FormIndex.C
src/frontends/xforms/FormInset.h
src/frontends/xforms/FormParagraph.C
src/frontends/xforms/form_paragraph.C
src/frontends/xforms/FormPreferences.C
src/frontends/xforms/FormParagraph.C
src/frontends/xforms/form_preferences.C
src/frontends/xforms/FormPrint.C
src/frontends/xforms/FormPreferences.C
src/frontends/xforms/form_print.C
src/frontends/xforms/FormRef.C
src/frontends/xforms/FormPrint.C
src/frontends/xforms/form_ref.C
src/frontends/xforms/FormTabular.C
src/frontends/xforms/FormRef.C
src/frontends/xforms/form_tabular.C
src/frontends/xforms/FormTabularCreate.C
src/frontends/xforms/FormTabular.C
src/frontends/xforms/form_tabular_create.C
src/frontends/xforms/FormToc.C
src/frontends/xforms/FormTabularCreate.C
src/frontends/xforms/form_toc.C
src/frontends/xforms/FormUrl.C
src/frontends/xforms/FormToc.C
src/frontends/xforms/form_url.C
src/frontends/xforms/FormUrl.C
src/frontends/xforms/input_validators.C
src/frontends/xforms/Menubar_pimpl.C
src/frontends/xforms/xform_helpers.C

View File

@ -201,6 +201,7 @@ lyx_SOURCES = \
stl_string_fwd.h \
tabular.C \
tabular.h \
tabular-old.C \
tex-accent.C \
tex-accent.h \
tex-defs.h \

View File

@ -1085,7 +1085,7 @@ void FormDocument::CheckChoiceClass(FL_OBJECT * ob, long)
ProhibitInput(lv_->view());
#ifdef USE_CLASS_COMBO
int tc = combo_doc_class->get() - 1;
unsigned int tc = combo_doc_class->get() - 1;
string tct = combo_doc_class->getline();
#else
int tc = fl_get_choice(ob) - 1;

231
src/tabular-old.C Normal file
View File

@ -0,0 +1,231 @@
/* This file is part of
* ======================================================
*
* LyX, The Document Processor
*
* Copyright 2000 The LyX Team.
*
* @author: Jürgen Vigna
*
* ======================================================
*/
#include <config.h>
#include "tabular.h"
#include "debug.h"
#include "support/lstrings.h"
using std::istream;
using std::getline;
using std::endl;
static
bool getTokenValue(string const & str, const char * token, string & ret)
{
size_t token_length = strlen(token);
string::size_type pos = str.find(token);
if (pos == string::npos || pos+token_length+1 >= str.length()
|| str[pos+token_length] != '=')
return false;
ret.erase();
pos += token_length + 1;
char ch = str[pos];
if ((ch != '"') && (ch != '\'')) { // only read till next space
ret += ch;
ch = ' ';
}
while((pos < str.length() - 1) && (str[++pos] != ch))
ret += str[pos];
return true;
}
static
bool getTokenValue(string const & str, const char * token, int & num)
{
string::size_type pos = str.find(token);
char ch = str[pos + strlen(token)];
if ((pos == string::npos) || (ch != '='))
return false;
string ret;
pos += strlen(token) + 1;
ch = str[pos];
if ((ch != '"') && (ch != '\'')) { // only read till next space
if (!isdigit(ch))
return false;
ret += ch;
}
++pos;
while((pos < str.length() - 1) && isdigit(str[pos]))
ret += str[pos++];
num = strToInt(ret);
return true;
}
static
bool getTokenValue(string const & str, const char * token, LyXAlignment & num)
{
int tmp;
bool const ret = getTokenValue(str, token, tmp);
num = static_cast<LyXAlignment>(tmp);
return ret;
}
static
bool getTokenValue(string const & str, const char * token,
LyXTabular::VAlignment & num)
{
int tmp;
bool const ret = getTokenValue(str, token, tmp);
num = static_cast<LyXTabular::VAlignment>(tmp);
return ret;
}
static
bool getTokenValue(string const & str, const char * token,
LyXTabular::BoxType & num)
{
int tmp;
bool ret = getTokenValue(str, token, tmp);
num = static_cast<LyXTabular::BoxType>(tmp);
return ret;
}
static
bool getTokenValue(string const & str, const char * token, bool & flag)
{
string::size_type pos = str.find(token);
char ch = str[pos + strlen(token)];
if ((pos == string::npos) || (ch != '='))
return false;
string ret;
pos += strlen(token) + 1;
ch = str[pos];
if ((ch != '"') && (ch != '\'')) { // only read till next space
if (!isdigit(ch))
return false;
ret += ch;
}
++pos;
while((pos < str.length() - 1) && isdigit(str[pos]))
ret += str[pos++];
flag = strToInt(ret);
return true;
}
static inline
void l_getline(istream & is, string & str)
{
getline(is, str);
while(str.empty())
getline(is, str);
}
void LyXTabular::ReadOld(Buffer const * buf, istream & is,
LyXLex & lex, string const & l)
{
string line(l);
int rows_arg;
int columns_arg;
if (!getTokenValue(line, "rows", rows_arg))
return;
if (!getTokenValue(line, "columns", columns_arg))
return;
Init(rows_arg, columns_arg);
l_getline(is, line);
if (!prefixIs(line, "<Features ")) {
lyxerr << "Wrong tabular format (expected <Feture ...> got" <<
line << ")" << endl;
return;
}
getTokenValue(line, "islongtable", is_long_tabular);
getTokenValue(line, "endhead", endhead);
getTokenValue(line, "endfirsthead", endfirsthead);
getTokenValue(line, "endfoot", endfoot);
getTokenValue(line, "endlastfoot", endlastfoot);
for (int i = 0; i < rows_; ++i) {
l_getline(is, line);
if (!prefixIs(line, "<Row ")) {
lyxerr << "Wrong tabular format (expected <Row ...> got" <<
line << ")" << endl;
return;
}
getTokenValue(line, "topline", row_info[i].top_line);
getTokenValue(line, "bottomline", row_info[i].bottom_line);
getTokenValue(line, "newpage", row_info[i].newpage);
for (int j = 0; j < columns_; ++j) {
l_getline(is,line);
if (!prefixIs(line,"<Column")) {
lyxerr << "Wrong tabular format (expected <Column ...> got" <<
line << ")" << endl;
return;
}
if (!i) {
getTokenValue(line, "alignment", column_info[j].alignment);
getTokenValue(line, "valignment", column_info[j].valignment);
getTokenValue(line, "leftline", column_info[j].left_line);
getTokenValue(line, "rightline", column_info[j].right_line);
getTokenValue(line, "width", column_info[j].p_width);
getTokenValue(line, "special", column_info[j].align_special);
}
l_getline(is, line);
if (!prefixIs(line, "<Cell")) {
lyxerr << "Wrong tabular format (expected <Cell ...> got" <<
line << ")" << endl;
return;
}
getTokenValue(line, "multicolumn", cell_info[i][j].multicolumn);
getTokenValue(line, "alignment", cell_info[i][j].alignment);
getTokenValue(line, "valignment", cell_info[i][j].valignment);
getTokenValue(line, "topline", cell_info[i][j].top_line);
getTokenValue(line, "bottomline", cell_info[i][j].bottom_line);
getTokenValue(line, "leftline", cell_info[i][j].left_line);
getTokenValue(line, "rightline", cell_info[i][j].right_line);
getTokenValue(line, "rotate", cell_info[i][j].rotate);
getTokenValue(line, "usebox", cell_info[i][j].usebox);
getTokenValue(line, "width", cell_info[i][j].p_width);
getTokenValue(line, "special", cell_info[i][j].align_special);
l_getline(is, line);
if (prefixIs(line, "\\begin_inset")) {
cell_info[i][j].inset.Read(buf, lex);
l_getline(is, line);
}
if (line != "</Cell>") {
lyxerr << "Wrong tabular format (expected </Cell> got" <<
line << ")" << endl;
return;
}
l_getline(is, line);
if (line != "</Column>") {
lyxerr << "Wrong tabular format (expected </Column> got" <<
line << ")" << endl;
return;
}
}
l_getline(is, line);
if (line != "</Row>") {
lyxerr << "Wrong tabular format (expected </Row> got" <<
line << ")" << endl;
return;
}
}
while (line != "</LyXTabular>") {
l_getline(is, line);
}
set_row_column_number_info();
}

View File

@ -943,7 +943,68 @@ string const write_attribute(string const & name, bool value)
#endif
string const type2string(LyXAlignment num)
// #if 0
// static inline
// string const type2string(LyXAlignment num)
// {
// switch(num) {
// case LYX_ALIGN_NONE:
// return "none";
// case LYX_ALIGN_BLOCK:
// return "block";
// case LYX_ALIGN_LEFT:
// return "left";
// case LYX_ALIGN_CENTER:
// return "center";
// case LYX_ALIGN_RIGHT:
// return "right";
// case LYX_ALIGN_LAYOUT:
// return "layout";
// case LYX_ALIGN_SPECIAL:
// return "special";
// }
// return string();
// }
// static inline
// string const type2string(LyXTabular::VAlignment num)
// {
// switch(num) {
// case LyXTabular::LYX_VALIGN_TOP:
// return "top";
// case LyXTabular::LYX_VALIGN_CENTER:
// return "center";
// case LyXTabular::LYX_VALIGN_BOTTOM:
// return "bottom";
// }
// return string();
// }
// static inline
// string const type2string(LyXTabular::BoxType num)
// {
// switch(num) {
// case LyXTabular::BOX_NONE:
// return "none";
// case LyXTabular::BOX_PARBOX:
// return "parbox";
// case LyXTabular::BOX_MINIPAGE:
// return "minipage";
// }
// return string();
// }
// static inline
// string const type2string(bool flag)
// {
// return (flag ? "true" : "false");
// }
// #else
template<>
inline
string const tostr(LyXAlignment const & num)
{
switch(num) {
case LYX_ALIGN_NONE:
@ -965,7 +1026,9 @@ string const type2string(LyXAlignment num)
}
string const type2string(LyXTabular::VAlignment num)
template<>
inline
string const tostr(LyXTabular::VAlignment const & num)
{
switch(num) {
case LyXTabular::LYX_VALIGN_TOP:
@ -979,7 +1042,9 @@ string const type2string(LyXTabular::VAlignment num)
}
string const type2string(LyXTabular::BoxType num)
template<>
inline
string const tostr(LyXTabular::BoxType const & num)
{
switch(num) {
case LyXTabular::BOX_NONE:
@ -992,25 +1057,35 @@ string const type2string(LyXTabular::BoxType num)
return string();
}
// We already have a function like this in lstring.h (Lgb)
//string const type2string(bool flag)
//{
// return (flag ? "true" : "false");
//}
//#endif
string const type2string(bool flag)
{
return (flag ? "true" : "false");
}
void LyXTabular::Write(Buffer const * buf, ostream & os) const
{
// header line
os << "<LyXTabular"
<< write_attribute("version", 1)
<< write_attribute("version", 2)
<< write_attribute("rows", rows_)
<< write_attribute("columns", columns_)
<< ">\n";
// global longtable options
os << "<Features"
<< write_attribute("rotate", type2string(rotate))
<< write_attribute("islongtable", type2string(is_long_tabular))
//#if 0
// << write_attribute("rotate", type2string(rotate))
// << write_attribute("islongtable", type2string(is_long_tabular))
//#else
<< write_attribute("rotate", tostr(rotate))
<< write_attribute("islongtable", tostr(is_long_tabular))
//#endif
<< write_attribute("endhead", endhead)
<< write_attribute("endfirsthead", endfirsthead)
<< write_attribute("endfoot", endfoot)
@ -1018,10 +1093,17 @@ void LyXTabular::Write(Buffer const * buf, ostream & os) const
<< ">\n";
for (int j = 0; j < columns_; ++j) {
os << "<Column"
<< write_attribute("alignment", type2string(column_info[j].alignment))
<< write_attribute("valignment", type2string(column_info[j].valignment))
<< write_attribute("leftline", type2string(column_info[j].left_line))
<< write_attribute("rightline", type2string(column_info[j].right_line))
//#if 0
// << write_attribute("alignment", type2string(column_info[j].alignment))
// << write_attribute("valignment", type2string(column_info[j].valignment))
// << write_attribute("leftline", type2string(column_info[j].left_line))
// << write_attribute("rightline", type2string(column_info[j].right_line))
//#else
<< write_attribute("alignment", tostr(column_info[j].alignment))
<< write_attribute("valignment", tostr(column_info[j].valignment))
<< write_attribute("leftline", tostr(column_info[j].left_line))
<< write_attribute("rightline", tostr(column_info[j].right_line))
//#endif
<< write_attribute("width",
VSpace(column_info[j].p_width)
.asLyXCommand())
@ -1030,18 +1112,32 @@ void LyXTabular::Write(Buffer const * buf, ostream & os) const
}
for (int i = 0; i < rows_; ++i) {
os << "<Row"
<< write_attribute("topline", type2string(row_info[i].top_line))
<< write_attribute("bottomline", type2string(row_info[i].bottom_line))
<< write_attribute("newpage", type2string(row_info[i].newpage))
//#if 0
// << write_attribute("topline", type2string(row_info[i].top_line))
// << write_attribute("bottomline", type2string(row_info[i].bottom_line))
// << write_attribute("newpage", type2string(row_info[i].newpage))
//#else
<< write_attribute("topline", tostr(row_info[i].top_line))
<< write_attribute("bottomline", tostr(row_info[i].bottom_line))
<< write_attribute("newpage", tostr(row_info[i].newpage))
//#endif
<< ">\n";
for (int j = 0; j < columns_; ++j) {
#if 0
if (!i) {
os << "<Column"
<< write_attribute("alignment", type2string(column_info[j].alignment))
<< write_attribute("valignment", type2string(column_info[j].valignment))
<< write_attribute("leftline", type2string(column_info[j].left_line))
<< write_attribute("rightline", type2string(column_info[j].right_line))
//#if 0
// << write_attribute("alignment", type2string(column_info[j].alignment))
// << write_attribute("valignment", type2string(column_info[j].valignment))
// << write_attribute("leftline", type2string(column_info[j].left_line))
// << write_attribute("rightline", type2string(column_info[j].right_line))
//#else
<< write_attribute("alignment", tostr(column_info[j].alignment))
<< write_attribute("valignment", tostr(column_info[j].valignment))
<< write_attribute("leftline", tostr(column_info[j].left_line))
<< write_attribute("rightline", tostr(column_info[j].right_line))
//#endif
<< write_attribute("width",
VSpace(column_info[j].p_width)
.asLyXCommand())
@ -1053,14 +1149,25 @@ void LyXTabular::Write(Buffer const * buf, ostream & os) const
#endif
os << "<Cell"
<< write_attribute("multicolumn", cell_info[i][j].multicolumn)
<< write_attribute("alignment", type2string(cell_info[i][j].alignment))
<< write_attribute("valignment", type2string(cell_info[i][j].valignment))
<< write_attribute("topline", type2string(cell_info[i][j].top_line))
<< write_attribute("bottomline", type2string(cell_info[i][j].bottom_line))
<< write_attribute("leftline", type2string(cell_info[i][j].left_line))
<< write_attribute("rightline", type2string(cell_info[i][j].right_line))
<< write_attribute("rotate", type2string(cell_info[i][j].rotate))
<< write_attribute("usebox", type2string(cell_info[i][j].usebox))
//#if 0
// << write_attribute("alignment", type2string(cell_info[i][j].alignment))
// << write_attribute("valignment", type2string(cell_info[i][j].valignment))
// << write_attribute("topline", type2string(cell_info[i][j].top_line))
// << write_attribute("bottomline", type2string(cell_info[i][j].bottom_line))
// << write_attribute("leftline", type2string(cell_info[i][j].left_line))
// << write_attribute("rightline", type2string(cell_info[i][j].right_line))
// << write_attribute("rotate", type2string(cell_info[i][j].rotate))
// << write_attribute("usebox", type2string(cell_info[i][j].usebox))
//#else
<< write_attribute("alignment", tostr(cell_info[i][j].alignment))
<< write_attribute("valignment", tostr(cell_info[i][j].valignment))
<< write_attribute("topline", tostr(cell_info[i][j].top_line))
<< write_attribute("bottomline", tostr(cell_info[i][j].bottom_line))
<< write_attribute("leftline", tostr(cell_info[i][j].left_line))
<< write_attribute("rightline", tostr(cell_info[i][j].right_line))
<< write_attribute("rotate", tostr(cell_info[i][j].rotate))
<< write_attribute("usebox", tostr(cell_info[i][j].usebox))
//#endif
<< write_attribute("width", cell_info[i][j].p_width)
<< write_attribute("special", cell_info[i][j].align_special)
<< ">\n";
@ -1078,6 +1185,9 @@ void LyXTabular::Write(Buffer const * buf, ostream & os) const
}
// I would have liked a fromstr template a lot better. (Lgb)
static inline
bool string2type(string const str, LyXAlignment & num)
{
if (str == "none")
@ -1096,6 +1206,7 @@ bool string2type(string const str, LyXAlignment & num)
}
static inline
bool string2type(string const str, LyXTabular::VAlignment & num)
{
if (str == "top")
@ -1110,6 +1221,7 @@ bool string2type(string const str, LyXTabular::VAlignment & num)
}
static inline
bool string2type(string const str, LyXTabular::BoxType & num)
{
if (str == "none")
@ -1124,6 +1236,7 @@ bool string2type(string const str, LyXTabular::BoxType & num)
}
static inline
bool string2type(string const str, bool & num)
{
if (str == "true")
@ -1135,6 +1248,7 @@ bool string2type(string const str, bool & num)
return true;
}
static
bool getTokenValue(string const & str, const char * token, string & ret)
{
@ -1160,7 +1274,7 @@ bool getTokenValue(string const & str, const char * token, string & ret)
//#define USE_OLD_READFORMAT
#ifndef USE_OLD_READFORMAT
//#ifndef USE_OLD_READFORMAT
static
bool getTokenValue(string const & str, const char * token, int & num)
{
@ -1213,90 +1327,90 @@ bool getTokenValue(string const & str, const char * token, bool & flag)
return string2type(tmp, flag);
}
#else
//#else
static
bool getTokenValue(string const & str, const char * token, int & num)
{
string::size_type pos = str.find(token);
char ch = str[pos + strlen(token)];
// static
// bool getTokenValue(string const & str, const char * token, int & num)
// {
// string::size_type pos = str.find(token);
// char ch = str[pos + strlen(token)];
if ((pos == string::npos) || (ch != '='))
return false;
string ret;
pos += strlen(token) + 1;
ch = str[pos];
if ((ch != '"') && (ch != '\'')) { // only read till next space
if (!isdigit(ch))
return false;
ret += ch;
}
++pos;
while((pos < str.length() - 1) && isdigit(str[pos]))
ret += str[pos++];
// if ((pos == string::npos) || (ch != '='))
// return false;
// string ret;
// pos += strlen(token) + 1;
// ch = str[pos];
// if ((ch != '"') && (ch != '\'')) { // only read till next space
// if (!isdigit(ch))
// return false;
// ret += ch;
// }
// ++pos;
// while((pos < str.length() - 1) && isdigit(str[pos]))
// ret += str[pos++];
num = strToInt(ret);
return true;
}
// num = strToInt(ret);
// return true;
// }
static
bool getTokenValue(string const & str, const char * token, LyXAlignment & num)
{
int tmp;
bool const ret = getTokenValue(str, token, tmp);
num = static_cast<LyXAlignment>(tmp);
return ret;
}
// static
// bool getTokenValue(string const & str, const char * token, LyXAlignment & num)
// {
// int tmp;
// bool const ret = getTokenValue(str, token, tmp);
// num = static_cast<LyXAlignment>(tmp);
// return ret;
// }
static
bool getTokenValue(string const & str, const char * token,
LyXTabular::VAlignment & num)
{
int tmp;
bool const ret = getTokenValue(str, token, tmp);
num = static_cast<LyXTabular::VAlignment>(tmp);
return ret;
}
// static
// bool getTokenValue(string const & str, const char * token,
// LyXTabular::VAlignment & num)
// {
// int tmp;
// bool const ret = getTokenValue(str, token, tmp);
// num = static_cast<LyXTabular::VAlignment>(tmp);
// return ret;
// }
static
bool getTokenValue(string const & str, const char * token,
LyXTabular::BoxType & num)
{
int tmp;
bool ret = getTokenValue(str, token, tmp);
num = static_cast<LyXTabular::BoxType>(tmp);
return ret;
}
// static
// bool getTokenValue(string const & str, const char * token,
// LyXTabular::BoxType & num)
// {
// int tmp;
// bool ret = getTokenValue(str, token, tmp);
// num = static_cast<LyXTabular::BoxType>(tmp);
// return ret;
// }
static
bool getTokenValue(string const & str, const char * token, bool & flag)
{
string::size_type pos = str.find(token);
char ch = str[pos + strlen(token)];
// static
// bool getTokenValue(string const & str, const char * token, bool & flag)
// {
// string::size_type pos = str.find(token);
// char ch = str[pos + strlen(token)];
if ((pos == string::npos) || (ch != '='))
return false;
string ret;
pos += strlen(token) + 1;
ch = str[pos];
if ((ch != '"') && (ch != '\'')) { // only read till next space
if (!isdigit(ch))
return false;
ret += ch;
}
++pos;
while((pos < str.length() - 1) && isdigit(str[pos]))
ret += str[pos++];
// if ((pos == string::npos) || (ch != '='))
// return false;
// string ret;
// pos += strlen(token) + 1;
// ch = str[pos];
// if ((ch != '"') && (ch != '\'')) { // only read till next space
// if (!isdigit(ch))
// return false;
// ret += ch;
// }
// ++pos;
// while((pos < str.length() - 1) && isdigit(str[pos]))
// ret += str[pos++];
flag = strToInt(ret);
return true;
}
// flag = strToInt(ret);
// return true;
// }
#endif
// #endif
static inline
void l_getline(istream & is, string & str)
@ -1307,7 +1421,7 @@ void l_getline(istream & is, string & str)
}
#ifndef USE_OLD_READFORMAT
//#ifndef USE_OLD_READFORMAT
void LyXTabular::Read(Buffer const * buf, LyXLex & lex)
{
@ -1321,12 +1435,40 @@ void LyXTabular::Read(Buffer const * buf, LyXLex & lex)
}
int version;
int rows_arg;
int columns_arg;
if (!getTokenValue(line, "version", version))
return;
if (version == 1)
ReadOld(buf, is, lex, line);
else if (version == 2)
ReadNew(buf, is, lex, line);
}
//#if 0
//void LyXTabular::ReadNew(Buffer const * buf, LyXLex & lex)
//{
// string line;
// istream & is = lex.getStream();
//
// l_getline(is, line);
// if (!prefixIs(line, "<LyXTabular ")) {
// OldFormatRead(lex, line);
// return;
// }
//
// int version;
// if (!getTokenValue(line, "version", version))
// return;
//#else
void LyXTabular::ReadNew(Buffer const * buf, istream & is,
LyXLex & lex, string const & l)
{
string line(l);
//#endif
int rows_arg;
if (!getTokenValue(line, "rows", rows_arg))
return;
int columns_arg;
if (!getTokenValue(line, "columns", columns_arg))
return;
Init(rows_arg, columns_arg);
@ -1410,113 +1552,113 @@ void LyXTabular::Read(Buffer const * buf, LyXLex & lex)
set_row_column_number_info();
}
#else
// #else
void LyXTabular::Read(Buffer const * buf, LyXLex & lex)
{
string line;
istream & is = lex.getStream();
// void LyXTabular::Read(Buffer const * buf, LyXLex & lex)
// {
// string line;
// istream & is = lex.getStream();
l_getline(is, line);
if (!prefixIs(line, "<LyXTabular ")) {
OldFormatRead(lex, line);
return;
}
// l_getline(is, line);
// if (!prefixIs(line, "<LyXTabular ")) {
// OldFormatRead(lex, line);
// return;
// }
int version;
int rows_arg;
int columns_arg;
if (!getTokenValue(line, "version", version))
return;
if (!getTokenValue(line, "rows", rows_arg))
return;
if (!getTokenValue(line, "columns", columns_arg))
return;
Init(rows_arg, columns_arg);
l_getline(is, line);
if (!prefixIs(line, "<Features ")) {
lyxerr << "Wrong tabular format (expected <Feture ...> got" <<
line << ")" << endl;
return;
}
getTokenValue(line, "islongtable", is_long_tabular);
getTokenValue(line, "endhead", endhead);
getTokenValue(line, "endfirsthead", endfirsthead);
getTokenValue(line, "endfoot", endfoot);
getTokenValue(line, "endlastfoot", endlastfoot);
// int version;
// int rows_arg;
// int columns_arg;
// if (!getTokenValue(line, "version", version))
// return;
// if (!getTokenValue(line, "rows", rows_arg))
// return;
// if (!getTokenValue(line, "columns", columns_arg))
// return;
// Init(rows_arg, columns_arg);
// l_getline(is, line);
// if (!prefixIs(line, "<Features ")) {
// lyxerr << "Wrong tabular format (expected <Feture ...> got" <<
// line << ")" << endl;
// return;
// }
// getTokenValue(line, "islongtable", is_long_tabular);
// getTokenValue(line, "endhead", endhead);
// getTokenValue(line, "endfirsthead", endfirsthead);
// getTokenValue(line, "endfoot", endfoot);
// getTokenValue(line, "endlastfoot", endlastfoot);
for (int i = 0; i < rows_; ++i) {
l_getline(is, line);
if (!prefixIs(line, "<Row ")) {
lyxerr << "Wrong tabular format (expected <Row ...> got" <<
line << ")" << endl;
return;
}
getTokenValue(line, "topline", row_info[i].top_line);
getTokenValue(line, "bottomline", row_info[i].bottom_line);
getTokenValue(line, "newpage", row_info[i].newpage);
for (int j = 0; j < columns_; ++j) {
l_getline(is,line);
if (!prefixIs(line,"<Column")) {
lyxerr << "Wrong tabular format (expected <Column ...> got" <<
line << ")" << endl;
return;
}
if (!i) {
getTokenValue(line, "alignment", column_info[j].alignment);
getTokenValue(line, "valignment", column_info[j].valignment);
getTokenValue(line, "leftline", column_info[j].left_line);
getTokenValue(line, "rightline", column_info[j].right_line);
getTokenValue(line, "width", column_info[j].p_width);
getTokenValue(line, "special", column_info[j].align_special);
}
l_getline(is, line);
if (!prefixIs(line, "<Cell")) {
lyxerr << "Wrong tabular format (expected <Cell ...> got" <<
line << ")" << endl;
return;
}
getTokenValue(line, "multicolumn", cell_info[i][j].multicolumn);
getTokenValue(line, "alignment", cell_info[i][j].alignment);
getTokenValue(line, "valignment", cell_info[i][j].valignment);
getTokenValue(line, "topline", cell_info[i][j].top_line);
getTokenValue(line, "bottomline", cell_info[i][j].bottom_line);
getTokenValue(line, "leftline", cell_info[i][j].left_line);
getTokenValue(line, "rightline", cell_info[i][j].right_line);
getTokenValue(line, "rotate", cell_info[i][j].rotate);
getTokenValue(line, "usebox", cell_info[i][j].usebox);
getTokenValue(line, "width", cell_info[i][j].p_width);
getTokenValue(line, "special", cell_info[i][j].align_special);
l_getline(is, line);
if (prefixIs(line, "\\begin_inset")) {
cell_info[i][j].inset.Read(buf, lex);
l_getline(is, line);
}
if (line != "</Cell>") {
lyxerr << "Wrong tabular format (expected </Cell> got" <<
line << ")" << endl;
return;
}
l_getline(is, line);
if (line != "</Column>") {
lyxerr << "Wrong tabular format (expected </Column> got" <<
line << ")" << endl;
return;
}
}
l_getline(is, line);
if (line != "</Row>") {
lyxerr << "Wrong tabular format (expected </Row> got" <<
line << ")" << endl;
return;
}
}
while (line != "</LyXTabular>") {
l_getline(is, line);
}
set_row_column_number_info();
}
#endif
// for (int i = 0; i < rows_; ++i) {
// l_getline(is, line);
// if (!prefixIs(line, "<Row ")) {
// lyxerr << "Wrong tabular format (expected <Row ...> got" <<
// line << ")" << endl;
// return;
// }
// getTokenValue(line, "topline", row_info[i].top_line);
// getTokenValue(line, "bottomline", row_info[i].bottom_line);
// getTokenValue(line, "newpage", row_info[i].newpage);
// for (int j = 0; j < columns_; ++j) {
// l_getline(is,line);
// if (!prefixIs(line,"<Column")) {
// lyxerr << "Wrong tabular format (expected <Column ...> got" <<
// line << ")" << endl;
// return;
// }
// if (!i) {
// getTokenValue(line, "alignment", column_info[j].alignment);
// getTokenValue(line, "valignment", column_info[j].valignment);
// getTokenValue(line, "leftline", column_info[j].left_line);
// getTokenValue(line, "rightline", column_info[j].right_line);
// getTokenValue(line, "width", column_info[j].p_width);
// getTokenValue(line, "special", column_info[j].align_special);
// }
// l_getline(is, line);
// if (!prefixIs(line, "<Cell")) {
// lyxerr << "Wrong tabular format (expected <Cell ...> got" <<
// line << ")" << endl;
// return;
// }
// getTokenValue(line, "multicolumn", cell_info[i][j].multicolumn);
// getTokenValue(line, "alignment", cell_info[i][j].alignment);
// getTokenValue(line, "valignment", cell_info[i][j].valignment);
// getTokenValue(line, "topline", cell_info[i][j].top_line);
// getTokenValue(line, "bottomline", cell_info[i][j].bottom_line);
// getTokenValue(line, "leftline", cell_info[i][j].left_line);
// getTokenValue(line, "rightline", cell_info[i][j].right_line);
// getTokenValue(line, "rotate", cell_info[i][j].rotate);
// getTokenValue(line, "usebox", cell_info[i][j].usebox);
// getTokenValue(line, "width", cell_info[i][j].p_width);
// getTokenValue(line, "special", cell_info[i][j].align_special);
// l_getline(is, line);
// if (prefixIs(line, "\\begin_inset")) {
// cell_info[i][j].inset.Read(buf, lex);
// l_getline(is, line);
// }
// if (line != "</Cell>") {
// lyxerr << "Wrong tabular format (expected </Cell> got" <<
// line << ")" << endl;
// return;
// }
// l_getline(is, line);
// if (line != "</Column>") {
// lyxerr << "Wrong tabular format (expected </Column> got" <<
// line << ")" << endl;
// return;
// }
// }
// l_getline(is, line);
// if (line != "</Row>") {
// lyxerr << "Wrong tabular format (expected </Row> got" <<
// line << ")" << endl;
// return;
// }
// }
// while (line != "</LyXTabular>") {
// l_getline(is, line);
// }
// set_row_column_number_info();
// }
// #endif
void LyXTabular::OldFormatRead(LyXLex & lex, string const & fl)
{

View File

@ -454,6 +454,12 @@ private: //////////////////////////////////////////////////////////////////
///
typedef std::vector<columnstruct> column_vector;
///
void ReadNew(Buffer const * buf, istream & is,
LyXLex & lex, string const & l);
///
void ReadOld(Buffer const * buf, istream & is,
LyXLex & lex, string const & l);
///
int rows_;
///