Well, the CVS server was working intermittently (stopped working again now), so I've managed to create a patch for my bugfix. This is much shorter than the previous, but it's really just a rearrangement of the code. The only differences to the previous ones are that this input: ''''' text ''' text '' which previously would have output this: <strong><em> text </em></strong><em> text </em> now correctly outputs the expected markup: <em><strong> text </strong> text </em>
At least I hope so. ;-)
Here is the (new) patch. Please let me know if there's still anything I can ameliorate about it.
Greetings, Timwi
------------------------------------------------------------------------
--- OutputPage-orig.php Wed Jul 2 13:04:02 2003 +++ OutputPage.php Wed Jul 2 15:11:52 2003 @@ -658,7 +658,7 @@ $text = preg_replace( "/(^|\n)-----*/", "\1<hr>", $text ); $text = str_replace ( "<HR>", "<hr>", $text );
- $text = $this->doQuotes( $text ); + $text = $this->doQuotes( "", $text, "" ); $text = $this->doHeadings( $text ); $text = $this->doBlockLevels( $text, $linestart ); @@ -677,11 +677,30 @@ return $text; }
- /* private */ function doQuotes( $text ) + /* private */ function doQuotes( $pre, $text, $mode ) { - $text = preg_replace( "/'''(.+)'''/mU", "<strong>$1</strong>", $text ); - $text = preg_replace( "/''(.+)''/mU", "<em>$1</em>", $text ); - return $text; + if ( preg_match( "/^(.*)''(.*)$/mU", $text, $m ) ) { + if ( substr ($m[2], 0, 1) == "'" ) { + $m[2] = substr ($m[2], 1); + return $mode == "em" ? $m[1] == "" ? doQuotes ( "", $m[2], "both" ) : + doQuotes ( $m[1], $m[2], "emstrong" ) : + $mode == "strong" ? "<strong>" . $m[1] . "</strong>" . doQuotes ( "", $m[2], "" ) : + $mode == "emstrong" ? doQuotes ( "", $pre . "<strong>" . $m[1] . "</strong>" . $m[2], "em" ) : + $mode == "strongem" ? "<strong>" . $pre . "<em>" . $m[1] . "</em></strong>" . doQuotes ( "", $m[2], "em" ) : + $mode == "both" ? doQuotes ( "", "<strong>" . $m[1] . "</strong>" . $m[2], "em" ) : + $m[1] . doQuotes ( "", $m[2], "strong" ); + } else { + return $mode == "em" ? "<em>" . $m[1] . "</em>" . doQuotes ( $m[2] ) : + $mode == "strong" ? $m[1] == "" ? doQuotes ( "", $m[2], "both" ) : + doQuotes ( $m[1], $m[2], "strongem" ) : + $mode == "emstrong" ? "<em>" . $pre . "<strong>" . $m[1] . "</strong></em>" . doQuotes ( "", $m[2], "strong" ) : + $mode == "strongem" ? doQuotes ( "", $pre . "<em>" . $m[1] . "</em>" . $m[2], "strong" ) : + $mode == "both" ? doQuotes ( "", "<em>" . $m[1] . "</em>" . $m[2], "strong" ) : + $m[1] . doQuotes ( "", $m[2], "em" ); + } + } else { + return $pre . ($mode == "" ? "" : $mode == "em" ? "''" : $mode == "strong" ? "'''" : "'''''") . $text; + } }
/* private */ function doHeadings( $text )