mirror of
https://github.com/gnosygnu/xowa.git
synced 2024-10-27 20:34:16 +00:00
Scribunto: Implement'lang
argument for mw.ext.data.get
[#779]
This commit is contained in:
parent
7b6b3ed09a
commit
afed865c84
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
XOWA: the XOWA Offline Wiki Application
|
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,
|
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.
|
or alternatively under the terms of the Apache License Version 2.0.
|
||||||
@ -13,12 +13,32 @@ 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
|
GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
|
||||||
Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.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.*;
|
package gplx.xowa.xtns.jsonConfigs.scribunto;
|
||||||
import gplx.xowa.xtns.scribunto.*; import gplx.xowa.xtns.scribunto.libs.*; import gplx.xowa.xtns.scribunto.procs.*;
|
|
||||||
import gplx.xowa.wikis.domains.*;
|
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 {
|
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 Scrib_lib_text__json_util json_util = new Scrib_lib_text__json_util();
|
||||||
private final Jscfg_localizer localizer = new Jscfg_localizer();
|
private final Jscfg_localizer localizer = new Jscfg_localizer();
|
||||||
private Scrib_core core;
|
private Scrib_core core;
|
||||||
public String Key() {return "JCLuaLibrary";}
|
public String Key() {return "JCLuaLibrary";}
|
||||||
public Scrib_lua_mod Mod() {return mod;} private Scrib_lua_mod mod;
|
public Scrib_lua_mod Mod() {return mod;} private Scrib_lua_mod mod;
|
||||||
@ -43,6 +63,19 @@ public class Jscfg_scrib_lib implements Scrib_lib {
|
|||||||
private static final String[] Proc_names = String_.Ary(Invk_get);
|
private static final String[] Proc_names = String_.Ary(Invk_get);
|
||||||
public boolean Get(Scrib_proc_args args, Scrib_proc_rslt rslt) {
|
public boolean Get(Scrib_proc_args args, Scrib_proc_rslt rslt) {
|
||||||
byte[] ttl_bry = args.Xstr_bry_or_null(0);
|
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
|
// get commons wiki
|
||||||
Xowe_wiki commons_wiki = (Xowe_wiki)core.App().Wiki_mgr().Get_by_or_null(Xow_domain_itm_.Bry__commons);
|
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));
|
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);
|
// get content
|
||||||
rv = localizer.Localize(core.Wiki().Lang(), page, rv);
|
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);
|
return rslt.Init_obj(rv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
XOWA: the XOWA Offline Wiki Application
|
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,
|
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.
|
or alternatively under the terms of the Apache License Version 2.0.
|
||||||
@ -13,14 +13,23 @@ 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
|
GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
|
||||||
Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.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.*;
|
package gplx.xowa.xtns.jsonConfigs.scribunto;
|
||||||
import org.junit.*; import gplx.core.tests.*;
|
|
||||||
import gplx.xowa.xtns.scribunto.*; import gplx.xowa.xtns.scribunto.libs.*;
|
import gplx.Bry_;
|
||||||
import gplx.xowa.langs.*; import gplx.xowa.langs.names.*;
|
import gplx.Keyval;
|
||||||
import gplx.langs.jsons.*;
|
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 {
|
public class Jscfg_scrib_lib_tst {
|
||||||
private final Jscfg_scrib_lib_fxt fxt = new Jscfg_scrib_lib_fxt();
|
private final Jscfg_scrib_lib_fxt fxt = new Jscfg_scrib_lib_fxt();
|
||||||
@Test public void Get() {
|
@Test public void Get() {
|
||||||
fxt.Init__page("Data:Test.tab", Json_doc.Make_str_by_apos
|
fxt.Init__page("Data:Test.tab", Json_doc.Make_str_by_apos
|
||||||
( "{"
|
( "{"
|
||||||
, " 'data':"
|
, " 'data':"
|
||||||
@ -48,8 +57,127 @@ public class Jscfg_scrib_lib_tst {
|
|||||||
, " 2=Data:Q2"
|
, " 2=Data:Q2"
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@Test public void Get_localize() {
|
@Test public void Get_localize_null() { // null defaults to wiki.Lang
|
||||||
fxt.Init__page("Data:Test_localize.tab", Json_doc.Make_str_by_apos
|
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"
|
||||||
|
, " 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=Germany"
|
||||||
|
, " 2="
|
||||||
|
, " 1=Q61912"
|
||||||
|
, " 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");
|
||||||
|
|
||||||
|
// match key
|
||||||
|
fxt.Test__pickLocalizedString(lang, fxt.Init__picklocalizedStringKvs("fr", "zh-cn"), "zh-cn");
|
||||||
|
|
||||||
|
// match fallback; note that zh1 is higher in fallback list, but lower in kvs
|
||||||
|
fxt.Test__pickLocalizedString(lang, fxt.Init__picklocalizedStringKvs("zh0", "zh1"), "zh1");
|
||||||
|
|
||||||
|
// match en if no key or fallbacks
|
||||||
|
fxt.Test__pickLocalizedString(lang, fxt.Init__picklocalizedStringKvs("fr", "en"), "en");
|
||||||
|
|
||||||
|
// pick 1st if no match
|
||||||
|
fxt.Test__pickLocalizedString(lang, fxt.Init__picklocalizedStringKvs("fr", "de"), "fr");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
class Jscfg_scrib_lib_fxt {
|
||||||
|
private final Scrib_invoke_func_fxt fxt = new Scrib_invoke_func_fxt();
|
||||||
|
private final Jscfg_scrib_lib lib;
|
||||||
|
private final Xowe_wiki commons_wiki;
|
||||||
|
public Jscfg_scrib_lib_fxt() {
|
||||||
|
fxt.Clear_for_lib();
|
||||||
|
lib = new Jscfg_scrib_lib();
|
||||||
|
lib.Init();
|
||||||
|
lib.Core_(fxt.Core());
|
||||||
|
this.commons_wiki = fxt.Parser_fxt().Wiki().Appe().Wiki_mgr().Get_by_or_make(gplx.xowa.wikis.domains.Xow_domain_itm_.Bry__commons).Init_assert();
|
||||||
|
}
|
||||||
|
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',"
|
, " 'license': 'CC0-1.0',"
|
||||||
, " 'description': {"
|
, " 'description': {"
|
||||||
@ -95,63 +223,14 @@ public class Jscfg_scrib_lib_tst {
|
|||||||
, " ]"
|
, " ]"
|
||||||
, "}"
|
, "}"
|
||||||
));
|
));
|
||||||
fxt.Test__get( "Test_localize.tab", String_.Concat_lines_nl_skip_last
|
|
||||||
( "1="
|
|
||||||
, " license=CC0-1.0"
|
|
||||||
, " description=Object table"
|
|
||||||
, " 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=Germany"
|
|
||||||
, " 2="
|
|
||||||
, " 1=Q61912"
|
|
||||||
, " 2=Wertheim am Main"
|
|
||||||
));
|
|
||||||
}
|
|
||||||
@Test public void pickLocalizedString() {
|
|
||||||
Xol_lang_itm lang = fxt.Init__lang("zh-cn", "zh1,zh0");
|
|
||||||
|
|
||||||
// match key
|
|
||||||
fxt.Test__pickLocalizedString(lang, fxt.Init__picklocalizedStringKvs("fr", "zh-cn"), "zh-cn");
|
|
||||||
|
|
||||||
// match fallback; note that zh1 is higher in fallback list, but lower in kvs
|
|
||||||
fxt.Test__pickLocalizedString(lang, fxt.Init__picklocalizedStringKvs("zh0", "zh1"), "zh1");
|
|
||||||
|
|
||||||
// match en if no key or fallbacks
|
|
||||||
fxt.Test__pickLocalizedString(lang, fxt.Init__picklocalizedStringKvs("fr", "en"), "en");
|
|
||||||
|
|
||||||
// pick 1st if no match
|
|
||||||
fxt.Test__pickLocalizedString(lang, fxt.Init__picklocalizedStringKvs("fr", "de"), "fr");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
class Jscfg_scrib_lib_fxt {
|
|
||||||
private final Scrib_invoke_func_fxt fxt = new Scrib_invoke_func_fxt();
|
|
||||||
private final Jscfg_scrib_lib lib;
|
|
||||||
private final Xowe_wiki commons_wiki;
|
|
||||||
public Jscfg_scrib_lib_fxt() {
|
|
||||||
fxt.Clear_for_lib();
|
|
||||||
lib = new Jscfg_scrib_lib();
|
|
||||||
lib.Init();
|
|
||||||
lib.Core_(fxt.Core());
|
|
||||||
this.commons_wiki = fxt.Parser_fxt().Wiki().Appe().Wiki_mgr().Get_by_or_make(gplx.xowa.wikis.domains.Xow_domain_itm_.Bry__commons).Init_assert();
|
|
||||||
}
|
|
||||||
public void Init__page(String page, String text) {
|
|
||||||
fxt.Parser_fxt().Init_page_create(commons_wiki, page, text);
|
|
||||||
}
|
}
|
||||||
public Xol_lang_itm Init__lang(String key, String fallbacks) {
|
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.Fallback_bry_(Bry_.new_a7(fallbacks));
|
||||||
|
lang_mgr.Add(lang);
|
||||||
|
|
||||||
return lang;
|
return lang;
|
||||||
}
|
}
|
||||||
public Keyval[] Init__picklocalizedStringKvs(String... vals) {
|
public Keyval[] Init__picklocalizedStringKvs(String... vals) {
|
||||||
@ -164,7 +243,10 @@ class Jscfg_scrib_lib_fxt {
|
|||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
public void Test__get(String page, String expd) {
|
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) {
|
public void Test__pickLocalizedString(Xol_lang_itm lang, Keyval[] kv_ary, String expd) {
|
||||||
Keyval actl_kv = Jscfg_localizer.pickLocalizedString(lang, "key", kv_ary);
|
Keyval actl_kv = Jscfg_localizer.pickLocalizedString(lang, "key", kv_ary);
|
||||||
|
Loading…
Reference in New Issue
Block a user