texinfo-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[no subject]


From: Gavin D. Smith
Date: Sat, 12 Nov 2022 17:25:45 -0500 (EST)

branch: release/7.0
commit ed1215a4dda8369d9a82f107645087f86dc6b7c7
Author: Patrice Dumas <pertusus@free.fr>
AuthorDate: Tue Nov 8 19:49:39 2022 +0100

    * tp/Texinfo/Convert/Info.pm (_convert): avoid crashes in case
    of empty arguments.
---
 ChangeLog                                     |   5 +
 tp/Texinfo/Convert/Plaintext.pm               |  51 ++++-
 tp/t/info_tests.t                             |  27 +++
 tp/t/results/info_tests/empty_arguments.pl    | 136 ++++++++++++
 tp/t/results/info_tests/empty_caption.pl      | 306 ++++++++++++++++++++++++++
 tp/t/results/info_tests/float_without_type.pl | 259 ++++++++++++++++++++++
 6 files changed, 774 insertions(+), 10 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 9e86cf1ac9..e5b27215ff 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2022-11-08  Patrice Dumas  <pertusus@free.fr>
+
+       * tp/Texinfo/Convert/Info.pm (_convert): avoid crashes in case
+       of empty arguments.
+
 2022-11-08  Patrice Dumas  <pertusus@free.fr>
 
        * tp/Texinfo/Convert/Info.pm (format_image): avoid crash on empty
diff --git a/tp/Texinfo/Convert/Plaintext.pm b/tp/Texinfo/Convert/Plaintext.pm
index e18e3de810..27ae9d5433 100644
--- a/tp/Texinfo/Convert/Plaintext.pm
+++ b/tp/Texinfo/Convert/Plaintext.pm
@@ -1727,6 +1727,10 @@ sub _convert($$)
   }
 
   if ($element->{'extra'}) {
+    # REMARK it is not that wise to rely on {'extra'}->{'missing_argument'}
+    # being set, additional tests of $element->{'contents'}
+    # being defined could be added, in addition to be more robust in case
+    # {'extra'}->{'missing_argument'} is removed
     if ($element->{'extra'}->{'missing_argument'}
              and (!$element->{'contents'} or !@{$element->{'contents'}})) {
       return '';
@@ -1958,6 +1962,7 @@ sub _convert($$)
       if ($element->{'args'}) {
         $result .= _convert($self, $element->{'args'}->[0]);
         if ($command eq 'strong' 
+             and $element->{'args'}->[0]->{'contents'}
              and scalar (@{$element->{'args'}->[0]->{'contents'}})
              and $element->{'args'}->[0]->{'contents'}->[0]->{'text'}
              and $element->{'args'}->[0]->{'contents'}->[0]->{'text'} =~ 
/^Note\s/i
@@ -2082,6 +2087,7 @@ sub _convert($$)
           }
         } elsif (scalar(@{$element->{'args'}}) == 2
                  and defined($element->{'args'}->[1])
+                 and $element->{'args'}->[1]->{'contents'}
                  and @{$element->{'args'}->[1]->{'contents'}}) {
           unshift @{$self->{'current_contents'}->[-1]}, 
             {'contents' => $element->{'args'}->[1]->{'contents'}};
@@ -2368,6 +2374,7 @@ sub _convert($$)
         }
         if (scalar (@{$element->{'args'}}) == 2
             and defined($element->{'args'}->[-1])
+            and $element->{'args'}->[-1]->{'contents'}
             and @{$element->{'args'}->[-1]->{'contents'}}) {
           my $prepended = $self->gdt('{abbr_or_acronym} ({explanation})', 
                            {'abbr_or_acronym' => $argument, 
@@ -2693,10 +2700,18 @@ sub _convert($$)
       #my ($counts, $new_locations);
       push @{$self->{'count_context'}}, {'lines' => 0, 'bytes' => 0, 
                                                    'locations' => []};
-      $result = $self->convert_line (
+      # $element->{'args'}->[0]->{'contents'} not set cannot happen
+      # as in that case missing_argument would be set.  This condition
+      # is therefre not really needed, but still put in case missing_argument
+      # disappears
+      my $result = '';
+      if ($element->{'args'}->[0]
+          and $element->{'args'}->[0]->{'contents'}) {
+        $result = $self->convert_line (
                        {'type' => 'frenchspacing',
                         'contents' => $element->{'args'}->[0]->{'contents'}},
                        {'indent_length' => 0});
+      }
       if ($result ne '') {
         $result = $self->ensure_end_of_line($result);
 
@@ -2710,14 +2725,24 @@ sub _convert($$)
       $self->{'format_context'}->[-1]->{'paragraph_count'}++;
       return $result;
     } elsif ($command eq 'exdent') {
-      if 
($self->{'preformatted_context_commands'}->{$self->{'context'}->[-1]}) {
-        $result = $self->_convert_unfilled({'contents' => 
$element->{'args'}->[0]->{'contents'}},
-         {'indent_level'
-          => $self->{'format_context'}->[-1]->{'indent_level'} -1});
-      } else {
-        $result = $self->convert_line({'contents' => 
$element->{'args'}->[0]->{'contents'}},
-         {'indent_level' 
-          => $self->{'format_context'}->[-1]->{'indent_level'} -1});
+      $result = '';
+      # $element->{'args'}->[0]->{'contents'} not set cannot happen
+      # as in that case missing_argument would be set.  This condition
+      # is therefre not really needed, but still put in case missing_argument
+      # disappears
+      if ($element->{'args'}->[0]
+          and $element->{'args'}->[0]->{'contents'}) {
+        if 
($self->{'preformatted_context_commands'}->{$self->{'context'}->[-1]}) {
+          $result = $self->_convert_unfilled(
+               {'contents' => $element->{'args'}->[0]->{'contents'}},
+               {'indent_level'
+                 => $self->{'format_context'}->[-1]->{'indent_level'} -1});
+        } else {
+          $result = $self->convert_line(
+             {'contents' => $element->{'args'}->[0]->{'contents'}},
+             {'indent_level'
+               => $self->{'format_context'}->[-1]->{'indent_level'} -1});
+        }
       }
       if ($result ne '') {
         $result = $self->ensure_end_of_line($result);
@@ -2756,6 +2781,7 @@ sub _convert($$)
         $lines_count += 2;
         foreach my $float 
(@{$self->{'floats'}->{$element->{'extra'}->{'type'}->{'normalized'}}}) {
           next if !$float->{'args'} or !$float->{'args'}->[1]
+                   or !$float->{'args'}->[1]->{'contents'}
                    or !@{$float->{'args'}->[1]->{'contents'}};
           my $float_label_text = $self->convert_line({'type' => '_code',
              'contents' => $float->{'args'}->[1]->{'contents'}});
@@ -2782,7 +2808,8 @@ sub _convert($$)
           } elsif ($float->{'extra'}->{'caption'}) {
             $caption = $float->{'extra'}->{'caption'};
           }
-          if ($caption) {
+          if ($caption and $caption->{'args'}->[0]
+              and $caption->{'args'}->[0]->{'contents'}) {
             $self->{'multiple_pass'} = 1;
             push @{$self->{'context'}}, 'listoffloats';
             my $tree = {'contents' => $caption->{'args'}->[0]->{'contents'}};
@@ -3154,6 +3181,9 @@ sub _convert($$)
           $result .= _count_added($self, $formatter->{'container'},
                            add_pending_word($formatter->{'container'}, 1));
 
+          # note that $arg->{'contents'} may be undefined in rare case
+          # such as in sectionning in_menu_only_special_ascii_spaces_node
+          # test
           my $node_text = _convert($self, {'type' => '_code',
                                       'contents' => $arg->{'contents'}});
 
@@ -3241,6 +3271,7 @@ sub _convert($$)
   }
 
   # The processing of contents is done here.
+  # $element->{'contents'} undef may happen for some empty commands/containers
   if ($element->{'contents'}) {
     my @contents = @{$element->{'contents'}};
     push @{$self->{'current_contents'}}, \@contents;
diff --git a/tp/t/info_tests.t b/tp/t/info_tests.t
index ba620ffb75..12af9cf50b 100644
--- a/tp/t/info_tests.t
+++ b/tp/t/info_tests.t
@@ -930,6 +930,33 @@ HHH
 @image{figure, , , ,txt} JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
 @end flushright
 '],
+['empty_arguments',
+'
+@strong{}
+@uref{,}
+@abbr{a,}
+'],
+['float_without_type',
+'
+@node Top
+
+@float a,
+aa
+@end float
+
+@listoffloats a
+'],
+['empty_caption',
+'
+@node Top
+
+@float a,b
+aa
+@caption{}
+@end float
+
+@listoffloats a
+'],
 );
 
 my @file_tests = (
diff --git a/tp/t/results/info_tests/empty_arguments.pl 
b/tp/t/results/info_tests/empty_arguments.pl
new file mode 100644
index 0000000000..840791d0aa
--- /dev/null
+++ b/tp/t/results/info_tests/empty_arguments.pl
@@ -0,0 +1,136 @@
+use vars qw(%result_texis %result_texts %result_trees %result_errors 
+   %result_indices %result_sectioning %result_nodes %result_menus
+   %result_floats %result_converted %result_converted_errors 
+   %result_elements %result_directions_text %result_indices_sort_strings);
+
+use utf8;
+
+$result_trees{'empty_arguments'} = {
+  'contents' => [
+    {
+      'contents' => [
+        {
+          'text' => '
+',
+          'type' => 'empty_line'
+        },
+        {
+          'contents' => [
+            {
+              'args' => [
+                {
+                  'type' => 'brace_command_arg'
+                }
+              ],
+              'cmdname' => 'strong',
+              'source_info' => {
+                'file_name' => '',
+                'line_nr' => 2,
+                'macro' => ''
+              }
+            },
+            {
+              'text' => '
+'
+            },
+            {
+              'args' => [
+                {
+                  'type' => 'brace_command_arg'
+                },
+                {
+                  'type' => 'brace_command_arg'
+                }
+              ],
+              'cmdname' => 'uref',
+              'source_info' => {
+                'file_name' => '',
+                'line_nr' => 3,
+                'macro' => ''
+              }
+            },
+            {
+              'text' => '
+'
+            },
+            {
+              'args' => [
+                {
+                  'contents' => [
+                    {
+                      'text' => 'a'
+                    }
+                  ],
+                  'type' => 'brace_command_arg'
+                },
+                {
+                  'type' => 'brace_command_arg'
+                }
+              ],
+              'cmdname' => 'abbr',
+              'source_info' => {
+                'file_name' => '',
+                'line_nr' => 4,
+                'macro' => ''
+              }
+            },
+            {
+              'text' => '
+'
+            }
+          ],
+          'type' => 'paragraph'
+        }
+      ],
+      'type' => 'before_node_section'
+    }
+  ],
+  'type' => 'document_root'
+};
+
+$result_texis{'empty_arguments'} = '
+@strong{}
+@uref{,}
+@abbr{a,}
+';
+
+
+$result_texts{'empty_arguments'} = '
+
+
+a
+';
+
+$result_errors{'empty_arguments'} = [];
+
+
+$result_floats{'empty_arguments'} = {};
+
+
+
+$result_converted{'info'}->{'empty_arguments'} = 'This is , produced from .
+
+** a
+
+
+Tag Table:
+
+End Tag Table
+
+
+Local Variables:
+coding: utf-8
+End:
+';
+
+$result_converted_errors{'info'}->{'empty_arguments'} = [
+  {
+    'error_line' => 'warning: document without nodes
+',
+    'text' => 'document without nodes',
+    'type' => 'warning'
+  }
+];
+
+
+1;
diff --git a/tp/t/results/info_tests/empty_caption.pl 
b/tp/t/results/info_tests/empty_caption.pl
new file mode 100644
index 0000000000..dbc9d1809d
--- /dev/null
+++ b/tp/t/results/info_tests/empty_caption.pl
@@ -0,0 +1,306 @@
+use vars qw(%result_texis %result_texts %result_trees %result_errors 
+   %result_indices %result_sectioning %result_nodes %result_menus
+   %result_floats %result_converted %result_converted_errors 
+   %result_elements %result_directions_text %result_indices_sort_strings);
+
+use utf8;
+
+$result_trees{'empty_caption'} = {
+  'contents' => [
+    {
+      'contents' => [
+        {
+          'text' => '
+',
+          'type' => 'empty_line'
+        }
+      ],
+      'type' => 'before_node_section'
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'text' => 'Top'
+            }
+          ],
+          'extra' => {
+            'spaces_after_argument' => '
+'
+          },
+          'type' => 'line_arg'
+        }
+      ],
+      'cmdname' => 'node',
+      'contents' => [
+        {
+          'text' => '
+',
+          'type' => 'empty_line'
+        },
+        {
+          'args' => [
+            {
+              'contents' => [
+                {
+                  'text' => 'a'
+                }
+              ],
+              'type' => 'block_line_arg'
+            },
+            {
+              'contents' => [
+                {
+                  'text' => 'b'
+                }
+              ],
+              'extra' => {
+                'spaces_after_argument' => '
+'
+              },
+              'type' => 'block_line_arg'
+            }
+          ],
+          'cmdname' => 'float',
+          'contents' => [
+            {
+              'contents' => [
+                {
+                  'text' => 'aa
+'
+                }
+              ],
+              'type' => 'paragraph'
+            },
+            {
+              'args' => [
+                {
+                  'type' => 'brace_command_context'
+                }
+              ],
+              'cmdname' => 'caption',
+              'extra' => {
+                'float' => {}
+              },
+              'source_info' => {
+                'file_name' => '',
+                'line_nr' => 6,
+                'macro' => ''
+              }
+            },
+            {
+              'text' => '
+',
+              'type' => 'spaces_after_close_brace'
+            },
+            {
+              'args' => [
+                {
+                  'contents' => [
+                    {
+                      'text' => 'float'
+                    }
+                  ],
+                  'extra' => {
+                    'spaces_after_argument' => '
+'
+                  },
+                  'type' => 'line_arg'
+                }
+              ],
+              'cmdname' => 'end',
+              'extra' => {
+                'spaces_before_argument' => ' ',
+                'text_arg' => 'float'
+              },
+              'source_info' => {
+                'file_name' => '',
+                'line_nr' => 7,
+                'macro' => ''
+              }
+            }
+          ],
+          'extra' => {
+            'caption' => {},
+            'node_content' => [
+              {}
+            ],
+            'normalized' => 'b',
+            'spaces_before_argument' => ' ',
+            'type' => {
+              'content' => [
+                {}
+              ],
+              'normalized' => 'a'
+            }
+          },
+          'source_info' => {
+            'file_name' => '',
+            'line_nr' => 4,
+            'macro' => ''
+          }
+        },
+        {
+          'text' => '
+',
+          'type' => 'empty_line'
+        },
+        {
+          'args' => [
+            {
+              'contents' => [
+                {
+                  'text' => 'a'
+                }
+              ],
+              'extra' => {
+                'spaces_after_argument' => '
+'
+              },
+              'type' => 'line_arg'
+            }
+          ],
+          'cmdname' => 'listoffloats',
+          'extra' => {
+            'spaces_before_argument' => ' ',
+            'type' => {
+              'content' => [
+                {}
+              ],
+              'normalized' => 'a'
+            }
+          },
+          'source_info' => {
+            'file_name' => '',
+            'line_nr' => 9,
+            'macro' => ''
+          }
+        }
+      ],
+      'extra' => {
+        'node_content' => [
+          {}
+        ],
+        'nodes_manuals' => [
+          {
+            'node_content' => [
+              {}
+            ],
+            'normalized' => 'Top'
+          }
+        ],
+        'normalized' => 'Top',
+        'spaces_before_argument' => ' '
+      },
+      'source_info' => {
+        'file_name' => '',
+        'line_nr' => 2,
+        'macro' => ''
+      }
+    }
+  ],
+  'type' => 'document_root'
+};
+$result_trees{'empty_caption'}{'contents'}[1]{'contents'}[1]{'contents'}[1]{'extra'}{'float'}
 = $result_trees{'empty_caption'}{'contents'}[1]{'contents'}[1];
+$result_trees{'empty_caption'}{'contents'}[1]{'contents'}[1]{'extra'}{'caption'}
 = $result_trees{'empty_caption'}{'contents'}[1]{'contents'}[1]{'contents'}[1];
+$result_trees{'empty_caption'}{'contents'}[1]{'contents'}[1]{'extra'}{'node_content'}[0]
 = 
$result_trees{'empty_caption'}{'contents'}[1]{'contents'}[1]{'args'}[1]{'contents'}[0];
+$result_trees{'empty_caption'}{'contents'}[1]{'contents'}[1]{'extra'}{'type'}{'content'}[0]
 = 
$result_trees{'empty_caption'}{'contents'}[1]{'contents'}[1]{'args'}[0]{'contents'}[0];
+$result_trees{'empty_caption'}{'contents'}[1]{'contents'}[3]{'extra'}{'type'}{'content'}[0]
 = 
$result_trees{'empty_caption'}{'contents'}[1]{'contents'}[3]{'args'}[0]{'contents'}[0];
+$result_trees{'empty_caption'}{'contents'}[1]{'extra'}{'node_content'}[0] = 
$result_trees{'empty_caption'}{'contents'}[1]{'args'}[0]{'contents'}[0];
+$result_trees{'empty_caption'}{'contents'}[1]{'extra'}{'nodes_manuals'}[0]{'node_content'}[0]
 = $result_trees{'empty_caption'}{'contents'}[1]{'args'}[0]{'contents'}[0];
+
+$result_texis{'empty_caption'} = '
+@node Top
+
+@float a,b
+aa
+@caption{}
+@end float
+
+@listoffloats a
+';
+
+
+$result_texts{'empty_caption'} = '
+
+a, b
+aa
+
+';
+
+$result_nodes{'empty_caption'} = {
+  'cmdname' => 'node',
+  'extra' => {
+    'normalized' => 'Top'
+  }
+};
+
+$result_menus{'empty_caption'} = {
+  'cmdname' => 'node',
+  'extra' => {
+    'normalized' => 'Top'
+  }
+};
+
+$result_errors{'empty_caption'} = [];
+
+
+$result_floats{'empty_caption'} = {
+  'a' => [
+    {
+      'cmdname' => 'float',
+      'extra' => {
+        'caption' => {
+          'cmdname' => 'caption',
+          'extra' => {
+            'float' => {}
+          }
+        },
+        'normalized' => 'b',
+        'type' => {
+          'content' => [
+            {
+              'text' => 'a'
+            }
+          ],
+          'normalized' => 'a'
+        }
+      },
+      'structure' => {
+        'float_number' => 1
+      }
+    }
+  ]
+};
+$result_floats{'empty_caption'}{'a'}[0]{'extra'}{'caption'}{'extra'}{'float'} 
= $result_floats{'empty_caption'}{'a'}[0];
+
+
+
+$result_converted{'info'}->{'empty_caption'} = 'This is , produced from .
+
+
+File: ,  Node: Top,  Up: (dir)
+
+aa
+
+a 1: 
+* Menu:
+
+* a 1: b.                                
+
+
+
+Tag Table:
+Node: Top27
+Ref: b61
+
+End Tag Table
+
+
+Local Variables:
+coding: utf-8
+End:
+';
+
+1;
diff --git a/tp/t/results/info_tests/float_without_type.pl 
b/tp/t/results/info_tests/float_without_type.pl
new file mode 100644
index 0000000000..11ab617102
--- /dev/null
+++ b/tp/t/results/info_tests/float_without_type.pl
@@ -0,0 +1,259 @@
+use vars qw(%result_texis %result_texts %result_trees %result_errors 
+   %result_indices %result_sectioning %result_nodes %result_menus
+   %result_floats %result_converted %result_converted_errors 
+   %result_elements %result_directions_text %result_indices_sort_strings);
+
+use utf8;
+
+$result_trees{'float_without_type'} = {
+  'contents' => [
+    {
+      'contents' => [
+        {
+          'text' => '
+',
+          'type' => 'empty_line'
+        }
+      ],
+      'type' => 'before_node_section'
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'text' => 'Top'
+            }
+          ],
+          'extra' => {
+            'spaces_after_argument' => '
+'
+          },
+          'type' => 'line_arg'
+        }
+      ],
+      'cmdname' => 'node',
+      'contents' => [
+        {
+          'text' => '
+',
+          'type' => 'empty_line'
+        },
+        {
+          'args' => [
+            {
+              'contents' => [
+                {
+                  'text' => 'a'
+                }
+              ],
+              'type' => 'block_line_arg'
+            },
+            {
+              'extra' => {
+                'spaces_after_argument' => '
+'
+              },
+              'type' => 'block_line_arg'
+            }
+          ],
+          'cmdname' => 'float',
+          'contents' => [
+            {
+              'contents' => [
+                {
+                  'text' => 'aa
+'
+                }
+              ],
+              'type' => 'paragraph'
+            },
+            {
+              'args' => [
+                {
+                  'contents' => [
+                    {
+                      'text' => 'float'
+                    }
+                  ],
+                  'extra' => {
+                    'spaces_after_argument' => '
+'
+                  },
+                  'type' => 'line_arg'
+                }
+              ],
+              'cmdname' => 'end',
+              'extra' => {
+                'spaces_before_argument' => ' ',
+                'text_arg' => 'float'
+              },
+              'source_info' => {
+                'file_name' => '',
+                'line_nr' => 6,
+                'macro' => ''
+              }
+            }
+          ],
+          'extra' => {
+            'spaces_before_argument' => ' ',
+            'type' => {
+              'content' => [
+                {}
+              ],
+              'normalized' => 'a'
+            }
+          },
+          'source_info' => {
+            'file_name' => '',
+            'line_nr' => 4,
+            'macro' => ''
+          }
+        },
+        {
+          'text' => '
+',
+          'type' => 'empty_line'
+        },
+        {
+          'args' => [
+            {
+              'contents' => [
+                {
+                  'text' => 'a'
+                }
+              ],
+              'extra' => {
+                'spaces_after_argument' => '
+'
+              },
+              'type' => 'line_arg'
+            }
+          ],
+          'cmdname' => 'listoffloats',
+          'extra' => {
+            'spaces_before_argument' => ' ',
+            'type' => {
+              'content' => [
+                {}
+              ],
+              'normalized' => 'a'
+            }
+          },
+          'source_info' => {
+            'file_name' => '',
+            'line_nr' => 8,
+            'macro' => ''
+          }
+        }
+      ],
+      'extra' => {
+        'node_content' => [
+          {}
+        ],
+        'nodes_manuals' => [
+          {
+            'node_content' => [
+              {}
+            ],
+            'normalized' => 'Top'
+          }
+        ],
+        'normalized' => 'Top',
+        'spaces_before_argument' => ' '
+      },
+      'source_info' => {
+        'file_name' => '',
+        'line_nr' => 2,
+        'macro' => ''
+      }
+    }
+  ],
+  'type' => 'document_root'
+};
+$result_trees{'float_without_type'}{'contents'}[1]{'contents'}[1]{'extra'}{'type'}{'content'}[0]
 = 
$result_trees{'float_without_type'}{'contents'}[1]{'contents'}[1]{'args'}[0]{'contents'}[0];
+$result_trees{'float_without_type'}{'contents'}[1]{'contents'}[3]{'extra'}{'type'}{'content'}[0]
 = 
$result_trees{'float_without_type'}{'contents'}[1]{'contents'}[3]{'args'}[0]{'contents'}[0];
+$result_trees{'float_without_type'}{'contents'}[1]{'extra'}{'node_content'}[0] 
= $result_trees{'float_without_type'}{'contents'}[1]{'args'}[0]{'contents'}[0];
+$result_trees{'float_without_type'}{'contents'}[1]{'extra'}{'nodes_manuals'}[0]{'node_content'}[0]
 = $result_trees{'float_without_type'}{'contents'}[1]{'args'}[0]{'contents'}[0];
+
+$result_texis{'float_without_type'} = '
+@node Top
+
+@float a,
+aa
+@end float
+
+@listoffloats a
+';
+
+
+$result_texts{'float_without_type'} = '
+
+a
+aa
+
+';
+
+$result_nodes{'float_without_type'} = {
+  'cmdname' => 'node',
+  'extra' => {
+    'normalized' => 'Top'
+  }
+};
+
+$result_menus{'float_without_type'} = {
+  'cmdname' => 'node',
+  'extra' => {
+    'normalized' => 'Top'
+  }
+};
+
+$result_errors{'float_without_type'} = [];
+
+
+$result_floats{'float_without_type'} = {
+  'a' => [
+    {
+      'cmdname' => 'float',
+      'extra' => {
+        'type' => {
+          'content' => [
+            {
+              'text' => 'a'
+            }
+          ],
+          'normalized' => 'a'
+        }
+      }
+    }
+  ]
+};
+
+
+
+$result_converted{'info'}->{'float_without_type'} = 'This is , produced from .
+
+
+File: ,  Node: Top,  Up: (dir)
+
+aa
+
+a
+
+* Menu:
+
+
+
+
+Tag Table:
+Node: Top27
+
+End Tag Table
+
+
+Local Variables:
+coding: utf-8
+End:
+';
+
+1;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]