mirror of
https://github.com/gnosygnu/xowa.git
synced 2024-10-27 20:34:16 +00:00
Mw_parse: Add Get_external_link_attribs
This commit is contained in:
parent
df45f141ca
commit
7bb09a8320
@ -21,6 +21,7 @@ import gplx.xowa.mws.parsers.prepros.*; import gplx.xowa.mws.parsers.headings.*;
|
||||
import gplx.xowa.mws.parsers.quotes.*; import gplx.xowa.mws.parsers.tables.*; import gplx.xowa.mws.parsers.hrs.*; import gplx.xowa.mws.parsers.nbsps.*;
|
||||
import gplx.xowa.mws.parsers.lnkes.*; import gplx.xowa.mws.parsers.lnkis.*; import gplx.xowa.mws.parsers.magiclinks.*; import gplx.xowa.mws.parsers.doubleunders.*;
|
||||
import gplx.xowa.mws.utls.*; import gplx.xowa.mws.linkers.*;
|
||||
import gplx.xowa.mws.htmls.*;
|
||||
public class Xomw_parser {
|
||||
private final Xomw_parser_ctx pctx = new Xomw_parser_ctx();
|
||||
private final Xomw_table_wkr table_wkr;
|
||||
@ -55,6 +56,8 @@ public class Xomw_parser {
|
||||
regex_space = new Xomw_regex_space();
|
||||
regex_boundary = new Xomw_regex_boundary(regex_space);
|
||||
regex_url = new Xomw_regex_url(regex_space);
|
||||
Atr__rel = Bry_.new_a7("rel");
|
||||
Get_external_link_rel = Bry_.new_a7("nofollow");
|
||||
}
|
||||
}
|
||||
|
||||
@ -65,7 +68,7 @@ public class Xomw_parser {
|
||||
this.lnke_wkr = new Xomw_lnke_wkr(this);
|
||||
this.lnki_wkr = new Xomw_lnki_wkr(this, holders, link_renderer, protocols_trie);
|
||||
this.heading_wkr_cbk = new Xomw_heading_cbk__html();
|
||||
this.magiclinks_wkr = new Xomw_magiclinks_wkr(sanitizer, linker, regex_boundary, regex_url);
|
||||
this.magiclinks_wkr = new Xomw_magiclinks_wkr(this, sanitizer, linker, regex_boundary, regex_url);
|
||||
}
|
||||
public void Init_by_wiki(Xowe_wiki wiki) {
|
||||
linker.Init_by_wiki(wiki.Lang().Lnki_trail_mgr().Trie());
|
||||
@ -263,6 +266,19 @@ public class Xomw_parser {
|
||||
strip_state.Add_general(marker, text);
|
||||
return marker;
|
||||
}
|
||||
public Xomwh_atr_mgr Get_external_link_attribs(Xomwh_atr_mgr atrs) {
|
||||
atrs.Clear();
|
||||
byte[] rel = Get_external_link_rel;
|
||||
|
||||
// XO.MW.UNSUPPORTED: XO will assume target is blank; MW will set target of "_blank", "_self", etc. depending on global opt
|
||||
// $target = $this->mOptions->getExternalLinkTarget();
|
||||
atrs.Add(Atr__rel, rel);
|
||||
return atrs;
|
||||
}
|
||||
// XO.MW.UNSUPPORTED: XO will always assume "nofollow"; MW will return "nofollow" if (a) ns is in ns-exception list or (b) domain is in domain-exception list;
|
||||
// if ($wgNoFollowLinks && !in_array($ns, $wgNoFollowNsExceptions) && !wfMatchesDomainList($url, $wgNoFollowDomainExceptions)
|
||||
public byte[] Get_external_link_rel;
|
||||
private static byte[] Atr__rel;
|
||||
private static final byte[] Bry__strip_state_item = Bry_.new_a7("-item-"), Bry__noparse = Bry_.new_a7("NOPARSE");
|
||||
private static final byte[] Bry__marker__noparse = Bry_.Add(Xomw_strip_state.Bry__marker__bgn, Bry__noparse);
|
||||
public static Btrie_slim_mgr Protocols__dflt() {
|
||||
|
@ -24,13 +24,15 @@ public class Xomw_lnke_wkr {// THREAD.UNSAFE: caching for repeated calls
|
||||
private final Bry_bfr tmp;
|
||||
private Btrie_slim_mgr protocol_trie; private final Btrie_rv trv = new Btrie_rv();
|
||||
private int autonumber;
|
||||
private final Xomw_parser parser;
|
||||
private final Xomw_linker linker;
|
||||
private final Xomwh_atr_mgr attribs = new Xomwh_atr_mgr();
|
||||
private Xomw_regex_url regex_url;
|
||||
private Xomw_regex_space regex_space;
|
||||
public Xomw_lnke_wkr(Xomw_parser mgr) {
|
||||
this.tmp = mgr.Tmp();
|
||||
this.linker = mgr.Linker();
|
||||
public Xomw_lnke_wkr(Xomw_parser parser) {
|
||||
this.parser = parser;
|
||||
this.tmp = parser.Tmp();
|
||||
this.linker = parser.Linker();
|
||||
}
|
||||
public void Init_by_wiki(Btrie_slim_mgr protocol_trie, Xomw_regex_url regex_url, Xomw_regex_space regex_space) {
|
||||
this.protocol_trie = protocol_trie;
|
||||
@ -187,9 +189,7 @@ public class Xomw_lnke_wkr {// THREAD.UNSAFE: caching for repeated calls
|
||||
// This means that users can paste URLs directly into the text
|
||||
// Funny characters like <EFBFBD> aren't valid in URLs anyway
|
||||
// This was changed in August 2004
|
||||
// TODO.XO:getExternalLinkAttribs
|
||||
attribs.Clear();
|
||||
linker.Make_external_link(bfr, Bry_.Mid(src, url_bgn, url_end), Bry_.Mid(src, text_bgn, text_end), Bool_.N, link_type, attribs, Bry_.Empty);
|
||||
linker.Make_external_link(bfr, Bry_.Mid(src, url_bgn, url_end), Bry_.Mid(src, text_bgn, text_end), Bool_.N, link_type, parser.Get_external_link_attribs(attribs), Bry_.Empty);
|
||||
|
||||
// Register link in the output Object.
|
||||
// Replace unnecessary URL escape codes with the referenced character
|
||||
@ -198,36 +198,6 @@ public class Xomw_lnke_wkr {// THREAD.UNSAFE: caching for repeated calls
|
||||
// $this->mOutput->addExternalLink( $pasteurized );
|
||||
}
|
||||
}
|
||||
// public function getExternalLinkAttribs( $url ) {
|
||||
// $attribs = [];
|
||||
// $rel = self::getExternalLinkRel( $url, $this->mTitle );
|
||||
//
|
||||
// $target = $this->mOptions->getExternalLinkTarget();
|
||||
// if ( $target ) {
|
||||
// $attribs['target'] = $target;
|
||||
// if ( !in_array( $target, [ '_self', '_parent', '_top' ] ) ) {
|
||||
// // T133507. New windows can navigate parent cross-origin.
|
||||
// // Including noreferrer due to lacking browser
|
||||
// // support of noopener. Eventually noreferrer should be removed.
|
||||
// if ( $rel !== '' ) {
|
||||
// $rel .= ' ';
|
||||
// }
|
||||
// $rel .= 'noreferrer noopener';
|
||||
// }
|
||||
// }
|
||||
// $attribs['rel'] = $rel;
|
||||
// return $attribs;
|
||||
// }
|
||||
// public static function getExternalLinkRel( $url = false, $title = null ) {
|
||||
// global $wgNoFollowLinks, $wgNoFollowNsExceptions, $wgNoFollowDomainExceptions;
|
||||
// $ns = $title ? $title->getNamespace() : false;
|
||||
// if ( $wgNoFollowLinks && !in_array( $ns, $wgNoFollowNsExceptions )
|
||||
// && !wfMatchesDomainList( $url, $wgNoFollowDomainExceptions )
|
||||
// ) {
|
||||
// return 'nofollow';
|
||||
// }
|
||||
// return null;
|
||||
// }
|
||||
|
||||
private static final byte[]
|
||||
Link_type__free = Bry_.new_a7("free")
|
||||
|
@ -27,14 +27,17 @@ public class Xomw_magiclinks_wkr {
|
||||
private static byte[] Tag__anch__rhs;
|
||||
private boolean[] url_separators;
|
||||
private static Xomw_regex_link_interrupt regex_link_interrupt;
|
||||
private final Xomw_parser parser;
|
||||
private final Xomw_regex_boundary regex_boundary;
|
||||
private final Xomw_regex_url regex_url;
|
||||
private final Xomw_sanitizer sanitizer;
|
||||
private final Xomw_linker linker;
|
||||
private final Xomwh_atr_mgr atrs = new Xomwh_atr_mgr();
|
||||
private byte[] page_title;
|
||||
|
||||
private static final byte Regex__anch = 1, Regex__elem = 2, Regex__free = 3;
|
||||
public Xomw_magiclinks_wkr(Xomw_sanitizer sanitizer, Xomw_linker linker, Xomw_regex_boundary regex_boundary, Xomw_regex_url regex_url) {
|
||||
public Xomw_magiclinks_wkr(Xomw_parser parser, Xomw_sanitizer sanitizer, Xomw_linker linker, Xomw_regex_boundary regex_boundary, Xomw_regex_url regex_url) {
|
||||
this.parser = parser;
|
||||
this.sanitizer = sanitizer;
|
||||
this.linker = linker;
|
||||
this.regex_boundary = regex_boundary;
|
||||
@ -262,7 +265,7 @@ public class Xomw_magiclinks_wkr {
|
||||
linker.Make_external_link(bfr, url
|
||||
, url // $this->getConverterLanguage()->markNoConversion($url, true),
|
||||
, true, Bry_.new_a7("free")
|
||||
, new Xomwh_atr_mgr() // $this->getExternalLinkAttribs($url)
|
||||
, parser.Get_external_link_attribs(atrs)
|
||||
, page_title);
|
||||
|
||||
// XO.MW.UNSUPPORTED.HOOK: registers link for processing by other extensions?
|
||||
|
@ -76,7 +76,8 @@ class Xomw_magiclinks_wkr__fxt {
|
||||
|
||||
Xomw_regex_space regex_space = new Xomw_regex_space();
|
||||
pctx.Init_by_page(wiki.Ttl_parse(Bry_.new_a7("Page_1")));
|
||||
this.wkr = new Xomw_magiclinks_wkr(new Xomw_sanitizer(), new Xomw_linker(), new Xomw_regex_boundary(regex_space), new Xomw_regex_url(regex_space));
|
||||
Xomw_parser parser = new Xomw_parser();
|
||||
this.wkr = new Xomw_magiclinks_wkr(parser, parser.Sanitizer(), parser.Linker(), new Xomw_regex_boundary(regex_space), new Xomw_regex_url(regex_space));
|
||||
wkr.Init_by_wiki();
|
||||
}
|
||||
public void Test__parse(String src_str, String expd) {Test__parse(Bool_.Y, src_str, expd);}
|
||||
|
Loading…
Reference in New Issue
Block a user