Revision [5990]

This is an old revision of CommentsFormatting made by NilsLindenberg on 2005-02-15 11:04:59.

 

Wikka-markup in Comments


To make comments a little bit more flexible, why don't add a part of wikkas markup?

I thought about: italic, bold, monospace, strikethough, underlined, notes, WikiWords and InterWikiLinks


1. Problems

I used the code of wakka.php, but there are two problems remaining:

urls getting "italic"
- http://example.com gets "italic" => http: www.example.com. I want to replace :// before the formatting, but cant get the regexp work. At the moment I use "/[:\/\/]/".

html in the comments-table
A "forced" line-break (enter-key) leads to an <br />, which shouldn't be there. The source of this problem: since a formatter for comments does not exist, "handlers/page/addcomment.php", uses nl2br to store the html in the table itself.

Solution:
change line 7 in formatters/page/addcomments.php into the following one:
    $body = $this->htmlspecialchars_ent(trim($_POST["body"]));


Remaining problem: the <br /> in the already existing comments remain, and will show up now.

The Code


1. Search in the handlers/page/show.php for display comments themselves:

There you can find a line:
 print("<div class=\"comment\">\n");


change the two lines after that into these ones!
                        print("<span id=\"comment_".$comment["id"]."\"></span>".$this->Format($comment["comment"], "comments")."\n");
                        print("\t<div class=\"commentinfo\">\n-- ".$this->Format($comment["user"], "comments")." (".$comment["time"].")\n");


2. Save the following as formatters/comments.php:
<?php

// This may look a bit strange, but all possible formatting tags have to be in a single regular expression for this to work correctly. Yup!

//#dotmg [many lines] : Unclosed tags fix! For more info, m.randimbisoa@dotmg.net ((only indents? --NilsLindenberg))
if (!function_exists("comments2callback"))
{
    function comments2callback($things)
    {
        $thing = $things[1];
        $result='';
       
        static $trigger_bold = 0;
        static $trigger_italic = 0;
        static $trigger_underline = 0;
        static $trigger_monospace = 0;
        static $trigger_notes = 0;
        static $trigger_strike = 0;
        static $trigger_sup = 0;
        static $trigger_sub = 0;
        static $br = 1;    

        global $wakka;

            if ((!is_array($things)) && ($things == 'closetags'))
        {
        if ($trigger_bold % 2) echo('</strong>');
        if ($trigger_italic % 2) echo('</em>');
        if ($trigger_underline % 2) echo('</span>');
        if ($trigger_monospace % 2) echo('</tt>');
        if ($trigger_notes % 2) echo ('</span>');
        if ($trigger_strike % 2) echo ('</span>');
        if ($trigger_sup % 2) echo '</sup>';
        if ($trigger_sub % 2) echo '</sub>';

        $trigger_bold = $trigger_italic = $trigger_underline = $trigger_monospace = $trigger_notes = $trigger_strike = $trigger_sup = $trigger_sub = 0;
        return;
        }

        // convert HTML thingies
        if ($thing == "<") return "&lt;";
        else if ($thing == ">") return "&gt;";

        // bold
        else if ($thing == "**")
        {
        return (++$trigger_bold % 2 ? "<strong>" : "</strong>");
        }
       
        // italic
        else if ($thing == "//")
        {
        return (++$trigger_italic % 2 ? "<em>" : "</em>");
        }
       
        // underlinue
        else if ($thing == "__")
        {
        return (++$trigger_underline % 2 ? "<span class=\"underline\">" : "</span>");
            }

        // monospace
        else if ($thing == "##")
        {
        return (++$trigger_monospace % 2 ? "<tt>" : "</tt>");
        }
       
        // notes
        else if ($thing == "''")
        {
        return (++$trigger_notes % 2 ? "<span class=\"notes\">" : "</span>");
        }

        // strikethrough
        else if ($thing == "++")
        {
        return (++$trigger_strike % 2 ? "<span class=\"strikethrough\">" : "</span>");
        }

                   /*
        // superscript
        else if ($thing == "^^")
        {
        return (++$trigger_sup % 2 ? "<sup>" : "</sup>");
        }
       
        // subscript
        else if ($thing == "vv")
        {
        return (++$trigger_sub % 2 ? "<sub>" : "</sub>");
        }
                  */
 

        // interwiki links!
        else if (preg_match("/^[A-ZÄÖÜ][A-Za-zÄÖÜßäöü]+[:]\S*$/s", $thing))
        {
        return $wakka->Link($thing);
        }

        // wiki links!
        else if (preg_match("/^[A-ZÄÖÜ]+[a-zßäöü]+[A-Z0-9ÄÖÜ][A-Za-z0-9ÄÖÜßäöü]*$/s", $thing))
        {
        return $wakka->Link($thing);
        }

        // new lines
        else if ($thing == "\n")
        {
        $result .= ($br ? "<br />\n" : "\n");
        $br = 1;
        return $result;
        }

        // if we reach this point, it must have been an accident.
        return $thing;
    }
}

$text = str_replace("\r\n", "\n", $text);

// replacing part of urls so the don't get italic
// $text = str_replace("/[:]\/\//", "DUMPTEXT", $text);

$text = preg_replace_callback(
    "/(".
    "<|>|".                     #html-tags
    "\*\*|\'\'|\#\#|\+\+|__|<|>|\/\/|".                         # Wiki markup                  
    "\b[A-ZÄÖÜ][A-Za-zÄÖÜßäöü]+[:](?![=_])\S*\b|".        # InterWiki link
    "\b([A-ZÄÖÜ]+[a-zßäöü]+[A-Z0-9ÄÖÜ][A-Za-z0-9ÄÖÜßäöü]*)\b|".    # CamelCaseWords
    "\n".
    ")/ms", "comments2callback", $text);

// we're cutting the last <br />
$text = preg_replace("/<br \/>$/","", $text);

// re-replacing the url-part
// $text = ereg_replace("DUMPTEXT", "://", $text);

echo ($text);
comments2callback('closetags');
?>




CategoryUsercontributions
There are 7 comments on this page. [Show comments]
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki