@@ -14,6 +14,8 @@ BEGIN {
14
14
&cpcharactersubs &getsafelastpath &add_page_marker_flags &remove_page_marker_flags) ;
15
15
}
16
16
17
+ my $marker_flag_regex = ' \[Img(.+?)\|(.+?)\|(.+?)\]' ;
18
+
17
19
#
18
20
# Wrapper routine to find a text/HTML file and open it
19
21
sub file_open {
@@ -477,7 +479,7 @@ sub file_mark_pages {
477
479
my $pagemark = ' Pg' . $page ;
478
480
479
481
# Standardize page separator line format if necessary
480
- unless ( $line =~ / ^-----File: (\S +)\. (png|jpg)---/ or $line =~ / \[ Pg \S +? \] / ) {
482
+ unless ( $line =~ / ^-----File: (\S +)\. (png|jpg)---/ or $line =~ / $marker_flag_regex / ) {
481
483
$textwindow -> ntdelete( $linestart , $lineend );
482
484
my $stdline = ( ' -' x 5 ) . " File: $page .$ext " ;
483
485
$stdline .= ' -' x ( 75 - length ($stdline ) );
@@ -640,11 +642,38 @@ sub file_guess_page_marks {
640
642
# Add page marker flags to facilitate editing in another editor
641
643
sub add_page_marker_flags {
642
644
643
- # Done in reverse order so two adjacent boundaries preserve their order.
644
- my $mark = ' end' ;
645
+ # Get name of first page mark because it needs special treatment if
646
+ # labels haven't been set up yet.
647
+ my $mark = ' 1.0' ;
648
+ my $firstmark = ' ' ;
649
+ while ( $mark = $: :textwindow-> markNext($mark ) ) {
650
+ if ( $mark =~ / Pg\S +/ ) {
651
+ $firstmark = $mark ;
652
+ last ;
653
+ }
654
+ }
655
+
656
+ # Work in reverse order so two adjacent boundaries preserve their order.
657
+ $mark = ' end' ;
645
658
while ( $mark = $: :textwindow-> markPrevious($mark ) ) {
646
659
if ( $mark =~ / Pg\S +/ ) {
647
- $: :textwindow-> insert( $mark , " [$mark ]" , ' pageflag' );
660
+ my $img = $mark ;
661
+ $img =~ s / Pg// ;
662
+ my $style = $: :pagenumbers{$mark }{style };
663
+ if ( not defined ($style ) or length ($style ) == 0 ) {
664
+ $style = $mark eq $firstmark ? ' Arabic' : ' "' ;
665
+ }
666
+ my $number = ' +1' ;
667
+ my $action = $: :pagenumbers{$mark }{action };
668
+ if ( not defined ($action ) or length ($action ) == 0 ) {
669
+ $number = ' 1' if $mark eq $firstmark ;
670
+ } elsif ( $action eq ' Start @' ) {
671
+ $number = $: :pagenumbers{$mark }{base };
672
+ } else {
673
+ $number = $: :pagenumbers{$mark }{action };
674
+ }
675
+
676
+ $: :textwindow-> insert( $mark , " [Img$img |$style |$number ]" , ' pageflag' );
648
677
}
649
678
}
650
679
}
@@ -654,7 +683,8 @@ sub add_page_marker_flags {
654
683
sub remove_page_marker_flags {
655
684
my $len ;
656
685
while ( my $found =
657
- $: :textwindow-> search( ' -regexp' , ' -count' , \$len , ' --' , ' \[Pg\S+?\]' , " 1.0" , " end" ) ) {
686
+ $: :textwindow-> search( ' -regexp' , ' -count' , \$len , ' --' , $marker_flag_regex , " 1.0" , " end" )
687
+ ) {
658
688
$: :textwindow-> delete ( $found , " $found +${len} c" );
659
689
}
660
690
}
@@ -664,19 +694,60 @@ sub remove_page_marker_flags {
664
694
sub update_page_markers_from_flags {
665
695
my $textwindow = $: :textwindow;
666
696
697
+ # Nothing to do if no flags
698
+ return if not $textwindow -> search( ' -regexp' , ' --' , $marker_flag_regex , ' 1.0' , ' end' );
699
+
700
+ # Clear all page marks
701
+ for ( $textwindow -> markNames() ) {
702
+ $textwindow -> markUnset($_ ) if $_ =~ m { Pg(\S +)} ;
703
+ }
704
+ %::pagenumbers = ();
705
+
667
706
my $len ;
668
707
my $search_start = ' 1.0' ;
708
+ my $cur_page = 1;
709
+ my $cur_style = ' Arabic' ;
669
710
while (
670
711
my $found = $textwindow -> search(
671
- ' -regexp' , ' -count' , \$len , ' --' , ' \[(Pg\S+?)\] ' , $search_start , ' end'
712
+ ' -regexp' , ' -count' , \$len , ' --' , $marker_flag_regex , $search_start , ' end'
672
713
)
673
714
) {
674
715
$textwindow -> tagAdd( ' pageflag' , " $found " , " $found +${len} c" );
675
- my $pagemark = $textwindow -> get( " $found +1c" , " $found +${len} c-1c" );
716
+ my $pageflag = $textwindow -> get( $found , " $found +${len} c" );
717
+ $pageflag =~ $marker_flag_regex ;
718
+
719
+ # Will always match since same regex as above
720
+ my $img = $1 ;
721
+ my $style = $2 ;
722
+ my $number = $3 ;
723
+ my $pagemark = " Pg$img " ;
724
+ $: :pagenumbers{$pagemark } = {};
676
725
$: :pagenumbers{$pagemark }{offset } = 1;
726
+ $: :pagenumbers{$pagemark }{style } = $style ;
727
+ $cur_style = $style if $style ne ' "' ;
728
+
729
+ if ( $number eq " No Count" ) {
730
+ $: :pagenumbers{$pagemark }{action } = " No Count" ;
731
+ $: :pagenumbers{$pagemark }{label } = " " ;
732
+ } else {
733
+ if ( $number eq " +1" ) {
734
+ $: :pagenumbers{$pagemark }{action } = " +1" ;
735
+ $cur_page ++;
736
+ } else {
737
+ $: :pagenumbers{$pagemark }{action } = " Start @" ;
738
+ $: :pagenumbers{$pagemark }{base } = $number ;
739
+ $cur_page = $number ;
740
+ }
741
+ if ( $cur_style eq ' Roman' ) {
742
+ $: :pagenumbers{$pagemark }{label } = " Pg " . lc ( ::roman($cur_page ) or ' ' );
743
+ } else {
744
+ $: :pagenumbers{$pagemark }{label } = " Pg $cur_page " ;
745
+ }
746
+ }
747
+
677
748
$textwindow -> markSet( $pagemark , $found );
678
749
$textwindow -> markGravity( $pagemark , ' left' );
679
- $search_start = $textwindow -> index (" $found +4c " );
750
+ $search_start = $textwindow -> index (" $found +7c " );
680
751
}
681
752
}
682
753
0 commit comments