1
0
mirror of https://github.com/gnosygnu/xowa.git synced 2026-03-02 03:49:30 +00:00

uca category support and other changes

This commit is contained in:
gnosygnu
2016-10-12 08:57:22 -04:00
parent e3b393650d
commit 3fc2e0741f
187 changed files with 3486 additions and 2984 deletions

View File

@@ -26,24 +26,27 @@ public class Xog_url_wkr {
private Xoae_app app; private Xog_win_itm win; private Xowe_wiki wiki; private Xoae_page page;
private final Xof_img_size img_size = new Xof_img_size(); private final Xof_url_bldr url_bldr = Xof_url_bldr.new_v2();
private final Gfo_url_encoder fsys_lnx_encoder = Gfo_url_encoder_.New__fsys_lnx().Make();
public Xog_url_wkr Parse(Xog_win_itm win, String href_str) {
if (href_str == null) return this; // text is not link; return;
public Xoa_url Parse(Xog_win_itm win, String href_str) {
if (href_str == null) return tmp_url; // text is not link; return;
byte[] href_bry = Bry_.new_u8(href_str);
this.win = win; this.app = win.App();
this.page = win.Active_page();
this.wiki = win.Active_tab().Wiki();
app.Html__href_parser().Parse_as_url(tmp_url, href_bry, wiki, page.Ttl().Page_url());
return this;
return tmp_url;
}
public Xoa_url Exec() {
switch (tmp_url.Tid()) {
public void Init(Xowe_wiki wiki) { // TEST:
this.wiki = wiki;
}
public Xoa_url Exec(Xoa_url url) {
switch (url.Tid()) {
case Xoa_url_.Tid_unknown: return Xoa_url.Null; // unknown; return null which will become a noop
case Xoa_url_.Tid_inet: return Exec_url_http(app); // http://site.org
case Xoa_url_.Tid_anch: return Exec_url_anchor(win); // #anchor
case Xoa_url_.Tid_xcmd: return Exec_url_xowa(app); // xowa:app.version or /xcmd/app.version
case Xoa_url_.Tid_file: return Exec_url_file(app, wiki, page, win, tmp_url.Raw()); // file:///xowa/A.png
case Xoa_url_.Tid_page: return Exec_url_page(app, wiki, page, win, tmp_url.Raw()); // Page /wiki/Page
default: throw Err_.new_unhandled(tmp_url.Tid());
case Xoa_url_.Tid_file: return Exec_url_file(app, wiki, page, win, url.Raw()); // file:///xowa/A.png
case Xoa_url_.Tid_page: return Exec_url_page(wiki, url.Orig()); // /wiki/Page
default: throw Err_.new_unhandled(url.Tid());
}
}
private Xoa_url Exec_url_xowa(Xoae_app app) { // EX: xowa:app.version
@@ -90,24 +93,13 @@ public class Xog_url_wkr {
}
return Rslt_handled;
}
private Xoa_url Exec_url_page(Xoae_app app, Xowe_wiki wiki, Xoae_page page, Xog_win_itm win, byte[] href_bry) { // EX: "Page"; "/wiki/Page"; // rewritten; DATE:2014-01-19
Xoa_url rv = wiki.Utl__url_parser().Parse(href_bry);// needed for query_args
Gfo_qarg_itm[] qargs = rv.Qargs_ary();
int qargs_len = qargs.length;
if (qargs_len > 0) { // remove anchors from qargs; EX: "to=B#mw_pages"
for (int i = 0; i < qargs_len; i++) {
Gfo_qarg_itm arg = qargs[i];
int anch_pos = Bry_find_.Find_bwd(arg.Val_bry(), Byte_ascii.Hash); // NOTE: must .FindBwd to handle Category args like de.wikipedia.org/wiki/Kategorie:Begriffskl%C3%A4rung?pagefrom=#::12%20PANZERDIVISION#mw-pages; DATE:2013-06-18
if (anch_pos != Bry_find_.Not_found)
arg.Val_bry_(Bry_.Mid(arg.Val_bry(), 0, anch_pos));
}
}
return rv;
private Xoa_url Exec_url_page(Xowe_wiki wiki, byte[] href_bry) { // EX: "Page"; "/wiki/Page"; // rewritten; DATE:2014-01-19
return wiki.Utl__url_parser().Parse(href_bry);
}
public static Xoa_url Rslt_handled = null;
public static Xoa_url Exec_url(Xog_win_itm win, String href_str) {
Xog_url_wkr url_wkr = new Xog_url_wkr();
url_wkr.Parse(win, href_str);
return url_wkr.Exec();
Xoa_url url = url_wkr.Parse(win, href_str);
return url_wkr.Exec(url);
}
}

View File

@@ -0,0 +1,48 @@
/*
XOWA: the XOWA Offline Wiki Application
Copyright (C) 2012 gnosygnu@gmail.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
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.guis.urls; import gplx.*; import gplx.xowa.*; import gplx.xowa.guis.*;
import org.junit.*; import gplx.core.tests.*;
public class Xog_url_wkr__tst {
private final Xog_url_wkr__fxt fxt = new Xog_url_wkr__fxt();
@Test public void Basic() {
fxt.Exec__parse("/wiki/A?k1=B%26C");
fxt.Test__raw("/wiki/A?k1=B%26C");
}
@Test public void Anch_early() { // de.wikipedia.org/wiki/Kategorie:Begriffskl%C3%A4rung?pagefrom=#::12%20PANZERDIVISION#mw-pages
fxt.Exec__parse("/wiki/A?pagefrom=%23%3A7p#mw-pages");
fxt.Test__qarg("?pagefrom=#:7p");
fxt.Test__anch("mw-pages");
}
}
class Xog_url_wkr__fxt {
private final Xowe_wiki wiki;
private final Xog_url_wkr wkr = new Xog_url_wkr();
private Xoa_url url;
public Xog_url_wkr__fxt() {
Xoae_app app = Xoa_app_fxt.Make__app__edit();
this.wiki = Xoa_app_fxt.Make__wiki__edit(app);
wkr.Init(wiki);
}
public void Exec__parse(String href) {
this.url = wiki.Utl__url_parser().Parse(Bry_.new_u8(href));
this.url = wkr.Exec(url);
}
public void Test__raw(String expd) {Gftest.Eq__str(expd, String_.new_u8(url.Raw()));}
public void Test__qarg(String expd) {Gftest.Eq__str(expd, String_.new_u8(url.Qargs_mgr().To_bry()));}
public void Test__anch(String expd) {Gftest.Eq__str(expd, String_.new_u8(url.Anch_bry()));}
}