package php.runtime.ext.core.classes.util; import php.runtime.Memory; import php.runtime.env.Environment; import php.runtime.lang.BaseObject; import php.runtime.lang.support.IComparableObject; import php.runtime.memory.ArrayMemory; import php.runtime.memory.ObjectMemory; import php.runtime.memory.StringMemory; import php.runtime.reflection.ClassEntity; import java.util.Locale; import static php.runtime.annotation.Reflection.*; @Name("php\\util\\Locale") public class WrapLocale extends BaseObject implements IComparableObject<WrapLocale> { protected Locale locale; public WrapLocale(Environment env, Locale locale) { super(env); this.locale = locale; } public WrapLocale(Environment env, ClassEntity clazz) { super(env, clazz); } public Locale getLocale() { return locale; } @Signature({ @Arg("lang"), @Arg(value = "country", optional = @Optional("")), @Arg(value = "variant", optional = @Optional("")) }) public Memory __construct(Environment env, Memory... args) { locale = new Locale(args[0].toString(), args[1].toString(), args[2].toString()); return Memory.NULL; } @Signature public Memory __debugInfo(Environment env, Memory... args) { ArrayMemory r = new ArrayMemory(); r.refOfIndex("*language").assign(locale.getLanguage()); r.refOfIndex("*country").assign(locale.getCountry()); r.refOfIndex("*variant").assign(locale.getVariant()); return r.toConstant(); } public static Locale getDefault(Environment env, Memory arg) { if (arg.isNull()) return getDefault(env); else return arg.toObject(WrapLocale.class).locale; } public static Locale getDefault(Environment env) { Locale locale1 = env.getUserValue(WrapLocale.class.getName() + "#default", Locale.class); if (locale1 == null) return Locale.getDefault(); return locale1; } @Signature(@Arg(value = "globally", optional = @Optional("false"))) public static Memory getDefault(Environment env, Memory... args) { return new ObjectMemory(new WrapLocale(env, args[0].toBoolean() ? Locale.getDefault() : getDefault(env))); } @Signature({ @Arg(value = "locale", nativeType = WrapLocale.class), @Arg(value = "globally", optional = @Optional("false")) }) public static Memory setDefault(Environment env, Memory... args) { Locale locale = args[0].toObject(WrapLocale.class).locale; if (args[1].toBoolean()) Locale.setDefault(locale); else env.setUserValue(WrapLocale.class.getName() + "#default", locale); return Memory.NULL; } @Signature public Memory getLanguage(Environment env, Memory... args) { return StringMemory.valueOf(locale.getLanguage()); } @Signature public Memory getCountry(Environment env, Memory... args) { return StringMemory.valueOf(locale.getCountry()); } @Signature public Memory getVariant(Environment env, Memory... args) { return StringMemory.valueOf(locale.getVariant()); } @Signature public Memory getISO3Country(Environment env, Memory... args) { return StringMemory.valueOf(locale.getISO3Country()); } @Signature public Memory getISO3Language(Environment env, Memory... args) { return StringMemory.valueOf(locale.getISO3Language()); } @Signature(@Arg(value = "locale", nativeType = WrapLocale.class, optional = @Optional("null"))) public Memory getDisplayName(Environment env, Memory... args) { return StringMemory.valueOf(args[0].isNull() ? locale.getDisplayName() : locale.getDisplayName(args[0].toObject(WrapLocale.class).locale) ); } @Signature(@Arg(value = "locale", nativeType = WrapLocale.class, optional = @Optional("null"))) public Memory getDisplayCountry(Environment env, Memory... args) { return StringMemory.valueOf(args[0].isNull() ? locale.getDisplayCountry() : locale.getDisplayCountry(args[0].toObject(WrapLocale.class).locale) ); } @Signature(@Arg(value = "locale", nativeType = WrapLocale.class, optional = @Optional("null"))) public Memory getDisplayLanguage(Environment env, Memory... args) { return StringMemory.valueOf(args[0].isNull() ? locale.getDisplayLanguage() : locale.getDisplayLanguage(args[0].toObject(WrapLocale.class).locale) ); } @Signature(@Arg(value = "locale", nativeType = WrapLocale.class, optional = @Optional("null"))) public Memory getDisplayVariant(Environment env, Memory... args) { return StringMemory.valueOf(args[0].isNull() ? locale.getDisplayVariant() : locale.getDisplayVariant(args[0].toObject(WrapLocale.class).locale) ); } @Signature public Memory __toString(Environment env, Memory... args) { return StringMemory.valueOf(locale.toString()); } @Signature public static Memory ENGLISH(Environment env, Memory... args) { return new ObjectMemory(new WrapLocale(env, Locale.ENGLISH)); } @Signature public static Memory GERMAN(Environment env, Memory... args) { return new ObjectMemory(new WrapLocale(env, Locale.GERMAN)); } @Signature public static Memory GERMANY(Environment env, Memory... args) { return new ObjectMemory(new WrapLocale(env, Locale.GERMANY)); } @Signature public static Memory CANADA(Environment env, Memory... args) { return new ObjectMemory(new WrapLocale(env, Locale.CANADA)); } @Signature public static Memory CANADA_FRENCH(Environment env, Memory... args) { return new ObjectMemory(new WrapLocale(env, Locale.CANADA_FRENCH)); } @Signature public static Memory CHINA(Environment env, Memory... args) { return new ObjectMemory(new WrapLocale(env, Locale.CHINA)); } @Signature public static Memory CHINESE(Environment env, Memory... args) { return new ObjectMemory(new WrapLocale(env, Locale.CHINESE)); } @Signature public static Memory FRANCE(Environment env, Memory... args) { return new ObjectMemory(new WrapLocale(env, Locale.FRANCE)); } @Signature public static Memory FRENCH(Environment env, Memory... args) { return new ObjectMemory(new WrapLocale(env, Locale.FRENCH)); } @Signature public static Memory US(Environment env, Memory... args) { return new ObjectMemory(new WrapLocale(env, Locale.US)); } @Signature public static Memory ITALIAN(Environment env, Memory... args) { return new ObjectMemory(new WrapLocale(env, Locale.ITALIAN)); } @Signature public static Memory ITALY(Environment env, Memory... args) { return new ObjectMemory(new WrapLocale(env, Locale.ITALY)); } @Signature public static Memory JAPAN(Environment env, Memory... args) { return new ObjectMemory(new WrapLocale(env, Locale.JAPAN)); } @Signature public static Memory JAPANESE(Environment env, Memory... args) { return new ObjectMemory(new WrapLocale(env, Locale.JAPANESE)); } @Signature public static Memory KOREA(Environment env, Memory... args) { return new ObjectMemory(new WrapLocale(env, Locale.KOREA)); } @Signature public static Memory KOREAN(Environment env, Memory... args) { return new ObjectMemory(new WrapLocale(env, Locale.KOREAN)); } @Signature public static Memory UK(Environment env, Memory... args) { return new ObjectMemory(new WrapLocale(env, Locale.UK)); } @Signature public static Memory TAIWAN(Environment env, Memory... args) { return new ObjectMemory(new WrapLocale(env, Locale.TAIWAN)); } @Signature public static Memory RUSSIAN(Environment env, Memory... args) { return new ObjectMemory(new WrapLocale(env, new Locale("ru"))); } @Signature public static Memory RUSSIA(Environment env, Memory... args) { return new ObjectMemory(new WrapLocale(env, new Locale("ru", "RU"))); } @Signature public static Memory ROOT(Environment env, Memory... args) { return new ObjectMemory(new WrapLocale(env, Locale.ROOT)); } @Signature public static Memory getAvailableLocales(Environment env, Memory... args) { ArrayMemory r = new ArrayMemory(); for(Locale el : Locale.getAvailableLocales()) { r.add(new WrapLocale(env, el)); } return r.toConstant(); } @Override public boolean __equal(WrapLocale iObject) { return locale.equals(iObject.getLocale()); } @Override public boolean __identical(WrapLocale iObject) { return locale == iObject.getLocale(); } @Override public boolean __greater(WrapLocale iObject) { return false; } @Override public boolean __greaterEq(WrapLocale iObject) { return false; } @Override public boolean __smaller(WrapLocale iObject) { return false; } @Override public boolean __smallerEq(WrapLocale iObject) { return false; } @Signature private Memory __clone(Environment env, Memory... args) { return Memory.NULL; } }