Skip to content

Commit

Permalink
Add page label info to page marker flags
Browse files Browse the repository at this point in the history
See equivalent edits in GG2 (PR DistributedProofreaders#330). Will not work with
older versions of GG2.

DistributedProofreaders/guiguts-py#330
  • Loading branch information
windymilla committed Jul 20, 2024
1 parent 1b7360f commit 43c9f1f
Showing 1 changed file with 79 additions and 8 deletions.
87 changes: 79 additions & 8 deletions src/lib/Guiguts/FileMenu.pm
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ BEGIN {
&cpcharactersubs &getsafelastpath &add_page_marker_flags &remove_page_marker_flags);
}

my $marker_flag_regex = '\[Img(.+?)\|(.+?)\|(.+?)\]';

#
# Wrapper routine to find a text/HTML file and open it
sub file_open {
Expand Down Expand Up @@ -477,7 +479,7 @@ sub file_mark_pages {
my $pagemark = 'Pg' . $page;

# Standardize page separator line format if necessary
unless ( $line =~ /^-----File: (\S+)\.(png|jpg)---/ or $line =~ /\[Pg\S+?\]/ ) {
unless ( $line =~ /^-----File: (\S+)\.(png|jpg)---/ or $line =~ /$marker_flag_regex/ ) {
$textwindow->ntdelete( $linestart, $lineend );
my $stdline = ( '-' x 5 ) . "File: $page.$ext";
$stdline .= '-' x ( 75 - length($stdline) );
Expand Down Expand Up @@ -640,11 +642,38 @@ sub file_guess_page_marks {
# Add page marker flags to facilitate editing in another editor
sub add_page_marker_flags {

# Done in reverse order so two adjacent boundaries preserve their order.
my $mark = 'end';
# Get name of first page mark because it needs special treatment if
# labels haven't been set up yet.
my $mark = '1.0';
my $firstmark = '';
while ( $mark = $::textwindow->markNext($mark) ) {
if ( $mark =~ /Pg\S+/ ) {
$firstmark = $mark;
last;
}
}

# Work in reverse order so two adjacent boundaries preserve their order.
$mark = 'end';
while ( $mark = $::textwindow->markPrevious($mark) ) {
if ( $mark =~ /Pg\S+/ ) {
$::textwindow->insert( $mark, "[$mark]", 'pageflag' );
my $img = $mark;
$img =~ s/Pg//;
my $style = $::pagenumbers{$mark}{style};
if ( not defined($style) or length($style) == 0 ) {
$style = $mark eq $firstmark ? 'Arabic' : '"';
}
my $number = '+1';
my $action = $::pagenumbers{$mark}{action};
if ( not defined($action) or length($action) == 0 ) {
$number = '1' if $mark eq $firstmark;
} elsif ( $action eq 'Start @' ) {
$number = $::pagenumbers{$mark}{base};
} else {
$number = $::pagenumbers{$mark}{action};
}

$::textwindow->insert( $mark, "[Img$img|$style|$number]", 'pageflag' );
}
}
}
Expand All @@ -654,7 +683,8 @@ sub add_page_marker_flags {
sub remove_page_marker_flags {
my $len;
while ( my $found =
$::textwindow->search( '-regexp', '-count', \$len, '--', '\[Pg\S+?\]', "1.0", "end" ) ) {
$::textwindow->search( '-regexp', '-count', \$len, '--', $marker_flag_regex, "1.0", "end" )
) {
$::textwindow->delete( $found, "$found+${len}c" );
}
}
Expand All @@ -664,19 +694,60 @@ sub remove_page_marker_flags {
sub update_page_markers_from_flags {
my $textwindow = $::textwindow;

# Nothing to do if no flags
return if not $textwindow->search( '-regexp', '--', $marker_flag_regex, '1.0', 'end' );

# Clear all page marks
for ( $textwindow->markNames() ) {
$textwindow->markUnset($_) if $_ =~ m{Pg(\S+)};
}
%::pagenumbers = ();

my $len;
my $search_start = '1.0';
my $cur_page = 1;
my $cur_style = 'Arabic';
while (
my $found = $textwindow->search(
'-regexp', '-count', \$len, '--', '\[(Pg\S+?)\]', $search_start, 'end'
'-regexp', '-count', \$len, '--', $marker_flag_regex, $search_start, 'end'
)
) {
$textwindow->tagAdd( 'pageflag', "$found", "$found+${len}c" );
my $pagemark = $textwindow->get( "$found+1c", "$found+${len}c-1c" );
my $pageflag = $textwindow->get( $found, "$found+${len}c" );
$pageflag =~ $marker_flag_regex;

# Will always match since same regex as above
my $img = $1;
my $style = $2;
my $number = $3;
my $pagemark = "Pg$img";
$::pagenumbers{$pagemark} = {};
$::pagenumbers{$pagemark}{offset} = 1;
$::pagenumbers{$pagemark}{style} = $style;
$cur_style = $style if $style ne '"';

if ( $number eq "No Count" ) {
$::pagenumbers{$pagemark}{action} = "No Count";
$::pagenumbers{$pagemark}{label} = "";
} else {
if ( $number eq "+1" ) {
$::pagenumbers{$pagemark}{action} = "+1";
$cur_page++;
} else {
$::pagenumbers{$pagemark}{action} = "Start @";
$::pagenumbers{$pagemark}{base} = $number;
$cur_page = $number;
}
if ( $cur_style eq 'Roman' ) {
$::pagenumbers{$pagemark}{label} = "Pg " . lc( ::roman($cur_page) or '' );
} else {
$::pagenumbers{$pagemark}{label} = "Pg $cur_page";
}
}

$textwindow->markSet( $pagemark, $found );
$textwindow->markGravity( $pagemark, 'left' );
$search_start = $textwindow->index("$found+4c");
$search_start = $textwindow->index("$found+7c");
}
}

Expand Down

0 comments on commit 43c9f1f

Please sign in to comment.