public void Special_gen(Xowe_wiki wiki, Xoae_page page, Xoa_url url, Xoa_ttl ttl) { if (cfg == null) cfg = (Wdata_itemByTitle_cfg) wiki.Appe().Special_mgr().Get_or_null(Wdata_itemByTitle_cfg.Key); // Special:ItemByTitle/enwiki/Earth -> www.wikidata.org/wiki/Q2 Gfo_usr_dlg usr_dlg = wiki.Appe().Usr_dlg(); byte[] site_bry = cfg.Site_default(); byte[] page_bry = Bry_.Empty; byte[] raw_bry = ttl.Full_txt_wo_qarg(); // EX: enwiki/Earth int args_len = url.Args().length; if (args_len > 0) { arg_hash.Load(url); site_bry = arg_hash.Get_val_bry_or(Arg_site, Bry_.Empty); page_bry = arg_hash.Get_val_bry_or(Arg_page, Bry_.Empty); } int site_bgn = Bry_finder.Find_fwd(raw_bry, Xoa_ttl.Subpage_spr); if (site_bgn != Bry_.NotFound) { // leaf arg is available int page_bgn = Bry_finder.Find_fwd(raw_bry, Xoa_ttl.Subpage_spr, site_bgn + 1); int raw_bry_len = raw_bry.length; if (page_bgn != Bry_.NotFound && page_bgn < raw_bry_len) { // pipe is found and not last char (EX: "enwiki/" is invalid site_bry = Bry_.Mid(raw_bry, site_bgn + 1, page_bgn); page_bry = Bry_.Mid(raw_bry, page_bgn + 1, raw_bry_len); } } Xoae_app app = wiki.Appe(); if (Bry_.Len_gt_0(site_bry) && Bry_.Len_gt_0(page_bry)) if (Navigate(usr_dlg, app, app.Wiki_mgr().Wdata_mgr(), page, site_bry, page_bry)) return; Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_k004(); html_fmtr.Bld_bfr_many( tmp_bfr, "Search for items by site and title", "Site", site_bry, "Page", page_bry, "Search"); page.Data_raw_(tmp_bfr.To_bry_and_rls()); page.Html_data().Html_restricted_n_(); // [[Special:]] pages allow all HTML }
public void Xtn_parse( Xowe_wiki wiki, Xop_ctx ctx, Xop_root_tkn root, byte[] src, Xop_xnde_tkn xnde) { Xox_xnde_.Xatr__set(wiki, this, xatrs_hash, src, xnde); this.html = Xop_parser_.Parse_text_to_html( wiki, ctx, ctx.Page(), ctx.Page().Ttl(), Bry_.Mid(src, xnde.Tag_open_end(), xnde.Tag_close_bgn()), false); Indicator_html_bldr html_bldr = ctx.Page().Html_data().Indicators(); if (this.name != null) html_bldr.Add(this); // NOTE: must do null-check b/c Add will use Name as key for hashtable }
public static byte[] Write_wdata_links(List_adp slink_list, Xowe_wiki wiki, Xoa_ttl ttl, Wdata_external_lang_links_data external_links_mgr) { try { switch (wiki.Domain_tid()) { case Xow_domain_type_.Tid_home: // home will never be in wikidata case Xow_domain_type_.Tid_wikidata: // wikidata will never be in wikidata return Qid_null; } Wdata_wiki_mgr wdata_mgr = wiki.Appe().Wiki_mgr().Wdata_mgr(); Wdata_doc doc = wdata_mgr.Pages_get(wiki, ttl); if (doc == null) return Qid_null; // no links boolean external_links_mgr_enabled = external_links_mgr.Enabled(); Ordered_hash links = doc.Slink_list(); Bry_bfr tmp_bfr = wiki.Appe().Utl__bfr_mkr().Get_k004(); Xow_wiki_abrv wiki_abrv = new Xow_wiki_abrv(); int len = links.Count(); for (int i = 0; i < len; i++) { Wdata_sitelink_itm slink = (Wdata_sitelink_itm)links.Get_at(i); byte[] xwiki_key = slink.Site(); Xow_wiki_abrv_.parse_(wiki_abrv, xwiki_key, 0, xwiki_key.length); if (wiki_abrv.Domain_tid() == Xow_wiki_abrv_.Tid_null) { wiki.Appe().Usr_dlg().Warn_many("", "", "unknown wiki in wikidata: ttl=~{0} wiki=~{1}", ttl.Page_db_as_str(), String_.new_u8(xwiki_key)); continue; } if (wiki_abrv.Domain_tid() != wiki.Domain_tid()) continue; // ignore wikis in a different domain; EX: looking at enwiki:Earth, and wikidata has dewikiquote; ignore dewikiquote; DATE:2014-06-21 byte[] lang_key = wiki_abrv.Lang_itm().Key(); if (external_links_mgr_enabled && external_links_mgr.Langs_hide(lang_key, 0, lang_key.length)) continue; tmp_bfr.Add(lang_key); tmp_bfr.Add_byte(Byte_ascii.Colon); tmp_bfr.Add(slink.Name()); Xoa_ttl slink_ttl = Xoa_ttl.parse_(wiki, tmp_bfr.Xto_bry_and_clear()); if (slink_ttl == null) continue; // invalid ttl Xow_xwiki_itm xwiki_itm = slink_ttl.Wik_itm(); if ( xwiki_itm == null // not a known xwiki; EX: [[zzz:abc]] || Bry_.Eq(xwiki_itm.Domain_bry(), wiki.Domain_bry()) // skip if same as self; i.e.: do not include links to enwiki if already in enwiki ) continue; slink.Page_ttl_(slink_ttl); slink_list.Add(slink); } tmp_bfr.Mkr_rls(); if (external_links_mgr_enabled && external_links_mgr.Sort()) slink_list.Sort_by(Xoa_ttl_sorter._); return doc.Qid(); } catch (Exception e) {Err_.Noop(e); return Qid_null;} }
public void Init_by_ctor(Wdata_toc_data toc_data, Xoapi_toggle_mgr toggle_mgr) { this.toc_data = toc_data.Itms_len_enable_n_(); this.toggle_itm = toggle_mgr.Get_or_new("wikidatawiki-json") .Html_toggle_hdr_cls_(Bry_.new_a7("overflow:auto;")); }
public class Wdata_itemByTitle_page implements Xows_page { private Xoa_url_arg_hash arg_hash = new Xoa_url_arg_hash(); private static final byte[] Arg_site = Bry_.new_a7("site"), Arg_page = Bry_.new_a7("page"); public Bry_fmtr Html_fmtr() { return html_fmtr; } private Wdata_itemByTitle_cfg cfg; public Xows_special_meta Special_meta() { return Xows_special_meta_.Itm__item_by_title; } public void Special_gen(Xowe_wiki wiki, Xoae_page page, Xoa_url url, Xoa_ttl ttl) { if (cfg == null) cfg = (Wdata_itemByTitle_cfg) wiki.Appe().Special_mgr().Get_or_null(Wdata_itemByTitle_cfg.Key); // Special:ItemByTitle/enwiki/Earth -> www.wikidata.org/wiki/Q2 Gfo_usr_dlg usr_dlg = wiki.Appe().Usr_dlg(); byte[] site_bry = cfg.Site_default(); byte[] page_bry = Bry_.Empty; byte[] raw_bry = ttl.Full_txt_wo_qarg(); // EX: enwiki/Earth int args_len = url.Args().length; if (args_len > 0) { arg_hash.Load(url); site_bry = arg_hash.Get_val_bry_or(Arg_site, Bry_.Empty); page_bry = arg_hash.Get_val_bry_or(Arg_page, Bry_.Empty); } int site_bgn = Bry_finder.Find_fwd(raw_bry, Xoa_ttl.Subpage_spr); if (site_bgn != Bry_.NotFound) { // leaf arg is available int page_bgn = Bry_finder.Find_fwd(raw_bry, Xoa_ttl.Subpage_spr, site_bgn + 1); int raw_bry_len = raw_bry.length; if (page_bgn != Bry_.NotFound && page_bgn < raw_bry_len) { // pipe is found and not last char (EX: "enwiki/" is invalid site_bry = Bry_.Mid(raw_bry, site_bgn + 1, page_bgn); page_bry = Bry_.Mid(raw_bry, page_bgn + 1, raw_bry_len); } } Xoae_app app = wiki.Appe(); if (Bry_.Len_gt_0(site_bry) && Bry_.Len_gt_0(page_bry)) if (Navigate(usr_dlg, app, app.Wiki_mgr().Wdata_mgr(), page, site_bry, page_bry)) return; Bry_bfr tmp_bfr = wiki.Utl__bfr_mkr().Get_k004(); html_fmtr.Bld_bfr_many( tmp_bfr, "Search for items by site and title", "Site", site_bry, "Page", page_bry, "Search"); page.Data_raw_(tmp_bfr.To_bry_and_rls()); page.Html_data().Html_restricted_n_(); // [[Special:]] pages allow all HTML } private static boolean Navigate( Gfo_usr_dlg usr_dlg, Xoae_app app, Wdata_wiki_mgr wdata_mgr, Xoae_page page, byte[] site_bry, byte[] page_bry) { page_bry = Xoa_app_.Utl__encoder_mgr() .Http_url() .Decode(page_bry); // NOTE: space is converted to + on postback to url; decode byte[] wiki_domain = Xow_wiki_alias.Parse_wmf_key(site_bry); if (wiki_domain == null) { usr_dlg.Warn_many("", "", "site_bry parse failed; site_bry:~{0}", String_.new_u8(site_bry)); return false; } Xowe_wiki wiki = app.Wiki_mgr().Get_by_key_or_make(wiki_domain); if (wiki == null) { usr_dlg.Warn_many( "", "", "wiki_domain does not exist; wiki_domain:~{0}", String_.new_u8(wiki_domain)); return false; } Xoa_ttl wdata_ttl = Xoa_ttl.parse_(wiki, page_bry); if (wdata_ttl == null) { usr_dlg.Warn_many("", "", "ttl is invalid; ttl:~{0}", String_.new_u8(page_bry)); return false; } Wdata_doc doc = wdata_mgr.Pages_get(wiki, wdata_ttl); if (doc == null) { usr_dlg.Warn_many( "", "", "ttl cannot be found in wikidata; ttl:~{0}", String_.new_u8(wdata_ttl.Raw())); return false; } byte[] qid_bry = doc.Qid(); Xoae_page qid_page = wdata_mgr.Wdata_wiki().Data_mgr().Redirect(page, qid_bry); if (qid_page.Missing()) { usr_dlg.Warn_many( "", "", "qid cannot be found in wikidata; qid:~{0}", String_.new_u8(qid_bry)); return false; } return true; } private static Bry_fmtr html_fmtr = Bry_fmtr.new_( String_.Concat_lines_nl( "<div id=\"mw-content-text\">", "<form method=\"get\" action=\"//www.wikidata.org/wiki/Special:ItemByTitle\" name=\"itembytitle\" id=\"wb-itembytitle-form1\">", "<fieldset>", "<legend>~{legend}</legend>", "<label for=\"wb-itembytitle-sitename\">~{site_lbl}:</label>", "<input id=\"wb-itembytitle-sitename\" size=\"12\" name=\"site\" value=\"~{site_val}\" accesskey=\"s\" />", "", "<label for=\"pagename\">~{page_lbl}:</label>", "<input id=\"pagename\" size=\"36\" class=\"wb-input-text\" name=\"page\" value=\"~{page_val}\" accesskey=\"p\" />", "", "<input id=\"wb-itembytitle-submit\" class=\"wb-input-button\" type=\"submit\" value=\"~{search_lbl}\" name=\"submit\" />", "</fieldset>", "</form>", "</div>", "<br>To change the default site, see <a href='/site/home/wiki/Help:Options/Wikibase'>Help:Options/Wikibase</a>"), "legend", "site_lbl", "site_val", "page_lbl", "page_val", "search_lbl"); }
public class Dpl_xnde implements Xox_xnde { private Dpl_itm itm = new Dpl_itm(); private List_adp pages = List_adp_.New(); public void Xatr__set( Xowe_wiki wiki, byte[] src, Mwh_atr_itm xatr, Object xatr_id_obj) {} // NOTE: <dynamicPageList> has no attributes public void Xtn_parse( Xowe_wiki wiki, Xop_ctx ctx, Xop_root_tkn root, byte[] src, Xop_xnde_tkn xnde) { itm.Parse(wiki, ctx, ctx.Page().Ttl().Full_txt_w_ttl_case(), src, xnde); Dpl_page_finder.Find_pages(pages, wiki, itm); if (itm.Sort_ascending() != Bool_.__byte) pages.Sort_by(new Dpl_page_sorter(itm)); } public void Xtn_write( Bry_bfr bfr, Xoae_app app, Xop_ctx ctx, Xoh_html_wtr html_wtr, Xoh_wtr_ctx hctx, Xoae_page wpg, Xop_xnde_tkn xnde, byte[] src) { Xowe_wiki wiki = ctx.Wiki(); Dpl_html_data html_mode = Dpl_html_data.new_(Dpl_itm_keys.Key_unordered); int itms_len = pages.Count(); if (itms_len == 0) { if (!itm.Suppress_errors()) bfr.Add_str_a7("No pages meet these criteria."); return; } int itms_bgn = 0; if (itm.Offset() != Int_.Min_value) { itms_bgn = itm.Offset(); } if (itm.Count() != Int_.Min_value && itms_bgn + itm.Count() < itms_len) { itms_len = itms_bgn + itm.Count(); } boolean show_ns = itm.Show_ns(); Bry_bfr tmp_bfr = Bry_bfr_.Get(); Xop_amp_mgr amp_mgr = wiki.Appe().Parser_amp_mgr(); try { bfr.Add(html_mode.Grp_bgn()).Add_byte_nl(); for (int i = itms_bgn; i < itms_len; i++) { Xowd_page_itm page = (Xowd_page_itm) pages.Get_at(i); Xoa_ttl ttl = Xoa_ttl.Parse(wiki, page.Ns_id(), page.Ttl_page_db()); byte[] ttl_page_txt = show_ns ? ttl.Full_txt_w_ttl_case() : ttl.Page_txt(); if (ttl_page_txt == null) continue; // NOTE: apparently DynamicPageList allows null pages; DATE:2013-07-22 switch (html_mode.Tid()) { case Dpl_html_data.Tid_list_ul: case Dpl_html_data.Tid_list_ol: bfr.Add(Xoh_consts.Space_2).Add(html_mode.Itm_bgn()).Add(Gfh_bldr_.Bry__a_lhs_w_href); bfr.Add_str_a7("/wiki/") .Add(Gfo_url_encoder_.Href.Encode(ttl.Full_db())) .Add_byte_quote(); // NOTE: Full_db to encode spaces as underscores; // PAGE:en.q:Wikiquote:Speedy_deletions DATE:2016-01-19 Gfh_atr_.Add( bfr, Gfh_atr_.Bry__title, Xoh_html_wtr_escaper.Escape( amp_mgr, tmp_bfr, ttl .Full_txt_w_ttl_case())); // NOTE: Full_txt b/c title always includes ns, // even if show_ns is off; // PAGE:en.b:Wikibooks:WikiProject DATE:2016-01-20 if (itm.No_follow()) bfr.Add(Bry_nofollow); bfr.Add_byte(Byte_ascii.Gt); Xoh_html_wtr_escaper.Escape( amp_mgr, bfr, ttl_page_txt, 0, ttl_page_txt.length, false, false); bfr.Add(Gfh_bldr_.Bry__a_rhs).Add(html_mode.Itm_end()).Add_byte_nl(); // TODO_OLD: // lnki_wtr.Clear().Href_wiki_(ttl).Title_(ttl).Nofollow_().Write_head(bfr).Write_text(bfr).Write_tail(bfr) break; default: break; } } bfr.Add(html_mode.Grp_end()).Add_byte_nl(); } finally { tmp_bfr.Mkr_rls(); } } private static byte[] Bry_nofollow = Bry_.new_a7(" rel=\"nofollow\""); }
public int compare(Object lhsObj, Object rhsObj) { Xoa_ttl lhs = (Xoa_ttl)lhsObj, rhs = (Xoa_ttl)rhsObj; return Bry_.Compare(lhs.Raw(), rhs.Raw()); }
class Hiero_html_wtr { private Hiero_phoneme_mgr phoneme_mgr; private Bry_bfr temp_bfr = Bry_bfr.reset_(255); public Hiero_html_wtr(Hiero_html_mgr mgr, Hiero_phoneme_mgr phoneme_mgr) { this.phoneme_mgr = phoneme_mgr; } public void Init_for_write(Xoh_wtr_ctx hctx) { this.hiero_img_dir = hctx.Mode_is_hdump() ? gplx.xowa.html.hdumps.abrvs.Xohd_abrv_.Key_hiero_dir : Hiero_xtn_mgr.Img_src_dir; } private byte[] hiero_img_dir = null; public void Hr(Bry_bfr bfr) { bfr.Add(Html_tag_.Hr_inl).Add_byte_nl(); } public void Tbl_eol(Bry_bfr bfr) { bfr.Add(Tbl_eol_bry); } public byte[] Td_height(int height) { return temp_bfr.Add(Option_bgn_bry) .Add_int_variable(height) .Add(Option_end_bry) .Xto_bry_and_clear(); } private static final byte[] Option_bgn_bry = Bry_.new_a7("height: "), Option_end_bry = Bry_.new_a7("px;"); public void Td(Bry_bfr bfr, byte[] glyph) { bfr.Add(Td_bgn_bry).Add(glyph).Add(Td_end_bry); } private static final byte[] Td_bgn_bry = Bry_.new_a7("\n <td>"), Td_end_bry = Bry_.new_a7("\n </td>"); public void Cartouche_bgn(Bry_bfr bfr) { bfr.Add(Cartouche_bgn_lhs_bry) .Add_int_variable((Hiero_html_mgr.Cartouche_width * Hiero_html_mgr.scale) / 100) .Add(Cartouche_bgn_rhs_bry); } private static final String Tbl_bgn_str = "<table class=\"mw-hiero-table\">"; private static final byte[] Cartouche_bgn_lhs_bry = Bry_.new_a7( String_.Concat_lines_nl_skip_last( "", " <td>", " " + Tbl_bgn_str, " <tr>", " <td class='mw-hiero-box' style='height: ")), Cartouche_bgn_rhs_bry = Bry_.new_a7( String_.Concat_lines_nl_skip_last( "px;'>", " </td>", " </tr>", " <tr>", " <td>", " " + Tbl_bgn_str, " <tr>")); public void Cartouche_end(Bry_bfr bfr) { bfr.Add(Cartouche_end_lhs_bry) .Add_int_variable((Hiero_html_mgr.Cartouche_width * Hiero_html_mgr.scale) / 100) .Add(Cartouche_end_rhs_bry); } private static final byte[] Cartouche_end_lhs_bry = Bry_.new_a7( String_.Concat_lines_nl_skip_last( "", " </tr>", " </table>", " </td>", " </tr>", " <tr>", " <td class='mw-hiero-box' style='height: ")), Cartouche_end_rhs_bry = Bry_.new_a7( String_.Concat_lines_nl_skip_last( "px;'>", " </td>", " </tr>", " </table>", " </td>")); public byte[] Cartouche_img( Xoh_wtr_ctx hctx, boolean bgn, byte[] glyph) { // render open / close cartouche; note that MW has two branches, but they are // both the same int height = (int) ((Hiero_html_mgr.Max_height * Hiero_html_mgr.scale) / 100); Hiero_phoneme_itm phoneme_itm = phoneme_mgr.Get_by_key(glyph); if (phoneme_itm == null) throw Err_.new_fmt_("missing phoneme: {0}", String_.new_u8(glyph)); byte[] code = phoneme_itm.Gardiner_code(); byte[] title = bgn ? Html_entity_.Lt_bry : Html_entity_.Gt_bry; return cartouche_img_fmtr.Bld_bry_many(temp_bfr, hiero_img_dir, code, height, title); } private static final Bry_fmtr cartouche_img_fmtr = Bry_fmtr.new_( String_.Concat( "\n <img src='~{path}hiero_~{code}.png'", " height='~{height}' title='~{title}'", " alt='~{title}' />"), "path", "code", "height", "title"); public void Tbl_inner(Bry_bfr html_bfr, Bry_bfr text_bfr) { html_bfr.Add(Tbl_inner_bgn) .Add_bfr_and_clear(text_bfr) .Add(Tbl_inner_end); // $html .= self::TABLE_START . "<tr>\n" . $tableContentHtml . // '</tr></table>'; } private static final byte[] Tbl_inner_bgn = Bry_.new_u8( String_.Concat_lines_nl_skip_last( " <table class=\"mw-hiero-table\">", " <tr>")), Tbl_inner_end = Bry_.new_u8(String_.Concat_lines_nl_skip_last("", " </tr>", " </table>")); public void Tbl_outer(Bry_bfr bfr, Bry_bfr html_bfr) { bfr.Add(Outer_tbl_bgn); bfr.Add_bfr_and_clear(html_bfr); bfr.Add(Outer_tbl_end); } private static final byte[] Outer_tbl_bgn = Bry_.new_a7( String_.Concat_lines_nl_skip_last( "<table class='mw-hiero-table mw-hiero-outer' dir='ltr'>", " <tr>", " <td>", "")), Outer_tbl_end = Bry_.new_a7( String_.Concat_lines_nl_skip_last("", " </td>", " </tr>", "</table>", "")); public byte[] Img_phoneme(byte[] img_cls, byte[] td_height, byte[] glyph_esc, byte[] code) { byte[] code_esc = Html_utl.Escape_html_as_bry(temp_bfr, code); byte[] img_title = temp_bfr.Add(code_esc) .Add_byte_space() .Add_byte(Byte_ascii.Brack_bgn) .Add(glyph_esc) .Add_byte(Byte_ascii.Brack_end) .Xto_bry_and_clear(); // "~{code} [~{glyph}]" return Img(img_cls, td_height, glyph_esc, code_esc, img_title); } public byte[] Img_file(byte[] img_cls, byte[] td_height, byte[] glyph_esc) { return Img(img_cls, td_height, glyph_esc, glyph_esc, glyph_esc); } private byte[] Img( byte[] img_cls, byte[] td_height, byte[] glyph, byte[] img_src_name, byte[] img_title) { byte[] img_src = Bld_img_src(hiero_img_dir, img_src_name); return glyph_img_fmtr.Bld_bry_many( temp_bfr, img_cls, Hiero_html_mgr.Image_margin, td_height, img_src, img_title, glyph); } private static final byte[] Tbl_eol_bry = Bry_.new_a7( String_.Concat_lines_nl_skip_last( "", " </tr>", " </table>", " " + Tbl_bgn_str, " <tr>")); private static final Bry_fmtr glyph_img_fmtr = Bry_fmtr.new_( "\n <img ~{img_cls}style='margin: ~{img_margin}px; ~{option}' src='~{img_src}' title='~{img_title}' alt='~{glyph}' />", "img_cls", "img_margin", "option", "img_src", "img_title", "glyph"); public byte[] Void(boolean half) { // render void int width = Hiero_html_mgr.Max_height; if (half) width /= 2; return void_fmtr.Bld_bry_many(temp_bfr, width); } private static final Bry_fmtr void_fmtr = Bry_fmtr.new_( String_.Concat_lines_nl_skip_last( "", " <table class=\"mw-hiero-table\" style=\"width: ~{width}px;\">", " <tr>", " <td> ", " </td>", " </tr>", " </table>"), "width"); private static byte[] Bld_img_src(byte[] hiero_img_dir, byte[] name) { return Bry_.Add(hiero_img_dir, Img_src_prefix, name, Img_src_ext); } private static final byte[] Img_src_prefix = Bry_.new_a7("hiero_"), Img_src_ext = Bry_.new_a7(".png"); }
private static byte[] Bld_img_src(byte[] hiero_img_dir, byte[] name) { return Bry_.Add(hiero_img_dir, Img_src_prefix, name, Img_src_ext); }