asdlkif
This commit is contained in:
102
application/libs/SimpleMarkdown.php
Normal file
102
application/libs/SimpleMarkdown.php
Normal file
@@ -0,0 +1,102 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Simple Markdown Parser
|
||||
* Supports basic markdown syntax:
|
||||
* # Headers
|
||||
* **bold** *italic* `code`
|
||||
* - lists
|
||||
* [links](url)
|
||||
* > quotes
|
||||
*/
|
||||
|
||||
class SimpleMarkdown
|
||||
{
|
||||
/**
|
||||
* Parse markdown text to HTML
|
||||
*/
|
||||
public static function parse($text)
|
||||
{
|
||||
// Convert special characters to HTML entities first
|
||||
$text = htmlspecialchars($text, ENT_QUOTES, 'UTF-8');
|
||||
|
||||
// Headers (h1-h6)
|
||||
$text = preg_replace('/^#{1,6}\s+(.+)$/m', '<h3>$1</h3>', $text);
|
||||
|
||||
// Bold text
|
||||
$text = preg_replace('/\*\*(.+?)\*\*/', '<strong>$1</strong>', $text);
|
||||
|
||||
// Italic text
|
||||
$text = preg_replace('/\*(.+?)\*/', '<em>$1</em>', $text);
|
||||
|
||||
// Inline code
|
||||
$text = preg_replace('/`(.+?)`/', '<code>$1</code>', $text);
|
||||
|
||||
// Code blocks
|
||||
$text = preg_replace('/```(.+?)```/s', '<pre><code>$1</code></pre>', $text);
|
||||
|
||||
// Links
|
||||
$text = preg_replace('/\[(.+?)\]\((.+?)\)/', '<a href="$2" target="_blank">$1</a>', $text);
|
||||
|
||||
// Blockquotes
|
||||
$text = preg_replace('/^>\s+(.+)$/m', '<blockquote>$1</blockquote>', $text);
|
||||
|
||||
// Unordered lists
|
||||
$text = preg_replace('/^\-\s+(.+)$/m', '<li>$1</li>', $text);
|
||||
$text = preg_replace('/(<li>.*<\/li>)/s', '<ul>$1</ul>', $text);
|
||||
|
||||
// Line breaks
|
||||
$text = nl2br($text);
|
||||
|
||||
// Clean up multiple consecutive line breaks
|
||||
$text = preg_replace('/(<br\s*\/?>\s*){3,}/', '<br><br>', $text);
|
||||
|
||||
return $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert HTML back to markdown (simplified)
|
||||
* This is a basic implementation - may not handle all cases perfectly
|
||||
*/
|
||||
public static function toMarkdown($html)
|
||||
{
|
||||
// Basic HTML to markdown conversion
|
||||
$markdown = $html;
|
||||
|
||||
// Headers
|
||||
$markdown = preg_replace('/<h[1-6]>(.+?)<\/h[1-6]>/i', '# $1', $markdown);
|
||||
|
||||
// Bold
|
||||
$markdown = preg_replace('/<strong>(.+?)<\/strong>/i', '**$1**', $markdown);
|
||||
|
||||
// Italic
|
||||
$markdown = preg_replace('/<em>(.+?)<\/em>/i', '*$1*', $markdown);
|
||||
|
||||
// Code
|
||||
$markdown = preg_replace('/<code>(.+?)<\/code>/i', '`$1`', $markdown);
|
||||
$markdown = preg_replace('/<pre><code>(.+?)<\/code><\/pre>/is', "```$1```", $markdown);
|
||||
|
||||
// Links
|
||||
$markdown = preg_replace('/<a href="(.+?)"(?:\s+target="_blank")?>(.+?)<\/a>/i', '[$2]($1)', $markdown);
|
||||
|
||||
// Blockquotes
|
||||
$markdown = preg_replace('/<blockquote>(.+?)<\/blockquote>/i', '> $1', $markdown);
|
||||
|
||||
// Lists (simplified)
|
||||
$markdown = preg_replace('/<ul>(.+?)<\/ul>/is', '$1', $markdown);
|
||||
$markdown = preg_replace('/<li>(.+?)<\/li>/i', '- $1', $markdown);
|
||||
|
||||
// Line breaks
|
||||
$markdown = preg_replace('/<br\s*\/?>/i', "\n", $markdown);
|
||||
|
||||
// Decode HTML entities
|
||||
$markdown = htmlspecialchars_decode($markdown, ENT_QUOTES);
|
||||
|
||||
// Clean up
|
||||
$markdown = preg_replace('/\n{3,}/', "\n\n", $markdown);
|
||||
$markdown = trim($markdown);
|
||||
|
||||
return $markdown;
|
||||
}
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user