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
2014-07-06 22:58:35 -04:00
parent 57f65b4d0c
commit ecbe2918d8
187 changed files with 4184 additions and 2286 deletions

View File

@@ -23,4 +23,9 @@ public class Bfmtr_eval_wiki implements Bry_fmtr_eval_mgr {
Object rslt = GfsCore._.Exec_bry(cmd, wiki);
return Bry_.new_utf8_(Object_.XtoStr_OrNullStr(rslt));
}
public void Eval_mgr_(Bry_fmtr... fmtrs) {
int fmtrs_len = fmtrs.length;
for (int i = 0; i < fmtrs_len; i++)
fmtrs[i].Eval_mgr_(this);
}
}

View File

@@ -16,12 +16,17 @@ 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; import gplx.*;
import gplx.xowa.langs.cases.*;
import gplx.xowa.xtns.scribunto.*;
public class Xow_ns_mgr implements GfoInvkAble, gplx.lists.ComparerAble {
private OrderedHash id_hash = OrderedHash_.new_(); // hash for retrieval by id
private Hash_adp_bry name_hash = Hash_adp_bry.ci_(); // hash for retrieval by name; note that ns names are case-insensitive "File:" == "fILe:"
private Hash_adp_bry tmpl_hash = Hash_adp_bry.ci_(); // hash for retrieval by name; PERF for templates
private Hash_adp_bry name_hash; // hash for retrieval by name; note that ns names are case-insensitive "File:" == "fILe:"
private Hash_adp_bry tmpl_hash; // hash for retrieval by name; PERF for templates
private OrderedHash aliases = OrderedHash_.new_(); // hash to store aliases; used to populate name_hash;
public Xow_ns_mgr(Xol_case_mgr case_mgr) {
name_hash = Hash_adp_bry.ci_utf8_(case_mgr);
tmpl_hash = Hash_adp_bry.ci_utf8_(case_mgr);
}
public void Clear() {
name_hash.Clear();
id_hash.Clear();

View File

@@ -16,10 +16,11 @@ 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; import gplx.*;
import gplx.xowa.langs.cases.*;
public class Xow_ns_mgr_ {
public static final int Ordinal_max = 255; // ASSUME: no more than 255 ns in a wiki; choosing 255 to align with byte (no particular reason why it needs to be a byte, but better than 500, 1000, etc)
public static Xow_ns_mgr default_() { // NOTE: same as en.wikipedia.org's ns circa 2012-01 (currently omitting ns:446,447,710,711)
Xow_ns_mgr rv = new Xow_ns_mgr();
public static Xow_ns_mgr default_(Xol_case_mgr case_mgr) { // NOTE: same as en.wikipedia.org's ns circa 2012-01 (currently omitting ns:446,447,710,711)
Xow_ns_mgr rv = new Xow_ns_mgr(case_mgr);
rv = rv.Add_new(-2, "Media").Add_new(-1, "Special").Add_new(0, "").Add_new(1, "Talk").Add_new(2, "User").Add_new(3, "User_talk").Add_new(4, "Wikipedia").Add_new(5, "Wikipedia_talk")
.Add_new(6, "File").Add_new(7, "File_talk").Add_new(8, "MediaWiki").Add_new(9, "MediaWiki_talk").Add_new(10, "Template").Add_new(11, "Template_talk")
.Add_new(12, "Help").Add_new(13, "Help_talk").Add_new(14, "Category").Add_new(15, "Category_talk").Add_new(100, "Portal").Add_new(101, "Portal_talk").Add_new(108, "Book").Add_new(109, "Book_talk")

View File

@@ -17,6 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package gplx.xowa; import gplx.*;
import org.junit.*;
import gplx.xowa.langs.cases.*;
public class Xow_ns_mgr_tst {
@Before public void init() {fxt.Clear();} private Xow_ns_mgr_fxt fxt = new Xow_ns_mgr_fxt();
@Test public void Basic() {fxt.ini_ns_(-2, 0, 1).run_Ords_sort().tst_Ords(-2, -100, 0, 1);}
@@ -33,10 +34,19 @@ public class Xow_ns_mgr_tst {
byte[] name = Bry_.new_ascii_("Templatex:Abc");
Tfds.Eq(10, fxt.Ns_mgr().Tmpls_get_w_colon(name, 0, name.length));
}
@Test public void Utf8() {// PURPOSE: handle different casings for ns_names; PAGE:ru.w:Портрет_итальянского_Ренессанса DATE:2014-07-04
Xow_ns_mgr ns_mgr = new Xow_ns_mgr(Xol_case_mgr_.Utf8());
ns_mgr.Add_new(1234, "Test");
ns_mgr.Add_new(1235, "файл");
fxt.Ns_mgr_(ns_mgr);
fxt.Test_ns_name(1234, "Test", "test", "TEST", "tesT");
fxt.Test_ns_name(1235, "файл", "Файл");
}
}
class Xow_ns_mgr_fxt {
Xow_ns_mgr ns_mgr = new Xow_ns_mgr();
private Xow_ns_mgr ns_mgr = new Xow_ns_mgr(Xol_case_mgr_.Ascii());
public Xow_ns_mgr Ns_mgr() {return ns_mgr;}
public void Ns_mgr_(Xow_ns_mgr v) {this.ns_mgr = v;}
public void Clear() {ns_mgr.Clear();}
public Xow_ns_mgr_fxt ini_ns_(int... ids) {
int ids_len = ids.length;
@@ -56,5 +66,14 @@ class Xow_ns_mgr_fxt {
}
Tfds.Eq_ary(expd, actl);
return this;
}
}
public void Test_ns_name(int expd_id, String... ns_names) {
int ns_names_len = ns_names.length;
for (int i = 0; i < ns_names_len; ++i) {
String ns_name = ns_names[i];
Xow_ns actl_ns = ns_mgr.Names_get_or_null(Bry_.new_utf8_(ns_name));
int actl_id = actl_ns == null ? Int_.MinValue : actl_ns.Id();
Tfds.Eq(expd_id, actl_id, ns_name);
}
}
}

View File

@@ -100,7 +100,6 @@ public class Xow_wiki implements GfoInvkAble {
public Xop_redirect_mgr Redirect_mgr() {return redirect_mgr;} private Xop_redirect_mgr redirect_mgr;
public Xop_ctx Ctx() {return ctx;} private Xop_ctx ctx;
public ListAdp Rls_list() {if (rls_list == null) rls_list = ListAdp_.new_(); return rls_list;} private ListAdp rls_list;
public HashAdp If_exists_regy() {return if_exists_regy;} HashAdp if_exists_regy = HashAdp_.new_bry_();
public Xow_xwiki_mgr Xwiki_mgr() {return xwiki_mgr;} private Xow_xwiki_mgr xwiki_mgr;
public Xow_file_mgr File_mgr() {return file_mgr;} private Xow_file_mgr file_mgr;

View File

@@ -31,7 +31,7 @@ class Xowc_xtn_pages_fxt {
private Xow_ns_mgr ns_mgr;
private Xowc_xtn_pages cfg_pages;
public void Clear() {
ns_mgr = Xow_ns_mgr_.default_();
ns_mgr = Xow_ns_mgr_.default_(gplx.xowa.langs.cases.Xol_case_mgr_.Ascii());
cfg_pages = new Xowc_xtn_pages();
}
public Xowc_xtn_pages_fxt Init_ns(int id, String name) {