#if !NO_HTML
#include <config.h>
-#include <assert.h>
+#include "htmlP.h"
+#include "error.h"
#include <errno.h>
#include <stdlib.h>
#include <ctype.h>
#include "error.h"
#include "filename.h"
#include "getline.h"
-#include "htmlP.h"
#include "output.h"
#include "som.h"
#include "tab.h"
static int postopen (struct file_ext *);
static int preclose (struct file_ext *);
-int
-html_open_global (struct outp_class *this unused)
+static int
+html_open_global (struct outp_class *this UNUSED)
{
return 1;
}
-int
-html_close_global (struct outp_class *this unused)
+static int
+html_close_global (struct outp_class *this UNUSED)
{
return 1;
}
-int
+static int
html_preopen_driver (struct outp_driver *this)
{
struct html_driver_ext *x;
return 1;
}
-int
+static int
html_postopen_driver (struct outp_driver *this)
{
struct html_driver_ext *x = this->ext;
return 1;
}
-int
+static int
html_close_driver (struct outp_driver *this)
{
struct html_driver_ext *x = this->ext;
};
static struct outp_option_info option_info;
-void
+static void
html_option (struct outp_driver *this, const char *key, const struct string *val)
{
struct html_driver_ext *x = this->ext;
break;
case 1:
free (x->file.filename);
- x->file.filename = xstrdup (ds_value (val));
+ x->file.filename = xstrdup (ds_c_str (val));
break;
case string_arg:
{
break;
default:
assert (0);
+ abort ();
}
if (*dest)
free (*dest);
- *dest = xstrdup (ds_value (val));
+ *dest = xstrdup (ds_c_str (val));
}
break;
-#if __CHECKER__
- case 42000:
- assert (0);
-#endif
default:
assert (0);
}
return 1;
}
-int
+static int
html_open_page (struct outp_driver *this)
{
struct html_driver_ext *x = this->ext;
return !ferror (x->file.file);
}
-int
+static int
html_close_page (struct outp_driver *this)
{
struct html_driver_ext *x = this->ext;
static void output_tab_table (struct outp_driver *, struct tab_table *);
-void
+static void
html_submit (struct outp_driver *this, struct som_table *s)
{
extern struct som_table_class tab_table_class;
assert (0);
}
-/* Emit HTML to FILE to change from *OLD_ATTR attributes to NEW_ATTR.
- Sets *OLD_ATTR to NEW_ATTR when done. */
-static void
-change_attributes (FILE *f, int *old_attr, int new_attr)
-{
- if (*old_attr == new_attr)
- return;
-
- if (*old_attr & OUTP_F_B)
- fputs ("</B>", f);
- if (*old_attr & OUTP_F_I)
- fputs ("</I>", f);
- if (new_attr & OUTP_F_I)
- fputs ("<I>", f);
- if (new_attr & OUTP_F_B)
- fputs ("<B>", f);
-
- *old_attr = new_attr;
-}
-
/* Write string S of length LEN to file F, escaping characters as
necessary for HTML. */
static void
{
char *ep = &s[len];
char *bp, *cp;
- int attr = 0;
for (bp = cp = s; bp < ep; bp = cp)
{
assert (0);
}
}
-
- if (attr)
- change_attributes (f, &attr, 0);
}
/* Write table T to THIS output driver. */
{
struct html_driver_ext *x = this->ext;
- tab_hit++;
-
if (t->nr == 1 && t->nc == 1)
{
fputs ("<P>", x->file.file);
if (!ls_empty_p (t->cc))
- escape_string (x->file.file, ls_value (t->cc), ls_length (t->cc));
+ escape_string (x->file.file, ls_c_str (t->cc), ls_length (t->cc));
fputs ("</P>\n", x->file.file);
return;
if (!ls_empty_p (&t->title))
{
fprintf (x->file.file, " <TR>\n <TH COLSPAN=%d>", t->nc);
- escape_string (x->file.file, ls_value (&t->title),
+ escape_string (x->file.file, ls_c_str (&t->title),
ls_length (&t->title));
fputs ("</TH>\n </TR>\n", x->file.file);
}
{
int r;
- struct len_string *cc = t->cc;
unsigned char *ct = t->ct;
for (r = 0; r < t->nr; r++)
int c;
fputs (" <TR>\n", x->file.file);
- for (c = 0; c < t->nc; c++, cc++, ct++)
+ for (c = 0; c < t->nc; c++, ct++)
{
+ struct len_string *cc;
int tag;
char header[128];
char *cp;
+ struct tab_joined_cell *j = NULL;
- if ((*ct & TAB_JOIN)
- && ((struct tab_joined_cell *) ls_value (cc))->hit == tab_hit)
- continue;
+ cc = t->cc + c + r * t->nc;
+ if (*ct & TAB_JOIN)
+ {
+ j = (struct tab_joined_cell *) ls_c_str (cc);
+ cc = &j->contents;
+ if (j->x1 != c || j->y1 != r)
+ continue;
+ }
if (r < t->t || r >= t->nr - t->b
|| c < t->l || c >= t->nc - t->r)
if (*ct & TAB_JOIN)
{
- struct tab_joined_cell *j =
- (struct tab_joined_cell *) ls_value (cc);
- j->hit = tab_hit;
-
if (j->x2 - j->x1 > 1)
cp = spprintf (cp, " COLSPAN=%d", j->x2 - j->x1);
if (j->y2 - j->y1 > 1)
cp = spprintf (cp, " ROWSPAN=%d", j->y2 - j->y1);
+
+ cc = &j->contents;
}
strcpy (cp, ">");
if ( ! (*ct & TAB_EMPTY) )
{
- char *s = ls_value (cc);
+ char *s = ls_c_str (cc);
size_t l = ls_length (cc);
while (l && isspace ((unsigned char) *s))