Hoi,

the current fix was still buggy. Actually it didn't work.

Attached is a fix that does work. (I checked it against severeal man
pages.)


meillo

diff --git a/roffit b/roffit
index 3d924f9..b7d643f 100755
--- a/roffit
+++ b/roffit
@@ -178,27 +178,30 @@ sub linkfile {
 
 sub handle_italic_bold ($) {
     local $_ = shift;
+    my $inspan = 0;
 
-    while ( m,^(.*?)(\\f[IB].*?\\fR)(.*), ) {
-	my ($before, $match, $after) = ($1, $2, $3);
+    while ( m,^(.*?)\\f(.)(.*), ) {
+	my ($before, $font, $after) = ($1, $2, $3);
+	my $match = '';
 
-	my $counter = 0;
-
-	while ( $match =~ s/\\fI/<span class=\"emphasis\">/ ) {
-	    $counter++;
+	if ($inspan) {
+		$match = '</span>';
+		$inspan = 0;
 	}
 
-	while ( $match =~ s/\\fB/<span class=\"bold\">/ ) {
-	    $counter++;
+	if ($font eq 'I') {
+		$match .= '<span class="emphasis">';
+		$inspan = 1;
+	} elsif ($font eq 'B') {
+		$match .= '<span class="bold">';
+		$inspan = 1;
 	}
 
-	my $tag = '</span>';
-	my $end = $tag x $counter;
-
-	$match =~ s/\\f[PR]/$end/;
-
 	$_ = $before . $match . $after;
     }
+    if ($inspan) {
+	$_ .= '</span>';
+    }
 
     $_;
 }
@@ -470,7 +473,7 @@ sub parsefile {
             $txt =~ s/\\\'/&acute\;/g;
             $txt =~ s/\\\(co/&copy\;/g;
 
-	    $_ = handle_italic_bold $_;
+	    $txt = handle_italic_bold $txt;
 
             # replace backslash [something] with just [something]
             $txt =~ s/\\(.)/$1/g;

Reply via email to