/*
Реализация среды исполнения языка программирования
Объектно-ориентированный продвинутый векторный транслятор
Copyright © 2021, 2024, 2026 Малик Разработчик
Это свободная программа: вы можете перераспространять ее и/или изменять
ее на условиях Меньшей Стандартной общественной лицензии GNU в том виде,
в каком она была опубликована Фондом свободного программного обеспечения;
либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
Эта программа распространяется в надежде, что она будет полезной,
но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
общественной лицензии GNU.
Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
вместе с этой программой. Если это не так, см.
<https://www.gnu.org/licenses/>.
*/
package avt.lang.locale;
import avt.lang.locale.basiclatin.*;
public class Locale(Object)
{
public static final Locale instance;
public static {
Locale registered = null;
label0:
{
for(String packPrefix = "avt.lang.locale.rtlang", Package[] packs = Package.enumerate(), int packIndex = packs.length; packIndex-- > 0; )
{
Package pack = packs[packIndex];
if(pack.canonicalName.equals(packPrefix)) for(Class[] types = pack.enumerateTypes(), int typeIndex = types.length; typeIndex-- > 0; )
{
Class type = types[typeIndex];
if(!type.isAbstract() && type.visibility >= ReflectiveObject.PUBLIC && Locale.class.isAssignableFrom(type))
{
try
{
registered = (Locale) type.newInstance();
break label0;
} catch(Exception exception)
{
exception.printStackTrace();
}
}
}
}
registered = new Locale("default", null);
}
instance = registered;
}
private final String[] fldAliasIds;
private final String fldLocaleId;
protected (String localeId, String[] aliasIds) {
int alength = aliasIds == null ? 0 : aliasIds.length;
String localeIdentifier = localeId == null ? "" : localeId;
String[] localeAliases = new String[alength];
label0: for(int length = alength, alength = 0, int index = 0; index < length; index++)
{
String alias = aliasIds[index];
if(alias == null || alias.equals(localeIdentifier)) continue label0;
for(int aindex = alength; aindex-- > 0; ) if(alias.equals(localeAliases[aindex])) continue label0;
localeAliases[alength++] = alias;
}
if(alength != localeAliases.length) Array.copy(localeAliases, 0, localeAliases = new String[alength], 0, alength);
localeAliases.finalize();
fldAliasIds = localeAliases;
fldLocaleId = localeIdentifier;
}
public boolean isDigit(char chr) { return BasicLatin.isDigit(chr); }
public boolean isLowerCase(char chr) { return BasicLatin.isLowerCase(chr); }
public boolean isUpperCase(char chr) { return BasicLatin.isUpperCase(chr); }
public char toLowerCase(char chr) { return BasicLatin.toLowerCase(chr); }
public char toUpperCase(char chr) { return BasicLatin.toUpperCase(chr); }
public int orderOf(char chr) { return BasicLatin.orderOf(chr); }
public final boolean isLocaleId(String localeId) {
if(localeId == null) localeId = "";
if(fldLocaleId.equals(localeId)) return true;
for(String[] aliasIds = fldAliasIds, int index = aliasIds.length; index-- > 0; ) if(aliasIds[index].equals(localeId)) return true;
return false;
}
public final String[] aliasIds { read = fldAliasIds }
public final String localeId { read = fldLocaleId }
}