[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: html structure revisited
From: |
Patrice Dumas |
Subject: |
Re: html structure revisited |
Date: |
Mon, 15 Feb 2021 14:41:55 +0100 |
Hello,
I had a look at the result when there is no node, with a document like
@top top
@chapter chap1
@section sec1
and in that case there is are no <div>, but <span> are used instead.
(There is also a lone </div> closed, not sure where it comes from.)
I think that it is because the only case handled in
_convert_heading_command is a section associated with a node, a section
without associated node should also be handled, with a condition like
(untested), around l 2459:
my $section = undef;
if ($cmdname eq 'node' and $command->{'extra'}->{'associated_section'}) {
$section = $command->{'extra'}->{'associated_section'};
} elif ($cmdname ne 'node' and not $command->{'extra'}->{'associated_node'}) {
$section = $command;
}
if ($section) {
...
}
I can have a look at that case later, and also check what happens with
multiple nodes without sectioning commands (which is a less common
case).
On Sat, Feb 13, 2021 at 10:34:06AM -0800, Per Bothner wrote:
> On 2/13/21 8:59 AM, Patrice Dumas wrote:
> > Regarding your patch, my feeling is that the best is to have a function
> > to register opened sectioning commands, and another to ask for the
> > closing elements down to a given level. Does it looks ok?
>
> How about the attached new patch?
>
> I also added a call to $command->{'extra'}->{'associated_node'}.
> This is to catch the case of a header command (such as @subheading)
> with no associated node.
>
> (The need for that is because my change "switches" the
> node and section commands: The tree has the node element before the
> sectioning command. However, my change is to have the emitted
> sectioning element wrap the node elements *and* sub-sections,
> so the "node" element is processed to emit a <div class="section">
> while the "section" element generates a <div class="node">.)
> --
> --Per Bothner
> per@bothner.com http://per.bothner.com/
> diff --git a/tp/Texinfo/Convert/HTML.pm b/tp/Texinfo/Convert/HTML.pm
> index 443b6b4702..e1ebeedde4 100644
> --- a/tp/Texinfo/Convert/HTML.pm
> +++ b/tp/Texinfo/Convert/HTML.pm
> @@ -2402,6 +2402,29 @@ sub _default_element_header($$$$)
> return $result;
> }
>
> +sub _open_section($$$)
> +{
> + my $self = shift;
> + my $level = shift;
> + my $close = shift;
> + while (@{$self->{'pending_closes'}} < $level) {
> + push(@{$self->{'pending_closes'}}, "");
> + }
> + push(@{$self->{'pending_closes'}}, $close);
> +}
> +
> +sub _close_sections($$)
> +{
> + my $self = shift;
> + my $level = shift;
> + my $result = '';
> + while (@{$self->{'pending_closes'}} > $level) {
> + my $close = pop @{$self->{'pending_closes'}};
> + $result .= $close if ($close);
> + }
> + return $result;
> +}
> +
> sub _convert_heading_command($$$$$)
> {
> my $self = shift;
> @@ -2419,9 +2442,26 @@ sub _convert_heading_command($$$$$)
> return $result;
> }
>
> + my $section = $command->{'extra'}->{'associated_section'};
> + my $node;
> + if ($section) {
> + my $level = $section->{'level'};
> + $result .= $self->_close_sections($level);
> + $self->_open_section($level, "</div>\n");
> + } else {
> + $node = $command->{'extra'}->{'associated_node'};
> + }
> + $result .= '<div';
> + if ($section) {
> + $result .= ' class="'.$section->{'cmdname'}.'"';
> + } elsif ($node) {
> + $result .= ' class="node"';
> + } else {
> + $result .= " class=\"$cmdname\"";
> + }
> my $element_id = $self->command_id($command);
> - $result .= "<span id=\"$element_id\"></span>"
> - if (defined($element_id) and $element_id ne '');
> + $result .= " id=\"$element_id\""
> + if (defined($element_id) and $element_id ne '');
>
> print STDERR "Process $command "
> .Texinfo::Structuring::_print_root_command_texi($command)."\n"
> @@ -2433,6 +2473,7 @@ sub _convert_heading_command($$$$$)
> and $command->{'parent'}->{'type'} eq 'element') {
> $element = $command->{'parent'};
> }
> + $result .= ">\n";
> if ($element) {
> $result .= &{$self->{'format_element_header'}}($self, $cmdname,
> $command, $element);
> @@ -2514,7 +2555,7 @@ sub _convert_heading_command($$$$$)
> eq 'inline')))) {
> $result .= _mini_toc($self, $command);
> }
> -
> + $result .= '</div>' if (! $section);
> return $result;
> }
>
> @@ -4663,9 +4704,6 @@ sub _convert_element_type($$$$)
> if ($element->{'extra'}->{'special_element'}) {
> $special_element = $element->{'extra'}->{'special_element'};
> my $id = $self->command_id($element);
> - if ($id ne '') {
> - $result .= "<span id=\"$id\"></span>\n";
> - }
> if ($self->get_conf('HEADERS')
> # first in page
> or $self->{'counter_in_file'}->{$element->{'filename'}} == 1) {
> @@ -4691,13 +4729,13 @@ sub _convert_element_type($$$$)
> if ($special_element_body eq '') {
> return '';
> }
> - $result .= $special_element_body;
> + $result .= $special_element_body . '</div>';
> } elsif (!$element->{'element_prev'}) {
> $result .= $self->_print_title();
> if (!$element->{'element_next'}) {
> # only one element
> my $foot_text = &{$self->{'format_footnotes_text'}}($self);
> - return
> $result.$content.$foot_text.$self->get_conf('DEFAULT_RULE')."\n";
> + return
> $result.$content.$foot_text.$self->get_conf('DEFAULT_RULE')."</div>\n";
> }
> }
> $result .= $content unless ($special_element);
> @@ -5127,6 +5165,7 @@ sub converter_initialize($)
>
> $self->{'document_context'} = [];
> $self->{'multiple_pass'} = [];
> + $self->{'pending_closes'} = [];
> $self->_new_document_context('_toplevel_context');
>
> if ($self->get_conf('SPLIT') and $self->get_conf('SPLIT') ne 'chapter'
> @@ -6494,10 +6533,10 @@ sub _default_program_string($)
> sub _default_end_file($)
> {
> my $self = shift;
> - my $program_text = '';
> + my $program_text = $self->_close_sections(0);
> if ($self->get_conf('PROGRAM_NAME_IN_FOOTER')) {
> my $program_string = &{$self->{'format_program_string'}}($self);
> - $program_text = "<p><font size=\"-1\">
> + $program_text .= "<p><font size=\"-1\">
> $program_string
> </font></p>";
> }
- Re: html structure revisited, (continued)
- Re: html structure revisited, Per Bothner, 2021/02/13
- Re: html structure revisited, Patrice Dumas, 2021/02/13
- formatting_fr_icons test, Gavin Smith, 2021/02/14
- Re: formatting_fr_icons test, Gavin Smith, 2021/02/14
- Re: formatting_fr_icons test, Gavin Smith, 2021/02/14
- Re: formatting_fr_icons test, Patrice Dumas, 2021/02/14
- Re: html structure revisited, Gavin Smith, 2021/02/14
- Re: html structure revisited, Gavin Smith, 2021/02/14
- Re: html structure revisited, Per Bothner, 2021/02/14
- Re: html structure revisited, Gavin Smith, 2021/02/14
- Re: html structure revisited,
Patrice Dumas <=
- Re: html structure revisited, Gavin Smith, 2021/02/15
- Re: html structure revisited, Patrice Dumas, 2021/02/19
- Re: html structure revisited, Per Bothner, 2021/02/15
- Re: html structure revisited, Patrice Dumas, 2021/02/16
- Re: html structure revisited, Gavin Smith, 2021/02/15
- Re: html structure revisited, Per Bothner, 2021/02/15
- Re: html structure revisited, Gavin Smith, 2021/02/20
- Re: html structure revisited, Per Bothner, 2021/02/20
- Re: html structure revisited, Patrice Dumas, 2021/02/19