You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.8 KiB
98 lines
2.8 KiB
<?php
|
|
|
|
/**
|
|
* Parser utils and default callbacks.
|
|
*
|
|
* @author Josep Arús
|
|
*
|
|
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
|
|
* @package mod_wiki
|
|
*/
|
|
|
|
require_once($CFG->dirroot . "/lib/outputcomponents.php");
|
|
|
|
class parser_utils {
|
|
|
|
public static function h($tag, $text = null, $options = array(), $escape_text = false) {
|
|
$tag = htmlentities($tag, ENT_COMPAT, 'UTF-8');
|
|
if(!empty($text) && $escape_text) {
|
|
$text = htmlentities($text, ENT_COMPAT, 'UTF-8');
|
|
}
|
|
return html_writer::tag($tag, $text, $options);
|
|
}
|
|
|
|
/**
|
|
* Default link generator
|
|
*/
|
|
|
|
public static function wiki_parser_link_callback($link, $options) {
|
|
$l = urlencode($link);
|
|
if(!empty($options['anchor'])) {
|
|
$l .= "#".urlencode($options['anchor']);
|
|
}
|
|
return array('content' => $link, 'url' => "http://".$l);
|
|
}
|
|
|
|
|
|
/**
|
|
* Default table generator
|
|
*/
|
|
|
|
public static function wiki_parser_table_callback($table) {
|
|
$html = "";
|
|
$headers = $table[0];
|
|
$columncount = count($headers);
|
|
$headerhtml = "";
|
|
foreach($headers as $h) {
|
|
$text = trim($h[1]);
|
|
if($h[0] == 'header') {
|
|
$headerhtml .= "\n".parser_utils::h('th', $text)."\n";
|
|
$hasheaders = true;
|
|
}
|
|
else if($h[0] == 'normal'){
|
|
$headerhtml .= "\n".parser_utils::h("td", $text)."\n";
|
|
}
|
|
}
|
|
$headerhtml = "\n".parser_utils::h('tr', $headerhtml)."\n";
|
|
$bodyhtml = "";
|
|
if(isset($hasheaders)) {
|
|
$html = "\n".parser_utils::h('thead', $headerhtml)."\n";
|
|
}
|
|
else {
|
|
$bodyhtml .= $headerhtml;
|
|
}
|
|
|
|
array_shift($table);
|
|
foreach($table as $row) {
|
|
$htmlrow = "";
|
|
for($i = 0; $i < $columncount; $i++) {
|
|
$text = "";
|
|
if(!isset($row[$i])) {
|
|
$htmlrow .= "\n".parser_utils::h('td', $text)."\n";
|
|
}
|
|
else {
|
|
$text = trim($row[$i][1]);
|
|
if($row[$i][0] == 'header') {
|
|
$htmlrow .= "\n".parser_utils::h('th', $text)."\n";
|
|
}
|
|
else if($row[$i][0] == 'normal'){
|
|
$htmlrow .= "\n".parser_utils::h('td', $text)."\n";
|
|
}
|
|
}
|
|
}
|
|
$bodyhtml .= "\n".parser_utils::h('tr', $htmlrow)."\n";
|
|
}
|
|
|
|
$html .= "\n".parser_utils::h('tbody', $bodyhtml)."\n";
|
|
return "\n".parser_utils::h('table', $html)."\n";
|
|
}
|
|
|
|
/**
|
|
* Default path converter
|
|
*/
|
|
|
|
public static function wiki_parser_real_path($url) {
|
|
return $url;
|
|
}
|
|
}
|
|
|
|
|