From 8cda46bef936b7976464a30de18c6ec4402f1b70 Mon Sep 17 00:00:00 2001 From: gnosygnu Date: Sat, 1 Apr 2017 08:13:49 -0400 Subject: [PATCH] Scribunto.Lang: Return 1st three letters of unknown language codes, not blank --- .../xtns/scribunto/libs/Scrib_lib_language.java | 14 +++++++++++++- .../scribunto/libs/Scrib_lib_language_tst.java | 3 ++- .../xowa/xtns/wbases/pfuncs/Wdata_pf_property.java | 2 +- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_language.java b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_language.java index 0610814b6..761a2cfd1 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_language.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_language.java @@ -133,7 +133,19 @@ public class Scrib_lib_language implements Scrib_lib { byte[] lang_code = args.Pull_bry(0); // byte[] trans_code = args.Get_bry_or_null(1); // TODO_OLD: FetchLanguageName("en", "fr") -> Anglais; WHEN: needs global database of languages; cldr Xol_lang_stub lang_itm = Xol_lang_stub_.Get_by_key_or_null(lang_code); - return rslt.Init_obj(lang_itm == null ? String_.Empty : String_.new_u8(lang_itm.Canonical_name())); + String rv = null; + + // unknown item; return 1st three letters; DATE:2017-04-01 + if (lang_itm == null) { + int lang_code_len = lang_code.length; + int rv_len = lang_code_len < 3 ? lang_code_len : 3; + rv = String_.new_u8(Bry_.Mid(lang_code, 0, rv_len)); + } + // known item; return canonical name + else { + rv = String_.new_u8(lang_itm.Canonical_name()); + } + return rslt.Init_obj(rv); } public boolean FetchLanguageNames(Scrib_proc_args args, Scrib_proc_rslt rslt) { // byte[] lang_code = args.Cast_bry_or_null(0); diff --git a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_language_tst.java b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_language_tst.java index c75d20cd1..311925642 100644 --- a/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_language_tst.java +++ b/400_xowa/src/gplx/xowa/xtns/scribunto/libs/Scrib_lib_language_tst.java @@ -44,7 +44,8 @@ public class Scrib_lib_language_tst { @Test public void FetchLanguageName() { fxt.Test_scrib_proc_str(lib, Scrib_lib_language.Invk_fetchLanguageName, Object_.Ary("en"), "English"); fxt.Test_scrib_proc_str(lib, Scrib_lib_language.Invk_fetchLanguageName, Object_.Ary("fr"), "Français"); - fxt.Test_scrib_proc_str(lib, Scrib_lib_language.Invk_fetchLanguageName, Object_.Ary("enx"), ""); + fxt.Test_scrib_proc_str(lib, Scrib_lib_language.Invk_fetchLanguageName, Object_.Ary("enx"), "enx"); + fxt.Test_scrib_proc_str(lib, Scrib_lib_language.Invk_fetchLanguageName, Object_.Ary("qz"), "qz"); } @Test public void GetFallbacksFor() { Xol_lang_itm other_lang = fxt.Core().App().Lang_mgr().Get_by_or_new(Bry_.new_a7("zh")); diff --git a/400_xowa/src/gplx/xowa/xtns/wbases/pfuncs/Wdata_pf_property.java b/400_xowa/src/gplx/xowa/xtns/wbases/pfuncs/Wdata_pf_property.java index c42f85ce1..af5140f35 100644 --- a/400_xowa/src/gplx/xowa/xtns/wbases/pfuncs/Wdata_pf_property.java +++ b/400_xowa/src/gplx/xowa/xtns/wbases/pfuncs/Wdata_pf_property.java @@ -23,7 +23,7 @@ public class Wdata_pf_property extends Pf_func_base { @Override public int Id() {return Xol_kwd_grp_.Id_property;} @Override public Pf_func New(int id, byte[] name) {return new Wdata_pf_property().Name_(name);} @Override public void Func_evaluate(Bry_bfr bfr, Xop_ctx ctx, Xot_invk caller, Xot_invk self, byte[] src) {// EX: {{#property:p123|}} - synchronized (this) { // LOCK: must synchronized b/c bfr will later be set as member variable; DATE:2016-07-06 + synchronized (this) { // LOCK: must synchronized b/c bfr will later be set as member variable in .Resolve_to_bfr; DATE:2016-07-06 // init byte[] pid_ttl = Eval_argx(ctx, src, caller, self); Xop_log_property_wkr property_wkr = ctx.Xtn__wikidata__property_wkr();