mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-25 10:58:52 +00:00
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:
parent
fe00b6f1a2
commit
26db00333d
16
ChangeLog
16
ChangeLog
@ -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
|
||||
|
@ -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
|
||||
|
@ -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 \
|
||||
|
@ -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
231
src/tabular-old.C
Normal 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();
|
||||
}
|
572
src/tabular.C
572
src/tabular.C
@ -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,26 +1421,54 @@ void l_getline(istream & is, string & str)
|
||||
}
|
||||
|
||||
|
||||
#ifndef USE_OLD_READFORMAT
|
||||
//#ifndef USE_OLD_READFORMAT
|
||||
|
||||
void LyXTabular::Read(Buffer const * buf, LyXLex & lex)
|
||||
{
|
||||
string line;
|
||||
istream & is = lex.getStream();
|
||||
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 version;
|
||||
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;
|
||||
int columns_arg;
|
||||
if (!getTokenValue(line, "version", version))
|
||||
return;
|
||||
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)
|
||||
{
|
||||
|
@ -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_;
|
||||
///
|
||||
|
Loading…
Reference in New Issue
Block a user