1
0
mirror of https://github.com/gnosygnu/xowa.git synced 2026-03-02 03:49:30 +00:00
This commit is contained in:
gnosygnu
2015-07-21 00:06:09 -04:00
parent 8e041d6e06
commit 99f9c3ccea
50 changed files with 1004 additions and 235 deletions

View File

@@ -16,10 +16,10 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.langs.vnts; import gplx.*; import gplx.xowa.*; import gplx.xowa.langs.*;
public class Xolg_vnt_grp {
public class Vnt_mnu_grp {
private final List_adp list = List_adp_.new_();
public byte[] Text() {return text;} public void Text_(byte[] v) {text = v;} private byte[] text;
public int Len() {return list.Count();}
public Xolg_vnt_itm Get_at(int i) {return (Xolg_vnt_itm)list.Get_at(i);}
public void Add(Xolg_vnt_itm itm) {list.Add(itm);}
public Vnt_mnu_itm Get_at(int i) {return (Vnt_mnu_itm)list.Get_at(i);}
public void Add(Vnt_mnu_itm itm) {list.Add(itm);}
public byte[] Text() {return text;} public void Text_(byte[] v) {text = v;} private byte[] text;
}

View File

@@ -16,10 +16,10 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.langs.vnts; import gplx.*; import gplx.xowa.*; import gplx.xowa.langs.*;
public class Xolg_vnt_grp_fmtr implements Bry_fmtr_arg {
private Xolg_vnt_grp grp;
private Xolg_vnt_itm_fmtr itm_fmtr = new Xolg_vnt_itm_fmtr();
public void Init(Xolg_vnt_grp grp, byte[] page_href, byte[] page_vnt) {
public class Vnt_mnu_grp_fmtr implements Bry_fmtr_arg {
private Vnt_mnu_grp grp;
private final Xolg_vnt_itm_fmtr itm_fmtr = new Xolg_vnt_itm_fmtr();
public void Init(Vnt_mnu_grp grp, byte[] page_href, byte[] page_vnt) {
this.grp = grp;
itm_fmtr.Init(grp, page_href, page_vnt);
}
@@ -27,7 +27,8 @@ public class Xolg_vnt_grp_fmtr implements Bry_fmtr_arg {
fmtr.Bld_bfr_many(bfr, grp.Text(), itm_fmtr);
}
private static final Bry_fmtr fmtr = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last
( " <div id='p-variants' role='navigation' class='vectorMenu' aria-labelledby='p-variants-label'>"
( ""
, " <div id='p-variants' role='navigation' class='vectorMenu' aria-labelledby='p-variants-label'>"
, " <h3 id='p-variants-label'><span>~{grp_text}</span><a href='#'></a></h3>"
, " <div class='menu'>"
, " <ul>~{itms}"
@@ -38,12 +39,12 @@ public class Xolg_vnt_grp_fmtr implements Bry_fmtr_arg {
);
}
class Xolg_vnt_itm_fmtr implements Bry_fmtr_arg {
private Xolg_vnt_grp grp; private byte[] page_href, page_vnt;
public void Init(Xolg_vnt_grp grp, byte[] page_href, byte[] page_vnt) {this.grp = grp; this.page_href = page_href; this.page_vnt = page_vnt;}
private Vnt_mnu_grp grp; private byte[] page_href, page_vnt;
public void Init(Vnt_mnu_grp grp, byte[] page_href, byte[] page_vnt) {this.grp = grp; this.page_href = page_href; this.page_vnt = page_vnt;}
public void XferAry(Bry_bfr bfr, int idx) {
int len = grp.Len();
for (int i = 0; i < len; ++i) {
Xolg_vnt_itm itm = grp.Get_at(i);
Vnt_mnu_itm itm = grp.Get_at(i);
boolean itm_is_selected = Bry_.Eq(itm.Key(), page_vnt);
byte[] itm_cls_selected = itm_is_selected ? Itm_cls_selected_y : Bry_.Empty;
fmtr.Bld_bfr_many(bfr, i, itm_cls_selected, itm.Key(), itm.Text(), page_href);

View File

@@ -17,11 +17,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.langs.vnts; import gplx.*; import gplx.xowa.*; import gplx.xowa.langs.*;
import org.junit.*;
public class Xolg_vnt_grp_fmtr_tst {
@Before public void init() {fxt.Clear();} private final Xolg_vnt_grp_fmtr_fxt fxt = new Xolg_vnt_grp_fmtr_fxt();
public class Vnt_mnu_grp_fmtr_tst {
@Before public void init() {fxt.Clear();} private final Vnt_mnu_grp_fmtr_fxt fxt = new Vnt_mnu_grp_fmtr_fxt();
@Test public void Basic() {
fxt.Test_to_str("Earth", "zh-hk", String_.Concat_lines_nl_skip_last
( " <div id='p-variants' role='navigation' class='vectorMenu' aria-labelledby='p-variants-label'>"
( ""
, " <div id='p-variants' role='navigation' class='vectorMenu' aria-labelledby='p-variants-label'>"
, " <h3 id='p-variants-label'><span>Choose lang</span><a href='#'></a></h3>"
, " <div class='menu'>"
, " <ul>"
@@ -38,13 +39,13 @@ public class Xolg_vnt_grp_fmtr_tst {
));
}
}
class Xolg_vnt_grp_fmtr_fxt {
private Xolg_vnt_grp vnt_grp;
class Vnt_mnu_grp_fmtr_fxt {
private Vnt_mnu_grp vnt_grp;
public void Clear() {
this.Init_grp("Choose lang", "zh-hans", "Simplified", "zh-hant", "Traditional", "zh-cn", "China", "zh-hk", "Hong Kong", "zh-mo", "Macau", "zh-sg", "Singapore", "zh-tw", "Taiwan");
}
public void Init_grp(String text, String... langs) {
vnt_grp = new Xolg_vnt_grp();
vnt_grp = new Vnt_mnu_grp();
vnt_grp.Text_(Bry_.new_u8(text));
int len = langs.length;
String lang_code = "";
@@ -53,13 +54,13 @@ class Xolg_vnt_grp_fmtr_fxt {
if (i % 2 == 0)
lang_code = lang;
else {
Xolg_vnt_itm itm = new Xolg_vnt_itm(Bry_.new_u8(lang_code), Bry_.new_u8(lang));
Vnt_mnu_itm itm = new Vnt_mnu_itm(Bry_.new_u8(lang_code), Bry_.new_u8(lang));
vnt_grp.Add(itm);
}
}
}
public void Test_to_str(String page_href, String selected_vnt, String expd) {
Xolg_vnt_grp_fmtr vnt_grp_fmtr = new Xolg_vnt_grp_fmtr();
Vnt_mnu_grp_fmtr vnt_grp_fmtr = new Vnt_mnu_grp_fmtr();
Bry_bfr bfr = Bry_bfr.new_();
vnt_grp_fmtr.Init(vnt_grp, Bry_.new_u8(page_href), Bry_.new_u8(selected_vnt));
vnt_grp_fmtr.XferAry(bfr, 0);

View File

@@ -16,8 +16,8 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa.langs.vnts; import gplx.*; import gplx.xowa.*; import gplx.xowa.langs.*;
public class Xolg_vnt_itm {
public Xolg_vnt_itm(byte[] key, byte[] text) {this.key = key; this.text = text;}
public class Vnt_mnu_itm {
public Vnt_mnu_itm(byte[] key, byte[] text) {this.key = key; this.text = text;}
public byte[] Key() {return key;} private final byte[] key;
public byte[] Text() {return text;} private final byte[] text;
}

View File

@@ -18,27 +18,43 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package gplx.xowa.langs.vnts; import gplx.*; import gplx.xowa.*; import gplx.xowa.langs.*;
import gplx.xowa.wikis.data.tbls.*;
public class Xol_vnt_mgr implements GfoInvkAble {
private Ordered_hash vnts = Ordered_hash_.new_bry_();
private int converter_ary_len; private Ordered_hash tmp_page_list = Ordered_hash_.new_bry_();
private final Ordered_hash vnts = Ordered_hash_.new_bry_(); private int converter_ary_len, cur_converter_ary_idx = -1;
private final Ordered_hash tmp_page_list = Ordered_hash_.new_bry_();
public Xol_vnt_mgr(Xol_lang lang) {this.lang = lang;}
public Xol_lang Lang() {return lang;} private final Xol_lang lang;
public Xol_vnt_converter[] Converter_ary() {return converter_ary;} private Xol_vnt_converter[] converter_ary;
public Xolg_vnt_grp Vnt_grp() {return vnt_grp;} private Xolg_vnt_grp vnt_grp = new Xolg_vnt_grp();
public Xolg_vnt_grp_fmtr Vnt_mnu_fmtr() {return vnt_mnu_fmtr;} private Xolg_vnt_grp_fmtr vnt_mnu_fmtr = new Xolg_vnt_grp_fmtr();
public Xol_lang Lang() {return lang;} private Xol_lang lang;
public byte[] Cur_vnt() {return cur_vnt;} public Xol_vnt_mgr Cur_vnt_(byte[] v) {cur_vnt = v; return this;} private byte[] cur_vnt = Bry_.Empty;
public Vnt_mnu_grp Vnt_grp() {return vnt_grp;} private final Vnt_mnu_grp vnt_grp = new Vnt_mnu_grp();
public Vnt_mnu_grp_fmtr Vnt_mnu_fmtr() {return vnt_mnu_fmtr;} private final Vnt_mnu_grp_fmtr vnt_mnu_fmtr = new Vnt_mnu_grp_fmtr();
public boolean Enabled() {return enabled;} public void Enabled_(boolean v) {this.enabled = v;} private boolean enabled = false;
public byte[] Cur_vnt() {return cur_vnt;} private byte[] cur_vnt = Bry_.Empty;
private void Vnt_grp_(byte[][] ary) {
int len = ary.length;
for (int i = 0; i < len; ++i) {
byte[] vnt = ary[i];
byte[] msg = lang.Msg_mgr().Itm_by_key_or_new(Bry_.Add(Msg_variantname, vnt)).Val();
// byte[] msg = vnt;
vnt_grp.Add(new Vnt_mnu_itm(vnt, msg));
}
}
private static final byte[] Msg_variantname = Bry_.new_a7("variantname-");
public String Html_style() {return html_style;} private String html_style = "";
public Xol_vnt_mgr Cur_vnt_(byte[] v) {
int new_converter_ary_idx = -1;
for (int i = 0; i < converter_ary_len; i++) {
Xol_vnt_converter itm = converter_ary[i];
if (Bry_.Eq(v, itm.Owner().Key())) {
new_converter_ary_idx = i;
break;
}
}
if (new_converter_ary_idx == -1) throw Err_.new_("lang.vnt", "uknown vnt", "key", v);
this.cur_vnt = v;
this.cur_converter_ary_idx = new_converter_ary_idx;
return this;
}
public void Init_by_wiki(Xowe_wiki wiki) {
if (!enabled) return;
Xop_vnt_lxr_.set_(wiki);
// VNT
// vnt_grp.Add(new Xolg_vnt_itm(Bry_.new_a7("zh-hans"), Bry_.new_a7("Simplified")));
// vnt_grp.Add(new Xolg_vnt_itm(Bry_.new_a7("zh-hant"), Bry_.new_a7("Traditional")));
// vnt_grp.Add(new Xolg_vnt_itm(Bry_.new_a7("zh-cn"), Bry_.new_a7("China")));
// vnt_grp.Add(new Xolg_vnt_itm(Bry_.new_a7("zh-hk"), Bry_.new_a7("Hong Kong")));
// vnt_grp.Add(new Xolg_vnt_itm(Bry_.new_a7("zh-mo"), Bry_.new_a7("Macau")));
// vnt_grp.Add(new Xolg_vnt_itm(Bry_.new_a7("zh-sg"), Bry_.new_a7("Singapore")));
// vnt_grp.Add(new Xolg_vnt_itm(Bry_.new_a7("zh-tw"), Bry_.new_a7("Taiwan")));
}
public Xol_vnt_itm Get_or_new(byte[] key) {
Xol_vnt_itm rv = (Xol_vnt_itm)vnts.Get_by(key);
@@ -49,6 +65,13 @@ public class Xol_vnt_mgr implements GfoInvkAble {
}
return rv;
}
public byte[] Convert_text(Xowe_wiki wiki, byte[] src) {return Convert_text(wiki, src, 0, src.length);}
public byte[] Convert_text(Xowe_wiki wiki, byte[] src, int bgn, int end) {
Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_m001();
Xol_vnt_converter converter = converter_ary[cur_converter_ary_idx];
converter.Convert_text(tmp_bfr, src, bgn, end);
return tmp_bfr.To_bry_and_rls();
}
public void Convert_ttl_init() {
int vnts_len = vnts.Count();
converter_ary_len = vnts_len;
@@ -67,39 +90,42 @@ public class Xol_vnt_mgr implements GfoInvkAble {
return rv;
}
public Xowd_page_itm Convert_ttl(Xowe_wiki wiki, Bry_bfr tmp_bfr, Xow_ns ns, byte[] ttl_bry) { // REF.MW:LanguageConverter.php|findVariantLink
int converted = Convert_ttl_convert(wiki, tmp_bfr, ns, ttl_bry); // convert ttl for each vnt
if (converted == 0) return Xowd_page_itm.Null; // ttl_bry has no conversions; exit;
int converted = Convert_ttl__convert_each_vnt(wiki, tmp_bfr, ns, ttl_bry); // convert ttl for each vnt
if (converted == 0) return Xowd_page_itm.Null; // ttl_bry has no conversions; exit;
wiki.Db_mgr().Load_mgr().Load_by_ttls(Cancelable_.Never, tmp_page_list, true, 0, converted);
for (int i = 0; i < converted; i++) {
Xowd_page_itm page = (Xowd_page_itm)tmp_page_list.Get_at(i);
if (page.Exists()) return page; // return 1st found page
if (page.Exists()) return page; // return 1st found page
}
return Xowd_page_itm.Null;
}
private int Convert_ttl_convert(Xowe_wiki wiki, Bry_bfr tmp_bfr, Xow_ns ns, byte[] ttl_bry) {
tmp_page_list.Clear();
int rv = 0;
for (int i = 0; i < converter_ary_len; i++) { // convert ttl for each variant
Xol_vnt_converter converter = converter_ary[i];
tmp_bfr.Clear();
if (!converter.Convert_text(tmp_bfr, ttl_bry)) continue; // ttl is not converted for variant; ignore
Xoa_ttl ttl = Xoa_ttl.parse_(wiki, ns.Id(), tmp_bfr.Xto_bry_and_clear()); // NOTE: must convert to ttl in order to upper 1st letter; EX:{{jez-eng|sense}} -> Jez-eng; PAGE:sr.w:ДНК DATE:2014-07-06
if (ttl == null) continue;
Xowd_page_itm page = new Xowd_page_itm();
page.Ttl_(ns, ttl.Page_db());
byte[] converted_ttl = page.Ttl_full_db();
if (tmp_page_list.Has(converted_ttl)) continue;
tmp_page_list.Add(converted_ttl, page);
++rv;
private int Convert_ttl__convert_each_vnt(Xowe_wiki wiki, Bry_bfr tmp_bfr, Xow_ns ns, byte[] ttl_bry) {
synchronized (tmp_page_list) {
tmp_page_list.Clear();
int rv = 0;
for (int i = 0; i < converter_ary_len; i++) { // convert ttl for each variant
Xol_vnt_converter converter = converter_ary[i];
tmp_bfr.Clear();
if (!converter.Convert_text(tmp_bfr, ttl_bry)) continue; // ttl is not converted for variant; ignore
Xoa_ttl ttl = Xoa_ttl.parse_(wiki, ns.Id(), tmp_bfr.Xto_bry_and_clear()); // NOTE: must convert to ttl in order to upper 1st letter; EX:{{jez-eng|sense}} -> Jez-eng; PAGE:sr.w:ДНК DATE:2014-07-06
if (ttl == null) continue;
Xowd_page_itm page = new Xowd_page_itm();
page.Ttl_(ns, ttl.Page_db());
byte[] converted_ttl = page.Ttl_full_db();
if (tmp_page_list.Has(converted_ttl)) continue;
tmp_page_list.Add(converted_ttl, page);
++rv;
}
return rv;
}
return rv;
}
public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {
if (ctx.Match(k, Invk_get)) return Get_or_new(m.ReadBry("v"));
else if (ctx.Match(k, Invk_init_end)) Convert_ttl_init();
else if (ctx.Match(k, Invk_cur_vnt_)) cur_vnt = m.ReadBry("v");
else if (ctx.Match(k, Invk_vnt_grp_)) Vnt_grp_(m.ReadBryAry("v", Byte_ascii.Pipe));
else if (ctx.Match(k, Invk_cur_vnt_)) Cur_vnt_(m.ReadBry("v"));
else if (ctx.Match(k, Invk_html_style_)) html_style = m.ReadStr("v");
else return GfoInvkAble_.Rv_unhandled;
return this;
} private static final String Invk_get = "get", Invk_init_end = "init_end", Invk_cur_vnt_ = "cur_vnt_", Invk_html_style_ = "html_style_";
} private static final String Invk_get = "get", Invk_init_end = "init_end", Invk_cur_vnt_ = "cur_vnt_", Invk_html_style_ = "html_style_", Invk_vnt_grp_ = "vnt_grp_";
}