From 9cb60f25401bba1dac7e428c62238c125a7fda5d Mon Sep 17 00:00:00 2001 From: gnosygnu Date: Tue, 14 Jan 2020 06:31:23 -0500 Subject: [PATCH] Redirect: Add span for 'mw-redirected' [#642] --- 400_xowa/src/gplx/xowa/Xoa_ttl.java | 5 +++ .../xowa/parsers/utils/Xop_redirect_mgr.java | 31 +++++++++++++------ .../parsers/utils/Xop_redirect_mgr_tst.java | 8 +++-- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/400_xowa/src/gplx/xowa/Xoa_ttl.java b/400_xowa/src/gplx/xowa/Xoa_ttl.java index 94fdfcfa3..376cfcdac 100644 --- a/400_xowa/src/gplx/xowa/Xoa_ttl.java +++ b/400_xowa/src/gplx/xowa/Xoa_ttl.java @@ -99,6 +99,11 @@ public class Xoa_ttl { // PAGE:en.w:http://en.wikipedia.org/wiki/Help:Link; REF. return url_encoder.Encode(this.Talk_txt()); } } + public byte[] Full_db_href() { // NOTE: returns Full_db but encodes for href; EX:Help:A_^ -> Help:A_%5E + synchronized (href_encoder) { // LOCK:static-obj + return href_encoder.Encode(this.Full_db()); + } + } public byte[] Subj_url() { synchronized (url_encoder) { // LOCK:static-obj return url_encoder.Encode(this.Subj_txt()); diff --git a/400_xowa/src/gplx/xowa/parsers/utils/Xop_redirect_mgr.java b/400_xowa/src/gplx/xowa/parsers/utils/Xop_redirect_mgr.java index 68fe02806..2ce8fda3e 100644 --- a/400_xowa/src/gplx/xowa/parsers/utils/Xop_redirect_mgr.java +++ b/400_xowa/src/gplx/xowa/parsers/utils/Xop_redirect_mgr.java @@ -78,25 +78,38 @@ public class Xop_redirect_mgr { if (!redirect_itm.By_wikitext()) continue; // ignore Special:Redirects else Special:Random will always show "redirected from"; DATE:2016-07-05 dirty = true; if (i != 0) redirect_bfr.Add(Bry_redirect_dlm); - byte[] ttl_unders = redirect_itm.Ttl().Full_db(); - byte[] ttl_spaces = Xoa_ttl.Replace_unders(ttl_unders); + byte[] display_ttl = Xoa_ttl.Replace_unders(redirect_itm.Ttl().Full_db()); redirect_bfr.Add(Gfh_bldr_.Bry__a_lhs_w_href) // '' - .Add(ttl_spaces) // 'PageA' + .Add(display_ttl) // 'PageA' .Add(Gfh_bldr_.Bry__a_rhs); // } if (!dirty) return Bry_.Empty; // ignore Special:Redirects else Special:Random will always show "redirected from"; DATE:2016-07-05 - Xol_msg_itm msg_itm = wiki.Lang().Msg_mgr().Itm_by_id_or_null(Xol_msg_itm_.Id_redirectedfrom); + + // build redirectedfrom span; NOTE: same implementation as MW; ISSUE#:642; DATE:2020-01-14; REF.MW:https://github.com/wikimedia/mediawiki/blob/master/includes/page/Article.php#L1115-L1117 Bry_bfr fmt_bfr = wiki.Utl__bfr_mkr().Get_b512(); - app.Tmp_fmtr().Fmt_(msg_itm.Val()).Bld_bfr_one(fmt_bfr, redirect_bfr); - redirect_bfr.Clear().Mkr_rls(); fmt_bfr.Mkr_rls(); + fmt_bfr.Add_str_a7(""); + byte[] redirectedfrom_val = wiki.Msg_mgr().Val_by_key_args(Key_redirectedfrom, redirect_bfr.To_bry()); + fmt_bfr.Add(redirectedfrom_val); + fmt_bfr.Add_str_a7(""); + + // release bfrs + redirect_bfr.Clear().Mkr_rls(); + fmt_bfr.Mkr_rls(); return fmt_bfr.To_bry_and_clear(); - } private static byte[] Bry_redirect_dlm = Bry_.new_a7(" <--- "), Bry_redirect_arg = Bry_.new_a7("?redirect=no"); + } + private static byte[] + Bry_redirect_dlm = Bry_.new_a7(" <--- ") + , Bry_redirect_arg = Bry_.new_a7("?redirect=no") + , Key_redirectedfrom = Bry_.new_a7("redirectedfrom") + ; } class Xop_redirect_mgr_ { public static int Get_kwd_end_or_end(byte[] src, int bgn, int end) { // get end of kwd diff --git a/400_xowa/src/gplx/xowa/parsers/utils/Xop_redirect_mgr_tst.java b/400_xowa/src/gplx/xowa/parsers/utils/Xop_redirect_mgr_tst.java index a56086f08..c07cd8347 100644 --- a/400_xowa/src/gplx/xowa/parsers/utils/Xop_redirect_mgr_tst.java +++ b/400_xowa/src/gplx/xowa/parsers/utils/Xop_redirect_mgr_tst.java @@ -44,8 +44,12 @@ public class Xop_redirect_mgr_tst { @Test public void Parse_1st_link_only() { // PURPOSE: do not take pipe from 2nd lnki; PAGE:en.w:Template:pp-semi; DATE:2015-11-14 fxt.Test_redirect("#REDIRECT [[Template:A]][[Category:B|b]]", "Template:A"); } - @Test public void Redirected_html() { // PURPOSE: "Redirected from" message was using "_" instead of " "; PAGE:en.w:Summer_Solstice; DATE:2015-12-29 - fxt.Test__redirected_html("A_B", "(Redirected from A B)"); + @Test public void Redirected_html() { + // PURPOSE: "Redirected from" message was using "_" instead of " "; PAGE:en.w:Summer_Solstice; DATE:2015-12-29 + fxt.Test__redirected_html("A_B", "(Redirected from A B)"); + + // PURPOSE: Title should be href_encoding; %5E instead of ^ + fxt.Test__redirected_html("^", "(Redirected from ^)"); } } class Xop_redirect_mgr_fxt {