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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
48
400_xowa/src/gplx/xowa/guis/urls/Xog_url_wkr__tst.java
Normal file
48
400_xowa/src/gplx/xowa/guis/urls/Xog_url_wkr__tst.java
Normal 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()));}
|
||||
}
|
||||
Reference in New Issue
Block a user