",
CellPadding); // CellPadding must be 0, 1, 2, 5 or 10
else
Tbl_TABLE_BeginWideMargin ();
}
void Tbl_TABLE_BeginWideMargin (void)
{
fprintf (Gbl.F.Out,"");
}
void Tbl_TABLE_End (void)
{
fprintf (Gbl.F.Out,"
");
}
/*****************************************************************************/
/**************************** Start/end table row ****************************/
/*****************************************************************************/
void Tbl_TR_Begin (const char *fmt,...)
{
va_list ap;
int NumBytesPrinted;
char *Attr;
if (fmt)
{
if (fmt[0])
{
va_start (ap,fmt);
NumBytesPrinted = vasprintf (&Attr,fmt,ap);
va_end (ap);
if (NumBytesPrinted < 0) // If memory allocation wasn't possible,
// or some other error occurs,
// vasprintf will return -1
Lay_NotEnoughMemoryExit ();
/***** Print HTML *****/
fprintf (Gbl.F.Out,"",Attr);
free ((void *) Attr);
}
else
Tbl_TR_BeginWithoutAttr ();
}
else
Tbl_TR_BeginWithoutAttr ();
Tbl_TR_NestingLevel++;
}
static void Tbl_TR_BeginWithoutAttr (void)
{
fprintf (Gbl.F.Out,"
");
}
void Tbl_TR_End (void)
{
if (Tbl_TR_NestingLevel == 0) // No TR open
Lay_ShowErrorAndExit ("Trying to close unopened TR.");
fprintf (Gbl.F.Out,"
");
Tbl_TR_NestingLevel--;
}
/*****************************************************************************/
/***************************** Table heading cells ***************************/
/*****************************************************************************/
void Tbl_TH (unsigned RowSpan,unsigned ColSpan,const char *Class,const char *Txt)
{
Tbl_TH_Begin (RowSpan,ColSpan,Class);
if (Txt)
if (Txt[0])
fprintf (Gbl.F.Out,"%s",Txt);
Tbl_TH_End ();
}
void Tbl_TH_Begin (unsigned RowSpan,unsigned ColSpan,const char *Class)
{
if (RowSpan > 1 && ColSpan > 1)
{
if (Class)
Tbl_TH_BeginAttr ("rowspan=\"%u\" colspan=\"%u\" class=\"%s\"",
RowSpan,ColSpan,Class);
else
Tbl_TH_BeginAttr ("rowspan=\"%u\" colspan=\"%u\"",
RowSpan,ColSpan);
}
else if (RowSpan > 1)
{
if (Class)
Tbl_TH_BeginAttr ("rowspan=\"%u\" class=\"%s\"",
RowSpan,Class);
else
Tbl_TH_BeginAttr ("rowspan=\"%u\"",
RowSpan);
}
else if (ColSpan > 1)
{
if (Class)
Tbl_TH_BeginAttr ("colspan=\"%u\" class=\"%s\"",
ColSpan,Class);
else
Tbl_TH_BeginAttr ("colspan=\"%u\"",
ColSpan);
}
else
{
if (Class)
Tbl_TH_BeginAttr ("class=\"%s\"",
Class);
else
Tbl_TH_BeginWithoutAttr ();
}
}
static void Tbl_TH_BeginAttr (const char *fmt,...)
{
va_list ap;
int NumBytesPrinted;
char *Attr;
if (fmt)
{
if (fmt[0])
{
va_start (ap,fmt);
NumBytesPrinted = vasprintf (&Attr,fmt,ap);
va_end (ap);
if (NumBytesPrinted < 0) // If memory allocation wasn't possible,
// or some other error occurs,
// vasprintf will return -1
Lay_NotEnoughMemoryExit ();
/***** Print HTML *****/
fprintf (Gbl.F.Out,"",Attr);
free ((void *) Attr);
}
else
Tbl_TH_BeginWithoutAttr ();
}
else
Tbl_TH_BeginWithoutAttr ();
Tbl_TH_NestingLevel++;
}
static void Tbl_TH_BeginWithoutAttr (void)
{
fprintf (Gbl.F.Out," | ");
}
void Tbl_TH_End (void)
{
if (Tbl_TH_NestingLevel == 0) // No TH open
Lay_ShowErrorAndExit ("Trying to close unopened TR.");
fprintf (Gbl.F.Out," | ");
Tbl_TH_NestingLevel--;
}
void Tbl_TH_Empty (unsigned NumColumns)
{
unsigned NumCol;
for (NumCol = 0;
NumCol < NumColumns;
NumCol++)
{
Tbl_TH_BeginAttr (NULL);
Tbl_TH_End ();
}
}
/*****************************************************************************/
/********************************* Table cells *******************************/
/*****************************************************************************/
void Tbl_TD_Begin (const char *fmt,...)
{
va_list ap;
int NumBytesPrinted;
char *Attr;
if (fmt)
{
if (fmt[0])
{
va_start (ap,fmt);
NumBytesPrinted = vasprintf (&Attr,fmt,ap);
va_end (ap);
if (NumBytesPrinted < 0) // If memory allocation wasn't possible,
// or some other error occurs,
// vasprintf will return -1
Lay_NotEnoughMemoryExit ();
/***** Print HTML *****/
fprintf (Gbl.F.Out,"",Attr);
free ((void *) Attr);
}
else
Tbl_TD_BeginWithoutAttr ();
}
else
Tbl_TD_BeginWithoutAttr ();
Tbl_TD_NestingLevel++;
}
static void Tbl_TD_BeginWithoutAttr (void)
{
fprintf (Gbl.F.Out," | ");
}
void Tbl_TD_End (void)
{
if (Tbl_TD_NestingLevel == 0) // No TH open
Lay_ShowErrorAndExit ("Trying to close unopened TR.");
fprintf (Gbl.F.Out," | ");
Tbl_TD_NestingLevel--;
}
void Tbl_TD_Empty (unsigned NumColumns)
{
unsigned NumCol;
for (NumCol = 0;
NumCol < NumColumns;
NumCol++)
{
Tbl_TD_Begin (NULL);
Tbl_TD_End ();
}
}
void Tbl_TD_ColouredEmpty (unsigned NumColumns)
{
unsigned NumCol;
for (NumCol = 0;
NumCol < NumColumns;
NumCol++)
{
Tbl_TD_Begin ("class=\"COLOR%u\"",Gbl.RowEvenOdd);
Tbl_TD_End ();
}
}