Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
markdown escape
  • Loading branch information
yufeih committed Sep 30, 2023
commit 8b65472e135c472dea3e86fb6532f04853d25302
42 changes: 35 additions & 7 deletions src/Docfx.Dotnet/PageWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,15 +61,15 @@ public override void Heading(int level, string title, string? id = null)
_sb.Append($"{new string('#', level)} ");
if (!string.IsNullOrEmpty(id))
_sb.Append($"<a id=\"{id}\"></a>");
_sb.AppendLine(title).AppendLine();
_sb.AppendLine(Escape(title)).AppendLine();
}

public override void Facts(params Fact[] facts)
{
for (var i = 0; i < facts.Length; i++)
for (var i = 0; i < facts.Length; i++)
{
var item = facts[i];
_sb.Append(item.name).Append(": ");
_sb.Append(Escape(item.name)).Append(": ");
Text(item.value);
_sb.AppendLine(i == facts.Length - 1 ? "" : " ");
}
Expand Down Expand Up @@ -105,9 +105,9 @@ public override void ParameterList(params Parameter[] parameters)
{
if (!string.IsNullOrEmpty(param.name))
{
_sb.Append('`').Append(param.name);
_sb.Append('`').Append(Escape(param.name));
if (!string.IsNullOrEmpty(param.defaultValue))
_sb.Append(" = ").Append(param.defaultValue);
_sb.Append(" = ").Append(Escape(param.defaultValue));
_sb.Append("` ");
}

Expand All @@ -126,9 +126,37 @@ private void Text(params TextSpan[] spans)
foreach (var span in spans)
{
if (string.IsNullOrEmpty(span.href))
_sb.Append(span.text);
_sb.Append(Escape(span.text));
else
_sb.Append($"[{span.text}]({span.href})");
_sb.Append($"[{Escape(span.text)}]({Escape(span.href)})");
}
}

private string Escape(string text)
{
const string EscapeChars = @"\`*_{}[]()#+-.!>~";

var needEscape = false;
foreach (var c in text)
{
if (EscapeChars.Contains(c))
{
needEscape = true;
break;
}
}

if (!needEscape)
return text;

var sb = new StringBuilder();
foreach (var c in text)
{
if (EscapeChars.Contains(c))
sb.Append('\\');
sb.Append(c);
}

return sb.ToString();
}
}