From e0ee9a952d56b9d0e0a0a717f7b2fc9e9e8e6025 Mon Sep 17 00:00:00 2001 From: gnosygnu Date: Thu, 24 Nov 2016 22:16:39 -0500 Subject: [PATCH] Parser.Lnke: Handle xwiki links to history pages --- 400_xowa/src/gplx/xowa/Xoa_url.java | 2 +- .../gplx/xowa/htmls/hrefs/Xoh_href_parser.java | 3 +++ .../src/gplx/xowa/parsers/lnkes/Xop_lnke_wkr.java | 15 ++++++++++----- .../parsers/lnkes/Xop_lnke_wkr_xwiki_tst.java | 4 ++++ 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/400_xowa/src/gplx/xowa/Xoa_url.java b/400_xowa/src/gplx/xowa/Xoa_url.java index ffb5fd21a..063b7ecae 100644 --- a/400_xowa/src/gplx/xowa/Xoa_url.java +++ b/400_xowa/src/gplx/xowa/Xoa_url.java @@ -19,7 +19,7 @@ package gplx.xowa; import gplx.*; import gplx.core.net.*; import gplx.core.net.qargs.*; import gplx.xowa.apps.urls.*; import gplx.xowa.htmls.hrefs.*; public class Xoa_url { - public int Tid() {return tid;} private int tid; + public int Tid() {return tid;} public void Tid_(int v) {this.tid = v;} private int tid; public byte[] Raw() {return raw;} private byte[] raw = Bry_.Empty; public byte[] Orig() {return orig;} private byte[] orig; public byte[] Wiki_bry() {return wiki_bry;} public Xoa_url Wiki_bry_(byte[] v) {wiki_bry = v; return this;} private byte[] wiki_bry; diff --git a/400_xowa/src/gplx/xowa/htmls/hrefs/Xoh_href_parser.java b/400_xowa/src/gplx/xowa/htmls/hrefs/Xoh_href_parser.java index a0d9a743c..0d8586587 100644 --- a/400_xowa/src/gplx/xowa/htmls/hrefs/Xoh_href_parser.java +++ b/400_xowa/src/gplx/xowa/htmls/hrefs/Xoh_href_parser.java @@ -70,6 +70,9 @@ public class Xoh_href_parser { } } rv.Page_bry_(tmp_page); + if (tmp_page == null) { // handle xwiki lnke's to history page else null ref; EX:[http://ru.wikipedia.org/w/index.php?title&diff=19103464&oldid=18910980 ???????]; PAGE:ru.w:Project:??????_??_??????_??????/?????/?????????????/2009 DATE:2016-11-24 + rv.Tid_(Xoa_url_.Tid_inet); + } break; } } diff --git a/400_xowa/src/gplx/xowa/parsers/lnkes/Xop_lnke_wkr.java b/400_xowa/src/gplx/xowa/parsers/lnkes/Xop_lnke_wkr.java index 5c5d60890..6313f8b5c 100644 --- a/400_xowa/src/gplx/xowa/parsers/lnkes/Xop_lnke_wkr.java +++ b/400_xowa/src/gplx/xowa/parsers/lnkes/Xop_lnke_wkr.java @@ -176,12 +176,17 @@ public class Xop_lnke_wkr implements Xop_ctx_wkr { byte[] xwiki_wiki = xo_url_parser_url.Wiki_bry(); byte[] xwiki_page = xo_url_parser_url.Page_bry(); - Xoa_ttl ttl = Xoa_ttl.Parse(wiki, xwiki_page); - if (ttl != null && ttl.Wik_itm() != null) { - xwiki_wiki = ttl.Wik_itm().Domain_bry(); - xwiki_page = ttl.Page_url(); + if (xwiki_page == null) { // handle xwiki lnke's to history page else null ref; EX:[http://ru.wikipedia.org/w/index.php?title&diff=19103464&oldid=18910980 извещен]; PAGE:ru.w:Project:Заявки_на_снятие_флагов/Архив/Патрулирующие/2009 DATE:2016-11-24 + xwiki_page = decoded_src; + } + else { + Xoa_ttl ttl = Xoa_ttl.Parse(wiki, xwiki_page); + if (ttl != null && ttl.Wik_itm() != null) { + xwiki_wiki = ttl.Wik_itm().Domain_bry(); + xwiki_page = ttl.Page_url(); + } + tkn.Lnke_xwiki_(xwiki_wiki, xwiki_page, xo_url_parser_url.Qargs_ary()); } - tkn.Lnke_xwiki_(xwiki_wiki, xwiki_page, xo_url_parser_url.Qargs_ary()); } ctx.Subs_add(root, tkn); if (lnke_type == Xop_lnke_tkn.Lnke_typ_brack) { diff --git a/400_xowa/src/gplx/xowa/parsers/lnkes/Xop_lnke_wkr_xwiki_tst.java b/400_xowa/src/gplx/xowa/parsers/lnkes/Xop_lnke_wkr_xwiki_tst.java index b87a64ed1..a9cdc3e50 100644 --- a/400_xowa/src/gplx/xowa/parsers/lnkes/Xop_lnke_wkr_xwiki_tst.java +++ b/400_xowa/src/gplx/xowa/parsers/lnkes/Xop_lnke_wkr_xwiki_tst.java @@ -40,6 +40,10 @@ public class Xop_lnke_wkr_xwiki_tst { fxt.App().Usere().Wiki().Xwiki_mgr().Add_by_atrs(Bry_.new_a7("en.wikipedia.org"), Bry_.new_a7("en.wikipedia.org")); fxt.Test__parse__wtxt_to_html("[http://en.wikipedia.org/wiki/A?action=edit a]", "a"); } + @Test public void Xwiki__history() { // PURPOSE: handle xwiki lnke's to history page else null ref; EX:[http://ru.wikipedia.org/w/index.php?title&diff=19103464&oldid=18910980 извещен]; PAGE:ru.w:Project:Заявки_на_снятие_флагов/Архив/Патрулирующие/2009 DATE:2016-11-24 + fxt.App().Usere().Wiki().Xwiki_mgr().Add_by_atrs(Bry_.new_a7("en.wikipedia.org"), Bry_.new_a7("en.wikipedia.org")); + fxt.Test__parse__wtxt_to_html("[http://en.wikipedia.org/w/index.php?title&diff=1&oldid=2 abc]", "abc"); + } @Test public void Ignore_proto() { // PURPOSE: handle other protocols; PAGE:uk.w:Маскалі; DATE:2015-07-28 fxt.Test__parse__wtxt_to_html("[mailto:a b]", "b");// should be /w/, not /en.wikipedia.org }