diff options
author | wl <wl> | 2007-09-19 14:55:54 +0000 |
---|---|---|
committer | wl <wl> | 2007-09-19 14:55:54 +0000 |
commit | e4f206b8a3104ee734b913a2d50980bf5bdf3634 (patch) | |
tree | 814cb9652b873192c9648453480aa48f37c41271 /src/devices/grohtml/html-table.cpp | |
parent | e128c4d2011e4dce3bb8db70fdeb59816f839c40 (diff) | |
download | groff-e4f206b8a3104ee734b913a2d50980bf5bdf3634.tar.gz |
* doc/groff.texinfo: Document new .O register and add cross
reference entries.
* NEWS: Updated.
* src/devices/grohtml/grohtml.man: Document new -V and -y options.
* src/devices/grohtml/html-table.cpp: Add support for XHTML 1.1.
(html_table:: emit_colspan, html_table::emit_td): New methods.
(html_table::emit_col): Use html_table::emit_td.
(html_table::emit_table_header): Use html_table::emit_colspan if
dialect xhtml is specified.
(html_table::finish_row): Updated.
* src/devices/grohtml/html-table.h (html_table): Declare
emit_colspan, emit_td.
* src/devices/grohtml/html-text.cpp: Modified tags to comply with
xhtml if this dialect was requested.
* src/devices/grohtml/html-text.h (html_dialect): New enumeration.
(html_text): Add new variable `dialect'.
* src/devices/grohtml/post-html.cpp: Modify header tags to be XHTML
compliant.
(valid_flag, groff_sig, dialect): New global variables.
(html_printer::handle_valid_flag, html_printer::do_math,
html_printer::write_html_anchor, html_printer::write_xhtml_anchor,
html_printer::do_math, html_printer::handle_valid_flag): New
methods.
(html_printer::emit_line, html_printer::emit_raw,
html_printer::do_check_center, html_printer::write_title,
write_rule, html_printer::writeHeadMetaStyle, generate_img_src,
html_printer::begin_page): Altered to be XHTML compliant.
(html_printer::write_header): Updated.
(html_printer::troff_tag): Call do_math.
(html_printer::insert_split_file, html_printer::do_file_components,
html_printer::write_navigation): Create XHTML file components if
necessary and also produces a groff signature if requested.
(~html_printer): Call writeHeadMetaStyle at appropriate places
depending upon html_dialect.
(html_printer::special): Handle new tags `html<?p>' and `math<?p>'.
(main): Added options -x, -V, and -y.
(usage): Updated.
* src/preproc/eqn/box.cpp: Create a distinction between
the MathML device and the XHTML device.
(do_text): Issue a newline at the end of the equation if XHTML was
specified.
(box::top_level): Prefix the output of an equation by the .MATHML
macro.
(output_string): Suppress \n if XHTML was specified.
* src/preproc/eqn/main.cpp (xhtml): New global flag.
(inline_equation): Skip leading spaces after inline equation for
XHTML device.
(main): Set `xhtml' flag if `-Tmathml:xhtml' is specified.
* src/preproc/eqn/eqn.h (xhtml): New external flag.
* src/preproc/eqn/text.cpp (entity_table): Fix typo.
* src/preproc/html/pre-html.cpp (html_dialect): New enumeration.
(dialect, eqn_flag): New global variables.
(html_system): Improve debugging support.
(alterDeviceTo): Test for -Txhtml when altering device to the image
device and reset to -Txhtml.
(addZ): Renamed to...
(addArg): This.
Introducea a general parameter.
(print_args): New debugging function.
(char_buffer::run_output_filter): Use print_args and addArg rather
than addZ.
(char_buffer::do_html, char_buffer::do_image): Add -rxhtml=1 command
line parameter as an argument to the html generation of text when
xhtml is needed. Include -e on the command line if mathml is
required.
(scanArguments): Allow -e, -V, -y and -x options.
-V, -y are handled by the back end. -e sets `eqn_flag'.
-x determines HTML dialect.
* src/roff/groff/groff.cpp (possible_command): New method
`clear_name'.
(main): Set eflag if -e is present on command line.
Set is_xhtml if -Txhtml is present.
Pass `-x x' to the HTML pre and post processors.
Pass `-e' to the HTML pre processor if required.
Pass `-Tmathml:xhtml' to eqn if XHTML is requested.
* src/roff/troff/input.cpp (init_input_requests): Introduce new
number register `\n[.O]'.
* tmac/s.tmac: (LP): Use .nop for semantic sugar.
(cov*ab-init) reformat.
(@EQ): Use EQN-HTML-IMAGE and friends rather than HTML-IMAGE.
(CHECK-FOOTER-AND-KEEP): Define FS, FE such that they use
<cite></cite> for the html device rather than generate images for
footnotes.
* tmac/troffrc-end: Define EQN-HTML-IMAGE,
EQN-HTML-IMAGE-END, EQN-HTML-IMAGE-RIGHT,
EQN-HTML-IMAGE-LEFT, EQN-HTML-IMAGE-INLINE,
EQN-HTML-DO-IMAGE, EQN-HTML-IMAGE-END as null strings.
* tmac/www.tmac: (HTML<?p>): New macro.
(MATH<?p>): New macro.
(IMG, PIMG, MPIMG, HR): Use XHTML compliant syntax.
(www-emit-ltag): New macro.
(www-push-li): Updated.
(ULS): Ensure that tags are balanced in order by use of
www-emit-ltag.
(ULE): Likewise: Use www-emit-ltag and shut down paragraphs in
order.
(OLS, OLE, DLS, DLE): Ditto.
<global>: Define EQ and EN to EQN-HTML-IMAGE and EQN-HTML-IMAGE-END
respectively.
(www-li-ul, www-li-ol, www-li-dl): Updated.
(EQN-HTML-IMAGE, EQN-HTML-IMAGE-RIGHT, EQN-HTML-IMAGE-LEFT,
EQN-HTML-IMAGE-INLINE, EQN-HTML-DO-IMAGE, EQN-HTML-IMAGE-END,
MATHML): New macros.
Diffstat (limited to 'src/devices/grohtml/html-table.cpp')
-rw-r--r-- | src/devices/grohtml/html-table.cpp | 128 |
1 files changed, 97 insertions, 31 deletions
diff --git a/src/devices/grohtml/html-table.cpp b/src/devices/grohtml/html-table.cpp index 7e5b2dc5..c752b766 100644 --- a/src/devices/grohtml/html-table.cpp +++ b/src/devices/grohtml/html-table.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. * * Gaius Mulley (gaius@glam.ac.uk) wrote html-table.cpp * @@ -41,6 +41,9 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ # define FALSE (1==0) #endif +extern html_dialect dialect; + + tabs::tabs () : tab(NULL) { @@ -294,7 +297,7 @@ void html_table::set_linelength (int linelen) } p = c; } - if (p != NULL && p->right > 0) + if (p != NULL && p->right > 0 && linelength > p->right) add_column(p->no+1, p->right, linelength, 'L'); } @@ -337,10 +340,12 @@ void html_table::emit_table_header (int space) out->nl(); out->put_string("<table width=\"100%\"") - .put_string(" border=0 rules=\"none\" frame=\"void\"\n") + .put_string(" border=\"0\" rules=\"none\" frame=\"void\"\n") .put_string(" cellspacing=\"0\" cellpadding=\"0\""); out->put_string(">") .nl(); + if (dialect == xhtml) + emit_colspan(); out->put_string("<tr valign=\"top\" align=\"left\""); if (space) { out->put_string(" style=\"margin-top: "); @@ -375,6 +380,82 @@ void html_table::set_space (int space) } /* + * emit_colspan - emits a series of colspan entries defining the + * table columns. + */ + +void html_table::emit_colspan (void) +{ + cols *b = columns; + cols *c = columns; + int width = 0; + + out->put_string("<colgroup>"); + while (c != NULL) { + if (b != NULL && b != c && is_gap(b)) + /* + * blank column for gap + */ + out->put_string("<col width=\"") + .put_number(is_gap(b)) + .put_string("%\" class=\"center\"></col>") + .nl(); + + width = (get_right(c)*100 + get_effective_linelength()/2) + / get_effective_linelength() + - (c->left*100 + get_effective_linelength()/2) + /get_effective_linelength(); + switch (c->alignment) { + case 'C': + out->put_string("<col width=\"") + .put_number(width) + .put_string("%\" class=\"center\"></col>") + .nl(); + break; + case 'R': + out->put_string("<col width=\"") + .put_number(width) + .put_string("%\" class=\"right\"></col>") + .nl(); + break; + default: + out->put_string("<col width=\"") + .put_number(width) + .put_string("%\"></col>") + .nl(); + } + b = c; + c = c->next; + } + out->put_string("</colgroup>").nl(); +} + +/* + * emit_td - writes out a <td> tag with a corresponding width + * if the dialect is html4. + */ + +void html_table::emit_td (int percentage, const char *s) +{ + if (percentage) { + if (dialect == html4) { + out->put_string("<td width=\"") + .put_number(percentage) + .put_string("%\""); + if (s != NULL) + out->put_string(s); + out->nl(); + } + else { + out->put_string("<td"); + if (s != NULL) + out->put_string(s); + out->nl(); + } + } +} + +/* * emit_col - moves onto column, n. */ @@ -405,11 +486,7 @@ void html_table::emit_col (int n) // have we a gap? if (last_col != NULL) { - if (is_gap(b)) - out->put_string("<td width=\"") - .put_number(is_gap(b)) - .put_string("%\"></td>") - .nl(); + emit_td(is_gap(b), "></td>"); b = b->next; } @@ -421,17 +498,9 @@ void html_table::emit_col (int n) / get_effective_linelength() - (b->left*100 + get_effective_linelength()/2) /get_effective_linelength(); - if (width) - out->put_string("<td width=\"") - .put_number(width) - .put_string("%\"></td>") - .nl(); + emit_td(width, "></td>"); // have we a gap? - if (is_gap(b)) - out->put_string("<td width=\"") - .put_number(is_gap(b)) - .put_string("%\"></td>") - .nl(); + emit_td(is_gap(b), "></td>"); b = b->next; } width = (get_right(b)*100 + get_effective_linelength()/2) @@ -440,22 +509,13 @@ void html_table::emit_col (int n) /get_effective_linelength(); switch (b->alignment) { case 'C': - out->put_string("<td width=\"") - .put_number(width) - .put_string("%\" align=center>") - .nl(); + emit_td(width, " align=center>"); break; case 'R': - out->put_string("<td width=\"") - .put_number(width) - .put_string("%\" align=right>") - .nl(); + emit_td(width, " align=right>"); break; default: - out->put_string("<td width=\"") - .put_number(width) - .put_string("%\">") - .nl(); + emit_td(width); } // remember column, b last_col = b; @@ -477,7 +537,13 @@ void html_table::finish_row (void) if (n > 0) emit_col(n); - out->put_string("</td>").nl(); +#if 1 + if (last_col != NULL) { + out->put_string("</td>"); + last_col = NULL; + } +#endif + out->put_string("</tr>").nl(); } } |