Skip to content

Instantly share code, notes, and snippets.

@lindexi
Last active May 25, 2024 10:22
Show Gist options
  • Save lindexi/3ba74c909b23d6426c779d0a8eb435c3 to your computer and use it in GitHub Desktop.
Save lindexi/3ba74c909b23d6426c779d0a8eb435c3 to your computer and use it in GitHub Desktop.
从 BBCode 转换为 Markdown
class Bbcode2md
{
/// <summary>
/// To convert bbcode to markdown
/// </summary>
/// <remarks>[JonDum/BBCode-To-Markdown-Converter](https://github.com/JonDum/BBCode-To-Markdown-Converter )</remarks>
/// <param name="str"></param>
/// <returns></returns>
public static string BbcodetoMd(string str)
{
str = ConvertBold(str);
str = ConvertItalics(str);
str = ConvertUnderline(str);
str = ConvertStrikethrough(str);
str = ConvertCenter(str);
str = ConvertQuote(str);
str = ConvertSize(str);
str = ConvertColor(str);
str = ConvertList(str);
str = ConvertImage(str);
str = ConvertUrl(str);
return ConvertCode(str);
}
private static string ConvertCode(string str)
{
var regex = new Regex(@"\[code\](.*?)\[\/code\]");
str = regex.Replace(str, "'$1'");
regex = new Regex(@"\[code\]((?:.|\n)+?)\[\/code\]");
var t = regex.Match(str);
if (t.Success)
{
str = $@"```
{t.Groups[1].Value}
```";
}
return str;
}
private static string ConvertUrl(string str)
{
var regex = new Regex(@"\[url=(.+?)\]((?:.|\n)+?)\[\/url\]");
return regex.Replace(str, "[$2]($1)");
}
private static string ConvertImage(string str)
{
var regex = new Regex(@"\[img\]((?:.|\n)+?)\[\/img\]");
return regex.Replace(str, "![$1]($1)");
}
private static string ConvertList(string str)
{
var regex = new Regex(@"\[list\=1\]((?:.|\n)+?)\[\/list\]");
var t = regex.Match(str);
if (t.Success)
{
str = t.Groups[1].Value.Replace("[*]", "1. ");
}
return str;
}
private static string ConvertColor(string str)
{
var regex = new Regex(@"\[color\=.+?\]((?:.|\n)+?)\[\/color\]");
List<string> t = new List<string>()
{
// list of colors from http://if.invisionfree.com/topic/423042/1/
"Aliceblue",
"Antiquewhite",
"Aqua",
"Aquamarine",
"Azure",
"Beige",
"Bisque",
"Black",
"Blanchedalmond",
"Blue",
"Blueviolet",
"Brown",
"Burlywood",
"Cadetblue",
"Chartreuse",
"Chocolate",
"Coral",
"Cornflowerblue",
"Cornsilk",
"Crimson",
"Cyan",
"Darkblue",
"Darkcyan",
"Darkgoldenrod",
"Darkgray",
"Darkgreen",
"Darkkhaki",
"Darkmagenta",
"Darkolivegreen",
"Darkorange",
"Darkorchid",
"Darkred",
"Darksalmon",
"Darkseagreen",
"Darkslateblue",
"Darkslategray",
"Darkturquoise",
"Darkviolet",
"Deeppink",
"Deepskyblue",
"Dimgray",
"Dodgerblue",
"Firebrick",
"Floralwhite",
"Forestgreen",
"Fuchsia",
"Gainsboro",
"Ghostwhite",
"Gold",
"Goldenrod",
"Gray",
"Green",
"Greenyellow",
"Honeydew",
"Hotpink",
"Indianred",
"Indigo",
"Ivory",
"Khaki",
"Lavender",
"Lavenderblush",
"Lawngreen",
"Lemonchiffon",
"Lightblue",
"Lightcoral",
"Lightcyan",
"Lightgoldenrodyellow",
"Lightgray",
"Lightpink",
"Lightsalmon",
"Lightseagreen",
"Lightskyblue",
"Lightslategray",
"Lightsteelblue",
"Lightyellow",
"Lime",
"Limegreen",
"Linen",
"Magenta",
"Maroon",
"Mediumaquamarine",
"Mediumblue",
"Mediumorchid",
"Mediumpurple",
"Mediumseagreen",
"Mediumslateblue",
"Mediumspringgreen",
"Mediumturquoise",
"Mediumvioletred",
"Midnightblue",
"Mintcream",
"Mistyrose",
"Moccasin",
"Navajowhite",
"Navy",
"Oldlace",
"Olive",
"Olivedrab",
"Orange",
"Orangered",
"Orchid",
"Palegoldenrod",
"Palegreen",
"Paleturquoise",
"Palevioletred",
"Papayawhip",
"Peachpuff",
"Peru",
"Pink",
"Plum",
"Powderblue",
"Purple",
"Red",
"Rosybrown",
"Royalblue",
"Saddlebrown",
"Salmon",
"Sandybrown",
"Seagreen",
"Seashell",
"Sienna",
"Silver",
"Skyblue",
"Slateblue",
"Slategray",
"Snow",
"Springgreen",
"Steelblue",
"Tan",
"Teal",
"Thistle",
"Tomato",
"Turquoise",
"Violet",
"Wheat",
"White",
"Whitesmoke",
"Yellow",
"Yellowgreen"
};
str = regex.Replace(str, "$1");
foreach (var temp in t)
{
regex = new Regex($@"\[{temp}\]((?:.|\n) +?)\[\/{temp}\]");
str = regex.Replace(str, "$1");
}
return str;
}
private static string ConvertSize(string str)
{
var regex = new Regex(@"\[size\=.+?\]((?:.|\n)+?)\[\/size\]");
return regex.Replace(str, "$1");
}
private static string ConvertQuote(string str)
{
var regex = new Regex(@"\[quote\=.+?\]((?:.|\n)+?)\[\/quote\]");
return regex.Replace(str, "$1");
}
private static string ConvertCenter(string str)
{
var regex = new Regex(@"\[center\]((?:.|\n)+?)\[\/center\]");
return regex.Replace(str, "$1");
}
private static string ConvertStrikethrough(string str)
{
var regex = new Regex(@"\[s\]((?:.|\n)+?)\[\/s\]");
return regex.Replace(str, "~~$1~~");
}
private static string ConvertUnderline(string str)
{
Regex regex = new Regex(@"\[u\]((?:.|\n)+?)\[\/u\]");
return regex.Replace(str, "$1");
}
private static string ConvertItalics(string str)
{
Regex regex = new Regex(@"\[i\]((?:.|\n)+?)\[\/i\]");
return regex.Replace(str, "*$1*");
}
private static string ConvertBold(string str)
{
Regex regex = new Regex(@"\[b\]((?:.|\n)+?)\[\/b\]");
return regex.Replace(str, "**$1**");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment