76 lines
1.3 KiB
C#
76 lines
1.3 KiB
C#
namespace Microsoft.CodeAnalysis.Text;
|
|
|
|
internal static class TextUtilities
|
|
{
|
|
internal static int GetLengthOfLineBreak(SourceText text, int index)
|
|
{
|
|
char c = text[index];
|
|
if ((uint)(c - 14) <= 113u)
|
|
{
|
|
return 0;
|
|
}
|
|
return GetLengthOfLineBreakSlow(text, index, c);
|
|
}
|
|
|
|
private static int GetLengthOfLineBreakSlow(SourceText text, int index, char c)
|
|
{
|
|
if (c == '\r')
|
|
{
|
|
int num = index + 1;
|
|
if (num >= text.Length || '\n' != text[num])
|
|
{
|
|
return 1;
|
|
}
|
|
return 2;
|
|
}
|
|
if (IsAnyLineBreakCharacter(c))
|
|
{
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
public static void GetStartAndLengthOfLineBreakEndingAt(SourceText text, int index, out int startLinebreak, out int lengthLinebreak)
|
|
{
|
|
char c = text[index];
|
|
if (c == '\n')
|
|
{
|
|
if (index > 0 && text[index - 1] == '\r')
|
|
{
|
|
startLinebreak = index - 1;
|
|
lengthLinebreak = 2;
|
|
}
|
|
else
|
|
{
|
|
startLinebreak = index;
|
|
lengthLinebreak = 1;
|
|
}
|
|
}
|
|
else if (IsAnyLineBreakCharacter(c))
|
|
{
|
|
startLinebreak = index;
|
|
lengthLinebreak = 1;
|
|
}
|
|
else
|
|
{
|
|
startLinebreak = index + 1;
|
|
lengthLinebreak = 0;
|
|
}
|
|
}
|
|
|
|
internal static bool IsAnyLineBreakCharacter(char c)
|
|
{
|
|
switch (c)
|
|
{
|
|
case '\n':
|
|
case '\r':
|
|
case '\u0085':
|
|
case '\u2028':
|
|
case '\u2029':
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
}
|