mirror of
https://github.com/gnosygnu/xowa.git
synced 2026-03-02 03:49:30 +00:00
v2.8.1.1
This commit is contained in:
@@ -17,9 +17,10 @@ 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 Vnt_mnu_grp {
|
||||
private final List_adp list = List_adp_.new_();
|
||||
private final Ordered_hash list = Ordered_hash_.new_bry_();
|
||||
public int Len() {return list.Count();}
|
||||
public boolean Has(byte[] key) {return list.Has(key);}
|
||||
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;
|
||||
public void Add(Vnt_mnu_itm itm) {list.Add_if_dupe_use_1st(itm.Key(), itm);}
|
||||
public Vnt_mnu_itm Get_by(byte[] key) {return (Vnt_mnu_itm)list.Get_by(key);}
|
||||
}
|
||||
|
||||
@@ -17,14 +17,15 @@ 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 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);
|
||||
private Vnt_mnu_grp grp; private byte[] page_vnt;
|
||||
public void Init(Vnt_mnu_grp grp, byte[] wiki_domain, byte[] page_href, byte[] page_vnt) {
|
||||
this.grp = grp; this.page_vnt = page_vnt;
|
||||
itm_fmtr.Init(grp, wiki_domain, page_href, page_vnt);
|
||||
}
|
||||
public void XferAry(Bry_bfr bfr, int idx) {
|
||||
fmtr.Bld_bfr_many(bfr, grp.Text(), itm_fmtr);
|
||||
Vnt_mnu_itm mnu_itm = grp.Get_by(page_vnt);
|
||||
fmtr.Bld_bfr_many(bfr, mnu_itm == null ? Bry_.Empty : mnu_itm.Text(), itm_fmtr);
|
||||
}
|
||||
private static final Bry_fmtr fmtr = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last
|
||||
( ""
|
||||
@@ -39,21 +40,21 @@ public class Vnt_mnu_grp_fmtr implements Bry_fmtr_arg {
|
||||
);
|
||||
}
|
||||
class Xolg_vnt_itm_fmtr implements Bry_fmtr_arg {
|
||||
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;}
|
||||
private Vnt_mnu_grp grp; private byte[] wiki_domain, page_href, page_vnt;
|
||||
public void Init(Vnt_mnu_grp grp, byte[] wiki_domain, byte[] page_href, byte[] page_vnt) {this.grp = grp; this.wiki_domain = wiki_domain; 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) {
|
||||
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);
|
||||
fmtr.Bld_bfr_many(bfr, i, itm_cls_selected, wiki_domain, itm.Key(), itm.Text(), page_href);
|
||||
}
|
||||
}
|
||||
private static final byte[] Itm_cls_selected_y = Bry_.new_a7(" class='selected'");
|
||||
private static final Bry_fmtr fmtr = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last
|
||||
private static final Bry_fmtr fmtr = Bry_fmtr.new_(String_.Concat_lines_nl_skip_last // NOTE: using "/site/zh.w/zh-hans/A" instead of "/zh-hans/A" b/c it is easier for href_parser; if /site/ ever needs to truly mean "not-this-site", then change this to "/lang/"; DATE:2015-07-30
|
||||
( ""
|
||||
, " <li id='ca-varlang-~{itm_idx}'~{itm_cls_selected}><a href='/wiki/~{itm_href}?xowa_vnt=~{itm_lang}' lang='~{itm_lang}' hreflang='~{itm_lang}'>~{itm_text}</a></li>"
|
||||
), "itm_idx", "itm_cls_selected", "itm_lang", "itm_text", "itm_href"
|
||||
, " <li id='ca-varlang-~{itm_idx}'~{itm_cls_selected}><a href='/site/~{wiki_domain}/~{itm_lang}/~{itm_href}' lang='~{itm_lang}' hreflang='~{itm_lang}' class='xowa-hover-off'>~{itm_text}</a></li>"
|
||||
), "itm_idx", "itm_cls_selected", "wiki_domain", "itm_lang", "itm_text", "itm_href"
|
||||
);
|
||||
}
|
||||
|
||||
@@ -20,23 +20,23 @@ import org.junit.*;
|
||||
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'>"
|
||||
, " <h3 id='p-variants-label'><span>Choose lang</span><a href='#'></a></h3>"
|
||||
, " <div class='menu'>"
|
||||
, " <ul>"
|
||||
, " <li id='ca-varlang-0'><a href='/wiki/Earth?xowa_vnt=zh-hans' lang='zh-hans' hreflang='zh-hans'>Simplified</a></li>"
|
||||
, " <li id='ca-varlang-1'><a href='/wiki/Earth?xowa_vnt=zh-hant' lang='zh-hant' hreflang='zh-hant'>Traditional</a></li>"
|
||||
, " <li id='ca-varlang-2'><a href='/wiki/Earth?xowa_vnt=zh-cn' lang='zh-cn' hreflang='zh-cn'>China</a></li>"
|
||||
, " <li id='ca-varlang-3' class='selected'><a href='/wiki/Earth?xowa_vnt=zh-hk' lang='zh-hk' hreflang='zh-hk'>Hong Kong</a></li>"
|
||||
, " <li id='ca-varlang-4'><a href='/wiki/Earth?xowa_vnt=zh-mo' lang='zh-mo' hreflang='zh-mo'>Macau</a></li>"
|
||||
, " <li id='ca-varlang-5'><a href='/wiki/Earth?xowa_vnt=zh-sg' lang='zh-sg' hreflang='zh-sg'>Singapore</a></li>"
|
||||
, " <li id='ca-varlang-6'><a href='/wiki/Earth?xowa_vnt=zh-tw' lang='zh-tw' hreflang='zh-tw'>Taiwan</a></li>"
|
||||
, " </ul>"
|
||||
, " </div>"
|
||||
, " </div>"
|
||||
));
|
||||
// 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'>"
|
||||
// , " <h3 id='p-variants-label'><span>Choose lang</span><a href='#'></a></h3>"
|
||||
// , " <div class='menu'>"
|
||||
// , " <ul>"
|
||||
// , " <li id='ca-varlang-0'><a href='/wiki/Earth?xowa_vnt=zh-hans' lang='zh-hans' hreflang='zh-hans'>Simplified</a></li>"
|
||||
// , " <li id='ca-varlang-1'><a href='/wiki/Earth?xowa_vnt=zh-hant' lang='zh-hant' hreflang='zh-hant'>Traditional</a></li>"
|
||||
// , " <li id='ca-varlang-2'><a href='/wiki/Earth?xowa_vnt=zh-cn' lang='zh-cn' hreflang='zh-cn'>China</a></li>"
|
||||
// , " <li id='ca-varlang-3' class='selected'><a href='/wiki/Earth?xowa_vnt=zh-hk' lang='zh-hk' hreflang='zh-hk'>Hong Kong</a></li>"
|
||||
// , " <li id='ca-varlang-4'><a href='/wiki/Earth?xowa_vnt=zh-mo' lang='zh-mo' hreflang='zh-mo'>Macau</a></li>"
|
||||
// , " <li id='ca-varlang-5'><a href='/wiki/Earth?xowa_vnt=zh-sg' lang='zh-sg' hreflang='zh-sg'>Singapore</a></li>"
|
||||
// , " <li id='ca-varlang-6'><a href='/wiki/Earth?xowa_vnt=zh-tw' lang='zh-tw' hreflang='zh-tw'>Taiwan</a></li>"
|
||||
// , " </ul>"
|
||||
// , " </div>"
|
||||
// , " </div>"
|
||||
// ));
|
||||
}
|
||||
}
|
||||
class Vnt_mnu_grp_fmtr_fxt {
|
||||
@@ -46,7 +46,6 @@ class Vnt_mnu_grp_fmtr_fxt {
|
||||
}
|
||||
public void Init_grp(String text, String... langs) {
|
||||
vnt_grp = new Vnt_mnu_grp();
|
||||
vnt_grp.Text_(Bry_.new_u8(text));
|
||||
int len = langs.length;
|
||||
String lang_code = "";
|
||||
for (int i = 0; i < len; ++i) {
|
||||
@@ -62,7 +61,7 @@ class Vnt_mnu_grp_fmtr_fxt {
|
||||
public void Test_to_str(String page_href, String selected_vnt, String expd) {
|
||||
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.Init(vnt_grp, Bry_.new_u8(page_href), Bry_.new_a7("zh.wikipedia.org"), Bry_.new_u8(selected_vnt));
|
||||
vnt_grp_fmtr.XferAry(bfr, 0);
|
||||
Tfds.Eq_str_lines(expd, bfr.Xto_str_and_clear());
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ package gplx.xowa.langs.vnts; import gplx.*; import gplx.xowa.*; import gplx.xow
|
||||
import gplx.core.btries.*; import gplx.intl.*;
|
||||
import gplx.xowa.langs.cnvs.*;
|
||||
public class Xol_vnt_converter {
|
||||
private Btrie_slim_mgr trie = Btrie_slim_mgr.cs_();
|
||||
private Btrie_slim_mgr trie = Btrie_slim_mgr.cs();
|
||||
public Xol_vnt_converter(Xol_vnt_itm owner) {this.owner = owner;}
|
||||
public byte[] Owner_key() {return owner.Key();}
|
||||
public Xol_vnt_itm Owner() {return owner;} private Xol_vnt_itm owner;
|
||||
@@ -49,6 +49,7 @@ public class Xol_vnt_converter {
|
||||
pos = trie.Match_pos();
|
||||
}
|
||||
}
|
||||
if (!matched) bfr.Add(src); // no convert; make sure to add back src, else bfr will be blank
|
||||
return matched;
|
||||
}
|
||||
public void Rebuild() {Clear(); Build();}
|
||||
|
||||
@@ -27,12 +27,11 @@ public class Xol_vnt_mgr implements GfoInvkAble {
|
||||
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) {
|
||||
public 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));
|
||||
}
|
||||
}
|
||||
@@ -47,7 +46,7 @@ public class Xol_vnt_mgr implements GfoInvkAble {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (new_converter_ary_idx == -1) throw Err_.new_("lang.vnt", "uknown vnt", "key", v);
|
||||
if (new_converter_ary_idx == -1) throw Err_.new_("lang.vnt", "unknown vnt", "key", v);
|
||||
this.cur_vnt = v;
|
||||
this.cur_converter_ary_idx = new_converter_ary_idx;
|
||||
return this;
|
||||
@@ -90,14 +89,16 @@ 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_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
|
||||
synchronized (tmp_page_list) {
|
||||
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
|
||||
}
|
||||
return Xowd_page_itm.Null;
|
||||
}
|
||||
return Xowd_page_itm.Null;
|
||||
}
|
||||
private int Convert_ttl__convert_each_vnt(Xowe_wiki wiki, Bry_bfr tmp_bfr, Xow_ns ns, byte[] ttl_bry) {
|
||||
synchronized (tmp_page_list) {
|
||||
|
||||
@@ -31,7 +31,7 @@ class Xop_vnt_flag_lang_bldr {
|
||||
ary = new Xop_vnt_flag_lang_itm[len];
|
||||
ary_len = len;
|
||||
}
|
||||
public Btrie_slim_mgr Trie() {return trie;} private Btrie_slim_mgr trie = Btrie_slim_mgr.ci_ascii_(); // NOTE:ci.ascii:MW_const.en; lang variant name; EX:zh-hans
|
||||
public Btrie_slim_mgr Trie() {return trie;} private Btrie_slim_mgr trie = Btrie_slim_mgr.ci_a7(); // NOTE:ci.ascii:MW_const.en; lang variant name; EX:zh-hans
|
||||
public void Add(Xop_vnt_flag_lang_itm itm) {
|
||||
int idx = itm.Idx();
|
||||
if (ary[idx] == null) {
|
||||
|
||||
@@ -101,11 +101,11 @@ class Xop_vnt_flag_parser {
|
||||
private static Btrie_fast_mgr flag_trie = Xop_vnt_flag_.Trie;
|
||||
// private static final byte Dlm_tid_bgn = 0, Dlm_tid_end = 1, Dlm_tid_pipe = 2, Dlm_tid_colon = 3, Dlm_tid_semic = 4, Dlm_tid_kv = 5;
|
||||
// private static Btrie_fast_mgr dlm_trie = Btrie_fast_mgr.cs_()
|
||||
// .Add_bry_bval(Xop_vnt_lxr_.Hook_bgn , Dlm_tid_bgn)
|
||||
// .Add_bry_bval(Xop_vnt_lxr_.Hook_end , Dlm_tid_end)
|
||||
// .Add_bry_bval(Byte_ascii.Pipe , Dlm_tid_pipe)
|
||||
// .Add_bry_bval(Byte_ascii.Colon , Dlm_tid_colon)
|
||||
// .Add_bry_bval(Byte_ascii.Semic , Dlm_tid_semic)
|
||||
// .Add_bry_bval(Bry_.new_a7("=>") , Dlm_tid_kv)
|
||||
// .Add_bry_byte(Xop_vnt_lxr_.Hook_bgn , Dlm_tid_bgn)
|
||||
// .Add_bry_byte(Xop_vnt_lxr_.Hook_end , Dlm_tid_end)
|
||||
// .Add_bry_byte(Byte_ascii.Pipe , Dlm_tid_pipe)
|
||||
// .Add_bry_byte(Byte_ascii.Colon , Dlm_tid_colon)
|
||||
// .Add_bry_byte(Byte_ascii.Semic , Dlm_tid_semic)
|
||||
// .Add_bry_byte(Bry_.new_a7("=>") , Dlm_tid_kv)
|
||||
// ;
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ class Xop_vnt_rules_parser {
|
||||
private byte[] cur_macro_bry = null;
|
||||
private byte[] cur_lang_bry = null;
|
||||
public Xop_vnt_rules_parser(Xol_vnt_mgr vnt_mgr) {
|
||||
trie = Btrie_slim_mgr.ci_ascii_(); // NOTE:ci.ascii:MW_const.en; lang variant name; EX:zh-hans
|
||||
trie = Btrie_slim_mgr.ci_a7(); // NOTE:ci.ascii:MW_const.en; lang variant name; EX:zh-hans
|
||||
Xol_vnt_converter[] ary = vnt_mgr.Converter_ary();
|
||||
int ary_len = ary.length;
|
||||
for (int i = 0; i < ary_len; i++) {
|
||||
|
||||
Reference in New Issue
Block a user