string ParseTagEnd(string input, ref int pos)
{
var end = pos;
if (!ParseChar(input, ref end, '[')) return null;
if (!ParseChar(input, ref end, '/')) return null;
var tagName = ParseName(input, ref end);
if (tagName == null) return null;
ParseWhitespace(input, ref end);
if (!ParseChar(input, ref end, ']'))
{
if (ErrorMode == ErrorMode.ErrorFree) return null;
else throw new BBCodeParsingException("");
}
var tag = Tags.SingleOrDefault(t => t.Name.Equals(tagName, StringComparison.OrdinalIgnoreCase));
if (tag != null && tag.SuppressFirstNewlineAfter)
{
ParseLimitedWhitespace(input, ref end, 1);
}
pos = end;
return tagName;
}
string ParseText(string input, ref int pos)