Improve custom uploader parser escaping

This commit is contained in:
Jaex 2018-10-31 15:19:27 +03:00
parent bdfbebfe37
commit 5141777523

View file

@ -86,54 +86,58 @@ public string Parse(string text)
return ""; return "";
} }
StringBuilder result = new StringBuilder(); StringBuilder sbResult = new StringBuilder();
StringBuilder sbSyntax = new StringBuilder();
bool syntaxStart = false; bool escapeNext = false;
int syntaxStartIndex = 0; bool parsingSyntax = false;
bool escape = false;
for (int i = 0; i < text.Length; i++) for (int i = 0; i < text.Length; i++)
{ {
if (!escape && text[i] == SyntaxChar) if (!escapeNext && text[i] == SyntaxChar)
{ {
if (!syntaxStart) if (!parsingSyntax)
{ {
syntaxStart = true; parsingSyntax = true;
syntaxStartIndex = i + 1;
sbSyntax.Clear();
} }
else else
{ {
syntaxStart = false; parsingSyntax = false;
int syntaxLength = i - syntaxStartIndex;
if (syntaxLength > 0) string syntax = sbSyntax.ToString();
if (!string.IsNullOrEmpty(syntax))
{ {
string syntax = text.Substring(syntaxStartIndex, syntaxLength);
string syntaxResult = ParseSyntax(syntax); string syntaxResult = ParseSyntax(syntax);
if (!string.IsNullOrEmpty(syntaxResult)) if (!string.IsNullOrEmpty(syntaxResult))
{ {
result.Append(syntaxResult); sbResult.Append(syntaxResult);
} }
} }
} }
} }
else if (!escape && text[i] == SyntaxEscapeChar) else if (!escapeNext && text[i] == SyntaxEscapeChar)
{ {
escape = true; escapeNext = true;
} }
else else
{ {
if (!syntaxStart) escapeNext = false;
{
result.Append(text[i]);
}
escape = false; if (!parsingSyntax)
{
sbResult.Append(text[i]);
}
else
{
sbSyntax.Append(text[i]);
}
} }
} }
return result.ToString(); return sbResult.ToString();
} }
private string ParseSyntax(string syntax) private string ParseSyntax(string syntax)