From 33c40ee8228a0ceac856a3962e9ad3af712625c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20Ankarstr=C3=B6m?= Date: Fri, 13 Nov 2020 01:51:49 +0100 Subject: change punctuation stripping It wasn't a good idea to strip parentheses, as a missing %y would cause bugs like these: (Author when using the format (%A %y). --- rf | 28 ++++++++++++++++++---------- rf.1 | 2 +- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/rf b/rf index 338409d..4b25fbf 100755 --- a/rf +++ b/rf @@ -6,7 +6,7 @@ use warnings; # Default configuration my %fmt; -$fmt{r} = '%a (%y). {\fI%t\fR}. {\*Q%q\*U}. %n, %d. %c: %p. {Available: %w.}'; +$fmt{r} = '%a {(%y)}. {\fI%t\fR}. {\*Q%q\*U}. %n, %d. %c: %p. {Available: %w}'; $fmt{f} = "\n(%A %y)"; $fmt{x} = "\n(%y)"; @@ -169,22 +169,30 @@ sub fmt { my $val = $ref{lc $fld}; $val = join '; ', @$val if lc $fld eq 'a'; $val = fmtl($val) if $fld eq 'A'; - if ($val =~ /\.$/) { - $fmt =~ s/\{([^{}%]*)%\Q$fld\E([^{}]*)}\.?/$1$val$2/g; - $fmt =~ s/%\Q$fld\E\.?/$val/g; + if ($val =~ /[.,?!]$/) { # fix double punctuation + next if $fmt =~ s/\{([^{}%]*)%\Q$fld\E[.,?!]?([^{}]*)}/$1$val$2/g; + $fmt =~ s/%\Q$fld\E[.,?!]?/$val/g } else { - $fmt =~ s/\{([^{}%]*)%\Q$fld\E([^{}]*)}/$1$val$2/g; - $fmt =~ s/%\Q$fld\E/$val/g; + next if $fmt =~ s/\{([^{}%]*)%\Q$fld\E([^{}]*)}/$1$val$2/g; + $fmt =~ s/%\Q$fld\E/$val/g } - } else { + } else { # remove escape syntax after failed interpolation no warnings; - $fmt =~ s/[.([]?\{([^{}%]*)%\Q$fld\E([^{}]*)}[.,?!:;\])]?//g; - $fmt =~ s/[.([]?%\Q$fld\E[.,?!:;\])]?//g; + next if $fmt =~ s/\{([^{}%]*)%\Q$fld\E([^{}]*)}[.,?!:;]?//g; + $fmt =~ s/%\Q$fld\E[.,?!:;]?//g; } } - $fmt =~ s/([^.]) +/$1 /g; + + # strip superfluous spaces $fmt =~ s/^ *//; $fmt =~ s/ *$//; + $fmt =~ s/([^.]) +/$1 /g; + $fmt =~ s/([[(]) /$1/g; + $fmt =~ s/ ([\])])/$1/g; + $fmt =~ s/ ([.,])/$1/g; + # fix superfluous period after quote + $fmt =~ s/([.,?!]")\./$1/g; + $fmt =~ s/([.,?!]\\\*U)\./$1/g; return $fmt; } diff --git a/rf.1 b/rf.1 index fe69186..924f9c7 100644 --- a/rf.1 +++ b/rf.1 @@ -84,7 +84,7 @@ These macros control control the appearance of references and citations. .It Sy \&Fr Defines the format for references in the bibliography. .Pp -Default: %a (%y). {\\fI%t\\fR}. {\\*Q%q\\*U}. %n, %d. %c: %p. {Available: %w.} +Default: %a {(%y)}. {\\fI%t\\fR}. {\\*Q%q\\*U}. %n, %d. %c: %p. {Available: %w} .It Sy \&Ff Defines the format for .Dq full -- cgit v1.2.3