diff --git a/Markdown.pl b/Markdown.pl index c676961..d7dec94 100755 --- a/Markdown.pl +++ b/Markdown.pl @@ -1194,15 +1194,15 @@ BEGIN { sub _GetListMarkerType { - my ($list_type, $list_marker, $first_marker) = @_; + my ($list_type, $list_marker, $last_marker) = @_; return "" unless $list_type && $list_marker && lc($list_type) eq "ol"; - unless ($list_marker =~ /^[IiVvXx][.\)]?$/ && - # these are roman unless $first_marker type is 'a' or 'A' - defined($first_marker) && - lc(_GetListMarkerType($list_type, $first_marker)) eq 'a') { - return "I" if $list_marker =~ /^[IVX]/; - return "i" if $list_marker =~ /^[ivx]/; - } + my $last_marker_type = ''; + $last_marker_type = _GetListMarkerType($list_type, $last_marker) + if defined($last_marker) && + # these are roman unless $last_marker type case matches and is 'a' or 'A' + $list_marker =~ /^[IiVvXx][.\)]?$/; + return "I" if $list_marker =~ /^[IVX]/ && $last_marker_type ne 'A'; + return "i" if $list_marker =~ /^[ivx]/ && $last_marker_type ne 'a'; return "A" if $list_marker =~ /^[A-Z]/; return "a" if $list_marker =~ /^[a-z]/ || $list_marker =~ /^$greek_lower/o; return "1"; @@ -1210,8 +1210,8 @@ sub _GetListMarkerType { sub _GetListItemTypeClass { - my ($list_type, $list_marker, $first_marker) = @_; - my $list_marker_type = _GetListMarkerType($list_type, $list_marker, $first_marker); + my ($list_type, $list_marker, $last_marker) = @_; + my $list_marker_type = _GetListMarkerType($list_type, $list_marker, $last_marker); my $ans = &{sub{ return "" unless length($list_marker) >= 2 && $list_marker_type =~ /^[IiAa1]$/; return "lower-greek" if $list_marker_type eq "a" && $list_marker =~ /^$greek_lower/o; @@ -1520,7 +1520,7 @@ sub _ProcessListItems { $oldpos = $-[0]; # point at start of this entire match } if (!defined($first_marker)) { - $first_marker = $last_marker = $list_marker; + $first_marker = $list_marker; $first_marker_type = _GetListMarkerType($list_type, $first_marker); if ($first_marker_type) { (my $marker_val = $first_marker) =~ s/[.\)]$//; @@ -1532,8 +1532,6 @@ sub _ProcessListItems { # Wrong marker kind, "fix up" the marker to a correct "lazy" marker # But keep the old length in $list_marker_len $list_marker = $last_marker; - } else { - $last_marker = $list_marker; } # Now grab the rest of this item's data upto but excluding the next @@ -1581,7 +1579,7 @@ sub _ProcessListItems { $checkbox = "[$checkbox_val"; } else { my $list_marker_type; - ($list_marker_type, $liatt) = _GetListItemTypeClass($list_type, $list_marker, $first_marker); + ($list_marker_type, $liatt) = _GetListItemTypeClass($list_type, $list_marker, $last_marker); if ($list_type eq "ol" && defined($first_marker)) { my $styled = $fancy = 1 if $liatt && $list_marker =~ /\)$/; my ($sfx, $dash) = ("", ""); @@ -1594,8 +1592,8 @@ sub _ProcessListItems { $sfx .= "-greek" if $liatt =~ /greek/; $liatt = " class=\"$opt{style_prefix}$sfx\"" if $sfx; $typechanged = 1 if $list_marker_type ne $first_marker_type; - $list_marker =~ s/[.\)]$//; - my $marker_num = _GetMarkerIntegerNum($list_marker_type, $list_marker); + (my $marker_val = $list_marker) =~ s/[.\)]$//; + my $marker_num = _GetMarkerIntegerNum($list_marker_type, $marker_val); $marker_num = $next_num if $marker_num < $next_num; $skipped = 1 if $next_num < $marker_num; $incr = _IncrList($next_num, $marker_num, "incrlevel=$g_list_level"); @@ -1604,6 +1602,7 @@ sub _ProcessListItems { $next_num = $marker_num + 1; } } + $last_marker = $list_marker; if ($leading_line or ($item =~ m/\n{2,}/)) { $item = _RunBlockGamut(_Outdent($item));