@@ -75,7 +75,7 @@ sub inject_items
7575 my $from = next_header_pos( $delta , 2, $delta_pos );
7676 my $to = next_header_pos( $delta , 1, $from ) - 1;
7777
78- # inject them at the end of the section
78+ # inject them before the next =head2 (or the end of the section)
7979 $master_pos = next_header_pos( $master , 2, $master_pos )
8080 // next_header_pos( $master , 1, $master_pos );
8181 splice @$master , $master_pos , 0, $delta -> @[ $from .. $to ];
@@ -278,48 +278,17 @@ ( $tree )
278278 return join ' ' , $handler -> {$name }-> ( $directive , $attr , @nodes );
279279}
280280
281- # MAIN PROGRAM
282-
283- # argument processing
284- my $version = shift ;
285- die " Usage: $0 <version>\n version is required\n "
286- unless $version ;
287- die " $version does not look like a stable Perl version\n "
288- unless $version =~ / \A 5\. [0-9]{1,2}[02468]\z / ;
289-
290- # the previous version
291- my $previous = join ' .' , ' 5' , ( split /\./, $version )[1] - 2;
292-
293- # the version number used for delta
294- # TODO: this should be computable
295- my $tag_stable = $version =~ tr / .// dr;
296- my $tag_devel = $tag_stable - 1;
297-
298281# Note: the parser can only be used *once* per file
299- sub tree_for ($file ) {
282+ sub tree_for ($string ) {
300283 my $parser = Pod::Simple::SimpleTree-> new;
301284 $parser -> keep_encoding_directive(1);
302285 $parser -> preserve_whitespace(1);
303286 $parser -> accept_targets(' *' ); # for & begin/end
304287 $parser -> _output_is_for_JustPod(1); # for ~bracket_count
305- $parser -> parse_file( $file )-> root;
288+ $parser -> parse_string_document( $string )-> root;
306289}
307290
308- # the current, unfinished, delta will be used to produce the final document
309- my $main_delta = ' pod/perldelta.pod' ;
310-
311- # load the template
312- my $master = tree_for($main_delta );
313-
314- # loop over all the development deltas
315- for my $file_tree (
316- map [ $_ -> [0], tree_for( $_ -> [0] ) ],
317- sort { $b -> [1] <=> $a -> [1] }
318- map [ $_ , m { pod/perl$tag_devel ([0-9]+)delta\. pod} g ],
319- glob " pod/perl$tag_devel *delta.pod"
320- )
321- {
322- my ( $file , $delta ) = @$file_tree ;
291+ sub merge_into ( $master , $delta , $file ) {
323292
324293 # loop over the =head1 sections
325294 for my $title (
@@ -335,8 +304,54 @@ ($file)
335304 }
336305}
337306
338- # save the result
339- open my $fh , ' >' , $main_delta
340- or die " Can't open $main_delta for writing: $! " ;
341- print $fh as_pod($master );
307+ # poor man's slurp
308+ sub slurp { return do { local @ARGV = @_ ; local $/ ; <> } }
309+
310+ # MAIN PROGRAM
311+
312+ sub main (@argv ) {
313+
314+ # argument processing
315+ my $version = shift @argv ;
316+ die " Usage: $0 <version>\n version is required\n "
317+ unless $version ;
318+ die " $version does not look like a stable Perl version\n "
319+ unless $version =~ / \A 5\. [0-9]{1,2}[02468]\z / ;
320+
321+ # the previous version
322+ my $previous = join ' .' , ' 5' , ( split /\./, $version )[1] - 2;
323+
324+ # the version number used for delta
325+ # TODO: this should be computable
326+ my $tag_stable = $version =~ tr / .// dr;
327+ my $tag_devel = $tag_stable - 1;
328+
329+ # the current, unfinished, delta will be used to produce the final document
330+ my $main_delta = ' pod/perldelta.pod' ;
331+
332+ # load the template
333+ my $master = tree_for( slurp($main_delta ) );
334+
335+ # loop over all the development deltas
336+ for my $file_tree (
337+ map [ $_ -> [0], tree_for( slurp( $_ -> [0] ) ) ],
338+ sort { $b -> [1] <=> $a -> [1] }
339+ map [ $_ , m { pod/perl$tag_devel ([0-9]+)delta\. pod} g ],
340+ glob " pod/perl$tag_devel *delta.pod"
341+ )
342+ {
343+ my ( $file , $delta ) = @$file_tree ;
344+ merge_into( $master , $delta , $file );
345+ }
346+
347+ # save the result
348+ open my $fh , ' >' , $main_delta
349+ or die " Can't open $main_delta for writing: $! " ;
350+ print $fh as_pod($master );
351+
352+ return 0;
353+ }
354+
355+ # make it easier to test
356+ exit main( @ARGV ) unless caller ;
342357
0 commit comments