Locale.avt

Переключить прокрутку окна
Загрузить этот исходный код

/*
    Реализация среды исполнения языка программирования
    Объектно-ориентированный продвинутый векторный транслятор

    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 }
}