in resharper/resharper-unity/src/Unity/Yaml/Psi/Parsing/UnityYamlLexer.cs [33:175]
public void Advance()
{
bool findHeader = false;
if (myCurOffset > EndOffset)
{
myTokenNodeType = null;
return;
}
var isInteresting = false;
myTokenStartOffset = myCurOffset;
while (true)
{
if (myCurOffset > EndOffset)
{
EatUntilDocumentEnd();
return;
}
switch (myBuffer[myCurOffset])
{
case '%':
findHeader = true;
while (true)
{
if (myCurOffset > EndOffset)
{
myTokenNodeType = UnityYamlTokenType.DOCUMENT;
return;
}
if (myBuffer[myCurOffset] == '\r')
{
myCurOffset++;
myCurrentLineOffset = 0;
if (myCurOffset <= EndOffset && myBuffer[myCurOffset] == '\n')
myCurOffset++;
break;
}
if (myBuffer[myCurOffset] == '\n')
{
myCurOffset++;
myCurrentLineOffset = 0;
break;
}
myCurOffset++;
}
break;
case '-':
if (findHeader)
{
myTokenNodeType = UnityYamlTokenType.USELESS_DOCUMENT;
return;
}
myCurOffset++;
if (myCurOffset + 1 <= EndOffset && myBuffer[myCurOffset] == '-' &&
myBuffer[myCurOffset + 1] == '-')
{
myCurOffset++;
myCurOffset++;
if (myCurOffset <= EndOffset && myBuffer[myCurOffset] == ' ')
{
myCurOffset++;
var sb = new StringBuilder();
while (myCurOffset <= EndOffset && myBuffer[myCurOffset] != ' '
&& myBuffer[myCurOffset] != '\r'
&& myBuffer[myCurOffset] != '\n')
{
sb.Append(Buffer[myCurOffset]);
myCurOffset++;
}
var tag = sb.ToString();
if (tag.Equals("!u!1") ||
tag.Equals("!u!4") ||
tag.Equals("!u!1001") ||
tag.Equals("!u!114") ||
tag.Equals("!u!224") ||
tag.Equals("!u!1102") ||
tag.Equals("!u!1107") ||
tag.Equals("!u!74") ||
tag.Equals("!u!95"))
{
isInteresting = true;
}
}
}
myCurrentLineOffset = 1; // just mark that it is not line start
EatUntilDocumentEnd();
return;
default:
EatUntilDocumentEnd();
return;
}
}
void EatUntilDocumentEnd()
{
while (true)
{
if (myCurOffset > EndOffset)
{
myTokenNodeType = UnityYamlTokenType.DOCUMENT;
break;
}
var curChar = myBuffer[myCurOffset];
if (curChar == '\r')
{
myCurrentLineOffset = 0;
myCurOffset++;
continue;
}
if (curChar == '\n')
{
myCurrentLineOffset = 0;
myCurOffset++;
continue;
}
if (myCurrentLineOffset == 0 && myCurOffset + 2 <= EndOffset && (
(curChar == '-' && myBuffer[myCurOffset + 1] == '-' &&
myBuffer[myCurOffset + 2] == '-')))
{
myTokenNodeType = isInteresting ? UnityYamlTokenType.DOCUMENT : UnityYamlTokenType.USELESS_DOCUMENT;
// debug highlightings...
// myTokenNodeType = isInteresting ? UnityYamlTokenType.DOCUMENT : YamlTokenType.COMMENT;
break;
}
myCurrentLineOffset++;
myCurOffset++;
}
}
}