Touren application
[infodrom.org/touren.infodrom.org] / core / wiki.class.php
1 <?php
2
3 class Wiki
4 {
5     public static function renderHTML($text)
6     {
7         if (is_null($text) || !strlen($text)) return NULL;
8
9         $lines = preg_split('/\r?\n/', $text);
10
11         foreach ($lines as &$line) {
12             if (!strlen($line)) continue;
13
14             $line = preg_replace(
15                                  [
16                                   '/^----$/',
17                                   '/===== (.*) =====/',
18                                   '/==== (.*) ====/',
19                                   '/=== (.*) ===/',
20                                   '/== (.*) ==/',
21                                   '/= (.*) =/',
22                                   '/^(.+)\[\[(https?:\/\/[^\]\|]+)\|([^\]]+)\]\]/',
23                                   '/^(.+)\[\[([^\]\|]+)\|([^\]]+)\]\]/',
24                                   '/^(.+)\[\[(https?:\/\/([^\]\|]+))\]\]/',
25                                   '/^(.+)\[\[([^\]\|]+)\]\]/',
26                                   '/^ \* (.*)/',
27                                   '/^ 1\. (.*)/',
28                                   "/'''''([^\']+)'''''/",
29                                   "/'''([^\']+)'''/",
30                                   "/''([^\']+)''/",
31                                   ],
32                                  [
33                                   '<hr>',
34                                   '<h5>${1}</h5>',
35                                   '<h4>${1}</h4>',
36                                   '<h3>${1}</h3>',
37                                   '<h2>${1}</h2>',
38                                   '<h1>${1}</h1>',
39                                   '${1}<a href="${2}" target="_blank">${3}</a>',
40                                   '${1}<a href="http://${2}" target="_blank">${3}</a>',
41                                   '${1}<a href="${2}" target="_blank">${3}</a>',
42                                   '${1}<a href="http://${2}" target="_blank">${2}</a>',
43                                   '<ul-li>${1}</li>',
44                                   '<ol-li>${1}</li>',
45                                   '<em><strong>${1}</strong></em>',
46                                   '<strong>${1}</strong>',
47                                   '<em>${1}</em>',
48                                   ],
49                                  $line);
50         }
51
52         for ($i=0; $i < count($lines); $i++) {
53             if (strpos($lines[$i], '<ul-li>') === 0) {
54                 for ($j=$i+1; $j < count($lines) && strpos($lines[$j], '<ul-li>') !== false; $j++);
55                 $lines[$i] = '<p><ul>' . $lines[$i];
56                 $lines[$j-1] = $lines[$j-1] . '</ul></p>';
57                 $i = $j-1;
58             } elseif (strpos($lines[$i], '<ol-li>') === 0) {
59                 for ($j=$i+1; $j < count($lines) && strpos($lines[$j], '<ol-li>') !== false; $j++);
60                 $lines[$i] = '<p><ol>' . $lines[$i];
61                 $lines[$j-1] = $lines[$j-1] . '</ol></p>';
62                 $i = $j-1;
63             } elseif  (strlen($lines[$i]) && strpos($lines[$i], '<') !== 0) {
64                 for ($j=$i+1; $j < count($lines) && (strlen($lines[$j]) && strpos($lines[$j], '<') !== 0); $j++);
65                 $lines[$i] = '<p>' . $lines[$i];
66                 $lines[$j-1] = $lines[$j-1] . '</p>';
67                 $i = $j-1;
68             }
69         }
70
71         foreach ($lines as &$line) {
72             if (!strlen($line)) continue;
73
74             $line = str_replace(['<ul-li>', '<ol-li>'], ['<li>', '<li>'], $line);
75         }
76
77         return implode('', $lines);
78     }
79 }