sub convert_option;
sub fix_italic_spacing;
sub set_indent;
+sub visual_length;
my $version_info = enc_user sprintf _(<<'EOT'), $this_program, $this_version;
GNU %s %s
if (s/^( {1,10}([+-]\S.*?))(?:( +(?!-))|\n( {7,}))(\S.*)\n//)
{
$matched .= $& if %append_match;
- $indent = set_indent length ($4 || "$1$3");
+ $indent = set_indent visual_length ($4 || "$1$3");
$content = ".TP\n\x84$2\n\x84$5\n";
unless ($4)
{
# Indent may be different on second line.
- $indent = set_indent length $& if /^ {20,}/;
+ $indent = set_indent visual_length $& if /^ {20,}/;
}
}
elsif (s/^( +(\S.*?) +)(\S.*)\n//)
{
$matched .= $& if %append_match;
- $indent = set_indent length $1;
+ $indent = set_indent visual_length $1;
$content = ".TP\n\x84$2\n\x84$3\n";
}
elsif (s/^( +)(\S.*)\n//)
{
$matched .= $& if %append_match;
- $indent = set_indent length $1;
+ $indent = set_indent visual_length $1;
$content = ".IP\n\x84$2\n";
}
$i .= ',' . ($_[0] + 4) if $loose_indent;
return $i;
}
+
+# Return visual length of a string, ignoring hyperlink markers.
+# Markers are \x01<digits>\x02 (opening) and \x03 (closing).
+sub visual_length
+{
+ local $_ = shift;
+ s/\x01\d+\x02//g;
+ s/\x03//g;
+ return length;
+}