Hello,

A new version, no functional change, but code could be more clear
like that.

On Mon, Oct 10, 2022 at 09:40:34AM +0200, Patrice Dumas wrote:
> Hello,
> 
> The API changed again, for the new API, the attached init file should be
> ok.
> 
> -- 
> Pat

> # Make the output file names consist of the base name followed by a number.
> use strict;
> 
> # REMARK: if more than one manual is processed, $file_nr, 
> %reference_file_name_file_nr
> # and $after_appendix_printindex should be reset, using a handler
> 
> my $file_nr = -1;
> 
> my %reference_file_name_file_nr = ();
> 
> my $after_appendix_printindex = 0;
> 
> sub filename_simple($$$$)
> {
>   my $converter = shift;
>   my $element = shift;
>   my $filename = shift;
>   my $filepath = shift;
> 
>   return ($filename, $filepath) if (defined($filepath));
> 
>   my $prefix = $converter->get_info('document_name');
>   # If we're not splitting, just return the name.
>   if (!$converter->get_conf('SPLIT')) {
>     return $prefix.'.'.$converter->get_conf('EXTENSION');
>   }
>   if ($converter->element_is_tree_unit_top($element)) {
>     # The table of contents file should be named this.
>     return "maxima_toc.html";
>   } else {
>     if ($after_appendix_printindex) {
>       return ($filename, undef);
>     } else {
>       # FIXME would be more efficient to set it up in a handler (probably 
> 'init')
>       # once for all
>       my $printindex_element = $converter->global_direction_element('Index');
>       if (defined($printindex_element) and $printindex_element eq $element) {
>         $after_appendix_printindex = 1;
>         return ($filename, undef);
>       }
>       if ($element->{'extra'} and $element->{'extra'}->{'unit_command'}) {
>         my $associated_command_element = 
> $element->{'extra'}->{'unit_command'};
>         my $sectioning_command;
>         if ($associated_command_element->{'cmdname'} eq 'node') {
>           if ($associated_command_element->{'extra'}
>               and 
> $associated_command_element->{'extra'}->{'associated_section'}) {
>             $sectioning_command
>               = 
> $associated_command_element->{'extra'}->{'associated_section'}->{'cmdname'};
>           }
>         } else {
>           $sectioning_command = $associated_command_element->{'cmdname'};
>         }
>         if (defined($sectioning_command) and $sectioning_command =~ 
> /appendix/) {
>           $after_appendix_printindex = 1;
>           return ($filename, undef);
>         }
>       }
>     }
>     if (defined($reference_file_name_file_nr{$filename})) {
>       $file_nr = $reference_file_name_file_nr{$filename};
>     } else {
>       $file_nr++;
>       $reference_file_name_file_nr{$filename} = $file_nr;
>     }
>     if ($file_nr == 0) {
>       return ($prefix.'.'.$converter->get_conf('EXTENSION'), undef);
>     } else {
>       return ($prefix.'_'.$file_nr.'.'.$converter->get_conf('EXTENSION'), 
> undef);
>     }
>   }
> }
> 
> texinfo_register_file_id_setting_function('tree_unit_file_name', 
> \&filename_simple);

# Make the output file names consist of the base name followed by a number.
use strict;

# ./texi2any.pl --split=chapter --no-node-files --html -c OUTPUT_ENCODING_NAME=UTF-8 --force -e 10000 --init-file init/examples_init/maxima_file_names.pm --set-customization-variable HTML_MATH=mathjax maxima_init.texi

# REMARK: if more than one manual is processed, $file_nr, %reference_file_name_file_nr
# and $after_appendix_printindex should be reset, using a handler

my $file_nr = -1;

my %reference_file_name_file_nr = ();

my $after_appendix_printindex = 0;

sub filename_simple($$$$)
{
  my $converter = shift;
  my $element = shift;
  my $filename = shift;
  my $filepath = shift;

  return ($filename, $filepath) if (defined($filepath));

  my $prefix = $converter->get_info('document_name');
  # If we're not splitting, just return the name.  Note that it should
  # not happen, as in that case the $filepath should be set and the previous
  # condition should also hold.
  if (!$converter->get_conf('SPLIT')) {
    return ($prefix.'.'.$converter->get_conf('EXTENSION'),
            undef);
  }
  if ($converter->element_is_tree_unit_top($element)) {
    # The table of contents file should be named this.
    return ("maxima_toc.html", undef);
  } else {
    if ($after_appendix_printindex) {
      return ($filename, undef);
    } else {
      # FIXME would be more efficient to set it up in a handler (probably 'init')
      # once for all
      my $printindex_element = $converter->global_direction_element('Index');
      if (defined($printindex_element) and $printindex_element eq $element) {
        $after_appendix_printindex = 1;
        return ($filename, undef);
      }
      if ($element->{'extra'} and $element->{'extra'}->{'unit_command'}) {
        my $associated_command_element = $element->{'extra'}->{'unit_command'};
        my $sectioning_command;
        if ($associated_command_element->{'cmdname'} eq 'node') {
          if ($associated_command_element->{'extra'}
              and $associated_command_element->{'extra'}->{'associated_section'}) {
            $sectioning_command
              = $associated_command_element->{'extra'}->{'associated_section'}->{'cmdname'};
          }
        } else {
          $sectioning_command = $associated_command_element->{'cmdname'};
        }
        if (defined($sectioning_command) and $sectioning_command =~ /appendix/) {
          $after_appendix_printindex = 1;
          return ($filename, undef);
        }
      }
    }
    if (defined($reference_file_name_file_nr{$filename})) {
      $file_nr = $reference_file_name_file_nr{$filename};
    } else {
      $file_nr++;
      $reference_file_name_file_nr{$filename} = $file_nr;
    }
    if ($file_nr == 0) {
      return ($prefix.'.'.$converter->get_conf('EXTENSION'), undef);
    } else {
      return ($prefix.'_'.$file_nr.'.'.$converter->get_conf('EXTENSION'), undef);
    }
  }
}

texinfo_register_file_id_setting_function('tree_unit_file_name', \&filename_simple);

Reply via email to