125 lines
5.5 KiB
C#
125 lines
5.5 KiB
C#
using System.Text.RegularExpressions;
|
|
|
|
namespace SGModule.MarkdownKit {
|
|
public static class MarkdownConvert {
|
|
/// <summary>
|
|
/// 将md转换为富文本标签
|
|
/// </summary>
|
|
/// <param name="markdown"></param>
|
|
/// <returns></returns>
|
|
public static string ToRichText(string markdown) {
|
|
// 移除每一行行尾的多余空格和制表符
|
|
markdown = Regex.Replace(markdown, @"[ \t]+$", "");
|
|
|
|
// 标题替换 (支持 "#### " 等不同级别的标题)
|
|
markdown = Regex.Replace(markdown, @"^(#{1,6})\s*(.+)$", match => {
|
|
var level = match.Groups[1].Value.Length; // 获取标题级别
|
|
var content = match.Groups[2].Value.Trim(); // 去除标题内容的多余空格
|
|
|
|
|
|
// 标题大小规则:越小的标题级别,字体越大
|
|
var baseSize = 40; // 默认正文字体大小
|
|
var size = baseSize + (6 - level) * 5; // 一级标题最大,六级标题最小
|
|
var str = $"<b><size={size}>{content}</size></b>\n";
|
|
if (level <= 2) {
|
|
str = $"<u>{str}</u>";
|
|
}
|
|
|
|
return str; // 设置标题大小
|
|
}, RegexOptions.Multiline);
|
|
|
|
// 粗体替换 ( **加粗** )
|
|
markdown = Regex.Replace(markdown, @"\*\*(.+?)\*\*", "<b>$1</b>");
|
|
|
|
// 斜体替换 ( *斜体* )
|
|
markdown = Regex.Replace(markdown, @"\*(.+?)\*", "<i>$1</i>");
|
|
|
|
// 下划线替换 ( __下划线__ )
|
|
markdown = Regex.Replace(markdown, @"__(.+?)__", "<u>$1</u>");
|
|
|
|
// 删除线替换 ( ~~删除线~~ )
|
|
markdown = Regex.Replace(markdown, @"~~(.+?)~~", "<s>$1</s>");
|
|
|
|
// 超链接替换 ( [文字](链接) )
|
|
markdown = Regex.Replace(markdown, @"\[(.+?)\]\((.+?)\)", "<a href='$2'>$1</a>");
|
|
|
|
// 无序列表替换 ( - 或 * 开头)
|
|
markdown = Regex.Replace(markdown, @"^\s*[-*]\s+(.+)$", match => {
|
|
var content = match.Groups[1].Value.Trim();
|
|
return $"• {content}"; // 使用 • 作为无序列表的符号
|
|
}, RegexOptions.Multiline);
|
|
|
|
// 有序列表替换 ( 1. 或 2. 开头)
|
|
markdown = Regex.Replace(markdown, @"^\s*\d+\.\s+(.+)$", match => {
|
|
var content = match.Groups[1].Value.Trim();
|
|
return $"<b>{content}</b>"; // 有序列表使用加粗标记
|
|
}, RegexOptions.Multiline);
|
|
|
|
// 移除多余的连续空行 (将多个空行压缩为一个空行)
|
|
markdown = Regex.Replace(markdown, @"(\r?\n){2,}", "\n");
|
|
|
|
return markdown;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 将md文本转换为UBB语法的富文本
|
|
/// </summary>
|
|
/// <param name="markdown"></param>
|
|
/// <param name="textBaseSize"></param>
|
|
/// <returns></returns>
|
|
public static string ToUBB(string markdown, int textBaseSize) {
|
|
// 移除每一行行尾的多余空格和制表符
|
|
markdown = Regex.Replace(markdown, @"[ \t]+$", "");
|
|
|
|
// 标题替换 (支持 "#### " 等不同级别的标题)
|
|
markdown = Regex.Replace(markdown, @"^(#{1,6})\s*(.+)$", match => {
|
|
var level = match.Groups[1].Value.Length; // 获取标题级别
|
|
var content = match.Groups[2].Value.Trim(); // 去除标题内容的多余空格
|
|
|
|
// 标题大小规则:越小的标题级别,字体越大
|
|
var baseSize = textBaseSize; // 默认正文字体大小
|
|
var size = baseSize + (6 - level) * 3; // 一级标题最大,六级标题最小
|
|
|
|
var str = $"[b][size={size}]{content}[/size][/b]\n";
|
|
if (level <= 2) {
|
|
str = $"[u]{str}[/u]";
|
|
}
|
|
|
|
return str; // 设置标题大小
|
|
}, RegexOptions.Multiline);
|
|
|
|
// 粗体替换 ( **加粗** -> [b]加粗[/b])
|
|
markdown = Regex.Replace(markdown, @"\*\*(.+?)\*\*", "[b]$1[/b]");
|
|
|
|
// 斜体替换 ( *斜体* -> [i]斜体[/i])
|
|
markdown = Regex.Replace(markdown, @"\*(.+?)\*", "[i]$1[/i]");
|
|
|
|
// 下划线替换 ( __下划线__ -> [u]下划线[/u])
|
|
markdown = Regex.Replace(markdown, @"__(.+?)__", "[u]$1[/u]");
|
|
|
|
// 删除线替换 ( ~~删除线~~ -> [s]删除线[/s])
|
|
markdown = Regex.Replace(markdown, @"~~(.+?)~~", "[s]$1[/s]");
|
|
|
|
// 超链接替换 ( [文字](链接) -> [url=链接]文字[/url])
|
|
markdown = Regex.Replace(markdown, @"\[(.+?)\]\((.+?)\)", "[url=$2]$1[/url]");
|
|
|
|
// 无序列表替换 ( - 或 * 开头 -> • 项目内容)
|
|
markdown = Regex.Replace(markdown, @"^\s*[-*]\s+(.+)$", match => {
|
|
var content = match.Groups[1].Value.Trim();
|
|
return $"• {content}"; // 使用 • 作为无序列表的符号
|
|
}, RegexOptions.Multiline);
|
|
|
|
// 有序列表替换 ( 1. 或 2. 开头 -> 加粗项目内容)
|
|
markdown = Regex.Replace(markdown, @"^\s*\d+\.\s+(.+)$", match => {
|
|
var content = match.Groups[1].Value.Trim();
|
|
return $"[b]{content}[/b]"; // 有序列表使用加粗标记
|
|
}, RegexOptions.Multiline);
|
|
|
|
// 移除多余的连续空行 (将多个空行压缩为一个空行)
|
|
markdown = Regex.Replace(markdown, @"(\r?\n){2,}", "\n");
|
|
|
|
return markdown;
|
|
}
|
|
}
|
|
}
|