This repository has been archived on 2021-12-22. You can view files and clone it, but cannot push or open issues or pull requests.
blog-legacy/lib/md.php

144 lines
3.7 KiB
PHP

<?php
function split($text){
$text = str_replace("\r\n", "\n", $text);
$text = str_replace(" ", "\t", $text);
$text = trim($text, "\n");
return explode("\n", $text);
}
function convert($text){
$converted = "";
for($i=0;$i<count($text);$i++){
$transcripted = false;
$text[$i] = trim($text[$i], " ");
if($i+1<count($text)){
if(!$transcripted && preg_match("#^=(=)+$#", $text[$i+1])){
$converted .= "<h1>".$text[$i]."</h1>";
$i++;
$transcripted = true;
}
if(!$transcripted && preg_match("#^-(-)+$#", $text[$i+1])){
$converted .= "<h2>".$text[$i]."</h2>";
$i++;
$transcripted = true;
}
}
if(!$transcripted){
if(preg_match("#^\# (.)+$#", $text[$i])){
$converted .= preg_replace("#^\# (.+)$#", "<h1>$1</h1>", $text[$i]);
$transcripted = true;
}
if(preg_match("#^\#\# (.)+$#", $text[$i])){
$converted .= preg_replace("#^\#\# (.+)$#", "<h2>$1</h2>", $text[$i]);
$transcripted = true;
}
if(preg_match("#^\#\#\# (.)+$#", $text[$i])){
$converted .= preg_replace("#^\#\#\# (.+)$#", "<h3>$1</h3>", $text[$i]);
$transcripted = true;
}
if(preg_match("#^\#\#\#\# (.)+$#", $text[$i])){
$converted .= preg_replace("#^\#\#\#\# (.+)$#", "<h4>$1</h4>", $text[$i]);
$transcripted = true;
}
if(preg_match("#^\#\#\#\#\# (.)+$#", $text[$i])){
$converted .= preg_replace("#^\#\#\#\#\# (.+)$#", "<h5>$1</h5>", $text[$i]);
$transcripted = true;
}
if(preg_match("#^\#\#\#\#\#\# (.)+$#", $text[$i])){
$converted .= preg_replace("#^\#\#\#\#\#\# (.+)$#", "<h6>$1</h6>", $text[$i]);
$transcripted = true;
}
if(preg_match("#^---+$#", $text[$i])){
$converted .= preg_replace("#^---+$#", "<hr />", $text[$i]);
$transcripted = true;
}
}
if(!$transcripted){
if(preg_match("#^[+*-] (.*)$#", $text[$i])){
$converted .= "<ul>";
while($i < count($text) && preg_match("#^[+*-] (.*)$#", $text[$i])){
$li = array(preg_replace("#^[+*-] (.*)$#", "$1", $text[$i]));
$i++;
while($i < count($text) && preg_match("#^\t+(.*)$#", $text[$i])){
$li[] = preg_replace("#^\t+(.*)$#", "$1", $text[$i]);
$i++;
}
$i--;
$converted .= "<li>".convert($li)."</li>";
$i++;
}
$i--;
$converted .= "</ul>";
$transcripted = true;
}
if(preg_match("#^1\. (.*)$#", $text[$i])){
$converted .= "<ol>";
while($i < count($text) && preg_match("#^[0-9]+\. (.*)$#", $text[$i])){
$li = array(preg_replace("#^[0-9]+\. (.*)$#", "$1", $text[$i]));
$i++;
while($i < count($text) && preg_match("#^\t+(.*)$#", $text[$i])){
$li[] = preg_replace("#^\t+(.*)$#", "$1", $text[$i]);
$i++;
}
$i--;
$converted .= "<li>".convert($li)."</li>";
$i++;
}
$i--;
$converted .= "</ol>";
$transcripted = true;
}
}
if(!$transcripted){
$text[$i] = preg_replace("#^(.*)\!\[(.*)\]\((.*)\)(.*)$#", "$1<img alt=\"$2\" src=\"$3\" />$4", $text[$i]);
$text[$i] = preg_replace("#^(.*)\[(.*)\]\((.*)\)(.*)$#", "$1<a href=\"$3\">$2</a>$4", $text[$i]);
$text[$i] = preg_replace("#^(.*)\*\*(.+)\*\*(.*)$#", "$1<b>$2</b>$3", $text[$i]);
$text[$i] = preg_replace("#^(.*)\*(.+)\*(.*)$#", "$1<em>$2</em>$3", $text[$i]);
$text[$i] = preg_replace("#^(.*)(https?://[^ ]*[a-z])(.*)$#", "$1<a href=\"$2\">$2</a>$3", $text[$i]);
$text[$i] = preg_replace("#^(.*)`(.*)`(.*)$#", "$1<code>$2</code>$3", $text[$i]);
$converted .= $text[$i]."<br />";
}
}
return $converted;
}
function countIndentation($string){
$i = 0;
while($i < strlen($string) && $string[$i] == "\t") $i++;
return $i;
}
function md2html($text){
return convert(split($text));
}
?>