using System.Text;
namespace Jint.Native.String;
///
/// Some internacionalization logic that is special or specific to determined culture.
///
internal class StringInlHelper
{
private static List GetLithuaninanReplaceableCharIdx(string input)
{
List replaceableCharsIdx = new List();
for (int i = 0; i < input.Length; i++)
{
if (input[i].Equals('\u0307'))
{
replaceableCharsIdx.Add(i);
}
}
// For capital I and J we do not replace the dot above (\u3017).
replaceableCharsIdx
.RemoveAll(idx => (idx > 0) && input[idx - 1] == 'I' || input[idx - 1] == 'J');
return replaceableCharsIdx;
}
///
/// Lithuanian case is a bit special. For more info see:
/// https://github.com/tc39/test262/blob/main/test/intl402/String/prototype/toLocaleUpperCase/special_casing_Lithuanian.js
///
public static string LithuanianStringProcessor(string input)
{
var replaceableCharsIdx = GetLithuaninanReplaceableCharIdx(input);
if (replaceableCharsIdx.Count > 0)
{
StringBuilder stringBuilder = new StringBuilder(input);
// Remove characters in reverse order to avoid index shifting
for (int i = replaceableCharsIdx.Count - 1; i >= 0; i--)
{
int index = replaceableCharsIdx[i];
if (index >= 0 && index < stringBuilder.Length)
{
stringBuilder.Remove(index, 1);
}
}
return stringBuilder.ToString();
}
return input;
}
}