I post a lot of plain text results on my forums that use courier fonts, and it's much easier to have them use preformatted text rather than a code/php box.
Adding the [PRE] tag itself is a very simple mini-hack. You just fire up \includes\functions_bbcodeparse.php and make two additions. Here is what I did.
In the function fetch_bbcode_definitions, add the following in whichever bracketed section you deem appropriate (I used ALLOW_BBCODE_BASIC):
Code:
// [PRE]
$bbcodes['custom']['find']['[pre]'] = '#\[pre\](<br>|<br />|\r\n|\n|\r)??(.*)(<br>|<br />|\r\n|\n|\r)??\[/pre\]#esiU';
$bbcodes['custom']['replace']['[pre]'] = "handle_bbcode_pre('\\2')";
$bbcodes['custom']['recurse']['pre'][0] = array('handler' => 'handle_bbcode_pre');
Somewhere else in the file, add the function handle_bbcode_pre as so:
Code:
// ###################### Start bbcodehandler_pre #######################
function handle_bbcode_pre($text)
{
$textfind = array(
'<br>', // <br> to nothing
'<br />' // <br /> to nothing
);
$textreplace = array(
'',
''
);
$newtext = "<pre style=\"margin: 0;\">" . trim(str_replace($textfind,$textreplace,$text)) . "</pre>";
return $newtext;
}
Okay, so far so good. Works like a charm with the standard text editor. However, when you EDIT an existing post that contains a PRE tag using the WYSIWYG editor, the formatting is lost when the editor loads.
Does anybody know why this is, or how it may be fixed? Or have any other feedback towards doing this?
For what it's worth, the reason you cannot simply make a custom PRE tag via the Admin CP is that nl2br() gets called on the text and a BR tag gets inserted at every newline. I also know that you could just use some CSS to force the BR tags in a PRE block to display: none, but I am wanting to find a solution to the above problem for my own curiosity, I guess.