Files

76 lines
1.3 KiB
C#
Raw Permalink Normal View History

2026-08-27 10:56:38 -06:00
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;
}
}
}