Scribunto: Implement`'lang` argument for `mw.ext.data.get` [#779]

staging
gnosygnu 4 years ago
parent 7b6b3ed09a
commit afed865c84

@ -1,6 +1,6 @@
/*
XOWA: the XOWA Offline Wiki Application
Copyright (C) 2012-2017 gnosygnu@gmail.com
Copyright (C) 2012-2020 gnosygnu@gmail.com
XOWA is licensed under the terms of the General Public License (GPL) Version 3,
or alternatively under the terms of the Apache License Version 2.0.
@ -13,9 +13,29 @@ The terms of each license can be found in the source code repository:
GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
*/
package gplx.xowa.xtns.jsonConfigs.scribunto; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; import gplx.xowa.xtns.jsonConfigs.*;
import gplx.xowa.xtns.scribunto.*; import gplx.xowa.xtns.scribunto.libs.*; import gplx.xowa.xtns.scribunto.procs.*;
import gplx.xowa.wikis.domains.*;
package gplx.xowa.xtns.jsonConfigs.scribunto;
import gplx.Bry_;
import gplx.Byte_ascii;
import gplx.Err_;
import gplx.Gfo_usr_dlg_;
import gplx.Io_url;
import gplx.Keyval;
import gplx.Keyval_;
import gplx.String_;
import gplx.xowa.Xowe_wiki;
import gplx.xowa.langs.Xol_lang_itm;
import gplx.xowa.wikis.domains.Xow_domain_itm_;
import gplx.xowa.xtns.scribunto.Scrib_core;
import gplx.xowa.xtns.scribunto.Scrib_lib;
import gplx.xowa.xtns.scribunto.Scrib_lua_mod;
import gplx.xowa.xtns.scribunto.libs.Scrib_lib_text;
import gplx.xowa.xtns.scribunto.libs.Scrib_lib_text__json_util;
import gplx.xowa.xtns.scribunto.libs.Scrib_lib_title;
import gplx.xowa.xtns.scribunto.procs.Scrib_proc_args;
import gplx.xowa.xtns.scribunto.procs.Scrib_proc_mgr;
import gplx.xowa.xtns.scribunto.procs.Scrib_proc_rslt;
public class Jscfg_scrib_lib implements Scrib_lib {
private final Scrib_lib_text__json_util json_util = new Scrib_lib_text__json_util();
private final Jscfg_localizer localizer = new Jscfg_localizer();
@ -43,6 +63,19 @@ public class Jscfg_scrib_lib implements Scrib_lib {
private static final String[] Proc_names = String_.Ary(Invk_get);
public boolean Get(Scrib_proc_args args, Scrib_proc_rslt rslt) {
byte[] ttl_bry = args.Xstr_bry_or_null(0);
byte[] langCode = args.Xstr_bry_or_null(1);
// get language; ISSUE#:779; DATE:2020-08-03
Xol_lang_itm language = null;
if (langCode == null) {
language = this.core.Wiki().Lang();
}
else if (!Bry_.Eq(langCode, Byte_ascii.Underline_bry)) {
language = this.core.Wiki().App().Lang_mgr().Get_by_or_null(langCode);
}
else {
language = null;
}
// get commons wiki
Xowe_wiki commons_wiki = (Xowe_wiki)core.App().Wiki_mgr().Get_by_or_null(Xow_domain_itm_.Bry__commons);
@ -59,8 +92,20 @@ public class Jscfg_scrib_lib implements Scrib_lib {
throw Err_.new_wo_type("bad argument #1 to 'get' (not a valid title) " + String_.new_u8(ttl_bry));
}
Keyval[] rv = Scrib_lib_text.JsonDecodeStatic(args, core, json_util, page, Scrib_lib_text__json_util.Opt__force_assoc, Scrib_lib_text__json_util.Flag__none);
rv = localizer.Localize(core.Wiki().Lang(), page, rv);
// get content
Keyval[] rv = null;
if (page == null) {
rv = Keyval_.Ary_empty;
Gfo_usr_dlg_.Instance.Warn_many("", "", "bad argument #1 to 'get' (page does not exist): ~{0}", ttl_bry);
} else {
rv = Scrib_lib_text.JsonDecodeStatic(args, core, json_util, page, Scrib_lib_text__json_util.Opt__force_assoc, Scrib_lib_text__json_util.Flag__none);
if (language == null) { // "_" passed in; return entire document
}
else {// COMMENT:desb42@: sometime should not be called (dewiki) BUT...
rv = localizer.Localize(language, page, rv);
}
}
return rslt.Init_obj(rv);
}
}

@ -1,6 +1,6 @@
/*
XOWA: the XOWA Offline Wiki Application
Copyright (C) 2012-2017 gnosygnu@gmail.com
Copyright (C) 2012-2020 gnosygnu@gmail.com
XOWA is licensed under the terms of the General Public License (GPL) Version 3,
or alternatively under the terms of the Apache License Version 2.0.
@ -13,11 +13,20 @@ The terms of each license can be found in the source code repository:
GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
*/
package gplx.xowa.xtns.jsonConfigs.scribunto; import gplx.*; import gplx.xowa.*; import gplx.xowa.xtns.*; import gplx.xowa.xtns.jsonConfigs.*;
import org.junit.*; import gplx.core.tests.*;
import gplx.xowa.xtns.scribunto.*; import gplx.xowa.xtns.scribunto.libs.*;
import gplx.xowa.langs.*; import gplx.xowa.langs.names.*;
import gplx.langs.jsons.*;
package gplx.xowa.xtns.jsonConfigs.scribunto;
import gplx.Bry_;
import gplx.Keyval;
import gplx.Keyval_;
import gplx.String_;
import gplx.core.tests.Gftest;
import gplx.langs.jsons.Json_doc;
import gplx.xowa.Xowe_wiki;
import gplx.xowa.langs.Xoa_lang_mgr;
import gplx.xowa.langs.Xol_lang_itm;
import gplx.xowa.xtns.scribunto.Scrib_invoke_func_fxt;
import org.junit.Test;
public class Jscfg_scrib_lib_tst {
private final Jscfg_scrib_lib_fxt fxt = new Jscfg_scrib_lib_fxt();
@Test public void Get() {
@ -48,54 +57,9 @@ public class Jscfg_scrib_lib_tst {
, " 2=Data:Q2"
));
}
@Test public void Get_localize() {
fxt.Init__page("Data:Test_localize.tab", Json_doc.Make_str_by_apos
( "{"
, " 'license': 'CC0-1.0',"
, " 'description': {"
, " 'de': 'Objekttabelle',"
, " 'en': 'Object table'"
, " },"
, " 'sources': 'Objects in Data:Data.tab completed by [https://www.wikidata.org Wikidata]',"
, " 'schema': {"
, " 'fields': ["
, " {"
, " 'name': 'wikidataID',"
, " 'type': 'String',"
, " 'title': {"
, " 'de': 'Wikidata-Item',"
, " 'en': 'Wikidata item'"
, " }"
, " },"
, " {"
, " 'name': 'wikidataLabel',"
, " 'type': 'localized',"
, " 'title': {"
, " 'de': 'Wikidata-Label',"
, " 'en': 'Wikidata label'"
, " }"
, " }"
, " ]"
, " },"
, " 'data': ["
, " ["
, " 'Q183',"
, " {"
, " 'de': 'Deutschland',"
, " 'en': 'Germany'"
, " }"
, " ],"
, " ["
, " 'Q61912',"
, " {"
, " 'de': 'Wertheim',"
, " 'en': 'Wertheim am Main'"
, " }"
, " ]"
, " ]"
, "}"
));
fxt.Test__get( "Test_localize.tab", String_.Concat_lines_nl_skip_last
@Test public void Get_localize_null() { // null defaults to wiki.Lang
fxt.Init__page__multilingual();
fxt.Test__get( "Test_localize.tab", null, String_.Concat_lines_nl_skip_last
( "1="
, " license=CC0-1.0"
, " description=Object table"
@ -119,6 +83,69 @@ public class Jscfg_scrib_lib_tst {
, " 2=Wertheim am Main"
));
}
@Test public void Get_localize_underscore() {// underscore retrieves the entire document
fxt.Init__page__multilingual();
fxt.Test__get( "Test_localize.tab", "_", String_.Concat_lines_nl_skip_last
( "1="
, " license=CC0-1.0"
, " description="
, " de=Objekttabelle"
, " en=Object table"
, " sources=Objects in Data:Data.tab completed by [https://www.wikidata.org Wikidata]"
, " schema="
, " fields="
, " 1="
, " name=wikidataID"
, " type=String"
, " title="
, " de=Wikidata-Item"
, " en=Wikidata item"
, " 2="
, " name=wikidataLabel"
, " type=localized"
, " title="
, " de=Wikidata-Label"
, " en=Wikidata label"
, " data="
, " 1="
, " 1=Q183"
, " 2="
, " de=Deutschland"
, " en=Germany"
, " 2="
, " 1=Q61912"
, " 2="
, " de=Wertheim"
, " en=Wertheim am Main"
));
}
@Test public void Get_localize_de() {
fxt.Init__lang("de", "en");
fxt.Init__page__multilingual();
fxt.Test__get( "Test_localize.tab", "de", String_.Concat_lines_nl_skip_last
( "1="
, " license=CC0-1.0"
, " description=Objekttabelle"
, " sources=Objects in Data:Data.tab completed by [https://www.wikidata.org Wikidata]"
, " schema="
, " fields="
, " 1="
, " name=wikidataID"
, " type=String"
, " title=Wikidata-Item"
, " 2="
, " name=wikidataLabel"
, " type=localized"
, " title=Wikidata-Label"
, " data="
, " 1="
, " 1=Q183"
, " 2=Deutschland"
, " 2="
, " 1=Q61912"
, " 2=Wertheim"
));
}
@Test public void pickLocalizedString() {
Xol_lang_itm lang = fxt.Init__lang("zh-cn", "zh1,zh0");
@ -149,9 +176,61 @@ class Jscfg_scrib_lib_fxt {
public void Init__page(String page, String text) {
fxt.Parser_fxt().Init_page_create(commons_wiki, page, text);
}
public void Init__page__multilingual() {
this.Init__page("Data:Test_localize.tab", Json_doc.Make_str_by_apos
( "{"
, " 'license': 'CC0-1.0',"
, " 'description': {"
, " 'de': 'Objekttabelle',"
, " 'en': 'Object table'"
, " },"
, " 'sources': 'Objects in Data:Data.tab completed by [https://www.wikidata.org Wikidata]',"
, " 'schema': {"
, " 'fields': ["
, " {"
, " 'name': 'wikidataID',"
, " 'type': 'String',"
, " 'title': {"
, " 'de': 'Wikidata-Item',"
, " 'en': 'Wikidata item'"
, " }"
, " },"
, " {"
, " 'name': 'wikidataLabel',"
, " 'type': 'localized',"
, " 'title': {"
, " 'de': 'Wikidata-Label',"
, " 'en': 'Wikidata label'"
, " }"
, " }"
, " ]"
, " },"
, " 'data': ["
, " ["
, " 'Q183',"
, " {"
, " 'de': 'Deutschland',"
, " 'en': 'Germany'"
, " }"
, " ],"
, " ["
, " 'Q61912',"
, " {"
, " 'de': 'Wertheim',"
, " 'en': 'Wertheim am Main'"
, " }"
, " ]"
, " ]"
, "}"
));
}
public Xol_lang_itm Init__lang(String key, String fallbacks) {
Xol_lang_itm lang = Xol_lang_itm.New(fxt.Core().App().Lang_mgr(), Bry_.new_u8(key));
Xoa_lang_mgr lang_mgr = fxt.Core().App().Lang_mgr();
Xol_lang_itm lang = Xol_lang_itm.New(lang_mgr, Bry_.new_u8(key));
lang.Fallback_bry_(Bry_.new_a7(fallbacks));
lang_mgr.Add(lang);
return lang;
}
public Keyval[] Init__picklocalizedStringKvs(String... vals) {
@ -164,7 +243,10 @@ class Jscfg_scrib_lib_fxt {
return rv;
}
public void Test__get(String page, String expd) {
fxt.Test_scrib_proc_str_ary(lib, Jscfg_scrib_lib.Invk_get, Keyval_.Ary(Keyval_.int_(1, page)), expd);
Test__get(page, null, expd);
}
public void Test__get(String page, String lang, String expd) {
fxt.Test_scrib_proc_str_ary(lib, Jscfg_scrib_lib.Invk_get, Keyval_.Ary(Keyval_.int_(1, page), Keyval_.int_(2, lang)), expd);
}
public void Test__pickLocalizedString(Xol_lang_itm lang, Keyval[] kv_ary, String expd) {
Keyval actl_kv = Jscfg_localizer.pickLocalizedString(lang, "key", kv_ary);

Loading…
Cancel
Save